[
  {
    "path": ".dockerignore",
    "content": "# Git\n.git\n.gitignore\n.gitattributes\n.githooks\n\n# IDE\n.idea\n.vscode\n*.swp\n*.swo\n\n# Dependencies (will be installed during build)\n/vendor\n/node_modules\n\n# Build artifacts\n/public/build\n/public/hot\n/public/storage\n\n# Local environment files\n.env\n.env.local\n.env.*.local\n.env.backup\n\n# Testing\n.env.testing\n.env.ci\n/coverage\n/.phpunit.cache\n/phpunit.xml\n/phpunit.ci.xml\n/tests\n\n# Development tools\n.editorconfig\n.styleci.yml\ncompose.dev.yml\nMakefile\n\n# Documentation\n*.md\n!README.md\nCLAUDE.md\n\n# Cache and logs\n/storage/app/*\n!/storage/app/.gitignore\n!/storage/app/public\n/storage/framework/cache/*\n!/storage/framework/cache/.gitignore\n/storage/framework/sessions/*\n!/storage/framework/sessions/.gitignore\n/storage/framework/views/*\n!/storage/framework/views/.gitignore\n/storage/logs/*\n!/storage/logs/.gitignore\n/storage/clockwork\n/storage/pail\n\n# Laravel specific\n/bootstrap/cache/*.php\n\n# Other\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.DS_Store\nThumbs.db\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[*.{yml,yaml}]\nindent_size = 2\n\n[compose.{yml,dev.yml}]\nindent_size = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto eol=lf\n\n*.blade.php diff=html\n*.css diff=css\n*.html diff=html\n*.md diff=markdown\n*.php diff=php\n\n/.github export-ignore\nCHANGELOG.md export-ignore\n.styleci.yml export-ignore\n"
  },
  {
    "path": ".githooks/pre-commit",
    "content": "#!/bin/sh\ncomposer lint\ncomposer test\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/1-bug_report.yml",
    "content": "name: Bug report\ndescription: Report a problem you're experiencing with Relaticle\nlabels: [\"bug\", \"unconfirmed\"]\nprojects: [\"Relaticle/1\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Before opening a bug report, please search the existing issues (both open and closed).\n\n        ---\n\n        Thank you for taking the time to file a bug report. To address this bug as fast as possible, we need some information.\n\n  - type: input\n    id: relaticle-version\n    attributes:\n      label: Relaticle Version\n      description: What version of Relaticle are you running?\n      placeholder: v2.0.8\n    validations:\n      required: true\n\n  - type: input\n    id: php-version\n    attributes:\n      label: PHP Version\n      description: What PHP version are you using?\n      placeholder: 8.4.16\n    validations:\n      required: true\n\n  - type: dropdown\n    id: database\n    attributes:\n      label: Database\n      description: Which database are you using?\n      options:\n        - PostgreSQL 17+\n        - Other\n    validations:\n      required: true\n\n  - type: dropdown\n    id: deployment\n    attributes:\n      label: Deployment Method\n      description: How are you running Relaticle?\n      options:\n        - Laravel Herd (local)\n        - Docker (compose.yml)\n        - Manual installation\n        - Other\n\n  - type: textarea\n    id: description\n    attributes:\n      label: Problem description\n      description: What happened when you experienced the problem?\n    validations:\n      required: true\n\n  - type: textarea\n    id: expectation\n    attributes:\n      label: Expected behavior\n      description: What did you expect to happen instead?\n    validations:\n      required: true\n\n  - type: textarea\n    id: steps\n    attributes:\n      label: Steps to reproduce\n      description: |\n        Which steps do we need to take to reproduce the problem?\n        Any code examples need to be **as short as possible**, remove any code that is unrelated to the bug.\n      placeholder: |\n        1. Go to '...'\n        2. Click on '...'\n        3. Scroll down to '...'\n        4. See error\n    validations:\n      required: true\n\n  - type: textarea\n    id: logs\n    attributes:\n      label: Relevant log output\n      description: If applicable, provide relevant log output from `storage/logs/laravel.log` or browser console. No need for backticks here.\n      render: shell\n\n  - type: checkboxes\n    id: terms\n    attributes:\n      label: Code of Conduct\n      description: By submitting this issue, you agree to follow our Code of Conduct\n      options:\n        - label: I agree to follow this project's Code of Conduct\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Feature request or idea\n    url: https://github.com/Relaticle/relaticle/discussions/new?category=ideas\n    about: Share ideas for new features or improvements\n  - name: Support question\n    url: https://github.com/Relaticle/relaticle/discussions/new?category=q-a\n    about: Ask the community for help\n  - name: Discord Community\n    url: https://discord.gg/jSfdU9zxTt\n    about: Join our Discord server for quick help and community chat\n"
  },
  {
    "path": ".github/copilot-instructions.md",
    "content": "# Relaticle Code Review Guidelines\n\n## Repository Context\n\nMulti-tenant SaaS CRM with paying customers. Tenant isolation is the highest-priority concern — a single cross-tenant data leak is a critical security incident. The app uses Filament panels with a per-request `TeamScope` global scope applied via middleware, not in model boot. `Model::unguard()` is enabled globally.\n\nStack: PHP 8.4, Laravel 12, Filament 5, Livewire 4, Pest 4, Tailwind CSS 4.\n\nCI enforces: PHPStan level 7, Pint formatting, Rector, 99.9% type coverage, full test suite. CI does **not** enforce: code coverage percentage, mutation testing, or required reviewer count.\n\n## Tenant Isolation — Flag These\n\nThis app scopes data via `ApplyTenantScopes` middleware which registers `TeamScope` on: Company, People, Opportunity, Task, Note. Scoping happens per-request inside the Filament panel. Code running outside that middleware context (jobs, commands, API routes) has no automatic tenant filter.\n\nFlag any of these patterns:\n\n- `DB::table()` or `DB::select()` on a team-scoped table without a `WHERE team_id` clause\n- `withoutGlobalScopes()` that removes all scopes instead of only `SoftDeletingScope`\n- New Eloquent model on a team-scoped table missing the `HasTeam` trait\n- New model with `HasTeam` not added to `ApplyTenantScopes` middleware\n- New routes, Livewire components, or jobs that query team-scoped models without ensuring tenant context\n- Queries using `->toBase()` which strips all Eloquent scopes\n\n```php\n// Correct: only strips soft delete scope, TeamScope remains active\nreturn parent::getEloquentQuery()\n    ->withoutGlobalScopes([SoftDeletingScope::class]);\n\n// Dangerous: strips ALL scopes including TeamScope\nreturn parent::getEloquentQuery()\n    ->withoutGlobalScopes();\n```\n\n## Authorization — Flag These\n\nPolicies exist for Company, People, Opportunity, Task, Note. They check `$user->belongsToTeam($record->team)`.\n\n- New controller action or Livewire method without `$this->authorize()` or policy check\n- New Filament resource without a corresponding policy\n- Livewire actions that modify records without verifying the record belongs to the current team\n- Mass assignment from user-supplied request data — `Model::unguard()` is global, so `$fillable` is the only guard\n\n```php\n// Correct: authorize before acting\npublic function delete(string $id): void\n{\n    $record = Company::findOrFail($id);\n    $this->authorize('delete', $record);\n    $record->delete();\n}\n\n// Dangerous: no authorization, any authenticated user can delete any record\npublic function delete(string $id): void\n{\n    Company::findOrFail($id)->delete();\n}\n```\n\n## Data Safety — Flag These\n\n- Raw SQL with interpolated variables instead of parameter bindings (`?`)\n- `DB::table()->upsert()` or `DB::table()->insert()` on team-scoped tables without a `team_id` in the data payload\n- Export logic that doesn't filter data rows by `team_id`\n- New public routes without auth middleware\n- File uploads without MIME type and size validation\n- `env()` calls outside of `config/` files\n\n```php\n// Correct: parameterized binding\nDB::select('SELECT * FROM companies WHERE team_id = ?', [$teamId]);\n\n// Dangerous: interpolated variable in SQL\nDB::select(\"SELECT * FROM companies WHERE team_id = {$teamId}\");\n```\n\n## Test Coverage — Flag These\n\nNew features or modified behavior should include corresponding Pest tests. There is no coverage gate in CI, so this must be caught in review.\n\n- New Filament resource, Livewire component, or controller action without tests\n- Modified business logic without updated tests\n- Tests that only check the happy path — also cover validation failures and authorization denials\n- Tests that create records without scoping to a specific team (relying on implicit scope rather than explicit `->for($team)`)\n\n## PHP Standards\n\n- Every file: `declare(strict_types=1);`\n- Typed properties, explicit return types (including `void`), parameter type hints\n- Constructor property promotion: `public function __construct(private UserService $service) {}`\n- No empty zero-parameter constructors\n- Short nullable: `?string` not `string|null`\n- Always use curly braces, even single-line bodies\n- PHPDoc over inline comments; only comment genuinely complex logic\n- Enum keys: TitleCase (`FavoritePerson`, `Monthly`)\n\n## Code Style\n\n- Happy path last — handle errors first, return early\n- Avoid `else` — use early returns\n- String interpolation over concatenation\n- Descriptive names: `$failedChecks` not `$checks` with a comment\n\n## Laravel Conventions\n\n- `Model::query()` not `DB::` for team-scoped data\n- Eager load relationships to prevent N+1\n- Form Request classes for validation, not inline\n- `config()` not `env()` outside config files\n- Named routes with `route()`\n- Policies and gates for authorization\n- Queued jobs with `ShouldQueue` for expensive operations\n- `casts()` method, not `$casts` property\n- Middleware in `bootstrap/app.php`, not a Kernel class\n- **PostgreSQL exclusively** — no SQLite/MySQL compatibility layers, driver checks, or conditional SQL\n- Migrations: only `up()` methods — no `down()` methods\n\n## Filament 5\n\n- Form fields: `Filament\\Forms\\Components\\`\n- Layout (Grid, Section, Tabs): `Filament\\Schemas\\Components\\`\n- Infolist entries: `Filament\\Infolists\\Components\\`\n- Utilities (Get, Set): `Filament\\Schemas\\Components\\Utilities\\`\n- All actions: `Filament\\Actions\\` — no `Filament\\Tables\\Actions\\`\n- Icons: `Heroicon` enum, not strings\n- File visibility: `private` by default\n- `Grid`, `Section`, `Fieldset` no longer span all columns by default\n- `deferFilters()` is now the default table behavior\n\n## Livewire 4\n\n- `wire:model` is deferred by default; `wire:model.live` for real-time\n- Namespace: `App\\Livewire`\n- Events: `$this->dispatch()`\n- Validate and authorize in actions\n- `wire:key` in loops\n\n## Testing\n\n- All tests use Pest with factories and factory states\n- `mutates(ClassName::class)` to declare coverage intent\n- Named assertions: `assertForbidden()` not `assertStatus(403)`\n- Datasets for repetitive validation tests\n\n## Tailwind CSS 4\n\n- No deprecated utilities: `bg-opacity-*` is `bg-black/*`, `flex-shrink-*` is `shrink-*`\n- Gap utilities for spacing, not margins between siblings\n- `dark:` variants when existing components support dark mode\n- CSS-first config with `@theme`, not `tailwind.config.js`\n"
  },
  {
    "path": ".github/workflows/docker-publish.yml",
    "content": "name: Build and Push Docker Image\n\non:\n  push:\n    branches: [main]\n    tags: ['v*']\n  pull_request:\n    branches: [main]\n\nenv:\n  REGISTRY: ghcr.io\n  DOCKERHUB_IMAGE: manukminasyan/relaticle\n\njobs:\n  build:\n    runs-on: ${{ matrix.runner }}\n    permissions:\n      contents: read\n      packages: write\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - platform: linux/amd64\n            runner: ubuntu-latest\n          - platform: linux/arm64\n            runner: ubuntu-24.04-arm\n\n    steps:\n      - name: Prepare\n        run: |\n          platform=${{ matrix.platform }}\n          echo \"PLATFORM_PAIR=${platform//\\//-}\" >> $GITHUB_ENV\n          echo \"IMAGE_NAME=${GITHUB_REPOSITORY,,}\" >> $GITHUB_ENV\n\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Set up QEMU\n        uses: docker/setup-qemu-action@v3\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Log in to GitHub Container Registry\n        if: github.event_name != 'pull_request'\n        uses: docker/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Log in to Docker Hub\n        if: github.event_name != 'pull_request'\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Extract metadata\n        id: meta\n        uses: docker/metadata-action@v5\n        with:\n          images: |\n            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n            ${{ env.DOCKERHUB_IMAGE }}\n          tags: |\n            type=ref,event=branch\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}}\n            type=sha,prefix=\n            type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}\n\n      - name: Build and push by digest\n        id: build\n        uses: docker/build-push-action@v6\n        with:\n          context: .\n          target: production\n          platforms: ${{ matrix.platform }}\n          labels: ${{ steps.meta.outputs.labels }}\n          tags: |\n            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n            ${{ env.DOCKERHUB_IMAGE }}\n          cache-from: type=gha,scope=${{ matrix.platform }}\n          cache-to: type=gha,mode=max,scope=${{ matrix.platform }}\n          outputs: ${{ github.event_name != 'pull_request' && 'type=image,push-by-digest=true,name-canonical=true,push=true' || '' }}\n\n      - name: Export digest\n        if: github.event_name != 'pull_request'\n        run: |\n          mkdir -p ${{ runner.temp }}/digests\n          digest=\"${{ steps.build.outputs.digest }}\"\n          touch \"${{ runner.temp }}/digests/${digest#sha256:}\"\n\n      - name: Upload digest\n        if: github.event_name != 'pull_request'\n        uses: actions/upload-artifact@v4\n        with:\n          name: digests-${{ env.PLATFORM_PAIR }}\n          path: ${{ runner.temp }}/digests/*\n          if-no-files-found: error\n          retention-days: 1\n\n  merge:\n    runs-on: ubuntu-latest\n    if: github.event_name != 'pull_request'\n    needs: build\n    permissions:\n      contents: read\n      packages: write\n\n    steps:\n      - name: Prepare\n        run: echo \"IMAGE_NAME=${GITHUB_REPOSITORY,,}\" >> $GITHUB_ENV\n\n      - name: Download digests\n        uses: actions/download-artifact@v4\n        with:\n          path: ${{ runner.temp }}/digests\n          pattern: digests-*\n          merge-multiple: true\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Log in to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Log in to Docker Hub\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Extract metadata for GHCR\n        id: meta-ghcr\n        uses: docker/metadata-action@v5\n        with:\n          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}\n          tags: |\n            type=ref,event=branch\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}}\n            type=sha,prefix=\n            type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}\n\n      - name: Extract metadata for Docker Hub\n        id: meta-dockerhub\n        uses: docker/metadata-action@v5\n        with:\n          images: ${{ env.DOCKERHUB_IMAGE }}\n          tags: |\n            type=ref,event=branch\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}}\n            type=sha,prefix=\n            type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}\n\n      - name: Create manifest list and push to GHCR\n        working-directory: ${{ runner.temp }}/digests\n        env:\n          DOCKER_METADATA_OUTPUT_JSON: ${{ steps.meta-ghcr.outputs.json }}\n        run: |\n          docker buildx imagetools create $(jq -cr '.tags | map(\"-t \" + .) | join(\" \")' <<< \"$DOCKER_METADATA_OUTPUT_JSON\") \\\n            $(printf '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)\n\n      - name: Create manifest list and push to Docker Hub\n        working-directory: ${{ runner.temp }}/digests\n        env:\n          DOCKER_METADATA_OUTPUT_JSON: ${{ steps.meta-dockerhub.outputs.json }}\n        run: |\n          docker buildx imagetools create $(jq -cr '.tags | map(\"-t \" + .) | join(\" \")' <<< \"$DOCKER_METADATA_OUTPUT_JSON\") \\\n            $(printf '${{ env.DOCKERHUB_IMAGE }}@sha256:%s ' *)\n\n      - name: Inspect GHCR image\n        run: |\n          docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta-ghcr.outputs.version }}\n\n      - name: Inspect Docker Hub image\n        run: |\n          docker buildx imagetools inspect ${{ env.DOCKERHUB_IMAGE }}:${{ steps.meta-dockerhub.outputs.version }}\n"
  },
  {
    "path": ".github/workflows/filament-view-monitor-simple.yml",
    "content": "name: Monitor Filament View Updates (Simple)\n\non:\n  schedule:\n    # Run daily at 9 AM UTC\n    - cron: '0 9 * * *'\n  workflow_dispatch: # Allow manual trigger\n\njobs:\n  check-filament-updates:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: '8.4'\n          coverage: none\n\n      - name: Install dependencies\n        run: composer install --no-interaction --no-progress\n\n      - name: Check for Filament view changes\n        id: check\n        run: |\n          # Define the files we're monitoring\n          FILES=(\n            \"vendor/filament/filament/resources/views/components/layout/index.blade.php\"\n            \"vendor/filament/filament/resources/views/livewire/topbar.blade.php\"\n          )\n\n          # Calculate hash of current files\n          CURRENT_HASH=\"\"\n          for FILE in \"${FILES[@]}\"; do\n            if [ -f \"$FILE\" ]; then\n              CURRENT_HASH=\"${CURRENT_HASH}$(sha256sum \"$FILE\" | cut -d' ' -f1)\"\n            fi\n          done\n\n          # Hash the combined hashes\n          FINAL_HASH=$(echo -n \"$CURRENT_HASH\" | sha256sum | cut -d' ' -f1)\n\n          echo \"Current hash: $FINAL_HASH\"\n\n          # Compare with stored hash\n          HASH_FILE=\".github/filament-views-hash.txt\"\n\n          if [ -f \"$HASH_FILE\" ]; then\n            STORED_HASH=$(cat \"$HASH_FILE\")\n            echo \"Stored hash: $STORED_HASH\"\n\n            if [ \"$FINAL_HASH\" != \"$STORED_HASH\" ]; then\n              echo \"changes_detected=true\" >> $GITHUB_OUTPUT\n              echo \"🔔 Filament views have changed!\"\n\n              # Update the hash file\n              echo \"$FINAL_HASH\" > \"$HASH_FILE\"\n            else\n              echo \"changes_detected=false\" >> $GITHUB_OUTPUT\n              echo \"✅ No changes detected\"\n            fi\n          else\n            # First run - save the hash\n            echo \"$FINAL_HASH\" > \"$HASH_FILE\"\n            echo \"changes_detected=false\" >> $GITHUB_OUTPUT\n            echo \"📝 Initial hash saved\"\n          fi\n\n      - name: Get Filament version\n        id: version\n        if: steps.check.outputs.changes_detected == 'true'\n        run: |\n          VERSION=$(composer show filament/filament | grep \"versions\" | cut -d':' -f2 | xargs)\n          echo \"version=$VERSION\" >> $GITHUB_OUTPUT\n\n      - name: Create issue notification\n        if: steps.check.outputs.changes_detected == 'true'\n        uses: actions/github-script@v7\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          script: |\n            const today = new Date().toISOString().split('T')[0];\n\n            await github.rest.issues.create({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              title: `🔔 Filament Views Updated - ${today}`,\n              body: `## Filament view files have been updated!\n\n            **Filament Version:** ${{ steps.version.outputs.version }}\n            **Date:** ${today}\n\n            The following Filament view files that you've published have been updated in the package:\n            - \\`components/layout/index.blade.php\\`\n            - \\`livewire/topbar.blade.php\\`\n\n            ### What to do:\n            1. Check the [Filament changelog](https://github.com/filamentphp/filament/releases)\n            2. Review what changed in the views\n            3. Decide if you need to update your published versions\n\n            ### How to review changes:\n            \\`\\`\\`bash\n            # Compare your published views with the vendor versions\n            diff -u resources/views/vendor/filament-panels/components/layout/index.blade.php \\\\\n                    vendor/filament/filament/resources/views/components/layout/index.blade.php\n\n            diff -u resources/views/vendor/filament-panels/livewire/topbar.blade.php \\\\\n                    vendor/filament/filament/resources/views/livewire/topbar.blade.php\n            \\`\\`\\``,\n              labels: ['filament-update', 'vendor-views']\n            });\n\n            console.log('✅ Issue created for Filament view updates');\n\n      - name: Commit hash update\n        if: steps.check.outputs.changes_detected == 'true'\n        run: |\n          git config --local user.email \"github-actions[bot]@users.noreply.github.com\"\n          git config --local user.name \"github-actions[bot]\"\n          git add .github/filament-views-hash.txt\n          git diff --staged --quiet || git commit -m \"Update Filament views hash [skip ci]\"\n          git push\n"
  },
  {
    "path": ".github/workflows/tests.yml",
    "content": "name: Tests\n\non: [push]\n\njobs:\n  lint-and-static-analysis:\n    runs-on: ubuntu-latest\n    name: Code Quality Checks\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v5\n\n      - name: Cache Dependencies\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/.composer/cache\n            vendor\n          key: ${{ runner.os }}-php-8.4-composer-${{ hashFiles('composer.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-php-8.4-composer-\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: 8.4\n          extensions: json, dom, curl, libxml, mbstring, zip\n          tools: composer:v2\n\n      - name: Install PHP dependencies\n        run: composer install --no-interaction --no-progress --ansi --prefer-dist --optimize-autoloader\n\n      - name: Prepare Laravel Application\n        run: |\n          cp .env.ci .env\n          php artisan key:generate\n\n      - name: Run Lint\n        run: composer test:lint\n\n      - name: Run Refactor Check\n        run: composer test:refactor\n\n      - name: Run Type Coverage\n        run: composer test:type-coverage\n\n      - name: Run Static Analysis\n        run: composer test:types\n\n      - name: Architecture Tests\n        run: composer test:arch\n\n  tests:\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        php: [8.4]\n        shard: [1, 2, 3, 4, 5]\n\n    name: Tests (Shard ${{ matrix.shard }}/5)\n\n    services:\n      postgres:\n        image: postgres:alpine\n        env:\n          POSTGRES_DB: relaticle_testing\n          POSTGRES_PASSWORD: postgres\n          POSTGRES_PORT: 5432\n          POSTGRES_USER: postgres\n        options: >-\n          --health-cmd pg_isready\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n        ports:\n          - 5432:5432\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v5\n\n      - name: Cache Dependencies\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/.composer/cache\n            vendor\n          key: ${{ runner.os }}-php-8.4-composer-${{ hashFiles('composer.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-php-8.4-composer-\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: ${{ matrix.php }}\n          extensions: json, dom, curl, libxml, mbstring, zip\n          tools: composer:v2\n          coverage: none\n\n      - name: Set up Node & NPM\n        uses: actions/setup-node@v5\n        with:\n          node-version: '22.x'\n\n      - name: Setup Problem Matches\n        run: |\n          echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"\n          echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"\n\n      - name: Install PHP dependencies\n        run: composer install --no-interaction --no-progress --ansi --prefer-dist --optimize-autoloader\n\n      - name: Get NPM cache directory\n        id: npm-cache-dir\n        shell: bash\n        run: echo \"dir=$(npm config get cache)\" >> ${GITHUB_OUTPUT}\n\n      - name: Cache dependencies\n        id: npm-cache\n        uses: actions/cache@v4\n        with:\n          path: ${{ steps.npm-cache-dir.outputs.dir }}\n          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ runner.os }}-node-\n\n      - name: Install dependencies\n        run: npm ci\n\n      - name: Build dependencies\n        run: npm run build\n\n      - name: Prepare Laravel\n        run: |\n          cp .env.ci .env\n          php artisan key:generate\n\n      - name: Tests\n        run: composer test:pest:ci\n        env:\n          SHARD: ${{ matrix.shard }}/5\n\n  browser-tests:\n    runs-on: ubuntu-latest\n    name: Browser Tests\n\n    services:\n      postgres:\n        image: postgres:alpine\n        env:\n          POSTGRES_DB: relaticle_testing\n          POSTGRES_PASSWORD: postgres\n          POSTGRES_PORT: 5432\n          POSTGRES_USER: postgres\n        options: >-\n          --health-cmd pg_isready\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n        ports:\n          - 5432:5432\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v5\n\n      - name: Cache Dependencies\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/.composer/cache\n            vendor\n          key: ${{ runner.os }}-php-8.4-composer-${{ hashFiles('composer.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-php-8.4-composer-\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: 8.4\n          extensions: json, dom, curl, libxml, mbstring, zip\n          tools: composer:v2\n          coverage: none\n\n      - name: Set up Node & NPM\n        uses: actions/setup-node@v5\n        with:\n          node-version: '22.x'\n\n      - name: Install PHP dependencies\n        run: composer install --no-interaction --no-progress --ansi --prefer-dist --optimize-autoloader\n\n      - name: Get NPM cache directory\n        id: npm-cache-dir\n        shell: bash\n        run: echo \"dir=$(npm config get cache)\" >> ${GITHUB_OUTPUT}\n\n      - name: Cache NPM dependencies\n        uses: actions/cache@v4\n        with:\n          path: ${{ steps.npm-cache-dir.outputs.dir }}\n          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ runner.os }}-node-\n\n      - name: Prepare Laravel\n        run: |\n          cp .env.ci .env\n          php artisan key:generate\n\n      - name: Install NPM dependencies\n        run: npm ci\n\n      - name: Build assets\n        run: npm run build\n\n      - name: Install Playwright\n        run: npx playwright install --with-deps chromium\n\n      - name: Browser Tests\n        run: vendor/bin/pest tests/Browser/ --configuration phpunit.ci.xml\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.superpowers\n/.phpunit.cache\n.scribe\n/node_modules\n/public/build\n/public/hot\n/public/storage\n/public/sitemap.xml\n/storage/*.key\n/vendor\n.env\n.env.backup\n.env.production\n.phpactor.json\n.phpunit.result.cache\n/coverage-html/\ncoverage.xml\nHomestead.json\nHomestead.yaml\nauth.json\nnpm-debug.log\nyarn-error.log\nAGENTS.md\nboost.json\n.mcp.json\n/.ai/*\n!/.ai/guidelines/\n/.ai/guidelines/*\n!/.ai/guidelines/relaticle/\n/.github/skills\n/.fleet\n/.idea\n/.vscode\n/.claude\n/.superset\n/.cursor\n/.junie\n/.playwright-mcp\n/docs\napi.json\n.scribe/\n/public/vendor/scribe\n/resources/views/scribe\n/storage/app/scribe\n/tests/Feature/Scribe\n.context\npolyscope.json\n/bin/setup-preview.sh\n.gstack/\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "<laravel-boost-guidelines>\n=== .ai/core rules ===\n\n# Project\n\nThis is production code for a commercial SaaS product with paying customers.\nBugs directly impact revenue and user trust.\n\nTreat every change like it's going through senior code review:\n\n- No lazy shortcuts or placeholder code\n- Handle errors and edge cases properly\n- Write code that won't embarrass you in 6 months\n\n## Database\n\n- This project uses **PostgreSQL exclusively** — do not add SQLite/MySQL compatibility layers, driver checks, or conditional SQL\n- Migrations must only have `up()` methods — do not write `down()` methods\n\n## Pre-Commit Quality Checks\n\nBefore committing any changes, always run these checks in order:\n\n1. `vendor/bin/pint --dirty --format agent` — fix code style\n2. `vendor/bin/rector --dry-run` — if rector suggests changes, apply them with `vendor/bin/rector`\n3. `vendor/bin/phpstan analyse` — ensure no new static analysis errors\n4. `composer test:type-coverage` — ensure type coverage stays at or above 99.9%\n5. `php artisan test --compact` — run relevant tests (use `--filter` for targeted runs)\n\nDo not add new PHPStan errors to the baseline without approval. All parameters and return types must be explicitly typed — untyped closures/parameters will fail type coverage in CI.\n\n## Icons (Remix Icon)\n\n- **Brand/social icons** (GitHub, Discord, Twitter, LinkedIn) → always `fill` variant\n- **UI/functional icons** (arrows, chevrons, checks, close) → always `line` variant\n- **Feature/section icons** → `line` variant, stay consistent within a section\n- **Status/emphasis icons** (success checkmarks, alerts) → `fill` variant\n\n## Scheduling\n\n- All scheduled commands go in `bootstrap/app.php` via `withSchedule()` — not in `routes/console.php`\n\n## Actions\n\n- All write operations (create, update, delete) must go through action classes in `app/Actions/` -- never inline business logic in controllers, MCP tools, Livewire components, or Filament resources\n- Actions are the single source of truth for business logic and side effects (notifications, syncs, etc.)\n- Filament CRUD may use native `CreateAction`/`EditAction` when the action only does `Model::create()`/`->update()` with no extra logic -- but side effects (e.g., notifications) must still be triggered via `->after()` hooks calling the appropriate action\n- When reviewing or refactoring code, extract inline business logic into action classes\n\n## Testing\n\n- Do not write isolated unit tests for action classes, services, or similar internal code -- test them through their real entry points (API endpoints, Filament resources, Livewire components). Unit tests for internal classes create maintenance burden without catching real bugs.\n- Use `mutates(ClassName::class)` in test files to declare which source classes each test covers\n- Run mutation testing per-class: `php -d xdebug.mode=coverage vendor/bin/pest --mutate --class='App\\MyClass' tests/path/`\n- No enforced `--min` threshold — use mutation testing as a code review tool, not a CI gate\n- Use `$this->travelTo()` in tests that depend on day-of-week or weekly intervals to avoid flaky boundary failures\n\n## Custom Fields\n\n- Models using the `UsesCustomFields` trait handle `custom_fields` automatically — do NOT manually extract, strip, or call `saveCustomFields()` in actions\n- The trait merges `'custom_fields'` into `$fillable`, intercepts it during `saving`, and persists values during `saved` — just pass `custom_fields` through in the `$data` array to `create()`/`update()`\n- Tenant context for the custom-fields package is set in `SetApiTeamContext` middleware via `TenantContextService::setTenantId()` — actions don't need `withTenant()` wrappers\n- In Filament, the package's own `SetTenantContextMiddleware` handles tenant context — no action-level code needed there either\n- `CustomFieldValidationService` intentionally uses explicit `where('tenant_id', ...)` with `withoutGlobalScopes()` — this is defensive and correct, don't change it to rely on ambient state\n\n=== .ai/v4 rules ===\n\n## Filament 4\n\n### Important Version 4 Changes\n\n- File visibility is now `private` by default.\n- The `deferFilters` method from Filament v3 is now the default behavior in Filament v4, so users must click a button before the filters are applied to the table. To disable this behavior, you can use the `deferFilters(false)` method.\n- The `Grid`, `Section`, and `Fieldset` layout components no longer span all columns by default.\n- The `all` pagination page method is not available for tables by default.\n- All action classes extend `Filament\\Actions\\Action`. No action classes exist in `Filament\\Tables\\Actions`.\n- The `Form` & `Infolist` layout components have been moved to `Filament\\Schemas\\Components`, for example `Grid`, `Section`, `Fieldset`, `Tabs`, `Wizard`, etc.\n- A new `Repeater` component for Forms has been added.\n- Icons now use the `Filament\\Support\\Icons\\Heroicon` Enum by default. Other options are available and documented.\n\n### Organize Component Classes Structure\n\n- Schema components: `Schemas/Components/`\n- Table columns: `Tables/Columns/`\n- Table filters: `Tables/Filters/`\n- Actions: `Actions/`\n\n### Form Components in v4\n\n- Use `Filament\\Forms\\Components` for form fields like TextInput, Select, Textarea, etc.\n- Use `Filament\\Schemas\\Components` for layout components like Grid, Section, Fieldset, Tabs, Wizard.\n\n### Actions in v4\n\n```php\nuse Filament\\Actions\\Action;\n\nAction::make('send')\n    ->label('Send Email')\n    ->icon(Heroicon::OutlinedPaperAirplane)\n    ->requiresConfirmation()\n    ->action(fn (Model $record) => $record->sendEmail());\n```\n\n### Table Actions in v4\n\n```php\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\EditAction;\n\npublic static function table(Table $table): Table\n{\n    return $table\n        ->actions([\n            EditAction::make(),\n            DeleteAction::make(),\n            Action::make('approve')\n                ->action(fn (Model $record) => $record->approve()),\n        ]);\n}\n```\n\n### Icons in v4\n\n```php\nuse Filament\\Support\\Icons\\Heroicon;\n\n// Instead of string icons\n->icon(Heroicon::OutlinedHome)\n->icon(Heroicon::SolidUser)\n```\n\n### Testing Filament 4 Resources\n\n```php\nuse function Pest\\Livewire\\livewire;\n\nit('can list records', function () {\n    $records = Model::factory()->count(5)->create();\n\n    livewire(ListModels::class)\n        ->assertCanSeeTableRecords($records);\n});\n\nit('can create a record', function () {\n    livewire(CreateModel::class)\n        ->fillForm([\n            'name' => 'Test Name',\n        ])\n        ->call('create')\n        ->assertHasNoFormErrors();\n\n    expect(Model::query()->where('name', 'Test Name')->exists())->toBeTrue();\n});\n\nit('can edit a record', function () {\n    $record = Model::factory()->create();\n\n    livewire(EditModel::class, ['record' => $record->getRouteKey()])\n        ->fillForm([\n            'name' => 'Updated Name',\n        ])\n        ->call('save')\n        ->assertHasNoFormErrors();\n\n    expect($record->refresh()->name)->toBe('Updated Name');\n});\n```\n\n=== foundation rules ===\n\n# Laravel Boost Guidelines\n\nThe Laravel Boost guidelines are specifically curated by Laravel maintainers for this application. These guidelines should be followed closely to ensure the best experience when building Laravel applications.\n\n## Foundational Context\n\nThis application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions.\n\n- php - 8.4\n- filament/filament (FILAMENT) - v5\n- laravel/fortify (FORTIFY) - v1\n- laravel/framework (LARAVEL) - v12\n- laravel/horizon (HORIZON) - v5\n- laravel/mcp (MCP) - v0\n- laravel/prompts (PROMPTS) - v0\n- laravel/sanctum (SANCTUM) - v4\n- laravel/socialite (SOCIALITE) - v5\n- livewire/livewire (LIVEWIRE) - v4\n- larastan/larastan (LARASTAN) - v3\n- laravel/boost (BOOST) - v2\n- laravel/pail (PAIL) - v1\n- laravel/pint (PINT) - v1\n- laravel/sail (SAIL) - v1\n- pestphp/pest (PEST) - v4\n- phpunit/phpunit (PHPUNIT) - v12\n- rector/rector (RECTOR) - v2\n- tailwindcss (TAILWINDCSS) - v4\n\n## Skills Activation\n\nThis project has domain-specific skills available. You MUST activate the relevant skill whenever you work in that domain—don't wait until you're stuck.\n\n- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.\n- `configuring-horizon` — Use this skill whenever the user mentions Horizon by name in a Laravel context. Covers the full Horizon lifecycle: installing Horizon (horizon:install, Sail setup), configuring config/horizon.php (supervisor blocks, queue assignments, balancing strategies, minProcesses/maxProcesses), fixing the dashboard (authorization via Gate::define viewHorizon, blank metrics, horizon:snapshot scheduling), and troubleshooting production issues (worker crashes, timeout chain ordering, LongWaitDetected notifications, waits config). Also covers job tagging and silencing. Do not use for generic Laravel queues without Horizon, SQS or database drivers, standalone Redis setup, Linux supervisord, Telescope, or job batching.\n- `mcp-development` — Use this skill for Laravel MCP development only. Trigger when creating or editing MCP tools, resources, prompts, or servers in Laravel projects. Covers: artisan make:mcp-* generators, mcp:inspector, routes/ai.php, Tool/Resource/Prompt classes, schema validation, shouldRegister(), OAuth setup, URI templates, read-only attributes, and MCP debugging. Do not use for non-Laravel MCP projects or generic AI features without MCP.\n- `socialite-development` — Manages OAuth social authentication with Laravel Socialite. Activate when adding social login providers; configuring OAuth redirect/callback flows; retrieving authenticated user details; customizing scopes or parameters; setting up community providers; testing with Socialite fakes; or when the user mentions social login, OAuth, Socialite, or third-party authentication.\n- `livewire-development` — Use for any task or question involving Livewire. Activate if user mentions Livewire, wire: directives, or Livewire-specific concepts like wire:model, wire:click, wire:sort, or islands, invoke this skill. Covers building new components, debugging reactivity issues, real-time form validation, drag-and-drop, loading states, migrating from Livewire 3 to 4, converting component formats (SFC/MFC/class-based), and performance optimization. Do not use for non-Livewire reactive UI (React, Vue, Alpine-only, Inertia.js) or standard Laravel forms without Livewire.\n- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit, tests/Browser), or needs browser testing, smoke testing multiple pages for JS errors, or architecture tests. Covers: it()/expect() syntax, datasets, mocking, browser testing (visit/click/fill), smoke testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 4 features. Do not use for factories, seeders, migrations, controllers, models, or non-test PHP code.\n- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.\n- `custom-fields-development` — Adds dynamic custom fields to Eloquent models without migrations using Filament integration. Use when adding the UsesCustomFields trait to models, integrating custom fields in Filament forms/tables/infolists, configuring field types, working with field validation, or managing feature flags for conditional visibility, encryption, and multi-tenancy.\n- `flowforge-development` — Builds Kanban board interfaces for Eloquent models with drag-and-drop functionality. Use when creating board pages, configuring columns and cards, implementing drag-and-drop positioning, working with Filament board pages or standalone Livewire boards, or troubleshooting position-related issues.\n- `laravel-query-builder` — Build filtered, sorted, and included API endpoints using spatie/laravel-query-builder. Activates when working with QueryBuilder, AllowedFilter, AllowedSort, AllowedInclude, or when the user mentions query parameters, API filtering, sorting, includes, or spatie/laravel-query-builder.\n- `spatie-laravel-php-standards` — Apply Spatie's Laravel and PHP coding standards for any task that creates, edits, reviews, refactors, or formats Laravel/PHP code or Blade templates; use for controllers, Eloquent models, routes, config, validation, migrations, tests, and related files to align with Laravel conventions and PSR-12.\n\n## Conventions\n\n- You must follow all existing code conventions used in this application. When creating or editing a file, check sibling files for the correct structure, approach, and naming.\n- Use descriptive names for variables and methods. For example, `isRegisteredForDiscounts`, not `discount()`.\n- Check for existing components to reuse before writing a new one.\n\n## Verification Scripts\n\n- Do not create verification scripts or tinker when tests cover that functionality and prove they work. Unit and feature tests are more important.\n\n## Application Structure & Architecture\n\n- Stick to existing directory structure; don't create new base folders without approval.\n- Do not change the application's dependencies without approval.\n\n## Frontend Bundling\n\n- If the user doesn't see a frontend change reflected in the UI, it could mean they need to run `npm run build`, `npm run dev`, or `composer run dev`. Ask them.\n\n## Documentation Files\n\n- You must only create documentation files if explicitly requested by the user.\n\n## Replies\n\n- Be concise in your explanations - focus on what's important rather than explaining obvious details.\n\n=== boost rules ===\n\n# Laravel Boost\n\n## Tools\n\n- Laravel Boost is an MCP server with tools designed specifically for this application. Prefer Boost tools over manual alternatives like shell commands or file reads.\n- Use `database-query` to run read-only queries against the database instead of writing raw SQL in tinker.\n- Use `database-schema` to inspect table structure before writing migrations or models.\n- Use `get-absolute-url` to resolve the correct scheme, domain, and port for project URLs. Always use this before sharing a URL with the user.\n- Use `browser-logs` to read browser logs, errors, and exceptions. Only recent logs are useful, ignore old entries.\n\n## Searching Documentation (IMPORTANT)\n\n- Always use `search-docs` before making code changes. Do not skip this step. It returns version-specific docs based on installed packages automatically.\n- Pass a `packages` array to scope results when you know which packages are relevant.\n- Use multiple broad, topic-based queries: `['rate limiting', 'routing rate limiting', 'routing']`. Expect the most relevant results first.\n- Do not add package names to queries because package info is already shared. Use `test resource table`, not `filament 4 test resource table`.\n\n### Search Syntax\n\n1. Use words for auto-stemmed AND logic: `rate limit` matches both \"rate\" AND \"limit\".\n2. Use `\"quoted phrases\"` for exact position matching: `\"infinite scroll\"` requires adjacent words in order.\n3. Combine words and phrases for mixed queries: `middleware \"rate limit\"`.\n4. Use multiple queries for OR logic: `queries=[\"authentication\", \"middleware\"]`.\n\n## Artisan\n\n- Run Artisan commands directly via the command line (e.g., `php artisan route:list`). Use `php artisan list` to discover available commands and `php artisan [command] --help` to check parameters.\n- Inspect routes with `php artisan route:list`. Filter with: `--method=GET`, `--name=users`, `--path=api`, `--except-vendor`, `--only-vendor`.\n- Read configuration values using dot notation: `php artisan config:show app.name`, `php artisan config:show database.default`. Or read config files directly from the `config/` directory.\n- To check environment variables, read the `.env` file directly.\n\n## Tinker\n\n- Execute PHP in app context for debugging and testing code. Do not create models without user approval, prefer tests with factories instead. Prefer existing Artisan commands over custom tinker code.\n- Always use single quotes to prevent shell expansion: `php artisan tinker --execute 'Your::code();'`\n  - Double quotes for PHP strings inside: `php artisan tinker --execute 'User::where(\"active\", true)->count();'`\n\n=== php rules ===\n\n# PHP\n\n- Always declare `declare(strict_types=1);` at the top of every `.php` file.\n- Always use curly braces for control structures, even for single-line bodies.\n- Use PHP 8 constructor property promotion: `public function __construct(public GitHub $github) { }`. Do not leave empty zero-parameter `__construct()` methods unless the constructor is private.\n- Use explicit return type declarations and type hints for all method parameters: `function isAccessible(User $user, ?string $path = null): bool`\n- Use TitleCase for Enum keys: `FavoritePerson`, `BestLake`, `Monthly`.\n- Prefer PHPDoc blocks over inline comments. Only add inline comments for exceptionally complex logic.\n- Use array shape type definitions in PHPDoc blocks.\n\n=== herd rules ===\n\n# Laravel Herd\n\n- The application is served by Laravel Herd at `https?://[kebab-case-project-dir].test`. Use the `get-absolute-url` tool to generate valid URLs. Never run commands to serve the site. It is always available.\n- Use the `herd` CLI to manage services, PHP versions, and sites (e.g. `herd sites`, `herd services:start <service>`, `herd php:list`). Run `herd list` to discover all available commands.\n\n=== tests rules ===\n\n# Test Enforcement\n\n- Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass.\n- Run the minimum number of tests needed to ensure code quality and speed. Use `php artisan test --compact` with a specific filename or filter.\n\n=== laravel/core rules ===\n\n# Do Things the Laravel Way\n\n- Use `php artisan make:` commands to create new files (i.e. migrations, controllers, models, etc.). You can list available Artisan commands using `php artisan list` and check their parameters with `php artisan [command] --help`.\n- If you're creating a generic PHP class, use `php artisan make:class`.\n- Pass `--no-interaction` to all Artisan commands to ensure they work without user input. You should also pass the correct `--options` to ensure correct behavior.\n\n### Model Creation\n\n- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things, using `php artisan make:model --help` to check the available options.\n\n## APIs & Eloquent Resources\n\n- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.\n\n## URL Generation\n\n- When generating links to other pages, prefer named routes and the `route()` function.\n\n## Testing\n\n- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model.\n- Faker: Use methods such as `$this->faker->word()` or `fake()->randomDigit()`. Follow existing conventions whether to use `$this->faker` or `fake()`.\n- When creating tests, make use of `php artisan make:test [options] {name}` to create a feature test, and pass `--unit` to create a unit test. Most tests should be feature tests.\n\n## Vite Error\n\n- If you receive an \"Illuminate\\Foundation\\ViteException: Unable to locate file in Vite manifest\" error, you can run `npm run build` or ask the user to run `npm run dev` or `composer run dev`.\n\n=== laravel/v12 rules ===\n\n# Laravel 12\n\n- CRITICAL: ALWAYS use `search-docs` tool for version-specific Laravel documentation and updated code examples.\n- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.\n\n## Laravel 12 Structure\n\n- In Laravel 12, middleware are no longer registered in `app/Http/Kernel.php`.\n- Middleware are configured declaratively in `bootstrap/app.php` using `Application::configure()->withMiddleware()`.\n- `bootstrap/app.php` is the file to register middleware, exceptions, and routing files.\n- `bootstrap/providers.php` contains application specific service providers.\n- The `app/Console/Kernel.php` file no longer exists; use `bootstrap/app.php` or `routes/console.php` for console configuration.\n- Console commands in `app/Console/Commands/` are automatically available and do not require manual registration.\n\n## Database\n\n- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.\n- Laravel 12 allows limiting eagerly loaded records natively, without external packages: `$query->latest()->limit(10);`.\n\n### Models\n\n- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.\n\n=== livewire/core rules ===\n\n# Livewire\n\n- Livewire allow to build dynamic, reactive interfaces in PHP without writing JavaScript.\n- You can use Alpine.js for client-side interactions instead of JavaScript frameworks.\n- Keep state server-side so the UI reflects it. Validate and authorize in actions as you would in HTTP requests.\n\n=== pint/core rules ===\n\n# Laravel Pint Code Formatter\n\n- If you have modified any PHP files, you must run `vendor/bin/pint --dirty --format agent` before finalizing changes to ensure your code matches the project's expected style.\n- Do not run `vendor/bin/pint --test --format agent`, simply run `vendor/bin/pint --format agent` to fix any formatting issues.\n\n=== pest/core rules ===\n\n## Pest\n\n- This project uses Pest for testing. Create tests: `php artisan make:test --pest {name}`.\n- Run tests: `php artisan test --compact` or filter: `php artisan test --compact --filter=testName`.\n- Do NOT delete tests without approval.\n\n=== filament/filament rules ===\n\n## Filament\n\n- Filament is used by this application. Follow the existing conventions for how and where it is implemented.\n- Filament is a Server-Driven UI (SDUI) framework for Laravel that lets you define user interfaces in PHP using structured configuration objects. Built on Livewire, Alpine.js, and Tailwind CSS.\n- Use the `search-docs` tool for official documentation on Artisan commands, code examples, testing, relationships, and idiomatic practices. If `search-docs` is unavailable, refer to https://filamentphp.com/docs.\n\n### Artisan\n\n- Always use Filament-specific Artisan commands to create files. Find available commands with the `list-artisan-commands` tool, or run `php artisan --help`.\n- Always inspect required options before running a command, and always pass `--no-interaction`.\n\n### Patterns\n\nAlways use static `make()` methods to initialize components. Most configuration methods accept a `Closure` for dynamic values.\n\nUse `Get $get` to read other form field values for conditional logic:\n\n<code-snippet name=\"Conditional form field visibility\" lang=\"php\">\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Components\\Utilities\\Get;\n\nSelect::make('type')\n    ->options(CompanyType::class)\n    ->required()\n    ->live(),\n\nTextInput::make('company_name')\n    ->required()\n    ->visible(fn (Get $get): bool => $get('type') === 'business'),\n\n</code-snippet>\n\nUse `state()` with a `Closure` to compute derived column values:\n\n<code-snippet name=\"Computed table column value\" lang=\"php\">\nuse Filament\\Tables\\Columns\\TextColumn;\n\nTextColumn::make('full_name')\n    ->state(fn (User $record): string => \"{$record->first_name} {$record->last_name}\"),\n\n</code-snippet>\n\nActions encapsulate a button with an optional modal form and logic:\n\n<code-snippet name=\"Action with modal form\" lang=\"php\">\nuse Filament\\Actions\\Action;\nuse Filament\\Forms\\Components\\TextInput;\n\nAction::make('updateEmail')\n    ->schema([\n        TextInput::make('email')\n            ->email()\n            ->required(),\n    ])\n    ->action(fn (array $data, User $record) => $record->update($data))\n\n</code-snippet>\n\n### Testing\n\nAlways authenticate before testing panel functionality. Filament uses Livewire, so use `Livewire::test()` or `livewire()` (available when `pestphp/pest-plugin-livewire` is in `composer.json`):\n\n<code-snippet name=\"Table test\" lang=\"php\">\nuse function Pest\\Livewire\\livewire;\n\nlivewire(ListUsers::class)\n    ->assertCanSeeTableRecords($users)\n    ->searchTable($users->first()->name)\n    ->assertCanSeeTableRecords($users->take(1))\n    ->assertCanNotSeeTableRecords($users->skip(1));\n\n</code-snippet>\n\n<code-snippet name=\"Create resource test\" lang=\"php\">\nuse function Pest\\Laravel\\assertDatabaseHas;\nuse function Pest\\Livewire\\livewire;\n\nlivewire(CreateUser::class)\n    ->fillForm([\n        'name' => 'Test',\n        'email' => 'test@example.com',\n    ])\n    ->call('create')\n    ->assertNotified()\n    ->assertRedirect();\n\nassertDatabaseHas(User::class, [\n    'name' => 'Test',\n    'email' => 'test@example.com',\n]);\n\n</code-snippet>\n\n<code-snippet name=\"Testing validation\" lang=\"php\">\nuse function Pest\\Livewire\\livewire;\n\nlivewire(CreateUser::class)\n    ->fillForm([\n        'name' => null,\n        'email' => 'invalid-email',\n    ])\n    ->call('create')\n    ->assertHasFormErrors([\n        'name' => 'required',\n        'email' => 'email',\n    ])\n    ->assertNotNotified();\n\n</code-snippet>\n\n<code-snippet name=\"Calling actions in pages\" lang=\"php\">\nuse Filament\\Actions\\DeleteAction;\nuse function Pest\\Livewire\\livewire;\n\nlivewire(EditUser::class, ['record' => $user->id])\n    ->callAction(DeleteAction::class)\n    ->assertNotified()\n    ->assertRedirect();\n\n</code-snippet>\n\n<code-snippet name=\"Calling actions in tables\" lang=\"php\">\nuse Filament\\Actions\\Testing\\TestAction;\nuse function Pest\\Livewire\\livewire;\n\nlivewire(ListUsers::class)\n    ->callAction(TestAction::make('promote')->table($user), [\n        'role' => 'admin',\n    ])\n    ->assertNotified();\n\n</code-snippet>\n\n### Correct Namespaces\n\n- Form fields (`TextInput`, `Select`, etc.): `Filament\\Forms\\Components\\`\n- Infolist entries (`TextEntry`, `IconEntry`, etc.): `Filament\\Infolists\\Components\\`\n- Layout components (`Grid`, `Section`, `Fieldset`, `Tabs`, `Wizard`, etc.): `Filament\\Schemas\\Components\\`\n- Schema utilities (`Get`, `Set`, etc.): `Filament\\Schemas\\Components\\Utilities\\`\n- Actions (`DeleteAction`, `CreateAction`, etc.): `Filament\\Actions\\`. Never use `Filament\\Tables\\Actions\\`, `Filament\\Forms\\Actions\\`, or any other sub-namespace for actions.\n- Icons: `Filament\\Support\\Icons\\Heroicon` enum (e.g., `Heroicon::PencilSquare`)\n\n### Common Mistakes\n\n- **Never assume public file visibility.** File visibility is `private` by default. Always use `->visibility('public')` when public access is needed.\n- **Never assume full-width layout.** `Grid`, `Section`, and `Fieldset` do not span all columns by default. Explicitly set column spans when needed.\n\n=== spatie/boost-spatie-guidelines rules ===\n\n# Project Coding Guidelines\n\n- This codebase follows Spatie's Laravel & PHP guidelines.\n- Always activate the `spatie-laravel-php-standards` skill whenever writing, editing, reviewing, or formatting Laravel or PHP code.\n\n</laravel-boost-guidelines>\n"
  },
  {
    "path": "Dockerfile",
    "content": "# syntax=docker/dockerfile:1\n\n###########################################\n# Stage 1: Composer dependencies\n###########################################\nFROM composer:2 AS composer\n\nWORKDIR /app\n\nCOPY composer.json composer.lock ./\nRUN composer install \\\n    --no-dev \\\n    --no-interaction \\\n    --no-scripts \\\n    --no-autoloader \\\n    --prefer-dist \\\n    --ignore-platform-reqs\n\n###########################################\n# Stage 2: Build frontend assets\n###########################################\nFROM node:22-alpine AS frontend\n\nWORKDIR /app\n\n# Copy package files and install\nCOPY package.json package-lock.json ./\nRUN npm ci --ignore-scripts\n\n# Copy source files needed for build\nCOPY vite.config.js ./\nCOPY resources ./resources\nCOPY public ./public\nCOPY packages ./packages\n\n# Copy vendor for Filament theme CSS\nCOPY --from=composer /app/vendor ./vendor\n\nRUN npm run build\n\n###########################################\n# Stage 3: Production image\n###########################################\nFROM serversideup/php:8.4-fpm-nginx AS production\n\nLABEL org.opencontainers.image.title=\"Relaticle CRM\"\nLABEL org.opencontainers.image.description=\"Modern, open-source CRM platform\"\nLABEL org.opencontainers.image.source=\"https://github.com/Relaticle/relaticle\"\n\n# Switch to root to install dependencies\nUSER root\n\n# Install required PHP extensions\nRUN install-php-extensions intl exif gd imagick bcmath\n\n# Install PostgreSQL client for health checks\nRUN apt-get update \\\n    && apt-get install -y --no-install-recommends postgresql-client \\\n    && apt-get clean \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Switch back to www-data\nUSER www-data\n\nWORKDIR /var/www/html\n\n# Copy application source\nCOPY --chown=www-data:www-data . .\n\n# Copy vendor from composer stage\nCOPY --chown=www-data:www-data --from=composer /app/vendor ./vendor\n\n# Copy built frontend assets\nCOPY --chown=www-data:www-data --from=frontend /app/public/build ./public/build\n\n# Generate optimized autoloader\nRUN composer dump-autoload --optimize --no-dev\n\n# Create storage directories\nRUN mkdir -p \\\n    storage/app/public \\\n    storage/framework/cache/data \\\n    storage/framework/sessions \\\n    storage/framework/views \\\n    storage/logs \\\n    bootstrap/cache\n\n# Default environment for serversideup/php Laravel automations\nENV AUTORUN_ENABLED=true\nENV AUTORUN_LARAVEL_STORAGE_LINK=true\nENV AUTORUN_LARAVEL_MIGRATION=true\nENV AUTORUN_LARAVEL_MIGRATION_ISOLATION=true\nENV AUTORUN_LARAVEL_CONFIG_CACHE=true\nENV AUTORUN_LARAVEL_ROUTE_CACHE=true\nENV AUTORUN_LARAVEL_VIEW_CACHE=true\nENV AUTORUN_LARAVEL_EVENT_CACHE=true\nENV AUTORUN_LARAVEL_OPTIMIZE=false\nENV PHP_OPCACHE_ENABLE=1\nENV SSL_MODE=off\n\nEXPOSE 8080\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <a href=\"https://relaticle.com\">\n    <img src=\"https://relaticle.com/brand/logomark.svg\" width=\"100px\" alt=\"Relaticle logo\" />\n  </a>\n</p>\n\n<h1 align=\"center\">The Open-Source CRM Built for AI Agents</h1>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Relaticle/relaticle/actions\"><img src=\"https://img.shields.io/github/actions/workflow/status/Relaticle/relaticle/tests.yml?branch=main&style=for-the-badge&label=tests\" alt=\"Tests\"></a>\n  <a href=\"https://relaticle.com/docs/mcp\"><img src=\"https://img.shields.io/badge/MCP_Tools-30-8A2BE2?style=for-the-badge\" alt=\"30 MCP Tools\"></a>\n  <a href=\"https://laravel.com/docs/12.x\"><img src=\"https://img.shields.io/badge/Laravel-12.x-FF2D20?style=for-the-badge&logo=laravel\" alt=\"Laravel 12\"></a>\n  <a href=\"https://php.net\"><img src=\"https://img.shields.io/badge/PHP-8.4-777BB4?style=for-the-badge&logo=php\" alt=\"PHP 8.4\"></a>\n  <a href=\"https://github.com/Relaticle/relaticle/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-AGPL--3.0-blue.svg?style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://relaticle.com\">Website</a> ·\n  <a href=\"https://relaticle.com/docs\">Documentation</a> ·\n  <a href=\"https://relaticle.com/docs/mcp\">MCP Server</a> ·\n  <a href=\"https://github.com/orgs/Relaticle/projects/1/views/1\">Roadmap</a> ·\n  <a href=\"https://github.com/Relaticle/relaticle/discussions\">Discussions</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://relaticle.com/images/github-preview-light.png?v=3\" alt=\"Relaticle Dashboard - Manage contacts, companies, and opportunities in a modern interface\" />\n  <br>\n  <sub>Clean, modern interface built with Filament 5 and Livewire 4</sub>\n</p>\n\n---\n\n# About Relaticle\n\nRelaticle is a self-hosted CRM with a production-grade MCP server. Connect any AI agent -- Claude, GPT, or open-source models -- with 30 tools for full CRM operations. 22 custom field types, REST API, and multi-team isolation.\n\n**Perfect for:** Developer-led teams, AI-forward startups, and SMBs who want AI agent integration without vendor lock-in.\n\n**Core Strengths:**\n\n- **Agent-Native Infrastructure** - MCP server with 30 tools, REST API with full CRUD, schema discovery for AI agents\n- **Customizable Data Model** - 22 field types including entity relationships, conditional visibility, and per-field encryption. No migrations needed.\n- **Multi-Team Isolation** - 5-layer authorization with team-scoped data and workspaces\n- **Modern Tech Stack** - Laravel 12, Filament 5, PHP 8.4, 1,100+ automated tests\n- **Privacy-First** - Self-hosted, AGPL-3.0, your data stays on your server\n\n**vs Other CRMs:**\n\n| | Self-Hosted | Open Source | MCP Tools | Custom Fields | Per-Seat Pricing |\n|---|---|---|---|---|---|\n| **Relaticle** | Yes | AGPL-3.0 | 30 | 22 types | No |\n| **HubSpot** | No | No | 9 | Limited | Yes |\n| **Salesforce** | No | No | 0 | Yes (complex) | Yes |\n| **Attio** | No | No | 0 | Yes | Yes |\n\n# Requirements\n\n- PHP 8.4+\n- PostgreSQL 17+\n- Composer 2 and Node.js 20+\n- Redis for queues (optional for development)\n\n# Installation\n\n```bash\ngit clone https://github.com/Relaticle/relaticle.git\ncd relaticle && composer app-install\n```\n\n# Development\n\n```bash\n# Start everything (server, queue, vite)\ncomposer dev\n\n# Run tests\ncomposer test\n\n# Format code\ncomposer lint\n```\n\n# Self-Hosting\n\nSee the [Self-Hosting Guide](https://relaticle.com/docs/self-hosting) for Docker and manual deployment instructions.\n\n# Documentation\n\nVisit our [documentation](https://relaticle.com/docs) for guides on business usage, technical architecture, MCP server setup, REST API integration, and more.\n\n# Community & Support\n\n- [Report Issues](https://github.com/Relaticle/relaticle/issues)\n- [Request Features](https://github.com/Relaticle/relaticle/discussions/categories/ideas)\n- [Ask Questions](https://github.com/Relaticle/relaticle/discussions/categories/q-a)\n- [Discord](https://discord.gg/relaticle)\n- [Star us on GitHub](https://github.com/Relaticle/relaticle) to support the project\n\n# License\n\nRelaticle is open-source software licensed under the [AGPL-3.0 license](LICENSE).\n\n# Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=Relaticle/relaticle&type=Date)](https://www.star-history.com/#Relaticle/relaticle&Date)\n"
  },
  {
    "path": "TODOS.md",
    "content": "# TODOs\n\nDeferred work from plan reviews. Each item includes context and reasoning so it can be picked up without the original conversation.\n\n---\n\n## Centralize Marketing Numbers\n\n**What:** Extract hardcoded marketing numbers (MCP tools count, custom field types, test count, authorization layers) into a single config or constants file. All marketing surfaces (hero, features, FAQ, pricing, schema markup, README) should reference this source of truth.\n\n**Why:** The MCP tools count drifted from 20 to 30 as tools were added, but marketing copy wasn't updated. This was caught during a manual audit but could happen again with any number.\n\n**Where numbers appear:** hero.blade.php, features.blade.php, faq.blade.php, community.blade.php, pricing.blade.php, index.blade.php (schema markup + OG description), layout.blade.php (documentation meta), mcp-guide.md, README.md.\n\n**Approach:** Create a `config/marketing.php` with keys like `mcp_tools_count`, `field_types_count`, `test_count`. Reference via `config('marketing.mcp_tools_count')` in Blade templates. For README.md (not rendered by Laravel), keep manual but add a comment noting the config source.\n\n**Effort:** S (CC: ~15min) | **Priority:** P2 | **Depends on:** Nothing\n\n---\n\n## Document the 5-Layer Authorization Model\n\n**What:** The marketing claim \"5-layer authorization\" is used across multiple surfaces but the actual 5 layers are never explicitly defined. Based on code analysis, the layers appear to be: (1) User authentication (Sanctum/Fortify), (2) Team membership, (3) Team roles, (4) Eloquent policies, (5) Multi-tenancy scoping. This should be documented.\n\n**Why:** If a technical evaluator asks \"what are the 5 layers?\", there's no answer in the docs. Undocumented marketing claims erode trust with developer audiences.\n\n**Where to document:** Either the developer guide (developer-guide.md) or a dedicated security/architecture section in the getting-started guide.\n\n**Effort:** S (CC: ~10min) | **Priority:** P2 | **Depends on:** Nothing\n"
  },
  {
    "path": "app/Actions/Company/CreateCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Company;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class CreateCompany\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, array $data, CreationSource $source = CreationSource::WEB): Company\n    {\n        abort_unless($user->can('create', Company::class), 403);\n\n        $attributes = Arr::only($data, ['name', 'custom_fields']);\n        $attributes['creation_source'] = $source;\n\n        $company = DB::transaction(fn (): Company => Company::query()->create($attributes));\n\n        return $company->load('customFieldValues.customField.options');\n    }\n}\n"
  },
  {
    "path": "app/Actions/Company/DeleteCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Company;\n\nuse App\\Models\\Company;\nuse App\\Models\\User;\n\nfinal readonly class DeleteCompany\n{\n    public function execute(User $user, Company $company): void\n    {\n        abort_unless($user->can('delete', $company), 403);\n\n        $company->delete();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Company/ListCompanies.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Company;\n\nuse App\\Mcp\\Filters\\CustomFieldFilter;\nuse App\\Mcp\\Schema\\CustomFieldFilterSchema;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Pagination\\CursorPaginator;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedFilter;\nuse Spatie\\QueryBuilder\\AllowedInclude;\nuse Spatie\\QueryBuilder\\QueryBuilder;\n\nfinal readonly class ListCompanies\n{\n    /**\n     * @param  array<string, mixed>  $filters\n     * @return CursorPaginator<int, Company>|LengthAwarePaginator<int, Company>\n     */\n    public function execute(\n        User $user,\n        int $perPage = 15,\n        bool $useCursor = false,\n        array $filters = [],\n        ?int $page = null,\n        ?Request $request = null,\n    ): CursorPaginator|LengthAwarePaginator {\n        abort_unless($user->can('viewAny', Company::class), 403);\n\n        $request ??= new Request(['filter' => $filters]);\n        $filterSchema = new CustomFieldFilterSchema;\n\n        $query = QueryBuilder::for(Company::query()->withCustomFieldValues(), $request)\n            ->allowedFilters(\n                AllowedFilter::partial('name'),\n                AllowedFilter::custom('custom_fields', new CustomFieldFilter('company')),\n            )\n            ->allowedFields('id', 'name', 'creator_id', 'account_owner_id', 'created_at', 'updated_at')\n            ->allowedIncludes(\n                'creator', 'accountOwner', 'people', 'opportunities',\n                AllowedInclude::count('peopleCount', 'people'),\n                AllowedInclude::count('opportunitiesCount', 'opportunities'),\n                AllowedInclude::count('tasksCount', 'tasks'),\n                AllowedInclude::count('notesCount', 'notes'),\n            )\n            ->allowedSorts(\n                'name', 'created_at', 'updated_at',\n                ...$filterSchema->allowedSorts($user, 'company'),\n            )\n            ->defaultSort('-created_at')\n            ->orderBy('id');\n\n        if ($useCursor) {\n            return $query->cursorPaginate($perPage);\n        }\n\n        return $query->paginate($perPage, ['*'], 'page', $page);\n    }\n}\n"
  },
  {
    "path": "app/Actions/Company/UpdateCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Company;\n\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse App\\Support\\CustomFieldMerger;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class UpdateCompany\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, Company $company, array $data): Company\n    {\n        abort_unless($user->can('update', $company), 403);\n\n        $attributes = Arr::only($data, ['name', 'custom_fields']);\n\n        $attributes = CustomFieldMerger::merge($company, $attributes);\n\n        return DB::transaction(function () use ($company, $attributes): Company {\n            $company->update($attributes);\n\n            return $company->refresh()->load('customFieldValues.customField.options');\n        });\n    }\n}\n"
  },
  {
    "path": "app/Actions/Fortify/CreateNewSocialUser.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Contracts\\User\\CreatesNewSocialUsers;\nuse App\\Models\\User;\nuse Filament\\Auth\\Events\\Registered;\nuse Illuminate\\Auth\\Events\\Verified;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Throwable;\n\nfinal readonly class CreateNewSocialUser implements CreatesNewSocialUsers\n{\n    /**\n     * Create a newly registered user.\n     *\n     * @param  array<string, string>  $input\n     *\n     * @throws Throwable\n     */\n    public function create(array $input): User\n    {\n        Validator::make($input, [\n            'name' => ['required', 'string', 'max:255'],\n            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],\n        ])->validate();\n\n        return DB::transaction(fn () => tap(User::query()->create([\n            'name' => $input['name'],\n            'email' => $input['email'],\n        ]), function (User $user): void {\n            event(new Registered($user));\n            if ($user->markEmailAsVerified()) {\n                event(new Verified($user));\n            }\n        }));\n    }\n}\n"
  },
  {
    "path": "app/Actions/Fortify/PasswordValidationRules.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Fortify;\n\nuse Illuminate\\Contracts\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\Password;\n\ntrait PasswordValidationRules\n{\n    /**\n     * Get the validation rules used to validate passwords.\n     *\n     * @return array<int, Rule|array<mixed>|string>\n     */\n    protected function passwordRules(): array\n    {\n        return ['required', 'string', Password::default(), 'confirmed'];\n    }\n}\n"
  },
  {
    "path": "app/Actions/Fortify/ResetUserPassword.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Laravel\\Fortify\\Contracts\\ResetsUserPasswords;\n\nfinal readonly class ResetUserPassword implements ResetsUserPasswords\n{\n    use PasswordValidationRules;\n\n    /**\n     * Validate and reset the user's forgotten password.\n     *\n     * @param  array<string, string>  $input\n     */\n    public function reset(User $user, array $input): void\n    {\n        Validator::make($input, [\n            'password' => $this->passwordRules(),\n        ])->validate();\n\n        $user->forceFill([\n            'password' => Hash::make($input['password']),\n        ])->save();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Fortify/UpdateUserPassword.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Laravel\\Fortify\\Contracts\\UpdatesUserPasswords;\n\nfinal readonly class UpdateUserPassword implements UpdatesUserPasswords\n{\n    use PasswordValidationRules;\n\n    /**\n     * Validate and update the user's password.\n     *\n     * @param  array<string, string>  $input\n     */\n    public function update(User $user, array $input): void\n    {\n        Validator::make($input, [\n            'current_password' => ['required', 'string', 'current_password:web'],\n            'password' => $this->passwordRules(),\n        ], [\n            'current_password.current_password' => __('The provided password does not match your current password.'),\n        ])->validateWithBag('updatePassword');\n\n        $user->forceFill([\n            'password' => Hash::make($input['password']),\n        ])->save();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Fortify/UpdateUserProfileInformation.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Fortify\\Contracts\\UpdatesUserProfileInformation;\n\nfinal readonly class UpdateUserProfileInformation implements UpdatesUserProfileInformation\n{\n    /**\n     * Validate and update the given user's profile information.\n     *\n     * @param  array<string, mixed>  $input\n     */\n    public function update(User $user, array $input): void\n    {\n        Validator::make($input, [\n            'name' => ['required', 'string', 'max:255'],\n            'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],\n            'profile_photo_path' => ['nullable', 'string', 'max:255'],\n        ])->validateWithBag('updateProfileInformation');\n\n        if (array_key_exists('profile_photo_path', $input)) {\n            if ($input['profile_photo_path']) {\n                $user->updateProfilePhoto($input['profile_photo_path']);\n            } else {\n                $user->deleteProfilePhoto();\n            }\n        }\n\n        if ($input['email'] !== $user->email) {\n            $this->updateVerifiedUser($user, $input);\n        } else {\n            $user->forceFill([\n                'name' => $input['name'],\n                'email' => $input['email'],\n            ])->save();\n        }\n    }\n\n    /**\n     * Update the given verified user's profile information.\n     *\n     * @param  array<string, string>  $input\n     */\n    private function updateVerifiedUser(User $user, array $input): void\n    {\n        $user->forceFill([\n            'name' => $input['name'],\n            'email' => $input['email'],\n            'email_verified_at' => null,\n        ])->save();\n\n        $user->sendEmailVerificationNotification();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/AddTeamMember.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\Rule;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Laravel\\Jetstream\\Contracts\\AddsTeamMembers;\nuse Laravel\\Jetstream\\Events\\AddingTeamMember;\nuse Laravel\\Jetstream\\Events\\TeamMemberAdded;\nuse Laravel\\Jetstream\\Jetstream;\nuse Laravel\\Jetstream\\Rules\\Role;\n\nfinal readonly class AddTeamMember implements AddsTeamMembers\n{\n    /**\n     * Add a new team member to the given team.\n     */\n    public function add(User $user, Team $team, string $email, ?string $role = null): void\n    {\n        Gate::forUser($user)->authorize('addTeamMember', $team);\n\n        $this->validate($team, $email, $role);\n\n        $newTeamMember = Jetstream::findUserByEmailOrFail($email);\n\n        event(new AddingTeamMember($team, $newTeamMember));\n\n        $team->users()->attach(\n            $newTeamMember, ['role' => $role]\n        );\n\n        event(new TeamMemberAdded($team, $newTeamMember));\n    }\n\n    /**\n     * Validate the add member operation.\n     */\n    private function validate(Team $team, string $email, ?string $role): void\n    {\n        Validator::make([\n            'email' => $email,\n            'role' => $role,\n        ], $this->rules(), [\n            'email.exists' => __('We were unable to find a registered user with this email address.'),\n        ])->after(\n            $this->ensureUserIsNotAlreadyOnTeam($team, $email)\n        )->validateWithBag('addTeamMember');\n    }\n\n    /**\n     * Get the validation rules for adding a team member.\n     *\n     * @return array<string, array<int, string|Rule>>\n     */\n    private function rules(): array\n    {\n        return [\n            'email' => ['required', 'email', 'exists:users'],\n            'role' => ['required', 'string', new Role],\n        ];\n    }\n\n    /**\n     * Ensure that the user is not already on the team.\n     */\n    private function ensureUserIsNotAlreadyOnTeam(Team $team, string $email): Closure\n    {\n        return function ($validator) use ($team, $email): void { // @pest-ignore-type\n\n            $validator->errors()->addIf(\n                $team->hasUserWithEmail($email),\n                'email',\n                __('This user already belongs to the team.')\n            );\n        };\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/CreateTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse App\\Rules\\ValidTeamSlug;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Laravel\\Jetstream\\Contracts\\CreatesTeams;\nuse Laravel\\Jetstream\\Events\\AddingTeam;\nuse Laravel\\Jetstream\\Jetstream;\n\nfinal readonly class CreateTeam implements CreatesTeams\n{\n    /**\n     * Validate and create a new team for the given user.\n     *\n     * @param  array<string, string>  $input\n     */\n    public function create(User $user, array $input): Team\n    {\n        Gate::forUser($user)->authorize('create', Jetstream::newTeamModel());\n\n        Validator::make($input, [\n            'name' => ['required', 'string', 'max:255'],\n            'slug' => ['required', 'string', 'max:255', new ValidTeamSlug, 'unique:teams,slug'],\n        ])->validateWithBag('createTeam');\n\n        $isFirstTeam = ! $user->ownedTeams()->exists();\n\n        event(new AddingTeam($user));\n\n        $user->switchTeam($team = $user->ownedTeams()->create([\n            'name' => $input['name'],\n            'slug' => $input['slug'],\n            'personal_team' => $isFirstTeam,\n        ]));\n\n        /** @var Team $team */\n        return $team;\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/DeleteTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse Laravel\\Jetstream\\Contracts\\DeletesTeams;\n\nfinal readonly class DeleteTeam implements DeletesTeams\n{\n    /**\n     * Delete the given team.\n     */\n    public function delete(Team $team): void\n    {\n        $team->purge();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/DeleteUser.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\DB;\nuse Laravel\\Jetstream\\Contracts\\DeletesTeams;\nuse Laravel\\Jetstream\\Contracts\\DeletesUsers;\n\nfinal readonly class DeleteUser implements DeletesUsers\n{\n    /**\n     * Create a new action instance.\n     */\n    public function __construct(private DeletesTeams $deletesTeams) {}\n\n    /**\n     * Delete the given user.\n     */\n    public function delete(User $user): void\n    {\n        DB::transaction(function () use ($user): void {\n            $this->deleteTeams($user);\n            $user->deleteProfilePhoto();\n            $user->tokens->each->delete();\n            $user->delete();\n        });\n    }\n\n    /**\n     * Delete the teams and team associations attached to the user.\n     */\n    private function deleteTeams(User $user): void\n    {\n        $user->teams()->detach();\n\n        $user->ownedTeams->each(function (Model $team): void {\n            /** @var Team $team */\n            $this->deletesTeams->delete($team);\n        });\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/InviteTeamMember.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Mail;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\Unique;\nuse Laravel\\Jetstream\\Contracts\\InvitesTeamMembers;\nuse Laravel\\Jetstream\\Events\\InvitingTeamMember;\nuse Laravel\\Jetstream\\Jetstream;\nuse Laravel\\Jetstream\\Mail\\TeamInvitation;\nuse Laravel\\Jetstream\\Rules\\Role;\nuse Laravel\\Jetstream\\TeamInvitation as TeamInvitationModel;\n\nfinal readonly class InviteTeamMember implements InvitesTeamMembers\n{\n    /**\n     * Invite a new team member to the given team.\n     */\n    public function invite(User $user, Team $team, string $email, ?string $role = null): void\n    {\n        Gate::forUser($user)->authorize('addTeamMember', $team);\n\n        $this->validate($team, $email, $role);\n\n        event(new InvitingTeamMember($team, $email, $role));\n\n        $expiryDays = (int) config('jetstream.invitation_expiry_days', 7);\n\n        $invitation = $team->teamInvitations()->create([\n            'email' => $email,\n            'role' => $role,\n            'expires_at' => now()->addDays($expiryDays),\n        ]);\n\n        /** @var TeamInvitationModel $invitation */\n        Mail::to($email)->send(new TeamInvitation($invitation));\n    }\n\n    /**\n     * Validate the invite member operation.\n     */\n    private function validate(Team $team, string $email, ?string $role): void\n    {\n        Validator::make([\n            'email' => $email,\n            'role' => $role,\n        ], $this->rules($team), [\n            'email.unique' => __('This user has already been invited to the team.'),\n        ])->after(\n            $this->ensureUserIsNotAlreadyOnTeam($team, $email)\n        )->validateWithBag('addTeamMember');\n    }\n\n    /**\n     * Get the validation rules for inviting a team member.\n     *\n     * @return array<string, list<Unique|Role|string>>\n     */\n    private function rules(Team $team): array\n    {\n        return [\n            'email' => [\n                'required', 'email',\n                Rule::unique(Jetstream::teamInvitationModel())->where(function (Builder $query) use ($team): void {\n                    $query->where('team_id', $team->id);\n                }),\n            ],\n            'role' => ['required', 'string', new Role],\n        ];\n    }\n\n    /**\n     * Ensure that the user is not already on the team.\n     */\n    private function ensureUserIsNotAlreadyOnTeam(Team $team, string $email): Closure\n    {\n        return function ($validator) use ($team, $email): void { // @pest-ignore-type\n            $validator->errors()->addIf(\n                $team->hasUserWithEmail($email),\n                'email',\n                __('This user already belongs to the team.')\n            );\n        };\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/RemoveTeamMember.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Validation\\ValidationException;\nuse Laravel\\Jetstream\\Contracts\\RemovesTeamMembers;\nuse Laravel\\Jetstream\\Events\\TeamMemberRemoved;\n\nfinal readonly class RemoveTeamMember implements RemovesTeamMembers\n{\n    /**\n     * Remove the team member from the given team.\n     */\n    public function remove(User $user, Team $team, User $teamMember): void\n    {\n        $this->authorize($user, $team, $teamMember);\n\n        $this->ensureUserDoesNotOwnTeam($teamMember, $team);\n\n        $team->removeUser($teamMember);\n\n        event(new TeamMemberRemoved($team, $teamMember));\n    }\n\n    /**\n     * Authorize that the user can remove the team member.\n     */\n    private function authorize(User $user, Team $team, User $teamMember): void\n    {\n        throw_if(! Gate::forUser($user)->check('removeTeamMember', $team) &&\n            $user->id !== $teamMember->id, AuthorizationException::class);\n    }\n\n    /**\n     * Ensure that the currently authenticated user does not own the team.\n     */\n    private function ensureUserDoesNotOwnTeam(User $teamMember, Team $team): void\n    {\n        /** @var User $owner */\n        $owner = $team->owner;\n        if ($teamMember->id === $owner->id) {\n            throw ValidationException::withMessages([\n                'team' => [__('You may not leave a team that you created.')],\n            ])->errorBag('removeTeamMember');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Actions/Jetstream/UpdateTeamName.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse App\\Rules\\ValidTeamSlug;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Laravel\\Jetstream\\Contracts\\UpdatesTeamNames;\n\nfinal readonly class UpdateTeamName implements UpdatesTeamNames\n{\n    /**\n     * Validate and update the given team's name.\n     *\n     * @param  array<string, string>  $input\n     */\n    public function update(User $user, Team $team, array $input): void\n    {\n        Gate::forUser($user)->authorize('update', $team);\n\n        Validator::make($input, [\n            'name' => ['required', 'string', 'max:255'],\n            'slug' => ['required', 'string', 'max:255', new ValidTeamSlug(ignoreValue: $team->slug), \"unique:teams,slug,{$team->id}\"],\n        ])->validateWithBag('updateTeamName');\n\n        $team->update([\n            'name' => $input['name'],\n            'slug' => $input['slug'],\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Actions/Note/CreateNote.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Note;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class CreateNote\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, array $data, CreationSource $source = CreationSource::WEB): Note\n    {\n        abort_unless($user->can('create', Note::class), 403);\n\n        $companyIds = Arr::pull($data, 'company_ids');\n        $peopleIds = Arr::pull($data, 'people_ids');\n        $opportunityIds = Arr::pull($data, 'opportunity_ids');\n\n        $attributes = Arr::only($data, ['title', 'custom_fields']);\n        $attributes['creation_source'] = $source;\n\n        $note = DB::transaction(function () use ($attributes, $companyIds, $peopleIds, $opportunityIds): Note {\n            $note = Note::query()->create($attributes);\n\n            if ($companyIds !== null) {\n                $note->companies()->sync($companyIds);\n            }\n            if ($peopleIds !== null) {\n                $note->people()->sync($peopleIds);\n            }\n            if ($opportunityIds !== null) {\n                $note->opportunities()->sync($opportunityIds);\n            }\n\n            return $note;\n        });\n\n        return $note->load('customFieldValues.customField.options');\n    }\n}\n"
  },
  {
    "path": "app/Actions/Note/DeleteNote.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Note;\n\nuse App\\Models\\Note;\nuse App\\Models\\User;\n\nfinal readonly class DeleteNote\n{\n    public function execute(User $user, Note $note): void\n    {\n        abort_unless($user->can('delete', $note), 403);\n\n        $note->delete();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Note/ListNotes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Note;\n\nuse App\\Mcp\\Filters\\CustomFieldFilter;\nuse App\\Mcp\\Schema\\CustomFieldFilterSchema;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Pagination\\CursorPaginator;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedFilter;\nuse Spatie\\QueryBuilder\\AllowedInclude;\nuse Spatie\\QueryBuilder\\QueryBuilder;\n\nfinal readonly class ListNotes\n{\n    /**\n     * @param  array<string, mixed>  $filters\n     * @return CursorPaginator<int, Note>|LengthAwarePaginator<int, Note>\n     */\n    public function execute(\n        User $user,\n        int $perPage = 15,\n        bool $useCursor = false,\n        array $filters = [],\n        ?int $page = null,\n        ?Request $request = null,\n    ): CursorPaginator|LengthAwarePaginator {\n        abort_unless($user->can('viewAny', Note::class), 403);\n\n        $request ??= new Request(['filter' => $filters]);\n        $filterSchema = new CustomFieldFilterSchema;\n\n        $query = QueryBuilder::for(Note::query()->withCustomFieldValues(), $request)\n            ->allowedFilters(\n                AllowedFilter::partial('title'),\n                AllowedFilter::scope('notable_type', 'forNotableType'),\n                AllowedFilter::scope('notable_id', 'forNotableId'),\n                AllowedFilter::custom('custom_fields', new CustomFieldFilter('note')),\n            )\n            ->allowedFields('id', 'title', 'creator_id', 'created_at', 'updated_at')\n            ->allowedIncludes(\n                'creator', 'companies', 'people', 'opportunities',\n                AllowedInclude::count('companiesCount', 'companies'),\n                AllowedInclude::count('peopleCount', 'people'),\n                AllowedInclude::count('opportunitiesCount', 'opportunities'),\n            )\n            ->allowedSorts(\n                'title', 'created_at', 'updated_at',\n                ...$filterSchema->allowedSorts($user, 'note'),\n            )\n            ->defaultSort('-created_at')\n            ->orderBy('id');\n\n        if ($useCursor) {\n            return $query->cursorPaginate($perPage);\n        }\n\n        return $query->paginate($perPage, ['*'], 'page', $page);\n    }\n}\n"
  },
  {
    "path": "app/Actions/Note/UpdateNote.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Note;\n\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse App\\Support\\CustomFieldMerger;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class UpdateNote\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, Note $note, array $data): Note\n    {\n        abort_unless($user->can('update', $note), 403);\n\n        $attributes = Arr::only($data, ['title', 'custom_fields']);\n\n        $attributes = CustomFieldMerger::merge($note, $attributes);\n\n        return DB::transaction(function () use ($note, $attributes, $data): Note {\n            $note->update($attributes);\n\n            if (array_key_exists('company_ids', $data)) {\n                $note->companies()->sync($data['company_ids']);\n            }\n            if (array_key_exists('people_ids', $data)) {\n                $note->people()->sync($data['people_ids']);\n            }\n            if (array_key_exists('opportunity_ids', $data)) {\n                $note->opportunities()->sync($data['opportunity_ids']);\n            }\n\n            return $note->refresh()->load('customFieldValues.customField.options');\n        });\n    }\n}\n"
  },
  {
    "path": "app/Actions/Opportunity/CreateOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Opportunity;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class CreateOpportunity\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, array $data, CreationSource $source = CreationSource::WEB): Opportunity\n    {\n        abort_unless($user->can('create', Opportunity::class), 403);\n\n        $attributes = Arr::only($data, ['name', 'company_id', 'contact_id', 'custom_fields']);\n        $attributes['creation_source'] = $source;\n\n        $opportunity = DB::transaction(fn (): Opportunity => Opportunity::query()->create($attributes));\n\n        return $opportunity->load('customFieldValues.customField.options');\n    }\n}\n"
  },
  {
    "path": "app/Actions/Opportunity/DeleteOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Opportunity;\n\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\n\nfinal readonly class DeleteOpportunity\n{\n    public function execute(User $user, Opportunity $opportunity): void\n    {\n        abort_unless($user->can('delete', $opportunity), 403);\n\n        $opportunity->delete();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Opportunity/ListOpportunities.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Opportunity;\n\nuse App\\Mcp\\Filters\\CustomFieldFilter;\nuse App\\Mcp\\Schema\\CustomFieldFilterSchema;\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Pagination\\CursorPaginator;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedFilter;\nuse Spatie\\QueryBuilder\\AllowedInclude;\nuse Spatie\\QueryBuilder\\QueryBuilder;\n\nfinal readonly class ListOpportunities\n{\n    /**\n     * @param  array<string, mixed>  $filters\n     * @return CursorPaginator<int, Opportunity>|LengthAwarePaginator<int, Opportunity>\n     */\n    public function execute(\n        User $user,\n        int $perPage = 15,\n        bool $useCursor = false,\n        array $filters = [],\n        ?int $page = null,\n        ?Request $request = null,\n    ): CursorPaginator|LengthAwarePaginator {\n        abort_unless($user->can('viewAny', Opportunity::class), 403);\n\n        $request ??= new Request(['filter' => $filters]);\n        $filterSchema = new CustomFieldFilterSchema;\n\n        $query = QueryBuilder::for(Opportunity::query()->withCustomFieldValues(), $request)\n            ->allowedFilters(\n                AllowedFilter::partial('name'),\n                AllowedFilter::exact('company_id'),\n                AllowedFilter::exact('contact_id'),\n                AllowedFilter::custom('custom_fields', new CustomFieldFilter('opportunity')),\n            )\n            ->allowedFields('id', 'name', 'company_id', 'contact_id', 'creator_id', 'created_at', 'updated_at')\n            ->allowedIncludes(\n                'creator', 'company', 'contact',\n                AllowedInclude::count('tasksCount', 'tasks'),\n                AllowedInclude::count('notesCount', 'notes'),\n            )\n            ->allowedSorts(\n                'name', 'created_at', 'updated_at',\n                ...$filterSchema->allowedSorts($user, 'opportunity'),\n            )\n            ->defaultSort('-created_at')\n            ->orderBy('id');\n\n        if ($useCursor) {\n            return $query->cursorPaginate($perPage);\n        }\n\n        return $query->paginate($perPage, ['*'], 'page', $page);\n    }\n}\n"
  },
  {
    "path": "app/Actions/Opportunity/UpdateOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Opportunity;\n\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse App\\Support\\CustomFieldMerger;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class UpdateOpportunity\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, Opportunity $opportunity, array $data): Opportunity\n    {\n        abort_unless($user->can('update', $opportunity), 403);\n\n        $attributes = Arr::only($data, ['name', 'company_id', 'contact_id', 'custom_fields']);\n\n        $attributes = CustomFieldMerger::merge($opportunity, $attributes);\n\n        return DB::transaction(function () use ($opportunity, $attributes): Opportunity {\n            $opportunity->update($attributes);\n\n            return $opportunity->refresh()->load('customFieldValues.customField.options');\n        });\n    }\n}\n"
  },
  {
    "path": "app/Actions/People/CreatePeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\People;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class CreatePeople\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, array $data, CreationSource $source = CreationSource::WEB): People\n    {\n        abort_unless($user->can('create', People::class), 403);\n\n        $attributes = Arr::only($data, ['name', 'company_id', 'custom_fields']);\n        $attributes['creation_source'] = $source;\n\n        $person = DB::transaction(fn (): People => People::query()->create($attributes));\n\n        return $person->load('customFieldValues.customField.options');\n    }\n}\n"
  },
  {
    "path": "app/Actions/People/DeletePeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\People;\n\nuse App\\Models\\People;\nuse App\\Models\\User;\n\nfinal readonly class DeletePeople\n{\n    public function execute(User $user, People $people): void\n    {\n        abort_unless($user->can('delete', $people), 403);\n\n        $people->delete();\n    }\n}\n"
  },
  {
    "path": "app/Actions/People/ListPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\People;\n\nuse App\\Mcp\\Filters\\CustomFieldFilter;\nuse App\\Mcp\\Schema\\CustomFieldFilterSchema;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Pagination\\CursorPaginator;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedFilter;\nuse Spatie\\QueryBuilder\\AllowedInclude;\nuse Spatie\\QueryBuilder\\QueryBuilder;\n\nfinal readonly class ListPeople\n{\n    /**\n     * @param  array<string, mixed>  $filters\n     * @return CursorPaginator<int, People>|LengthAwarePaginator<int, People>\n     */\n    public function execute(\n        User $user,\n        int $perPage = 15,\n        bool $useCursor = false,\n        array $filters = [],\n        ?int $page = null,\n        ?Request $request = null,\n    ): CursorPaginator|LengthAwarePaginator {\n        abort_unless($user->can('viewAny', People::class), 403);\n\n        $request ??= new Request(['filter' => $filters]);\n        $filterSchema = new CustomFieldFilterSchema;\n\n        $query = QueryBuilder::for(People::query()->withCustomFieldValues(), $request)\n            ->allowedFilters(\n                AllowedFilter::partial('name'),\n                AllowedFilter::exact('company_id'),\n                AllowedFilter::custom('custom_fields', new CustomFieldFilter('people')),\n            )\n            ->allowedFields('id', 'name', 'company_id', 'creator_id', 'created_at', 'updated_at')\n            ->allowedIncludes(\n                'creator', 'company',\n                AllowedInclude::count('tasksCount', 'tasks'),\n                AllowedInclude::count('notesCount', 'notes'),\n            )\n            ->allowedSorts(\n                'name', 'created_at', 'updated_at',\n                ...$filterSchema->allowedSorts($user, 'people'),\n            )\n            ->defaultSort('-created_at')\n            ->orderBy('id');\n\n        if ($useCursor) {\n            return $query->cursorPaginate($perPage);\n        }\n\n        return $query->paginate($perPage, ['*'], 'page', $page);\n    }\n}\n"
  },
  {
    "path": "app/Actions/People/UpdatePeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\People;\n\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse App\\Support\\CustomFieldMerger;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class UpdatePeople\n{\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, People $people, array $data): People\n    {\n        abort_unless($user->can('update', $people), 403);\n\n        $attributes = Arr::only($data, ['name', 'company_id', 'custom_fields']);\n\n        $attributes = CustomFieldMerger::merge($people, $attributes);\n\n        return DB::transaction(function () use ($people, $attributes): People {\n            $people->update($attributes);\n\n            return $people->refresh()->load('customFieldValues.customField.options');\n        });\n    }\n}\n"
  },
  {
    "path": "app/Actions/Task/CreateTask.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Task;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class CreateTask\n{\n    public function __construct(\n        private NotifyTaskAssignees $notifyAssignees,\n    ) {}\n\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function execute(User $user, array $data, CreationSource $source = CreationSource::WEB): Task\n    {\n        abort_unless($user->can('create', Task::class), 403);\n\n        $companyIds = Arr::pull($data, 'company_ids');\n        $peopleIds = Arr::pull($data, 'people_ids');\n        $opportunityIds = Arr::pull($data, 'opportunity_ids');\n        $assigneeIds = Arr::pull($data, 'assignee_ids');\n\n        $attributes = Arr::only($data, ['title', 'custom_fields']);\n        $attributes['creation_source'] = $source;\n\n        $task = DB::transaction(function () use ($attributes, $companyIds, $peopleIds, $opportunityIds, $assigneeIds): Task {\n            $task = Task::query()->create($attributes);\n\n            if ($companyIds !== null) {\n                $task->companies()->sync($companyIds);\n            }\n            if ($peopleIds !== null) {\n                $task->people()->sync($peopleIds);\n            }\n            if ($opportunityIds !== null) {\n                $task->opportunities()->sync($opportunityIds);\n            }\n            if ($assigneeIds !== null) {\n                $task->assignees()->sync($assigneeIds);\n            }\n\n            return $task;\n        });\n\n        $this->notifyAssignees->execute($task);\n\n        return $task->load('customFieldValues.customField.options');\n    }\n}\n"
  },
  {
    "path": "app/Actions/Task/DeleteTask.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Task;\n\nuse App\\Models\\Task;\nuse App\\Models\\User;\n\nfinal readonly class DeleteTask\n{\n    public function execute(User $user, Task $task): void\n    {\n        abort_unless($user->can('delete', $task), 403);\n\n        $task->delete();\n    }\n}\n"
  },
  {
    "path": "app/Actions/Task/ListTasks.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Task;\n\nuse App\\Mcp\\Filters\\CustomFieldFilter;\nuse App\\Mcp\\Schema\\CustomFieldFilterSchema;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Pagination\\CursorPaginator;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedFilter;\nuse Spatie\\QueryBuilder\\AllowedInclude;\nuse Spatie\\QueryBuilder\\QueryBuilder;\n\nfinal readonly class ListTasks\n{\n    /**\n     * @param  array<string, mixed>  $filters\n     * @return CursorPaginator<int, Task>|LengthAwarePaginator<int, Task>\n     */\n    public function execute(\n        User $user,\n        int $perPage = 15,\n        bool $useCursor = false,\n        array $filters = [],\n        ?int $page = null,\n        ?Request $request = null,\n    ): CursorPaginator|LengthAwarePaginator {\n        abort_unless($user->can('viewAny', Task::class), 403);\n\n        $request ??= new Request(['filter' => $filters]);\n        $filterSchema = new CustomFieldFilterSchema;\n\n        $query = QueryBuilder::for(Task::query()->withCustomFieldValues(), $request)\n            ->allowedFilters(\n                AllowedFilter::partial('title'),\n                AllowedFilter::callback('assigned_to_me', function (Builder $query, mixed $value) use ($user): void {\n                    if (filter_var($value, FILTER_VALIDATE_BOOLEAN)) {\n                        $query->whereHas('assignees', fn (Builder $q) => $q->where('users.id', $user->getKey()));\n                    }\n                }),\n                AllowedFilter::scope('company_id', 'forCompany'),\n                AllowedFilter::scope('people_id', 'forPerson'),\n                AllowedFilter::scope('opportunity_id', 'forOpportunity'),\n                AllowedFilter::custom('custom_fields', new CustomFieldFilter('task')),\n            )\n            ->allowedFields('id', 'title', 'creator_id', 'created_at', 'updated_at')\n            ->allowedIncludes(\n                'creator', 'assignees', 'companies', 'people', 'opportunities',\n                AllowedInclude::count('assigneesCount', 'assignees'),\n                AllowedInclude::count('companiesCount', 'companies'),\n                AllowedInclude::count('peopleCount', 'people'),\n                AllowedInclude::count('opportunitiesCount', 'opportunities'),\n            )\n            ->allowedSorts(\n                'title', 'created_at', 'updated_at',\n                ...$filterSchema->allowedSorts($user, 'task'),\n            )\n            ->defaultSort('-created_at')\n            ->orderBy('id');\n\n        if ($useCursor) {\n            return $query->cursorPaginate($perPage);\n        }\n\n        return $query->paginate($perPage, ['*'], 'page', $page);\n    }\n}\n"
  },
  {
    "path": "app/Actions/Task/NotifyTaskAssignees.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Task;\n\nuse App\\Filament\\Resources\\TaskResource\\Pages\\ManageTasks;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Filament\\Actions\\Action;\nuse Filament\\Notifications\\Notification;\nuse Filament\\Support\\Icons\\Heroicon;\n\nfinal readonly class NotifyTaskAssignees\n{\n    /**\n     * @param  array<int>  $previousAssigneeIds\n     */\n    public function execute(Task $task, array $previousAssigneeIds = []): void\n    {\n        $currentIds = $task->assignees()->pluck('users.id')->all();\n        $newIds = array_diff($currentIds, $previousAssigneeIds);\n\n        if ($newIds === []) {\n            return;\n        }\n\n        $taskTitle = $task->title;\n        $taskId = $task->id;\n        $taskUrl = $this->resolveTaskUrl($task);\n\n        defer(function () use ($newIds, $taskTitle, $taskId, $taskUrl): void {\n            User::query()\n                ->whereIn('id', $newIds)\n                ->get()\n                ->each(function (User $recipient) use ($taskTitle, $taskId, $taskUrl): void {\n                    Notification::make()\n                        ->title(\"New Task Assignment: {$taskTitle}\")\n                        ->actions([\n                            Action::make('view')\n                                ->button()\n                                ->label('View Task')\n                                ->url($taskUrl)\n                                ->markAsRead(),\n                        ])\n                        ->icon(Heroicon::OutlinedCheckCircle)\n                        ->iconColor('primary')\n                        ->viewData(['task_id' => $taskId])\n                        ->sendToDatabase($recipient);\n                });\n        });\n    }\n\n    private function resolveTaskUrl(Task $task): string\n    {\n        try {\n            return ManageTasks::getUrl(['record' => $task]);\n        } catch (\\Throwable) {\n            return '#';\n        }\n    }\n}\n"
  },
  {
    "path": "app/Actions/Task/UpdateTask.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\Task;\n\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse App\\Support\\CustomFieldMerger;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\n\nfinal readonly class UpdateTask\n{\n    public function __construct(\n        private NotifyTaskAssignees $notifyAssignees,\n    ) {}\n\n    /**\n     * @param  array<string, mixed>  $data\n     *\n     * @throws \\Throwable\n     */\n    public function execute(User $user, Task $task, array $data): Task\n    {\n        abort_unless($user->can('update', $task), 403);\n\n        $attributes = Arr::only($data, ['title', 'custom_fields']);\n\n        $attributes = CustomFieldMerger::merge($task, $attributes);\n\n        $previousAssigneeIds = $task->assignees()->pluck('users.id')->all();\n\n        $task = DB::transaction(function () use ($task, $attributes, $data): Task {\n            $task->update($attributes);\n\n            if (array_key_exists('company_ids', $data)) {\n                $task->companies()->sync($data['company_ids']);\n            }\n            if (array_key_exists('people_ids', $data)) {\n                $task->people()->sync($data['people_ids']);\n            }\n            if (array_key_exists('opportunity_ids', $data)) {\n                $task->opportunities()->sync($data['opportunity_ids']);\n            }\n            if (array_key_exists('assignee_ids', $data)) {\n                $task->assignees()->sync($data['assignee_ids']);\n            }\n\n            return $task->refresh();\n        });\n\n        $this->notifyAssignees->execute($task, $previousAssigneeIds);\n\n        return $task->load('customFieldValues.customField.options');\n    }\n}\n"
  },
  {
    "path": "app/Concerns/DetectsTeamInvitation.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Concerns;\n\nuse App\\Models\\TeamInvitation;\nuse Illuminate\\Contracts\\Support\\Htmlable;\nuse Illuminate\\Support\\HtmlString;\n\ntrait DetectsTeamInvitation\n{\n    protected function getTeamInvitationFromSession(): ?TeamInvitation\n    {\n        $intendedUrl = session('url.intended', '');\n\n        if (! str_contains((string) $intendedUrl, '/team-invitations/')) {\n            return null;\n        }\n\n        $path = parse_url((string) $intendedUrl, PHP_URL_PATH);\n\n        if (! $path) {\n            return null;\n        }\n\n        $segments = explode('/', trim($path, '/'));\n        $invitationIndex = array_search('team-invitations', $segments, true);\n\n        if ($invitationIndex === false || ! isset($segments[$invitationIndex + 1])) {\n            return null;\n        }\n\n        return TeamInvitation::query()\n            ->whereKey($segments[$invitationIndex + 1])\n            ->first();\n    }\n\n    protected function getTeamInvitationSubheading(): ?Htmlable\n    {\n        $invitation = $this->getTeamInvitationFromSession();\n\n        if (! $invitation || $invitation->isExpired()) {\n            return null;\n        }\n\n        return new HtmlString(\n            __('You\\'ve been invited to join <strong>:team</strong>', [\n                'team' => e($invitation->team->name),\n            ])\n        );\n    }\n\n    protected function getInvitationContentHtml(): string\n    {\n        $subheading = $this->getTeamInvitationSubheading();\n\n        if ($subheading === null) {\n            return '';\n        }\n\n        return '<p class=\"text-center text-sm text-gray-500 dark:text-gray-400\">'.$subheading->toHtml().'</p>';\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/BackfillCustomFieldColorsCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Console\\Commands;\n\nuse App\\Enums\\CustomFields\\OpportunityField as OpportunityCustomField;\nuse App\\Enums\\CustomFields\\TaskField as TaskCustomField;\nuse App\\Models\\CustomField;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Task;\nuse Illuminate\\Console\\Command;\nuse Relaticle\\CustomFields\\Data\\CustomFieldOptionSettingsData;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\n\nfinal class BackfillCustomFieldColorsCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'custom-fields:backfill-colors\n                            {--team= : Specific team ID to backfill (optional)}\n                            {--dry-run : Show what would be updated without making changes}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Backfill colors for existing custom field options (Task status/priority and Opportunity stages)';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): int\n    {\n        $this->info('🎨 Backfilling custom field colors...');\n\n        $dryRun = $this->option('dry-run');\n        $specificTeam = $this->option('team');\n\n        if ($dryRun) {\n            $this->warn('🔍 DRY RUN MODE - No changes will be made');\n        }\n\n        // Get fields to update\n        $query = CustomField::with('options')\n            ->whereIn('name', ['Status', 'Priority', 'Stage'])\n            ->whereIn('entity_type', [Task::class, Opportunity::class])\n            ->where('type', 'select');\n\n        if ($specificTeam) {\n            $query->where('tenant_id', $specificTeam);\n        }\n\n        $fields = $query->get();\n\n        $this->info(\"Found {$fields->count()} fields to process\");\n\n        $updatedFields = 0;\n        $updatedOptions = 0;\n\n        foreach ($fields as $field) {\n            $colorMapping = $this->getColorMappingForField($field);\n\n            if ($colorMapping === null) {\n                continue;\n            }\n\n            $this->info(\"Processing: {$field->name} for {$field->entity_type} (Team {$field->tenant_id})\");\n\n            // Enable colors on the field if not already enabled\n            if (! $field->settings->enable_option_colors) {\n                if (! $dryRun) {\n                    $field->update([\n                        'settings' => new CustomFieldSettingsData(\n                            visible_in_list: $field->settings->visible_in_list ?? true,\n                            list_toggleable_hidden: $field->settings->list_toggleable_hidden,\n                            visible_in_view: $field->settings->visible_in_view ?? true,\n                            searchable: $field->settings->searchable ?? false,\n                            encrypted: $field->settings->encrypted ?? false,\n                            enable_option_colors: true,\n                            visibility: $field->settings->visibility ?? null,\n                            additional: $field->settings->additional ?? [],\n                        ),\n                    ]);\n                }\n                $this->line('  ✓ Enabled color options for field');\n                $updatedFields++;\n            } else {\n                $this->line('  ℹ Field already has color options enabled');\n            }\n\n            // Apply colors to options\n            foreach ($field->options as $option) {\n                $color = $colorMapping[$option->name] ?? null;\n                if ($color !== null) {\n                    $currentColor = $option->settings->color ?? null;\n                    if ($currentColor !== $color) {\n                        if (! $dryRun) {\n                            $option->update([\n                                'settings' => new CustomFieldOptionSettingsData(color: $color),\n                            ]);\n                        }\n                        $this->line(\"  ✓ Set color for '{$option->name}': $color\");\n                        $updatedOptions++;\n                    } else {\n                        $this->line(\"  ℹ '{$option->name}' already has correct color: $color\");\n                    }\n                } else {\n                    $this->line(\"  ⚠ No color mapping found for option: '{$option->name}'\");\n                }\n            }\n        }\n\n        if ($dryRun) {\n            $this->info('🔍 DRY RUN COMPLETE:');\n            $this->info(\"  - Would enable colors on $updatedFields fields\");\n            $this->info(\"  - Would update colors on $updatedOptions options\");\n        } else {\n            $this->info('✅ BACKFILL COMPLETE:');\n            $this->info(\"  - Enabled colors on $updatedFields fields\");\n            $this->info(\"  - Updated colors on $updatedOptions options\");\n        }\n\n        return self::SUCCESS;\n    }\n\n    /**\n     * Get color mapping for a field based on its configuration\n     */\n    /**\n     * @return array<int|string, string>|null\n     */\n    private function getColorMappingForField(CustomField $field): ?array\n    {\n        return match ([$field->entity_type, $field->name]) {\n            [Task::class, 'Status'] => TaskCustomField::STATUS->getOptionColors(),\n            [Task::class, 'Priority'] => TaskCustomField::PRIORITY->getOptionColors(),\n            [Opportunity::class, 'Stage'] => OpportunityCustomField::STAGE->getOptionColors(),\n            default => null,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/CleanupExpiredInvitationsCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\TeamInvitation;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Database\\Query\\Builder;\n\nfinal class CleanupExpiredInvitationsCommand extends Command\n{\n    /**\n     * @var string\n     */\n    protected $signature = 'invitations:cleanup\n                            {--days=30 : Delete invitations expired more than this many days ago}';\n\n    /**\n     * @var string\n     */\n    protected $description = 'Delete team invitations that have been expired for a specified number of days';\n\n    public function handle(): void\n    {\n        $days = (int) $this->option('days');\n\n        $cutoff = now()->subDays($days);\n\n        $deleted = TeamInvitation::query()\n            ->where(function (Builder $query) use ($cutoff): void {\n                $query->where('expires_at', '<', $cutoff)\n                    ->orWhere(function (Builder $query) use ($cutoff): void {\n                        $query->whereNull('expires_at')\n                            ->where('created_at', '<', $cutoff);\n                    });\n            })\n            ->delete();\n\n        $this->info(\"Purged {$deleted} expired invitation(s).\");\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/CreateSystemAdminCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\nuse Throwable;\n\nuse function Laravel\\Prompts\\confirm;\nuse function Laravel\\Prompts\\password;\nuse function Laravel\\Prompts\\text;\n\nfinal class CreateSystemAdminCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'sysadmin:create\n                            {--name= : The name of the system administrator}\n                            {--email= : The email address of the system administrator}\n                            {--password= : The password for the system administrator}';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Create a new system administrator account';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): int\n    {\n        $this->info('Create System Administrator Account');\n        $this->line('────────────────────────────────────');\n        $this->newLine();\n\n        try {\n            // Check if any system administrators exist\n            $existingCount = SystemAdministrator::query()->count();\n            if ($existingCount > 0) {\n                $this->warn(\"There are currently {$existingCount} system administrator(s).\");\n\n                if (! $this->option('no-interaction')) {\n                    $continue = confirm(\n                        label: 'Do you want to create another system administrator?',\n                        default: true\n                    );\n\n                    if (! $continue) {\n                        $this->info('Operation cancelled.');\n\n                        return self::SUCCESS;\n                    }\n                }\n            }\n\n            // Get administrator details\n            $name = $this->option('name') ?? text(\n                label: 'Name',\n                placeholder: 'John Doe',\n                required: true,\n                validate: fn (string $value): ?string => strlen($value) < 2 ? 'Name must be at least 2 characters' : null\n            );\n\n            $email = $this->option('email') ?? text(\n                label: 'Email address',\n                placeholder: 'admin@example.com',\n                required: true,\n                validate: function (string $value): ?string {\n                    if (! filter_var($value, FILTER_VALIDATE_EMAIL)) {\n                        return 'Please enter a valid email address';\n                    }\n\n                    if (SystemAdministrator::query()->where('email', $value)->exists()) {\n                        return \"An administrator with email '{$value}' already exists\";\n                    }\n\n                    return null;\n                }\n            );\n\n            // Validate email from command option\n            if ($this->option('email')) {\n                if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {\n                    $this->error('Invalid email address provided.');\n\n                    return self::FAILURE;\n                }\n\n                if (SystemAdministrator::query()->where('email', $email)->exists()) {\n                    $this->error(\"An administrator with email '{$email}' already exists.\");\n\n                    return self::FAILURE;\n                }\n            }\n\n            $password = $this->option('password') ?? password(\n                label: 'Password',\n                placeholder: 'Minimum 8 characters',\n                required: true,\n                validate: fn (string $value): ?string => strlen($value) < 8 ? 'Password must be at least 8 characters' : null\n            );\n\n            // Validate password from command option\n            if ($this->option('password') && strlen($password) < 8) {\n                $this->error('Password must be at least 8 characters.');\n\n                return self::FAILURE;\n            }\n\n            // Show summary\n            if (! $this->option('no-interaction') && ! ($this->option('name') && $this->option('email') && $this->option('password'))) {\n                $this->newLine();\n                $this->info('Summary:');\n                $this->line(\"  Name:  {$name}\");\n                $this->line(\"  Email: {$email}\");\n                $this->line('  Role:  Super Administrator');\n                $this->newLine();\n\n                $confirmed = confirm(\n                    label: 'Create this system administrator?',\n                    default: true\n                );\n\n                if (! $confirmed) {\n                    $this->info('Operation cancelled.');\n\n                    return self::SUCCESS;\n                }\n            }\n\n            // Create the system administrator\n            $admin = SystemAdministrator::query()->create([\n                'name' => $name,\n                'email' => $email,\n                'password' => bcrypt($password),\n                'email_verified_at' => now(),\n                'role' => SystemAdministratorRole::SuperAdministrator,\n            ]);\n\n            $this->newLine();\n            $this->info('✅ System Administrator created successfully!');\n            $this->newLine();\n            $this->line('  Details:');\n            $this->line(\"  ├─ Name:  {$admin->name}\");\n            $this->line(\"  ├─ Email: {$admin->email}\");\n            $this->line('  ├─ Role:  Super Administrator');\n            $this->line('  └─ Panel: /sysadmin');\n            $this->newLine();\n            $this->line('  You can now log in at: '.url('/sysadmin'));\n            $this->newLine();\n\n            return self::SUCCESS;\n        } catch (Throwable $e) {\n            $this->error('Failed to create system administrator:');\n            $this->line($e->getMessage());\n\n            if ($this->option('verbose')) {\n                $this->newLine();\n                $this->line($e->getTraceAsString());\n            }\n\n            return self::FAILURE;\n        }\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/GenerateSitemapCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Spatie\\Sitemap\\SitemapGenerator;\n\nfinal class GenerateSitemapCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'app:generate-sitemap';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Generate the sitemap';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle(): void\n    {\n        SitemapGenerator::create(config('app.url'))\n            ->writeToFile(public_path('sitemap.xml'));\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/InstallCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Artisan;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Facades\\Process;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\nuse Throwable;\n\nuse function Laravel\\Prompts\\confirm;\nuse function Laravel\\Prompts\\select;\nuse function Laravel\\Prompts\\spin;\nuse function Laravel\\Prompts\\text;\nuse function Laravel\\Prompts\\warning;\n\nfinal class InstallCommand extends Command\n{\n    protected $signature = 'relaticle:install\n                            {--force : Force installation even if already configured}\n                            {--env-file= : Custom path to .env file (for testing)}';\n\n    protected $description = 'Install and configure Relaticle';\n\n    public function handle(): int\n    {\n        $this->displayWelcome();\n\n        if (! $this->shouldProceed()) {\n            return self::SUCCESS;\n        }\n\n        $config = $this->getConfiguration();\n\n        return $this->runInstallation($config);\n    }\n\n    private function displayWelcome(): void\n    {\n        $this->output->write(PHP_EOL.'  <fg=cyan>\n ____      _       _   _      _\n|  _ \\ ___| | __ _| |_(_) ___| | ___\n| |_) / _ \\ |/ _` | __| |/ __| |/ _ \\\n|  _ <  __/ | (_| | |_| | (__| |  __/\n|_| \\_\\___|_|\\__,_|\\__|_|\\___|_|\\___|</>'.PHP_EOL.PHP_EOL);\n    }\n\n    private function shouldProceed(): bool\n    {\n        if (! $this->option('force') && $this->isAlreadyInstalled()) {\n            warning('Relaticle appears to be already installed.');\n\n            return confirm(\n                label: 'Do you want to continue anyway?',\n                default: false,\n                hint: 'This may overwrite existing configuration'\n            );\n        }\n\n        return true;\n    }\n\n    private function isAlreadyInstalled(): bool\n    {\n        return File::exists($this->envPath()) &&\n               config('app.key') &&\n               File::exists(public_path('storage'));\n    }\n\n    /** @return array<string, mixed> */\n    private function getConfiguration(): array\n    {\n        $this->info('Let\\'s configure your Relaticle installation...');\n\n        $database = select(\n            label: 'Which database would you like to use?',\n            options: [\n                'sqlite' => 'SQLite (Recommended for local development)',\n                'pgsql' => 'PostgreSQL (Recommended for production)',\n            ],\n            default: 'sqlite',\n            hint: 'SQLite requires no additional setup'\n        );\n\n        $installDemoData = confirm(\n            label: 'Install demo data?',\n            default: true,\n            hint: 'Includes sample companies, contacts, and more'\n        );\n\n        $createSysAdmin = confirm(\n            label: 'Create system administrator account?',\n            default: true,\n            hint: 'You can create one later using: php artisan sysadmin:create'\n        );\n\n        return [\n            'database' => $database,\n            'demo_data' => $installDemoData,\n            'sysadmin_user' => $createSysAdmin,\n        ];\n    }\n\n    /** @param array<string, mixed> $config */\n    private function runInstallation(array $config): int\n    {\n        /** @var array<string, callable(): bool> */\n        $installationSteps = [\n            'System Requirements' => $this->checkSystemRequirements(...),\n            'Environment Setup' => fn (): bool => $this->setupEnvironment($config),\n            'Dependencies' => $this->installDependencies(...),\n            'Database' => $this->setupDatabase(...),\n            'Assets' => $this->buildAssets(...),\n            'Storage' => $this->setupStorage(...),\n            'Demo Data' => fn (): bool => $config['demo_data'] ? $this->seedDemoData() : true,\n        ];\n\n        $this->info('🚀 Starting installation process...');\n\n        // Process non-interactive steps with spinner\n        foreach ($installationSteps as $stepName => $stepFunction) {\n            $success = spin(\n                callback: fn (): mixed => $stepFunction(),\n                message: \"Installing {$stepName}...\"\n            );\n\n            if (! $success) {\n                $this->newLine();\n                $this->error(\"❌ Installation failed during: {$stepName}\");\n                $this->newLine();\n                $this->line('<comment>Check the error messages above for more details.</comment>');\n                $this->line('<comment>You can re-run the installer with --force to retry.</comment>');\n\n                return self::FAILURE;\n            }\n\n            $this->line(\"   ✅ {$stepName} completed\");\n        }\n\n        // Handle System Administrator creation separately (requires user interaction)\n        if ($config['sysadmin_user']) {\n            $this->newLine();\n            $this->info('Creating System Administrator account...');\n\n            if (! $this->createSystemAdministrator()) {\n                $this->newLine();\n                $this->error('❌ Installation failed during: System Administrator creation');\n                $this->newLine();\n                $this->line('<comment>You can create a system administrator later using: php artisan sysadmin:create</comment>');\n\n                return self::FAILURE;\n            }\n\n            $this->line('   ✅ System Administrator created');\n        }\n\n        $this->newLine();\n        $this->displaySuccessMessage($config);\n\n        return self::SUCCESS;\n    }\n\n    private function checkSystemRequirements(): bool\n    {\n        $requirements = [\n            'PHP 8.4+' => version_compare(PHP_VERSION, '8.3.0', '>='),\n            'Composer' => $this->commandExists('composer'),\n            'Node.js' => $this->commandExists('node'),\n            'NPM' => $this->commandExists('npm'),\n        ];\n\n        $extensions = [\n            'pdo_sqlite', 'gd', 'bcmath', 'ctype', 'fileinfo',\n            'json', 'mbstring', 'openssl', 'tokenizer', 'xml',\n        ];\n\n        foreach ($extensions as $extension) {\n            $requirements[\"PHP {$extension}\"] = extension_loaded($extension);\n        }\n\n        $failed = array_filter($requirements, fn (bool $passed): bool => ! $passed);\n\n        if ($failed !== []) {\n            $this->newLine();\n            $this->error('✗ Missing system requirements:');\n            foreach (array_keys($failed) as $requirement) {\n                $this->line(\"  • {$requirement}\");\n            }\n            $this->newLine();\n            $this->line('<comment>Please install the missing requirements and try again.</comment>');\n\n            return false;\n        }\n\n        return true;\n    }\n\n    private function commandExists(string $command): bool\n    {\n        return Process::run(\"which {$command} 2>/dev/null\")->successful();\n    }\n\n    /** @param array<string, mixed> $config */\n    private function setupEnvironment(array $config): bool\n    {\n        // Create .env file\n        if (! File::exists($this->envPath())) {\n            if (! File::exists(base_path('.env.example'))) {\n                return false;\n            }\n            File::copy(base_path('.env.example'), $this->envPath());\n        }\n\n        // Generate app key\n        if (! config('app.key')) {\n            Artisan::call('key:generate', ['--force' => true]);\n        }\n\n        // Configure database\n        return $this->configureDatabaseConnection($config['database']);\n    }\n\n    private function configureDatabaseConnection(string $type): bool\n    {\n        $envContent = File::get($this->envPath());\n\n        if ($type === 'sqlite') {\n            if (! File::exists(database_path())) {\n                File::makeDirectory(database_path(), 0755, true);\n            }\n\n            $dbPath = database_path('database.sqlite');\n            if (! File::exists($dbPath)) {\n                File::put($dbPath, '');\n            }\n\n            $config = [\n                'DB_CONNECTION=sqlite',\n                \"DB_DATABASE={$dbPath}\",\n                'DB_HOST=',\n                'DB_PORT=',\n                'DB_USERNAME=',\n                'DB_PASSWORD=',\n            ];\n        } else {\n            // For non-SQLite, we'll use the existing .env values or prompt if needed\n            return true;\n        }\n\n        foreach ($config as $line) {\n            [$key, $value] = explode('=', $line, 2);\n            $envContent = preg_replace(\"/^{$key}=.*/m\", $line, (string) $envContent);\n        }\n\n        File::put($this->envPath(), $envContent);\n\n        return true;\n    }\n\n    private function installDependencies(): bool\n    {\n        $composerResult = Process::run('composer install --no-interaction --prefer-dist --optimize-autoloader');\n        if (! $composerResult->successful()) {\n            $this->error('Composer install failed:');\n            $this->line($composerResult->errorOutput());\n\n            return false;\n        }\n\n        $npmResult = Process::run('npm ci --silent');\n        if (! $npmResult->successful()) {\n            $this->error('NPM install failed:');\n            $this->line($npmResult->errorOutput());\n\n            return false;\n        }\n\n        return true;\n    }\n\n    private function setupDatabase(): bool\n    {\n        try {\n            Artisan::call('migrate', ['--force' => true]);\n\n            return true;\n        } catch (Throwable $e) {\n            $this->error('Database migration failed:');\n            $this->line($e->getMessage());\n\n            return false;\n        }\n    }\n\n    private function buildAssets(): bool\n    {\n        $result = Process::run('npm run build');\n\n        if (! $result->successful()) {\n            $this->error('Asset compilation failed:');\n            $this->line($result->errorOutput());\n\n            return false;\n        }\n\n        return true;\n    }\n\n    private function setupStorage(): bool\n    {\n        try {\n            Artisan::call('storage:link', ['--force' => true]);\n\n            return true;\n        } catch (Throwable $e) {\n            $this->error('Storage link failed:');\n            $this->line($e->getMessage());\n\n            return false;\n        }\n    }\n\n    private function seedDemoData(): bool\n    {\n        try {\n            // When using --force, we might be re-running installation\n            // Use migrate:fresh to reset the database cleanly\n            if ($this->option('force')) {\n                Artisan::call('migrate:fresh', ['--force' => true]);\n            }\n\n            Artisan::call('db:seed', ['--force' => true]);\n\n            return true;\n        } catch (Throwable $e) {\n            $this->error('Demo data seeding failed:');\n            $this->line($e->getMessage());\n\n            return false;\n        }\n    }\n\n    private function createSystemAdministrator(): bool\n    {\n        try {\n            // Check if system administrator already exists\n            if (SystemAdministrator::query()->exists()) {\n                $this->warn('A System Administrator already exists.');\n                $overwrite = confirm(\n                    label: 'Do you want to create another one?',\n                    default: false,\n                    hint: 'You can have multiple system administrators'\n                );\n\n                if (! $overwrite) {\n                    return true;\n                }\n            }\n\n            $name = text(\n                label: 'System Administrator name',\n                default: 'System Admin',\n                required: true\n            );\n\n            $email = text(\n                label: 'System Administrator email address',\n                default: 'sysadmin@relaticle.local',\n                required: true,\n                validate: fn (string $value): ?string => filter_var($value, FILTER_VALIDATE_EMAIL) ? null : 'Please enter a valid email address'\n            );\n\n            // Check if email already exists\n            if (SystemAdministrator::query()->where('email', $email)->exists()) {\n                $this->error(\"A System Administrator with email '{$email}' already exists.\");\n\n                return false;\n            }\n\n            $password = text(\n                label: 'System Administrator password (min. 8 characters)',\n                default: 'password123',\n                required: true,\n                validate: fn (string $value): ?string => strlen($value) >= 8 ? null : 'Password must be at least 8 characters'\n            );\n\n            // Create the system administrator\n            SystemAdministrator::query()->create([\n                'name' => $name,\n                'email' => $email,\n                'password' => bcrypt($password),\n                'email_verified_at' => now(),\n                'role' => SystemAdministratorRole::SuperAdministrator,\n            ]);\n\n            $this->info('  System Administrator created successfully!');\n            $this->line(\"  Email: {$email}\");\n            $this->line('  Access panel at: /sysadmin');\n\n            return true;\n        } catch (Throwable $e) {\n            $this->error('System Administrator creation failed:');\n            $this->line($e->getMessage());\n\n            return false;\n        }\n    }\n\n    /** @param array<string, mixed> $config */\n    private function displaySuccessMessage(array $config): void\n    {\n        $this->newLine();\n\n        $this->info('🎉 Relaticle installed successfully!');\n\n        $this->newLine();\n        $this->line('  <options=bold>Start all development services:</>');\n        $this->line('  composer run dev');\n        $this->newLine();\n\n        $this->line('  <options=bold>Your application:</>');\n        $this->line('  http://localhost:8000');\n\n        if ($config['sysadmin_user'] ?? false) {\n            $this->newLine();\n            $this->line('  <options=bold>System Admin panel:</>');\n            $this->line('  http://localhost:8000/sysadmin');\n        }\n\n        if ($config['demo_data']) {\n            $this->newLine();\n            $this->line('  <options=bold>Demo data included:</>');\n            $this->line('  • Sample companies and contacts');\n            $this->line('  • Example opportunities and tasks');\n            $this->line('  • Pre-configured custom fields');\n        }\n\n        $this->newLine();\n        $this->line('  <options=bold>Development services:</>');\n        $this->line('  • Laravel development server');\n        $this->line('  • Vite asset watcher with HMR');\n        $this->line('  • Queue worker (Horizon)');\n        $this->line('  • Real-time logs (Pail)');\n\n        $this->newLine();\n        $this->line('  Documentation: https://relaticle.com/documentation');\n        $this->newLine();\n\n        $this->info('Happy CRM-ing! 🚀');\n    }\n\n    private function envPath(): string\n    {\n        return $this->option('env-file') ?: base_path('.env');\n    }\n}\n"
  },
  {
    "path": "app/Contracts/User/CreatesNewSocialUsers.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Contracts\\User;\n\nuse App\\Models\\User;\n\ninterface CreatesNewSocialUsers\n{\n    /**\n     * Create a new social user.\n     *\n     * @param  array<string, string>  $input\n     */\n    public function create(array $input): User;\n}\n"
  },
  {
    "path": "app/Data/SubscriberData.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Data;\n\nuse Spatie\\LaravelData\\Data;\n\nfinal class SubscriberData extends Data\n{\n    public function __construct(\n        public string $email,\n        public ?string $first_name = '',\n        public ?string $last_name = '',\n        /** @var array<string> */\n        public ?array $tags = [],\n        public bool $skip_confirmation = true,\n    ) {}\n}\n"
  },
  {
    "path": "app/Enums/CreationSource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums;\n\nuse Filament\\Support\\Contracts\\HasColor;\nuse Filament\\Support\\Contracts\\HasLabel;\n\nenum CreationSource: string implements HasColor, HasLabel\n{\n    /**\n     * Created through the web application interface by a user.\n     * This includes records created through forms, dashboards, and\n     * admin interfaces where a user directly inputs the data.\n     */\n    case WEB = 'web';\n\n    /**\n     * Created by automated system processes without direct user action.\n     * Examples include scheduled jobs, event-triggered workflows,\n     * and background processes that generate records automatically.\n     */\n    case SYSTEM = 'system';\n\n    /**\n     * Created through bulk data import functionality.\n     * This applies to records generated when users upload files\n     * (CSV, Excel, etc.) through import tools or when data is\n     * migrated from another system in bulk operations.\n     */\n    case IMPORT = 'import';\n\n    /**\n     * Created through the REST API.\n     * This applies to records created by external integrations\n     * and third-party applications using API tokens.\n     */\n    case API = 'api';\n\n    /**\n     * Created through the MCP server by AI agents.\n     * This applies to records created via Model Context Protocol\n     * tools, typically by AI assistants interacting with the system.\n     */\n    case MCP = 'mcp';\n\n    public function getColor(): string\n    {\n        return match ($this) {\n            self::WEB => 'info',\n            self::SYSTEM => 'warning',\n            self::IMPORT => 'success',\n            self::API => 'purple',\n            self::MCP => 'gray',\n        };\n    }\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::WEB => 'Web Interface',\n            self::SYSTEM => 'System Process',\n            self::IMPORT => 'Data Import',\n            self::API => 'API',\n            self::MCP => 'MCP Agent',\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/CustomFieldType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums;\n\n/**\n * ABOUTME: Maps to the field types available in the relaticle/custom-fields package\n * ABOUTME: Provides type-safe references to custom field types for maintainability\n */\nenum CustomFieldType: string\n{\n    case TEXT = 'text';\n    case NUMBER = 'number';\n    case EMAIL = 'email';\n    case PHONE = 'phone';\n    case LINK = 'link';\n    case TEXTAREA = 'textarea';\n    case CHECKBOX = 'checkbox';\n    case CHECKBOX_LIST = 'checkbox-list';\n    case RADIO = 'radio';\n    case RICH_EDITOR = 'rich-editor';\n    case MARKDOWN_EDITOR = 'markdown-editor';\n    case TAGS_INPUT = 'tags-input';\n    case COLOR_PICKER = 'color-picker';\n    case TOGGLE = 'toggle';\n    case TOGGLE_BUTTONS = 'toggle-buttons';\n    case CURRENCY = 'currency';\n    case DATE = 'date';\n    case DATE_TIME = 'date-time';\n    case SELECT = 'select';\n    case MULTI_SELECT = 'multi-select';\n    case FILE_UPLOAD = 'file-upload';\n    case RECORD = 'record';\n}\n"
  },
  {
    "path": "app/Enums/CustomFields/CompanyField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums\\CustomFields;\n\nuse App\\Enums\\CustomFieldType;\n\nenum CompanyField: string\n{\n    use CustomFieldTrait;\n\n    /**\n     * Ideal Customer Profile: Indicates whether the company is the most suitable customer for you\n     */\n    case ICP = 'icp';\n\n    /**\n     * Domains: Website domains of the company (system field)\n     */\n    case DOMAINS = 'domains';\n\n    /**\n     * LinkedIn: The LinkedIn profile URL of the company\n     */\n    case LINKEDIN = 'linkedin';\n\n    public function getDisplayName(): string\n    {\n        return match ($this) {\n            self::ICP => 'ICP',\n            self::DOMAINS => 'Domains',\n            self::LINKEDIN => 'LinkedIn',\n        };\n    }\n\n    public function getFieldType(): string\n    {\n        return match ($this) {\n            self::ICP => CustomFieldType::TOGGLE->value,\n            self::DOMAINS, self::LINKEDIN => CustomFieldType::LINK->value,\n        };\n    }\n\n    public function isSystemDefined(): bool\n    {\n        return match ($this) {\n            self::DOMAINS => true,\n            default => false,\n        };\n    }\n\n    public function isListToggleableHidden(): bool\n    {\n        return match ($this) {\n            self::ICP, self::DOMAINS => false,\n            default => true,\n        };\n    }\n\n    public function getDescription(): string\n    {\n        return match ($this) {\n            self::ICP => 'Indicates whether this company is an Ideal Customer Profile',\n            self::DOMAINS => 'Website domains of the company (e.g., example.com)',\n            self::LINKEDIN => 'URL to the company\\'s LinkedIn profile',\n        };\n    }\n\n    public function allowsMultipleValues(): bool\n    {\n        return match ($this) {\n            self::DOMAINS => true,\n            default => false,\n        };\n    }\n\n    public function isUniquePerEntityType(): bool\n    {\n        return match ($this) {\n            self::DOMAINS => true,\n            default => false,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/CustomFields/CustomFieldTrait.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums\\CustomFields;\n\nuse Illuminate\\Support\\Str;\nuse Relaticle\\CustomFields\\Enums\\CustomFieldWidth;\n\n/**\n * Trait for custom field enums to provide configuration data\n *\n * This trait provides a standardized interface for custom field enums\n * and default implementations for optional methods.\n */\ntrait CustomFieldTrait\n{\n    /**\n     * Get the display name for the field\n     *\n     * @return string The human-readable name of the field\n     */\n    public function getDisplayName(): string\n    {\n        return Str::title($this->name);\n    }\n\n    /**\n     * Get the field type\n     *\n     * @return string The type of form field to use\n     */\n    abstract public function getFieldType(): string;\n\n    /**\n     * Get whether this field is system defined\n     *\n     * System-defined fields cannot be deleted by users, only deactivated.\n     *\n     * @return bool True if the field is system defined\n     */\n    public function isSystemDefined(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get whether the field is hidden in list toggle\n     *\n     * Fields that aren't toggleable hidden are always shown in lists.\n     *\n     * @return bool True if the field can be hidden in list view\n     */\n    public function isListToggleableHidden(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the field width\n     *\n     * @return CustomFieldWidth The width of the field or null for default width\n     */\n    public function getWidth(): CustomFieldWidth\n    {\n        return CustomFieldWidth::_100;\n    }\n\n    /**\n     * Get options for select fields\n     *\n     * @return array<int|string, string>|null Array of options for select/multi-select fields or null if not applicable\n     */\n    public function getOptions(): ?array\n    {\n        return null;\n    }\n\n    /**\n     * Get field description (tooltip)\n     *\n     * @return string|null The field description or null if not provided\n     */\n    public function getDescription(): ?string\n    {\n        return null;\n    }\n\n    /**\n     * Get color mapping for select field options\n     *\n     * @return array<int|string, string>|null Array of option => color mappings or null if not applicable\n     */\n    public function getOptionColors(): ?array\n    {\n        return null;\n    }\n\n    /**\n     * Get whether this field should have color options enabled\n     *\n     * @return bool True if color options should be enabled\n     */\n    public function hasColorOptions(): bool\n    {\n        return $this->getOptionColors() !== null;\n    }\n\n    /**\n     * Get whether this field allows multiple values\n     *\n     * @return bool True if multiple values are allowed\n     */\n    public function allowsMultipleValues(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Get the maximum number of values allowed for this field\n     *\n     * @return int Maximum values (1 for single value fields)\n     */\n    public function getMaxValues(): int\n    {\n        return $this->allowsMultipleValues() ? 5 : 1;\n    }\n\n    /**\n     * Get whether this field value must be unique per entity type\n     *\n     * @return bool True if values must be unique across all records of this entity type\n     */\n    public function isUniquePerEntityType(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Get complete field configuration\n     *\n     * @return array{\n     *     name: string,\n     *     type: string,\n     *     systemDefined: bool,\n     *     listToggleableHidden: bool,\n     *     width: CustomFieldWidth|null,\n     *     options: array<int|string, string>|null,\n     *     description: string|null,\n     *     optionColors: array<int|string, string>|null,\n     *     hasColorOptions: bool,\n     *     allowsMultipleValues: bool\n     * } The complete field configuration\n     */\n    public function getConfiguration(): array\n    {\n        return [\n            'name' => $this->getDisplayName(),\n            'type' => $this->getFieldType(),\n            'systemDefined' => $this->isSystemDefined(),\n            'listToggleableHidden' => $this->isListToggleableHidden(),\n            'width' => $this->getWidth(),\n            'options' => $this->getOptions(),\n            'description' => $this->getDescription(),\n            'optionColors' => $this->getOptionColors(),\n            'hasColorOptions' => $this->hasColorOptions(),\n            'allowsMultipleValues' => $this->allowsMultipleValues(),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Enums/CustomFields/NoteField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums\\CustomFields;\n\nuse App\\Enums\\CustomFieldType;\n\n/**\n * Note custom field codes\n */\nenum NoteField: string\n{\n    use CustomFieldTrait;\n\n    case BODY = 'body';\n\n    public function getFieldType(): string\n    {\n        return match ($this) {\n            self::BODY => CustomFieldType::RICH_EDITOR->value,\n        };\n    }\n\n    public function getDisplayName(): string\n    {\n        return match ($this) {\n            self::BODY => 'Body',\n        };\n    }\n\n    public function isListToggleableHidden(): bool\n    {\n        return match ($this) {\n            self::BODY => true,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/CustomFields/OpportunityField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums\\CustomFields;\n\nuse App\\Enums\\CustomFieldType;\n\nenum OpportunityField: string\n{\n    use CustomFieldTrait;\n\n    case AMOUNT = 'amount';\n    case CLOSE_DATE = 'close_date';\n    case STAGE = 'stage';\n\n    /**\n     * @return string[]|null\n     */\n    public function getOptions(): ?array\n    {\n        return match ($this) {\n            self::STAGE => [\n                'Prospecting',\n                'Qualification',\n                'Needs Analysis',\n                'Value Proposition',\n                'Id. Decision Makers',\n                'Perception Analysis',\n                'Proposal/Price Quote',\n                'Negotiation/Review',\n                'Closed Won',\n                'Closed Lost',\n            ],\n            default => null,\n        };\n    }\n\n    public function getFieldType(): string\n    {\n        return match ($this) {\n            self::AMOUNT => CustomFieldType::CURRENCY->value,\n            self::CLOSE_DATE => CustomFieldType::DATE->value,\n            self::STAGE => CustomFieldType::SELECT->value,\n        };\n    }\n\n    public function getDisplayName(): string\n    {\n        return match ($this) {\n            self::AMOUNT => 'Amount',\n            self::CLOSE_DATE => 'Close Date',\n            self::STAGE => 'Stage',\n        };\n    }\n\n    public function isListToggleableHidden(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Get color mapping for select field options\n     *\n     * 2024 Sophisticated Sales Journey - A unique emotional progression through the\n     * pipeline using earth-inspired, professional colors that tell the story of\n     * building energy, trust, and momentum from first contact to final outcome.\n     * Based on latest color psychology and 2024 design sophistication trends.\n     *\n     * @return array<int|string, string>|null Array of option => color mappings or null if not applicable\n     */\n    public function getOptionColors(): ?array\n    {\n        return match ($this) {\n            self::STAGE => [\n                'Prospecting' => '#a5b4fc',           // Misty Dawn - Soft exploration of possibilities\n                'Qualification' => '#1e40af',         // Ocean Depth - Deep analytical thinking\n                'Needs Analysis' => '#0d9488',        // Teal Understanding - Empathy & insight\n                'Value Proposition' => '#eab308',     // Golden Clarity - Bright ideas & value\n                'Id. Decision Makers' => '#7c3aed',   // Royal Authority - Power & influence\n                'Perception Analysis' => '#f59e0b',   // Warm Amber - Comfortable evaluation\n                'Proposal/Price Quote' => '#1e293b',  // Professional Navy - Serious business\n                'Negotiation/Review' => '#f97316',    // Electric Coral - Dynamic energy\n                'Closed Won' => '#059669',            // Victory Emerald - Success celebration\n                'Closed Lost' => '#6b7280',           // Silver Acceptance - Respectful closure\n            ],\n            default => null,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/CustomFields/PeopleField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums\\CustomFields;\n\nuse App\\Enums\\CustomFieldType;\n\n/**\n * People custom field codes\n */\nenum PeopleField: string\n{\n    use CustomFieldTrait;\n\n    case EMAILS = 'emails';\n    case PHONE_NUMBER = 'phone_number';\n    case JOB_TITLE = 'job_title';\n    case LINKEDIN = 'linkedin';\n\n    public function getFieldType(): string\n    {\n        return match ($this) {\n            self::EMAILS => CustomFieldType::EMAIL->value,\n            self::PHONE_NUMBER => CustomFieldType::PHONE->value,\n            self::JOB_TITLE => CustomFieldType::TEXT->value,\n            self::LINKEDIN => CustomFieldType::LINK->value,\n        };\n    }\n\n    public function getDisplayName(): string\n    {\n        return match ($this) {\n            self::EMAILS => 'Emails',\n            self::PHONE_NUMBER => 'Phone Number',\n            self::JOB_TITLE => 'Job Title',\n            self::LINKEDIN => 'LinkedIn',\n        };\n    }\n\n    public function isListToggleableHidden(): bool\n    {\n        return match ($this) {\n            self::JOB_TITLE, self::EMAILS => false,\n            default => true,\n        };\n    }\n\n    public function isSystemDefined(): bool\n    {\n        return match ($this) {\n            self::EMAILS => true,\n            default => false,\n        };\n    }\n\n    public function allowsMultipleValues(): bool\n    {\n        return match ($this) {\n            self::EMAILS => true,\n            default => false,\n        };\n    }\n\n    public function isUniquePerEntityType(): bool\n    {\n        return match ($this) {\n            self::EMAILS => true,\n            default => false,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/CustomFields/TaskField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums\\CustomFields;\n\nuse App\\Enums\\CustomFieldType;\nuse Relaticle\\CustomFields\\Enums\\CustomFieldWidth;\n\nenum TaskField: string\n{\n    use CustomFieldTrait;\n\n    /**\n     * Task status tracking\n     */\n    case STATUS = 'status';\n\n    /**\n     * Task priority level\n     */\n    case PRIORITY = 'priority';\n\n    /**\n     * Detailed task description\n     */\n    case DESCRIPTION = 'description';\n\n    /**\n     * Task due date and time\n     */\n    case DUE_DATE = 'due_date';\n\n    /**\n     * Get the display name for the field\n     *\n     * @return string The human-readable field name\n     */\n    public function getDisplayName(): string\n    {\n        return match ($this) {\n            self::STATUS => 'Status',\n            self::PRIORITY => 'Priority',\n            self::DESCRIPTION => 'Description',\n            self::DUE_DATE => 'Due Date',\n        };\n    }\n\n    /**\n     * Get the field type\n     *\n     * @return string The type of form control to use\n     */\n    public function getFieldType(): string\n    {\n        return match ($this) {\n            self::STATUS, self::PRIORITY => CustomFieldType::SELECT->value,\n            self::DESCRIPTION => CustomFieldType::RICH_EDITOR->value,\n            self::DUE_DATE => CustomFieldType::DATE_TIME->value,\n        };\n    }\n\n    /**\n     * Get whether this field is system defined\n     *\n     * @return bool True if the field is system defined\n     */\n    public function isSystemDefined(): bool\n    {\n        return match ($this) {\n            self::STATUS, self::PRIORITY => true,\n            default => false,\n        };\n    }\n\n    /**\n     * Get whether the field is hidden in list toggle\n     *\n     * @return bool True if the field can be hidden in list view\n     */\n    public function isListToggleableHidden(): bool\n    {\n        return match ($this) {\n            self::STATUS, self::PRIORITY, self::DUE_DATE => false,\n            default => true,\n        };\n    }\n\n    /**\n     * Get the field width\n     *\n     * @return CustomFieldWidth The width of the field or null for default width\n     */\n    public function getWidth(): CustomFieldWidth\n    {\n        return match ($this) {\n            self::STATUS, self::PRIORITY => CustomFieldWidth::_50,\n            default => CustomFieldWidth::_100,\n        };\n    }\n\n    /**\n     * Get available options for this field\n     *\n     * @return array<int|string, string>|null Array of options for select/multi-select fields or null if not applicable\n     */\n    public function getOptions(): ?array\n    {\n        return match ($this) {\n            self::STATUS => [\n                'To do',\n                'In progress',\n                'Done',\n            ],\n            self::PRIORITY => [\n                'Low',\n                'Medium',\n                'High',\n            ],\n            default => null,\n        };\n    }\n\n    /**\n     * Get color mapping for select field options\n     *\n     * 2024 sophisticated color psychology system - completely unique colors designed for\n     * emotional resonance and semantic meaning. Based on latest color trends including\n     * Digital Lavender, Mocha Mousse sophistication, and retro-futuristic aesthetics.\n     *\n     * @return array<int|string, string>|null Array of option => color mappings or null if not applicable\n     */\n    public function getOptionColors(): ?array\n    {\n        return match ($this) {\n            self::STATUS => [\n                'To do' => '#c4b5fd',       // Soft Periwinkle - Digital Lavender inspired calm potential\n                'In progress' => '#0A80EA', // Professional Blue - Clear active progress state\n                'Done' => '#2A9764',        // Success Green - Confident completion achievement\n            ],\n            self::PRIORITY => [\n                'Low' => '#94a3b8',         // Sage Whisper - Natural earth tone, subtle presence\n                'Medium' => '#d4a574',      // Burnished Gold - Mocha Mousse warmth & confidence\n                'High' => '#dc2626',        // Crimson Velvet - Sophisticated urgent command\n            ],\n            default => null,\n        };\n    }\n\n    /**\n     * Get field description (tooltip)\n     *\n     * @return string The field description\n     */\n    public function getDescription(): string\n    {\n        return match ($this) {\n            self::STATUS => 'Current status of the task',\n            self::PRIORITY => 'Priority level for this task',\n            self::DESCRIPTION => 'Detailed description of what needs to be done',\n            self::DUE_DATE => 'When this task needs to be completed by',\n        };\n    }\n}\n"
  },
  {
    "path": "app/Enums/SocialiteProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums;\n\nenum SocialiteProvider: string\n{\n    case GOOGLE = 'google';\n    case GITHUB = 'github';\n}\n"
  },
  {
    "path": "app/Enums/SubscriberTagEnum.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Enums;\n\nenum SubscriberTagEnum: string\n{\n    case VERIFIED = 'verified';\n}\n"
  },
  {
    "path": "app/Filament/Actions/GenerateRecordSummaryAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Actions;\n\nuse App\\Models\\AiSummary;\nuse App\\Services\\AI\\RecordSummaryService;\nuse Filament\\Actions\\Action;\nuse Filament\\Notifications\\Notification;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Throwable;\n\nfinal class GenerateRecordSummaryAction extends Action\n{\n    public static function getDefaultName(): string\n    {\n        return 'generateSummary';\n    }\n\n    protected function setUp(): void\n    {\n        parent::setUp();\n\n        $this->label('AI Summary')\n            ->icon(Heroicon::Sparkles)\n            ->color('gray')\n            ->modalHeading('AI Summary')\n            ->modalDescription(fn (Model $record): string => 'AI-generated summary for this '.class_basename($record))\n            ->modalSubmitAction(false)\n            ->modalCancelActionLabel('Close')\n            ->modalContent(fn (Model $record): View => $this->getSummaryView($record))\n            ->registerModalActions([\n                $this->makeRegenerateAction(),\n                $this->makeCopyAction(),\n            ]);\n    }\n\n    private function makeRegenerateAction(): Action\n    {\n        return Action::make('regenerate')\n            ->label('Regenerate')\n            ->icon(Heroicon::ArrowPath)\n            ->color('gray')\n            ->action(fn (Model $record) => $this->regenerateSummary($record));\n    }\n\n    private function makeCopyAction(): Action\n    {\n        return Action::make('copy')\n            ->label('Copy')\n            ->icon(Heroicon::Clipboard)\n            ->color('gray')\n            ->extraAttributes(function (Model $record): array {\n                // @phpstan-ignore nullsafe.neverNull (defensive code for models without HasAiSummary trait)\n                $summaryText = $this->getCachedSummary($record)?->summary ?? '';\n\n                return [\n                    'x-on:click' => 'window.navigator.clipboard.writeText('.json_encode($summaryText).'); $tooltip(\\'Copied!\\')',\n                ];\n            });\n    }\n\n    private function getSummaryView(Model $record): View\n    {\n        return view('filament.actions.ai-summary', [\n            'summary' => $this->summaryService()->getSummary($record),\n        ]);\n    }\n\n    private function getCachedSummary(Model $record): ?AiSummary\n    {\n        if (! method_exists($record, 'aiSummary')) {\n            return null;\n        }\n\n        return $record->aiSummary; // @phpstan-ignore property.notFound\n    }\n\n    private function regenerateSummary(Model $record): void\n    {\n        try {\n            $this->summaryService()->getSummary($record, regenerate: true);\n\n            Notification::make()\n                ->title('Summary regenerated')\n                ->success()\n                ->send();\n        } catch (Throwable $e) {\n            Notification::make()\n                ->title('Failed to regenerate summary')\n                ->body($e->getMessage())\n                ->danger()\n                ->send();\n        }\n    }\n\n    private function summaryService(): RecordSummaryService\n    {\n        return resolve(RecordSummaryService::class);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Components/Infolists/AvatarName.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Components\\Infolists;\n\nuse Filament\\Infolists\\Components\\Entry;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class AvatarName extends Entry\n{\n    protected string $view = 'filament.components.infolists.avatar-name';\n\n    private ?string $avatarPath = null;\n\n    private ?string $namePath = null;\n\n    private string $avatarSize = 'md';\n\n    private string $textSize = 'sm';\n\n    private bool $circular = true;\n\n    public function avatar(string $path): static\n    {\n        $this->avatarPath = $path;\n\n        return $this;\n    }\n\n    public function name(string $path): static\n    {\n        $this->namePath = $path;\n\n        return $this;\n    }\n\n    public function avatarSize(string $size): static\n    {\n        $this->avatarSize = $size;\n\n        return $this;\n    }\n\n    public function textSize(string $size): static\n    {\n        $this->textSize = $size;\n\n        return $this;\n    }\n\n    public function square(): static\n    {\n        $this->circular = false;\n\n        return $this;\n    }\n\n    public function circular(): static\n    {\n        $this->circular = true;\n\n        return $this;\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function getState(): array\n    {\n        $record = $this->getRecord();\n\n        if (! $record instanceof Model) {\n            return [\n                'avatar' => null,\n                'name' => null,\n                'avatarSize' => $this->avatarSize,\n                'textSize' => $this->textSize,\n                'circular' => $this->circular,\n            ];\n        }\n\n        $avatarValue = in_array($this->avatarPath, [null, '', '0'], true) ? null : $this->resolvePath($record, $this->avatarPath);\n        $nameValue = in_array($this->namePath, [null, '', '0'], true) ? null : $this->resolvePath($record, $this->namePath);\n\n        return [\n            'avatar' => $avatarValue,\n            'name' => $nameValue,\n            'avatarSize' => $this->avatarSize,\n            'textSize' => $this->textSize,\n            'circular' => $this->circular,\n        ];\n    }\n\n    private function resolvePath(mixed $record, string $path): mixed\n    {\n        return $this->evaluate(function () use ($record, $path) {\n            $segments = explode('.', $path);\n            $value = $record;\n\n            foreach ($segments as $segment) {\n                if ($value === null) {\n                    break;\n                }\n\n                $value = $value->{$segment} ?? null;\n            }\n\n            return $value;\n        });\n    }\n}\n"
  },
  {
    "path": "app/Filament/Exports/BaseExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Exports;\n\nuse App\\Models\\Team;\nuse Filament\\Actions\\Exports\\Exporter;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Auth;\n\nabstract class BaseExporter extends Exporter\n{\n    /**\n     * @param  array<string, string>  $columnMap\n     * @param  array<string, mixed>  $options\n     */\n    public function __construct(\n        Export $export,\n        array $columnMap,\n        array $options,\n    ) {\n        parent::__construct($export, $columnMap, $options);\n\n        // Set the team_id on the export record\n        if (Auth::guard('web')->check() && Auth::guard('web')->user()->currentTeam) {\n            /** @var Team $currentTeam */\n            $currentTeam = Auth::guard('web')->user()->currentTeam;\n            $export->team_id = $currentTeam->getKey();\n        }\n    }\n\n    /**\n     * Make exports tenant-aware by scoping to the current team\n     *\n     * @param  Builder<Model>  $query\n     * @return Builder<Model>\n     */\n    public static function modifyQuery(Builder $query): Builder\n    {\n        if (Auth::guard('web')->check() && Auth::guard('web')->user()->currentTeam) {\n            /** @var Team $currentTeam */\n            $currentTeam = Auth::guard('web')->user()->currentTeam;\n\n            return $query->where('team_id', $currentTeam->getKey());\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Exports/CompanyExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Exports;\n\nuse App\\Models\\Company;\nuse Carbon\\Carbon;\nuse Filament\\Actions\\Exports\\ExportColumn;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class CompanyExporter extends BaseExporter\n{\n    protected static ?string $model = Company::class;\n\n    public static function getColumns(): array\n    {\n        return [\n            ExportColumn::make('id')\n                ->label('ID'),\n            ExportColumn::make('name')\n                ->label('Company Name'),\n            ExportColumn::make('team.name')\n                ->label('Team'),\n            ExportColumn::make('accountOwner.name')\n                ->label('Account Owner'),\n            ExportColumn::make('creator.name')\n                ->label('Created By'),\n            ExportColumn::make('people_count')\n                ->label('Number of People')\n                ->state(fn (Company $company): int => $company->people()->count()),\n            ExportColumn::make('opportunities_count')\n                ->label('Number of Opportunities')\n                ->state(fn (Company $company): int => $company->opportunities()->count()),\n            ExportColumn::make('created_at')\n                ->label('Created At')\n                ->formatStateUsing(fn (Carbon $state): string => $state->format('Y-m-d H:i:s')),\n            ExportColumn::make('updated_at')\n                ->label('Updated At')\n                ->formatStateUsing(fn (Carbon $state): string => $state->format('Y-m-d H:i:s')),\n            ExportColumn::make('creation_source')\n                ->label('Creation Source')\n                ->formatStateUsing(fn (mixed $state): string => $state->value ?? (string) $state),\n\n            // Add all custom fields automatically\n            ...CustomFields::exporter()->forModel(self::getModel())->columns(),\n        ];\n    }\n\n    public static function getCompletedNotificationBody(Export $export): string\n    {\n        $successfulRows = $export->successful_rows ?? 0;\n        $body = 'Your company export has completed and '.number_format($successfulRows).' '.str('row')->plural($successfulRows).' exported.';\n\n        if (($failedRowsCount = $export->getFailedRowsCount()) !== 0) {\n            $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';\n        }\n\n        return $body;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Exports/NoteExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Exports;\n\nuse App\\Models\\Note;\nuse Filament\\Actions\\Exports\\ExportColumn;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Illuminate\\Support\\Number;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class NoteExporter extends BaseExporter\n{\n    protected static ?string $model = Note::class;\n\n    public static function getColumns(): array\n    {\n        return [\n            ExportColumn::make('id')\n                ->label('ID'),\n            ExportColumn::make('team.name'),\n            ExportColumn::make('creator.name'),\n            ExportColumn::make('creation_source')\n                ->formatStateUsing(fn (mixed $state): string => $state->value ?? (string) $state),\n            ExportColumn::make('title'),\n            ExportColumn::make('created_at'),\n            ExportColumn::make('updated_at'),\n            ExportColumn::make('deleted_at'),\n\n            ...CustomFields::exporter()->forModel(self::getModel())->columns(),\n        ];\n    }\n\n    public static function getCompletedNotificationBody(Export $export): string\n    {\n        $body = 'Your note export has completed and '.Number::format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';\n\n        if (($failedRowsCount = $export->getFailedRowsCount()) !== 0) {\n            $body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';\n        }\n\n        return $body;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Exports/OpportunityExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Exports;\n\nuse App\\Models\\Opportunity;\nuse Carbon\\Carbon;\nuse Filament\\Actions\\Exports\\ExportColumn;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class OpportunityExporter extends BaseExporter\n{\n    protected static ?string $model = Opportunity::class;\n\n    public static function getColumns(): array\n    {\n        return [\n            ExportColumn::make('id')\n                ->label('ID'),\n            ExportColumn::make('name')\n                ->label('Opportunity Name'),\n            ExportColumn::make('company.name')\n                ->label('Company'),\n            ExportColumn::make('contact.name')\n                ->label('Contact Person'),\n            ExportColumn::make('team.name')\n                ->label('Team'),\n            ExportColumn::make('creator.name')\n                ->label('Created By'),\n            ExportColumn::make('notes_count')\n                ->label('Number of Notes')\n                ->state(fn (Opportunity $opportunity): int => $opportunity->notes()->count()),\n            ExportColumn::make('tasks_count')\n                ->label('Number of Tasks')\n                ->state(fn (Opportunity $opportunity): int => $opportunity->tasks()->count()),\n            ExportColumn::make('created_at')\n                ->label('Created At')\n                ->formatStateUsing(fn (Carbon $state): string => $state->format('Y-m-d H:i:s')),\n            ExportColumn::make('updated_at')\n                ->label('Updated At')\n                ->formatStateUsing(fn (Carbon $state): string => $state->format('Y-m-d H:i:s')),\n            ExportColumn::make('creation_source')\n                ->label('Creation Source')\n                ->formatStateUsing(fn (mixed $state): string => $state->value ?? (string) $state),\n\n            // Add all custom fields automatically\n            ...CustomFields::exporter()->forModel(self::getModel())->columns(),\n        ];\n    }\n\n    public static function getCompletedNotificationBody(Export $export): string\n    {\n        $successfulRows = $export->successful_rows ?? 0;\n        $body = 'Your opportunity export has completed and '.number_format($successfulRows).' '.str('row')->plural($successfulRows).' exported.';\n\n        if (($failedRowsCount = $export->getFailedRowsCount()) !== 0) {\n            $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';\n        }\n\n        return $body;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Exports/PeopleExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Exports;\n\nuse App\\Models\\People;\nuse Filament\\Actions\\Exports\\ExportColumn;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Illuminate\\Support\\Number;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class PeopleExporter extends BaseExporter\n{\n    protected static ?string $model = People::class;\n\n    public static function getColumns(): array\n    {\n        return [\n            ExportColumn::make('id')\n                ->label('ID'),\n            ExportColumn::make('team.name'),\n            ExportColumn::make('creator.name'),\n            ExportColumn::make('creation_source')\n                ->label('Creation Source')\n                ->formatStateUsing(fn (mixed $state): string => $state->value ?? (string) $state),\n            ExportColumn::make('company.name'),\n            ExportColumn::make('name'),\n            ExportColumn::make('created_at'),\n            ExportColumn::make('updated_at'),\n            ExportColumn::make('deleted_at'),\n\n            ...CustomFields::exporter()->forModel(self::getModel())->columns(),\n        ];\n    }\n\n    public static function getCompletedNotificationBody(Export $export): string\n    {\n        $successfulRows = $export->successful_rows ?? 0;\n        $body = 'Your people export has completed and '.Number::format($successfulRows).' '.str('row')->plural($successfulRows).' exported.';\n\n        if (($failedRowsCount = $export->getFailedRowsCount()) !== 0) {\n            $body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';\n        }\n\n        return $body;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Exports/TaskExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Exports;\n\nuse App\\Models\\Task;\nuse Filament\\Actions\\Exports\\ExportColumn;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Illuminate\\Support\\Number;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class TaskExporter extends BaseExporter\n{\n    protected static ?string $model = Task::class;\n\n    public static function getColumns(): array\n    {\n        return [\n            ExportColumn::make('id')\n                ->label('ID'),\n            ExportColumn::make('team.name'),\n            ExportColumn::make('creator.name'),\n            ExportColumn::make('creation_source')\n                ->formatStateUsing(fn (mixed $state): string => $state->value ?? (string) $state),\n            ExportColumn::make('title'),\n            ExportColumn::make('created_at'),\n            ExportColumn::make('updated_at'),\n\n            ...CustomFields::exporter()->forModel(self::getModel())->columns(),\n        ];\n    }\n\n    public static function getCompletedNotificationBody(Export $export): string\n    {\n        $successfulRows = $export->successful_rows ?? 0;\n        $body = 'Your task export has completed and '.Number::format($successfulRows).' '.str('row')->plural($successfulRows).' exported.';\n\n        if (($failedRowsCount = $export->getFailedRowsCount()) !== 0) {\n            $body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';\n        }\n\n        return $body;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/AccessTokens.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages;\n\nuse App\\Livewire\\App\\AccessTokens\\CreateAccessToken;\nuse App\\Livewire\\App\\AccessTokens\\ManageAccessTokens;\nuse Filament\\Pages\\Page;\nuse Filament\\Schemas\\Components\\Livewire;\nuse Filament\\Schemas\\Schema;\nuse Override;\n\nfinal class AccessTokens extends Page\n{\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-key';\n\n    protected string $view = 'filament.pages.access-tokens';\n\n    #[Override]\n    public static function shouldRegisterNavigation(): bool\n    {\n        return false;\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema->components([\n            Livewire::make(CreateAccessToken::class),\n            Livewire::make(ManageAccessTokens::class),\n        ]);\n    }\n\n    public static function getLabel(): string\n    {\n        return __('access-tokens.title');\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/Auth/Login.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages\\Auth;\n\nuse App\\Concerns\\DetectsTeamInvitation;\nuse Filament\\Actions\\Action;\nuse Filament\\Schemas\\Components\\Html;\nuse Filament\\Schemas\\Components\\RenderHook;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\View\\PanelsRenderHook;\n\nfinal class Login extends \\Filament\\Auth\\Pages\\Login\n{\n    use DetectsTeamInvitation;\n\n    public function content(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Html::make(fn (): string => $this->getInvitationContentHtml()),\n                RenderHook::make(PanelsRenderHook::AUTH_LOGIN_FORM_BEFORE),\n                $this->getFormContentComponent(),\n                $this->getMultiFactorChallengeFormContentComponent(),\n                RenderHook::make(PanelsRenderHook::AUTH_LOGIN_FORM_AFTER),\n            ]);\n    }\n\n    protected function getAuthenticateFormAction(): Action\n    {\n        return Action::make('authenticate')\n            ->size(Size::Medium)\n            ->label(__('filament-panels::auth/pages/login.form.actions.authenticate.label'))\n            ->submit('authenticate');\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/Auth/Register.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages\\Auth;\n\nuse App\\Concerns\\DetectsTeamInvitation;\nuse Filament\\Actions\\Action;\nuse Filament\\Auth\\Pages\\Register as BaseRegister;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Components\\Html;\nuse Filament\\Schemas\\Components\\RenderHook;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\View\\PanelsRenderHook;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class Register extends BaseRegister\n{\n    use DetectsTeamInvitation;\n\n    public function content(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Html::make(fn (): string => $this->getInvitationContentHtml()),\n                RenderHook::make(PanelsRenderHook::AUTH_REGISTER_FORM_BEFORE),\n                $this->getFormContentComponent(),\n                RenderHook::make(PanelsRenderHook::AUTH_REGISTER_FORM_AFTER),\n            ]);\n    }\n\n    protected function getEmailFormComponent(): TextInput\n    {\n        return TextInput::make('email')\n            ->label(__('filament-panels::auth/pages/register.form.email.label'))\n            ->email()\n            ->rules(['email:rfc,dns'])\n            ->required()\n            ->maxLength(255)\n            ->unique($this->getUserModel());\n    }\n\n    public function getRegisterFormAction(): Action\n    {\n        return Action::make('register')\n            ->size(Size::Medium)\n            ->label(__('filament-panels::auth/pages/register.form.actions.register.label'))\n            ->submit('register');\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    protected function handleRegistration(array $data): Model\n    {\n        $user = $this->getUserModel()::query()->create($data);\n\n        $invitation = $this->getTeamInvitationFromSession();\n\n        if ($invitation && $invitation->email === $data['email']) {\n            $user->forceFill(['email_verified_at' => now()])->save();\n        }\n\n        return $user;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/CreateTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages;\n\nuse App\\Actions\\Jetstream\\CreateTeam as CreateTeamAction;\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse App\\Rules\\ValidTeamSlug;\nuse Filament\\Forms\\Components\\Hidden;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Pages\\Tenancy\\RegisterTenant;\nuse Filament\\Schemas\\Components\\Utilities\\Get;\nuse Filament\\Schemas\\Components\\Utilities\\Set;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\nuse Override;\n\nfinal class CreateTeam extends RegisterTenant\n{\n    #[Override]\n    public static function getLabel(): string\n    {\n        return 'Create Team';\n    }\n\n    #[Override]\n    public function getHeading(): string\n    {\n        return 'Create your workspace';\n    }\n\n    #[Override]\n    public function getSubheading(): string\n    {\n        return 'Choose a name for your team. This will also be used in your workspace URL.';\n    }\n\n    #[Override]\n    public function form(Schema $schema): Schema\n    {\n        $appHost = parse_url(url()->getAppUrl(), PHP_URL_HOST);\n\n        return $schema\n            ->components([\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255)\n                    ->placeholder('Acme Corp')\n                    ->autofocus()\n                    ->live(onBlur: true)\n                    ->afterStateUpdated(function (Get $get, Set $set, ?string $state): void {\n                        if ($get('slug_auto_generated') === true || blank($get('slug'))) {\n                            $set('slug', Str::slug($state ?? ''));\n                            $set('slug_auto_generated', true);\n                        }\n                    }),\n\n                TextInput::make('slug')\n                    ->required()\n                    ->maxLength(255)\n                    ->rules([new ValidTeamSlug])\n                    ->unique(Team::class, 'slug')\n                    ->prefix(\"{$appHost}/\")\n                    ->helperText('Only lowercase letters, numbers, and hyphens are allowed.')\n                    ->live(onBlur: true)\n                    ->afterStateUpdated(function (Set $set): void {\n                        $set('slug_auto_generated', false);\n                    }),\n\n                Hidden::make('slug_auto_generated')\n                    ->default(true)\n                    ->dehydrated(false),\n            ]);\n    }\n\n    #[Override]\n    protected function getRedirectUrl(): string\n    {\n        return CompanyResource::getUrl('index', ['tenant' => $this->tenant]);\n    }\n\n    #[Override]\n    protected function handleRegistration(array $data): Model\n    {\n        /** @var User $user */\n        $user = auth('web')->user();\n\n        return resolve(CreateTeamAction::class)->create($user, $data);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/EditProfile.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages;\n\nuse App\\Livewire\\App\\Profile\\DeleteAccount;\nuse App\\Livewire\\App\\Profile\\LogoutOtherBrowserSessions;\nuse App\\Livewire\\App\\Profile\\UpdatePassword;\nuse App\\Livewire\\App\\Profile\\UpdateProfileInformation;\nuse Filament\\Pages\\Page;\nuse Filament\\Schemas\\Components\\Livewire;\nuse Filament\\Schemas\\Schema;\n\nfinal class EditProfile extends Page\n{\n    protected string $view = 'filament.pages.edit-profile';\n\n    protected static ?string $slug = 'profile';\n\n    protected static ?int $navigationSort = 1;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-user-circle';\n\n    public static function shouldRegisterNavigation(): bool\n    {\n        return false;\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema->components([\n            Livewire::make(UpdateProfileInformation::class),\n            Livewire::make(UpdatePassword::class),\n            Livewire::make(LogoutOtherBrowserSessions::class),\n            Livewire::make(DeleteAccount::class),\n        ]);\n    }\n\n    public static function getLabel(): string\n    {\n        return __('profile.edit_profile');\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/EditTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages;\n\nuse App\\Livewire\\App\\Teams\\AddTeamMember;\nuse App\\Livewire\\App\\Teams\\DeleteTeam;\nuse App\\Livewire\\App\\Teams\\PendingTeamInvitations;\nuse App\\Livewire\\App\\Teams\\TeamMembers;\nuse App\\Livewire\\App\\Teams\\UpdateTeamName;\nuse App\\Models\\Team;\nuse Filament\\Pages\\Tenancy\\EditTenantProfile;\nuse Filament\\Schemas\\Components\\Livewire;\nuse Filament\\Schemas\\Schema;\n\nfinal class EditTeam extends EditTenantProfile\n{\n    protected string $view = 'filament.pages.edit-team';\n\n    protected static ?string $slug = 'team';\n\n    protected static ?int $navigationSort = 2;\n\n    public function form(Schema $schema): Schema\n    {\n        /** @var Team $tenant */\n        $tenant = $this->tenant;\n\n        return $schema->components([\n            Livewire::make(UpdateTeamName::class)\n                ->data(['team' => $tenant]),\n            Livewire::make(AddTeamMember::class)\n                ->data(['team' => $tenant]),\n            Livewire::make(PendingTeamInvitations::class)\n                ->data(['team' => $tenant]),\n            Livewire::make(TeamMembers::class)\n                ->data(['team' => $tenant]),\n            Livewire::make(DeleteTeam::class)\n                ->visible(fn (): bool => $tenant->isPersonalTeam() === false)\n                ->data(['team' => $tenant]),\n        ]);\n    }\n\n    public static function getLabel(): string\n    {\n        return __('teams.edit_team');\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/OpportunitiesBoard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages;\n\nuse App\\Enums\\CustomFields\\OpportunityField as OpportunityCustomField;\nuse App\\Filament\\Resources\\OpportunityResource\\Forms\\OpportunityForm;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldOption;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Team;\nuse BackedEnum;\nuse Exception;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\TextSize;\nuse Filament\\Support\\Enums\\Width;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Query\\JoinClause;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Date;\nuse Illuminate\\Support\\Facades\\DB;\nuse League\\CommonMark\\Exception\\InvalidArgumentException;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\nuse Relaticle\\Flowforge\\Board;\nuse Relaticle\\Flowforge\\BoardPage;\nuse Relaticle\\Flowforge\\Column;\nuse Relaticle\\Flowforge\\Components\\CardFlex;\nuse Throwable;\nuse UnitEnum;\n\nfinal class OpportunitiesBoard extends BoardPage\n{\n    protected static ?string $navigationLabel = 'Board';\n\n    protected static ?string $title = 'Opportunities';\n\n    protected static ?string $navigationParentItem = 'Opportunities';\n\n    protected static string|null|UnitEnum $navigationGroup = 'Workspace';\n\n    protected static string|null|BackedEnum $navigationIcon = 'heroicon-o-view-columns';\n\n    public function board(Board $board): Board\n    {\n        $stageField = $this->stageCustomField();\n        $valueColumn = $stageField->getValueColumn();\n\n        $customFields = CustomFields::infolist()\n            ->forModel(Opportunity::class)\n            ->only([OpportunityCustomField::AMOUNT, OpportunityCustomField::CLOSE_DATE])\n            ->hiddenLabels()\n            ->visibleWhenFilled()\n            ->withoutSections()\n            ->values()\n            ->keyBy(fn (mixed $field): string => $field->getName());\n\n        return $board\n            ->query(\n                Opportunity::query()\n                    ->leftJoin('custom_field_values as cfv', function (JoinClause $join) use ($stageField): void {\n                        $join->on('opportunities.id', '=', 'cfv.entity_id')\n                            ->where('cfv.custom_field_id', '=', $stageField->getKey());\n                    })\n                    ->select('opportunities.*', 'cfv.'.$valueColumn)\n                    ->with(['company', 'contact'])\n            )\n            ->recordTitleAttribute('name')\n            ->columnIdentifier($valueColumn)\n            ->positionIdentifier('order_column')\n            ->searchable(['name'])\n            ->columns($this->getColumns())\n            ->cardSchema(function (Schema $schema) use ($customFields): Schema {\n                $amountField = $customFields->get('custom_fields.'.OpportunityCustomField::AMOUNT->value)\n                    ?->visible(fn (?string $state): bool => filled($state))\n                    ->badge()\n                    ->color('success')\n                    ->icon(Heroicon::OutlinedCurrencyDollar)\n                    ->grow(false)\n                    ->hiddenLabel();\n\n                $closeDateField = $customFields->get('custom_fields.'.OpportunityCustomField::CLOSE_DATE->value)\n                    ?->visible(fn (?string $state): bool => filled($state))\n                    ->badge()\n                    ->color('gray')\n                    ->icon(Heroicon::OutlinedCalendar)\n                    ->grow(false)\n                    ->hiddenLabel()\n                    ->formatStateUsing(fn (?string $state): string => $this->formatCloseDateBadge($state));\n\n                return $schema\n                    ->components([\n                        CardFlex::make([\n                            TextEntry::make('company.name')\n                                ->hiddenLabel()\n                                ->visible(fn (?string $state): bool => filled($state))\n                                ->icon(Heroicon::OutlinedBuildingOffice)\n                                ->color('gray')\n                                ->size(TextSize::ExtraSmall)\n                                ->grow(),\n                        ]),\n                        CardFlex::make([\n                            $amountField,\n                            $closeDateField,\n                        ])->align('center'),\n                    ]);\n            })\n            ->columnActions([\n                CreateAction::make()\n                    ->label('Add Opportunity')\n                    ->icon('heroicon-o-plus')\n                    ->iconButton()\n                    ->modalWidth(Width::Large)\n                    ->slideOver(false)\n                    ->model(Opportunity::class)\n                    ->schema(fn (Schema $schema): Schema => $schema\n                        ->components([\n                            TextInput::make('name')\n                                ->required()\n                                ->placeholder('Enter opportunity title')\n                                ->columnSpanFull(),\n                            Select::make('company_id')\n                                ->relationship('company', 'name')\n                                ->searchable()\n                                ->preload(),\n                            Select::make('contact_id')\n                                ->relationship('contact', 'name')\n                                ->searchable()\n                                ->preload(),\n                            CustomFields::form()\n                                ->except([OpportunityCustomField::STAGE])\n                                ->build()\n                                ->columnSpanFull()\n                                ->columns(1),\n                        ])\n                        ->columns(2))\n                    ->using(function (array $data, CreateAction $action): Opportunity {\n                        /** @var Team $currentTeam */\n                        $currentTeam = Auth::guard('web')->user()->currentTeam;\n\n                        /** @var Opportunity $opportunity */\n                        $opportunity = $currentTeam->opportunities()->create($data);\n\n                        $columnId = $action->getArguments()['column'] ?? null;\n\n                        if (filled($columnId)) {\n                            $opportunity->saveCustomFieldValue($this->stageCustomField(), $columnId);\n                            $opportunity->order_column = (float) $this->getBoardPositionInColumn($columnId);\n                            $opportunity->saveQuietly();\n                        }\n\n                        return $opportunity;\n                    }),\n            ])\n            ->cardActions([\n                Action::make('edit')\n                    ->label('Edit')\n                    ->slideOver()\n                    ->modalWidth(Width::ExtraLarge)\n                    ->icon('heroicon-o-pencil-square')\n                    ->schema(OpportunityForm::get(...))\n                    ->fillForm(fn (Opportunity $record): array => [\n                        'name' => $record->name,\n                        'company_id' => $record->company_id,\n                        'contact_id' => $record->contact_id,\n                    ])\n                    ->action(function (Opportunity $record, array $data): void {\n                        $record->update($data);\n                    }),\n                Action::make('delete')\n                    ->label('Delete')\n                    ->icon('heroicon-o-trash')\n                    ->color('danger')\n                    ->requiresConfirmation()\n                    ->action(function (Opportunity $record): void {\n                        $record->delete();\n                    }),\n            ])\n            ->filters([\n                SelectFilter::make('companies')\n                    ->label('Company')\n                    ->relationship('company', 'name')\n                    ->multiple(),\n                SelectFilter::make('contacts')\n                    ->label('Contact')\n                    ->relationship('contact', 'name')\n                    ->multiple(),\n            ])\n            ->filtersFormWidth(Width::Medium)\n            ->headerToolbar();\n    }\n\n    /**\n     * Move card to new position using DecimalPosition service.\n     *\n     * Overrides the default Flowforge implementation to properly handle\n     * custom field columns which are stored in a polymorphic table.\n     *\n     * @throws Throwable\n     */\n    public function moveCard(\n        string $cardId,\n        string $targetColumnId,\n        ?string $afterCardId = null,\n        ?string $beforeCardId = null\n    ): void {\n        $board = $this->getBoard();\n        $query = $board->getQuery();\n\n        throw_unless($query instanceof Builder, InvalidArgumentException::class, 'Board query not available');\n\n        $card = (clone $query)->find($cardId);\n        throw_unless($card, InvalidArgumentException::class, \"Card not found: {$cardId}\");\n\n        $newPosition = $this->calculatePositionBetweenCards($afterCardId, $beforeCardId, $targetColumnId);\n\n        DB::transaction(function () use ($card, $board, $targetColumnId, $newPosition): void {\n            $columnIdentifier = $board->getColumnIdentifierAttribute();\n            $columnValue = $this->resolveStatusValue($card, $columnIdentifier, $targetColumnId);\n            $positionIdentifier = $board->getPositionIdentifierAttribute();\n\n            $card->update([$positionIdentifier => $newPosition]);\n\n            /** @var Opportunity $card */\n            $card->saveCustomFieldValue($this->stageCustomField(), $columnValue);\n        });\n\n        $this->dispatch('kanban-card-moved', [\n            'cardId' => $cardId,\n            'columnId' => $targetColumnId,\n            'position' => $newPosition,\n        ]);\n    }\n\n    /**\n     * Get columns for the board.\n     *\n     * @return array<Column>\n     *\n     * @throws Exception\n     */\n    private function getColumns(): array\n    {\n        return $this->stages()->map(fn (array $stage): Column => Column::make((string) $stage['id'])\n            ->color($stage['color'])\n            ->label($stage['name'])\n        )->toArray();\n    }\n\n    private function formatCloseDateBadge(?string $state): string\n    {\n        if (blank($state)) {\n            return '';\n        }\n\n        $date = Date::parse($state);\n\n        return match (true) {\n            $date->isPast() => $date->format('M j').' (Overdue)',\n            $date->isToday() => 'Closes Today',\n            $date->isTomorrow() => 'Closes Tomorrow',\n            default => $date->format('M j'),\n        };\n    }\n\n    private function stageCustomField(): ?CustomField\n    {\n        /** @var CustomField|null */\n        return once(fn () => CustomField::query()\n            ->forEntity(Opportunity::class)\n            ->where('code', OpportunityCustomField::STAGE)\n            ->first());\n    }\n\n    /**\n     * @return Collection<int, array{id: mixed, custom_field_id: mixed, name: mixed, color: string}>\n     */\n    private function stages(): Collection\n    {\n        $field = $this->stageCustomField();\n\n        if (! $field instanceof CustomField) {\n            return collect();\n        }\n\n        $colorsEnabled = $field->settings->enable_option_colors ?? false;\n\n        return $field->options->map(fn (CustomFieldOption $option): array => [\n            'id' => $option->getKey(),\n            'custom_field_id' => $option->getAttribute('custom_field_id'),\n            'name' => $option->getAttribute('name'),\n            'color' => $colorsEnabled ? ($option->settings->color ?? 'gray') : 'gray',\n        ]);\n    }\n\n    public static function canAccess(): bool\n    {\n        return (new self)->stageCustomField() instanceof CustomField;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Pages/TasksBoard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Pages;\n\nuse App\\Enums\\CustomFields\\TaskField as TaskCustomField;\nuse App\\Filament\\Resources\\TaskResource\\Forms\\TaskForm;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldOption;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse BackedEnum;\nuse Exception;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Infolists\\Components\\ImageEntry;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Width;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Query\\JoinClause;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Date;\nuse Illuminate\\Support\\Facades\\DB;\nuse League\\CommonMark\\Exception\\InvalidArgumentException;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\nuse Relaticle\\Flowforge\\Board;\nuse Relaticle\\Flowforge\\BoardPage;\nuse Relaticle\\Flowforge\\Column;\nuse Relaticle\\Flowforge\\Components\\CardFlex;\nuse Throwable;\nuse UnitEnum;\n\nfinal class TasksBoard extends BoardPage\n{\n    protected static ?string $navigationLabel = 'Board';\n\n    protected static ?string $title = 'Tasks';\n\n    protected static ?string $navigationParentItem = 'Tasks';\n\n    protected static string|null|UnitEnum $navigationGroup = 'Workspace';\n\n    protected static string|null|BackedEnum $navigationIcon = 'heroicon-o-view-columns';\n\n    /**\n     * Configure the board using the new Filament V4 architecture.\n     */\n    public function board(Board $board): Board\n    {\n        $statusField = $this->statusCustomField();\n        $valueColumn = $statusField->getValueColumn();\n\n        $customFields = CustomFields::infolist()\n            ->forModel(Task::class)\n            ->only(['description', 'priority', 'due_date'])\n            ->hiddenLabels()\n            ->visibleWhenFilled()\n            ->withoutSections()\n            ->values()\n            ->keyBy(fn (mixed $field): string => $field->getName());\n\n        return $board\n            ->query(\n                Task::query()\n                    ->leftJoin('custom_field_values as cfv', function (JoinClause $join) use ($statusField): void {\n                        $join->on('tasks.id', '=', 'cfv.entity_id')\n                            ->where('cfv.custom_field_id', '=', $statusField->getKey());\n                    })\n                    ->with(['assignees'])\n                    ->select('tasks.*', 'cfv.'.$valueColumn)\n            )\n            ->recordTitleAttribute('title')\n            ->columnIdentifier($valueColumn)\n            ->positionIdentifier('order_column')\n            ->searchable(['title'])\n            ->columns($this->getColumns())\n            ->cardSchema(function (Schema $schema) use ($customFields): Schema {\n                $descriptionCustomField = $customFields->get('custom_fields.description')\n                    ?->columnSpanFull()\n                    ->visible(fn (?string $state): bool => filled($state))\n                    ->formatStateUsing(fn (string $state): string => str($state)->stripTags()->limit()->toString())\n                    ->extraAttributes(['class' => 'mb-4']);\n\n                $priorityField = $customFields->get('custom_fields.priority')\n                    ?->visible(fn (?string $state): bool => filled($state))\n                    ->grow(false)\n                    ->badge()\n                    ->hiddenLabel()\n                    ->icon('heroicon-o-flag');\n\n                $dueDateField = $customFields->get('custom_fields.due_date')\n                    ?->visible(fn (?string $state): bool => filled($state))\n                    ->badge()\n                    ->color('gray')\n                    ->icon('heroicon-o-calendar')\n                    ->grow(false)\n                    ->hiddenLabel()\n                    ->formatStateUsing(fn (?string $state): string => $this->formatDueDateBadge($state));\n\n                return $schema\n                    ->inline()\n                    ->gap(false)\n                    ->components([\n                        $descriptionCustomField,\n                        CardFlex::make([\n                            $priorityField,\n                            $dueDateField,\n                            ImageEntry::make('assignees.profile_photo_url')\n                                ->hiddenLabel()\n                                ->alignLeft()\n                                ->imageHeight(20)\n                                ->circular()\n                                ->visible(fn (?string $state): bool => filled($state))\n                                ->stacked(),\n                        ])->align('center'),\n                    ]);\n            })\n            ->columnActions([\n                CreateAction::make()\n                    ->label('Add Task')\n                    ->icon('heroicon-o-plus')\n                    ->iconButton()\n                    ->modalWidth(Width::TwoExtraLarge)\n                    ->slideOver(false)\n                    ->model(Task::class)\n                    ->schema(fn (Schema $schema): Schema => TaskForm::get($schema, ['status']))\n                    ->using(function (array $data, CreateAction $action): Task {\n                        /** @var Team $currentTeam */\n                        $currentTeam = Auth::guard('web')->user()->currentTeam;\n\n                        /** @var Task $task */\n                        $task = $currentTeam->tasks()->create($data);\n\n                        $columnId = $action->getArguments()['column'] ?? null;\n\n                        if (filled($columnId)) {\n                            $task->saveCustomFieldValue($this->statusCustomField(), $columnId);\n                            $task->order_column = (float) $this->getBoardPositionInColumn($columnId);\n                            $task->saveQuietly();\n                        }\n\n                        return $task;\n                    }),\n            ])\n            ->cardActions([\n                Action::make('edit')\n                    ->label('Edit')\n                    ->slideOver()\n                    ->modalWidth(Width::ThreeExtraLarge)\n                    ->icon('heroicon-o-pencil-square')\n                    ->schema(fn (Schema $schema): Schema => TaskForm::get($schema))\n                    ->fillForm(fn (Task $record): array => [\n                        'title' => $record->title,\n                    ])\n                    ->action(function (Task $record, array $data): void {\n                        $record->update($data);\n                    }),\n                Action::make('delete')\n                    ->label('Delete')\n                    ->icon('heroicon-o-trash')\n                    ->color('danger')\n                    ->requiresConfirmation()\n                    ->action(function (Task $record): void {\n                        $record->delete();\n                    }),\n            ])\n            ->filters([\n                SelectFilter::make('assignees')\n                    ->label('Assignee')\n                    ->relationship('assignees', 'name')\n                    ->multiple(),\n            ])\n            ->filtersFormWidth(Width::Medium)\n            ->headerToolbar();\n    }\n\n    /**\n     * Move card to new position using DecimalPosition service.\n     *\n     * Overrides the default Flowforge implementation to properly handle\n     * custom field columns which are stored in a polymorphic table.\n     *\n     * @throws Throwable\n     */\n    public function moveCard(\n        string $cardId,\n        string $targetColumnId,\n        ?string $afterCardId = null,\n        ?string $beforeCardId = null\n    ): void {\n        $board = $this->getBoard();\n        $query = $board->getQuery();\n\n        throw_unless($query instanceof Builder, InvalidArgumentException::class, 'Board query not available');\n\n        /** @var Task|null $card */\n        $card = (clone $query)->with(['assignees'])->find($cardId);\n        throw_unless($card, InvalidArgumentException::class, \"Card not found: {$cardId}\");\n\n        // Calculate new position using DecimalPosition (via v3 trait helper)\n        $newPosition = $this->calculatePositionBetweenCards($afterCardId, $beforeCardId, $targetColumnId);\n\n        // Use transaction for data consistency\n        DB::transaction(function () use ($card, $board, $targetColumnId, $newPosition): void {\n            $columnIdentifier = $board->getColumnIdentifierAttribute();\n            $columnValue = $this->resolveStatusValue($card, $columnIdentifier, $targetColumnId);\n            $positionIdentifier = $board->getPositionIdentifierAttribute();\n\n            $card->update([$positionIdentifier => $newPosition]);\n\n            $card->saveCustomFieldValue($this->statusCustomField(), $columnValue);\n        });\n\n        // Emit success event after successful transaction\n        $this->dispatch('kanban-card-moved', [\n            'cardId' => $cardId,\n            'columnId' => $targetColumnId,\n            'position' => $newPosition,\n        ]);\n    }\n\n    /**\n     * Get columns for the board.\n     *\n     * @return array<Column>\n     *\n     * @throws Exception\n     */\n    private function getColumns(): array\n    {\n        return $this->statuses()->map(fn (array $status): Column => Column::make((string) $status['id'])\n            ->color($status['color'])\n            ->label($status['name'])\n        )->toArray();\n    }\n\n    /**\n     * Format a due date value for badge display.\n     *\n     * Shows relative dates (Today/Tomorrow) for immediate items,\n     * and full dates with year for all other cases.\n     */\n    private function formatDueDateBadge(?string $state): string\n    {\n        if (blank($state)) {\n            return '';\n        }\n\n        $date = Date::parse($state);\n\n        return match (true) {\n            $date->isPast() => $date->format('M j, Y').' (Overdue)',\n            $date->isToday() => 'Due Today',\n            $date->isTomorrow() => 'Due Tomorrow',\n            default => $date->format('M j, Y'),\n        };\n    }\n\n    private function statusCustomField(): ?CustomField\n    {\n        /** @var CustomField|null */\n        return once(fn () => CustomField::query()\n            ->forEntity(Task::class)\n            ->where('code', TaskCustomField::STATUS)\n            ->first());\n    }\n\n    /**\n     * @return Collection<int, array{id: mixed, custom_field_id: mixed, name: mixed, color: string}>\n     */\n    private function statuses(): Collection\n    {\n        $field = $this->statusCustomField();\n\n        if (! $field instanceof CustomField) {\n            return collect();\n        }\n\n        // Check if color options are enabled for this field\n        $colorsEnabled = $field->settings->enable_option_colors ?? false;\n\n        return $field->options->map(fn (CustomFieldOption $option): array => [\n            'id' => $option->getKey(),\n            'custom_field_id' => $option->getAttribute('custom_field_id'),\n            'name' => $option->getAttribute('name'),\n            'color' => $colorsEnabled ? ($option->settings->color ?? 'gray') : 'gray',\n        ]);\n    }\n\n    public static function canAccess(): bool\n    {\n        return (new self)->statusCustomField() instanceof CustomField;\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/CompanyResource/Pages/ListCompanies.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\CompanyResource\\Pages;\n\nuse App\\Filament\\Exports\\CompanyExporter;\nuse App\\Filament\\Resources\\CompanyResource;\nuse Asmit\\ResizedColumn\\HasResizableColumn;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\ExportAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Filament\\Support\\Enums\\Size;\nuse Override;\nuse Relaticle\\CustomFields\\Concerns\\InteractsWithCustomFields;\nuse Relaticle\\ImportWizard\\Filament\\Pages\\ImportCompanies;\n\nfinal class ListCompanies extends ListRecords\n{\n    use HasResizableColumn;\n    use InteractsWithCustomFields;\n\n    /** @var class-string<CompanyResource> */\n    protected static string $resource = CompanyResource::class;\n\n    /**\n     * Get the actions available on the resource index header.\n     */\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ActionGroup::make([\n                Action::make('import')\n                    ->label('Import companies')\n                    ->icon('heroicon-o-arrow-up-tray')\n                    ->url(ImportCompanies::getUrl()),\n                ExportAction::make()->exporter(CompanyExporter::class),\n            ])\n                ->icon('heroicon-o-arrows-up-down')\n                ->color('gray')\n                ->button()\n                ->label('Import / Export')\n                ->size(Size::Small),\n            CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/CompanyResource/Pages/ViewCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\CompanyResource\\Pages;\n\nuse App\\Filament\\Actions\\GenerateRecordSummaryAction;\nuse App\\Filament\\Components\\Infolists\\AvatarName;\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Filament\\Resources\\CompanyResource\\RelationManagers\\NotesRelationManager;\nuse App\\Filament\\Resources\\CompanyResource\\RelationManagers\\PeopleRelationManager;\nuse App\\Filament\\Resources\\CompanyResource\\RelationManagers\\TasksRelationManager;\nuse App\\Models\\Company;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Filament\\Schemas\\Components\\Flex;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Support\\Js;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class ViewCompany extends ViewRecord\n{\n    protected static string $resource = CompanyResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            GenerateRecordSummaryAction::make(),\n            EditAction::make()->icon('heroicon-o-pencil-square')->label('Edit'),\n            ActionGroup::make([\n                ActionGroup::make([\n                    Action::make('copyPageUrl')\n                        ->label('Copy page URL')\n                        ->icon('heroicon-o-clipboard-document')\n                        ->action(function (Company $record): void {\n                            $jsUrl = Js::from(CompanyResource::getUrl('view', [$record]));\n                            $this->js(\"\n                            navigator.clipboard.writeText({$jsUrl}).then(() => {\n                                new FilamentNotification()\n                                    .title('URL copied to clipboard')\n                                    .success()\n                                    .send()\n                            })\n                        \");\n                        }),\n                    Action::make('copyRecordId')\n                        ->label('Copy record ID')\n                        ->icon('heroicon-o-clipboard-document')\n                        ->action(function (Company $record): void {\n                            $jsId = Js::from((string) $record->getKey());\n                            $this->js(\"\n                            navigator.clipboard.writeText({$jsId}).then(() => {\n                                new FilamentNotification()\n                                    .title('Record ID copied to clipboard')\n                                    .success()\n                                    .send()\n                            })\n                        \");\n                        }),\n                ])->dropdown(false),\n                DeleteAction::make(),\n            ]),\n        ];\n    }\n\n    public function infolist(Schema $schema): Schema\n    {\n        return $schema\n            ->schema([\n                Flex::make([\n                    Section::make([\n                        Flex::make([\n                            AvatarName::make('logo')\n                                ->avatar('logo')\n                                ->name('name')\n                                ->avatarSize('lg')\n                                ->textSize('xl')\n                                ->square()\n                                ->label(''),\n                            AvatarName::make('creator')\n                                ->avatar('creator.avatar')\n                                ->name('creator.name')\n                                ->avatarSize('sm')\n                                ->textSize('sm')  // Default text size for creator\n                                ->circular()\n                                ->label('Created By'),\n                            AvatarName::make('accountOwner')\n                                ->avatar('accountOwner.avatar')\n                                ->name('accountOwner.name')\n                                ->avatarSize('sm')\n                                ->textSize('sm')  // Default text size for account owner\n                                ->circular()\n                                ->label('Account Owner'),\n                        ]),\n                        CustomFields::infolist()->forSchema($schema)->build(),\n                    ]),\n                    Section::make([\n                        TextEntry::make('created_at')\n                            ->label('Created Date')\n                            ->icon('heroicon-o-clock')\n                            ->dateTime(),\n                        TextEntry::make('updated_at')\n                            ->label('Last Updated')\n                            ->icon('heroicon-o-clock')\n                            ->dateTime(),\n                    ])->grow(false),\n                ])->columnSpan('full'),\n            ]);\n    }\n\n    public function getRelationManagers(): array\n    {\n        return [\n            PeopleRelationManager::class,\n            TasksRelationManager::class,\n            NotesRelationManager::class,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/CompanyResource/RelationManagers/NotesRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\CompanyResource\\RelationManagers;\n\nuse App\\Filament\\Resources\\NoteResource\\Forms\\NoteForm;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\AttachAction;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\DetachAction;\nuse Filament\\Actions\\DetachBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\n\nfinal class NotesRelationManager extends RelationManager\n{\n    protected static string $relationship = 'notes';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-document-text';\n\n    public function form(Schema $schema): Schema\n    {\n        return NoteForm::get($schema, ['companies']);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title'),\n                TextColumn::make('people.name')\n                    ->label('People')\n                    ->badge()\n                    ->color('primary')\n                    ->searchable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n                AttachAction::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make(),\n                    DetachAction::make(),\n                    DeleteAction::make(),\n                ]),\n\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DetachBulkAction::make(),\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/CompanyResource/RelationManagers/PeopleRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\CompanyResource\\RelationManagers;\n\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class PeopleRelationManager extends RelationManager\n{\n    protected static string $relationship = 'people';\n\n    protected static ?string $modelLabel = 'person';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-user';\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255)\n                    ->columnSpanFull(),\n                CustomFields::form()->build()\n                    ->columnSpanFull()\n                    ->columns(),\n            ]);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name'),\n\n                ...CustomFields::table()->forModel($table->getModel())->columns(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make(),\n                    DeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/CompanyResource/RelationManagers/TasksRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\CompanyResource\\RelationManagers;\n\nuse App\\Filament\\Resources\\TaskResource\\Forms\\TaskForm;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\AttachAction;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\DetachAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\n\nfinal class TasksRelationManager extends RelationManager\n{\n    protected static string $relationship = 'tasks';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-check-circle';\n\n    public function form(Schema $schema): Schema\n    {\n        return TaskForm::get($schema, ['companies']);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title'),\n                TextColumn::make('assignees.name')\n                    ->label('Assignee')\n                    ->badge()\n                    ->color('primary')\n                    ->searchable(),\n                TextColumn::make('people.name')\n                    ->label('People')\n                    ->badge()\n                    ->color('primary')\n                    ->searchable(),\n                TextColumn::make('created_at')\n                    ->label('Created At')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n                AttachAction::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make(),\n                    DetachAction::make(),\n                    DeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/CompanyResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Filament\\Exports\\CompanyExporter;\nuse App\\Filament\\Resources\\CompanyResource\\Pages\\ListCompanies;\nuse App\\Filament\\Resources\\CompanyResource\\Pages\\ViewCompany;\nuse App\\Models\\Company;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ExportBulkAction;\nuse Filament\\Actions\\ForceDeleteAction;\nuse Filament\\Actions\\ForceDeleteBulkAction;\nuse Filament\\Actions\\RestoreAction;\nuse Filament\\Actions\\RestoreBulkAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\SoftDeletingScope;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class CompanyResource extends Resource\n{\n    protected static ?string $model = Company::class;\n\n    protected static ?string $recordTitleAttribute = 'name';\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-home-modern';\n\n    protected static ?int $navigationSort = 2;\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Workspace';\n\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                TextInput::make('name')\n                    ->required(),\n                Select::make('account_owner_id')\n                    ->relationship('accountOwner', 'name')\n                    ->label('Account Owner')\n                    ->nullable()\n                    ->preload()\n                    ->searchable(),\n\n                CustomFields::form()->build()->columnSpanFull()->columns(1),\n            ]);\n    }\n\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->columns([\n                TextColumn::make('name')\n                    ->label('Company')\n                    ->searchable()\n                    ->sortable()\n                    ->view('filament.tables.columns.logo-name-column'),\n                TextColumn::make('accountOwner.name')\n                    ->label('Account Owner')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('creator.name')\n                    ->label('Created By')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable()\n                    ->getStateUsing(fn (Company $record): string => $record->created_by),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable()\n                    ->toggledHiddenByDefault(),\n                TextColumn::make('created_at')\n                    ->label('Creation Date')\n                    ->dateTime()\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('updated_at')\n                    ->label('Last Update')\n                    ->since()\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable(),\n            ])\n            ->defaultSort('created_at', 'desc')\n            ->filters([\n                SelectFilter::make('creation_source')\n                    ->label('Creation Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n                TrashedFilter::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    ViewAction::make(),\n                    EditAction::make(),\n                    RestoreAction::make(),\n                    DeleteAction::make(),\n                    ForceDeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    ExportBulkAction::make()\n                        ->exporter(CompanyExporter::class),\n                    DeleteBulkAction::make(),\n                    ForceDeleteBulkAction::make(),\n                    RestoreBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListCompanies::route('/'),\n            'view' => ViewCompany::route('/{record}'),\n        ];\n    }\n\n    public static function getGloballySearchableAttributes(): array\n    {\n        return ['name'];\n    }\n\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->with(['team', 'customFieldValues.customField.options'])\n            ->withoutGlobalScopes([\n                SoftDeletingScope::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/NoteResource/Forms/NoteForm.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\NoteResource\\Forms;\n\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Schema;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class NoteForm\n{\n    /**\n     * @param  array<string>  $excludeFields  Fields to exclude from the form.\n     * @return Schema The modified form instance with the schema applied.\n     *\n     * @throws \\Exception\n     */\n    public static function get(Schema $schema, array $excludeFields = []): Schema\n    {\n        $components = [\n            TextInput::make('title')\n                ->label('Title')\n                ->rules(['max:255'])\n                ->columnSpanFull()\n                ->required(),\n        ];\n\n        if (! in_array('companies', $excludeFields)) {\n            $components[] = Select::make('companies')\n                ->label('Companies')\n                ->multiple()\n                ->relationship('companies', 'name');\n        }\n\n        if (! in_array('people', $excludeFields)) {\n            $components[] = Select::make('people')\n                ->label('People')\n                ->multiple()\n                ->relationship('people', 'name')\n                ->nullable();\n        }\n\n        $components[] = CustomFields::form()->build()\n            ->columnSpanFull()\n            ->columns(1);\n\n        return $schema\n            ->components($components)\n            ->columns(2);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/NoteResource/Pages/ManageNotes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\NoteResource\\Pages;\n\nuse App\\Filament\\Exports\\NoteExporter;\nuse App\\Filament\\Resources\\NoteResource;\nuse Asmit\\ResizedColumn\\HasResizableColumn;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\ExportAction;\nuse Filament\\Resources\\Pages\\ManageRecords;\nuse Filament\\Support\\Enums\\Size;\nuse Override;\nuse Relaticle\\CustomFields\\Concerns\\InteractsWithCustomFields;\nuse Relaticle\\ImportWizard\\Filament\\Pages\\ImportNotes;\n\nfinal class ManageNotes extends ManageRecords\n{\n    use HasResizableColumn;\n    use InteractsWithCustomFields;\n\n    protected static string $resource = NoteResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ActionGroup::make([\n                Action::make('import')\n                    ->label('Import notes')\n                    ->icon('heroicon-o-arrow-up-tray')\n                    ->url(ImportNotes::getUrl()),\n                ExportAction::make()->exporter(NoteExporter::class),\n            ])\n                ->icon('heroicon-o-arrows-up-down')\n                ->color('gray')\n                ->button()\n                ->label('Import / Export')\n                ->size(Size::Small),\n            CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/NoteResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Filament\\Exports\\NoteExporter;\nuse App\\Filament\\Resources\\NoteResource\\Forms\\NoteForm;\nuse App\\Filament\\Resources\\NoteResource\\Pages\\ManageNotes;\nuse App\\Models\\Note;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ExportBulkAction;\nuse Filament\\Actions\\ForceDeleteAction;\nuse Filament\\Actions\\ForceDeleteBulkAction;\nuse Filament\\Actions\\RestoreAction;\nuse Filament\\Actions\\RestoreBulkAction;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\SoftDeletingScope;\nuse Override;\n\nfinal class NoteResource extends Resource\n{\n    protected static ?string $model = Note::class;\n\n    protected static ?string $recordTitleAttribute = 'title';\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-document-text';\n\n    protected static ?int $navigationSort = 5;\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Workspace';\n\n    public static function form(Schema $schema): Schema\n    {\n        return NoteForm::get($schema);\n    }\n\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->columns([\n                TextColumn::make('title')\n                    ->searchable(),\n                TextColumn::make('companies.name')\n                    ->label('Companies')\n                    ->toggleable(),\n                TextColumn::make('people.name')\n                    ->label('People')\n                    ->toggleable(),\n                TextColumn::make('creator.name')\n                    ->label('Created By')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable()\n                    ->getStateUsing(fn (Note $record): string => $record->created_by),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable()\n                    ->toggledHiddenByDefault(),\n                TextColumn::make('created_at')\n                    ->label('Created At')\n                    ->dateTime('Y-m-d H:i:s')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('updated_at')\n                    ->label('Updated At')\n                    ->dateTime('Y-m-d H:i:s')\n                    ->sortable()\n                    ->toggleable()\n                    ->toggledHiddenByDefault(),\n            ])\n            ->defaultSort('created_at', 'desc')\n            ->filters([\n                SelectFilter::make('creation_source')\n                    ->label('Creation Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n                TrashedFilter::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make(),\n                    DeleteAction::make(),\n                    ForceDeleteAction::make(),\n                    RestoreAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    ExportBulkAction::make()\n                        ->exporter(NoteExporter::class),\n                    DeleteBulkAction::make(),\n                    ForceDeleteBulkAction::make(),\n                    RestoreBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ManageNotes::route('/'),\n        ];\n    }\n\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->with(['team', 'customFieldValues.customField.options'])\n            ->withoutGlobalScopes([\n                SoftDeletingScope::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/OpportunityResource/Forms/OpportunityForm.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\OpportunityResource\\Forms;\n\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Schema;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class OpportunityForm\n{\n    public static function get(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                TextInput::make('name')\n                    ->required()\n                    ->placeholder('Enter opportunity title')\n                    ->columnSpanFull(),\n                Select::make('company_id')\n                    ->relationship('company', 'name')\n                    ->searchable()\n                    ->preload()\n                    ->columnSpan(2),\n                Select::make('contact_id')\n                    ->relationship('contact', 'name')\n                    ->searchable()\n                    ->preload()\n                    ->columnSpan(2),\n                CustomFields::form()->build()->columnSpanFull()->columns(1),\n            ])\n            ->columns(4);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/OpportunityResource/Pages/ListOpportunities.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\OpportunityResource\\Pages;\n\nuse App\\Filament\\Exports\\OpportunityExporter;\nuse App\\Filament\\Resources\\OpportunityResource;\nuse Asmit\\ResizedColumn\\HasResizableColumn;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\ExportAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Filament\\Support\\Enums\\Size;\nuse Override;\nuse Relaticle\\CustomFields\\Concerns\\InteractsWithCustomFields;\nuse Relaticle\\ImportWizard\\Filament\\Pages\\ImportOpportunities;\n\nfinal class ListOpportunities extends ListRecords\n{\n    use HasResizableColumn;\n    use InteractsWithCustomFields;\n\n    protected static string $resource = OpportunityResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ActionGroup::make([\n                Action::make('import')\n                    ->label('Import opportunities')\n                    ->icon('heroicon-o-arrow-up-tray')\n                    ->url(ImportOpportunities::getUrl()),\n                ExportAction::make()->exporter(OpportunityExporter::class),\n            ])\n                ->icon('heroicon-o-arrows-up-down')\n                ->color('gray')\n                ->button()\n                ->label('Import / Export')\n                ->size(Size::Small),\n            CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/OpportunityResource/Pages/ViewOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\OpportunityResource\\Pages;\n\nuse App\\Filament\\Actions\\GenerateRecordSummaryAction;\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Filament\\Resources\\OpportunityResource;\nuse App\\Filament\\Resources\\PeopleResource;\nuse App\\Models\\Opportunity;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Filament\\Schemas\\Components\\Flex;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Support\\Js;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class ViewOpportunity extends ViewRecord\n{\n    protected static string $resource = OpportunityResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            GenerateRecordSummaryAction::make(),\n            EditAction::make()->icon('heroicon-o-pencil-square')->label('Edit'),\n            ActionGroup::make([\n                ActionGroup::make([\n                    Action::make('copyPageUrl')\n                        ->label('Copy page URL')\n                        ->icon('heroicon-o-clipboard-document')\n                        ->action(function (Opportunity $record): void {\n                            $jsUrl = Js::from(OpportunityResource::getUrl('view', [$record]));\n                            $this->js(\"\n                            navigator.clipboard.writeText({$jsUrl}).then(() => {\n                                new FilamentNotification()\n                                    .title('URL copied to clipboard')\n                                    .success()\n                                    .send()\n                            })\n                        \");\n                        }),\n                    Action::make('copyRecordId')\n                        ->label('Copy record ID')\n                        ->icon('heroicon-o-clipboard-document')\n                        ->action(function (Opportunity $record): void {\n                            $jsId = Js::from((string) $record->getKey());\n                            $this->js(\"\n                            navigator.clipboard.writeText({$jsId}).then(() => {\n                                new FilamentNotification()\n                                    .title('Record ID copied to clipboard')\n                                    .success()\n                                    .send()\n                            })\n                        \");\n                        }),\n                ])->dropdown(false),\n                DeleteAction::make(),\n            ]),\n        ];\n    }\n\n    public function infolist(Schema $schema): Schema\n    {\n        return $schema->schema([\n            Section::make()->schema([\n                Flex::make([\n                    TextEntry::make('name')->grow(true),\n                    TextEntry::make('company.name')\n                        ->label('Company')\n                        ->color('primary')\n                        ->url(fn (Opportunity $record): ?string => $record->company ? CompanyResource::getUrl('view', [$record->company]) : null)\n                        ->grow(false),\n                    TextEntry::make('contact.name')\n                        ->label('Point of Contact')\n                        ->color('primary')\n                        ->url(fn (Opportunity $record): ?string => $record->contact ? PeopleResource::getUrl('view', [$record->contact]) : null)\n                        ->grow(false),\n                ]),\n                CustomFields::infolist()->forSchema($schema)->build()->columnSpanFull(),\n            ])\n                ->columnSpanFull(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/OpportunityResource/RelationManagers/NotesRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\OpportunityResource\\RelationManagers;\n\nuse App\\Filament\\Resources\\NoteResource\\Forms\\NoteForm;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\AttachAction;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\DetachAction;\nuse Filament\\Actions\\DetachBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class NotesRelationManager extends RelationManager\n{\n    protected static string $relationship = 'notes';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-document-text';\n\n    public function form(Schema $schema): Schema\n    {\n        return NoteForm::get($schema, ['opportunities']);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title'),\n                ...CustomFields::table()->forModel($table->getModel())->columns(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n                AttachAction::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make(),\n                    DetachAction::make(),\n                    DeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DetachBulkAction::make(),\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/OpportunityResource/RelationManagers/TasksRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\OpportunityResource\\RelationManagers;\n\nuse App\\Filament\\Resources\\TaskResource\\Forms\\TaskForm;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\AttachAction;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\DetachAction;\nuse Filament\\Actions\\DetachBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class TasksRelationManager extends RelationManager\n{\n    protected static string $relationship = 'tasks';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-check-circle';\n\n    public function form(Schema $schema): Schema\n    {\n        return TaskForm::get($schema, ['opportunities']);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title'),\n\n                ...CustomFields::table()->forModel($table->getModel())->columns(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n                AttachAction::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make(),\n                    DetachAction::make(),\n                    DeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DetachBulkAction::make(),\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/OpportunityResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Filament\\Exports\\OpportunityExporter;\nuse App\\Filament\\Resources\\OpportunityResource\\Forms\\OpportunityForm;\nuse App\\Filament\\Resources\\OpportunityResource\\Pages\\ListOpportunities;\nuse App\\Filament\\Resources\\OpportunityResource\\Pages\\ViewOpportunity;\nuse App\\Filament\\Resources\\OpportunityResource\\RelationManagers\\NotesRelationManager;\nuse App\\Filament\\Resources\\OpportunityResource\\RelationManagers\\TasksRelationManager;\nuse App\\Models\\Opportunity;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ExportBulkAction;\nuse Filament\\Actions\\ForceDeleteAction;\nuse Filament\\Actions\\ForceDeleteBulkAction;\nuse Filament\\Actions\\RestoreAction;\nuse Filament\\Actions\\RestoreBulkAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\SoftDeletingScope;\nuse Override;\n\nfinal class OpportunityResource extends Resource\n{\n    protected static ?string $model = Opportunity::class;\n\n    protected static ?string $recordTitleAttribute = 'name';\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-trophy';\n\n    protected static ?int $navigationSort = 3;\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Workspace';\n\n    public static function form(Schema $schema): Schema\n    {\n        return OpportunityForm::get($schema);\n    }\n\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable(),\n                TextColumn::make('creator.name')\n                    ->label('Created By')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable()\n                    ->getStateUsing(fn (Opportunity $record): string => $record->created_by),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->defaultSort('created_at', 'desc')\n            ->filters([\n                SelectFilter::make('creation_source')\n                    ->label('Creation Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n                TrashedFilter::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    ViewAction::make(),\n                    EditAction::make(),\n                    RestoreAction::make(),\n                    DeleteAction::make(),\n                    ForceDeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    ExportBulkAction::make()\n                        ->exporter(OpportunityExporter::class),\n                    RestoreBulkAction::make(),\n                    DeleteBulkAction::make(),\n                    ForceDeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    public static function getRelations(): array\n    {\n        return [\n            TasksRelationManager::class,\n            NotesRelationManager::class,\n        ];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListOpportunities::route('/'),\n            'view' => ViewOpportunity::route('/{record}'),\n        ];\n    }\n\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->with(['team', 'customFieldValues.customField.options'])\n            ->withoutGlobalScopes([\n                SoftDeletingScope::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/PeopleResource/Pages/ListPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\PeopleResource\\Pages;\n\nuse App\\Filament\\Exports\\PeopleExporter;\nuse App\\Filament\\Resources\\PeopleResource;\nuse Asmit\\ResizedColumn\\HasResizableColumn;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\ExportAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Filament\\Support\\Enums\\Size;\nuse Override;\nuse Relaticle\\CustomFields\\Concerns\\InteractsWithCustomFields;\nuse Relaticle\\ImportWizard\\Filament\\Pages\\ImportPeople;\n\nfinal class ListPeople extends ListRecords\n{\n    use HasResizableColumn;\n    use InteractsWithCustomFields;\n\n    protected static string $resource = PeopleResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ActionGroup::make([\n                Action::make('import')\n                    ->label('Import people')\n                    ->icon('heroicon-o-arrow-up-tray')\n                    ->url(ImportPeople::getUrl()),\n                ExportAction::make()->exporter(PeopleExporter::class),\n            ])\n                ->icon('heroicon-o-arrows-up-down')\n                ->color('gray')\n                ->button()\n                ->label('Import / Export')\n                ->size(Size::Small),\n            CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/PeopleResource/Pages/ViewPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\PeopleResource\\Pages;\n\nuse App\\Filament\\Actions\\GenerateRecordSummaryAction;\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Filament\\Resources\\PeopleResource;\nuse App\\Models\\People;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Infolists\\Components\\ImageEntry;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Filament\\Schemas\\Components\\Flex;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\TextSize;\nuse Illuminate\\Support\\Js;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class ViewPeople extends ViewRecord\n{\n    protected static string $resource = PeopleResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            GenerateRecordSummaryAction::make(),\n            EditAction::make()->icon('heroicon-o-pencil-square')->label('Edit'),\n            ActionGroup::make([\n                ActionGroup::make([\n                    Action::make('copyPageUrl')\n                        ->label('Copy page URL')\n                        ->icon('heroicon-o-clipboard-document')\n                        ->action(function (People $record): void {\n                            $jsUrl = Js::from(PeopleResource::getUrl('view', [$record]));\n                            $this->js(\"\n                            navigator.clipboard.writeText({$jsUrl}).then(() => {\n                                new FilamentNotification()\n                                    .title('URL copied to clipboard')\n                                    .success()\n                                    .send()\n                            })\n                        \");\n                        }),\n                    Action::make('copyRecordId')\n                        ->label('Copy record ID')\n                        ->icon('heroicon-o-clipboard-document')\n                        ->action(function (People $record): void {\n                            $jsId = Js::from((string) $record->getKey());\n                            $this->js(\"\n                            navigator.clipboard.writeText({$jsId}).then(() => {\n                                new FilamentNotification()\n                                    .title('Record ID copied to clipboard')\n                                    .success()\n                                    .send()\n                            })\n                        \");\n                        }),\n                ])->dropdown(false),\n                DeleteAction::make(),\n            ]),\n        ];\n    }\n\n    public function infolist(Schema $schema): Schema\n    {\n        return $schema->schema([\n            Section::make()->schema([\n                Flex::make([\n                    ImageEntry::make('avatar')\n                        ->label('')\n                        ->height(30)\n                        ->circular()\n                        ->grow(false),\n                    TextEntry::make('name')\n                        ->label('')\n                        ->size(TextSize::Large),\n                    TextEntry::make('company.name')\n                        ->label('Company')\n                        ->color('primary')\n                        ->url(fn (People $record): ?string => $record->company ? CompanyResource::getUrl('view', [$record->company]) : null),\n                ]),\n                CustomFields::infolist()->forSchema($schema)->build()->columnSpanFull(),\n            ])->columnSpanFull(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/PeopleResource/RelationManagers/NotesRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\PeopleResource\\RelationManagers;\n\nuse App\\Filament\\Resources\\NoteResource\\Forms\\NoteForm;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class NotesRelationManager extends RelationManager\n{\n    protected static string $relationship = 'notes';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-document-text';\n\n    public function form(Schema $schema): Schema\n    {\n        return NoteForm::get($schema, ['people']);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title'),\n                ...CustomFields::table()->forModel($table->getModel())->columns(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n            ])\n            ->recordActions([\n                EditAction::make(),\n                DeleteAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/PeopleResource/RelationManagers/TasksRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\PeopleResource\\RelationManagers;\n\nuse App\\Filament\\Resources\\TaskResource\\Forms\\TaskForm;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class TasksRelationManager extends RelationManager\n{\n    protected static string $relationship = 'tasks';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-check-circle';\n\n    public function form(Schema $schema): Schema\n    {\n        return TaskForm::get($schema, ['people']);\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title'),\n                ...CustomFields::table()->forModel($table->getModel())->columns(),\n            ])\n            ->filters([\n                //\n            ])\n            ->headerActions([\n                CreateAction::make()->icon('heroicon-o-plus')->size(Size::Small),\n            ])\n            ->recordActions([\n                EditAction::make(),\n                DeleteAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/PeopleResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Filament\\Exports\\PeopleExporter;\nuse App\\Filament\\Resources\\PeopleResource\\Pages\\ListPeople;\nuse App\\Filament\\Resources\\PeopleResource\\Pages\\ViewPeople;\nuse App\\Filament\\Resources\\PeopleResource\\RelationManagers\\NotesRelationManager;\nuse App\\Filament\\Resources\\PeopleResource\\RelationManagers\\TasksRelationManager;\nuse App\\Models\\Company;\nuse App\\Models\\People;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ExportBulkAction;\nuse Filament\\Actions\\ForceDeleteAction;\nuse Filament\\Actions\\ForceDeleteBulkAction;\nuse Filament\\Actions\\RestoreAction;\nuse Filament\\Actions\\RestoreBulkAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Components\\Grid;\nuse Filament\\Schemas\\Components\\Utilities\\Set;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Width;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\SoftDeletingScope;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class PeopleResource extends Resource\n{\n    protected static ?string $model = People::class;\n\n    protected static ?string $modelLabel = 'person';\n\n    protected static ?string $recordTitleAttribute = 'name';\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-user';\n\n    protected static ?int $navigationSort = 1;\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Workspace';\n\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Grid::make()\n                    ->columnSpanFull()\n                    ->schema([\n                        TextInput::make('name')\n                            ->required()\n                            ->maxLength(255)\n                            ->columnSpan(7),\n                        Select::make('company_id')\n                            ->relationship('company', 'name')\n                            ->suffixAction(\n                                Action::make('Create Company')\n                                    ->model(Company::class)\n                                    ->schema(fn (Schema $schema): Schema => $schema->components([\n                                        TextInput::make('name')\n                                            ->required(),\n                                        Select::make('account_owner_id')\n                                            ->model(Company::class)\n                                            ->relationship('accountOwner', 'name')\n                                            ->label('Account Owner')\n                                            ->preload()\n                                            ->searchable(),\n                                        CustomFields::form()->forModel(Company::class)->build()->columns(1),\n                                    ]))\n                                    ->modalWidth(Width::Large)\n                                    ->slideOver()\n                                    ->icon('heroicon-o-plus')\n                                    ->action(function (array $data, Set $set): void {\n                                        $company = Company::query()->create($data);\n                                        $set('company_id', $company->id);\n                                    })\n                            )\n                            ->searchable()\n                            ->preload()\n                            ->columnSpan(5),\n                    ])\n                    ->columns(12),\n                CustomFields::form()->build()->columnSpanFull(),\n            ]);\n    }\n\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->columns([\n                TextColumn::make('name')\n                    ->label('Person')\n                    ->searchable()\n                    ->sortable()\n                    ->view('filament.tables.columns.avatar-name-column'),\n                TextColumn::make('company.name')\n                    ->label('Company')\n                    ->url(fn (People $record): ?string => $record->company_id ? CompanyResource::getUrl('view', [$record->company_id]) : null)\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('creator.name')\n                    ->label('Created By')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable()\n                    ->getStateUsing(fn (People $record): string => $record->created_by),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable()\n                    ->toggledHiddenByDefault(),\n            ])\n            ->defaultSort('created_at', 'desc')\n            ->filters([\n                SelectFilter::make('creation_source')\n                    ->label('Creation Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n                TrashedFilter::make(),\n            ])\n            ->recordActions([\n                ActionGroup::make([\n                    ViewAction::make(),\n                    EditAction::make(),\n                    RestoreAction::make(),\n                    DeleteAction::make(),\n                    ForceDeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    ExportBulkAction::make()\n                        ->exporter(PeopleExporter::class),\n                    DeleteBulkAction::make(),\n                    ForceDeleteBulkAction::make(),\n                    RestoreBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    public static function getRelations(): array\n    {\n        return [\n            TasksRelationManager::class,\n            NotesRelationManager::class,\n        ];\n    }\n\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListPeople::route('/'),\n            'view' => ViewPeople::route('/{record}'),\n        ];\n    }\n\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->with(['team', 'customFieldValues.customField.options'])\n            ->withoutGlobalScopes([\n                SoftDeletingScope::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/TaskResource/Forms/TaskForm.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\TaskResource\\Forms;\n\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Schema;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class TaskForm\n{\n    /**\n     * @param  array<string>  $excludeFields\n     *\n     * @throws \\Exception\n     */\n    public static function get(Schema $schema, array $excludeFields = []): Schema\n    {\n        $components = [\n            TextInput::make('title')\n                ->required()\n                ->columnSpanFull(),\n        ];\n\n        if (! in_array('companies', $excludeFields)) {\n            $components[] = Select::make('companies')\n                ->label('Companies')\n                ->multiple()\n                ->relationship('companies', 'name')\n                ->columnSpanFull();\n        }\n\n        if (! in_array('people', $excludeFields)) {\n            $components[] = Select::make('people')\n                ->label('People')\n                ->multiple()\n                ->relationship('people', 'name')\n                ->nullable();\n        }\n\n        $components[] = Select::make('assignees')\n            ->label('Assignees')\n            ->multiple()\n            ->relationship('assignees', 'name')\n            ->nullable();\n\n        $components[] = CustomFields::form()->except($excludeFields)->build()->columnSpanFull()->columns(1);\n\n        return $schema\n            ->components($components)\n            ->columns(2);\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/TaskResource/Pages/ManageTasks.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources\\TaskResource\\Pages;\n\nuse App\\Actions\\Task\\NotifyTaskAssignees;\nuse App\\Filament\\Exports\\TaskExporter;\nuse App\\Filament\\Resources\\TaskResource;\nuse App\\Models\\Task;\nuse Asmit\\ResizedColumn\\HasResizableColumn;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Actions\\ExportAction;\nuse Filament\\Resources\\Pages\\ManageRecords;\nuse Filament\\Support\\Enums\\Size;\nuse Override;\nuse Relaticle\\CustomFields\\Concerns\\InteractsWithCustomFields;\nuse Relaticle\\ImportWizard\\Filament\\Pages\\ImportTasks;\n\nfinal class ManageTasks extends ManageRecords\n{\n    use HasResizableColumn;\n    use InteractsWithCustomFields;\n\n    protected static string $resource = TaskResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ActionGroup::make([\n                Action::make('import')\n                    ->label('Import tasks')\n                    ->icon('heroicon-o-arrow-up-tray')\n                    ->url(ImportTasks::getUrl()),\n                ExportAction::make()->exporter(TaskExporter::class),\n            ])\n                ->icon('heroicon-o-arrows-up-down')\n                ->color('gray')\n                ->button()\n                ->label('Import / Export')\n                ->size(Size::Small),\n            CreateAction::make()\n                ->icon('heroicon-o-plus')\n                ->size(Size::Small)\n                ->slideOver()\n                ->after(function (Task $record): void {\n                    resolve(NotifyTaskAssignees::class)->execute($record);\n                }),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Filament/Resources/TaskResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Filament\\Resources;\n\nuse App\\Actions\\Task\\UpdateTask;\nuse App\\Enums\\CreationSource;\nuse App\\Filament\\Resources\\TaskResource\\Forms\\TaskForm;\nuse App\\Filament\\Resources\\TaskResource\\Pages\\ManageTasks;\nuse App\\Models\\CustomField;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Filament\\Actions\\ActionGroup;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ForceDeleteAction;\nuse Filament\\Actions\\ForceDeleteBulkAction;\nuse Filament\\Actions\\RestoreAction;\nuse Filament\\Actions\\RestoreBulkAction;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\Filter;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Grouping\\Group;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\SoftDeletingScope;\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\CustomFields\\Contracts\\ValueResolvers;\n\nfinal class TaskResource extends Resource\n{\n    protected static ?string $model = Task::class;\n\n    protected static ?string $navigationLabel = 'Tasks';\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-check-circle';\n\n    protected static ?string $recordTitleAttribute = 'title';\n\n    protected static ?int $navigationSort = 3;\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Workspace';\n\n    public static function form(Schema $schema): Schema\n    {\n        return TaskForm::get($schema);\n    }\n\n    public static function table(Table $table): Table\n    {\n        /** @var Collection<string, CustomField> $customFields */\n        $customFields = CustomField::query()->whereIn('code', ['status', 'priority'])->get()->keyBy('code');\n        /** @var ValueResolvers $valueResolver */\n        $valueResolver = resolve(ValueResolvers::class);\n\n        return $table\n            ->columns([\n                TextColumn::make('title')\n                    ->searchable()\n                    ->limit(50)\n                    ->weight('medium'),\n                TextColumn::make('assignees.name')\n                    ->label('Assignee')\n                    ->badge()\n                    ->color('primary')\n                    ->searchable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('creator.name')\n                    ->label('Created By')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable()\n                    ->getStateUsing(fn (Task $record): string => $record->createdBy),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable()\n                    ->toggledHiddenByDefault(),\n            ])\n            ->defaultSort('created_at', 'desc')\n            ->searchable()\n            ->paginated([10, 25, 50])\n            ->filters([\n                Filter::make('assigned_to_me')\n                    ->label('Assigned to me')\n                    ->query(fn (Builder $query): Builder => $query->whereHas('assignees', function (Builder $query): void {\n                        $query->where('users.id', auth()->id());\n                    }))\n                    ->toggle(),\n                SelectFilter::make('assignees')\n                    ->multiple()\n                    ->relationship('assignees', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('creation_source')\n                    ->label('Creation Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n                TrashedFilter::make(),\n            ])\n            ->groups(array_filter([\n                ...collect(['status', 'priority'])->map(fn (string $fieldCode): ?\\Filament\\Tables\\Grouping\\Group => $customFields->has($fieldCode) ? self::makeCustomFieldGroup($fieldCode, $customFields, $valueResolver) : null\n                )->filter()->toArray(),\n            ]))\n            ->recordActions([\n                ActionGroup::make([\n                    EditAction::make()\n                        ->using(function (Task $record, array $data): Task {\n                            /** @var User $user */\n                            $user = auth()->user();\n\n                            return resolve(UpdateTask::class)->execute($user, $record, $data);\n                        }),\n                    RestoreAction::make(),\n                    DeleteAction::make(),\n                    ForceDeleteAction::make(),\n                ]),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                    ForceDeleteBulkAction::make(),\n                    RestoreBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    public static function getPages(): array\n    {\n        return [\n            'index' => ManageTasks::route('/'),\n        ];\n    }\n\n    /**\n     * @param  Collection<string, CustomField>  $customFields\n     */\n    private static function makeCustomFieldGroup(string $fieldCode, Collection $customFields, ValueResolvers $valueResolver): Group\n    {\n        $field = $customFields[$fieldCode];\n        $label = ucfirst($fieldCode);\n\n        return Group::make(\"{$fieldCode}_group\")\n            ->label($label)\n            ->orderQueryUsing(fn (Builder $query, string $direction): Builder => $query->orderBy(\n                $field->values()\n                    ->select($field->getValueColumn())\n                    ->whereColumn('custom_field_values.entity_id', 'tasks.id')\n                    ->limit(1)\n                    ->getQuery(),\n                $direction\n            ))\n            ->getTitleFromRecordUsing(function (Task $record) use ($valueResolver, $field, $label): string {\n                $value = $valueResolver->resolve($record, $field);\n\n                return blank($value) ? \"No {$label}\" : $value;\n            })\n            ->getKeyFromRecordUsing(function (Task $record) use ($field): string {\n                $fieldValue = $record->customFieldValues->firstWhere('custom_field_id', $field->id);\n                $rawValue = $fieldValue?->getValue();\n\n                return $rawValue ? (string) $rawValue : '0';\n            })\n            ->scopeQueryByKeyUsing(function (Builder $query, string $key) use ($field): Builder {\n                if ($key === '0') {\n                    return $query->whereDoesntHave('customFieldValues', function (Builder $query) use ($field): void {\n                        $query->where('custom_field_id', $field->id);\n                    });\n                }\n\n                return $query->whereHas('customFieldValues', function (Builder $query) use ($field, $key): void {\n                    $query->where('custom_field_id', $field->id)\n                        ->where($field->getValueColumn(), $key);\n                });\n            });\n    }\n\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->with(['team', 'customFieldValues.customField.options'])\n            ->withoutGlobalScopes([\n                SoftDeletingScope::class,\n            ]);\n    }\n}\n"
  },
  {
    "path": "app/Health/AnthropicModelCheck.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Health;\n\nuse Prism\\Prism\\Enums\\Provider;\nuse Prism\\Prism\\Facades\\Prism;\nuse Spatie\\Health\\Checks\\Check;\nuse Spatie\\Health\\Checks\\Result;\nuse Throwable;\n\nfinal class AnthropicModelCheck extends Check\n{\n    public function run(): Result\n    {\n        $model = config('services.anthropic.summary_model');\n\n        $result = Result::make()\n            ->meta(['model' => $model])\n            ->shortSummary($model);\n\n        try {\n            Prism::text()\n                ->using(Provider::Anthropic, $model)\n                ->withMaxTokens(1)\n                ->withPrompt('Hi')\n                ->generate();\n\n            return $result->ok();\n        } catch (Throwable $e) {\n            return $result->failed(\"Anthropic model '{$model}' is unavailable: {$e->getMessage()}\");\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/AcceptTeamInvitationController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\TeamInvitation;\nuse App\\Models\\User;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\View\\View;\nuse Laravel\\Jetstream\\Contracts\\AddsTeamMembers;\n\nfinal readonly class AcceptTeamInvitationController\n{\n    public function __invoke(Request $request, string $invitationId): RedirectResponse|View\n    {\n        $invitation = TeamInvitation::query()->whereKey($invitationId)->firstOrFail();\n\n        if ($invitation->isExpired()) {\n            Log::warning('Expired invitation accessed', [\n                'invitation_id' => $invitation->id,\n                'team_id' => $invitation->team_id,\n            ]);\n\n            return view('teams.invitation-expired');\n        }\n\n        if ($request->user()->email !== $invitation->email) {\n            Log::warning('Invitation email mismatch', [\n                'invitation_id' => $invitation->id,\n                'user_id' => $request->user()->id,\n            ]);\n\n            abort(403, __('This invitation was sent to a different email address.'));\n        }\n\n        /** @var User $owner */\n        $owner = $invitation->team->owner;\n\n        resolve(AddsTeamMembers::class)->add(\n            $owner,\n            $invitation->team,\n            $invitation->email,\n            $invitation->role,\n        );\n\n        $invitation->delete();\n\n        /** @var User $user */\n        $user = $request->user();\n        $user->switchTeam($invitation->team);\n\n        return redirect(config('fortify.home'))\n            ->banner(__('Great! You have accepted the invitation to join the :team team.', [ // @phpstan-ignore method.notFound\n                'team' => $invitation->team->name,\n            ]));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/V1/CompaniesController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Actions\\Company\\CreateCompany;\nuse App\\Actions\\Company\\DeleteCompany;\nuse App\\Actions\\Company\\ListCompanies;\nuse App\\Actions\\Company\\UpdateCompany;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Requests\\Api\\V1\\IndexRequest;\nuse App\\Http\\Requests\\Api\\V1\\StoreCompanyRequest;\nuse App\\Http\\Requests\\Api\\V1\\UpdateCompanyRequest;\nuse App\\Http\\Resources\\V1\\CompanyResource;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Illuminate\\Container\\Attributes\\CurrentUser;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Http\\Response as HttpResponse;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Knuckles\\Scribe\\Attributes\\Response;\nuse Knuckles\\Scribe\\Attributes\\ResponseFromApiResource;\n\n/**\n * @group Companies\n *\n * Manage companies in your CRM workspace.\n */\nfinal readonly class CompaniesController\n{\n    #[ResponseFromApiResource(CompanyResource::class, Company::class, collection: true, paginate: 15)]\n    public function index(IndexRequest $request, ListCompanies $action, #[CurrentUser] User $user): AnonymousResourceCollection\n    {\n        return CompanyResource::collection($action->execute(\n            user: $user,\n            perPage: $request->safe()->integer('per_page', 15),\n            useCursor: $request->safe()->has('cursor'),\n            request: $request,\n        ));\n    }\n\n    #[ResponseFromApiResource(CompanyResource::class, Company::class, status: 201)]\n    public function store(StoreCompanyRequest $request, CreateCompany $action, #[CurrentUser] User $user): JsonResponse\n    {\n        $company = $action->execute($user, $request->validated(), CreationSource::API);\n\n        return new CompanyResource($company)\n            ->response()\n            ->setStatusCode(201);\n    }\n\n    #[ResponseFromApiResource(CompanyResource::class, Company::class)]\n    public function show(Company $company): CompanyResource\n    {\n        Gate::authorize('view', $company);\n\n        $company->loadMissing('customFieldValues.customField.options');\n\n        return new CompanyResource($company);\n    }\n\n    #[ResponseFromApiResource(CompanyResource::class, Company::class)]\n    public function update(UpdateCompanyRequest $request, Company $company, UpdateCompany $action, #[CurrentUser] User $user): CompanyResource\n    {\n        $company = $action->execute($user, $company, $request->validated());\n\n        return new CompanyResource($company);\n    }\n\n    #[Response(status: 204)]\n    public function destroy(Company $company, DeleteCompany $action, #[CurrentUser] User $user): HttpResponse\n    {\n        $action->execute($user, $company);\n\n        return response()->noContent();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/V1/CustomFieldsController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Http\\Requests\\Api\\V1\\IndexCustomFieldsRequest;\nuse App\\Http\\Resources\\V1\\CustomFieldResource;\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Knuckles\\Scribe\\Attributes\\ResponseFromApiResource;\n\n/**\n * @group Custom Fields\n *\n * List custom field definitions configured for your workspace.\n */\nfinal readonly class CustomFieldsController\n{\n    #[ResponseFromApiResource(CustomFieldResource::class, CustomField::class, collection: true, paginate: 15)]\n    public function index(IndexCustomFieldsRequest $request): AnonymousResourceCollection\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $teamId = $user->currentTeam->getKey();\n\n        $query = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $teamId)\n            ->active()\n            ->with(['options' => fn (HasMany $q) => $q->withoutGlobalScopes()]);\n\n        $query->when($request->validated('entity_type'), fn (mixed $q, string $type) => $q->where('entity_type', $type));\n\n        return CustomFieldResource::collection($query->paginate($request->safe()->integer('per_page', 15)));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/V1/NotesController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Actions\\Note\\CreateNote;\nuse App\\Actions\\Note\\DeleteNote;\nuse App\\Actions\\Note\\ListNotes;\nuse App\\Actions\\Note\\UpdateNote;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Requests\\Api\\V1\\IndexRequest;\nuse App\\Http\\Requests\\Api\\V1\\StoreNoteRequest;\nuse App\\Http\\Requests\\Api\\V1\\UpdateNoteRequest;\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Illuminate\\Container\\Attributes\\CurrentUser;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Http\\Response as HttpResponse;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Knuckles\\Scribe\\Attributes\\Response;\nuse Knuckles\\Scribe\\Attributes\\ResponseFromApiResource;\n\n/**\n * @group Notes\n *\n * Manage notes in your CRM workspace.\n */\nfinal readonly class NotesController\n{\n    #[ResponseFromApiResource(NoteResource::class, Note::class, collection: true, paginate: 15)]\n    public function index(IndexRequest $request, ListNotes $action, #[CurrentUser] User $user): AnonymousResourceCollection\n    {\n        return NoteResource::collection($action->execute(\n            user: $user,\n            perPage: $request->safe()->integer('per_page', 15),\n            useCursor: $request->safe()->has('cursor'),\n            request: $request,\n        ));\n    }\n\n    #[ResponseFromApiResource(NoteResource::class, Note::class, status: 201)]\n    public function store(StoreNoteRequest $request, CreateNote $action, #[CurrentUser] User $user): JsonResponse\n    {\n        $note = $action->execute($user, $request->validated(), CreationSource::API);\n\n        return new NoteResource($note)\n            ->response()\n            ->setStatusCode(201);\n    }\n\n    #[ResponseFromApiResource(NoteResource::class, Note::class)]\n    public function show(Note $note): NoteResource\n    {\n        Gate::authorize('view', $note);\n\n        $note->loadMissing('customFieldValues.customField.options');\n\n        return new NoteResource($note);\n    }\n\n    #[ResponseFromApiResource(NoteResource::class, Note::class)]\n    public function update(UpdateNoteRequest $request, Note $note, UpdateNote $action, #[CurrentUser] User $user): NoteResource\n    {\n        $note = $action->execute($user, $note, $request->validated());\n\n        return new NoteResource($note);\n    }\n\n    #[Response(status: 204)]\n    public function destroy(Note $note, DeleteNote $action, #[CurrentUser] User $user): HttpResponse\n    {\n        $action->execute($user, $note);\n\n        return response()->noContent();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/V1/OpportunitiesController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Actions\\Opportunity\\CreateOpportunity;\nuse App\\Actions\\Opportunity\\DeleteOpportunity;\nuse App\\Actions\\Opportunity\\ListOpportunities;\nuse App\\Actions\\Opportunity\\UpdateOpportunity;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Requests\\Api\\V1\\IndexRequest;\nuse App\\Http\\Requests\\Api\\V1\\StoreOpportunityRequest;\nuse App\\Http\\Requests\\Api\\V1\\UpdateOpportunityRequest;\nuse App\\Http\\Resources\\V1\\OpportunityResource;\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Illuminate\\Container\\Attributes\\CurrentUser;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Http\\Response as HttpResponse;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Knuckles\\Scribe\\Attributes\\BodyParam;\nuse Knuckles\\Scribe\\Attributes\\Response;\nuse Knuckles\\Scribe\\Attributes\\ResponseFromApiResource;\n\n/**\n * @group Opportunities\n *\n * Manage sales opportunities in your CRM workspace.\n */\nfinal readonly class OpportunitiesController\n{\n    #[ResponseFromApiResource(OpportunityResource::class, Opportunity::class, collection: true, paginate: 15)]\n    public function index(IndexRequest $request, ListOpportunities $action, #[CurrentUser] User $user): AnonymousResourceCollection\n    {\n        return OpportunityResource::collection($action->execute(\n            user: $user,\n            perPage: $request->safe()->integer('per_page', 15),\n            useCursor: $request->safe()->has('cursor'),\n            request: $request,\n        ));\n    }\n\n    #[ResponseFromApiResource(OpportunityResource::class, Opportunity::class, status: 201)]\n    #[BodyParam('name', 'string', required: true, example: 'Enterprise Deal')]\n    #[BodyParam('company_id', 'string', required: false, example: null)]\n    #[BodyParam('contact_id', 'string', required: false, example: null)]\n    public function store(StoreOpportunityRequest $request, CreateOpportunity $action, #[CurrentUser] User $user): JsonResponse\n    {\n        $opportunity = $action->execute($user, $request->validated(), CreationSource::API);\n\n        return new OpportunityResource($opportunity)\n            ->response()\n            ->setStatusCode(201);\n    }\n\n    #[ResponseFromApiResource(OpportunityResource::class, Opportunity::class)]\n    public function show(Opportunity $opportunity): OpportunityResource\n    {\n        Gate::authorize('view', $opportunity);\n\n        $opportunity->loadMissing('customFieldValues.customField.options');\n\n        return new OpportunityResource($opportunity);\n    }\n\n    #[ResponseFromApiResource(OpportunityResource::class, Opportunity::class)]\n    #[BodyParam('name', 'string', required: false, example: 'Enterprise Deal')]\n    #[BodyParam('company_id', 'string', required: false, example: null)]\n    #[BodyParam('contact_id', 'string', required: false, example: null)]\n    public function update(UpdateOpportunityRequest $request, Opportunity $opportunity, UpdateOpportunity $action, #[CurrentUser] User $user): OpportunityResource\n    {\n        $opportunity = $action->execute($user, $opportunity, $request->validated());\n\n        return new OpportunityResource($opportunity);\n    }\n\n    #[Response(status: 204)]\n    public function destroy(Opportunity $opportunity, DeleteOpportunity $action, #[CurrentUser] User $user): HttpResponse\n    {\n        $action->execute($user, $opportunity);\n\n        return response()->noContent();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/V1/PeopleController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Actions\\People\\CreatePeople;\nuse App\\Actions\\People\\DeletePeople;\nuse App\\Actions\\People\\ListPeople;\nuse App\\Actions\\People\\UpdatePeople;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Requests\\Api\\V1\\IndexRequest;\nuse App\\Http\\Requests\\Api\\V1\\StorePeopleRequest;\nuse App\\Http\\Requests\\Api\\V1\\UpdatePeopleRequest;\nuse App\\Http\\Resources\\V1\\PeopleResource;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Illuminate\\Container\\Attributes\\CurrentUser;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Http\\Response as HttpResponse;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Knuckles\\Scribe\\Attributes\\BodyParam;\nuse Knuckles\\Scribe\\Attributes\\Response;\nuse Knuckles\\Scribe\\Attributes\\ResponseFromApiResource;\n\n/**\n * @group People\n *\n * Manage people (contacts) in your CRM workspace.\n */\nfinal readonly class PeopleController\n{\n    #[ResponseFromApiResource(PeopleResource::class, People::class, collection: true, paginate: 15)]\n    public function index(IndexRequest $request, ListPeople $action, #[CurrentUser] User $user): AnonymousResourceCollection\n    {\n        return PeopleResource::collection($action->execute(\n            user: $user,\n            perPage: $request->safe()->integer('per_page', 15),\n            useCursor: $request->safe()->has('cursor'),\n            request: $request,\n        ));\n    }\n\n    #[ResponseFromApiResource(PeopleResource::class, People::class, status: 201)]\n    #[BodyParam('name', 'string', required: true, example: 'Jane Smith')]\n    #[BodyParam('company_id', 'string', required: false, example: null)]\n    public function store(StorePeopleRequest $request, CreatePeople $action, #[CurrentUser] User $user): JsonResponse\n    {\n        $person = $action->execute($user, $request->validated(), CreationSource::API);\n\n        return new PeopleResource($person)\n            ->response()\n            ->setStatusCode(201);\n    }\n\n    #[ResponseFromApiResource(PeopleResource::class, People::class)]\n    public function show(People $person): PeopleResource\n    {\n        Gate::authorize('view', $person);\n\n        $person->loadMissing('customFieldValues.customField.options');\n\n        return new PeopleResource($person);\n    }\n\n    #[ResponseFromApiResource(PeopleResource::class, People::class)]\n    #[BodyParam('name', 'string', required: false, example: 'Jane Smith')]\n    #[BodyParam('company_id', 'string', required: false, example: null)]\n    public function update(UpdatePeopleRequest $request, People $person, UpdatePeople $action, #[CurrentUser] User $user): PeopleResource\n    {\n        $person = $action->execute($user, $person, $request->validated());\n\n        return new PeopleResource($person);\n    }\n\n    #[Response(status: 204)]\n    public function destroy(People $person, DeletePeople $action, #[CurrentUser] User $user): HttpResponse\n    {\n        $action->execute($user, $person);\n\n        return response()->noContent();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/V1/TasksController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Api\\V1;\n\nuse App\\Actions\\Task\\CreateTask;\nuse App\\Actions\\Task\\DeleteTask;\nuse App\\Actions\\Task\\ListTasks;\nuse App\\Actions\\Task\\UpdateTask;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Requests\\Api\\V1\\IndexRequest;\nuse App\\Http\\Requests\\Api\\V1\\StoreTaskRequest;\nuse App\\Http\\Requests\\Api\\V1\\UpdateTaskRequest;\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Illuminate\\Container\\Attributes\\CurrentUser;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection;\nuse Illuminate\\Http\\Response as HttpResponse;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Knuckles\\Scribe\\Attributes\\Response;\nuse Knuckles\\Scribe\\Attributes\\ResponseFromApiResource;\n\n/**\n * @group Tasks\n *\n * Manage tasks in your CRM workspace.\n */\nfinal readonly class TasksController\n{\n    #[ResponseFromApiResource(TaskResource::class, Task::class, collection: true, paginate: 15)]\n    public function index(IndexRequest $request, ListTasks $action, #[CurrentUser] User $user): AnonymousResourceCollection\n    {\n        return TaskResource::collection($action->execute(\n            user: $user,\n            perPage: $request->safe()->integer('per_page', 15),\n            useCursor: $request->safe()->has('cursor'),\n            request: $request,\n        ));\n    }\n\n    #[ResponseFromApiResource(TaskResource::class, Task::class, status: 201)]\n    public function store(StoreTaskRequest $request, CreateTask $action, #[CurrentUser] User $user): JsonResponse\n    {\n        $task = $action->execute($user, $request->validated(), CreationSource::API);\n\n        return new TaskResource($task)\n            ->response()\n            ->setStatusCode(201);\n    }\n\n    #[ResponseFromApiResource(TaskResource::class, Task::class)]\n    public function show(Task $task): TaskResource\n    {\n        Gate::authorize('view', $task);\n\n        $task->loadMissing('customFieldValues.customField.options');\n\n        return new TaskResource($task);\n    }\n\n    #[ResponseFromApiResource(TaskResource::class, Task::class)]\n    public function update(UpdateTaskRequest $request, Task $task, UpdateTask $action, #[CurrentUser] User $user): TaskResource\n    {\n        $task = $action->execute($user, $task, $request->validated());\n\n        return new TaskResource($task);\n    }\n\n    #[Response(status: 204)]\n    public function destroy(Task $task, DeleteTask $action, #[CurrentUser] User $user): HttpResponse\n    {\n        $action->execute($user, $task);\n\n        return response()->noContent();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/CallbackController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Contracts\\User\\CreatesNewSocialUsers;\nuse App\\Models\\User;\nuse App\\Models\\UserSocialAccount;\nuse Filament\\Notifications\\Notification;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\DB;\nuse Laravel\\Socialite\\Contracts\\User as SocialiteUser;\nuse Laravel\\Socialite\\Facades\\Socialite;\nuse Laravel\\Socialite\\Two\\InvalidStateException;\nuse Throwable;\n\nfinal readonly class CallbackController\n{\n    public function __invoke(\n        Request $request,\n        string $provider,\n        CreatesNewSocialUsers $creator\n    ): RedirectResponse {\n        if (! $request->has('code')) {\n            return $this->handleError('Authorization was cancelled or failed. Please try again.');\n        }\n\n        try {\n            $socialUser = $this->retrieveSocialUser($provider);\n            $user = $this->resolveUser($provider, $socialUser, $creator);\n\n            return $this->loginAndRedirect($user);\n        } catch (InvalidStateException) {\n            return $this->handleError('Authentication state mismatch. Please try again.');\n        } catch (Throwable $e) {\n            report($e);\n\n            return $this->handleError($this->parseProviderError($e->getMessage(), $provider));\n        }\n    }\n\n    /**\n     * @throws InvalidStateException\n     * @throws Throwable\n     */\n    private function retrieveSocialUser(string $provider): SocialiteUser\n    {\n        return Socialite::driver($provider)->user();\n    }\n\n    private function resolveUser(\n        string $provider,\n        SocialiteUser $socialUser,\n        CreatesNewSocialUsers $creator\n    ): User {\n        return DB::transaction(function () use ($provider, $socialUser, $creator): User {\n            $existingAccount = UserSocialAccount::query()\n                ->with('user')\n                ->where('provider_name', $provider)\n                ->where('provider_id', $socialUser->getId())\n                ->first();\n\n            if ($existingAccount?->user) {\n                return $existingAccount->user;\n            }\n\n            $email = $socialUser->getEmail();\n            $user = $email ? User::query()->where('email', $email)->first() : null;\n\n            if (! $user) {\n                $user = $this->createUser($socialUser, $creator, $provider);\n            }\n\n            $this->linkSocialAccount($user, $provider, $socialUser->getId());\n\n            return $user;\n        });\n    }\n\n    private function createUser(\n        SocialiteUser $socialUser,\n        CreatesNewSocialUsers $creator,\n        string $provider\n    ): User {\n        return $creator->create([\n            'name' => $this->extractName($socialUser),\n            'email' => $this->extractEmail($socialUser, $provider),\n            'terms' => 'on',\n        ]);\n    }\n\n    private function linkSocialAccount(User $user, string $provider, string|int $providerId): void\n    {\n        $user->socialAccounts()->updateOrCreate(\n            [\n                'provider_name' => $provider,\n                'provider_id' => (string) $providerId,\n            ]\n        );\n    }\n\n    private function extractName(SocialiteUser $socialUser): string\n    {\n        return $socialUser->getName()\n            ?? $socialUser->getNickname()\n            ?? 'Unknown User';\n    }\n\n    private function extractEmail(SocialiteUser $socialUser, string $provider): string\n    {\n        return $socialUser->getEmail()\n            ?? sprintf('%s_%s@noemail.app', $provider, $socialUser->getId());\n    }\n\n    private function parseProviderError(string $exceptionMessage, string $provider): string\n    {\n        $errorPatterns = [\n            'invalid_request' => 'Invalid authentication request. Please try again.',\n            'access_denied' => 'Access was denied. Please authorize the application to continue.',\n        ];\n\n        foreach ($errorPatterns as $pattern => $message) {\n            if (str_contains($exceptionMessage, $pattern)) {\n                return $message;\n            }\n        }\n\n        return sprintf('Failed to authenticate with %s.', ucfirst($provider));\n    }\n\n    private function handleError(string $message): RedirectResponse\n    {\n        Notification::make()\n            ->title('Authentication Failed')\n            ->body($message)\n            ->danger()\n            ->persistent()\n            ->send();\n\n        return to_route('login')\n            ->withErrors(['login' => $message])\n            ->with('error', $message);\n    }\n\n    private function loginAndRedirect(User $user): RedirectResponse\n    {\n        Auth::login($user, remember: true);\n\n        return redirect()->intended(url()->getAppUrl());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/RedirectController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Enums\\SocialiteProvider;\nuse Laravel\\Socialite\\Facades\\Socialite;\nuse Laravel\\Socialite\\Two\\AbstractProvider;\nuse Symfony\\Component\\HttpFoundation\\RedirectResponse;\n\nfinal readonly class RedirectController\n{\n    public function __invoke(SocialiteProvider $provider): RedirectResponse\n    {\n        /** @var AbstractProvider $driver */\n        $driver = Socialite::driver($provider->value);\n\n        return $driver->redirect();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ContactController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\ContactRequest;\nuse App\\Mail\\NewContactSubmissionMail;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Support\\Facades\\Mail;\nuse Illuminate\\View\\View;\n\nfinal readonly class ContactController\n{\n    public function show(): View\n    {\n        return view('contact');\n    }\n\n    public function store(ContactRequest $request): RedirectResponse\n    {\n        /** @var array{name: string, email: string, company: ?string, message: string} $data */\n        $data = $request->validated();\n\n        Mail::to(config('relaticle.contact.email'))->send(new NewContactSubmissionMail($data));\n\n        return to_route('contact')->with('success', 'Thanks for reaching out! We\\'ll get back to you soon.');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\View\\View;\n\nfinal readonly class HomeController\n{\n    public function __invoke(): View\n    {\n        return view('home.index');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/PrivacyPolicyController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\View;\nuse Laravel\\Jetstream\\Jetstream;\n\nfinal readonly class PrivacyPolicyController\n{\n    public function __invoke(): View\n    {\n        $policyFile = Jetstream::localizedMarkdownPath('policy.md');\n\n        return view('policy', [\n            'policy' => Str::markdown(file_get_contents($policyFile) ?: ''),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/TermsOfServiceController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\View;\nuse Laravel\\Jetstream\\Jetstream;\n\nfinal readonly class TermsOfServiceController\n{\n    public function __invoke(): View\n    {\n        $termsFile = Jetstream::localizedMarkdownPath('terms.md');\n\n        return view('terms', [\n            'terms' => Str::markdown(file_get_contents($termsFile) ?: ''),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/ApplyTenantScopes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Closure;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Http\\Request;\n\nfinal readonly class ApplyTenantScopes\n{\n    public function handle(Request $request, Closure $next): mixed\n    {\n        $tenantId = Filament::getTenant()->getKey();\n\n        User::addGlobalScope(\n            filament()->getTenancyScopeName(),\n            fn (Builder $query) => $query\n                ->whereHas('teams', fn (Builder $query) => $query->where('teams.id', $tenantId))\n                ->orWhereHas('ownedTeams', fn (Builder $query) => $query->where('teams.id', $tenantId))\n        );\n\n        Company::addGlobalScope(new TeamScope);\n        People::addGlobalScope(new TeamScope);\n        Opportunity::addGlobalScope(new TeamScope);\n        Task::addGlobalScope(new TeamScope);\n        Note::addGlobalScope(new TeamScope);\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/EnsureTokenHasAbility.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Models\\PersonalAccessToken;\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Laravel\\Sanctum\\Exceptions\\MissingAbilityException;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nfinal readonly class EnsureTokenHasAbility\n{\n    /**\n     * @throws MissingAbilityException\n     */\n    public function handle(Request $request, Closure $next): Response\n    {\n        $user = $request->user();\n        $token = $user?->currentAccessToken();\n\n        // First-party SPA/web requests (via Sanctum session auth) don't use PersonalAccessToken.\n        // These requests bypass ability checks intentionally -- authorization is handled by policies.\n        if (! $token instanceof PersonalAccessToken || ! $token->getKey()) {\n            return $next($request);\n        }\n\n        $ability = $this->resolveAbility($request->method());\n\n        throw_unless($token->can($ability), MissingAbilityException::class, [$ability]);\n\n        return $next($request);\n    }\n\n    private function resolveAbility(string $method): string\n    {\n        return match ($method) {\n            'POST' => 'create',\n            'PUT', 'PATCH' => 'update',\n            'DELETE' => 'delete',\n            default => 'read',\n        };\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/ForceJsonResponse.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nfinal readonly class ForceJsonResponse\n{\n    public function handle(Request $request, Closure $next): Response\n    {\n        $request->headers->set('Accept', 'application/json');\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/SetApiTeamContext.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\n/**\n * Sets the team context for API/MCP requests using the token's team_id,\n * X-Team-Id header, or user's current team as fallback.\n *\n * WARNING: Not Octane-safe. This middleware uses addGlobalScope() on static\n * model state and clearBootedModels() in terminate(). Under Octane, if\n * terminate() fails to run, scopes from the previous request leak into the\n * next request — potentially exposing cross-tenant data. The auth guard state\n * (setUser/forgetUser) has the same leakage risk. Safe under FPM only.\n */\nfinal readonly class SetApiTeamContext\n{\n    /** @var list<class-string<Model>> */\n    private const array SCOPED_MODELS = [\n        User::class,\n        Company::class,\n        People::class,\n        Opportunity::class,\n        Task::class,\n        Note::class,\n    ];\n\n    public function handle(Request $request, Closure $next): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $team = $this->resolveTeam($request, $user);\n\n        if (! $team instanceof Team) {\n            return response()->json(['message' => 'No team found.'], 403);\n        }\n\n        if (! $user->belongsToTeam($team)) {\n            return response()->json(['message' => 'You do not belong to this team.'], 403);\n        }\n\n        // Set team in memory only — do NOT call switchTeam() which persists\n        // current_team_id to the database, corrupting the web panel's team state\n        // when API calls target a different team than the active web session.\n        $user->forceFill(['current_team_id' => $team->getKey()]);\n        $user->setRelation('currentTeam', $team);\n\n        TenantContextService::setTenantId($team->getKey());\n\n        // Override to web guard because Filament policies, observers, and the TeamScope\n        // global scope all check auth('web')->user(). Without this, API requests through\n        // Sanctum would not be recognized by the existing authorization layer.\n        auth()->guard('web')->setUser($user);\n        auth()->shouldUse('web');\n\n        $this->applyTenantScopes($team);\n\n        return $next($request);\n    }\n\n    public function terminate(): void\n    {\n        auth()->guard('web')->forgetUser();\n        TenantContextService::setTenantId(null);\n        foreach (self::SCOPED_MODELS as $model) {\n            $model::clearBootedModels();\n        }\n    }\n\n    private function resolveTeam(Request $request, User $user): ?Team\n    {\n        $token = $user->currentAccessToken();\n\n        if ($token instanceof PersonalAccessToken && is_string($token->team_id)) {\n            return Team::query()->find($token->team_id);\n        }\n\n        $teamId = $request->header('X-Team-Id');\n\n        if (is_string($teamId) && Str::isUlid($teamId)) {\n            return Team::query()->find($teamId);\n        }\n\n        return $user->currentTeam;\n    }\n\n    private function applyTenantScopes(Team $team): void\n    {\n        $tenantId = $team->getKey();\n\n        User::addGlobalScope(\n            'tenant',\n            fn (Builder $query) => $query->where(function (Builder $q) use ($tenantId): void {\n                $q->whereIn('users.id', DB::table('team_user')->where('team_id', $tenantId)->select('user_id'))\n                    ->orWhere('users.id', DB::table('teams')->where('id', $tenantId)->select('user_id'));\n            })\n        );\n\n        Company::addGlobalScope(new TeamScope);\n        People::addGlobalScope(new TeamScope);\n        Opportunity::addGlobalScope(new TeamScope);\n        Task::addGlobalScope(new TeamScope);\n        Note::addGlobalScope(new TeamScope);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/SubdomainRootResponse.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\nfinal readonly class SubdomainRootResponse\n{\n    public function handle(Request $request, Closure $next): Response\n    {\n        if ($request->path() !== '/') {\n            return $next($request);\n        }\n\n        $host = $request->getHost();\n\n        if ($host === config('app.api_domain')) {\n            return new JsonResponse([\n                'name' => 'Relaticle API',\n                'version' => 'v1',\n                'docs' => url('/docs/api'),\n            ]);\n        }\n\n        if ($host === config('app.mcp_domain')) {\n            return new JsonResponse([\n                'name' => 'Relaticle MCP Server',\n                'version' => '1.0.0',\n                'docs' => url('/docs/mcp'),\n            ]);\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/ValidateSignature.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routing\\Exceptions\\InvalidSignatureException;\nuse Illuminate\\Routing\\Middleware\\ValidateSignature as BaseValidateSignature;\nuse Illuminate\\Support\\Facades\\URL;\nuse Symfony\\Component\\HttpFoundation\\Response;\n\n/**\n * Signed URL middleware with percent-encoding normalization.\n *\n * Email providers (Postmark, SendGrid, Mailgun) may decode percent-encoded\n * characters in URLs during HTML processing (e.g., %40 → @). Since the\n * signature was computed against the encoded form, verification fails.\n *\n * Delegates to Laravel's built-in middleware first, then falls back to\n * re-encoding query values before comparing.\n *\n * @see https://github.com/laravel/framework/issues/42979\n */\nfinal readonly class ValidateSignature\n{\n    public function __construct(\n        private BaseValidateSignature $base,\n    ) {}\n\n    /** @param  string  ...$args */\n    public function handle(Request $request, Closure $next, mixed ...$args): Response\n    {\n        try {\n            return $this->base->handle($request, $next, ...$args);\n        } catch (InvalidSignatureException) {\n            if ($this->hasValidNormalizedSignature($request, array_values($args))) {\n                return $next($request);\n            }\n\n            throw new InvalidSignatureException;\n        }\n    }\n\n    /**\n     * Re-encode query values to match the percent-encoding used during signing,\n     * then verify the signature against the normalized URL.\n     *\n     * @param  array<int, string>  $args\n     */\n    private function hasValidNormalizedSignature(Request $request, array $args): bool\n    {\n        $relative = isset($args[0]) && $args[0] === 'relative';\n        $absolute = ! $relative;\n        $url = $absolute ? $request->url() : '/'.$request->path();\n\n        $rawQuery = (string) $request->server->get('QUERY_STRING');\n\n        if ($rawQuery === '') {\n            return false;\n        }\n\n        $normalized = [];\n\n        foreach (explode('&', $rawQuery) as $part) {\n            $equalsPos = strpos($part, '=');\n\n            [$key, $value] = $equalsPos !== false\n                ? [substr($part, 0, $equalsPos), substr($part, $equalsPos + 1)]\n                : [$part, ''];\n\n            if ($key === 'signature') {\n                continue;\n            }\n\n            $normalized[] = $key.'='.rawurlencode(rawurldecode($value));\n        }\n\n        $original = rtrim(\"{$url}?\".implode('&', $normalized), '?');\n\n        $keys = [config('app.key'), ...config('app.previous_keys', [])];\n        $signature = (string) $request->query('signature', '');\n\n        $hasCorrectSignature = array_any(\n            $keys,\n            fn (string $key): bool => hash_equals(hash_hmac('sha256', $original, $key), $signature),\n        );\n\n        return $hasCorrectSignature && URL::signatureHasNotExpired($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/IndexCustomFieldsRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class IndexCustomFieldsRequest extends FormRequest\n{\n    private const array ENTITY_TYPES = ['company', 'people', 'opportunity', 'task', 'note'];\n\n    private const int MAX_PER_PAGE = 100;\n\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        return [\n            'entity_type' => ['sometimes', 'string', Rule::in(self::ENTITY_TYPES)],\n            'per_page' => ['sometimes', 'integer', 'min:1', 'max:'.self::MAX_PER_PAGE],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/IndexRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nfinal class IndexRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        return [\n            'per_page' => ['sometimes', 'integer', 'min:1', 'max:100'],\n            'cursor' => ['sometimes', 'string'],\n            'page' => ['sometimes', 'integer', 'min:1'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/StoreCompanyRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nfinal class StoreCompanyRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'name' => ['required', 'string', 'max:255'],\n        ], new ValidCustomFields($teamId, 'company')->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/StoreNoteRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class StoreNoteRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'title' => ['required', 'string', 'max:255'],\n            'company_ids' => ['nullable', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['nullable', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['nullable', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n        ], new ValidCustomFields($teamId, 'note')->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/StoreOpportunityRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class StoreOpportunityRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'name' => ['required', 'string', 'max:255'],\n            'company_id' => ['nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'contact_id' => ['nullable', 'string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n        ], new ValidCustomFields($teamId, 'opportunity')->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/StorePeopleRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class StorePeopleRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'name' => ['required', 'string', 'max:255'],\n            'company_id' => ['nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n        ], new ValidCustomFields($teamId, 'people')->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/StoreTaskRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class StoreTaskRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $team = $user->currentTeam;\n        $teamId = $team->getKey();\n        $teamMemberIds = $team->users()->pluck('users.id')->push($team->user_id)->unique()->all();\n\n        return array_merge([\n            'title' => ['required', 'string', 'max:255'],\n            'company_ids' => ['nullable', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['nullable', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['nullable', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n            'assignee_ids' => ['nullable', 'array'],\n            'assignee_ids.*' => ['string', Rule::in($teamMemberIds)],\n        ], new ValidCustomFields($teamId, 'task')->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/UpdateCompanyRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nfinal class UpdateCompanyRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'name' => ['sometimes', 'required', 'string', 'max:255'],\n        ], new ValidCustomFields($teamId, 'company', isUpdate: true)->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/UpdateNoteRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class UpdateNoteRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'title' => ['sometimes', 'required', 'string', 'max:255'],\n            'company_ids' => ['nullable', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['nullable', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['nullable', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n        ], new ValidCustomFields($teamId, 'note', isUpdate: true)->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/UpdateOpportunityRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class UpdateOpportunityRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'name' => ['sometimes', 'required', 'string', 'max:255'],\n            'company_id' => ['nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'contact_id' => ['nullable', 'string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n        ], new ValidCustomFields($teamId, 'opportunity', isUpdate: true)->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/UpdatePeopleRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class UpdatePeopleRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $teamId = $user->currentTeam->getKey();\n\n        return array_merge([\n            'name' => ['sometimes', 'required', 'string', 'max:255'],\n            'company_id' => ['nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n        ], new ValidCustomFields($teamId, 'people', isUpdate: true)->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/Api/V1/UpdateTaskRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests\\Api\\V1;\n\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nfinal class UpdateTaskRequest extends FormRequest\n{\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    public function rules(): array\n    {\n        /** @var User $user */\n        $user = $this->user();\n        $team = $user->currentTeam;\n        $teamId = $team->getKey();\n        $teamMemberIds = $team->users()->pluck('users.id')->push($team->user_id)->unique()->all();\n\n        return array_merge([\n            'title' => ['sometimes', 'required', 'string', 'max:255'],\n            'company_ids' => ['nullable', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['nullable', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['nullable', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n            'assignee_ids' => ['nullable', 'array'],\n            'assignee_ids.*' => ['string', Rule::in($teamMemberIds)],\n        ], new ValidCustomFields($teamId, 'task', isUpdate: true)->toRules($this->input('custom_fields')));\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ContactRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse RyanChandler\\LaravelCloudflareTurnstile\\Rules\\Turnstile;\n\nfinal class ContactRequest extends FormRequest\n{\n    /** @return array<string, array<int, ValidationRule|string>> */\n    public function rules(): array\n    {\n        return [\n            'name' => ['required', 'string', 'max:255'],\n            'email' => ['required', 'email:rfc,dns', 'max:255'],\n            'company' => ['nullable', 'string', 'max:255'],\n            'message' => ['required', 'string', 'min:20', 'max:5000'],\n            'cf-turnstile-response' => ['required', new Turnstile],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/CompanyResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Http\\Resources\\V1\\Concerns\\FormatsCustomFields;\nuse App\\Models\\Company;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\n/**\n * @mixin Company\n */\nfinal class CompanyResource extends JsonApiResource\n{\n    use FormatsCustomFields;\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        return [\n            'name' => $this->name,\n            'creation_source' => $this->creation_source,\n            'created_at' => $this->created_at,\n            'updated_at' => $this->updated_at,\n            'custom_fields' => $this->formatCustomFields($this->resource),\n            'people_count' => $this->whenHas('people_count'),\n            'opportunities_count' => $this->whenHas('opportunities_count'),\n            'tasks_count' => $this->whenHas('tasks_count'),\n            'notes_count' => $this->whenHas('notes_count'),\n        ];\n    }\n\n    /**\n     * @return array<string, class-string<JsonApiResource>>\n     */\n    public function toRelationships(Request $request): array\n    {\n        return [\n            'creator' => UserResource::class,\n            'accountOwner' => UserResource::class,\n            'people' => PeopleResource::class,\n            'opportunities' => OpportunityResource::class,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/Concerns/FormatsCustomFields.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\CustomFields\\Models\\CustomField;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\n\ntrait FormatsCustomFields\n{\n    protected function formatCustomFields(Model $record): \\stdClass\n    {\n        if (! $record->relationLoaded('customFieldValues')) {\n            return new \\stdClass;\n        }\n\n        $result = $record->getRelation('customFieldValues')\n            /** @phpstan-ignore notIdentical.alwaysTrue (orphaned values can exist when a custom field is deleted) */\n            ->filter(fn (CustomFieldValue $fieldValue): bool => $fieldValue->customField !== null)\n            ->mapWithKeys(fn (CustomFieldValue $fieldValue): array => [\n                $fieldValue->customField->code => $this->resolveFieldValue($fieldValue),\n            ])\n            ->all();\n\n        return (object) $result;\n    }\n\n    private function resolveFieldValue(CustomFieldValue $fieldValue): mixed\n    {\n        $customField = $fieldValue->customField;\n        $rawValue = $fieldValue->getValue();\n\n        if (! $customField->typeData->dataType->isChoiceField()) {\n            return $rawValue;\n        }\n\n        if ($customField->typeData->dataType->isMultiChoiceField()) {\n            return $this->resolveMultiChoiceValue($customField, $rawValue);\n        }\n\n        return $this->resolveSingleChoiceValue($customField, $rawValue);\n    }\n\n    /**\n     * @return array{id: string, label: string}|null\n     */\n    private function resolveSingleChoiceValue(CustomField $customField, mixed $rawValue): ?array\n    {\n        if ($rawValue === null) {\n            return null;\n        }\n\n        $option = $customField->options->firstWhere('id', $rawValue);\n\n        return [\n            'id' => (string) $rawValue,\n            'label' => $option !== null ? $option->name : (string) $rawValue,\n        ];\n    }\n\n    /**\n     * @return array<int, array{id: string, label: string}>\n     */\n    private function resolveMultiChoiceValue(CustomField $customField, mixed $rawValue): array\n    {\n        $values = $rawValue instanceof Collection ? $rawValue->all() : (array) ($rawValue ?? []);\n\n        return collect($values)\n            ->filter(fn (mixed $value): bool => is_string($value) || is_numeric($value))\n            ->map(function (mixed $optionId) use ($customField): array {\n                $stringId = (string) $optionId;\n                $option = $customField->options->firstWhere('id', $optionId);\n\n                return [\n                    'id' => $stringId,\n                    'label' => $option !== null ? $option->name : $stringId,\n                ];\n            })\n            ->values()\n            ->all();\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/CustomFieldResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldOption;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\nuse Illuminate\\Support\\Carbon;\nuse Relaticle\\CustomFields\\Services\\ValidationService;\n\n/**\n * @mixin CustomField\n *\n * @property Carbon|null $created_at\n * @property Carbon|null $updated_at\n */\nfinal class CustomFieldResource extends JsonApiResource\n{\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        $validationService = resolve(ValidationService::class);\n\n        return [\n            'code' => $this->code,\n            'name' => $this->name,\n            'type' => $this->type,\n            'entity_type' => $this->entity_type,\n            'required' => $validationService->isRequired($this->resource),\n            'options' => $this->whenLoaded('options', fn () => $this->options->map(fn (CustomFieldOption $option): array => [\n                'label' => $option->name,\n                'value' => $option->id,\n            ])->all()),\n            'created_at' => $this->created_at,\n            'updated_at' => $this->updated_at,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/NoteResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Http\\Resources\\V1\\Concerns\\FormatsCustomFields;\nuse App\\Models\\Note;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\n/**\n * @mixin Note\n */\nfinal class NoteResource extends JsonApiResource\n{\n    use FormatsCustomFields;\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        return [\n            'title' => $this->title,\n            'creation_source' => $this->creation_source,\n            'created_at' => $this->created_at,\n            'updated_at' => $this->updated_at,\n            'custom_fields' => $this->formatCustomFields($this->resource),\n            'companies_count' => $this->whenHas('companies_count'),\n            'people_count' => $this->whenHas('people_count'),\n            'opportunities_count' => $this->whenHas('opportunities_count'),\n        ];\n    }\n\n    /**\n     * @return array<string, class-string<JsonApiResource>>\n     */\n    public function toRelationships(Request $request): array\n    {\n        return [\n            'creator' => UserResource::class,\n            'companies' => CompanyResource::class,\n            'people' => PeopleResource::class,\n            'opportunities' => OpportunityResource::class,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/OpportunityResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Http\\Resources\\V1\\Concerns\\FormatsCustomFields;\nuse App\\Models\\Opportunity;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\n/**\n * @mixin Opportunity\n */\nfinal class OpportunityResource extends JsonApiResource\n{\n    use FormatsCustomFields;\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        return [\n            'name' => $this->name,\n            'company_id' => $this->company_id,\n            'contact_id' => $this->contact_id,\n            'creation_source' => $this->creation_source,\n            'created_at' => $this->created_at,\n            'updated_at' => $this->updated_at,\n            'custom_fields' => $this->formatCustomFields($this->resource),\n            'tasks_count' => $this->whenHas('tasks_count'),\n            'notes_count' => $this->whenHas('notes_count'),\n        ];\n    }\n\n    /**\n     * @return array<string, class-string<JsonApiResource>>\n     */\n    public function toRelationships(Request $request): array\n    {\n        return [\n            'creator' => UserResource::class,\n            'company' => CompanyResource::class,\n            'contact' => PeopleResource::class,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/PeopleResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Http\\Resources\\V1\\Concerns\\FormatsCustomFields;\nuse App\\Models\\People;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\n/**\n * @mixin People\n */\nfinal class PeopleResource extends JsonApiResource\n{\n    use FormatsCustomFields;\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        return [\n            'name' => $this->name,\n            'company_id' => $this->company_id,\n            'creation_source' => $this->creation_source,\n            'created_at' => $this->created_at,\n            'updated_at' => $this->updated_at,\n            'custom_fields' => $this->formatCustomFields($this->resource),\n            'tasks_count' => $this->whenHas('tasks_count'),\n            'notes_count' => $this->whenHas('notes_count'),\n        ];\n    }\n\n    /**\n     * @return array<string, class-string<JsonApiResource>>\n     */\n    public function toRelationships(Request $request): array\n    {\n        return [\n            'creator' => UserResource::class,\n            'company' => CompanyResource::class,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/TaskResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Http\\Resources\\V1\\Concerns\\FormatsCustomFields;\nuse App\\Models\\Task;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\n/**\n * @mixin Task\n */\nfinal class TaskResource extends JsonApiResource\n{\n    use FormatsCustomFields;\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        return [\n            'title' => $this->title,\n            'creation_source' => $this->creation_source,\n            'created_at' => $this->created_at,\n            'updated_at' => $this->updated_at,\n            'custom_fields' => $this->formatCustomFields($this->resource),\n            'assignees_count' => $this->whenHas('assignees_count'),\n            'companies_count' => $this->whenHas('companies_count'),\n            'people_count' => $this->whenHas('people_count'),\n            'opportunities_count' => $this->whenHas('opportunities_count'),\n        ];\n    }\n\n    /**\n     * @return array<string, class-string<JsonApiResource>>\n     */\n    public function toRelationships(Request $request): array\n    {\n        return [\n            'creator' => UserResource::class,\n            'assignees' => UserResource::class,\n            'companies' => CompanyResource::class,\n            'people' => PeopleResource::class,\n            'opportunities' => OpportunityResource::class,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Resources/V1/UserResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Resources\\V1;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\n/**\n * @mixin User\n */\nfinal class UserResource extends JsonApiResource\n{\n    /**\n     * @return array<string, mixed>\n     */\n    public function toAttributes(Request $request): array\n    {\n        return [\n            'name' => $this->name,\n            'email' => $this->email,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Responses/LoginResponse.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Responses;\n\nuse App\\Filament\\Resources\\CompanyResource;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Http\\RedirectResponse;\nuse Livewire\\Features\\SupportRedirects\\Redirector;\n\nfinal readonly class LoginResponse implements \\Filament\\Auth\\Http\\Responses\\Contracts\\LoginResponse\n{\n    /** @phpstan-ignore-next-line return.unusedType */\n    public function toResponse($request): RedirectResponse|Redirector // @pest-ignore-type\n    {\n        $panel = Filament::getCurrentPanel();\n\n        // For system admin panel, use default Filament behavior\n        if ($panel?->getId() === 'sysadmin') {\n            return redirect()->intended($panel->getUrl());\n        }\n\n        // For app panel, redirect to companies with tenant\n        $user = $request->user('web');\n        if ($user && $user->currentTeam) {\n            return redirect()->intended(CompanyResource::getUrl('index', ['tenant' => $user->currentTeam]));\n        }\n\n        return redirect()->intended(Filament::getUrl());\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Email/CreateSubscriberJob.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Jobs\\Email;\n\nuse App\\Data\\SubscriberData;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Spatie\\MailcoachSdk\\Facades\\Mailcoach;\nuse Throwable;\n\nfinal class CreateSubscriberJob implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    public function __construct(private readonly SubscriberData $data) {}\n\n    /**\n     * @throws Throwable\n     */\n    public function handle(): void\n    {\n        retry(10, function (): void {\n            Mailcoach::createSubscriber(config('mailcoach-sdk.subscribers_list_id'), $this->data->toArray());\n        }, fn (int $attempt): int => $attempt * 100 * random_int(1, 15));\n    }\n}\n"
  },
  {
    "path": "app/Jobs/Email/UpdateSubscriberJob.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Jobs\\Email;\n\nuse App\\Data\\SubscriberData;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\Middleware\\ThrottlesExceptionsWithRedis;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Facades\\Log;\nuse Spatie\\MailcoachSdk\\Facades\\Mailcoach;\nuse Spatie\\MailcoachSdk\\Resources\\Subscriber;\n\nfinal class UpdateSubscriberJob implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    public function __construct(private readonly SubscriberData $data) {}\n\n    public function handle(): void\n    {\n        $email = $this->data->email;\n        $subscriber = Mailcoach::findByEmail(config('mailcoach-sdk.subscribers_list_id'), $this->data->email);\n\n        if ($subscriber instanceof Subscriber) {\n            $data = $this->data->toArray();\n            $data['tags'] = collect($subscriber->tags)->merge($this->data->tags)->unique()->toArray();\n\n            Mailcoach::updateSubscriber($subscriber->uuid, array_filter($data));\n        } else {\n            Log::channel('email_subscriptions_channel')->info(\"Subscriber with email '$email' was not found!\");\n        }\n    }\n\n    /**\n     * The unique ID of the job.\n     */\n    public function uniqueId(): string\n    {\n        return $this->data->email;\n    }\n\n    /**\n     * Get the middleware the job should pass through.\n     *\n     * @return array<ThrottlesExceptionsWithRedis>\n     */\n    public function middleware(): array\n    {\n        return [new ThrottlesExceptionsWithRedis(1, 1)->backoff(1)->report()];\n    }\n\n    /**\n     * Determine the time at which the job should timeout.\n     */\n    public function retryUntil(): \\DateTime\n    {\n        return now()->addHour();\n    }\n}\n"
  },
  {
    "path": "app/Jobs/FetchFaviconForCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Jobs;\n\nuse App\\Enums\\CustomFields\\CompanyField;\nuse App\\Models\\Company;\nuse AshAllenDesign\\FaviconFetcher\\Facades\\Favicon;\nuse Exception;\nuse Illuminate\\Contracts\\Broadcasting\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Foundation\\Queue\\Queueable;\nuse Illuminate\\Support\\Str;\n\nfinal class FetchFaviconForCompany implements ShouldBeUnique, ShouldQueue\n{\n    use Dispatchable;\n    use Queueable;\n\n    public bool $deleteWhenMissingModels = true;\n\n    public function __construct(public readonly Company $company) {}\n\n    public function handle(): void\n    {\n        try {\n            $customFieldDomain = $this->company->customFields()\n                ->whereBelongsTo($this->company->team)\n                ->where('code', CompanyField::DOMAINS->value)\n                ->first();\n\n            $domains = $this->company->getCustomFieldValue($customFieldDomain);\n            $domainName = is_array($domains) ? ($domains[0] ?? null) : $domains;\n\n            if ($domainName === null || $domainName === '') {\n                return;\n            }\n\n            $domainName = Str::start($domainName, 'https://');\n\n            $favicon = Favicon::driver('high-quality')->fetch($domainName);\n            $url = $favicon?->getFaviconUrl();\n\n            if ($url === null) {\n                return;\n            }\n\n            $path = parse_url($url, PHP_URL_PATH);\n            $extension = $path ? pathinfo($path, PATHINFO_EXTENSION) : '';\n\n            $filename = match ($extension) {\n                'svg' => 'logo.svg',\n                'webp' => 'logo.webp',\n                'jpg', 'jpeg' => 'logo.jpg',\n                default => 'logo.png',\n            };\n\n            $logo = $this->company\n                ->addMediaFromUrl($url)\n                ->usingFileName($filename)\n                ->usingName('company_logo')\n                ->withCustomProperties([\n                    'domain' => $domainName,\n                    'original_size' => $favicon->getIconSize(),\n                    'icon_type' => $favicon->getIconType(),\n                    'fetched_at' => now()->toIso8601String(),\n                ])\n                ->toMediaCollection('logo');\n\n            $this->company->clearMediaCollectionExcept('logo', $logo);\n        } catch (Exception $exception) {\n            report($exception);\n        }\n    }\n\n    public function uniqueId(): string\n    {\n        return (string) $this->company->getKey();\n    }\n}\n"
  },
  {
    "path": "app/Listeners/CreateTeamCustomFields.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Listeners;\n\nuse App\\Enums\\CustomFields\\CompanyField as CompanyCustomField;\nuse App\\Enums\\CustomFields\\NoteField as NoteCustomField;\nuse App\\Enums\\CustomFields\\OpportunityField as OpportunityCustomField;\nuse App\\Enums\\CustomFields\\PeopleField as PeopleCustomField;\nuse App\\Enums\\CustomFields\\TaskField as TaskCustomField;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Support\\Facades\\DB;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Relaticle\\CustomFields\\Contracts\\CustomsFieldsMigrators;\nuse Relaticle\\CustomFields\\Data\\CustomFieldData;\nuse Relaticle\\CustomFields\\Data\\CustomFieldOptionSettingsData;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSectionData;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Enums\\CustomFieldSectionType;\nuse Relaticle\\CustomFields\\Models\\CustomField;\nuse Relaticle\\CustomFields\\Models\\CustomFieldOption;\nuse Relaticle\\OnboardSeed\\OnboardSeeder;\n\nfinal readonly class CreateTeamCustomFields\n{\n    /** @var array<class-string, class-string> */\n    private const array MODEL_ENUM_MAP = [\n        Company::class => CompanyCustomField::class,\n        Opportunity::class => OpportunityCustomField::class,\n        Note::class => NoteCustomField::class,\n        People::class => PeopleCustomField::class,\n        Task::class => TaskCustomField::class,\n    ];\n\n    public function __construct(\n        private CustomsFieldsMigrators $migrator,\n        private OnboardSeeder $onboardSeeder,\n    ) {}\n\n    public function handle(TeamCreated $event): void\n    {\n        $team = $event->team;\n\n        $this->migrator->setTenantId($team->id);\n\n        DB::transaction(function (): void {\n            foreach (self::MODEL_ENUM_MAP as $modelClass => $enumClass) {\n                foreach ($enumClass::cases() as $enum) {\n                    $this->createCustomField($modelClass, $enum);\n                }\n            }\n        });\n\n        if ($team->isPersonalTeam()) {\n            $team->loadMissing('owner');\n\n            /** @var Authenticatable $owner */\n            $owner = $team->owner;\n            $this->onboardSeeder->run($owner, $team);\n        }\n    }\n\n    /** @param class-string $model */\n    private function createCustomField(string $model, CompanyCustomField|OpportunityCustomField|PeopleCustomField|TaskCustomField|NoteCustomField $enum): void\n    {\n        $fieldData = new CustomFieldData(\n            name: $enum->getDisplayName(),\n            code: $enum->value,\n            type: $enum->getFieldType(),\n            section: new CustomFieldSectionData(\n                name: 'General',\n                code: 'general',\n                type: CustomFieldSectionType::HEADLESS\n            ),\n            systemDefined: $enum->isSystemDefined(),\n            width: $enum->getWidth(),\n            settings: new CustomFieldSettingsData(\n                list_toggleable_hidden: $enum->isListToggleableHidden(),\n                enable_option_colors: $enum->hasColorOptions(),\n                allow_multiple: $enum->allowsMultipleValues(),\n                max_values: $enum->getMaxValues(),\n                unique_per_entity_type: $enum->isUniquePerEntityType(),\n            )\n        );\n\n        $migrator = $this->migrator->new(\n            model: $model,\n            fieldData: $fieldData\n        );\n\n        $options = $enum->getOptions();\n        if ($options !== null) {\n            $migrator->options($options);\n        }\n\n        $customField = $migrator->create();\n\n        $this->applyColorsToOptions($customField, $enum);\n    }\n\n    private function applyColorsToOptions(CustomField $customField, CompanyCustomField|OpportunityCustomField|PeopleCustomField|TaskCustomField|NoteCustomField $enum): void\n    {\n        $colorMapping = $enum->getOptionColors();\n        if ($colorMapping === null) {\n            return;\n        }\n\n        $options = $customField->options()->withoutGlobalScopes()->get();\n\n        $updates = $options\n            ->filter(fn (CustomFieldOption $option): bool => isset($colorMapping[$option->name]))\n            ->map(fn (CustomFieldOption $option): array => [\n                'id' => $option->getKey(),\n                'settings' => json_encode(new CustomFieldOptionSettingsData(color: $colorMapping[$option->name])),\n            ])\n            ->values()\n            ->all();\n\n        if ($updates === []) {\n            return;\n        }\n\n        $table = $customField->options()->getModel()->getTable();\n        $ids = array_column($updates, 'id');\n        $cases = [];\n        $caseBindings = [];\n\n        foreach ($updates as $item) {\n            $cases[] = 'WHEN id = ? THEN ?';\n            $caseBindings[] = $item['id'];\n            $caseBindings[] = $item['settings'];\n        }\n\n        $casesSql = implode(' ', $cases);\n        $placeholders = implode(',', array_fill(0, count($ids), '?'));\n\n        $caseExpr = \"(CASE {$casesSql} END)\";\n        if (DB::getDriverName() === 'pgsql') {\n            $caseExpr .= '::json';\n        }\n\n        DB::update(\n            \"UPDATE \\\"{$table}\\\" SET \\\"settings\\\" = {$caseExpr}, \\\"updated_at\\\" = ? WHERE \\\"id\\\" IN ({$placeholders})\",\n            [...$caseBindings, now(), ...$ids],\n        );\n    }\n}\n"
  },
  {
    "path": "app/Listeners/Email/NewSubscriberListener.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Listeners\\Email;\n\nuse App\\Data\\SubscriberData;\nuse App\\Enums\\SubscriberTagEnum;\nuse App\\Jobs\\Email\\CreateSubscriberJob;\nuse App\\Jobs\\Email\\UpdateSubscriberJob;\nuse App\\Models\\User;\nuse Exception;\nuse Illuminate\\Auth\\Events\\Verified;\nuse Illuminate\\Contracts\\Events\\ShouldHandleEventsAfterCommit;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Spatie\\MailcoachSdk\\Facades\\Mailcoach;\nuse Throwable;\n\nfinal class NewSubscriberListener implements ShouldHandleEventsAfterCommit, ShouldQueue\n{\n    use InteractsWithQueue;\n\n    /**\n     * @throws Exception\n     * @throws Throwable\n     */\n    public function handle(Verified $event): void\n    {\n        /** @var User $user */\n        $user = $event->user;\n\n        if ($user->hasVerifiedEmail() && config('mailcoach-sdk.enabled_subscribers_sync', false)) {\n            $subscriber = retry(10, fn (): mixed => Mailcoach::findByEmail(config('mailcoach-sdk.subscribers_list_id'), $user->email), fn (int $attempt): int => $attempt * 100 * random_int(1, 15));\n\n            if ($subscriber) {\n                dispatch(new UpdateSubscriberJob(SubscriberData::from([\n                    'email' => $user->email,\n                    'tags' => [SubscriberTagEnum::VERIFIED->value],\n                ])));\n            }\n\n            dispatch(new CreateSubscriberJob(SubscriberData::from([\n                'email' => $user->email,\n                'first_name' => $user->name,\n                'last_name' => $user->name,\n                'tags' => [SubscriberTagEnum::VERIFIED->value],\n                'skip_confirmation' => true,\n            ])));\n        }\n    }\n}\n"
  },
  {
    "path": "app/Listeners/SwitchTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Listeners;\n\nuse App\\Models\\User;\nuse Filament\\Events\\TenantSet;\n\nfinal readonly class SwitchTeam\n{\n    /**\n     * Handle the event.\n     */\n    public function handle(TenantSet $event): void\n    {\n        $user = $event->getUser();\n        $team = $event->getTenant();\n\n        if ($user instanceof User) {\n            $user->switchTeam($team);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/AccessTokens/CreateAccessToken.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\AccessTokens;\n\nuse App\\Livewire\\BaseLivewireComponent;\nuse DanHarrin\\LivewireRateLimiting\\Exceptions\\TooManyRequestsException;\nuse Filament\\Actions\\Action;\nuse Filament\\Forms\\Components\\CheckboxList;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Enums\\Width;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\View\\View;\nuse Laravel\\Jetstream\\Jetstream;\nuse Laravel\\Sanctum\\NewAccessToken;\n\nfinal class CreateAccessToken extends BaseLivewireComponent\n{\n    /** @var array<string, mixed>|null */\n    public ?array $data = [];\n\n    public ?string $plainTextToken = null;\n\n    public function mount(): void\n    {\n        $this->form->fill([\n            'team_id' => $this->authUser()->currentTeam?->getKey(),\n            'permissions' => Jetstream::$defaultPermissions,\n        ]);\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema\n            ->schema([\n                Section::make(__('access-tokens.sections.create.title'))\n                    ->aside()\n                    ->description(\n                        __('access-tokens.sections.create.description'),\n                    )\n                    ->schema([\n                        TextInput::make('name')\n                            ->label('Token Name')\n                            ->required()\n                            ->maxLength(255)\n                            ->rules([\n                                Rule::unique('personal_access_tokens', 'name')\n                                    ->where(\n                                        'tokenable_type',\n                                        $this->authUser()->getMorphClass(),\n                                    )\n                                    ->where(\n                                        'tokenable_id',\n                                        $this->authUser()->getKey(),\n                                    ),\n                            ]),\n                        Select::make('team_id')\n                            ->label('Team')\n                            ->required()\n                            ->options(\n                                $this->authUser()->allTeams()->pluck('name', 'id'),\n                            ),\n                        Select::make('expiration')\n                            ->label('Expiration')\n                            ->required()\n                            ->placeholder('Select expiration...')\n                            ->options([\n                                '1' => '1 Day',\n                                '7' => '7 Days',\n                                '30' => '30 Days',\n                                '60' => '60 Days',\n                                '90' => '90 Days',\n                                '180' => '180 Days',\n                                '365' => '1 Year',\n                                '0' => 'No Expiration',\n                            ]),\n                        self::permissionsCheckboxList(),\n                        Actions::make([\n                            Action::make('create')\n                                ->label('Create')\n                                ->submit('createToken'),\n                        ]),\n                    ]),\n            ])\n            ->statePath('data');\n    }\n\n    public function showTokenAction(): Action\n    {\n        return Action::make('showToken')\n            ->modalHeading(__('access-tokens.modals.show_token.title'))\n            ->modalDescription(\n                __('access-tokens.modals.show_token.description'),\n            )\n            ->modalWidth(Width::Large)\n            ->modalSubmitAction(false)\n            ->modalCancelActionLabel('Close')\n            ->schema([\n                TextInput::make('plainTextToken')\n                    ->label('Token')\n                    ->default($this->plainTextToken ?? '')\n                    ->readOnly()\n                    ->suffixAction(\n                        Action::make('copyToken')\n                            ->icon('heroicon-o-clipboard')\n                            ->tooltip('Copy to clipboard')->alpineClickHandler(\"\n                                window.navigator.clipboard.writeText(\\$wire.plainTextToken);\n                                \\$tooltip('Copied!');\n                            \"),\n                    ),\n            ])\n            ->after(fn (): null => ($this->plainTextToken = null));\n    }\n\n    public function createToken(): void\n    {\n        try {\n            $this->rateLimit(5);\n        } catch (TooManyRequestsException $exception) {\n            $this->sendRateLimitedNotification($exception);\n\n            return;\n        }\n\n        $state = $this->form->getState();\n\n        $user = $this->authUser();\n        $teamId = $state['team_id'];\n\n        if ($user->allTeams()->doesntContain('id', $teamId)) {\n            $this->sendNotification(title: 'You do not belong to this team.', type: 'danger');\n\n            return;\n        }\n\n        $expiration = (int) $state['expiration'];\n        $expiresAt = $expiration > 0 ? now()->addDays($expiration) : null;\n\n        /** @var NewAccessToken $token */\n        $token = DB::transaction(function () use ($user, $state, $teamId, $expiresAt): NewAccessToken {\n            $token = $user->createToken(\n                $state['name'],\n                Jetstream::validPermissions($state['permissions'] ?? []),\n            );\n\n            // Sanctum's createToken() does not accept extra attributes, so we update after creation\n            $token->accessToken->fill([\n                'team_id' => $teamId,\n                'expires_at' => $expiresAt,\n            ])->save();\n\n            return $token;\n        });\n\n        $this->plainTextToken = explode('|', $token->plainTextToken, 2)[1];\n\n        $this->form->fill([\n            'team_id' => $user->currentTeam?->getKey(),\n            'permissions' => Jetstream::$defaultPermissions,\n        ]);\n\n        $this->dispatch('tokenCreated');\n\n        $this->mountAction('showToken');\n    }\n\n    public static function permissionsCheckboxList(): CheckboxList\n    {\n        return CheckboxList::make('permissions')\n            ->label('Permissions')\n            ->required()\n            ->options(\n                collect(Jetstream::$permissions)\n                    ->mapWithKeys(\n                        fn (string $permission): array => [\n                            $permission => ucfirst($permission),\n                        ],\n                    )\n                    ->all(),\n            )\n            ->columns(2);\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.access-tokens.create-access-token');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/AccessTokens/ManageAccessTokens.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\AccessTokens;\n\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\PersonalAccessToken;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Support\\Enums\\Width;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Concerns\\InteractsWithTable;\nuse Filament\\Tables\\Contracts\\HasTable;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\View\\View;\nuse Laravel\\Jetstream\\Jetstream;\nuse Livewire\\Attributes\\On;\n\nfinal class ManageAccessTokens extends BaseLivewireComponent implements HasTable\n{\n    use InteractsWithTable;\n\n    #[On('tokenCreated')]\n    public function refreshTokenList(): void\n    {\n        // Filament table auto-refreshes on Livewire re-render\n    }\n\n    public function table(Table $table): Table\n    {\n        $user = $this->authUser();\n\n        return $table\n            ->query(\n                fn (): Builder => PersonalAccessToken::query()\n                    ->with('team')\n                    ->where('tokenable_type', $user->getMorphClass())\n                    ->where('tokenable_id', $user->getKey()),\n            )\n            ->columns([\n                TextColumn::make('name')->label('Name')->searchable(),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->placeholder('—'),\n                TextColumn::make('abilities')\n                    ->label('Permissions')\n                    ->badge()\n                    ->formatStateUsing(\n                        fn (string $state): string => $state === '*'\n                            ? 'All'\n                            : ucfirst($state),\n                    ),\n                TextColumn::make('expires_at')\n                    ->label('Expires')\n                    ->date()\n                    ->placeholder('Never'),\n                TextColumn::make('last_used_at')\n                    ->label('Last Used')\n                    ->since()\n                    ->placeholder('Never'),\n                TextColumn::make('created_at')->label('Created')->since(),\n            ])\n            ->actions([\n                Action::make('permissions')\n                    ->label('Permissions')\n                    ->icon('heroicon-o-lock-closed')\n                    ->iconButton()\n                    ->tooltip('Edit Permissions')\n                    ->modalHeading(fn (PersonalAccessToken $record): string => \"Permissions: {$record->name}\")\n                    ->modalWidth(Width::Large)\n                    ->fillForm(\n                        fn (PersonalAccessToken $record): array => [\n                            'permissions' => $record->abilities,\n                        ],\n                    )\n                    ->schema([\n                        CreateAccessToken::permissionsCheckboxList(),\n                    ])\n                    ->action(function (\n                        PersonalAccessToken $record,\n                        array $data,\n                    ): void {\n                        $record\n                            ->forceFill([\n                                'abilities' => Jetstream::validPermissions(\n                                    $data['permissions'] ?? [],\n                                ),\n                            ])\n                            ->save();\n\n                        $this->sendNotification(\n                            title: __('access-tokens.notifications.permissions_updated'),\n                        );\n                    }),\n                DeleteAction::make()\n                    ->iconButton()\n                    ->after(\n                        fn () => $this->sendNotification(\n                            title: __('access-tokens.notifications.deleted'),\n                        ),\n                    ),\n            ])\n            ->emptyStateHeading(__('access-tokens.empty_state.heading'))\n            ->emptyStateDescription(__('access-tokens.empty_state.description'))\n            ->paginated(false);\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.access-tokens.manage-access-tokens');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Profile/DeleteAccount.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Profile;\n\nuse App\\Actions\\Jetstream\\DeleteTeam;\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\Team;\nuse Filament\\Actions\\Action;\nuse Filament\\Forms;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Routing\\Redirector;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Validation\\ValidationException;\nuse Illuminate\\View\\View;\n\nfinal class DeleteAccount extends BaseLivewireComponent\n{\n    public function form(Schema $schema): Schema\n    {\n        $hasPassword = $this->authUser()->hasPassword();\n\n        return $schema\n            ->schema([\n                Section::make(__('profile.sections.delete_account.title'))\n                    ->description(__('profile.sections.delete_account.description'))\n                    ->aside()\n                    ->schema([\n                        TextEntry::make('deleteAccountNotice')\n                            ->hiddenLabel()\n                            ->state(fn (): string|array => __('profile.sections.delete_account.notice')),\n                        Actions::make([\n                            Action::make('deleteAccount')\n                                ->label(__('profile.actions.delete_account'))\n                                ->color('danger')\n                                ->requiresConfirmation()\n                                ->modalHeading(__('profile.sections.delete_account.title'))\n                                ->modalDescription($hasPassword ? __('profile.modals.delete_account.notice') : __('profile.modals.delete_account.notice_no_password'))\n                                ->modalSubmitActionLabel(__('profile.actions.delete_account'))\n                                ->modalCancelAction(false)\n                                ->schema($hasPassword ? [\n                                    Forms\\Components\\TextInput::make('password')\n                                        ->password()\n                                        ->revealable()\n                                        ->label(__('profile.form.password.label'))\n                                        ->required()\n                                        ->currentPassword(),\n                                ] : [])\n                                ->action(fn (array $data): Redirector|RedirectResponse => $this->deleteAccount($data['password'] ?? null)),\n                        ]),\n                    ]),\n            ]);\n    }\n\n    /**\n     * Delete the current user.\n     *\n     * @throws ValidationException\n     */\n    public function deleteAccount(?string $password = null): Redirector|RedirectResponse\n    {\n        $user = $this->authUser();\n\n        if ($user->hasPassword() && ! Hash::check((string) $password, $user->password ?? '')) {\n            throw ValidationException::withMessages([\n                'password' => __('auth.password'),\n            ]);\n        }\n\n        // Logout before deleting to prevent SessionGuard::logout() from\n        // re-inserting the user when it updates the remember token.\n        filament()->auth()->logout();\n\n        DB::transaction(function () use ($user): void {\n            if (config('jetstream.features.teams', false)) {\n                $user->teams()->detach();\n\n                /** @var Collection<int, Team> $ownedTeams */\n                $ownedTeams = $user->ownedTeams;\n                $ownedTeams->each(function (Team $team): void {\n                    resolve(DeleteTeam::class)->delete($team);\n                });\n            }\n\n            $user->deleteProfilePhoto();\n            $user->tokens->each->delete();\n\n            $user->delete();\n        });\n\n        return redirect(filament()->getLoginUrl());\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.profile.delete-account');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Profile/LogoutOtherBrowserSessions.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Profile;\n\nuse App\\Livewire\\BaseLivewireComponent;\nuse Filament\\Actions\\Action;\nuse Filament\\Forms;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Date;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Validation\\ValidationException;\nuse Laravel\\Jetstream\\Agent;\n\nfinal class LogoutOtherBrowserSessions extends BaseLivewireComponent\n{\n    public function form(Schema $schema): Schema\n    {\n        $hasPassword = $this->authUser()->hasPassword();\n\n        return $schema\n            ->schema([\n                Section::make(__('profile.sections.browser_sessions.title'))\n                    ->description(__('profile.sections.browser_sessions.description'))\n                    ->aside()\n                    ->schema([\n                        Forms\\Components\\ViewField::make('browserSessions')\n                            ->hiddenLabel()\n                            ->view('components.browser-sessions')\n                            ->viewData(['sessions' => $this->browserSessions()]),\n                        Actions::make([\n                            Action::make('deleteBrowserSessions')\n                                ->label(__('profile.actions.log_out_other_browsers'))\n                                ->requiresConfirmation()\n                                ->modalHeading(__('profile.modals.log_out_other_browsers.title'))\n                                ->modalDescription($hasPassword ? __('profile.modals.log_out_other_browsers.description') : __('profile.modals.log_out_other_browsers.description_no_password'))\n                                ->modalSubmitActionLabel(__('profile.actions.log_out_other_browsers'))\n                                ->modalCancelAction(false)\n                                ->schema($hasPassword ? [\n                                    Forms\\Components\\TextInput::make('password')\n                                        ->password()\n                                        ->revealable()\n                                        ->label(__('profile.form.password.label'))\n                                        ->required()\n                                        ->currentPassword(),\n                                ] : [])\n                                ->action(\n                                    fn (array $data) => $this->logoutOtherBrowserSessions($data['password'] ?? null)\n                                ),\n                        ]),\n                    ]),\n            ]);\n    }\n\n    /**\n     * @throws ValidationException\n     */\n    public function logoutOtherBrowserSessions(?string $password): void\n    {\n        $user = $this->authUser();\n\n        if ($user->hasPassword() && ! Hash::check((string) $password, $user->password ?? '')) {\n            throw ValidationException::withMessages([\n                'password' => __('auth.password'),\n            ]);\n        }\n\n        if (config('session.driver') !== 'database') {\n            return;\n        }\n\n        if ($password !== null) {\n            auth(filament()->getAuthGuard())->logoutOtherDevices($password);\n        }\n\n        DB::connection(config('session.connection'))\n            ->table(config('session.table', 'sessions'))\n            ->where('user_id', filament()->auth()->user()->getAuthIdentifier())\n            ->where('id', '!=', request()->session()->getId())\n            ->delete();\n\n        request()\n            ->session()\n            ->put([\n                'password_hash_'.Auth::getDefaultDriver() => filament()->auth()->user()->getAuthPassword(),\n            ]);\n\n        $this->sendNotification(__('profile.notifications.logged_out_other_sessions.success'));\n    }\n\n    /**\n     * Get the current sessions.\n     *\n     * @return Collection<int, object{agent: Agent, ip_address: mixed, is_current_device: bool, last_active: string}>\n     */\n    public function browserSessions(): Collection\n    {\n        if (config('session.driver') !== 'database') {\n            return collect();\n        }\n\n        // @phpstan-ignore-next-line Collection type covariance issue\n        return DB::connection(config('session.connection'))->table(config('session.table', 'sessions'))\n            ->where('user_id', filament()->auth()->user()->getAuthIdentifier())\n            ->orderBy('last_activity', 'desc')\n            ->get()->map(function (\\stdClass $session): object {\n                $agent = tap(new Agent, function (Agent $agent) use ($session): void {\n                    $agent->setUserAgent($session->user_agent ?? '');\n                });\n\n                return (object) [\n                    'agent' => $agent,\n                    'ip_address' => $session->ip_address,\n                    'is_current_device' => $session->id === request()->session()->getId(),\n                    'last_active' => Date::createFromTimestamp($session->last_activity)->diffForHumans(),\n                ];\n            });\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.profile.logout-other-browser-sessions');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Profile/UpdatePassword.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Profile;\n\nuse App\\Livewire\\BaseLivewireComponent;\nuse DanHarrin\\LivewireRateLimiting\\Exceptions\\TooManyRequestsException;\nuse Filament\\Actions\\Action;\nuse Filament\\Facades\\Filament;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Components\\Utilities\\Get;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Validation\\Rules\\Password;\n\nfinal class UpdatePassword extends BaseLivewireComponent\n{\n    /** @var array<string, mixed>|null */\n    public ?array $data = [];\n\n    public function mount(): void\n    {\n        // Initialize empty form\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        $hasPassword = $this->authUser()->hasPassword();\n\n        return $schema\n            ->schema([\n                Section::make($hasPassword ? __('profile.sections.update_password.title') : __('profile.sections.set_password.title'))\n                    ->aside()\n                    ->description($hasPassword ? __('profile.sections.update_password.description') : __('profile.sections.set_password.description'))\n                    ->schema([\n                        TextInput::make('currentPassword')\n                            ->label(__('profile.form.current_password.label'))\n                            ->password()\n                            ->revealable(filament()->arePasswordsRevealable())\n                            ->required($hasPassword)\n                            ->autocomplete('current-password')\n                            ->currentPassword($hasPassword)\n                            ->visible($hasPassword),\n                        TextInput::make('password')\n                            ->label(__('profile.form.new_password.label'))\n                            ->password()\n                            ->required()\n                            ->revealable(filament()->arePasswordsRevealable())\n                            ->rules([Password::default(), 'confirmed'])\n                            ->autocomplete('new-password')\n                            ->dehydrated()\n                            ->live(debounce: 500),\n                        TextInput::make('password_confirmation')\n                            ->label(__('profile.form.confirm_password.label'))\n                            ->password()\n                            ->revealable(filament()->arePasswordsRevealable())\n                            ->required()\n                            ->dehydrated()\n                            ->visible(\n                                fn (Get $get): bool => filled($get('password'))\n                            ),\n                        Actions::make([\n                            Action::make('save')\n                                ->label(__('profile.actions.save'))\n                                ->submit('updatePassword'),\n                        ]),\n                    ]),\n            ])\n            ->statePath('data')\n            ->model($this->authUser());\n    }\n\n    public function updatePassword(): void\n    {\n        try {\n            $this->rateLimit(5);\n        } catch (TooManyRequestsException $exception) {\n            $this->sendRateLimitedNotification($exception);\n\n            return;\n        }\n\n        $this->form->validate();\n\n        $data = $this->form->getState();\n\n        // Update the password directly without Fortify validation\n        $this->authUser()->forceFill([\n            'password' => Hash::make($data['password'] ?? ''),\n        ])->save();\n\n        if (request()->hasSession() && filled($data['password'])) {\n            request()->session()->put(['password_hash_'.Filament::getAuthGuard() => $this->authUser()->getAuthPassword()]);\n        }\n\n        $this->reset('data');\n\n        $this->sendNotification();\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.profile.update-password');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Profile/UpdateProfileInformation.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Profile;\n\nuse App\\Actions\\Fortify\\UpdateUserProfileInformation as UpdateUserProfileInformationAction;\nuse App\\Livewire\\BaseLivewireComponent;\nuse DanHarrin\\LivewireRateLimiting\\Exceptions\\TooManyRequestsException;\nuse Filament\\Actions\\Action;\nuse Filament\\Auth\\Notifications\\NoticeOfEmailChangeRequest;\nuse Filament\\Auth\\Notifications\\VerifyEmailChange;\nuse Filament\\Facades\\Filament;\nuse Filament\\Forms\\Components\\FileUpload;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Notifications\\Notification;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Facades\\Notification as NotificationFacade;\nuse League\\Uri\\Components\\Query;\n\nfinal class UpdateProfileInformation extends BaseLivewireComponent\n{\n    /** @var array<string, mixed>|null */\n    public ?array $data = [];\n\n    public function mount(): void\n    {\n        $data = $this->authUser()->only(['name', 'email']);\n\n        $this->form->fill($data);\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema\n            ->schema([\n                Section::make(__('profile.sections.update_profile_information.title'))\n                    ->aside()\n                    ->description(__('profile.sections.update_profile_information.description'))\n                    ->schema([\n                        FileUpload::make('profile_photo_path')\n                            ->label(__('profile.form.profile_photo.label'))\n                            ->avatar()\n                            ->image()\n                            ->imageEditor()\n                            ->disk(config('jetstream.profile_photo_disk'))\n                            ->directory('profile-photos')\n                            ->visibility('public')\n                            ->formatStateUsing(fn () => auth('web')->user()?->profile_photo_path),\n                        TextInput::make('name')\n                            ->label(__('profile.form.name.label'))\n                            ->string()\n                            ->maxLength(255)\n                            ->required(),\n                        TextInput::make('email')\n                            ->label(__('profile.form.email.label'))\n                            ->email()\n                            ->required()\n                            ->unique(Filament::auth()->user() !== null ? Filament::auth()->user()::class : self::class, ignorable: $this->authUser()),\n                        Actions::make([\n                            Action::make('save')\n                                ->label(__('profile.actions.save'))\n                                ->submit('updateProfile'),\n                        ]),\n                    ]),\n            ])\n            ->statePath('data');\n    }\n\n    public function updateProfile(): void\n    {\n        try {\n            $this->rateLimit(5);\n        } catch (TooManyRequestsException $exception) {\n            $this->sendRateLimitedNotification($exception);\n\n            return;\n        }\n\n        $data = $this->form->getState();\n\n        if (Filament::hasEmailChangeVerification() && array_key_exists('email', $data)) {\n            $this->sendEmailChangeVerification($data);\n\n            $data['email'] = $this->authUser()->email;\n        }\n\n        resolve(UpdateUserProfileInformationAction::class)->update($this->authUser(), $data);\n\n        $this->sendNotification();\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    private function sendEmailChangeVerification(array $data): void\n    {\n        $user = $this->authUser();\n        $newEmail = $data['email'];\n\n        if ($user->email === $newEmail) {\n            return;\n        }\n\n        $notification = resolve(VerifyEmailChange::class);\n        $notification->url = Filament::getVerifyEmailChangeUrl($user, $newEmail);\n\n        $verificationSignature = Query::new($notification->url)->get('signature');\n\n        cache()->put($verificationSignature, true, ttl: now()->addHour());\n\n        $user->notify(resolve(NoticeOfEmailChangeRequest::class, [\n            'blockVerificationUrl' => Filament::getBlockEmailChangeVerificationUrl($user, $newEmail, $verificationSignature),\n            'newEmail' => $newEmail,\n        ]));\n\n        NotificationFacade::route('mail', $newEmail)\n            ->notify($notification);\n\n        Notification::make()\n            ->success()\n            ->title(__('filament-panels::auth/pages/edit-profile.notifications.email_change_verification_sent.title', ['email' => $newEmail]))\n            ->body(__('filament-panels::auth/pages/edit-profile.notifications.email_change_verification_sent.body', ['email' => $newEmail]))\n            ->send();\n\n        $this->data['email'] = $user->email;\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.profile.update-profile-information');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Teams/AddTeamMember.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Teams;\n\nuse App\\Actions\\Jetstream\\InviteTeamMember;\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\Team;\nuse DanHarrin\\LivewireRateLimiting\\Exceptions\\TooManyRequestsException;\nuse Filament\\Actions\\Action;\nuse Filament\\Facades\\Filament;\nuse Filament\\Forms\\Components\\Radio;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Notifications\\Notification;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Grid;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Validation\\ValidationException;\nuse Laravel\\Jetstream\\Jetstream;\n\nfinal class AddTeamMember extends BaseLivewireComponent\n{\n    /** @var array<string, mixed>|null */\n    public ?array $data = [];\n\n    public Team $team;\n\n    public function mount(Team $team): void\n    {\n        $this->team = $team;\n\n        $this->form->fill($this->team->only(['name']));\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema\n            ->statePath('data')\n            ->schema([\n                Section::make(__('teams.sections.add_team_member.title'))\n                    ->aside()\n                    ->visible(fn () => Gate::check('addTeamMember', $this->team))\n                    ->description(__('teams.sections.add_team_member.description'))\n                    ->schema([\n                        TextEntry::make('addTeamMemberNotice')\n                            ->hiddenLabel()\n                            ->state(fn (): string => __('teams.sections.add_team_member.notice')),\n                        TextInput::make('email')\n                            ->label(__('teams.form.email.label'))\n                            ->email()\n                            ->required(),\n                        Grid::make()\n                            ->columns(1)\n                            ->schema(function (): array {\n                                $roles = collect(Jetstream::$roles);\n\n                                return [\n                                    Radio::make('role')\n                                        ->hiddenLabel()\n                                        ->required()\n                                        ->in($roles->pluck('key'))\n                                        ->options($roles->pluck('name', 'key'))\n                                        ->descriptions($roles->pluck('description', 'key')),\n                                ];\n                            }),\n                        Actions::make([\n                            Action::make('addTeamMember')\n                                ->label(__('teams.actions.add_team_member'))\n                                ->action(function (): void {\n                                    $this->addTeamMember($this->team);\n                                }),\n                        ])->alignEnd(),\n                    ]),\n            ]);\n    }\n\n    public function addTeamMember(Team $team): void\n    {\n        try {\n            $this->rateLimit(5);\n        } catch (TooManyRequestsException $exception) {\n            $this->sendRateLimitedNotification($exception);\n\n            return;\n        }\n\n        $data = $this->form->getState();\n\n        try {\n            resolve(InviteTeamMember::class)->invite(\n                $this->authUser(),\n                $team,\n                $data['email'],\n                $data['role'] ?? null\n            );\n        } catch (ValidationException $e) {\n            Notification::make()\n                ->title($e->validator->errors()->first())\n                ->danger()\n                ->send();\n\n            return;\n        }\n\n        $this->sendNotification(__('teams.notifications.team_invitation_sent.success'));\n\n        $this->redirect(Filament::getTenantProfileUrl());\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.teams.add-team-member');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Teams/DeleteTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Teams;\n\nuse App\\Actions\\Jetstream\\DeleteTeam as DeleteTeamAction;\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\Team;\nuse Filament\\Actions\\Action;\nuse Filament\\Facades\\Filament;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\View\\View;\n\nfinal class DeleteTeam extends BaseLivewireComponent\n{\n    public Team $team;\n\n    public function mount(Team $team): void\n    {\n        $this->team = $team;\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema\n            ->schema([\n                Section::make(__('teams.sections.delete_team.title'))\n                    ->description(__('teams.sections.delete_team.description'))\n                    ->aside()\n                    ->visible(fn () => Gate::check('delete', $this->team))\n                    ->schema([\n                        TextEntry::make('notice')\n                            ->hiddenLabel()\n                            ->state(__('teams.sections.delete_team.notice')),\n                        Actions::make([\n                            Action::make('deleteAccountAction')\n                                ->label(__('teams.actions.delete_team'))\n                                ->color('danger')\n                                ->requiresConfirmation()\n                                ->modalHeading(__('teams.sections.delete_team.title'))\n                                ->modalDescription(__('teams.modals.delete_team.notice'))\n                                ->modalSubmitActionLabel(__('teams.actions.delete_team'))\n                                ->modalCancelAction(false)\n                                ->action(fn () => $this->deleteTeam($this->team)),\n                        ]),\n                    ]),\n            ]);\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.teams.delete-team');\n    }\n\n    public function deleteTeam(Team $team): void\n    {\n        resolve(DeleteTeamAction::class)->delete($team);\n\n        Filament::setTenant(Auth::guard('web')->user()->personalTeam());\n\n        $this->sendNotification(__('teams.notifications.team_deleted.success'));\n\n        redirect()->to(Filament::getCurrentPanel()?->getHomeUrl());\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Teams/PendingTeamInvitations.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Teams;\n\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\Team;\nuse App\\Models\\TeamInvitation;\nuse Filament\\Actions\\Action;\nuse Filament\\Tables;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Mail;\nuse Illuminate\\Support\\Facades\\RateLimiter;\nuse Illuminate\\Support\\Facades\\URL;\nuse Laravel\\Jetstream\\Mail\\TeamInvitation as TeamInvitationMail;\n\nfinal class PendingTeamInvitations extends BaseLivewireComponent implements Tables\\Contracts\\HasTable\n{\n    use Tables\\Concerns\\InteractsWithTable;\n\n    public Team $team;\n\n    public function mount(Team $team): void\n    {\n        $this->team = $team;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->query(fn () => $this->team->teamInvitations()->latest())\n            ->columns([\n                Tables\\Columns\\Layout\\Split::make([\n                    Tables\\Columns\\TextColumn::make('email'),\n                    Tables\\Columns\\TextColumn::make('expires_at')\n                        ->label(__('Expires'))\n                        ->state(function (TeamInvitation $record): string {\n                            if ($record->isExpired()) {\n                                return __('Expired');\n                            }\n\n                            /** @var Carbon $expiresAt */\n                            $expiresAt = $record->expires_at;\n\n                            return $expiresAt->diffForHumans();\n                        }),\n                ]),\n            ])\n            ->paginated(false)\n            ->recordActions([\n                Action::make('extendTeamInvitation')\n                    ->label(__('teams.actions.extend_team_invitation'))\n                    ->color('warning')\n                    ->requiresConfirmation()\n                    ->visible(fn () => Gate::check('updateTeamMember', $this->team))\n                    ->action(fn (Model $record) => $this->extendTeamInvitation($record)),\n                Action::make('copyInviteLink')\n                    ->label(__('teams.actions.copy_invite_link'))\n                    ->color('gray')\n                    ->visible(fn () => Gate::check('updateTeamMember', $this->team))\n                    ->action(fn (Model $record) => $this->copyInviteLink($record)),\n                Action::make('resendTeamInvitation')\n                    ->label(__('teams.actions.resend_team_invitation'))\n                    ->color('primary')\n                    ->requiresConfirmation()\n                    ->visible(fn () => Gate::check('updateTeamMember', $this->team))\n                    ->action($this->resendTeamInvitation(...)),\n                Action::make('cancelTeamInvitation')\n                    ->label(__('teams.actions.cancel_team_invitation'))\n                    ->color('danger')\n                    ->visible(fn () => Gate::check('removeTeamMember', $this->team))\n                    ->requiresConfirmation()\n                    ->action(fn (Model $record) => $this->cancelTeamInvitation($this->team, $record)),\n            ]);\n    }\n\n    public function extendTeamInvitation(Model $invitation): void\n    {\n        Gate::authorize('updateTeamMember', $this->team);\n\n        $expiryDays = (int) config('jetstream.invitation_expiry_days', 7);\n\n        $invitation->update([\n            'expires_at' => now()->addDays($expiryDays),\n        ]);\n\n        $this->sendNotification(__('teams.notifications.team_invitation_extended.success'));\n    }\n\n    public function copyInviteLink(Model $invitation): void\n    {\n        Gate::authorize('updateTeamMember', $this->team);\n\n        $url = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n        $this->js('navigator.clipboard.writeText('.json_encode($url, JSON_THROW_ON_ERROR).')');\n\n        $this->sendNotification(__('teams.notifications.invite_link_copied.success'));\n    }\n\n    public function resendTeamInvitation(Model $invitation): void\n    {\n        Gate::authorize('updateTeamMember', $this->team);\n\n        $key = \"resend-invitation:{$invitation->getKey()}\";\n\n        if (RateLimiter::tooManyAttempts($key, 1)) {\n            $seconds = RateLimiter::availableIn($key);\n\n            $this->sendNotification(__('Please wait :seconds seconds before resending.', ['seconds' => $seconds]));\n\n            return;\n        }\n\n        RateLimiter::hit($key, 60);\n\n        /** @var \\Laravel\\Jetstream\\TeamInvitation $invitation */\n        Mail::to($invitation->email)->send(new TeamInvitationMail($invitation));\n\n        $this->sendNotification(__('teams.notifications.team_invitation_sent.success'));\n    }\n\n    public function cancelTeamInvitation(Team $team, Model $invitation): void\n    {\n        $invitation->delete();\n\n        $team->fresh();\n\n        $this->sendNotification(__('teams.notifications.team_invitation_cancelled.success'));\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.teams.pending-team-invitations');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Teams/TeamMembers.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Teams;\n\nuse App\\Actions\\Jetstream\\RemoveTeamMember as RemoveTeamMemberAction;\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\Membership;\nuse App\\Models\\Team;\nuse Filament\\Actions\\Action;\nuse Filament\\Facades\\Filament;\nuse Filament\\Forms\\Components\\Radio;\nuse Filament\\Schemas\\Components\\Grid;\nuse Filament\\Support\\Enums\\Alignment;\nuse Filament\\Tables;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Auth\\Access\\AuthorizationException;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Validation\\ValidationException;\nuse Laravel\\Jetstream\\Events\\TeamMemberUpdated;\nuse Laravel\\Jetstream\\Jetstream;\n\nfinal class TeamMembers extends BaseLivewireComponent implements Tables\\Contracts\\HasTable\n{\n    use Tables\\Concerns\\InteractsWithTable;\n\n    public Team $team;\n\n    public function mount(Team $team): void\n    {\n        $this->team = $team;\n    }\n\n    public function table(Table $table): Table\n    {\n        $model = Membership::class;\n\n        $teamForeignKeyColumn = 'team_id';\n\n        return $table\n            ->query(fn (): Builder => $model::with('user')->where($teamForeignKeyColumn, $this->team->id))\n            ->columns([\n                Tables\\Columns\\Layout\\Split::make([\n                    Tables\\Columns\\ImageColumn::make('profile_photo_url')\n                        ->disk(config('jetstream.profile_photo_disk'))\n                        ->defaultImageUrl(fn (Membership $record): string => Filament::getUserAvatarUrl($record->user))\n                        ->circular()\n                        ->imageSize(25)\n                        ->grow(false),\n                    Tables\\Columns\\TextColumn::make('user.email'),\n                ]),\n            ])\n            ->paginated(false)\n            ->recordActions([\n                Action::make('updateTeamRole')\n                    ->visible(fn (Membership $record): bool => Gate::check('updateTeamMember', $this->team))\n                    ->label(fn (Membership $record): string => $record->roleName)\n                    ->modalWidth('lg')\n                    ->modalHeading(__('teams.actions.update_team_role'))\n                    ->modalSubmitActionLabel(__('teams.actions.save'))\n                    ->modalCancelAction(false)\n                    ->modalFooterActionsAlignment(Alignment::End)\n                    ->schema([\n                        Grid::make()\n                            ->columns(1)\n                            ->schema(function (): array {\n                                $roles = collect(Jetstream::$roles);\n\n                                return [\n                                    Radio::make('role')\n                                        ->hiddenLabel()\n                                        ->required()\n                                        ->in($roles->pluck('key'))\n                                        ->options($roles->pluck('name', 'key'))\n                                        ->descriptions($roles->pluck('description', 'key'))\n                                        ->default(fn (Membership $record): string => $record->role),\n                                ];\n                            }),\n                    ])\n                    ->action(function (Membership $record, array $data): void {\n                        $this->updateTeamRole($this->team, $record, $data);\n                    }),\n                Action::make('removeTeamMember')\n                    ->visible(\n                        fn (Membership $record): bool => (string) $this->authUser()->id !== (string) $record->user_id && Gate::check(\n                            'removeTeamMember',\n                            $this->team\n                        )\n                    )\n                    ->label(__('teams.actions.remove_team_member'))\n                    ->color('danger')\n                    ->requiresConfirmation()\n                    ->action(function (Membership $record): void {\n                        $this->removeTeamMember($this->team, $record);\n                    }),\n                Action::make('leaveTeam')\n                    ->visible(fn (Membership $record): bool => (string) $this->authUser()->id === (string) $record->user_id)\n                    ->icon('heroicon-o-arrow-right-start-on-rectangle')\n                    ->color('danger')\n                    ->label(__('teams.actions.leave_team'))\n                    ->modalDescription(__('teams.modals.leave_team.notice'))\n                    ->requiresConfirmation()\n                    ->action(function (Membership $record): void {\n                        $this->leaveTeam($this->team);\n                    }),\n            ]);\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     */\n    public function updateTeamRole(Team $team, Membership $teamMember, array $data): void\n    {\n        if (! Gate::check('updateTeamMember', $team)) {\n            $this->sendNotification(\n                __('teams.notifications.permission_denied.cannot_update_team_member'),\n                type: 'danger'\n            );\n\n            return;\n        }\n\n        $team->users()->updateExistingPivot($teamMember->user_id, ['role' => $data['role']]);\n\n        event(new TeamMemberUpdated($team->fresh(), $teamMember));\n\n        $this->sendNotification();\n\n        $team->fresh();\n    }\n\n    public function removeTeamMember(Team $team, Membership $teamMember): void\n    {\n        try {\n            resolve(RemoveTeamMemberAction::class)->remove($this->authUser(), $team, $teamMember->user);\n\n            $this->sendNotification(__('teams.notifications.team_member_removed.success'));\n\n            $team->fresh();\n        } catch (AuthorizationException) {\n            $this->sendNotification(\n                __('teams.notifications.permission_denied.cannot_remove_team_member'),\n                type: 'danger'\n            );\n        } catch (ValidationException $e) {\n            $this->sendNotification(\n                $e->validator->errors()->first(),\n                type: 'danger'\n            );\n        }\n    }\n\n    public function leaveTeam(Team $team): void\n    {\n        $teamMember = $this->authUser();\n\n        try {\n            resolve(RemoveTeamMemberAction::class)->remove($teamMember, $team, $teamMember);\n\n            $this->sendNotification(__('teams.notifications.leave_team.success'));\n\n            $this->redirect(Filament::getHomeUrl());\n        } catch (AuthorizationException) {\n            $this->sendNotification(\n                title: __('teams.notifications.permission_denied.cannot_leave_team'),\n                type: 'danger'\n            );\n        } catch (ValidationException $e) {\n            $this->sendNotification(\n                $e->validator->errors()->first(),\n                type: 'danger'\n            );\n        }\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.teams.team-members');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/App/Teams/UpdateTeamName.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire\\App\\Teams;\n\nuse App\\Actions\\Jetstream\\UpdateTeamName as UpdateTeamNameAction;\nuse App\\Filament\\Pages\\EditTeam;\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Models\\Team;\nuse App\\Rules\\ValidTeamSlug;\nuse DanHarrin\\LivewireRateLimiting\\Exceptions\\TooManyRequestsException;\nuse Filament\\Actions\\Action;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Components\\Actions;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Components\\Utilities\\Set;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Str;\n\nfinal class UpdateTeamName extends BaseLivewireComponent\n{\n    /** @var array<string, mixed>|null */\n    public ?array $data = [];\n\n    public Team $team;\n\n    public bool $slugManuallyEdited = false;\n\n    public function mount(Team $team): void\n    {\n        $this->team = $team;\n\n        $this->form->fill($team->only(['name', 'slug']));\n    }\n\n    public function form(Schema $schema): Schema\n    {\n        return $schema\n            ->schema([\n                Section::make(__('teams.sections.update_team_name.title'))\n                    ->aside()\n                    ->description(__('teams.sections.update_team_name.description'))\n                    ->schema([\n                        TextInput::make('name')\n                            ->label(__('teams.form.team_name.label'))\n                            ->string()\n                            ->maxLength(255)\n                            ->required()\n                            ->live(onBlur: true)\n                            ->afterStateUpdated(function (Set $set, ?string $state): void {\n                                if ($this->slugManuallyEdited) {\n                                    return;\n                                }\n\n                                $set('slug', Str::slug((string) $state));\n                            }),\n                        TextInput::make('slug')\n                            ->label(__('teams.form.team_slug.label'))\n                            ->helperText(__('teams.form.team_slug.helper_text'))\n                            ->string()\n                            ->maxLength(255)\n                            ->required()\n                            ->rules([new ValidTeamSlug(ignoreValue: $this->team->slug)])\n                            ->live(onBlur: true)\n                            ->afterStateUpdated(function (): void {\n                                $this->slugManuallyEdited = true;\n                            })\n                            ->dehydrateStateUsing(fn (?string $state): string => Str::slug((string) $state))\n                            ->unique('teams', 'slug', ignorable: $this->team),\n                        Actions::make([\n                            Action::make('save')\n                                ->label(__('teams.actions.save'))\n                                ->action(fn () => $this->updateTeamName($this->team)),\n                        ])->alignEnd(),\n                    ]),\n            ])\n            ->statePath('data');\n    }\n\n    public function updateTeamName(Team $team): void\n    {\n        try {\n            $this->rateLimit(5);\n        } catch (TooManyRequestsException $exception) {\n            $this->sendRateLimitedNotification($exception);\n\n            return;\n        }\n\n        $data = $this->form->getState();\n        $oldSlug = $team->slug;\n\n        resolve(UpdateTeamNameAction::class)->update($this->authUser(), $team, $data);\n\n        if ($team->slug !== $oldSlug) {\n            $this->redirect(EditTeam::getUrl(tenant: $team));\n\n            return;\n        }\n\n        $this->sendNotification();\n    }\n\n    public function render(): View\n    {\n        return view('livewire.app.teams.update-team-name');\n    }\n}\n"
  },
  {
    "path": "app/Livewire/BaseLivewireComponent.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire;\n\nuse App\\Models\\User;\nuse DanHarrin\\LivewireRateLimiting\\Exceptions\\TooManyRequestsException;\nuse DanHarrin\\LivewireRateLimiting\\WithRateLimiting;\nuse Filament\\Actions\\Concerns\\InteractsWithActions;\nuse Filament\\Actions\\Contracts\\HasActions;\nuse Filament\\Facades\\Filament;\nuse Filament\\Forms\\Concerns\\InteractsWithForms;\nuse Filament\\Forms\\Contracts\\HasForms;\nuse Filament\\Notifications\\Notification;\nuse Filament\\Schemas\\Schema;\nuse Livewire\\Component;\n\n/**\n * @property Schema $form\n */\nabstract class BaseLivewireComponent extends Component implements HasActions, HasForms\n{\n    use InteractsWithActions;\n    use InteractsWithForms;\n    use WithRateLimiting;\n\n    public function authUser(): User\n    {\n        /** @var User $user */\n        $user = Filament::auth()->user();\n\n        return $user;\n    }\n\n    protected function sendRateLimitedNotification(TooManyRequestsException $exception): void\n    {\n        Notification::make()\n            ->title('Too Many Requests')\n            ->body(\"Please wait {$exception->secondsUntilAvailable} seconds before trying again.\")\n            ->danger()\n            ->send();\n    }\n\n    protected function sendNotification(string $title = 'Saved', ?string $message = null, string $type = 'success'): void\n    {\n        Notification::make()\n            ->title(__($title))\n            ->body(__($message))\n            ->{$type}()\n            ->send();\n    }\n}\n"
  },
  {
    "path": "app/Livewire/UpdateProfileInformationForm.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Livewire;\n\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\View\\View;\nuse Laravel\\Fortify\\Contracts\\UpdatesUserProfileInformation;\nuse Livewire\\Attributes\\Computed;\nuse Livewire\\Component;\nuse Livewire\\WithFileUploads;\n\nfinal class UpdateProfileInformationForm extends Component\n{\n    use WithFileUploads;\n\n    /**\n     * The state of the form.\n     *\n     * @var array<string, mixed>\n     */\n    public array $state = [];\n\n    /**\n     * The new avatar for the user.\n     */\n    public mixed $photo = null;\n\n    /**\n     * Determine if the verification email was sent.\n     */\n    public bool $verificationLinkSent = false;\n\n    /**\n     * Prepare the component.\n     */\n    public function mount(): void\n    {\n        $user = Auth::guard('web')->user();\n\n        $this->state = array_merge([\n            'email' => $user->email,\n        ], $user->withoutRelations()->toArray());\n    }\n\n    /**\n     * Update the user's profile information.\n     */\n    public function updateProfileInformation(UpdatesUserProfileInformation $updater): void\n    {\n        $this->resetErrorBag();\n\n        $updater->update(\n            Auth::guard('web')->user(),\n            $this->photo\n                ? array_merge($this->state, ['photo' => $this->photo])\n                : $this->state\n        );\n\n        $this->dispatch('saved');\n\n        $this->dispatch('refresh-navigation-menu');\n    }\n\n    /**\n     * Delete user's profile photo.\n     */\n    public function deleteProfilePhoto(): void\n    {\n        Auth::guard('web')->user()->deleteProfilePhoto();\n\n        $this->dispatch('refresh-navigation-menu');\n    }\n\n    /**\n     * Sent the email verification.\n     */\n    public function sendEmailVerification(): void\n    {\n        Auth::guard('web')->user()->sendEmailVerificationNotification();\n\n        $this->verificationLinkSent = true;\n    }\n\n    /**\n     * Get the current user of the application.\n     */\n    #[Computed]\n    public function user(): Authenticatable\n    {\n        return Auth::guard('web')->user();\n    }\n\n    /**\n     * Render the component.\n     */\n    public function render(): View\n    {\n        return view('profile.update-profile-information-form');\n    }\n}\n"
  },
  {
    "path": "app/Mail/NewContactSubmissionMail.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Mail\\Mailables\\Content;\nuse Illuminate\\Mail\\Mailables\\Envelope;\nuse Illuminate\\Queue\\SerializesModels;\n\nfinal class NewContactSubmissionMail extends Mailable implements ShouldQueue\n{\n    use Queueable, SerializesModels;\n\n    /** @param array{name: string, email: string, company: ?string, message: string} $data */\n    public function __construct(\n        public array $data,\n    ) {}\n\n    public function envelope(): Envelope\n    {\n        return new Envelope(\n            replyTo: [$this->data['email']],\n            subject: \"New contact: {$this->data['name']}\",\n        );\n    }\n\n    public function content(): Content\n    {\n        return new Content(\n            markdown: 'mail.new-contact-submission',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Filters/CustomFieldFilter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Filters;\n\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\nuse Spatie\\QueryBuilder\\Filters\\Filter;\n\n/**\n * @implements Filter<Model>\n */\nfinal readonly class CustomFieldFilter implements Filter\n{\n    private const int MAX_CONDITIONS = 10;\n\n    private const array OPERATOR_MAP = [\n        'eq' => '=',\n        'gt' => '>',\n        'gte' => '>=',\n        'lt' => '<',\n        'lte' => '<=',\n    ];\n\n    public function __construct(\n        private string $entityType,\n    ) {}\n\n    public function __invoke(Builder $query, mixed $value, string $property): void\n    {\n        if (! is_array($value) || $value === []) {\n            return;\n        }\n\n        $fieldCodes = array_keys($value);\n\n        abort_if(count($fieldCodes) > self::MAX_CONDITIONS, 422, 'Maximum 10 filter conditions allowed.');\n\n        $fields = $this->resolveFields($fieldCodes);\n\n        foreach ($value as $fieldCode => $operators) {\n            if (! is_array($operators)) {\n                continue;\n            }\n            if (! isset($fields[$fieldCode])) {\n                continue;\n            }\n            $field = $fields[$fieldCode];\n            $valueColumn = CustomFieldValue::getValueColumn($field->type);\n\n            foreach ($operators as $operator => $operand) {\n                $this->applyCondition($query, $field, $valueColumn, (string) $operator, $operand);\n            }\n        }\n    }\n\n    /**\n     * @param  Builder<Model>  $query\n     */\n    private function applyCondition(\n        Builder $query,\n        CustomField $field,\n        string $valueColumn,\n        string $operator,\n        mixed $operand,\n    ): void {\n        $query->whereHas('customFieldValues', function (Builder $q) use ($field, $valueColumn, $operator, $operand): void {\n            $q->where('custom_field_id', $field->getKey());\n\n            match ($operator) {\n                'eq', 'gt', 'gte', 'lt', 'lte' => $q->where($valueColumn, self::OPERATOR_MAP[$operator], $operand),\n                'contains' => $q->where($valueColumn, 'ILIKE', '%'.str_replace(['\\\\', '%', '_'], ['\\\\\\\\', '\\\\%', '\\\\_'], (string) $operand).'%'),\n                'in' => $q->whereIn($valueColumn, (array) $operand),\n                'has_any' => $q->whereJsonContains($valueColumn, $operand),\n                default => null,\n            };\n        });\n    }\n\n    /**\n     * @param  array<int, string>  $fieldCodes\n     * @return Collection<string, CustomField>\n     */\n    private function resolveFields(array $fieldCodes): Collection\n    {\n        /** @var User $user */\n        $user = auth()->user();\n\n        /** @var Collection<string, CustomField> */\n        return CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $user->currentTeam->getKey())\n            ->where('entity_type', $this->entityType)\n            ->whereIn('code', $fieldCodes)\n            ->active()\n            ->get()\n            ->keyBy('code');\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Filters/CustomFieldSort.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Filters;\n\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\nuse Spatie\\QueryBuilder\\Sorts\\Sort;\n\nfinal readonly class CustomFieldSort implements Sort\n{\n    public function __construct(\n        private string $entityType,\n    ) {}\n\n    /**\n     * @param  Builder<Model>  $query\n     */\n    public function __invoke(Builder $query, bool $descending, string $property): void\n    {\n        $field = $this->resolveField($property);\n\n        if (! $field instanceof CustomField) {\n            return;\n        }\n\n        $valueColumn = CustomFieldValue::getValueColumn($field->type);\n        $model = $query->getModel();\n\n        $query->orderBy(\n            CustomFieldValue::query()\n                ->select($valueColumn)\n                ->whereColumn('entity_id', $model->getTable().'.id')\n                ->where('entity_type', $model->getMorphClass())\n                ->where('custom_field_id', $field->getKey())\n                ->limit(1),\n            $descending ? 'desc' : 'asc',\n        );\n    }\n\n    private function resolveField(string $code): ?CustomField\n    {\n        return $this->resolveAllFields()->get($code);\n    }\n\n    /**\n     * @return Collection<string, CustomField>\n     */\n    private function resolveAllFields(): Collection\n    {\n        /** @var User $user */\n        $user = auth()->user();\n        $teamId = $user->currentTeam->getKey();\n\n        /** @var Collection<string, CustomField> */\n        return Cache::remember(\n            \"custom_fields_sort_{$teamId}_{$this->entityType}\",\n            60,\n            fn () => CustomField::query()\n                ->withoutGlobalScopes()\n                ->where('tenant_id', $teamId)\n                ->where('entity_type', $this->entityType)\n                ->active()\n                ->get()\n                ->keyBy('code')\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Prompts/CrmOverviewPrompt.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Prompts;\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Prompt;\n\n#[Description('Get an overview of the CRM data for the current team, including record counts and recent activity.')]\nfinal class CrmOverviewPrompt extends Prompt\n{\n    private const int CACHE_TTL = 60;\n\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $teamId = $user->currentTeam->getKey();\n        $cacheKey = \"crm_overview_{$teamId}\";\n\n        $overview = Cache::remember($cacheKey, self::CACHE_TTL, function (): string {\n            $counts = [\n                'companies' => Company::query()->count(),\n                'people' => People::query()->count(),\n                'opportunities' => Opportunity::query()->count(),\n                'tasks' => Task::query()->count(),\n                'notes' => Note::query()->count(),\n            ];\n\n            $recentCompanies = Company::query()\n                ->latest()\n                ->take(5)\n                ->pluck('name')\n                ->implode(', ');\n\n            $recentPeople = People::query()\n                ->latest()\n                ->take(5)\n                ->pluck('name')\n                ->implode(', ');\n\n            $text = \"CRM Overview for current team:\\n\\n\";\n            $text .= \"Record Counts:\\n\";\n\n            foreach ($counts as $entity => $count) {\n                $text .= \"  - {$entity}: {$count}\\n\";\n            }\n\n            $text .= \"\\nRecent Companies: {$recentCompanies}\\n\";\n            $text .= \"Recent People: {$recentPeople}\\n\";\n\n            return $text.\"\\nUse the available tools to search, create, update, or delete CRM records.\";\n        });\n\n        return Response::text($overview);\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/CompanySchemaResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources;\n\nuse App\\Mcp\\Resources\\Concerns\\ResolvesEntitySchema;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\User;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;\nuse Laravel\\Mcp\\Server\\Attributes\\Uri;\nuse Laravel\\Mcp\\Server\\Resource;\n\n#[Description('Schema for companies including available custom fields. Read this before creating or updating companies.')]\n#[Uri('relaticle://schema/company')]\n#[MimeType('application/json')]\nfinal class CompanySchemaResource extends Resource\n{\n    use ResolvesEntitySchema;\n\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $schema = [\n            'entity' => 'company',\n            'description' => 'Organizations and businesses tracked in the CRM.',\n            'fields' => [\n                'name' => ['type' => 'string', 'required' => true],\n            ],\n            'custom_fields' => $this->resolveCustomFields($user, 'company'),\n            'filterable_fields' => $this->resolveFilterableFields($user, 'company'),\n            'relationships' => ['creator', 'accountOwner', 'people', 'opportunities'],\n            'aggregate_includes' => [\n                'peopleCount' => 'Count of related people',\n                'opportunitiesCount' => 'Count of related opportunities',\n                'tasksCount' => 'Count of related tasks',\n                'notesCount' => 'Count of related notes',\n            ],\n            'usage' => 'Pass custom field values in the \"custom_fields\" object using field codes as keys. Use \"filter\" param in list tools to filter by custom field values with operators (eq, gt, gte, lt, lte, contains, in, has_any). Example: {\"name\": \"Acme\", \"custom_fields\": {\"icp\": true}}',\n        ];\n\n        return Response::text(json_encode($schema, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/Concerns/ResolvesEntitySchema.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources\\Concerns;\n\nuse App\\Mcp\\Schema\\CustomFieldFilterSchema;\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Relaticle\\CustomFields\\Models\\CustomFieldOption;\n\ntrait ResolvesEntitySchema\n{\n    /**\n     * @return array<string, array<string, mixed>>\n     */\n    protected function resolveCustomFields(User $user, string $entityType): array\n    {\n        $teamId = $user->currentTeam->getKey();\n        $cacheKey = \"custom_fields_schema_{$teamId}_{$entityType}\";\n\n        return Cache::remember($cacheKey, 60, function () use ($teamId, $entityType): array {\n            $fields = CustomField::query()\n                ->withoutGlobalScopes()\n                ->where('tenant_id', $teamId)\n                ->where('entity_type', $entityType)\n                ->active()\n                ->select('id', 'code', 'name', 'type', 'validation_rules')\n                ->with(['options:id,custom_field_id,name'])\n                ->get();\n\n            return $this->formatCustomFields($fields);\n        });\n    }\n\n    /**\n     * @return array<string, array<string, mixed>>\n     */\n    protected function resolveFilterableFields(User $user, string $entityType): array\n    {\n        return (new CustomFieldFilterSchema)->build($user, $entityType);\n    }\n\n    private const CHOICE_TYPES = ['select', 'radio', 'multi_select', 'checkbox_list', 'tags'];\n\n    /**\n     * @param  Collection<int, CustomField>  $fields\n     * @return array<string, array<string, mixed>>\n     */\n    private function formatCustomFields(Collection $fields): array\n    {\n        $result = [];\n\n        foreach ($fields as $field) {\n            $required = ($field->validation_rules ?? collect())\n                ->contains('name', 'required');\n\n            $entry = [\n                'name' => $field->name,\n                'type' => $field->type,\n                'required' => $required,\n            ];\n\n            $formatHint = $this->fieldFormatHint($field->type);\n\n            if ($formatHint !== null) {\n                $entry['input_format'] = $formatHint['format'];\n                $entry['example'] = $formatHint['example'];\n            }\n\n            if (in_array($field->type, self::CHOICE_TYPES, true) && $field->options->isNotEmpty()) {\n                $entry['options'] = $field->options->map(fn (CustomFieldOption $option): array => [\n                    'id' => $option->id,\n                    'label' => $option->name,\n                ])->all();\n            }\n\n            $result[$field->code] = $entry;\n        }\n\n        return $result;\n    }\n\n    /**\n     * @return array{format: string, example: mixed}|null\n     */\n    private function fieldFormatHint(string $type): ?array\n    {\n        return match ($type) {\n            'link' => ['format' => 'array of URL strings', 'example' => ['https://example.com']],\n            'email' => ['format' => 'array of email strings', 'example' => ['user@example.com']],\n            'phone' => ['format' => 'array of phone strings', 'example' => ['+1234567890']],\n            'select', 'radio' => ['format' => 'option ID string (see options)', 'example' => 'option-id-here'],\n            'multi_select', 'checkbox_list', 'tags' => ['format' => 'array of option ID strings', 'example' => ['option-id-1', 'option-id-2']],\n            'toggle' => ['format' => 'boolean', 'example' => true],\n            'date_time' => ['format' => 'ISO 8601 datetime string', 'example' => '2025-01-15T10:30:00Z'],\n            'number' => ['format' => 'numeric value', 'example' => 42],\n            'currency' => ['format' => 'numeric value (amount)', 'example' => 15000.00],\n            default => null,\n        };\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/CrmSummaryResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources;\n\nuse App\\Enums\\CustomFields\\OpportunityField;\nuse App\\Enums\\CustomFields\\TaskField;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;\nuse Laravel\\Mcp\\Server\\Attributes\\Uri;\nuse Laravel\\Mcp\\Server\\Resource;\n\n#[Description('CRM summary with record counts, pipeline breakdown by stage, and task status. Use for overview and analytics questions.')]\n#[Uri('relaticle://summary/crm')]\n#[MimeType('application/json')]\nfinal class CrmSummaryResource extends Resource\n{\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n        $teamId = $user->currentTeam->getKey();\n\n        $cacheKey = \"crm_summary_{$teamId}\";\n\n        $summary = Cache::remember($cacheKey, 60, fn (): array => [\n            'companies' => ['total' => Company::query()->where('team_id', $teamId)->count()],\n            'people' => ['total' => People::query()->where('team_id', $teamId)->count()],\n            'opportunities' => $this->opportunitySummary($teamId),\n            'tasks' => $this->taskSummary($teamId),\n            'notes' => ['total' => Note::query()->where('team_id', $teamId)->count()],\n        ]);\n\n        return Response::text(json_encode($summary, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function opportunitySummary(mixed $teamId): array\n    {\n        $total = Opportunity::query()->where('team_id', $teamId)->count();\n\n        $stageFieldId = $this->resolveFieldId($teamId, 'opportunity', OpportunityField::STAGE->value);\n        $amountFieldId = $this->resolveFieldId($teamId, 'opportunity', OpportunityField::AMOUNT->value);\n\n        if ($stageFieldId === null) {\n            return ['total' => $total];\n        }\n\n        $amountJoin = $amountFieldId !== null\n            ? \"LEFT JOIN custom_field_values amount_cfv ON amount_cfv.entity_id = o.id AND amount_cfv.entity_type = 'opportunity' AND amount_cfv.custom_field_id = ?\"\n            : '';\n        $amountSelect = $amountFieldId !== null\n            ? 'COALESCE(SUM(amount_cfv.float_value), 0) as total_amount'\n            : '0 as total_amount';\n        $amountBindings = $amountFieldId !== null ? [$amountFieldId] : [];\n\n        $rows = DB::select(\n            \"SELECT stage_cfv.string_value as stage, COUNT(*) as count, {$amountSelect}\n             FROM opportunities o\n             LEFT JOIN custom_field_values stage_cfv ON stage_cfv.entity_id = o.id AND stage_cfv.entity_type = 'opportunity' AND stage_cfv.custom_field_id = ?\n             {$amountJoin}\n             WHERE o.team_id = ? AND o.deleted_at IS NULL\n             GROUP BY stage_cfv.string_value\",\n            [$stageFieldId, ...$amountBindings, $teamId],\n        );\n\n        $stageOptions = DB::table('custom_field_options')\n            ->where('custom_field_id', $stageFieldId)\n            ->pluck('name', 'id');\n\n        $byStage = [];\n        $totalPipeline = 0;\n        $totalWon = 0;\n\n        foreach ($rows as $row) {\n            $stageId = $row->stage ?? 'Unknown';\n            $stageLabel = $stageOptions[$stageId] ?? $stageId;\n            $amount = (float) $row->total_amount;\n            $byStage[$stageLabel] = ['count' => (int) $row->count, 'total_amount' => $amount];\n            $totalPipeline += $amount;\n\n            if (str_contains(strtolower($stageLabel), 'won')) {\n                $totalWon += $amount;\n            }\n        }\n\n        return [\n            'total' => $total,\n            'by_stage' => $byStage,\n            'total_pipeline_value' => $totalPipeline,\n            'total_won_value' => $totalWon,\n        ];\n    }\n\n    /**\n     * @return array<string, int>\n     */\n    private function taskSummary(mixed $teamId): array\n    {\n        $total = Task::query()->where('team_id', $teamId)->count();\n\n        $dueDateFieldId = $this->resolveFieldId($teamId, 'task', TaskField::DUE_DATE->value);\n\n        if ($dueDateFieldId === null) {\n            return ['total' => $total, 'overdue' => 0, 'due_this_week' => 0];\n        }\n\n        $row = DB::selectOne(\n            \"SELECT\n                COUNT(*) FILTER (WHERE due_cfv.datetime_value::date < CURRENT_DATE) as overdue,\n                COUNT(*) FILTER (WHERE due_cfv.datetime_value::date BETWEEN CURRENT_DATE AND (CURRENT_DATE + INTERVAL '7 days')) as due_this_week\n             FROM tasks t\n             LEFT JOIN custom_field_values due_cfv ON due_cfv.entity_id = t.id AND due_cfv.entity_type = 'task' AND due_cfv.custom_field_id = ?\n             WHERE t.team_id = ? AND t.deleted_at IS NULL\",\n            [$dueDateFieldId, $teamId],\n        );\n\n        return [\n            'total' => $total,\n            'overdue' => (int) ($row->overdue ?? 0),\n            'due_this_week' => (int) ($row->due_this_week ?? 0),\n        ];\n    }\n\n    private function resolveFieldId(mixed $teamId, string $entityType, string $code): mixed\n    {\n        return CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $teamId)\n            ->where('entity_type', $entityType)\n            ->where('code', $code)\n            ->active()\n            ->value('id');\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/NoteSchemaResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources;\n\nuse App\\Mcp\\Resources\\Concerns\\ResolvesEntitySchema;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\User;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;\nuse Laravel\\Mcp\\Server\\Attributes\\Uri;\nuse Laravel\\Mcp\\Server\\Resource;\n\n#[Description('Schema for notes including available custom fields. Read this before creating or updating notes.')]\n#[Uri('relaticle://schema/note')]\n#[MimeType('application/json')]\nfinal class NoteSchemaResource extends Resource\n{\n    use ResolvesEntitySchema;\n\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $schema = [\n            'entity' => 'note',\n            'description' => 'Free-form notes attached to CRM records.',\n            'fields' => [\n                'title' => ['type' => 'string', 'required' => true],\n            ],\n            'custom_fields' => $this->resolveCustomFields($user, 'note'),\n            'filterable_fields' => $this->resolveFilterableFields($user, 'note'),\n            'relationships' => ['creator', 'companies', 'people', 'opportunities'],\n            'writable_relationships' => [\n                'company_ids' => [\n                    'type' => 'array of string IDs',\n                    'description' => 'Link note to companies on create/update. Omit to leave unchanged, pass [] to remove all.',\n                ],\n                'people_ids' => [\n                    'type' => 'array of string IDs',\n                    'description' => 'Link note to people on create/update. Omit to leave unchanged, pass [] to remove all.',\n                ],\n                'opportunity_ids' => [\n                    'type' => 'array of string IDs',\n                    'description' => 'Link note to opportunities on create/update. Omit to leave unchanged, pass [] to remove all.',\n                ],\n            ],\n            'tools_hint' => 'Use attach-note-to-entities and detach-note-from-entities tools for post-creation relationship management.',\n            'aggregate_includes' => [\n                'companiesCount' => 'Count of related companies',\n                'peopleCount' => 'Count of related people',\n                'opportunitiesCount' => 'Count of related opportunities',\n            ],\n            'usage' => 'Pass custom field values in the \"custom_fields\" object using field codes as keys.',\n        ];\n\n        return Response::text(json_encode($schema, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/OpportunitySchemaResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources;\n\nuse App\\Mcp\\Resources\\Concerns\\ResolvesEntitySchema;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\User;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;\nuse Laravel\\Mcp\\Server\\Attributes\\Uri;\nuse Laravel\\Mcp\\Server\\Resource;\n\n#[Description('Schema for opportunities including available custom fields. Read this before creating or updating opportunities.')]\n#[Uri('relaticle://schema/opportunity')]\n#[MimeType('application/json')]\nfinal class OpportunitySchemaResource extends Resource\n{\n    use ResolvesEntitySchema;\n\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $schema = [\n            'entity' => 'opportunity',\n            'description' => 'Sales deals or business opportunities.',\n            'fields' => [\n                'name' => ['type' => 'string', 'required' => true],\n                'company_id' => ['type' => 'string', 'required' => false],\n                'contact_id' => ['type' => 'string', 'required' => false, 'description' => 'Links to a person'],\n            ],\n            'custom_fields' => $this->resolveCustomFields($user, 'opportunity'),\n            'filterable_fields' => $this->resolveFilterableFields($user, 'opportunity'),\n            'relationships' => ['creator', 'company', 'contact'],\n            'aggregate_includes' => [\n                'tasksCount' => 'Count of related tasks',\n                'notesCount' => 'Count of related notes',\n            ],\n            'usage' => 'Pass custom field values in the \"custom_fields\" object using field codes as keys. Use \"filter\" param in list tools to filter by custom field values with operators (eq, gt, gte, lt, lte, contains, in, has_any).',\n        ];\n\n        return Response::text(json_encode($schema, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/PeopleSchemaResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources;\n\nuse App\\Mcp\\Resources\\Concerns\\ResolvesEntitySchema;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\User;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;\nuse Laravel\\Mcp\\Server\\Attributes\\Uri;\nuse Laravel\\Mcp\\Server\\Resource;\n\n#[Description('Schema for people (contacts) including available custom fields. Read this before creating or updating people.')]\n#[Uri('relaticle://schema/people')]\n#[MimeType('application/json')]\nfinal class PeopleSchemaResource extends Resource\n{\n    use ResolvesEntitySchema;\n\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $schema = [\n            'entity' => 'people',\n            'description' => 'Individual contacts associated with companies.',\n            'fields' => [\n                'name' => ['type' => 'string', 'required' => true],\n                'company_id' => ['type' => 'string', 'required' => false, 'description' => 'Links to a company'],\n            ],\n            'custom_fields' => $this->resolveCustomFields($user, 'people'),\n            'filterable_fields' => $this->resolveFilterableFields($user, 'people'),\n            'relationships' => ['creator', 'company'],\n            'aggregate_includes' => [\n                'tasksCount' => 'Count of related tasks',\n                'notesCount' => 'Count of related notes',\n            ],\n            'usage' => 'Pass custom field values in the \"custom_fields\" object using field codes as keys. Use \"filter\" param in list tools to filter by custom field values with operators.',\n        ];\n\n        return Response::text(json_encode($schema, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Resources/TaskSchemaResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Resources;\n\nuse App\\Mcp\\Resources\\Concerns\\ResolvesEntitySchema;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\User;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Attributes\\MimeType;\nuse Laravel\\Mcp\\Server\\Attributes\\Uri;\nuse Laravel\\Mcp\\Server\\Resource;\n\n#[Description('Schema for tasks including available custom fields. Read this before creating or updating tasks.')]\n#[Uri('relaticle://schema/task')]\n#[MimeType('application/json')]\nfinal class TaskSchemaResource extends Resource\n{\n    use ResolvesEntitySchema;\n\n    public function shouldRegister(): bool\n    {\n        $token = auth()->user()?->currentAccessToken();\n        if (! $token instanceof PersonalAccessToken) {\n            return true;\n        }\n        if (! $token->getKey()) {\n            return true;\n        }\n\n        return $token->can('read');\n    }\n\n    public function handle(Request $request): Response\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        $schema = [\n            'entity' => 'task',\n            'description' => 'Action items and to-dos.',\n            'fields' => [\n                'title' => ['type' => 'string', 'required' => true],\n            ],\n            'custom_fields' => $this->resolveCustomFields($user, 'task'),\n            'filterable_fields' => $this->resolveFilterableFields($user, 'task'),\n            'relationships' => ['creator', 'assignees', 'companies', 'people', 'opportunities'],\n            'writable_relationships' => [\n                'company_ids' => [\n                    'type' => 'array of string IDs',\n                    'description' => 'Link task to companies on create/update. Omit to leave unchanged, pass [] to remove all.',\n                ],\n                'people_ids' => [\n                    'type' => 'array of string IDs',\n                    'description' => 'Link task to people on create/update. Omit to leave unchanged, pass [] to remove all.',\n                ],\n                'opportunity_ids' => [\n                    'type' => 'array of string IDs',\n                    'description' => 'Link task to opportunities on create/update. Omit to leave unchanged, pass [] to remove all.',\n                ],\n                'assignee_ids' => [\n                    'type' => 'array of user IDs',\n                    'description' => 'Assign team members to this task. Use whoami tool to discover valid user IDs.',\n                ],\n            ],\n            'tools_hint' => 'Use attach-task-to-entities and detach-task-from-entities tools for post-creation relationship management.',\n            'aggregate_includes' => [\n                'assigneesCount' => 'Count of assigned users',\n                'companiesCount' => 'Count of related companies',\n                'peopleCount' => 'Count of related people',\n                'opportunitiesCount' => 'Count of related opportunities',\n            ],\n            'usage' => 'Pass custom field values in the \"custom_fields\" object using field codes as keys. Use \"filter\" param in list tools to filter by custom field values with operators.',\n        ];\n\n        return Response::text(json_encode($schema, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Schema/CustomFieldFilterSchema.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Schema;\n\nuse App\\Enums\\CustomFieldType;\nuse App\\Mcp\\Filters\\CustomFieldSort;\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Spatie\\QueryBuilder\\AllowedSort;\n\nfinal readonly class CustomFieldFilterSchema\n{\n    /** @var array<int, string> */\n    private const array EXCLUDED_TYPES = [\n        CustomFieldType::FILE_UPLOAD->value,\n        CustomFieldType::RECORD->value,\n        CustomFieldType::TEXTAREA->value,\n        CustomFieldType::RICH_EDITOR->value,\n        CustomFieldType::MARKDOWN_EDITOR->value,\n    ];\n\n    /** @var array<int, string> */\n    private const array NUMERIC_OPERATORS = ['eq', 'gt', 'gte', 'lt', 'lte'];\n\n    /** @var array<int, string> */\n    private const array STRING_OPERATORS = ['eq', 'contains'];\n\n    /** @var array<int, string> */\n    private const array BOOLEAN_OPERATORS = ['eq'];\n\n    /** @var array<int, string> */\n    private const array MULTI_OPERATORS = ['has_any'];\n\n    /**\n     * @return array<string, array<string, mixed>>\n     */\n    public function build(User $user, string $entityType): array\n    {\n        $fields = $this->resolveFilterableFields($user, $entityType);\n        $schema = [];\n\n        foreach ($fields as $field) {\n            $operators = $this->operatorsForType($field->type);\n\n            if ($operators === []) {\n                continue;\n            }\n\n            $schema[$field->code] = [\n                'type' => 'object',\n                'description' => $field->name,\n                'properties' => $operators,\n            ];\n        }\n\n        return $schema;\n    }\n\n    /**\n     * @return array<int, AllowedSort>\n     */\n    public function allowedSorts(User $user, string $entityType): array\n    {\n        return collect(array_keys($this->build($user, $entityType)))\n            ->map(fn (string $code): AllowedSort => AllowedSort::custom($code, new CustomFieldSort($entityType)))\n            ->all();\n    }\n\n    /**\n     * @return array<string, array<string, string|array<string, mixed>>>\n     */\n    private function operatorsForType(string $type): array\n    {\n        $fieldType = CustomFieldType::tryFrom($type);\n\n        if ($fieldType === null) {\n            return [];\n        }\n\n        return match ($fieldType) {\n            CustomFieldType::TEXT, CustomFieldType::EMAIL, CustomFieldType::PHONE, CustomFieldType::LINK => $this->buildOperators(self::STRING_OPERATORS, 'string'),\n            CustomFieldType::CURRENCY => $this->buildOperators(self::NUMERIC_OPERATORS, 'number'),\n            CustomFieldType::NUMBER => $this->buildOperators(self::NUMERIC_OPERATORS, 'integer'),\n            CustomFieldType::DATE => $this->buildOperators(self::NUMERIC_OPERATORS, 'string'),\n            CustomFieldType::DATE_TIME => $this->buildOperators(self::NUMERIC_OPERATORS, 'string'),\n            CustomFieldType::CHECKBOX, CustomFieldType::TOGGLE => $this->buildOperators(self::BOOLEAN_OPERATORS, 'boolean'),\n            CustomFieldType::SELECT, CustomFieldType::RADIO, CustomFieldType::TOGGLE_BUTTONS => array_merge(\n                $this->buildOperators(['eq'], 'string'),\n                ['in' => ['type' => 'array', 'items' => ['type' => 'string']]],\n            ),\n            CustomFieldType::MULTI_SELECT, CustomFieldType::CHECKBOX_LIST, CustomFieldType::TAGS_INPUT => $this->buildOperators(self::MULTI_OPERATORS, 'string'),\n            default => [],\n        };\n    }\n\n    /**\n     * @param  array<int, string>  $operators\n     * @return array<string, array<string, string>>\n     */\n    private function buildOperators(array $operators, string $jsonType): array\n    {\n        $result = [];\n\n        foreach ($operators as $op) {\n            $result[$op] = ['type' => $jsonType];\n        }\n\n        return $result;\n    }\n\n    /**\n     * @return Collection<int, CustomField>\n     */\n    private function resolveFilterableFields(User $user, string $entityType): Collection\n    {\n        $teamId = $user->currentTeam->getKey();\n        $cacheKey = \"custom_fields_filter_schema_{$teamId}_{$entityType}\";\n\n        /** @var Collection<int, CustomField> */\n        return Cache::remember($cacheKey, 60, fn (): Collection => CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $teamId)\n            ->where('entity_type', $entityType)\n            ->whereNotIn('type', self::EXCLUDED_TYPES)\n            ->where(fn (Builder $q) => $q->whereNull('settings->encrypted')->orWhere('settings->encrypted', false))\n            ->active()\n            ->select('id', 'code', 'name', 'type')\n            ->get());\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Servers/RelaticleServer.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Servers;\n\nuse App\\Mcp\\Prompts\\CrmOverviewPrompt;\nuse App\\Mcp\\Resources\\CompanySchemaResource;\nuse App\\Mcp\\Resources\\CrmSummaryResource;\nuse App\\Mcp\\Resources\\NoteSchemaResource;\nuse App\\Mcp\\Resources\\OpportunitySchemaResource;\nuse App\\Mcp\\Resources\\PeopleSchemaResource;\nuse App\\Mcp\\Resources\\TaskSchemaResource;\nuse App\\Mcp\\Tools\\Company\\CreateCompanyTool;\nuse App\\Mcp\\Tools\\Company\\DeleteCompanyTool;\nuse App\\Mcp\\Tools\\Company\\GetCompanyTool;\nuse App\\Mcp\\Tools\\Company\\ListCompaniesTool;\nuse App\\Mcp\\Tools\\Company\\UpdateCompanyTool;\nuse App\\Mcp\\Tools\\Note\\AttachNoteToEntitiesTool;\nuse App\\Mcp\\Tools\\Note\\CreateNoteTool;\nuse App\\Mcp\\Tools\\Note\\DeleteNoteTool;\nuse App\\Mcp\\Tools\\Note\\DetachNoteFromEntitiesTool;\nuse App\\Mcp\\Tools\\Note\\GetNoteTool;\nuse App\\Mcp\\Tools\\Note\\ListNotesTool;\nuse App\\Mcp\\Tools\\Note\\UpdateNoteTool;\nuse App\\Mcp\\Tools\\Opportunity\\CreateOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\DeleteOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\GetOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\ListOpportunitiesTool;\nuse App\\Mcp\\Tools\\Opportunity\\UpdateOpportunityTool;\nuse App\\Mcp\\Tools\\People\\CreatePeopleTool;\nuse App\\Mcp\\Tools\\People\\DeletePeopleTool;\nuse App\\Mcp\\Tools\\People\\GetPeopleTool;\nuse App\\Mcp\\Tools\\People\\ListPeopleTool;\nuse App\\Mcp\\Tools\\People\\UpdatePeopleTool;\nuse App\\Mcp\\Tools\\Task\\AttachTaskToEntitiesTool;\nuse App\\Mcp\\Tools\\Task\\CreateTaskTool;\nuse App\\Mcp\\Tools\\Task\\DeleteTaskTool;\nuse App\\Mcp\\Tools\\Task\\DetachTaskFromEntitiesTool;\nuse App\\Mcp\\Tools\\Task\\GetTaskTool;\nuse App\\Mcp\\Tools\\Task\\ListTasksTool;\nuse App\\Mcp\\Tools\\Task\\UpdateTaskTool;\nuse App\\Mcp\\Tools\\WhoAmiTool;\nuse Laravel\\Mcp\\Server;\nuse Laravel\\Mcp\\Server\\Attributes\\Instructions;\nuse Laravel\\Mcp\\Server\\Attributes\\Name;\nuse Laravel\\Mcp\\Server\\Attributes\\Version;\nuse Laravel\\Mcp\\Server\\Prompt;\nuse Laravel\\Mcp\\Server\\Tool;\n\n#[Name('Relaticle CRM')]\n#[Version('1.0.0')]\n#[Instructions('This server provides access to Relaticle CRM data including companies, people, opportunities, tasks, and notes. All operations are scoped to the authenticated user\\'s current team.')]\nfinal class RelaticleServer extends Server\n{\n    public int $defaultPaginationLength = 50;\n\n    /** @var array<int, class-string<Tool>> */\n    protected array $tools = [\n        WhoAmiTool::class,\n        ListCompaniesTool::class,\n        GetCompanyTool::class,\n        CreateCompanyTool::class,\n        UpdateCompanyTool::class,\n        DeleteCompanyTool::class,\n        ListPeopleTool::class,\n        GetPeopleTool::class,\n        CreatePeopleTool::class,\n        UpdatePeopleTool::class,\n        DeletePeopleTool::class,\n        ListOpportunitiesTool::class,\n        GetOpportunityTool::class,\n        CreateOpportunityTool::class,\n        UpdateOpportunityTool::class,\n        DeleteOpportunityTool::class,\n        ListTasksTool::class,\n        GetTaskTool::class,\n        CreateTaskTool::class,\n        UpdateTaskTool::class,\n        DeleteTaskTool::class,\n        AttachTaskToEntitiesTool::class,\n        DetachTaskFromEntitiesTool::class,\n        ListNotesTool::class,\n        GetNoteTool::class,\n        CreateNoteTool::class,\n        UpdateNoteTool::class,\n        DeleteNoteTool::class,\n        AttachNoteToEntitiesTool::class,\n        DetachNoteFromEntitiesTool::class,\n    ];\n\n    /** @var array<int, class-string<Server\\Resource>> */\n    protected array $resources = [\n        CompanySchemaResource::class,\n        PeopleSchemaResource::class,\n        OpportunitySchemaResource::class,\n        TaskSchemaResource::class,\n        NoteSchemaResource::class,\n        CrmSummaryResource::class,\n    ];\n\n    /** @var array<int, class-string<Prompt>> */\n    protected array $prompts = [\n        CrmOverviewPrompt::class,\n    ];\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseAttachTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\BuildsRelationshipResponse;\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\n\nabstract class BaseAttachTool extends Tool\n{\n    use BuildsRelationshipResponse;\n    use ChecksTokenAbility;\n\n    /** @return class-string<Model> */\n    abstract protected function modelClass(): string;\n\n    abstract protected function entityLabel(): string;\n\n    /** @return class-string<JsonResource> */\n    abstract protected function resourceClass(): string;\n\n    /** @return array<string, mixed> */\n    abstract protected function relationshipSchema(JsonSchema $schema): array;\n\n    /** @return array<string, array<int, mixed>> */\n    abstract protected function relationshipRules(User $user): array;\n\n    /** @param array<string, mixed> $data */\n    abstract protected function syncRelationships(Model $model, array $data): void;\n\n    /** @return array<int, string> */\n    protected function relationshipsToLoad(): array\n    {\n        return [];\n    }\n\n    public function schema(JsonSchema $schema): array\n    {\n        $label = strtolower($this->entityLabel());\n\n        return array_merge(\n            ['id' => $schema->string()->description(\"The {$label} ID.\")->required()],\n            $this->relationshipSchema($schema),\n        );\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('update');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $rules = array_merge(\n            ['id' => ['required', 'string']],\n            $this->relationshipRules($user),\n        );\n\n        $validated = $request->validate($rules);\n\n        $relationshipData = collect($validated)->except('id')->filter(fn (mixed $v): bool => is_array($v));\n\n        if ($relationshipData->isEmpty()) {\n            return Response::error('At least one relationship array must be provided.');\n        }\n\n        $modelClass = $this->modelClass();\n        $model = $modelClass::query()->find($validated['id']);\n\n        if (! $model instanceof Model) {\n            return Response::error(\"{$this->entityLabel()} with ID [{$validated['id']}] not found.\");\n        }\n\n        if ($user->cannot('update', $model)) {\n            return Response::error(\"You do not have permission to update this {$this->entityLabel()}.\");\n        }\n\n        $this->syncRelationships($model, $validated);\n\n        return $this->buildRelationshipResponse($model);\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseCreateTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Enums\\CreationSource;\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\n\nabstract class BaseCreateTool extends Tool\n{\n    use ChecksTokenAbility;\n\n    /** @return class-string */\n    abstract protected function actionClass(): string;\n\n    /** @return class-string<JsonResource> */\n    abstract protected function resourceClass(): string;\n\n    abstract protected function entityType(): string;\n\n    /**\n     * @return array<string, mixed>\n     */\n    abstract protected function entitySchema(JsonSchema $schema): array;\n\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    abstract protected function entityRules(User $user): array;\n\n    public function schema(JsonSchema $schema): array\n    {\n        return array_merge(\n            $this->entitySchema($schema),\n            [\n                'custom_fields' => $schema->object()->description('Custom field values as key-value pairs. IMPORTANT: You MUST first read the crm-schema resource to discover valid field codes for this entity type. Unknown field codes will be rejected. Use exact field codes from the schema (e.g. \"job_title\", not \"jobTitle\").'),\n            ],\n        );\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('create');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $rules = array_merge(\n            $this->entityRules($user),\n            new ValidCustomFields($user->currentTeam->getKey(), $this->entityType())->toRules($request->get('custom_fields')),\n        );\n\n        $validated = $request->validate($rules);\n\n        $action = app()->make($this->actionClass());\n        $model = $action->execute($user, $validated, CreationSource::MCP);\n\n        /** @var class-string<JsonResource> $resourceClass */\n        $resourceClass = $this->resourceClass();\n\n        return Response::text(\n            new $resourceClass($model->loadMissing('customFieldValues.customField.options'))->toJson(JSON_PRETTY_PRINT)\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseDeleteTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\n\nabstract class BaseDeleteTool extends Tool\n{\n    use ChecksTokenAbility;\n\n    /** @return class-string<Model> */\n    abstract protected function modelClass(): string;\n\n    /** @return class-string */\n    abstract protected function actionClass(): string;\n\n    abstract protected function entityLabel(): string;\n\n    protected function nameAttribute(): string\n    {\n        return 'name';\n    }\n\n    public function schema(JsonSchema $schema): array\n    {\n        $label = strtolower($this->entityLabel());\n\n        return [\n            'id' => $schema->string()->description(\"The {$label} ID to delete.\")->required(),\n        ];\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('delete');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $validated = $request->validate([\n            'id' => ['required', 'string'],\n        ]);\n\n        $modelClass = $this->modelClass();\n        $model = $modelClass::query()->find($validated['id']);\n\n        if (! $model instanceof Model) {\n            return Response::error(\"{$this->entityLabel()} with ID [{$validated['id']}] not found.\");\n        }\n\n        if ($user->cannot('delete', $model)) {\n            return Response::error(\"You do not have permission to delete this {$this->entityLabel()}.\");\n        }\n\n        $action = app()->make($this->actionClass());\n        $action->execute($user, $model);\n\n        $label = $this->entityLabel();\n        $entityName = $model->{$this->nameAttribute()};\n\n        return Response::text(\"{$label} '{$entityName}' has been deleted.\");\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseDetachTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\BuildsRelationshipResponse;\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\n\nabstract class BaseDetachTool extends Tool\n{\n    use BuildsRelationshipResponse;\n    use ChecksTokenAbility;\n\n    /** @return class-string<Model> */\n    abstract protected function modelClass(): string;\n\n    abstract protected function entityLabel(): string;\n\n    /** @return class-string<JsonResource> */\n    abstract protected function resourceClass(): string;\n\n    /** @return array<string, mixed> */\n    abstract protected function relationshipSchema(JsonSchema $schema): array;\n\n    /** @return array<string, array<int, mixed>> */\n    abstract protected function relationshipRules(User $user): array;\n\n    /** @param array<string, mixed> $data */\n    abstract protected function detachRelationships(Model $model, array $data): void;\n\n    /** @return array<int, string> */\n    protected function relationshipsToLoad(): array\n    {\n        return [];\n    }\n\n    public function schema(JsonSchema $schema): array\n    {\n        $label = strtolower($this->entityLabel());\n\n        return array_merge(\n            ['id' => $schema->string()->description(\"The {$label} ID.\")->required()],\n            $this->relationshipSchema($schema),\n        );\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('update');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $rules = array_merge(\n            ['id' => ['required', 'string']],\n            $this->relationshipRules($user),\n        );\n\n        $validated = $request->validate($rules);\n\n        $relationshipData = collect($validated)->except('id')->filter(fn (mixed $v): bool => is_array($v));\n\n        if ($relationshipData->isEmpty()) {\n            return Response::error('At least one relationship array must be provided.');\n        }\n\n        $modelClass = $this->modelClass();\n        $model = $modelClass::query()->find($validated['id']);\n\n        if (! $model instanceof Model) {\n            return Response::error(\"{$this->entityLabel()} with ID [{$validated['id']}] not found.\");\n        }\n\n        if ($user->cannot('update', $model)) {\n            return Response::error(\"You do not have permission to update this {$this->entityLabel()}.\");\n        }\n\n        $this->detachRelationships($model, $validated);\n\n        return $this->buildRelationshipResponse($model);\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseListTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Mcp\\Tools\\Concerns\\SerializesRelatedModels;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Request as HttpRequest;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\nuse Spatie\\QueryBuilder\\Exceptions\\InvalidQuery;\n\nabstract class BaseListTool extends Tool\n{\n    use ChecksTokenAbility;\n    use SerializesRelatedModels;\n\n    /** @return class-string */\n    abstract protected function actionClass(): string;\n\n    /** @return class-string<JsonResource> */\n    abstract protected function resourceClass(): string;\n\n    abstract protected function searchFilterName(): string;\n\n    /**\n     * @return array<string, mixed>\n     */\n    protected function additionalSchema(JsonSchema $schema): array\n    {\n        return [];\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    protected function additionalFilters(Request $request): array\n    {\n        return [];\n    }\n\n    public function schema(JsonSchema $schema): array\n    {\n        return array_merge(\n            ['search' => $schema->string()->description(\"Search by {$this->searchFilterName()}.\")],\n            $this->additionalSchema($schema),\n            [\n                'filter' => $schema->object()->description('Filter by custom field values. Keys are field codes, values are operator objects (eq, gt, gte, lt, lte, contains, in, has_any).'),\n                'sort' => $schema->object()->description('Sort by field. Properties: field (string), direction (asc|desc).'),\n                'include' => $schema->array()->description('Related records to expand in response.'),\n                'per_page' => $schema->integer()->description('Results per page (default 15, max 100).')->default(15),\n                'page' => $schema->integer()->description('Page number.')->default(1),\n            ],\n        );\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('read');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $httpRequest = $this->buildHttpRequest($request);\n\n        try {\n            $action = app()->make($this->actionClass());\n            $results = $action->execute(\n                user: $user,\n                perPage: max(1, min((int) $request->get('per_page', 15), 100)),\n                page: $request->get('page') ? (int) $request->get('page') : null,\n                request: $httpRequest,\n            );\n        } catch (InvalidQuery $e) {\n            return Response::error($e->getMessage());\n        }\n\n        /** @var class-string<JsonResource> $resourceClass */\n        $resourceClass = $this->resourceClass();\n\n        $collection = $resourceClass::collection($results);\n        $decoded = json_decode($collection->toJson(JSON_PRETTY_PRINT));\n        $items = isset($decoded->data) && is_array($decoded->data)\n            ? $decoded->data\n            : (is_array($decoded) ? $decoded : []);\n\n        $relationshipMap = null;\n\n        foreach (array_keys($items) as $index) {\n            $resultItem = $results[$index] ?? null;\n\n            if ($resultItem === null) {\n                continue;\n            }\n\n            $model = $resultItem instanceof JsonResource ? $resultItem->resource : $resultItem;\n\n            if (! $model instanceof Model) {\n                continue;\n            }\n\n            foreach ($model->getRelations() as $relation => $relatedData) {\n                if ($relation === 'customFieldValues') {\n                    continue;\n                }\n\n                $relationshipMap ??= $this->resolveRelationshipMap($resourceClass, $model);\n\n                $items[$index]->{$relation} = $this->serializeRelation($model, $relation, $relationshipMap);\n            }\n        }\n\n        $response = (object) ['data' => $items];\n\n        if ($results instanceof LengthAwarePaginator) {\n            $response->meta = (object) [\n                'current_page' => $results->currentPage(),\n                'per_page' => $results->perPage(),\n                'total' => $results->total(),\n                'last_page' => $results->lastPage(),\n            ];\n        }\n\n        return Response::text((string) json_encode($response, JSON_PRETTY_PRINT));\n    }\n\n    private function buildHttpRequest(Request $mcpRequest): HttpRequest\n    {\n        $input = [];\n\n        $nativeFilters = array_filter(array_merge(\n            [$this->searchFilterName() => $mcpRequest->get('search')],\n            $this->additionalFilters($mcpRequest),\n        ));\n\n        if ($nativeFilters !== []) {\n            $input['filter'] = $nativeFilters;\n        }\n\n        $customFieldFilters = $mcpRequest->get('filter');\n\n        if (is_array($customFieldFilters) && $customFieldFilters !== []) {\n            $input['filter']['custom_fields'] = $customFieldFilters;\n        }\n\n        $sort = $mcpRequest->get('sort');\n\n        if (is_array($sort) && isset($sort['field'])) {\n            $direction = ($sort['direction'] ?? 'asc') === 'desc' ? '-' : '';\n            $input['sort'] = $direction.$sort['field'];\n        }\n\n        $include = $mcpRequest->get('include');\n\n        if (is_array($include) && $include !== []) {\n            $input['include'] = implode(',', $include);\n        }\n\n        return new HttpRequest($input);\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseShowTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Mcp\\Tools\\Concerns\\SerializesRelatedModels;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[IsReadOnly]\n#[IsIdempotent]\nabstract class BaseShowTool extends Tool\n{\n    use ChecksTokenAbility;\n    use SerializesRelatedModels;\n\n    /** @return class-string<Model> */\n    abstract protected function modelClass(): string;\n\n    /** @return class-string<JsonResource> */\n    abstract protected function resourceClass(): string;\n\n    abstract protected function entityLabel(): string;\n\n    /**\n     * @return array<int, string>\n     */\n    abstract protected function allowedIncludes(): array;\n\n    public function schema(JsonSchema $schema): array\n    {\n        $label = strtolower($this->entityLabel());\n\n        return [\n            'id' => $schema->string()->description(\"The {$label} ID to retrieve.\")->required(),\n            'include' => $schema->array()->description('Related records to expand in response.'),\n        ];\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('read');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $validated = $request->validate([\n            'id' => ['required', 'string'],\n            'include' => ['sometimes', 'array'],\n            'include.*' => ['string'],\n        ]);\n\n        $modelClass = $this->modelClass();\n        $model = $modelClass::query()->find($validated['id']);\n\n        if (! $model instanceof Model) {\n            return Response::error(\"{$this->entityLabel()} with ID [{$validated['id']}] not found.\");\n        }\n\n        if ($user->cannot('view', $model)) {\n            return Response::error(\"You do not have permission to view this {$this->entityLabel()}.\");\n        }\n\n        $model->loadMissing('customFieldValues.customField.options');\n\n        $requestedIncludes = $validated['include'] ?? [];\n        $validIncludes = array_intersect($requestedIncludes, $this->allowedIncludes());\n\n        $relationIncludes = [];\n        $countIncludes = [];\n\n        foreach ($validIncludes as $include) {\n            if (str_ends_with((string) $include, 'Count')) {\n                $countIncludes[] = lcfirst(substr((string) $include, 0, -5));\n            } else {\n                $relationIncludes[] = $include;\n            }\n        }\n\n        if ($relationIncludes !== []) {\n            $model->loadMissing($relationIncludes);\n        }\n\n        if ($countIncludes !== []) {\n            $model->loadCount($countIncludes);\n        }\n\n        /** @var class-string<JsonResource> $resourceClass */\n        $resourceClass = $this->resourceClass();\n\n        $resource = new $resourceClass($model);\n        $json = $resource->toJson(JSON_PRETTY_PRINT);\n\n        if ($relationIncludes === []) {\n            return Response::text($json);\n        }\n\n        $response = json_decode($json);\n        $relationshipMap = $this->resolveRelationshipMap($resourceClass, $model);\n\n        foreach ($relationIncludes as $relation) {\n            if ($model->relationLoaded($relation)) {\n                $response->data->{$relation} = $this->serializeRelation($model, $relation, $relationshipMap);\n            }\n        }\n\n        return Response::text((string) json_encode($response, JSON_PRETTY_PRINT));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/BaseUpdateTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Models\\User;\nuse App\\Rules\\ValidCustomFields;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Tool;\n\nabstract class BaseUpdateTool extends Tool\n{\n    use ChecksTokenAbility;\n\n    /** @return class-string<Model> */\n    abstract protected function modelClass(): string;\n\n    /** @return class-string */\n    abstract protected function actionClass(): string;\n\n    /** @return class-string<JsonResource> */\n    abstract protected function resourceClass(): string;\n\n    abstract protected function entityType(): string;\n\n    abstract protected function entityLabel(): string;\n\n    /**\n     * @return array<string, mixed>\n     */\n    abstract protected function entitySchema(JsonSchema $schema): array;\n\n    /**\n     * @return array<string, array<int, mixed>>\n     */\n    abstract protected function entityRules(User $user): array;\n\n    public function schema(JsonSchema $schema): array\n    {\n        $label = strtolower($this->entityLabel());\n\n        return array_merge(\n            ['id' => $schema->string()->description(\"The {$label} ID to update.\")->required()],\n            $this->entitySchema($schema),\n            [\n                'custom_fields' => $schema->object()->description('Custom field values as key-value pairs. IMPORTANT: You MUST first read the crm-schema resource to discover valid field codes for this entity type. Unknown field codes will be rejected. Use exact field codes from the schema (e.g. \"job_title\", not \"jobTitle\").'),\n            ],\n        );\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('update');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        $rules = array_merge(\n            ['id' => ['required', 'string']],\n            $this->entityRules($user),\n            new ValidCustomFields($user->currentTeam->getKey(), $this->entityType(), isUpdate: true)->toRules($request->get('custom_fields')),\n        );\n\n        $validated = $request->validate($rules);\n\n        $modelClass = $this->modelClass();\n        $model = $modelClass::query()->find($validated['id']);\n\n        if (! $model instanceof Model) {\n            return Response::error(\"{$this->entityLabel()} with ID [{$validated['id']}] not found.\");\n        }\n\n        if ($user->cannot('update', $model)) {\n            return Response::error(\"You do not have permission to update this {$this->entityLabel()}.\");\n        }\n\n        unset($validated['id']);\n\n        $action = app()->make($this->actionClass());\n        $model = $action->execute($user, $model, $validated);\n\n        /** @var class-string<JsonResource> $resourceClass */\n        $resourceClass = $this->resourceClass();\n\n        return Response::text(\n            new $resourceClass($model->loadMissing('customFieldValues.customField.options'))->toJson(JSON_PRETTY_PRINT)\n        );\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Company/CreateCompanyTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Company;\n\nuse App\\Actions\\Company\\CreateCompany;\nuse App\\Http\\Resources\\V1\\CompanyResource;\nuse App\\Mcp\\Tools\\BaseCreateTool;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Create a new company in the CRM. Use the crm-schema resource to discover available custom fields.')]\nfinal class CreateCompanyTool extends BaseCreateTool\n{\n    protected function actionClass(): string\n    {\n        return CreateCompany::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return CompanyResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'company';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'name' => $schema->string()->description('The company name.')->required(),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        return [\n            'name' => ['required', 'string', 'max:255'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Company/DeleteCompanyTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Company;\n\nuse App\\Actions\\Company\\DeleteCompany;\nuse App\\Mcp\\Tools\\BaseDeleteTool;\nuse App\\Models\\Company;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsDestructive;\n\n#[Description('Delete a company from the CRM (soft delete).')]\n#[IsDestructive]\nfinal class DeleteCompanyTool extends BaseDeleteTool\n{\n    protected function modelClass(): string\n    {\n        return Company::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return DeleteCompany::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Company';\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Company/GetCompanyTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Company;\n\nuse App\\Http\\Resources\\V1\\CompanyResource;\nuse App\\Mcp\\Tools\\BaseShowTool;\nuse App\\Models\\Company;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Get a single company by ID with full details and relationships.')]\nfinal class GetCompanyTool extends BaseShowTool\n{\n    protected function modelClass(): string\n    {\n        return Company::class;\n    }\n\n    /** @return class-string<JsonResource> */\n    protected function resourceClass(): string\n    {\n        return CompanyResource::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Company';\n    }\n\n    /** @return array<int, string> */\n    protected function allowedIncludes(): array\n    {\n        return ['creator', 'accountOwner', 'people', 'opportunities', 'peopleCount', 'opportunitiesCount', 'tasksCount', 'notesCount'];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Company/ListCompaniesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Company;\n\nuse App\\Actions\\Company\\ListCompanies;\nuse App\\Http\\Resources\\V1\\CompanyResource;\nuse App\\Mcp\\Tools\\BaseListTool;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[Description('List companies in the CRM with optional search and pagination.')]\n#[IsReadOnly]\n#[IsIdempotent]\nfinal class ListCompaniesTool extends BaseListTool\n{\n    protected function actionClass(): string\n    {\n        return ListCompanies::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return CompanyResource::class;\n    }\n\n    protected function searchFilterName(): string\n    {\n        return 'name';\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Company/UpdateCompanyTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Company;\n\nuse App\\Actions\\Company\\UpdateCompany;\nuse App\\Http\\Resources\\V1\\CompanyResource;\nuse App\\Mcp\\Tools\\BaseUpdateTool;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\n\n#[Description('Update an existing company in the CRM. Use the crm-schema resource to discover available custom fields.')]\n#[IsIdempotent]\nfinal class UpdateCompanyTool extends BaseUpdateTool\n{\n    protected function modelClass(): string\n    {\n        return Company::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return UpdateCompany::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return CompanyResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'company';\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'company';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'name' => $schema->string()->description('The company name.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        return [\n            'name' => ['sometimes', 'string', 'max:255'],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Concerns/BuildsRelationshipResponse.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Mcp\\Response;\n\ntrait BuildsRelationshipResponse\n{\n    protected function buildRelationshipResponse(Model $model): Response\n    {\n        $countRelations = collect($this->relationshipsToLoad())\n            ->filter(fn (string $relation): bool => $model->isRelation($relation))\n            ->all();\n\n        if ($countRelations !== []) {\n            $model->loadCount($countRelations);\n        }\n\n        $model->loadMissing('customFieldValues.customField.options');\n\n        /** @var class-string<JsonResource> $resourceClass */\n        $resourceClass = $this->resourceClass();\n\n        $resource = new $resourceClass($model);\n        $response = json_decode($resource->toJson(JSON_PRETTY_PRINT));\n\n        $counts = new \\stdClass;\n\n        foreach ($countRelations as $relation) {\n            $countKey = Str::snake($relation).'_count';\n\n            if (isset($model->{$countKey})) {\n                $counts->{$relation} = $model->{$countKey};\n            }\n        }\n\n        if ((array) $counts !== []) {\n            $response->relationship_counts = $counts;\n        }\n\n        return Response::text((string) json_encode($response, JSON_PRETTY_PRINT));\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Concerns/ChecksTokenAbility.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Concerns;\n\nuse App\\Models\\PersonalAccessToken;\nuse Laravel\\Sanctum\\Exceptions\\MissingAbilityException;\n\ntrait ChecksTokenAbility\n{\n    /**\n     * @throws MissingAbilityException\n     */\n    protected function ensureTokenCan(string $ability): void\n    {\n        $user = auth()->user();\n        $token = $user?->currentAccessToken();\n\n        if (! $token instanceof PersonalAccessToken || ! $token->getKey()) {\n            return;\n        }\n\n        throw_unless($token->can($ability), MissingAbilityException::class, [$ability]);\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Concerns/SerializesRelatedModels.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Collection as EloquentCollection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Illuminate\\Http\\Resources\\JsonApi\\JsonApiResource;\n\ntrait SerializesRelatedModels\n{\n    /**\n     * Resolve the relationship-to-resource mapping from the parent resource class.\n     *\n     * @param  class-string<JsonResource>  $resourceClass\n     * @return array<string, class-string<JsonApiResource>>\n     */\n    private function resolveRelationshipMap(string $resourceClass, Model $model): array\n    {\n        /** @var JsonApiResource $resourceInstance */\n        $resourceInstance = new $resourceClass($model);\n\n        /** @var array<string, class-string<JsonApiResource>> $map */\n        $map = $resourceInstance->toRelationships(request());\n\n        return $map;\n    }\n\n    /**\n     * Serialize a related model using its API resource, falling back to safe defaults.\n     *\n     * @param  array<string, class-string<JsonApiResource>>  $relationshipMap\n     * @return array<string, mixed>\n     */\n    private function serializeRelatedModel(Model $model, string $relation, array $relationshipMap): array\n    {\n        $relatedResourceClass = $relationshipMap[$relation] ?? null;\n\n        if ($relatedResourceClass !== null) {\n            /** @var JsonApiResource $resource */\n            $resource = new $relatedResourceClass($model);\n\n            /** @var array<string, mixed> $attributes */\n            $attributes = $resource->toAttributes(request());\n\n            // Strip unloaded aggregate counts (whenHas returns MissingValue -> {})\n            $attributes = array_filter(\n                $attributes,\n                fn (mixed $value, string $key): bool => ! str_ends_with($key, '_count') || $model->hasAttribute($key),\n                ARRAY_FILTER_USE_BOTH,\n            );\n\n            return [\n                'id' => $model->getKey(),\n                ...$attributes,\n            ];\n        }\n\n        return $model->only(['id', 'name', 'title', 'email']);\n    }\n\n    /**\n     * Serialize related data (collection, single model, or null) for a given relation.\n     *\n     * @param  array<string, class-string<JsonApiResource>>  $relationshipMap\n     * @return array<int, array<string, mixed>>|array<string, mixed>|null\n     */\n    private function serializeRelation(\n        Model $parentModel,\n        string $relation,\n        array $relationshipMap,\n    ): ?array {\n        $relatedData = $parentModel->getRelation($relation);\n\n        if ($relatedData instanceof EloquentCollection) {\n            return $relatedData\n                ->map(fn (Model $item): array => $this->serializeRelatedModel($item, $relation, $relationshipMap))\n                ->values()\n                ->all();\n        }\n\n        if ($relatedData instanceof Model) {\n            return $this->serializeRelatedModel($relatedData, $relation, $relationshipMap);\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/AttachNoteToEntitiesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Mcp\\Tools\\BaseAttachTool;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Attach a note to companies, people, or opportunities. Adds links without removing existing ones.')]\nfinal class AttachNoteToEntitiesTool extends BaseAttachTool\n{\n    protected function modelClass(): string\n    {\n        return Note::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Note';\n    }\n\n    protected function resourceClass(): string\n    {\n        return NoteResource::class;\n    }\n\n    /** @return array<int, string> */\n    protected function relationshipsToLoad(): array\n    {\n        return ['companies', 'people', 'opportunities'];\n    }\n\n    public function relationshipSchema(JsonSchema $schema): array\n    {\n        return [\n            'company_ids' => $schema->array()->description('Company IDs to attach this note to.'),\n            'people_ids' => $schema->array()->description('People IDs to attach this note to.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to attach this note to.'),\n        ];\n    }\n\n    public function relationshipRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n        ];\n    }\n\n    public function syncRelationships(Model $model, array $data): void\n    {\n        /** @var Note $model */\n        if (isset($data['company_ids'])) {\n            $model->companies()->syncWithoutDetaching($data['company_ids']);\n        }\n\n        if (isset($data['people_ids'])) {\n            $model->people()->syncWithoutDetaching($data['people_ids']);\n        }\n\n        if (isset($data['opportunity_ids'])) {\n            $model->opportunities()->syncWithoutDetaching($data['opportunity_ids']);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/CreateNoteTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Actions\\Note\\CreateNote;\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Mcp\\Tools\\BaseCreateTool;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Create a new note in the CRM. Use the crm-schema resource to discover available custom fields.')]\nfinal class CreateNoteTool extends BaseCreateTool\n{\n    protected function actionClass(): string\n    {\n        return CreateNote::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return NoteResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'note';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'title' => $schema->string()->description('The note title.')->required(),\n            'company_ids' => $schema->array()->description('Company IDs to link this note to.'),\n            'people_ids' => $schema->array()->description('People IDs to link this note to.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to link this note to.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'title' => ['required', 'string', 'max:255'],\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/DeleteNoteTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Actions\\Note\\DeleteNote;\nuse App\\Mcp\\Tools\\BaseDeleteTool;\nuse App\\Models\\Note;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsDestructive;\n\n#[Description('Delete a note from the CRM (soft delete).')]\n#[IsDestructive]\nfinal class DeleteNoteTool extends BaseDeleteTool\n{\n    protected function modelClass(): string\n    {\n        return Note::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return DeleteNote::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Note';\n    }\n\n    protected function nameAttribute(): string\n    {\n        return 'title';\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/DetachNoteFromEntitiesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Mcp\\Tools\\BaseDetachTool;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Detach a note from companies, people, or opportunities. Removes specified links.')]\nfinal class DetachNoteFromEntitiesTool extends BaseDetachTool\n{\n    protected function modelClass(): string\n    {\n        return Note::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Note';\n    }\n\n    protected function resourceClass(): string\n    {\n        return NoteResource::class;\n    }\n\n    /** @return array<int, string> */\n    protected function relationshipsToLoad(): array\n    {\n        return ['companies', 'people', 'opportunities'];\n    }\n\n    public function relationshipSchema(JsonSchema $schema): array\n    {\n        return [\n            'company_ids' => $schema->array()->description('Company IDs to detach from this note.'),\n            'people_ids' => $schema->array()->description('People IDs to detach from this note.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to detach from this note.'),\n        ];\n    }\n\n    public function relationshipRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n        ];\n    }\n\n    public function detachRelationships(Model $model, array $data): void\n    {\n        /** @var Note $model */\n        if (isset($data['company_ids'])) {\n            $model->companies()->detach($data['company_ids']);\n        }\n\n        if (isset($data['people_ids'])) {\n            $model->people()->detach($data['people_ids']);\n        }\n\n        if (isset($data['opportunity_ids'])) {\n            $model->opportunities()->detach($data['opportunity_ids']);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/GetNoteTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Mcp\\Tools\\BaseShowTool;\nuse App\\Models\\Note;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Get a single note by ID with full details and relationships.')]\nfinal class GetNoteTool extends BaseShowTool\n{\n    protected function modelClass(): string\n    {\n        return Note::class;\n    }\n\n    /** @return class-string<JsonResource> */\n    protected function resourceClass(): string\n    {\n        return NoteResource::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Note';\n    }\n\n    /** @return array<int, string> */\n    protected function allowedIncludes(): array\n    {\n        return ['creator', 'companies', 'people', 'opportunities', 'companiesCount', 'peopleCount', 'opportunitiesCount'];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/ListNotesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Actions\\Note\\ListNotes;\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Mcp\\Tools\\BaseListTool;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[Description('List notes in the CRM with optional search and pagination.')]\n#[IsReadOnly]\n#[IsIdempotent]\nfinal class ListNotesTool extends BaseListTool\n{\n    protected function actionClass(): string\n    {\n        return ListNotes::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return NoteResource::class;\n    }\n\n    protected function searchFilterName(): string\n    {\n        return 'title';\n    }\n\n    protected function additionalSchema(JsonSchema $schema): array\n    {\n        return [\n            'notable_type' => $schema->string()->description('Filter by related entity type: company, people, or opportunity.'),\n            'notable_id' => $schema->string()->description('Filter by related entity ID (use with notable_type for best results).'),\n        ];\n    }\n\n    protected function additionalFilters(Request $request): array\n    {\n        return [\n            'notable_type' => $request->get('notable_type'),\n            'notable_id' => $request->get('notable_id'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Note/UpdateNoteTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Note;\n\nuse App\\Actions\\Note\\UpdateNote;\nuse App\\Http\\Resources\\V1\\NoteResource;\nuse App\\Mcp\\Tools\\BaseUpdateTool;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\n\n#[Description('Update an existing note in the CRM. Use the crm-schema resource to discover available custom fields.')]\n#[IsIdempotent]\nfinal class UpdateNoteTool extends BaseUpdateTool\n{\n    protected function modelClass(): string\n    {\n        return Note::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return UpdateNote::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return NoteResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'note';\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'note';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'title' => $schema->string()->description('The note title.'),\n            'company_ids' => $schema->array()->description('Company IDs to link. Omit to leave unchanged, pass [] to remove all.'),\n            'people_ids' => $schema->array()->description('People IDs to link. Omit to leave unchanged, pass [] to remove all.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to link. Omit to leave unchanged, pass [] to remove all.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'title' => ['sometimes', 'string', 'max:255'],\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Opportunity/CreateOpportunityTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Opportunity;\n\nuse App\\Actions\\Opportunity\\CreateOpportunity;\nuse App\\Http\\Resources\\V1\\OpportunityResource;\nuse App\\Mcp\\Tools\\BaseCreateTool;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Create a new opportunity (deal) in the CRM. Use the crm-schema resource to discover available custom fields.')]\nfinal class CreateOpportunityTool extends BaseCreateTool\n{\n    protected function actionClass(): string\n    {\n        return CreateOpportunity::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return OpportunityResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'opportunity';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'name' => $schema->string()->description('The opportunity name.')->required(),\n            'company_id' => $schema->string()->description('The associated company ID.'),\n            'contact_id' => $schema->string()->description('The associated contact (person) ID.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'name' => ['required', 'string', 'max:255'],\n            'company_id' => ['sometimes', 'nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'contact_id' => ['sometimes', 'nullable', 'string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Opportunity/DeleteOpportunityTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Opportunity;\n\nuse App\\Actions\\Opportunity\\DeleteOpportunity;\nuse App\\Mcp\\Tools\\BaseDeleteTool;\nuse App\\Models\\Opportunity;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsDestructive;\n\n#[Description('Delete an opportunity (deal) from the CRM (soft delete).')]\n#[IsDestructive]\nfinal class DeleteOpportunityTool extends BaseDeleteTool\n{\n    protected function modelClass(): string\n    {\n        return Opportunity::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return DeleteOpportunity::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Opportunity';\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Opportunity/GetOpportunityTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Opportunity;\n\nuse App\\Http\\Resources\\V1\\OpportunityResource;\nuse App\\Mcp\\Tools\\BaseShowTool;\nuse App\\Models\\Opportunity;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Get a single opportunity by ID with full details and relationships.')]\nfinal class GetOpportunityTool extends BaseShowTool\n{\n    protected function modelClass(): string\n    {\n        return Opportunity::class;\n    }\n\n    /** @return class-string<JsonResource> */\n    protected function resourceClass(): string\n    {\n        return OpportunityResource::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Opportunity';\n    }\n\n    /** @return array<int, string> */\n    protected function allowedIncludes(): array\n    {\n        return ['creator', 'company', 'contact', 'tasksCount', 'notesCount'];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Opportunity/ListOpportunitiesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Opportunity;\n\nuse App\\Actions\\Opportunity\\ListOpportunities;\nuse App\\Http\\Resources\\V1\\OpportunityResource;\nuse App\\Mcp\\Tools\\BaseListTool;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[Description('List opportunities (deals) in the CRM with optional search and pagination.')]\n#[IsReadOnly]\n#[IsIdempotent]\nfinal class ListOpportunitiesTool extends BaseListTool\n{\n    protected function actionClass(): string\n    {\n        return ListOpportunities::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return OpportunityResource::class;\n    }\n\n    protected function searchFilterName(): string\n    {\n        return 'name';\n    }\n\n    protected function additionalSchema(JsonSchema $schema): array\n    {\n        return [\n            'company_id' => $schema->string()->description('Filter by company ID.'),\n            'contact_id' => $schema->string()->description('Filter by contact (person) ID.'),\n        ];\n    }\n\n    protected function additionalFilters(Request $request): array\n    {\n        return [\n            'company_id' => $request->get('company_id'),\n            'contact_id' => $request->get('contact_id'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Opportunity/UpdateOpportunityTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Opportunity;\n\nuse App\\Actions\\Opportunity\\UpdateOpportunity;\nuse App\\Http\\Resources\\V1\\OpportunityResource;\nuse App\\Mcp\\Tools\\BaseUpdateTool;\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\n\n#[Description('Update an existing opportunity (deal) in the CRM. Use the crm-schema resource to discover available custom fields.')]\n#[IsIdempotent]\nfinal class UpdateOpportunityTool extends BaseUpdateTool\n{\n    protected function modelClass(): string\n    {\n        return Opportunity::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return UpdateOpportunity::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return OpportunityResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'opportunity';\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'opportunity';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'name' => $schema->string()->description('The opportunity name.'),\n            'company_id' => $schema->string()->description('The associated company ID.'),\n            'contact_id' => $schema->string()->description('The associated contact (person) ID.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'name' => ['sometimes', 'string', 'max:255'],\n            'company_id' => ['sometimes', 'nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'contact_id' => ['sometimes', 'nullable', 'string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/People/CreatePeopleTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\People;\n\nuse App\\Actions\\People\\CreatePeople;\nuse App\\Http\\Resources\\V1\\PeopleResource;\nuse App\\Mcp\\Tools\\BaseCreateTool;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Create a new person (contact) in the CRM. Use the crm-schema resource to discover available custom fields.')]\nfinal class CreatePeopleTool extends BaseCreateTool\n{\n    protected function actionClass(): string\n    {\n        return CreatePeople::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return PeopleResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'people';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'name' => $schema->string()->description('The person\\'s full name.')->required(),\n            'company_id' => $schema->string()->description('The company this person belongs to.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'name' => ['required', 'string', 'max:255'],\n            'company_id' => ['sometimes', 'nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/People/DeletePeopleTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\People;\n\nuse App\\Actions\\People\\DeletePeople;\nuse App\\Mcp\\Tools\\BaseDeleteTool;\nuse App\\Models\\People;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsDestructive;\n\n#[Description('Delete a person (contact) from the CRM (soft delete).')]\n#[IsDestructive]\nfinal class DeletePeopleTool extends BaseDeleteTool\n{\n    protected function modelClass(): string\n    {\n        return People::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return DeletePeople::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Person';\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/People/GetPeopleTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\People;\n\nuse App\\Http\\Resources\\V1\\PeopleResource;\nuse App\\Mcp\\Tools\\BaseShowTool;\nuse App\\Models\\People;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Get a single person by ID with full details and relationships.')]\nfinal class GetPeopleTool extends BaseShowTool\n{\n    protected function modelClass(): string\n    {\n        return People::class;\n    }\n\n    /** @return class-string<JsonResource> */\n    protected function resourceClass(): string\n    {\n        return PeopleResource::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Person';\n    }\n\n    /** @return array<int, string> */\n    protected function allowedIncludes(): array\n    {\n        return ['creator', 'company', 'tasksCount', 'notesCount'];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/People/ListPeopleTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\People;\n\nuse App\\Actions\\People\\ListPeople;\nuse App\\Http\\Resources\\V1\\PeopleResource;\nuse App\\Mcp\\Tools\\BaseListTool;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[Description('List people (contacts) in the CRM with optional search and pagination.')]\n#[IsReadOnly]\n#[IsIdempotent]\nfinal class ListPeopleTool extends BaseListTool\n{\n    protected function actionClass(): string\n    {\n        return ListPeople::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return PeopleResource::class;\n    }\n\n    protected function searchFilterName(): string\n    {\n        return 'name';\n    }\n\n    protected function additionalSchema(JsonSchema $schema): array\n    {\n        return [\n            'company_id' => $schema->string()->description('Filter by company ID.'),\n        ];\n    }\n\n    protected function additionalFilters(Request $request): array\n    {\n        return [\n            'company_id' => $request->get('company_id'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/People/UpdatePeopleTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\People;\n\nuse App\\Actions\\People\\UpdatePeople;\nuse App\\Http\\Resources\\V1\\PeopleResource;\nuse App\\Mcp\\Tools\\BaseUpdateTool;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\n\n#[Description('Update an existing person (contact) in the CRM. Use the crm-schema resource to discover available custom fields.')]\n#[IsIdempotent]\nfinal class UpdatePeopleTool extends BaseUpdateTool\n{\n    protected function modelClass(): string\n    {\n        return People::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return UpdatePeople::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return PeopleResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'people';\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'person';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'name' => $schema->string()->description('The person\\'s full name.'),\n            'company_id' => $schema->string()->description('The company this person belongs to.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        $teamId = $user->currentTeam->getKey();\n\n        return [\n            'name' => ['sometimes', 'string', 'max:255'],\n            'company_id' => ['sometimes', 'nullable', 'string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/AttachTaskToEntitiesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Mcp\\Tools\\BaseAttachTool;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Attach a task to companies, people, opportunities, or assign to users. Adds links without removing existing ones.')]\nfinal class AttachTaskToEntitiesTool extends BaseAttachTool\n{\n    protected function modelClass(): string\n    {\n        return Task::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Task';\n    }\n\n    protected function resourceClass(): string\n    {\n        return TaskResource::class;\n    }\n\n    /** @return array<int, string> */\n    protected function relationshipsToLoad(): array\n    {\n        return ['companies', 'people', 'opportunities', 'assignees'];\n    }\n\n    public function relationshipSchema(JsonSchema $schema): array\n    {\n        return [\n            'company_ids' => $schema->array()->description('Company IDs to attach this task to.'),\n            'people_ids' => $schema->array()->description('People IDs to attach this task to.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to attach this task to.'),\n            'assignee_ids' => $schema->array()->description('User IDs to assign this task to. Use whoami tool to discover valid user IDs.'),\n        ];\n    }\n\n    public function relationshipRules(User $user): array\n    {\n        /** @var Team $team */\n        $team = $user->currentTeam;\n        $teamId = $team->getKey();\n        $teamMemberIds = $team->allUsers()->pluck('id')->all();\n\n        return [\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n            'assignee_ids' => ['sometimes', 'array'],\n            'assignee_ids.*' => ['string', Rule::in($teamMemberIds)],\n        ];\n    }\n\n    public function syncRelationships(Model $model, array $data): void\n    {\n        /** @var Task $model */\n        if (isset($data['company_ids'])) {\n            $model->companies()->syncWithoutDetaching($data['company_ids']);\n        }\n\n        if (isset($data['people_ids'])) {\n            $model->people()->syncWithoutDetaching($data['people_ids']);\n        }\n\n        if (isset($data['opportunity_ids'])) {\n            $model->opportunities()->syncWithoutDetaching($data['opportunity_ids']);\n        }\n\n        if (isset($data['assignee_ids'])) {\n            $model->assignees()->syncWithoutDetaching($data['assignee_ids']);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/CreateTaskTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Actions\\Task\\CreateTask;\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Mcp\\Tools\\BaseCreateTool;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Create a new task in the CRM. Use the crm-schema resource to discover available custom fields.')]\nfinal class CreateTaskTool extends BaseCreateTool\n{\n    protected function actionClass(): string\n    {\n        return CreateTask::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return TaskResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'task';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'title' => $schema->string()->description('The task title.')->required(),\n            'company_ids' => $schema->array()->description('Company IDs to link this task to.'),\n            'people_ids' => $schema->array()->description('People IDs to link this task to.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to link this task to.'),\n            'assignee_ids' => $schema->array()->description('User IDs to assign this task to. Use whoami tool to discover valid user IDs.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        /** @var Team $team */\n        $team = $user->currentTeam;\n        $teamId = $team->getKey();\n        $teamMemberIds = $team->allUsers()->pluck('id')->all();\n\n        return [\n            'title' => ['required', 'string', 'max:255'],\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n            'assignee_ids' => ['sometimes', 'array'],\n            'assignee_ids.*' => ['string', Rule::in($teamMemberIds)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/DeleteTaskTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Actions\\Task\\DeleteTask;\nuse App\\Mcp\\Tools\\BaseDeleteTool;\nuse App\\Models\\Task;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsDestructive;\n\n#[Description('Delete a task from the CRM (soft delete).')]\n#[IsDestructive]\nfinal class DeleteTaskTool extends BaseDeleteTool\n{\n    protected function modelClass(): string\n    {\n        return Task::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return DeleteTask::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Task';\n    }\n\n    protected function nameAttribute(): string\n    {\n        return 'title';\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/DetachTaskFromEntitiesTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Mcp\\Tools\\BaseDetachTool;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Detach a task from companies, people, opportunities, or unassign users. Removes specified links.')]\nfinal class DetachTaskFromEntitiesTool extends BaseDetachTool\n{\n    protected function modelClass(): string\n    {\n        return Task::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Task';\n    }\n\n    protected function resourceClass(): string\n    {\n        return TaskResource::class;\n    }\n\n    /** @return array<int, string> */\n    protected function relationshipsToLoad(): array\n    {\n        return ['companies', 'people', 'opportunities', 'assignees'];\n    }\n\n    public function relationshipSchema(JsonSchema $schema): array\n    {\n        return [\n            'company_ids' => $schema->array()->description('Company IDs to detach from this task.'),\n            'people_ids' => $schema->array()->description('People IDs to detach from this task.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to detach from this task.'),\n            'assignee_ids' => $schema->array()->description('User IDs to unassign from this task.'),\n        ];\n    }\n\n    public function relationshipRules(User $user): array\n    {\n        /** @var Team $team */\n        $team = $user->currentTeam;\n        $teamId = $team->getKey();\n        $teamMemberIds = $team->allUsers()->pluck('id')->all();\n\n        return [\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n            'assignee_ids' => ['sometimes', 'array'],\n            'assignee_ids.*' => ['string', Rule::in($teamMemberIds)],\n        ];\n    }\n\n    public function detachRelationships(Model $model, array $data): void\n    {\n        /** @var Task $model */\n        if (isset($data['company_ids'])) {\n            $model->companies()->detach($data['company_ids']);\n        }\n\n        if (isset($data['people_ids'])) {\n            $model->people()->detach($data['people_ids']);\n        }\n\n        if (isset($data['opportunity_ids'])) {\n            $model->opportunities()->detach($data['opportunity_ids']);\n        }\n\n        if (isset($data['assignee_ids'])) {\n            $model->assignees()->detach($data['assignee_ids']);\n        }\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/GetTaskTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Mcp\\Tools\\BaseShowTool;\nuse App\\Models\\Task;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\n\n#[Description('Get a single task by ID with full details and relationships.')]\nfinal class GetTaskTool extends BaseShowTool\n{\n    protected function modelClass(): string\n    {\n        return Task::class;\n    }\n\n    /** @return class-string<JsonResource> */\n    protected function resourceClass(): string\n    {\n        return TaskResource::class;\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'Task';\n    }\n\n    /** @return array<int, string> */\n    protected function allowedIncludes(): array\n    {\n        return ['creator', 'assignees', 'companies', 'people', 'opportunities', 'assigneesCount', 'companiesCount', 'peopleCount', 'opportunitiesCount'];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/ListTasksTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Actions\\Task\\ListTasks;\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Mcp\\Tools\\BaseListTool;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[Description('List tasks in the CRM with optional search and pagination.')]\n#[IsReadOnly]\n#[IsIdempotent]\nfinal class ListTasksTool extends BaseListTool\n{\n    protected function actionClass(): string\n    {\n        return ListTasks::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return TaskResource::class;\n    }\n\n    protected function searchFilterName(): string\n    {\n        return 'title';\n    }\n\n    protected function additionalSchema(JsonSchema $schema): array\n    {\n        return [\n            'assigned_to_me' => $schema->boolean()->description('Filter tasks assigned to the current user.'),\n            'company_id' => $schema->string()->description('Filter tasks linked to a specific company.'),\n            'people_id' => $schema->string()->description('Filter tasks linked to a specific person.'),\n            'opportunity_id' => $schema->string()->description('Filter tasks linked to a specific opportunity.'),\n        ];\n    }\n\n    protected function additionalFilters(Request $request): array\n    {\n        return [\n            'assigned_to_me' => $request->get('assigned_to_me') ? '1' : null,\n            'company_id' => $request->get('company_id'),\n            'people_id' => $request->get('people_id'),\n            'opportunity_id' => $request->get('opportunity_id'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/Task/UpdateTaskTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools\\Task;\n\nuse App\\Actions\\Task\\UpdateTask;\nuse App\\Http\\Resources\\V1\\TaskResource;\nuse App\\Mcp\\Tools\\BaseUpdateTool;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\n\n#[Description('Update an existing task in the CRM. Use the crm-schema resource to discover available custom fields.')]\n#[IsIdempotent]\nfinal class UpdateTaskTool extends BaseUpdateTool\n{\n    protected function modelClass(): string\n    {\n        return Task::class;\n    }\n\n    protected function actionClass(): string\n    {\n        return UpdateTask::class;\n    }\n\n    protected function resourceClass(): string\n    {\n        return TaskResource::class;\n    }\n\n    protected function entityType(): string\n    {\n        return 'task';\n    }\n\n    protected function entityLabel(): string\n    {\n        return 'task';\n    }\n\n    protected function entitySchema(JsonSchema $schema): array\n    {\n        return [\n            'title' => $schema->string()->description('The task title.'),\n            'company_ids' => $schema->array()->description('Company IDs to link. Omit to leave unchanged, pass [] to remove all.'),\n            'people_ids' => $schema->array()->description('People IDs to link. Omit to leave unchanged, pass [] to remove all.'),\n            'opportunity_ids' => $schema->array()->description('Opportunity IDs to link. Omit to leave unchanged, pass [] to remove all.'),\n            'assignee_ids' => $schema->array()->description('User IDs to assign this task to. Use whoami tool to discover valid user IDs.'),\n        ];\n    }\n\n    protected function entityRules(User $user): array\n    {\n        /** @var Team $team */\n        $team = $user->currentTeam;\n        $teamId = $team->getKey();\n        $teamMemberIds = $team->allUsers()->pluck('id')->all();\n\n        return [\n            'title' => ['sometimes', 'string', 'max:255'],\n            'company_ids' => ['sometimes', 'array'],\n            'company_ids.*' => ['string', Rule::exists('companies', 'id')->where('team_id', $teamId)],\n            'people_ids' => ['sometimes', 'array'],\n            'people_ids.*' => ['string', Rule::exists('people', 'id')->where('team_id', $teamId)],\n            'opportunity_ids' => ['sometimes', 'array'],\n            'opportunity_ids.*' => ['string', Rule::exists('opportunities', 'id')->where('team_id', $teamId)],\n            'assignee_ids' => ['sometimes', 'array'],\n            'assignee_ids.*' => ['string', Rule::in($teamMemberIds)],\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Mcp/Tools/WhoAmiTool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Mcp\\Tools;\n\nuse App\\Mcp\\Tools\\Concerns\\ChecksTokenAbility;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\JsonSchema\\JsonSchema;\nuse Laravel\\Mcp\\Request;\nuse Laravel\\Mcp\\Response;\nuse Laravel\\Mcp\\Server\\Attributes\\Description;\nuse Laravel\\Mcp\\Server\\Tool;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsIdempotent;\nuse Laravel\\Mcp\\Server\\Tools\\Annotations\\IsReadOnly;\n\n#[Description('Get information about the authenticated user, current team, team members, and token abilities.')]\n#[IsReadOnly]\n#[IsIdempotent]\nfinal class WhoAmiTool extends Tool\n{\n    use ChecksTokenAbility;\n\n    public function schema(JsonSchema $schema): array\n    {\n        return [];\n    }\n\n    public function handle(Request $request): Response\n    {\n        $this->ensureTokenCan('read');\n\n        /** @var User $user */\n        $user = auth()->user();\n\n        /** @var Team $team */\n        $team = $user->currentTeam;\n\n        $tokenAbilities = ['*'];\n        $token = $user->currentAccessToken();\n\n        if ($token instanceof PersonalAccessToken && $token->getKey()) {\n            $tokenAbilities = $token->abilities;\n        }\n\n        $teamMembers = $team->allUsers()->map(fn (User $member): array => [\n            'id' => $member->id,\n            'name' => $member->name,\n            'email' => $member->email,\n        ])->values()->all();\n\n        $result = [\n            'user' => [\n                'id' => $user->id,\n                'name' => $user->name,\n                'email' => $user->email,\n            ],\n            'team' => [\n                'id' => $team->id,\n                'name' => $team->name,\n            ],\n            'team_members' => $teamMembers,\n            'token_abilities' => $tokenAbilities,\n        ];\n\n        return Response::text(json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));\n    }\n}\n"
  },
  {
    "path": "app/Models/AiSummary.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasTeam;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphTo;\n\nfinal class AiSummary extends Model\n{\n    /** @use HasFactory<Factory<self>> */\n    use HasFactory;\n\n    use HasTeam;\n    use HasUlids;\n\n    /**\n     * @var list<string>\n     */\n    protected $fillable = [\n        'team_id',\n        'summarizable_type',\n        'summarizable_id',\n        'summary',\n        'model_used',\n        'prompt_tokens',\n        'completion_tokens',\n    ];\n\n    /**\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'prompt_tokens' => 'integer',\n            'completion_tokens' => 'integer',\n        ];\n    }\n\n    /**\n     * @return MorphTo<Model, $this>\n     */\n    public function summarizable(): MorphTo\n    {\n        return $this->morphTo();\n    }\n}\n"
  },
  {
    "path": "app/Models/Company.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Concerns\\BelongsToTeamCreator;\nuse App\\Models\\Concerns\\HasAiSummary;\nuse App\\Models\\Concerns\\HasCreator;\nuse App\\Models\\Concerns\\HasNotes;\nuse App\\Models\\Concerns\\HasTeam;\nuse App\\Observers\\CompanyObserver;\nuse App\\Services\\AvatarService;\nuse Database\\Factories\\CompanyFactory;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphToMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Carbon;\nuse Relaticle\\CustomFields\\Models\\Concerns\\UsesCustomFields;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\nuse Spatie\\MediaLibrary\\HasMedia;\nuse Spatie\\MediaLibrary\\InteractsWithMedia;\n\n/**\n * @property string $name\n * @property Carbon|null $deleted_at\n * @property CreationSource $creation_source\n * @property-read string $created_by\n */\n#[ObservedBy(CompanyObserver::class)]\nfinal class Company extends Model implements HasCustomFields, HasMedia\n{\n    use BelongsToTeamCreator;\n    use HasAiSummary;\n    use HasCreator;\n\n    /** @use HasFactory<CompanyFactory> */\n    use HasFactory;\n\n    use HasNotes;\n    use HasTeam;\n    use HasUlids;\n    use InteractsWithMedia;\n    use SoftDeletes;\n    use UsesCustomFields;\n\n    /**\n     * @var list<string>\n     */\n    protected $fillable = [\n        'name',\n        'creation_source',\n    ];\n\n    /**\n     * @var array<string, mixed>\n     */\n    protected $attributes = [\n        'creation_source' => CreationSource::WEB,\n    ];\n\n    /**\n     * The attributes that should be cast.\n     *\n     * @return array<string, string|class-string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'creation_source' => CreationSource::class,\n        ];\n    }\n\n    protected function getLogoAttribute(): string\n    {\n        $logo = $this->getFirstMediaUrl('logo');\n\n        return $logo === '' || $logo === '0' ? resolve(AvatarService::class)->generateAuto(name: $this->name) : $logo;\n    }\n\n    /**\n     * Team member responsible for managing the company account\n     *\n     * @return BelongsTo<User, $this>\n     */\n    public function accountOwner(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'account_owner_id');\n    }\n\n    /**\n     * @return HasMany<People, $this>\n     */\n    public function people(): HasMany\n    {\n        return $this->hasMany(People::class);\n    }\n\n    /**\n     * @return HasMany<Opportunity, $this>\n     */\n    public function opportunities(): HasMany\n    {\n        return $this->hasMany(Opportunity::class);\n    }\n\n    /**\n     * @return MorphToMany<Task, $this>\n     */\n    public function tasks(): MorphToMany\n    {\n        return $this->morphToMany(Task::class, 'taskable');\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/BelongsToTeamCreator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Automatically sets creator_id and team_id on model creation\n * when an authenticated user is present.\n *\n * @mixin Model\n */\ntrait BelongsToTeamCreator\n{\n    public static function bootBelongsToTeamCreator(): void\n    {\n        static::creating(function (self $model): void {\n            if (auth()->check()) {\n                /** @var User $user */\n                $user = auth()->user();\n                $model->creator_id ??= $user->getKey();\n                $model->team_id ??= $user->currentTeam->getKey();\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasAiSummary.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\AiSummary;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphOne;\n\n/**\n * Trait for models that can have AI-generated summaries.\n */\ntrait HasAiSummary\n{\n    /**\n     * Get the AI summary for this record.\n     *\n     * @return MorphOne<AiSummary, $this>\n     */\n    public function aiSummary(): MorphOne\n    {\n        return $this->morphOne(AiSummary::class, 'summarizable');\n    }\n\n    /**\n     * Invalidate (delete) the cached AI summary for this record.\n     */\n    public function invalidateAiSummary(): void\n    {\n        $this->aiSummary()->delete();\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasCreator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Casts\\Attribute;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property-read string $created_by\n */\ntrait HasCreator\n{\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function creator(): BelongsTo\n    {\n        return $this->belongsTo(User::class, 'creator_id');\n    }\n\n    /**\n     * Determine if the system created the record.\n     */\n    public function isSystemCreated(): bool\n    {\n        return $this->creation_source === CreationSource::SYSTEM;\n    }\n\n    /**\n     * @return Attribute<string, never>\n     */\n    protected function createdBy(): Attribute\n    {\n        return Attribute::make(\n            get: fn (): string => $this->creation_source === CreationSource::SYSTEM ?\n                '⊙ System' :\n                $this->creator->name ?? 'Unknown',\n        );\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasNotes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Note;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphToMany;\n\ntrait HasNotes\n{\n    /**\n     * @return MorphToMany<Note, $this>\n     */\n    public function notes(): MorphToMany\n    {\n        return $this->morphToMany(Note::class, 'noteable');\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasProfilePhoto.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Services\\AvatarService;\nuse Illuminate\\Database\\Eloquent\\Casts\\Attribute;\nuse Illuminate\\Support\\Facades\\Storage;\n\ntrait HasProfilePhoto\n{\n    /**\n     * Update the user's profile photo.\n     */\n    public function updateProfilePhoto(string $photo): void\n    {\n        tap($this->profile_photo_path, function ($previous) use ($photo): void {\n            $this->forceFill(['profile_photo_path' => $photo])->save();\n\n            if ($previous) {\n                Storage::disk($this->profilePhotoDisk())->delete($previous);\n            }\n        });\n    }\n\n    /**\n     * Delete the user's profile photo.\n     */\n    public function deleteProfilePhoto(): void\n    {\n        if (is_null($this->profile_photo_path)) {\n            return;\n        }\n\n        Storage::disk($this->profilePhotoDisk())->delete($this->profile_photo_path);\n\n        $this->forceFill([\n            'profile_photo_path' => null,\n        ])->save();\n    }\n\n    /**\n     * Get the URL to the user's profile photo.\n     *\n     * @return Attribute<string, never>\n     */\n    protected function profilePhotoUrl(): Attribute\n    {\n        return Attribute::get(fn (): string => $this->profile_photo_path\n            ? Storage::disk($this->profilePhotoDisk())->url($this->profile_photo_path)\n            : $this->defaultProfilePhotoUrl());\n    }\n\n    /**\n     * Get the default profile photo URL if no profile photo has been uploaded.\n     */\n    protected function defaultProfilePhotoUrl(): string\n    {\n        $name = trim(\n            collect(explode(' ', $this->name))->map(fn ($segment): string => mb_substr($segment, 0, 1))->join(' ')\n        );\n\n        return 'https://ui-avatars.com/api/?name='.urlencode($name).'&color=7F9CF5&background=EBF4FF';\n    }\n\n    /**\n     * Get the disk that profile photos should be stored on.\n     */\n    protected function profilePhotoDisk(): string\n    {\n        return config('jetstream.profile_photo_disk', 'public');\n    }\n\n    protected function getAvatarAttribute(): string\n    {\n        return $this->getFilamentAvatarUrl();\n    }\n\n    public function getFilamentAvatarUrl(): string\n    {\n        return $this->profile_photo_path\n            ? Storage::disk($this->profilePhotoDisk())->url($this->profile_photo_path)\n            : resolve(AvatarService::class)->generate($this->name);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/HasTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\nuse App\\Models\\Team;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\ntrait HasTeam\n{\n    /**\n     * @return BelongsTo<Team, $this>\n     */\n    public function team(): BelongsTo\n    {\n        return $this->belongsTo(Team::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Concerns/InvalidatesRelatedAiSummaries.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Concerns;\n\n/**\n * Trait for models that are related to summarizable records (Notes, Tasks).\n * When these records change, the summaries of their related entities should be invalidated.\n */\ntrait InvalidatesRelatedAiSummaries\n{\n    /**\n     * Invalidate AI summaries for all related summarizable records.\n     */\n    public function invalidateRelatedSummaries(): void\n    {\n        foreach (['companies', 'people', 'opportunities'] as $relation) {\n            if (method_exists($this, $relation)) {\n                $this->{$relation}->each->invalidateAiSummary();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/Models/CustomField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Database\\Factories\\CustomFieldFactory;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ScopedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Relaticle\\CustomFields\\Models\\CustomField as BaseCustomField;\nuse Relaticle\\CustomFields\\Models\\Scopes\\SortOrderScope;\nuse Relaticle\\CustomFields\\Models\\Scopes\\TenantScope;\nuse Relaticle\\CustomFields\\Observers\\CustomFieldObserver;\n\n/**\n * @property string $tenant_id\n */\n#[ScopedBy([TenantScope::class, SortOrderScope::class])]\n#[ObservedBy(CustomFieldObserver::class)]\nfinal class CustomField extends BaseCustomField\n{\n    use HasUlids;\n\n    /** @return CustomFieldFactory */\n    protected static function newFactory(): Factory\n    {\n        return CustomFieldFactory::new();\n    }\n}\n"
  },
  {
    "path": "app/Models/CustomFieldOption.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Attributes\\ScopedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Relaticle\\CustomFields\\Models\\CustomFieldOption as BaseCustomFieldOption;\nuse Relaticle\\CustomFields\\Models\\Scopes\\SortOrderScope;\nuse Relaticle\\CustomFields\\Models\\Scopes\\TenantScope;\n\n#[ScopedBy([TenantScope::class, SortOrderScope::class])]\nfinal class CustomFieldOption extends BaseCustomFieldOption\n{\n    use HasUlids;\n}\n"
  },
  {
    "path": "app/Models/CustomFieldSection.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ScopedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Relaticle\\CustomFields\\Models\\CustomFieldSection as BaseCustomFieldSection;\nuse Relaticle\\CustomFields\\Models\\Scopes\\SortOrderScope;\nuse Relaticle\\CustomFields\\Models\\Scopes\\TenantScope;\nuse Relaticle\\CustomFields\\Observers\\CustomFieldSectionObserver;\n\n#[ScopedBy([TenantScope::class, SortOrderScope::class])]\n#[ObservedBy(CustomFieldSectionObserver::class)]\nfinal class CustomFieldSection extends BaseCustomFieldSection\n{\n    use HasUlids;\n}\n"
  },
  {
    "path": "app/Models/CustomFieldValue.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Attributes\\ScopedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue as BaseCustomFieldValue;\nuse Relaticle\\CustomFields\\Models\\Scopes\\TenantScope;\n\n#[ScopedBy([TenantScope::class])]\nfinal class CustomFieldValue extends BaseCustomFieldValue\n{\n    use HasUlids;\n}\n"
  },
  {
    "path": "app/Models/Export.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Filament\\Actions\\Exports\\Models\\Export as FilamentExport;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\n\nfinal class Export extends FilamentExport\n{\n    /** @use HasFactory<Factory<self>> */\n    use HasFactory;\n\n    use HasUlids;\n}\n"
  },
  {
    "path": "app/Models/Membership.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Laravel\\Jetstream\\Jetstream;\nuse Laravel\\Jetstream\\Membership as JetstreamMembership;\n\nfinal class Membership extends JetstreamMembership\n{\n    /** @use HasFactory<Factory<self>> */\n    use HasFactory;\n\n    /**\n     * Indicates if the IDs are auto-incrementing.\n     *\n     * @var bool\n     */\n    public $incrementing = true;\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class);\n    }\n\n    /**\n     * @return BelongsTo<Team, $this>\n     */\n    public function team(): BelongsTo\n    {\n        return $this->belongsTo(Team::class);\n    }\n\n    protected function getRoleNameAttribute(): string\n    {\n        // @phpstan-ignore-next-line nullCoalesce.expr\n        return Jetstream::findRole($this->role)?->name ?? 'Unknown';\n    }\n}\n"
  },
  {
    "path": "app/Models/Note.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Concerns\\BelongsToTeamCreator;\nuse App\\Models\\Concerns\\HasCreator;\nuse App\\Models\\Concerns\\HasTeam;\nuse App\\Models\\Concerns\\InvalidatesRelatedAiSummaries;\nuse App\\Observers\\NoteObserver;\nuse Database\\Factories\\NoteFactory;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Attributes\\Scope;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphToMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Carbon;\nuse Relaticle\\CustomFields\\Models\\Concerns\\UsesCustomFields;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\n\n/**\n * @property Carbon|null $deleted_at\n * @property CreationSource $creation_source\n */\n#[ObservedBy(NoteObserver::class)]\nfinal class Note extends Model implements HasCustomFields\n{\n    use BelongsToTeamCreator;\n    use HasCreator;\n\n    /** @use HasFactory<NoteFactory> */\n    use HasFactory;\n\n    use HasTeam;\n    use HasUlids;\n    use InvalidatesRelatedAiSummaries;\n    use SoftDeletes;\n    use UsesCustomFields;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'creation_source',\n    ];\n\n    /**\n     * @var array<string, mixed>\n     */\n    protected $attributes = [\n        'creation_source' => CreationSource::WEB,\n    ];\n\n    /**\n     * The attributes that should be cast.\n     *\n     * @return array<string, string|class-string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'creation_source' => CreationSource::class,\n        ];\n    }\n\n    /**\n     * @return MorphToMany<Company, $this>\n     */\n    public function companies(): MorphToMany\n    {\n        return $this->morphedByMany(Company::class, 'noteable');\n    }\n\n    /**\n     * @return MorphToMany<People, $this>\n     */\n    public function people(): MorphToMany\n    {\n        return $this->morphedByMany(People::class, 'noteable');\n    }\n\n    /**\n     * @return MorphToMany<Opportunity, $this>\n     */\n    public function opportunities(): MorphToMany\n    {\n        return $this->morphedByMany(Opportunity::class, 'noteable');\n    }\n\n    /** @param Builder<self> $query */\n    #[Scope]\n    protected function forNotableType(Builder $query, string $type): void\n    {\n        $relationMap = [\n            'company' => 'companies',\n            'people' => 'people',\n            'opportunity' => 'opportunities',\n        ];\n\n        $relation = $relationMap[$type] ?? null;\n\n        if ($relation) {\n            $query->whereHas($relation);\n        }\n    }\n\n    /** @param Builder<self> $query */\n    #[Scope]\n    protected function forNotableId(Builder $query, string $id): void\n    {\n        $query->where(function (Builder $q) use ($id): void {\n            $q->whereHas('companies', fn (Builder $sub) => $sub->where('noteables.noteable_id', $id))\n                ->orWhereHas('people', fn (Builder $sub) => $sub->where('noteables.noteable_id', $id))\n                ->orWhereHas('opportunities', fn (Builder $sub) => $sub->where('noteables.noteable_id', $id));\n        });\n    }\n}\n"
  },
  {
    "path": "app/Models/Opportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Concerns\\BelongsToTeamCreator;\nuse App\\Models\\Concerns\\HasAiSummary;\nuse App\\Models\\Concerns\\HasCreator;\nuse App\\Models\\Concerns\\HasNotes;\nuse App\\Models\\Concerns\\HasTeam;\nuse App\\Observers\\OpportunityObserver;\nuse Database\\Factories\\OpportunityFactory;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphToMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Carbon;\nuse Relaticle\\CustomFields\\Models\\Concerns\\UsesCustomFields;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\nuse Spatie\\EloquentSortable\\SortableTrait;\n\n/**\n * @property Carbon|null $deleted_at\n * @property CreationSource $creation_source\n */\n#[ObservedBy(OpportunityObserver::class)]\nfinal class Opportunity extends Model implements HasCustomFields\n{\n    use BelongsToTeamCreator;\n    use HasAiSummary;\n    use HasCreator;\n\n    /** @use HasFactory<OpportunityFactory> */\n    use HasFactory;\n\n    use HasNotes;\n    use HasTeam;\n    use HasUlids;\n    use SoftDeletes;\n    use SortableTrait;\n    use UsesCustomFields;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'creation_source',\n    ];\n\n    /**\n     * @var array<string, mixed>\n     */\n    protected $attributes = [\n        'creation_source' => CreationSource::WEB,\n    ];\n\n    /**\n     * The attributes that should be cast.\n     *\n     * @return array<string, string|class-string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'creation_source' => CreationSource::class,\n        ];\n    }\n\n    /**\n     * @return BelongsTo<Company, $this>\n     */\n    public function company(): BelongsTo\n    {\n        return $this->belongsTo(Company::class);\n    }\n\n    /**\n     * @return BelongsTo<People, $this>\n     */\n    public function contact(): BelongsTo\n    {\n        return $this->belongsTo(People::class);\n    }\n\n    /**\n     * @return MorphToMany<Task, $this>\n     */\n    public function tasks(): MorphToMany\n    {\n        return $this->morphToMany(Task::class, 'taskable');\n    }\n}\n"
  },
  {
    "path": "app/Models/People.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Concerns\\BelongsToTeamCreator;\nuse App\\Models\\Concerns\\HasAiSummary;\nuse App\\Models\\Concerns\\HasCreator;\nuse App\\Models\\Concerns\\HasNotes;\nuse App\\Models\\Concerns\\HasTeam;\nuse App\\Observers\\PeopleObserver;\nuse App\\Services\\AvatarService;\nuse Database\\Factories\\PeopleFactory;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphToMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Carbon;\nuse Relaticle\\CustomFields\\Models\\Concerns\\UsesCustomFields;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\n\n/**\n * @property Carbon|null $deleted_at\n * @property CreationSource $creation_source\n */\n#[ObservedBy(PeopleObserver::class)]\nfinal class People extends Model implements HasCustomFields\n{\n    use BelongsToTeamCreator;\n    use HasAiSummary;\n    use HasCreator;\n\n    /** @use HasFactory<PeopleFactory> */\n    use HasFactory;\n\n    use HasNotes;\n    use HasTeam;\n    use HasUlids;\n    use SoftDeletes;\n    use UsesCustomFields;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'name',\n        'creation_source',\n    ];\n\n    /**\n     * @var array<string, mixed>\n     */\n    protected $attributes = [\n        'creation_source' => CreationSource::WEB,\n    ];\n\n    /**\n     * The attributes that should be cast.\n     *\n     * @return array<string, string|class-string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'creation_source' => CreationSource::class,\n        ];\n    }\n\n    protected function getAvatarAttribute(): string\n    {\n        return resolve(AvatarService::class)->generateAuto(name: $this->name, initialCount: 1);\n    }\n\n    /**\n     * @return BelongsTo<Company, $this>\n     */\n    public function company(): BelongsTo\n    {\n        return $this->belongsTo(Company::class);\n    }\n\n    /**\n     * @return MorphToMany<Task, $this>\n     */\n    public function tasks(): MorphToMany\n    {\n        return $this->morphToMany(Task::class, 'taskable');\n    }\n}\n"
  },
  {
    "path": "app/Models/PersonalAccessToken.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Laravel\\Sanctum\\PersonalAccessToken as SanctumPersonalAccessToken;\nuse LogicException;\n\n/** Cannot be final — Sanctum::actingAs() uses Mockery to mock this class in tests */\nclass PersonalAccessToken extends SanctumPersonalAccessToken\n{\n    /** @var array<int, string> */\n    protected $fillable = [\n        'name',\n        'abilities',\n        'expires_at',\n        'team_id',\n    ];\n\n    protected static function booted(): void\n    {\n        self::creating(function (PersonalAccessToken $token): void {\n            if ($token->team_id && $token->tokenable instanceof User) {\n                abort_unless(\n                    $token->tokenable->belongsToTeam(Team::query()->find($token->team_id)),\n                    403,\n                    'Token team_id must belong to the tokenable user.',\n                );\n            }\n        });\n\n        self::updating(function (PersonalAccessToken $token): void {\n            if ($token->isDirty('team_id')) {\n                throw_if($token->getOriginal('team_id') !== null, LogicException::class, 'The team_id attribute cannot be changed after it has been set.');\n\n                if ($token->team_id && $token->tokenable instanceof User) {\n                    abort_unless(\n                        $token->tokenable->belongsToTeam(Team::query()->find($token->team_id)),\n                        403,\n                        'Token team_id must belong to the tokenable user.',\n                    );\n                }\n            }\n        });\n    }\n\n    /** @return BelongsTo<Team, $this> */\n    public function team(): BelongsTo\n    {\n        return $this->belongsTo(Team::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Scopes/TeamScope.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models\\Scopes;\n\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Scope;\n\n/**\n * @template TModel of Model\n */\nfinal class TeamScope implements Scope\n{\n    /**\n     * Apply the scope to a given Eloquent query builder.\n     *\n     * @param  Builder<TModel>  $builder\n     */\n    public function apply(Builder $builder, Model $model): void\n    {\n        $user = auth()->user();\n\n        if (! $user instanceof User) {\n            $builder->whereRaw('1 = 0');\n\n            return;\n        }\n\n        $builder->whereBelongsTo($user->currentTeam);\n    }\n}\n"
  },
  {
    "path": "app/Models/Task.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Concerns\\BelongsToTeamCreator;\nuse App\\Models\\Concerns\\HasCreator;\nuse App\\Models\\Concerns\\HasTeam;\nuse App\\Models\\Concerns\\InvalidatesRelatedAiSummaries;\nuse App\\Observers\\TaskObserver;\nuse Database\\Factories\\TaskFactory;\nuse Illuminate\\Database\\Eloquent\\Attributes\\ObservedBy;\nuse Illuminate\\Database\\Eloquent\\Attributes\\Scope;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphToMany;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Support\\Carbon;\nuse Relaticle\\CustomFields\\Models\\Concerns\\UsesCustomFields;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\nuse Spatie\\EloquentSortable\\SortableTrait;\n\n/**\n * @property int $id\n * @property Carbon|null $deleted_at\n * @property CreationSource $creation_source\n * @property string $createdBy\n *\n * @method void saveCustomFieldValue(CustomField $field, mixed $value)\n */\n#[ObservedBy(TaskObserver::class)]\nfinal class Task extends Model implements HasCustomFields\n{\n    use BelongsToTeamCreator;\n    use HasCreator;\n\n    /** @use HasFactory<TaskFactory> */\n    use HasFactory;\n\n    use HasTeam;\n    use HasUlids;\n    use InvalidatesRelatedAiSummaries;\n    use SoftDeletes;\n    use SortableTrait;\n    use UsesCustomFields;\n\n    protected $fillable = [\n        'user_id',\n        'title',\n        'creation_source',\n    ];\n\n    /**\n     * @var array<string, mixed>\n     */\n    protected $attributes = [\n        'creation_source' => CreationSource::WEB,\n    ];\n\n    /**\n     * The attributes that should be cast.\n     *\n     * @return array<string, string|class-string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'creation_source' => CreationSource::class,\n        ];\n    }\n\n    /**\n     * @var array{order_column_name: 'order_column', sort_when_creating: true}\n     */\n    public array $sortable = [\n        'order_column_name' => 'order_column',\n        'sort_when_creating' => true,\n    ];\n\n    /**\n     * @return BelongsToMany<User, $this>\n     */\n    public function assignees(): BelongsToMany\n    {\n        return $this->belongsToMany(User::class);\n    }\n\n    /**\n     * @return MorphToMany<Company, $this>\n     */\n    public function companies(): MorphToMany\n    {\n        return $this->morphedByMany(Company::class, 'taskable');\n    }\n\n    /**\n     * @return MorphToMany<Opportunity, $this>\n     */\n    public function opportunities(): MorphToMany\n    {\n        return $this->morphedByMany(Opportunity::class, 'taskable');\n    }\n\n    /**\n     * @return MorphToMany<People, $this>\n     */\n    public function people(): MorphToMany\n    {\n        return $this->morphedByMany(People::class, 'taskable');\n    }\n\n    /** @param Builder<self> $query */\n    #[Scope]\n    protected function forCompany(Builder $query, string $companyId): void\n    {\n        $query->whereHas('companies', fn (Builder $q) => $q->where('companies.id', $companyId));\n    }\n\n    /** @param Builder<self> $query */\n    #[Scope]\n    protected function forPerson(Builder $query, string $personId): void\n    {\n        $query->whereHas('people', fn (Builder $q) => $q->where('people.id', $personId));\n    }\n\n    /** @param Builder<self> $query */\n    #[Scope]\n    protected function forOpportunity(Builder $query, string $opportunityId): void\n    {\n        $query->whereHas('opportunities', fn (Builder $q) => $q->where('opportunities.id', $opportunityId));\n    }\n}\n"
  },
  {
    "path": "app/Models/Team.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Services\\AvatarService;\nuse Database\\Factories\\TeamFactory;\nuse Filament\\Models\\Contracts\\HasAvatar;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Laravel\\Jetstream\\Events\\TeamDeleted;\nuse Laravel\\Jetstream\\Events\\TeamUpdated;\nuse Laravel\\Jetstream\\Team as JetstreamTeam;\nuse Spatie\\Sluggable\\HasSlug;\nuse Spatie\\Sluggable\\SlugOptions;\n\n/**\n * @property string $name\n * @property string $slug\n */\nfinal class Team extends JetstreamTeam implements HasAvatar\n{\n    /** @use HasFactory<TeamFactory> */\n    use HasFactory;\n\n    use HasSlug;\n    use HasUlids;\n\n    public const string SLUG_REGEX = '/^[a-z0-9]+(?:-[a-z0-9]+)*$/';\n\n    /**\n     * Slugs reserved for application routes that must not be used as team slugs.\n     *\n     * @var list<string>\n     */\n    public const array RESERVED_SLUGS = [\n        // Authentication & authorization\n        'login', 'logout', 'register', 'signin', 'signout', 'signup',\n        'auth', 'oauth', 'sso', 'callback',\n        'forgot-password', 'reset-password', 'password-reset', 'verify-email', 'email-verification',\n        'confirm-password', 'two-factor-challenge',\n\n        // Administration\n        'admin', 'administrator', 'dashboard', 'console', 'root', 'super', 'sysadmin',\n\n        // Account & billing\n        'account', 'billing', 'checkout', 'invoices', 'plan', 'plans',\n        'pricing', 'settings', 'subscription', 'subscriptions',\n\n        // Teams & orgs\n        'teams', 'team', 'org', 'organization', 'workspace', 'invitations', 'invite',\n        'team-invitations',\n\n        // App routes\n        'companies', 'people', 'tasks', 'opportunities', 'notes',\n        'api-tokens', 'import-history', 'profile',\n        'opportunities-board', 'tasks-board',\n\n        // Content & info pages\n        'about', 'blog', 'docs', 'documentation', 'faq', 'help', 'support',\n        'privacy-policy', 'terms-of-service', 'legal', 'security', 'changelog',\n        'discord',\n\n        // API & developer\n        'api', 'graphql', 'mcp', 'webhooks', 'developer', 'developers', 'connect', 'user', 'users',\n\n        // Marketing & public\n        'home', 'welcome', 'features', 'demo', 'enterprise', 'pro',\n        'careers', 'jobs', 'partners', 'affiliate', 'store', 'marketplace',\n\n        // Communication\n        'mail', 'email', 'contact', 'feedback', 'abuse', 'report',\n\n        // Infrastructure & framework\n        'filament', 'livewire', 'storage', 'imports', 'horizon', 'scalar', 'engagement',\n        'system-administrators',\n        'up', 'health', 'status', 'metrics',\n        'static', 'assets', 'cdn', 'public', 'uploads',\n        'www', 'ftp', 'ssh', 'dns', 'ns1', 'ns2',\n\n        // Common actions\n        'new', 'create', 'edit', 'delete', 'search', 'explore',\n\n        // Misc\n        'null', 'undefined', 'error', 'test', 'staging', 'preview',\n    ];\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'name',\n        'slug',\n        'personal_team',\n    ];\n\n    /**\n     * The event map for the model.\n     *\n     * @var array<string, class-string>\n     */\n    protected $dispatchesEvents = [\n        'created' => TeamCreated::class,\n        'updated' => TeamUpdated::class,\n        'deleted' => TeamDeleted::class,\n    ];\n\n    /**\n     * Get the attributes that should be cast.\n     *\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'personal_team' => 'boolean',\n        ];\n    }\n\n    public function getSlugOptions(): SlugOptions\n    {\n        return SlugOptions::create()\n            ->generateSlugsFrom(function (): string {\n                $slug = Str::slug($this->name);\n\n                if ($slug === '') {\n                    return Str::lower(Str::random(8));\n                }\n\n                return $slug;\n            })\n            ->saveSlugsTo('slug')\n            ->preventOverwrite()\n            ->doNotGenerateSlugsOnUpdate();\n    }\n\n    protected function otherRecordExistsWithSlug(string $slug): bool\n    {\n        if (in_array($slug, self::RESERVED_SLUGS, true)) {\n            return true;\n        }\n\n        $query = self::query()->where($this->slugOptions->slugField, $slug)\n            ->withoutGlobalScopes();\n\n        if ($this->exists) {\n            $query->where($this->getKeyName(), '!=', $this->getKey());\n        }\n\n        return $query->exists();\n    }\n\n    public function isPersonalTeam(): bool\n    {\n        return $this->personal_team;\n    }\n\n    public function getFilamentAvatarUrl(): string\n    {\n        return resolve(AvatarService::class)->generate(name: $this->name, bgColor: '#000000', textColor: '#ffffff');\n    }\n\n    /**\n     * @return HasMany<People, $this>\n     */\n    public function people(): HasMany\n    {\n        return $this->hasMany(People::class);\n    }\n\n    /**\n     * @return HasMany<Company, $this>\n     */\n    public function companies(): HasMany\n    {\n        return $this->hasMany(Company::class);\n    }\n\n    /**\n     * @return HasMany<Task, $this>\n     */\n    public function tasks(): HasMany\n    {\n        return $this->hasMany(Task::class);\n    }\n\n    /**\n     * @return HasMany<Opportunity, $this>\n     */\n    public function opportunities(): HasMany\n    {\n        return $this->hasMany(Opportunity::class);\n    }\n\n    /**\n     * @return HasMany<Note, $this>\n     */\n    public function notes(): HasMany\n    {\n        return $this->hasMany(Note::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/TeamInvitation.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Support\\Carbon;\nuse Laravel\\Jetstream\\TeamInvitation as JetstreamTeamInvitation;\n\nfinal class TeamInvitation extends JetstreamTeamInvitation\n{\n    /** @use HasFactory<Factory<self>> */\n    use HasFactory;\n\n    use HasUlids;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'email',\n        'role',\n        'expires_at',\n    ];\n\n    /**\n     * @return BelongsTo<Team, $this>\n     */\n    public function team(): BelongsTo\n    {\n        return $this->belongsTo(Team::class);\n    }\n\n    public function isExpired(): bool\n    {\n        if ($this->expires_at === null) {\n            return true;\n        }\n\n        /** @var Carbon $expiresAt */\n        $expiresAt = $this->expires_at;\n\n        return $expiresAt->isPast();\n    }\n\n    /**\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'expires_at' => 'datetime',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/User.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse App\\Models\\Concerns\\HasProfilePhoto;\nuse Database\\Factories\\UserFactory;\nuse Exception;\nuse Filament\\Models\\Contracts\\FilamentUser;\nuse Filament\\Models\\Contracts\\HasAvatar;\nuse Filament\\Models\\Contracts\\HasDefaultTenant;\nuse Filament\\Models\\Contracts\\HasTenants;\nuse Filament\\Panel;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Laravel\\Fortify\\TwoFactorAuthenticatable;\nuse Laravel\\Jetstream\\HasTeams;\nuse Laravel\\Sanctum\\HasApiTokens;\n\n/**\n * @property string $name\n * @property string $email\n * @property string|null $password\n * @property string|null $profile_photo_path\n * @property-read string $profile_photo_url\n * @property Carbon|null $email_verified_at\n * @property string|null $remember_token\n * @property string|null $two_factor_recovery_codes\n * @property string|null $two_factor_secret\n * @property-read Team|null $currentTeam\n */\nfinal class User extends Authenticatable implements FilamentUser, HasAvatar, HasDefaultTenant, HasTenants, MustVerifyEmail\n{\n    use HasApiTokens;\n\n    /** @use HasFactory<UserFactory> */\n    use HasFactory;\n\n    use HasProfilePhoto;\n    use HasTeams;\n    use HasUlids;\n    use Notifiable;\n    use TwoFactorAuthenticatable;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'name',\n        'email',\n        'password',\n    ];\n\n    /**\n     * The attributes that should be hidden for serialization.\n     *\n     * @var list<string>\n     */\n    protected $hidden = [\n        'password',\n        'remember_token',\n        'two_factor_recovery_codes',\n        'two_factor_secret',\n    ];\n\n    /**\n     * The accessors to append to the model's array form.\n     *\n     * @var list<string>\n     */\n    protected $appends = [\n        'profile_photo_url',\n    ];\n\n    /**\n     * Get the attributes that should be cast.\n     *\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'email_verified_at' => 'datetime',\n            'password' => 'hashed',\n        ];\n    }\n\n    /**\n     * @return HasMany<UserSocialAccount, $this>\n     */\n    public function socialAccounts(): HasMany\n    {\n        return $this->hasMany(UserSocialAccount::class);\n    }\n\n    public function hasPassword(): bool\n    {\n        return $this->password !== null;\n    }\n\n    /**\n     * @return BelongsToMany<Task, $this>\n     */\n    public function tasks(): BelongsToMany\n    {\n        return $this->belongsToMany(Task::class);\n    }\n\n    /**\n     * @return HasMany<Opportunity, $this>\n     */\n    public function opportunities(): HasMany\n    {\n        return $this->hasMany(Opportunity::class, 'creator_id');\n    }\n\n    public function getDefaultTenant(Panel $panel): ?Model\n    {\n        return $this->currentTeam;\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function canAccessPanel(Panel $panel): bool\n    {\n        return $panel->getId() === 'app';\n    }\n\n    /**\n     * @return Collection<int, Team>\n     */\n    public function getTenants(Panel $panel): Collection\n    {\n        return $this->allTeams();\n    }\n\n    public function canAccessTenant(Model $tenant): bool\n    {\n        return $this->belongsToTeam($tenant);\n    }\n}\n"
  },
  {
    "path": "app/Models/UserSocialAccount.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Models;\n\nuse Database\\Factories\\UserSocialAccountFactory;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\nfinal class UserSocialAccount extends Model\n{\n    /** @use HasFactory<UserSocialAccountFactory> */\n    use HasFactory;\n\n    use HasUlids;\n\n    /**\n     * @return BelongsTo<User, $this>\n     */\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class);\n    }\n}\n"
  },
  {
    "path": "app/Observers/CompanyObserver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Observers;\n\nuse App\\Enums\\CustomFields\\CompanyField;\nuse App\\Jobs\\FetchFaviconForCompany;\nuse App\\Models\\Company;\n\nfinal readonly class CompanyObserver\n{\n    public function saved(Company $company): void\n    {\n        $company->invalidateAiSummary();\n        $this->dispatchFaviconFetchIfNeeded($company);\n    }\n\n    private function dispatchFaviconFetchIfNeeded(Company $company): void\n    {\n        $domainField = $company->customFields()\n            ->whereBelongsTo($company->team)\n            ->where('code', CompanyField::DOMAINS->value)\n            ->first();\n\n        if ($domainField === null) {\n            return;\n        }\n\n        $company->load('customFieldValues.customField.options');\n\n        $domains = $company->getCustomFieldValue($domainField);\n        $firstDomain = is_array($domains) ? ($domains[0] ?? null) : $domains;\n\n        if (blank($firstDomain)) {\n            return;\n        }\n\n        dispatch(new FetchFaviconForCompany($company))->afterCommit();\n    }\n}\n"
  },
  {
    "path": "app/Observers/NoteObserver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Observers;\n\nuse App\\Models\\Note;\n\nfinal readonly class NoteObserver\n{\n    public function saved(Note $note): void\n    {\n        $note->invalidateRelatedSummaries();\n    }\n\n    public function deleted(Note $note): void\n    {\n        $note->invalidateRelatedSummaries();\n    }\n}\n"
  },
  {
    "path": "app/Observers/OpportunityObserver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Observers;\n\nuse App\\Models\\Opportunity;\n\nfinal readonly class OpportunityObserver\n{\n    /**\n     * Handle the Opportunity \"saved\" event.\n     * Invalidate AI summary when opportunity data changes.\n     */\n    public function saved(Opportunity $opportunity): void\n    {\n        $opportunity->invalidateAiSummary();\n    }\n}\n"
  },
  {
    "path": "app/Observers/PeopleObserver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Observers;\n\nuse App\\Models\\People;\n\nfinal readonly class PeopleObserver\n{\n    /**\n     * Handle the People \"saved\" event.\n     * Invalidate AI summary when person data changes.\n     */\n    public function saved(People $people): void\n    {\n        $people->invalidateAiSummary();\n    }\n}\n"
  },
  {
    "path": "app/Observers/TaskObserver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Observers;\n\nuse App\\Models\\Task;\n\nfinal readonly class TaskObserver\n{\n    public function saved(Task $task): void\n    {\n        $task->invalidateRelatedSummaries();\n    }\n\n    public function deleted(Task $task): void\n    {\n        $task->invalidateRelatedSummaries();\n    }\n}\n"
  },
  {
    "path": "app/Policies/CompanyPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Policies;\n\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nfinal readonly class CompanyPolicy\n{\n    use HandlesAuthorization;\n\n    public function viewAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function view(User $user, Company $company): bool\n    {\n        return $user->belongsToTeam($company->team);\n    }\n\n    public function create(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function update(User $user, Company $company): bool\n    {\n        return $user->belongsToTeam($company->team);\n    }\n\n    public function delete(User $user, Company $company): bool\n    {\n        return $user->belongsToTeam($company->team);\n    }\n\n    public function deleteAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function restore(User $user, Company $company): bool\n    {\n        return $user->belongsToTeam($company->team);\n    }\n\n    public function restoreAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function forceDelete(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n\n    public function forceDeleteAny(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n}\n"
  },
  {
    "path": "app/Policies/NotePolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Policies;\n\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nfinal readonly class NotePolicy\n{\n    use HandlesAuthorization;\n\n    public function viewAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function view(User $user, Note $note): bool\n    {\n        return $user->belongsToTeam($note->team);\n    }\n\n    public function create(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function update(User $user, Note $note): bool\n    {\n        return $user->belongsToTeam($note->team);\n    }\n\n    public function delete(User $user, Note $note): bool\n    {\n        return $user->belongsToTeam($note->team);\n    }\n\n    public function deleteAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function restore(User $user, Note $note): bool\n    {\n        return $user->belongsToTeam($note->team);\n    }\n\n    public function restoreAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function forceDelete(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n\n    public function forceDeleteAny(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n}\n"
  },
  {
    "path": "app/Policies/OpportunityPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Policies;\n\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nfinal readonly class OpportunityPolicy\n{\n    use HandlesAuthorization;\n\n    public function viewAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function view(User $user, Opportunity $opportunity): bool\n    {\n        return $user->belongsToTeam($opportunity->team);\n    }\n\n    public function create(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function update(User $user, Opportunity $opportunity): bool\n    {\n        return $user->belongsToTeam($opportunity->team);\n    }\n\n    public function delete(User $user, Opportunity $opportunity): bool\n    {\n        return $user->belongsToTeam($opportunity->team);\n    }\n\n    public function deleteAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function restore(User $user, Opportunity $opportunity): bool\n    {\n        return $user->belongsToTeam($opportunity->team);\n    }\n\n    public function restoreAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function forceDelete(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n\n    public function forceDeleteAny(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n}\n"
  },
  {
    "path": "app/Policies/PeoplePolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Policies;\n\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nfinal readonly class PeoplePolicy\n{\n    use HandlesAuthorization;\n\n    public function viewAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function view(User $user, People $people): bool\n    {\n        return $user->belongsToTeam($people->team);\n    }\n\n    public function create(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function update(User $user, People $people): bool\n    {\n        return $user->belongsToTeam($people->team);\n    }\n\n    public function delete(User $user, People $people): bool\n    {\n        return $user->belongsToTeam($people->team);\n    }\n\n    public function deleteAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function restore(User $user, People $people): bool\n    {\n        return $user->belongsToTeam($people->team);\n    }\n\n    public function restoreAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function forceDelete(User $user, People $people): bool\n    {\n        return $user->hasTeamRole($people->team, 'admin');\n    }\n\n    public function forceDeleteAny(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n}\n"
  },
  {
    "path": "app/Policies/TaskPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Policies;\n\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nfinal readonly class TaskPolicy\n{\n    use HandlesAuthorization;\n\n    public function viewAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function view(User $user, Task $task): bool\n    {\n        return $user->belongsToTeam($task->team);\n    }\n\n    public function create(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function update(User $user, Task $task): bool\n    {\n        return $user->belongsToTeam($task->team);\n    }\n\n    public function delete(User $user, Task $task): bool\n    {\n        return $user->belongsToTeam($task->team);\n    }\n\n    public function deleteAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function restore(User $user, Task $task): bool\n    {\n        return $user->belongsToTeam($task->team);\n    }\n\n    public function restoreAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    public function forceDelete(User $user, Task $task): bool\n    {\n        return $user->hasTeamRole($task->team, 'admin');\n    }\n\n    public function forceDeleteAny(User $user): bool\n    {\n        return $user->hasTeamRole(Filament::getTenant(), 'admin');\n    }\n}\n"
  },
  {
    "path": "app/Policies/TeamPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Policies;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nfinal readonly class TeamPolicy\n{\n    use HandlesAuthorization;\n\n    /**\n     * Determine whether the user can view any models.\n     */\n    public function viewAny(User $user): bool\n    {\n        return $user->hasVerifiedEmail() && $user->currentTeam !== null;\n    }\n\n    /**\n     * Determine whether the user can view the model.\n     */\n    public function view(User $user, Team $team): bool\n    {\n        return $user->belongsToTeam($team);\n    }\n\n    /**\n     * Determine whether the user can create models.\n     */\n    public function create(User $user): bool\n    {\n        return $user->ownedTeams()->count() < 3;\n    }\n\n    /**\n     * Determine whether the user can update the model.\n     */\n    public function update(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    /**\n     * Determine whether the user can add team members.\n     */\n    public function addTeamMember(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    /**\n     * Determine whether the user can update team member permissions.\n     */\n    public function updateTeamMember(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    /**\n     * Determine whether the user can remove team members.\n     */\n    public function removeTeamMember(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    /**\n     * Determine whether the user can delete the model.\n     */\n    public function delete(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    public function deleteAny(): bool\n    {\n        return false;\n    }\n\n    public function restore(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    public function restoreAny(): bool\n    {\n        return false;\n    }\n\n    public function forceDelete(User $user, Team $team): bool\n    {\n        return $user->ownsTeam($team);\n    }\n\n    public function forceDeleteAny(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Http\\Responses\\LoginResponse;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldOption;\nuse App\\Models\\CustomFieldSection;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\Export;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse App\\Services\\GitHubService;\nuse Filament\\Actions\\Action;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\Relation;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\RateLimiter;\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\View\\View;\nuse Knuckles\\Scribe\\Scribe;\nuse Laravel\\Sanctum\\Sanctum;\nuse Relaticle\\CustomFields\\CustomFields;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     */\n    public function register(): void\n    {\n        $this->app->bind(\\Filament\\Auth\\Http\\Responses\\Contracts\\LoginResponse::class, LoginResponse::class);\n        $this->app->bind(\\Filament\\Actions\\Exports\\Models\\Export::class, Export::class);\n    }\n\n    /**\n     * Bootstrap any application services.\n     */\n    public function boot(): void\n    {\n        Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);\n\n        $this->configurePolicies();\n        $this->configureModels();\n        $this->configureFilament();\n        $this->configureGitHubStars();\n        $this->configureLivewire();\n        $this->configureRateLimiting();\n        $this->configureScribe();\n    }\n\n    private function configurePolicies(): void\n    {\n        Gate::guessPolicyNamesUsing(function (string $modelClass): ?string {\n            try {\n                $currentPanelId = Filament::getCurrentPanel()?->getId();\n\n                if ($currentPanelId === 'sysadmin') {\n                    $modelName = class_basename($modelClass);\n                    $systemAdminPolicy = \"Relaticle\\\\SystemAdmin\\\\Policies\\\\{$modelName}Policy\";\n\n                    // Return SystemAdmin policy if it exists\n                    if (class_exists($systemAdminPolicy)) {\n                        return $systemAdminPolicy;\n                    }\n                }\n            } catch (\\Exception) {\n                // Fallback for non-Filament contexts\n            }\n\n            // Use Laravel's default policy discovery logic\n            return $this->getDefaultLaravelPolicyName($modelClass);\n        });\n    }\n\n    private function getDefaultLaravelPolicyName(string $modelClass): ?string\n    {\n        // Replicate Laravel's default policy discovery logic from Gate.php:723-736\n        $classDirname = str_replace('/', '\\\\', dirname(str_replace('\\\\', '/', $modelClass)));\n        $classDirnameSegments = explode('\\\\', $classDirname);\n\n        $candidates = collect();\n        // Generate all possible policy paths\n        $counter = count($classDirnameSegments);\n\n        // Generate all possible policy paths\n        for ($index = 0; $index < $counter; $index++) {\n            $classDirname = implode('\\\\', array_slice($classDirnameSegments, 0, $index));\n            $candidates->push($classDirname.'\\\\Policies\\\\'.class_basename($modelClass).'Policy');\n        }\n\n        // Add Models-specific paths if the model is in a Models directory\n        if (str_contains($classDirname, '\\\\Models\\\\')) {\n            $candidates = $candidates\n                ->concat([str_replace('\\\\Models\\\\', '\\\\Policies\\\\', $classDirname).'\\\\'.class_basename($modelClass).'Policy'])\n                ->concat([str_replace('\\\\Models\\\\', '\\\\Models\\\\Policies\\\\', $classDirname).'\\\\'.class_basename($modelClass).'Policy']);\n        }\n\n        // Return the first existing class, or fallback\n        $existingPolicy = $candidates->reverse()->first(fn (string $class): bool => class_exists($class));\n\n        return $existingPolicy ?: $classDirname.'\\\\Policies\\\\'.class_basename($modelClass).'Policy';\n    }\n\n    /**\n     * Configure custom Livewire components.\n     */\n    private function configureLivewire(): void\n    {\n        // Custom Livewire components can be registered here\n    }\n\n    private function configureRateLimiting(): void\n    {\n        RateLimiter::for('api', function (Request $request): array {\n            /** @var User|null $user */\n            $user = $request->user();\n            $tokenId = $user?->currentAccessToken()?->getKey();\n            $teamId = $user?->currentTeam?->getKey();\n            $key = $tokenId ?: $request->ip();\n\n            $limits = [\n                Limit::perMinute(600)->by('team:'.($teamId ?? $request->ip())),\n            ];\n\n            if ($request->isMethod('GET')) {\n                $limits[] = Limit::perMinute(300)->by(\"token:{$key}:read\");\n            } else {\n                $limits[] = Limit::perMinute(60)->by(\"token:{$key}:write\");\n            }\n\n            return $limits;\n        });\n\n        RateLimiter::for('mcp', fn (Request $request) => Limit::perMinute(120)->by($request->user()?->id ?: $request->ip()));\n    }\n\n    private function configureScribe(): void\n    {\n        if (! class_exists(Scribe::class)) {\n            return;\n        }\n\n        $makeScribeUser = function (): User {\n            $user = new User;\n            $user->forceFill(['id' => 'scribe-user-id', 'name' => 'Scribe User', 'email' => 'scribe@example.com']);\n\n            $team = new Team;\n            $team->forceFill(['id' => 'scribe-team-id', 'name' => 'Scribe Team', 'user_id' => $user->id, 'personal_team' => true]);\n            $team->setRelation('owner', $user);\n            $team->setRelation('users', collect());\n\n            $user->forceFill(['current_team_id' => $team->id]);\n            $user->setRelation('currentTeam', $team);\n\n            return $user;\n        };\n\n        Scribe::bootstrap(function (): void {\n            config()->set('scribe.generating', true);\n        });\n\n        Scribe::instantiateFormRequestUsing(function (string $className) use ($makeScribeUser): FormRequest {\n            /** @var FormRequest $formRequest */\n            $formRequest = new $className;\n            $formRequest->setUserResolver(fn (): User => $makeScribeUser());\n\n            return $formRequest;\n        });\n\n    }\n\n    /**\n     * Configure the models for the application.\n     */\n    private function configureModels(): void\n    {\n        Model::unguard();\n        Model::preventLazyLoading(! $this->app->isProduction());\n\n        Relation::enforceMorphMap([\n            'team' => Team::class,\n            'user' => User::class,\n            'people' => People::class,\n            'company' => Company::class,\n            'opportunity' => Opportunity::class,\n            'task' => Task::class,\n            'note' => Note::class,\n            'system_administrator' => SystemAdministrator::class,\n        ]);\n\n        // Use custom models for custom-fields package\n        CustomFields::useCustomFieldModel(CustomField::class);\n        CustomFields::useSectionModel(CustomFieldSection::class);\n        CustomFields::useOptionModel(CustomFieldOption::class);\n        CustomFields::useValueModel(CustomFieldValue::class);\n    }\n\n    /**\n     * Configure Filament.\n     */\n    private function configureFilament(): void\n    {\n        $slideOverActions = ['create', 'edit', 'view'];\n\n        Action::configureUsing(function (Action $action) use ($slideOverActions): Action {\n            if (in_array($action->getName(), $slideOverActions)) {\n                return $action->slideOver();\n            }\n\n            return $action;\n        });\n    }\n\n    /**\n     * Configure GitHub stars count.\n     */\n    private function configureGitHubStars(): void\n    {\n        // Share GitHub stars count with the header component\n        Facades\\View::composer('components.layout.header', function (View $view): void {\n            $gitHubService = resolve(GitHubService::class);\n            $starsCount = $gitHubService->getStarsCount();\n            $formattedStarsCount = $gitHubService->getFormattedStarsCount();\n\n            $view->with([\n                'githubStars' => $starsCount,\n                'formattedGithubStars' => $formattedStarsCount,\n            ]);\n        });\n    }\n}\n"
  },
  {
    "path": "app/Providers/FaviconServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Services\\Favicon\\Drivers\\GoogleHighResDriver;\nuse App\\Services\\Favicon\\Drivers\\HighQualityDriver;\nuse AshAllenDesign\\FaviconFetcher\\Facades\\Favicon;\nuse Illuminate\\Support\\ServiceProvider;\n\nfinal class FaviconServiceProvider extends ServiceProvider\n{\n    public function boot(): void\n    {\n        Favicon::extend('high-quality', new HighQualityDriver);\n        Favicon::extend('google-highres', new GoogleHighResDriver(256));\n    }\n}\n"
  },
  {
    "path": "app/Providers/Filament/AppPanelProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers\\Filament;\n\nuse App\\Filament\\Pages\\AccessTokens;\nuse App\\Filament\\Pages\\Auth\\Login;\nuse App\\Filament\\Pages\\Auth\\Register;\nuse App\\Filament\\Pages\\CreateTeam;\nuse App\\Filament\\Pages\\EditProfile;\nuse App\\Filament\\Pages\\EditTeam;\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Http\\Middleware\\ApplyTenantScopes;\nuse App\\Listeners\\SwitchTeam;\nuse App\\Models\\Team;\nuse Asmit\\ResizedColumn\\ResizedColumnPlugin;\nuse Exception;\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Events\\TenantSet;\nuse Filament\\Facades\\Filament;\nuse Filament\\Http\\Middleware\\Authenticate;\nuse Filament\\Http\\Middleware\\DisableBladeIconComponents;\nuse Filament\\Http\\Middleware\\DispatchServingFilamentEvent;\nuse Filament\\Navigation\\NavigationGroup;\nuse Filament\\Panel;\nuse Filament\\PanelProvider;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Support\\Enums\\Size;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Filament\\Tables\\Table;\nuse Filament\\View\\PanelsRenderHook;\nuse Illuminate\\Contracts\\View\\Factory;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse;\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies;\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken;\nuse Illuminate\\Routing\\Middleware\\SubstituteBindings;\nuse Illuminate\\Session\\Middleware\\AuthenticateSession;\nuse Illuminate\\Session\\Middleware\\StartSession;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\View\\Middleware\\ShareErrorsFromSession;\nuse Laravel\\Jetstream\\Features;\nuse Relaticle\\CustomFields\\CustomFieldsPlugin;\nuse Relaticle\\ImportWizard\\Filament\\Pages\\ImportHistory;\n\nfinal class AppPanelProvider extends PanelProvider\n{\n    /**\n     * Perform post-registration booting of components.\n     */\n    public function boot(): void\n    {\n        /**\n         * Listen and switch team if tenant was changed\n         */\n        Event::listen(\n            TenantSet::class,\n            SwitchTeam::class,\n        );\n\n        Action::configureUsing(fn (Action $action): Action => $action->size(Size::Small)->iconPosition('before'));\n        DeleteAction::configureUsing(fn (DeleteAction $action): DeleteAction => $action->label('Delete record'));\n        Section::configureUsing(fn (Section $section): Section => $section->compact());\n        Table::configureUsing(fn (Table $table): Table => $table);\n    }\n\n    /**\n     * Configure the Filament admin panel.\n     *\n     * @throws Exception\n     */\n    public function panel(Panel $panel): Panel\n    {\n        $panel\n            ->default()\n            ->id('app');\n\n        if ($domain = config('app.app_panel_domain')) {\n            $panel->domain($domain);\n        } else {\n            $panel->path(config('app.app_panel_path', 'app'));\n        }\n\n        $panel\n            ->homeUrl(fn (): string => CompanyResource::getUrl())\n            ->brandName('Relaticle')\n            ->brandLogo(fn (): View|Factory => Auth::user()?->hasVerifiedEmail()\n                ? view('filament.app.logo-empty')\n                : view('filament.app.logo'))\n            ->brandLogoHeight('2.6rem')\n            ->login(Login::class)\n            ->registration(Register::class)\n            ->authGuard('web')\n            ->authPasswordBroker('users')\n            ->passwordReset()\n            ->emailVerification()\n            ->emailChangeVerification()\n            ->strictAuthorization()\n            ->databaseNotifications()\n            ->colors([\n                'primary' => [\n                    50 => 'oklch(0.969 0.016 293.756)',\n                    100 => 'oklch(0.943 0.028 294.588)',\n                    200 => 'oklch(0.894 0.055 293.283)',\n                    300 => 'oklch(0.811 0.101 293.571)',\n                    400 => 'oklch(0.709 0.159 293.541)',\n                    500 => 'oklch(0.606 0.219 292.717)',\n                    600 => 'oklch(0.541 0.247 293.009)',\n                    700 => 'oklch(0.491 0.241 292.581)',\n                    800 => 'oklch(0.432 0.211 292.759)',\n                    900 => 'oklch(0.380 0.178 293.745)',\n                    950 => 'oklch(0.283 0.135 291.089)',\n                    'DEFAULT' => 'oklch(0.541 0.247 293.009)',\n                ],\n            ])\n            ->viteTheme('resources/css/filament/app/theme.css')\n            ->userMenuItems([\n                Action::make('profile')\n                    ->label('Profile')\n                    ->icon('heroicon-m-user-circle')\n                    ->url(fn (): string => $this->shouldRegisterMenuItem()\n                        ? url(EditProfile::getUrl())\n                        : url($panel->getPath())),\n            ])\n            ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\\\Filament\\Resources')\n            ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\\\Filament\\\\Pages')\n            ->discoverPages(in: base_path('packages/ImportWizard/src/Filament/Pages'), for: 'Relaticle\\\\ImportWizard\\\\Filament\\\\Pages')\n            ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\\\Filament\\\\Widgets')\n            ->discoverClusters(in: app_path('Filament/Clusters'), for: 'App\\\\Filament\\\\Clusters')\n            ->readOnlyRelationManagersOnResourceViewPagesByDefault(false)\n            ->pages([\n                EditProfile::class,\n                AccessTokens::class,\n            ])\n            ->spa()\n            ->breadcrumbs(false)\n            ->sidebarCollapsibleOnDesktop()\n            ->navigationGroups([\n                NavigationGroup::make()\n                    ->label('Tasks')\n                    ->icon('heroicon-o-shopping-cart'),\n            ])\n            ->middleware([\n                EncryptCookies::class,\n                AddQueuedCookiesToResponse::class,\n                StartSession::class,\n                AuthenticateSession::class,\n                ShareErrorsFromSession::class,\n                VerifyCsrfToken::class,\n                SubstituteBindings::class,\n                DisableBladeIconComponents::class,\n                DispatchServingFilamentEvent::class,\n            ])\n            ->authGuard('web')\n            ->authPasswordBroker('users')\n            ->authMiddleware([\n                Authenticate::class,\n            ])\n            ->tenantMiddleware(\n                [\n                    ApplyTenantScopes::class,\n                ],\n                isPersistent: true\n            )\n            ->plugins([\n                CustomFieldsPlugin::make()\n                    ->authorize(fn () => Gate::check('update', Filament::getTenant())),\n                ResizedColumnPlugin::make(),\n            ])\n            ->renderHook(\n                PanelsRenderHook::AUTH_LOGIN_FORM_BEFORE,\n                fn (): string => Blade::render('@env(\\'local\\')<x-login-link email=\"manuk.minasyan1@gmail.com\" redirect-url=\"'.url()->getAppUrl().'\" />@endenv'),\n            )\n            ->renderHook(\n                PanelsRenderHook::AUTH_LOGIN_FORM_BEFORE,\n                fn (): View|Factory => view('filament.auth.social_login_buttons')\n            )\n            ->renderHook(\n                PanelsRenderHook::AUTH_REGISTER_FORM_BEFORE,\n                fn (): View|Factory => view('filament.auth.social_login_buttons')\n            )\n            ->renderHook(\n                PanelsRenderHook::HEAD_END,\n                fn (): View|Factory => view('filament.app.analytics')\n            );\n\n        if (Features::hasApiFeatures()) {\n            $panel->userMenuItems([\n                Action::make('api_tokens')\n                    ->label(__('access-tokens.user_menu'))\n                    ->icon('heroicon-o-key')\n                    ->url(fn (): string => $this->shouldRegisterMenuItem()\n                        ? url(AccessTokens::getUrl())\n                        : url($panel->getPath())),\n            ]);\n        }\n\n        $panel\n            ->tenant(Team::class, slugAttribute: 'slug', ownershipRelationship: 'team')\n            ->tenantRegistration(CreateTeam::class)\n            ->tenantProfile(EditTeam::class)\n            ->tenantMenuItems([\n                Action::make('import_history')\n                    ->label('Import History')\n                    ->icon(Heroicon::OutlinedClock)\n                    ->url(fn (): string => ImportHistory::getUrl()),\n            ]);\n\n        return $panel;\n    }\n\n    public function shouldRegisterMenuItem(): bool\n    {\n        $hasVerifiedEmail = Auth::user()?->hasVerifiedEmail();\n\n        return Filament::hasTenancy()\n            ? $hasVerifiedEmail && Filament::getTenant()\n            : $hasVerifiedEmail;\n    }\n}\n"
  },
  {
    "path": "app/Providers/FortifyServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Actions\\Fortify\\CreateNewSocialUser;\nuse App\\Actions\\Fortify\\ResetUserPassword;\nuse App\\Actions\\Fortify\\UpdateUserPassword;\nuse App\\Actions\\Fortify\\UpdateUserProfileInformation;\nuse App\\Contracts\\User\\CreatesNewSocialUsers;\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\RateLimiter;\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Fortify\\Fortify;\n\nfinal class FortifyServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     */\n    public function register(): void\n    {\n        $this->app->singleton(CreatesNewSocialUsers::class, CreateNewSocialUser::class);\n    }\n\n    /**\n     * Bootstrap any application services.\n     */\n    public function boot(): void\n    {\n        Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);\n        Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);\n        Fortify::resetUserPasswordsUsing(ResetUserPassword::class);\n\n        RateLimiter::for('login', function (Request $request) {\n            $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());\n\n            return Limit::perMinute(5)->by($throttleKey);\n        });\n\n        RateLimiter::for('two-factor', fn (Request $request) => Limit::perMinute(5)->by($request->session()->get('login.id')));\n    }\n}\n"
  },
  {
    "path": "app/Providers/HealthServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Health\\AnthropicModelCheck;\nuse Illuminate\\Support\\ServiceProvider;\nuse Spatie\\CpuLoadHealthCheck\\CpuLoadCheck;\nuse Spatie\\Health\\Checks\\Checks\\CacheCheck;\nuse Spatie\\Health\\Checks\\Checks\\DatabaseCheck;\nuse Spatie\\Health\\Checks\\Checks\\DatabaseConnectionCountCheck;\nuse Spatie\\Health\\Checks\\Checks\\DatabaseSizeCheck;\nuse Spatie\\Health\\Checks\\Checks\\DatabaseTableSizeCheck;\nuse Spatie\\Health\\Checks\\Checks\\DebugModeCheck;\nuse Spatie\\Health\\Checks\\Checks\\EnvironmentCheck;\nuse Spatie\\Health\\Checks\\Checks\\HorizonCheck;\nuse Spatie\\Health\\Checks\\Checks\\QueueCheck;\nuse Spatie\\Health\\Checks\\Checks\\RedisCheck;\nuse Spatie\\Health\\Checks\\Checks\\RedisMemoryUsageCheck;\nuse Spatie\\Health\\Checks\\Checks\\ScheduleCheck;\nuse Spatie\\Health\\Checks\\Checks\\UsedDiskSpaceCheck;\nuse Spatie\\Health\\Facades\\Health;\nuse Spatie\\SecurityAdvisoriesHealthCheck\\SecurityAdvisoriesCheck;\n\nfinal class HealthServiceProvider extends ServiceProvider\n{\n    public function boot(): void\n    {\n        if (! $this->isEnabled()) {\n            return;\n        }\n\n        Health::checks([\n            DatabaseCheck::new(),\n\n            DatabaseConnectionCountCheck::new()\n                ->warnWhenMoreConnectionsThan(50)\n                ->failWhenMoreConnectionsThan(100),\n\n            DatabaseSizeCheck::new()\n                ->failWhenSizeAboveGb(errorThresholdGb: 10.0),\n\n            DatabaseTableSizeCheck::new()\n                ->table('custom_field_values', maxSizeInMb: 5_000)\n                ->table('notes', maxSizeInMb: 5_000)\n                ->table('companies', maxSizeInMb: 2_000)\n                ->table('people', maxSizeInMb: 2_000)\n                ->table('opportunities', maxSizeInMb: 2_000)\n                ->table('tasks', maxSizeInMb: 2_000)\n                ->table('media', maxSizeInMb: 5_000)\n                ->table('jobs', maxSizeInMb: 1_000),\n\n            RedisCheck::new(),\n\n            RedisMemoryUsageCheck::new()\n                ->warnWhenAboveMb(500)\n                ->failWhenAboveMb(1_000),\n\n            HorizonCheck::new(),\n\n            QueueCheck::new()\n                ->name('Queue: default'),\n\n            QueueCheck::new()\n                ->name('Queue: imports')\n                ->onQueue('imports'),\n\n            UsedDiskSpaceCheck::new()\n                ->warnWhenUsedSpaceIsAbovePercentage(70)\n                ->failWhenUsedSpaceIsAbovePercentage(90),\n\n            CpuLoadCheck::new()\n                ->failWhenLoadIsHigherInTheLast5Minutes(4.0)\n                ->failWhenLoadIsHigherInTheLast15Minutes(2.0),\n\n            DebugModeCheck::new(),\n\n            EnvironmentCheck::new(),\n\n            ScheduleCheck::new()\n                ->heartbeatMaxAgeInMinutes(2),\n\n            SecurityAdvisoriesCheck::new(),\n\n            CacheCheck::new(),\n\n            AnthropicModelCheck::new()\n                ->name('Anthropic: Summary Model'),\n        ]);\n    }\n\n    private function isEnabled(): bool\n    {\n        return (bool) config('app.health_checks_enabled', false);\n    }\n}\n"
  },
  {
    "path": "app/Providers/HorizonServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Laravel\\Horizon\\HorizonApplicationServiceProvider;\nuse Override;\n\nfinal class HorizonServiceProvider extends HorizonApplicationServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     */\n    #[Override]\n    public function boot(): void\n    {\n        parent::boot();\n\n        // Horizon::routeSmsNotificationsTo('15556667777');\n        // Horizon::routeMailNotificationsTo('example@example.com');\n        // Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');\n    }\n\n    /**\n     * Register the Horizon gate.\n     *\n     * This gate determines who can access Horizon in non-local environments.\n     */\n    protected function gate(): void\n    {\n        Gate::define('viewHorizon', fn (User $user): bool => $user->email === 'manuk.minasyan1@gmail.com');\n    }\n}\n"
  },
  {
    "path": "app/Providers/JetstreamServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse App\\Actions\\Jetstream\\AddTeamMember;\nuse App\\Actions\\Jetstream\\CreateTeam;\nuse App\\Actions\\Jetstream\\DeleteTeam;\nuse App\\Actions\\Jetstream\\DeleteUser;\nuse App\\Actions\\Jetstream\\InviteTeamMember;\nuse App\\Actions\\Jetstream\\RemoveTeamMember;\nuse App\\Actions\\Jetstream\\UpdateTeamName;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\ServiceProvider;\nuse Laravel\\Jetstream\\Jetstream;\n\nfinal class JetstreamServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     */\n    public function register(): void\n    {\n        Jetstream::ignoreRoutes();\n    }\n\n    /**\n     * Bootstrap any application services.\n     */\n    public function boot(): void\n    {\n        $this->configureModels();\n        $this->configurePermissions();\n        $this->configureActions();\n    }\n\n    /**\n     * Configure the models that Jetstream uses.\n     */\n    private function configureModels(): void\n    {\n        Jetstream::useUserModel(User::class);\n        Jetstream::useTeamModel(Team::class);\n    }\n\n    /**\n     * Configure the actions that are available within the application.\n     */\n    private function configureActions(): void\n    {\n        Jetstream::createTeamsUsing(CreateTeam::class);\n        Jetstream::updateTeamNamesUsing(UpdateTeamName::class);\n        Jetstream::addTeamMembersUsing(AddTeamMember::class);\n        Jetstream::inviteTeamMembersUsing(InviteTeamMember::class);\n        Jetstream::removeTeamMembersUsing(RemoveTeamMember::class);\n        Jetstream::deleteTeamsUsing(DeleteTeam::class);\n        Jetstream::deleteUsersUsing(DeleteUser::class);\n    }\n\n    /**\n     * Configure the roles and permissions that are available within the application.\n     */\n    private function configurePermissions(): void\n    {\n        Jetstream::defaultApiTokenPermissions(['read']);\n\n        Jetstream::role('admin', 'Administrator', [\n            'create',\n            'read',\n            'update',\n            'delete',\n        ])->description('Administrator users can perform any action.');\n\n        Jetstream::role('editor', 'Editor', [\n            'read',\n            'create',\n            'update',\n        ])->description('Editor users have the ability to read, create, and update.');\n    }\n}\n"
  },
  {
    "path": "app/Providers/MacroServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\URL;\nuse Illuminate\\Support\\ServiceProvider;\n\nfinal class MacroServiceProvider extends ServiceProvider\n{\n    public function boot(): void\n    {\n        URL::macro('getAppUrl', function (string $path = ''): string {\n            $trimmedPath = ltrim($path, '/');\n\n            if ($domain = config('app.app_panel_domain')) {\n                $parsed = parse_url((string) config('app.url'));\n                $scheme = $parsed['scheme'] ?? 'https';\n                $port = isset($parsed['port']) ? \":{$parsed['port']}\" : '';\n                $base = \"{$scheme}://{$domain}{$port}\";\n\n                return $trimmedPath !== '' ? \"{$base}/{$trimmedPath}\" : $base;\n            }\n\n            $panelPath = config('app.app_panel_path', 'app');\n            $base = rtrim((string) config('app.url'), '/').\"/{$panelPath}\";\n\n            return $trimmedPath !== '' ? \"{$base}/{$trimmedPath}\" : $base;\n        });\n\n        URL::macro('getMcpUrl', function (): string {\n            if ($domain = config('app.mcp_domain')) {\n                $parsed = parse_url((string) config('app.url'));\n                $scheme = $parsed['scheme'] ?? 'https';\n                $port = isset($parsed['port']) ? \":{$parsed['port']}\" : '';\n\n                return \"{$scheme}://{$domain}{$port}\";\n            }\n\n            return rtrim((string) config('app.url'), '/').'/mcp';\n        });\n\n        URL::macro('getApiUrl', function (string $path = ''): string {\n            $trimmedPath = ltrim($path, '/');\n\n            if ($domain = config('app.api_domain')) {\n                $parsed = parse_url((string) config('app.url'));\n                $scheme = $parsed['scheme'] ?? 'https';\n                $port = isset($parsed['port']) ? \":{$parsed['port']}\" : '';\n                $base = \"{$scheme}://{$domain}{$port}\";\n\n                return $trimmedPath !== '' ? \"{$base}/{$trimmedPath}\" : $base;\n            }\n\n            $base = rtrim((string) config('app.url'), '/').'/api';\n\n            return $trimmedPath !== '' ? \"{$base}/{$trimmedPath}\" : $base;\n        });\n\n        URL::macro('getPublicUrl', function (string $path = ''): string {\n            $base = rtrim((string) config('app.url'), '/');\n            $trimmedPath = ltrim($path, '/');\n\n            return $trimmedPath !== '' ? \"{$base}/{$trimmedPath}\" : $base;\n        });\n    }\n}\n"
  },
  {
    "path": "app/Rules/ValidCustomFields.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Rules;\n\nuse App\\Models\\CustomField;\nuse Closure;\nuse Illuminate\\Contracts\\Database\\Query\\Builder;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Database\\Eloquent\\Collection as EloquentCollection;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\nuse Illuminate\\Validation\\Rule;\nuse Relaticle\\CustomFields\\Facades\\CustomFieldsType;\nuse Relaticle\\CustomFields\\Models\\CustomField as BaseCustomField;\nuse Relaticle\\CustomFields\\Services\\ValidationService;\n\nfinal readonly class ValidCustomFields implements ValidationRule\n{\n    public function __construct(\n        private string $tenantId,\n        private string $entityType,\n        private bool $isUpdate = false,\n    ) {}\n\n    /**\n     * @param  array<string, mixed>|null  $submittedFields\n     * @return array<string, array<int, mixed>>\n     */\n    public function toRules(mixed $submittedFields = null): array\n    {\n        $submittedFields = is_array($submittedFields) ? $submittedFields : null;\n        $submittedCodes = is_array($submittedFields) ? array_keys($submittedFields) : [];\n\n        $customFields = $this->resolveCustomFields($submittedCodes);\n\n        $rules = ['custom_fields' => ['sometimes', 'array', $this]];\n\n        if ($customFields->isNotEmpty()) {\n            $validationService = resolve(ValidationService::class);\n\n            /** @var BaseCustomField $customField */\n            foreach ($customFields as $customField) {\n                $fieldRules = $validationService->getValidationRules($customField);\n\n                if ($fieldRules !== []) {\n                    $fieldRules = $this->ensureNullableForDateFields($customField->type, $fieldRules);\n                    $rules[\"custom_fields.{$customField->code}\"] = $fieldRules;\n                }\n\n                $itemRules = $validationService->getItemValidationRules($customField);\n\n                if ($itemRules !== []) {\n                    $rules[\"custom_fields.{$customField->code}.*\"] = $itemRules;\n                }\n\n                $this->addChoiceFieldOptionRules($customField, $rules);\n            }\n        }\n\n        return $rules;\n    }\n\n    /**\n     * Validates that all submitted keys are known custom field codes.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! is_array($value)) {\n            return;\n        }\n\n        $knownCodes = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->tenantId)\n            ->where('entity_type', $this->entityType)\n            ->active()\n            ->pluck('code')\n            ->all();\n\n        $unknownKeys = array_diff(array_keys($value), $knownCodes);\n\n        if ($unknownKeys === []) {\n            return;\n        }\n\n        $unknownList = implode(', ', $unknownKeys);\n\n        $fail(\"Unknown custom field keys: {$unknownList}.\");\n    }\n\n    /**\n     * Prepend 'nullable' to validation rules for date/date_time fields so null clears the value.\n     *\n     * The vendor package's ValidationService does not include 'nullable', causing\n     * the 'date' rule to reject null. We fix this at the application layer.\n     *\n     * @param  array<int, mixed>  $fieldRules\n     * @return array<int, mixed>\n     */\n    private function ensureNullableForDateFields(string $fieldType, array $fieldRules): array\n    {\n        $fieldTypeData = CustomFieldsType::getFieldType($fieldType);\n\n        if ($fieldTypeData === null || ! $fieldTypeData->dataType->isDateOrDateTime()) {\n            return $fieldRules;\n        }\n\n        if (in_array('nullable', $fieldRules, true)) {\n            return $fieldRules;\n        }\n\n        return ['nullable', ...$fieldRules];\n    }\n\n    /**\n     * Add Rule::in validation for choice fields to ensure submitted option IDs actually exist.\n     *\n     * For single-choice fields (select, radio): validates the scalar value.\n     * For multi-choice fields (multi_select, checkbox_list): validates each array element.\n     * Skips fields that accept arbitrary values (e.g., tags) or use a lookup_type.\n     *\n     * @param  array<string, array<int, mixed>>  $rules\n     */\n    private function addChoiceFieldOptionRules(BaseCustomField $customField, array &$rules): void\n    {\n        $fieldTypeData = CustomFieldsType::getFieldType($customField->type);\n\n        if ($fieldTypeData === null) {\n            return;\n        }\n\n        if (! $fieldTypeData->dataType->isChoiceField()) {\n            return;\n        }\n\n        if ($fieldTypeData->acceptsArbitraryValues) {\n            return;\n        }\n\n        if ($customField->lookup_type !== null) {\n            return;\n        }\n\n        $optionIds = $customField->options->pluck('id')->all();\n        $inRule = Rule::in($optionIds);\n\n        $ruleKey = \"custom_fields.{$customField->code}\";\n\n        if ($fieldTypeData->dataType->isMultiChoiceField()) {\n            $rules[\"{$ruleKey}.*\"] = array_merge($rules[\"{$ruleKey}.*\"] ?? [], [$inRule]);\n        } else {\n            $rules[$ruleKey] = array_merge($rules[$ruleKey] ?? [], [$inRule]);\n        }\n    }\n\n    /**\n     * @param  array<int, string>  $submittedCodes\n     * @return EloquentCollection<int, BaseCustomField>\n     */\n    private function resolveCustomFields(array $submittedCodes): EloquentCollection\n    {\n        $baseQuery = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->tenantId)\n            ->where('entity_type', $this->entityType)\n            ->active()\n            ->with('options');\n\n        if ($this->isUpdate) {\n            if ($submittedCodes === []) {\n                return new EloquentCollection;\n            }\n\n            return $baseQuery->whereIn('code', $submittedCodes)->get();\n        }\n\n        if ($submittedCodes === []) {\n            return $baseQuery\n                ->whereJsonContains('validation_rules', [['name' => 'required']])\n                ->get();\n        }\n\n        return $baseQuery\n            ->where(function (Builder $query) use ($submittedCodes): void {\n                $query->whereIn('code', $submittedCodes)\n                    ->orWhereJsonContains('validation_rules', [['name' => 'required']]);\n            })\n            ->get();\n    }\n}\n"
  },
  {
    "path": "app/Rules/ValidTeamSlug.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Rules;\n\nuse App\\Models\\Team;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\nfinal readonly class ValidTeamSlug implements ValidationRule\n{\n    public function __construct(\n        private ?string $ignoreValue = null,\n    ) {}\n\n    /**\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        $value = (string) $value;\n\n        if (mb_strlen($value) < 3) {\n            $fail('The :attribute must be at least 3 characters.');\n\n            return;\n        }\n\n        if (! preg_match(Team::SLUG_REGEX, $value)) {\n            $fail('The :attribute may only contain lowercase letters, numbers, and hyphens.');\n\n            return;\n        }\n\n        if ($this->ignoreValue !== null && $value === $this->ignoreValue) {\n            return;\n        }\n\n        if (in_array($value, Team::RESERVED_SLUGS, true)) {\n            $fail('The :attribute is reserved and cannot be used.');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Scribe/Strategies/GetFromSpatieQueryBuilder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Scribe\\Strategies;\n\nuse Knuckles\\Camel\\Extraction\\ExtractedEndpointData;\nuse Knuckles\\Scribe\\Extracting\\Strategies\\Strategy;\nuse ReflectionClass;\nuse ReflectionMethod;\nuse ReflectionNamedType;\n\n/**\n * Extracts query parameters from Spatie QueryBuilder usage in List action classes.\n *\n * Reads allowedFilters(), allowedSorts(), and allowedIncludes() from the action\n * class injected into the controller's index() method, then documents them as\n * query parameters automatically.\n */\nfinal class GetFromSpatieQueryBuilder extends Strategy\n{\n    /**\n     * @param  array<string, array<string, string|bool>>  $routeRules\n     * @return array<string, array<string, mixed>>|null\n     */\n    public function __invoke(ExtractedEndpointData $endpointData, array $routeRules = []): ?array\n    {\n        if (! $this->isIndexMethod($endpointData)) {\n            return null;\n        }\n\n        $actionClass = $this->findActionClass($endpointData);\n\n        if ($actionClass === null) {\n            return null;\n        }\n\n        return $this->extractQueryParams($actionClass);\n    }\n\n    private function isIndexMethod(ExtractedEndpointData $endpointData): bool\n    {\n        return $endpointData->method->getName() === 'index';\n    }\n\n    /**\n     * Find the List* action class from the controller method's type-hinted parameters.\n     *\n     * @return class-string|null\n     */\n    private function findActionClass(ExtractedEndpointData $endpointData): ?string\n    {\n        foreach ($endpointData->method->getParameters() as $parameter) {\n            $type = $parameter->getType();\n            if (! $type instanceof ReflectionNamedType) {\n                continue;\n            }\n            if ($type->isBuiltin()) {\n                continue;\n            }\n\n            $className = $type->getName();\n\n            if (str_starts_with($className, 'App\\\\Actions\\\\') && str_starts_with(class_basename($className), 'List') && class_exists($className)) {\n                return $className;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Read the execute() method source and extract QB parameters.\n     *\n     * @param  class-string  $actionClass\n     * @return array<string, array<string, mixed>>\n     */\n    private function extractQueryParams(string $actionClass): array\n    {\n        $params = [];\n\n        try {\n            $reflection = new ReflectionClass($actionClass);\n            $method = $reflection->getMethod('execute');\n            $source = $this->getMethodSource($method);\n        } catch (\\ReflectionException) {\n            return [];\n        }\n\n        $this->extractFilters($source, $params);\n        $this->extractSorts($source, $params);\n        $this->extractIncludes($source, $params);\n        $this->addPaginationParams($params);\n\n        return $params;\n    }\n\n    private function getMethodSource(ReflectionMethod $method): string\n    {\n        $fileName = $method->getFileName();\n\n        if ($fileName === false) {\n            return '';\n        }\n\n        $file = file($fileName);\n\n        if ($file === false) {\n            return '';\n        }\n\n        $start = $method->getStartLine() - 1;\n        $end = $method->getEndLine();\n\n        return implode('', array_slice($file, $start, $end - $start));\n    }\n\n    /**\n     * @param  array<string, array<string, mixed>>  $params\n     */\n    private function extractFilters(string $source, array &$params): void\n    {\n        if (preg_match_all(\"/AllowedFilter::\\w+\\('([^']+)'/\", $source, $matches)) {\n            foreach ($matches[1] as $filter) {\n                $params[\"filter[{$filter}]\"] = [\n                    'type' => 'string',\n                    'required' => false,\n                    'description' => \"Filter results by {$filter}.\",\n                    'example' => null,\n                ];\n            }\n        }\n    }\n\n    /**\n     * @param  array<string, array<string, mixed>>  $params\n     */\n    private function extractSorts(string $source, array &$params): void\n    {\n        if (preg_match(\"/allowedSorts\\(((?:[^()]*|\\((?:[^()]*|\\([^()]*\\))*\\))*)\\)/s\", $source, $match)) {\n            preg_match_all(\"/'([^']+)'/\", $match[1], $sortMatches);\n            $sorts = $sortMatches[1];\n\n            if ($sorts !== []) {\n                $sortList = implode(', ', array_map(fn (string $s): string => \"{$s}, -{$s}\", $sorts));\n                $params['sort'] = [\n                    'type' => 'string',\n                    'required' => false,\n                    'description' => \"Sort results. Prefix with `-` for descending. Allowed: {$sortList}.\",\n                    'example' => '-created_at',\n                ];\n            }\n        }\n    }\n\n    /**\n     * @param  array<string, array<string, mixed>>  $params\n     */\n    private function extractIncludes(string $source, array &$params): void\n    {\n        if (preg_match(\"/allowedIncludes\\(((?:[^()]*|\\((?:[^()]*|\\([^()]*\\))*\\))*)\\)/s\", $source, $match)) {\n            preg_match_all(\"/'([^']+)'/\", $match[1], $includeMatches);\n            $includes = $includeMatches[1];\n\n            if ($includes !== []) {\n                $includeList = implode(', ', $includes);\n                $params['include'] = [\n                    'type' => 'string',\n                    'required' => false,\n                    'description' => \"Include related resources (comma-separated). Allowed: {$includeList}.\",\n                    'example' => $includes[0],\n                ];\n            }\n        }\n    }\n\n    /**\n     * @param  array<string, array<string, mixed>>  $params\n     */\n    private function addPaginationParams(array &$params): void\n    {\n        $params['per_page'] = [\n            'type' => 'integer',\n            'required' => false,\n            'description' => 'Number of results per page (1-100). Default: 15.',\n            'example' => 15,\n        ];\n\n        $params['cursor'] = [\n            'type' => 'string',\n            'required' => false,\n            'description' => 'Cursor for cursor-based pagination. When present, switches from offset to cursor pagination.',\n            'example' => null,\n        ];\n\n        $params['page'] = [\n            'type' => 'integer',\n            'required' => false,\n            'description' => 'Page number for offset pagination (when cursor is not used). Default: 1.',\n            'example' => 1,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Services/AI/RecordContextBuilder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Services\\AI;\n\nuse App\\Enums\\CustomFields\\CompanyField;\nuse App\\Enums\\CustomFields\\NoteField;\nuse App\\Enums\\CustomFields\\OpportunityField;\nuse App\\Enums\\CustomFields\\PeopleField;\nuse App\\Enums\\CustomFields\\TaskField;\nuse App\\Models\\Company;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse Closure;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\Relation;\nuse Illuminate\\Support\\Str;\nuse InvalidArgumentException;\n\nfinal readonly class RecordContextBuilder\n{\n    private const int RELATIONSHIP_LIMIT = 10;\n\n    /**\n     * Build context data for a record to be used in AI summary generation.\n     *\n     * @return array<string, mixed>\n     */\n    public function buildContext(Model $record): array\n    {\n        return match (true) {\n            $record instanceof Company => $this->buildCompanyContext($record),\n            $record instanceof People => $this->buildPeopleContext($record),\n            $record instanceof Opportunity => $this->buildOpportunityContext($record),\n            default => throw new InvalidArgumentException('Unsupported record type: '.$record::class),\n        };\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function buildCompanyContext(Company $company): array\n    {\n        $company->loadCount(['notes', 'tasks', 'opportunities', 'people']);\n\n        $company->load([\n            'accountOwner',\n            'customFieldValues.customField.options',\n            'notes' => $this->recentWithCustomFields('notes'),\n            'tasks' => $this->recentWithCustomFields('tasks'),\n            'opportunities' => $this->recentWithCustomFields('opportunities'),\n        ]);\n\n        return [\n            'entity_type' => 'Company',\n            'name' => $company->name,\n            'basic_info' => $this->getCompanyBasicInfo($company),\n            'relationships' => [\n                'people_count' => $company->people_count,\n                'opportunities_count' => $company->opportunities_count,\n            ],\n            'opportunities' => $this->formatOpportunities($company->opportunities, $company->opportunities_count),\n            'notes' => $this->formatNotes($company->notes, $company->notes_count),\n            'tasks' => $this->formatTasks($company->tasks, $company->tasks_count),\n            'last_updated' => $company->updated_at?->diffForHumans(),\n            'created' => $company->created_at?->diffForHumans(),\n        ];\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function buildPeopleContext(People $person): array\n    {\n        $person->loadCount(['notes', 'tasks']);\n\n        $person->load([\n            'company',\n            'customFieldValues.customField.options',\n            'notes' => $this->recentWithCustomFields('notes'),\n            'tasks' => $this->recentWithCustomFields('tasks'),\n        ]);\n\n        return [\n            'entity_type' => 'Person',\n            'name' => $person->name,\n            'basic_info' => $this->getPeopleBasicInfo($person),\n            'company' => $person->company?->name,\n            'notes' => $this->formatNotes($person->notes, $person->notes_count),\n            'tasks' => $this->formatTasks($person->tasks, $person->tasks_count),\n            'last_updated' => $person->updated_at?->diffForHumans(),\n            'created' => $person->created_at?->diffForHumans(),\n        ];\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function buildOpportunityContext(Opportunity $opportunity): array\n    {\n        $opportunity->loadCount(['notes', 'tasks']);\n\n        $opportunity->load([\n            'company',\n            'contact',\n            'customFieldValues.customField.options',\n            'notes' => $this->recentWithCustomFields('notes'),\n            'tasks' => $this->recentWithCustomFields('tasks'),\n        ]);\n\n        return [\n            'entity_type' => 'Opportunity',\n            'name' => $this->getOpportunityName($opportunity),\n            'basic_info' => $this->getOpportunityBasicInfo($opportunity),\n            'company' => $opportunity->company?->name,\n            'contact' => $opportunity->contact?->name,\n            'notes' => $this->formatNotes($opportunity->notes, $opportunity->notes_count),\n            'tasks' => $this->formatTasks($opportunity->tasks, $opportunity->tasks_count),\n            'last_updated' => $opportunity->updated_at?->diffForHumans(),\n            'created' => $opportunity->created_at?->diffForHumans(),\n        ];\n    }\n\n    private function recentWithCustomFields(string $table): Closure\n    {\n        return fn (Relation $query): Relation => $query\n            ->with('customFieldValues.customField.options')\n            ->latest(\"{$table}.created_at\")\n            ->limit(self::RELATIONSHIP_LIMIT);\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function getCompanyBasicInfo(Company $company): array\n    {\n        $domains = $this->getCustomFieldValue($company, CompanyField::DOMAINS->value);\n\n        return collect([\n            'domain' => is_array($domains) ? implode(', ', $domains) : $domains,\n            'is_icp' => (bool) $this->getCustomFieldValue($company, CompanyField::ICP->value),\n            'account_owner' => $company->accountOwner?->name,\n        ])->filter(fn (mixed $value): bool => filled($value))->all();\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function getPeopleBasicInfo(People $person): array\n    {\n        $emails = $this->getCustomFieldValue($person, PeopleField::EMAILS->value);\n\n        return collect([\n            'job_title' => $this->getCustomFieldValue($person, PeopleField::JOB_TITLE->value),\n            'emails' => is_array($emails) ? implode(', ', $emails) : $emails,\n        ])->filter(fn (mixed $value): bool => filled($value))->all();\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function getOpportunityBasicInfo(Opportunity $opportunity): array\n    {\n        $amount = $this->getCustomFieldValue($opportunity, OpportunityField::AMOUNT->value);\n        $closeDate = $this->getCustomFieldValue($opportunity, OpportunityField::CLOSE_DATE->value);\n\n        return collect([\n            'stage' => $this->getCustomFieldValue($opportunity, OpportunityField::STAGE->value),\n            'amount' => filled($amount) ? '$'.number_format((float) $amount, 2) : null,\n            'close_date' => $this->formatDate($closeDate),\n        ])->filter(fn (mixed $value): bool => filled($value))->all();\n    }\n\n    private function getOpportunityName(Opportunity $opportunity): string\n    {\n        $stage = $this->getCustomFieldValue($opportunity, OpportunityField::STAGE->value);\n\n        return $opportunity->company?->name.' - '.($stage ?? 'Opportunity');\n    }\n\n    /**\n     * @param  Collection<int, Note>  $notes\n     * @return array<string, mixed>\n     */\n    private function formatNotes(Collection $notes, int $totalCount): array\n    {\n        $formatted = $notes->map(fn (Note $note): array => [\n            'title' => $note->title,\n            'content' => $this->stripHtml((string) $this->getCustomFieldValue($note, NoteField::BODY->value)),\n            'created' => $note->created_at?->diffForHumans(),\n        ])->values()->all();\n\n        return $this->withPaginationInfo($formatted, $totalCount);\n    }\n\n    /**\n     * @param  Collection<int, Task>  $tasks\n     * @return array<string, mixed>\n     */\n    private function formatTasks(Collection $tasks, int $totalCount): array\n    {\n        $formatted = $tasks->map(fn (Task $task): array => [\n            'title' => $task->title,\n            'status' => $this->getCustomFieldValue($task, TaskField::STATUS->value),\n            'priority' => $this->getCustomFieldValue($task, TaskField::PRIORITY->value),\n            'due_date' => $this->formatDate($this->getCustomFieldValue($task, TaskField::DUE_DATE->value)),\n        ])->values()->all();\n\n        return $this->withPaginationInfo($formatted, $totalCount);\n    }\n\n    /**\n     * @param  Collection<int, Opportunity>  $opportunities\n     * @return array<string, mixed>\n     */\n    private function formatOpportunities(Collection $opportunities, int $totalCount): array\n    {\n        $formatted = $opportunities->map(function (Opportunity $opportunity): array {\n            $amount = $this->getCustomFieldValue($opportunity, OpportunityField::AMOUNT->value);\n\n            return [\n                'stage' => $this->getCustomFieldValue($opportunity, OpportunityField::STAGE->value),\n                'amount' => filled($amount) ? '$'.number_format((float) $amount, 2) : null,\n            ];\n        })->values()->all();\n\n        return $this->withPaginationInfo($formatted, $totalCount);\n    }\n\n    /**\n     * @param  array<int, array<string, mixed>>  $items\n     * @return array<string, mixed>\n     */\n    private function withPaginationInfo(array $items, int $totalCount): array\n    {\n        $showing = count($items);\n\n        return [\n            'items' => $items,\n            'showing' => $showing,\n            'total' => $totalCount,\n            'has_more' => $totalCount > $showing,\n        ];\n    }\n\n    private function getCustomFieldValue(Model $model, string $code): mixed\n    {\n        if (! method_exists($model, 'customFieldValues')) {\n            return null;\n        }\n\n        /** @var Collection<int, CustomFieldValue> $customFieldValues */\n        $customFieldValues = $model->customFieldValues; // @phpstan-ignore property.notFound\n\n        $customFieldValue = $customFieldValues->first(fn (CustomFieldValue $cfv): bool => $cfv->customField->code === $code);\n\n        if ($customFieldValue === null) {\n            return null;\n        }\n\n        return $model->getCustomFieldValue($customFieldValue->customField); // @phpstan-ignore method.notFound\n    }\n\n    private function formatDate(mixed $date): ?string\n    {\n        if ($date === null) {\n            return null;\n        }\n\n        return $date instanceof \\DateTimeInterface\n            ? $date->format('M j, Y')\n            : (string) $date;\n    }\n\n    private function stripHtml(string $html): string\n    {\n        $text = strip_tags($html);\n\n        return Str::limit(trim((string) preg_replace('/\\s+/', ' ', $text)), 500);\n    }\n}\n"
  },
  {
    "path": "app/Services/AI/RecordSummaryService.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Services\\AI;\n\nuse App\\Models\\AiSummary;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Prism\\Prism\\Enums\\Provider;\nuse Prism\\Prism\\Facades\\Prism;\nuse Prism\\Prism\\ValueObjects\\Usage;\nuse RuntimeException;\n\nfinal readonly class RecordSummaryService\n{\n    public function __construct(\n        private RecordContextBuilder $contextBuilder\n    ) {}\n\n    private function model(): string\n    {\n        return config('services.anthropic.summary_model');\n    }\n\n    /**\n     * Get or generate an AI summary for a record.\n     */\n    public function getSummary(Model $record, bool $regenerate = false): AiSummary\n    {\n        if (! $regenerate && method_exists($record, 'aiSummary')) {\n            /** @var AiSummary|null $cached */\n            $cached = $record->aiSummary; // @phpstan-ignore property.notFound\n            if ($cached !== null) {\n                return $cached;\n            }\n        }\n\n        return $this->generateAndCacheSummary($record);\n    }\n\n    private function generateAndCacheSummary(Model $record): AiSummary\n    {\n        $context = $this->contextBuilder->buildContext($record);\n        $prompt = $this->formatPrompt($context);\n\n        $response = Prism::text()\n            ->using(Provider::Anthropic, $this->model())\n            ->withSystemPrompt($this->getSystemPrompt())\n            ->withPrompt($prompt)\n            ->generate();\n\n        return $this->cacheSummary($record, $response->text, $response->usage);\n    }\n\n    private function cacheSummary(Model $record, string $summary, Usage $usage): AiSummary\n    {\n        $teamId = Filament::getTenant()?->getKey();\n\n        throw_if($teamId === null, RuntimeException::class, 'No team context available for caching AI summary');\n\n        if (method_exists($record, 'aiSummary')) {\n            $record->aiSummary()->delete();\n        }\n\n        return AiSummary::query()->create([\n            'team_id' => $teamId,\n            'summarizable_type' => $record->getMorphClass(),\n            'summarizable_id' => $record->getKey(),\n            'summary' => $summary,\n            'model_used' => $this->model(),\n            'prompt_tokens' => $usage->promptTokens,\n            'completion_tokens' => $usage->completionTokens,\n        ]);\n    }\n\n    private function getSystemPrompt(): string\n    {\n        return <<<'PROMPT'\nYou are a CRM assistant that generates concise, actionable summaries of business records.\n\nYour summaries should:\n- Be 2-3 sentences maximum\n- Highlight the most important business context\n- Include relevant metrics (deal size, last contact date, open tasks) when available\n- Suggest urgency or opportunity when applicable\n- Use professional, direct language\n- Focus on actionable insights for a sales or account management professional\n\nDo not use bullet points or formatting. Write in flowing prose that is easy to scan quickly.\nPROMPT;\n    }\n\n    /**\n     * @param  array<string, mixed>  $context\n     */\n    private function formatPrompt(array $context): string\n    {\n        $parts = collect([\n            \"Generate a brief CRM summary for this {$context['entity_type']}:\",\n            '',\n            \"**{$context['name']}**\",\n        ]);\n\n        $this->addBasicInfo($parts, $context);\n        $this->addRelationships($parts, $context);\n        $this->addOpportunities($parts, $context);\n        $this->addNotes($parts, $context);\n        $this->addTasks($parts, $context);\n        $this->addTimestamps($parts, $context);\n\n        return $parts->implode(\"\\n\");\n    }\n\n    /**\n     * @param  Collection<int, string>  $parts\n     * @param  array<string, mixed>  $context\n     */\n    private function addBasicInfo(Collection $parts, array $context): void\n    {\n        if (blank($context['basic_info'])) {\n            return;\n        }\n\n        $parts->push('', 'Basic Information:');\n        foreach ($context['basic_info'] as $key => $value) {\n            $displayValue = is_array($value) ? implode(', ', $value) : $value;\n            $parts->push(\"- {$this->formatLabel($key)}: {$displayValue}\");\n        }\n\n        if (filled($context['company'] ?? null)) {\n            $parts->push(\"- Company: {$context['company']}\");\n        }\n\n        if (filled($context['contact'] ?? null)) {\n            $parts->push(\"- Contact: {$context['contact']}\");\n        }\n    }\n\n    /**\n     * @param  Collection<int, string>  $parts\n     * @param  array<string, mixed>  $context\n     */\n    private function addRelationships(Collection $parts, array $context): void\n    {\n        if (blank($context['relationships'] ?? [])) {\n            return;\n        }\n\n        $parts->push('', 'Relationships:');\n        foreach ($context['relationships'] as $key => $value) {\n            $parts->push(\"- {$this->formatLabel($key)}: {$value}\");\n        }\n    }\n\n    /**\n     * @param  Collection<int, string>  $parts\n     * @param  array<string, mixed>  $context\n     */\n    private function addOpportunities(Collection $parts, array $context): void\n    {\n        $opportunities = Arr::get($context, 'opportunities.items', []);\n        if (blank($opportunities)) {\n            return;\n        }\n\n        $total = Arr::get($context, 'opportunities.total', count($opportunities));\n        $showing = Arr::get($context, 'opportunities.showing', count($opportunities));\n\n        $header = $total > $showing\n            ? \"Opportunities (showing {$showing} of {$total}):\"\n            : 'Opportunities:';\n\n        $parts->push('', $header);\n        foreach ($opportunities as $opp) {\n            $stage = $opp['stage'] ?? 'Unknown stage';\n            $amount = $opp['amount'] ?? 'No amount';\n            $parts->push(\"- {$stage}: {$amount}\");\n        }\n    }\n\n    /**\n     * @param  Collection<int, string>  $parts\n     * @param  array<string, mixed>  $context\n     */\n    private function addNotes(Collection $parts, array $context): void\n    {\n        $notes = Arr::get($context, 'notes.items', []);\n        if (blank($notes)) {\n            return;\n        }\n\n        $total = Arr::get($context, 'notes.total', count($notes));\n        $showing = Arr::get($context, 'notes.showing', count($notes));\n\n        $header = $total > $showing\n            ? \"Recent Notes (showing {$showing} of {$total}):\"\n            : 'Recent Notes:';\n\n        $parts->push('', $header);\n        foreach (array_slice($notes, 0, 5) as $note) {\n            $title = $note['title'] ?? 'Untitled';\n            $content = $note['content'] ?? '';\n            $created = $note['created'] ?? '';\n            $parts->push(\"- [{$created}] {$title}: {$content}\");\n        }\n    }\n\n    /**\n     * @param  Collection<int, string>  $parts\n     * @param  array<string, mixed>  $context\n     */\n    private function addTasks(Collection $parts, array $context): void\n    {\n        $tasks = Arr::get($context, 'tasks.items', []);\n        if (blank($tasks)) {\n            return;\n        }\n\n        $total = Arr::get($context, 'tasks.total', count($tasks));\n        $showing = Arr::get($context, 'tasks.showing', count($tasks));\n\n        $header = $total > $showing\n            ? \"Tasks (showing {$showing} of {$total}):\"\n            : 'Tasks:';\n\n        $parts->push('', $header);\n        foreach ($tasks as $task) {\n            $parts->push($this->formatTaskLine($task));\n        }\n    }\n\n    /**\n     * @param  array<string, mixed>  $task\n     */\n    private function formatTaskLine(array $task): string\n    {\n        $title = $task['title'] ?? 'Untitled';\n        $status = $task['status'] ?? 'Unknown';\n        $line = \"- {$title} ({$status})\";\n\n        if (filled($task['priority'] ?? null)) {\n            $line .= \" - Priority: {$task['priority']}\";\n        }\n\n        if (filled($task['due_date'] ?? null)) {\n            $line .= \" - Due: {$task['due_date']}\";\n        }\n\n        return $line;\n    }\n\n    /**\n     * @param  Collection<int, string>  $parts\n     * @param  array<string, mixed>  $context\n     */\n    private function addTimestamps(Collection $parts, array $context): void\n    {\n        $parts->push(\n            '',\n            \"Last updated: {$context['last_updated']}\",\n            \"Created: {$context['created']}\"\n        );\n    }\n\n    private function formatLabel(string $key): string\n    {\n        return str($key)->replace('_', ' ')->title()->toString();\n    }\n}\n"
  },
  {
    "path": "app/Services/AvatarService.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Services;\n\nuse Illuminate\\Contracts\\Cache\\Repository as Cache;\nuse Illuminate\\Support\\Str;\n\nfinal readonly class AvatarService\n{\n    /**\n     * Minimum contrast ratio for WCAG AA compliance.\n     */\n    private const float MINIMUM_CONTRAST_RATIO = 4.5;\n\n    /**\n     * @param  array<int, string>  $backgroundColors\n     */\n    public function __construct(\n        private Cache $cache,\n        private int $cacheTtl = 604800,\n        private string $defaultTextColor = '#FFFFFF',\n        private string $defaultBgColor = '#3182CE',\n        private array $backgroundColors = [],\n    ) {}\n\n    /**\n     * Generate an SVG avatar for a user with manual color selection.\n     *\n     * @param  string  $name  The user's name\n     * @param  int  $size  The size of the avatar in pixels\n     * @param  string|null  $bgColor  Optional custom background color (hex format)\n     * @param  string|null  $textColor  Optional custom text color (hex format)\n     * @param  int  $initialCount  Number of initials to show (1 or 2)\n     * @return string The URL to the SVG avatar\n     */\n    public function generate(\n        string $name,\n        int $size = 64,\n        ?string $bgColor = null,\n        ?string $textColor = null,\n        int $initialCount = 2\n    ): string {\n        $bgColor = $this->validateColor($bgColor) ? $bgColor : null;\n        $textColor = $this->validateColor($textColor) ? $textColor : null;\n\n        // Add custom colors to cache key if provided\n        $bgColorKey = in_array($bgColor, [null, '', '0'], true) ? '' : \"_bg{$bgColor}\";\n        $textColorKey = in_array($textColor, [null, '', '0'], true) ? '' : \"_txt{$textColor}\";\n        $cacheKey = 'avatar_'.hash('sha256', \"{$name}_{$size}{$bgColorKey}{$textColorKey}_initials{$initialCount}\");\n\n        return $this->cache->remember(\n            $cacheKey,\n            $this->cacheTtl,\n            fn (): string => $this->createSvgDataUrl($name, $size, $bgColor, $textColor, $initialCount)\n        );\n    }\n\n    /**\n     * Generate an SVG avatar with automatically selected colors.\n     *\n     * @param  string  $name  The user's name\n     * @param  int  $size  The size of the avatar in pixels\n     * @param  int  $initialCount  Number of initials to show (1 or 2)\n     * @return string The URL to the SVG avatar\n     */\n    public function generateAuto(string $name, int $size = 64, int $initialCount = 2): string\n    {\n        $cacheKey = 'avatar_auto_'.hash('sha256', \"{$name}_{$size}_initials{$initialCount}\");\n\n        return $this->cache->remember(\n            $cacheKey,\n            $this->cacheTtl,\n            function () use ($name, $size, $initialCount): string {\n                // Analyze name characteristics\n                $nameAnalysis = $this->analyzeNameCharacteristics($name);\n\n                // Generate a deterministic hue based on the name\n                $hue = $this->getHueFromName($name);\n\n                // Adjust saturation and lightness based on name characteristics\n                $saturation = 65 + $nameAnalysis['adjustment'];\n                $lightness = 85 - ($nameAnalysis['adjustment'] / 2);\n\n                // Ensure values stay within reasonable ranges\n                $saturation = max(50, min(75, $saturation));\n                $lightness = max(75, min(90, $lightness));\n\n                // Generate a pastel background color with adjusted parameters\n                $bgColor = $this->hslToHex($hue, $saturation, $lightness);\n\n                // Generate a darker text color with proper contrast\n                $textColor = $this->generateContrastingTextColor($bgColor);\n\n                return $this->createSvgDataUrl($name, $size, $bgColor, $textColor, $initialCount);\n            }\n        );\n    }\n\n    /**\n     * Create the SVG data URL for an avatar.\n     */\n    private function createSvgDataUrl(\n        string $name,\n        int $size,\n        ?string $bgColor,\n        ?string $textColor,\n        int $initialCount = 2\n    ): string {\n        $initials = $this->getInitials($name, $initialCount);\n        $backgroundColor = $bgColor ?? $this->getBackgroundColor($name);\n        $textFillColor = $textColor ?? $this->defaultTextColor;\n\n        // Ensure there's enough contrast in auto mode\n        if ($bgColor !== null && $textColor !== null && ! $this->hasEnoughContrast($backgroundColor, $textFillColor)) {\n            $textFillColor = $this->generateContrastingTextColor($backgroundColor);\n        }\n\n        $svg = $this->generateSvg($initials, $backgroundColor, $textFillColor, $size);\n\n        return 'data:image/svg+xml;base64,'.base64_encode($svg);\n    }\n\n    /**\n     * Validate if a color string is a valid hex or RGB color.\n     */\n    public function validateColor(?string $color): bool\n    {\n        if ($color === null) {\n            return false;\n        }\n\n        // Validate hex color format (#RGB or #RRGGBB)\n        if (preg_match('/^#([A-Fa-f0-9]{3}){1,2}$/', $color)) {\n            return true;\n        }\n\n        // Validate rgb() and rgba() formats\n        return (bool) preg_match('/^rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(?:,\\s*[\\d.]+\\s*)?\\)$/', $color);\n    }\n\n    /**\n     * Get the initials from a name.\n     * Enhanced to better handle various name formats and cultural patterns.\n     *\n     * @param  string  $name  The name to extract initials from\n     * @param  int  $initialCount  The number of initials to return (1 or 2)\n     * @return string The extracted initials\n     */\n    private function getInitials(string $name, int $initialCount = 2): string\n    {\n        // Normalize count to either 1 or 2\n        $count = ($initialCount === 1) ? 1 : 2;\n\n        // Normalize and trim the name to handle special characters better\n        $name = trim($name);\n        $normalizedName = Str::ascii($name);\n        $nameParts = array_values(array_filter(preg_split('/[\\s\\-_\\.]+/', $normalizedName) ?: []));\n\n        if ($nameParts === []) {\n            return '?';\n        }\n\n        // For single initial mode, just return the first letter of the first name part\n        if ($count === 1) {\n            return Str::upper(substr($nameParts[0], 0, 1));\n        }\n\n        // Single word name handling\n        if (count($nameParts) === 1) {\n            $singleName = $nameParts[0];\n            $nameLength = Str::length($singleName);\n\n            // Handle very short names\n            if ($nameLength <= 1) {\n                return Str::upper($singleName);\n            }\n\n            // Handle common prefixes in surnames (Mc, Mac, O', etc.)\n            if ($nameLength >= 3) {\n                if (Str::startsWith(Str::lower($singleName), ['mc', 'mac'])) {\n                    return Str::upper(substr($singleName, 0, 1).substr($singleName, 2, 1));\n                }\n\n                if (Str::startsWith(Str::lower($singleName), \"o'\")) {\n                    return Str::upper(substr($singleName, 0, 1).substr($singleName, 2, 1));\n                }\n            }\n\n            // Default: For single names with at least 2 characters, return first two\n            return Str::upper(substr($singleName, 0, 2));\n        }\n\n        // Handle multi-part names\n\n        // Check for compound last names (with hyphens, even if normalized)\n        $lastPart = end($nameParts);\n        if (str_contains($name, '-') && ! in_array('-', $nameParts)) {\n            // Original name had hyphens, try to split the last part\n            $possibleCompound = array_filter(explode('-', $name));\n            if (count($possibleCompound) >= 2) {\n                return Str::upper(substr($nameParts[0], 0, 1).\n                    substr(end($possibleCompound), 0, 1));\n            }\n        }\n\n        // Handle names with particles or prefixes (von, van, de, etc.)\n        $prefixes = ['van', 'von', 'de', 'la', 'den', 'der', 'di', 'le', 'da'];\n        if (count($nameParts) >= 3 && in_array(Str::lower($nameParts[count($nameParts) - 2]), $prefixes)) {\n            // Use first name and the actual surname after the prefix\n            return Str::upper(substr($nameParts[0], 0, 1).substr($lastPart, 0, 1));\n        }\n\n        // Standard case: first and last parts\n        return Str::upper(substr($nameParts[0], 0, 1).substr($lastPart, 0, 1));\n    }\n\n    /**\n     * Get a deterministic background color based on the name.\n     */\n    private function getBackgroundColor(string $name): string\n    {\n        // If a default background color is specified, use that\n        if ($this->defaultBgColor !== '' && $this->defaultBgColor !== '0') {\n            return $this->defaultBgColor;\n        }\n\n        // If no background colors provided, return a safe default\n        if ($this->backgroundColors === []) {\n            return '#3182CE'; // A nice blue as fallback\n        }\n\n        // Use more stable hash function\n        $hash = crc32(Str::ascii($name));\n        $index = $hash % count($this->backgroundColors);\n\n        return $this->backgroundColors[$index];\n    }\n\n    /**\n     * Generate SVG markup for the avatar.\n     */\n    private function generateSvg(string $initials, string $bgColor, string $textColor, int $size): string\n    {\n        // Adjust font size based on initials length\n        $fontSize = strlen($initials) > 1 ? 44 : 48;\n\n        return <<<SVG\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"{$size}\" height=\"{$size}\" viewBox=\"0 0 100 100\">\n            <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"{$bgColor}\" />\n            <text x=\"50%\" y=\"50%\" alignment-baseline=\"middle\" dominant-baseline=\"middle\" text-anchor=\"middle\"\n                  dy=\".1em\" fill=\"{$textColor}\" font-family=\"Arial, Helvetica, sans-serif\"\n                  font-size=\"{$fontSize}\" font-weight=\"medium\" letter-spacing=\"-1\">\n                {$initials}\n            </text>\n        </svg>\n        SVG;\n    }\n\n    /**\n     * Generate a deterministic hue value from a name.\n     */\n    private function getHueFromName(string $name): int\n    {\n        // Use a combination of hashing techniques for better distribution\n        $hash1 = crc32(Str::ascii($name));\n        $hash2 = crc32(strrev(Str::ascii($name)));\n\n        // Blend the two hashes for better distribution across the color wheel\n        $blendedHash = ($hash1 + $hash2) / 2;\n\n        // Map to hue values, avoiding too much clustering around certain hues\n        $hue = $blendedHash % 360;\n\n        return $hue;\n    }\n\n    /**\n     * Generate a contrasting text color for a background.\n     */\n    private function generateContrastingTextColor(string $bgColor): string\n    {\n        // Convert the background color to HSL\n        [$h, $s, $l] = $this->hexToHsl($bgColor);\n\n        // For darker background, use lighter text\n        if ($l < 60) {\n            return '#FFFFFF';\n        }\n\n        // For lighter background, use a darker shade of the same hue\n        // Adjust saturation and lightness for better contrast\n        $contrastingSaturation = min(95, $s + 20);\n        $contrastingLightness = max(15, $l - 55);\n\n        return $this->hslToHex($h, $contrastingSaturation, $contrastingLightness);\n    }\n\n    /**\n     * Convert HSL to hex color.\n     */\n    private function hslToHex(int $h, float $s, float $l): string\n    {\n        $h /= 360;\n        $s /= 100;\n        $l /= 100;\n\n        if (abs($s) < 0.001) {  // Fixed: Changed strict equality to approximate comparison for float\n            $r = $g = $b = $l;\n        } else {\n            $q = $l < 0.5 ? $l * (1 + $s) : $l + $s - $l * $s;\n            $p = 2 * $l - $q;\n            $r = $this->hueToRgb($p, $q, $h + 1 / 3);\n            $g = $this->hueToRgb($p, $q, $h);\n            $b = $this->hueToRgb($p, $q, $h - 1 / 3);\n        }\n\n        return sprintf('#%02x%02x%02x',\n            (int) round($r * 255),\n            (int) round($g * 255),\n            (int) round($b * 255)\n        );\n    }\n\n    /**\n     * @return int[]\n     */\n    private function hexToHsl(string $hexColor): array\n    {\n        // Remove # if present\n        $hex = ltrim($hexColor, '#');\n\n        // Handle both shorthand and regular hex formats\n        if (strlen($hex) === 3) {\n            $r = hexdec(str_repeat(substr($hex, 0, 1), 2)) / 255;\n            $g = hexdec(str_repeat(substr($hex, 1, 1), 2)) / 255;\n            $b = hexdec(str_repeat(substr($hex, 2, 1), 2)) / 255;\n        } else {\n            $r = hexdec(substr($hex, 0, 2)) / 255;\n            $g = hexdec(substr($hex, 2, 2)) / 255;\n            $b = hexdec(substr($hex, 4, 2)) / 255;\n        }\n\n        $max = max($r, $g, $b);\n        $min = min($r, $g, $b);\n\n        $h = 0;\n        $s = 0;\n        $l = ($max + $min) / 2;\n\n        if ($max !== $min) {\n            $d = $max - $min;\n            $s = $l > 0.5 ? $d / (2 - $max - $min) : $d / ($max + $min);\n\n            switch ($max) {\n                case $r:\n                    $h = ($g - $b) / $d + ($g < $b ? 6 : 0);\n                    break;\n                case $g:\n                    $h = ($b - $r) / $d + 2;\n                    break;\n                case $b:\n                    $h = ($r - $g) / $d + 4;\n                    break;\n            }\n\n            $h /= 6;\n        }\n\n        return [\n            (int) round($h * 360),  // Convert to 0-359 range\n            (int) round($s * 100),  // Convert to 0-100 range\n            (int) round($l * 100),   // Convert to 0-100 range\n        ];\n    }\n\n    /**\n     * Helper function for HSL to RGB conversion.\n     */\n    private function hueToRgb(float $p, float $q, float $t): float\n    {\n        if ($t < 0) {\n            $t += 1;\n        }\n        if ($t > 1) {\n            $t -= 1;\n        }\n        if ($t < 1 / 6) {\n            return $p + ($q - $p) * 6 * $t;\n        }\n        if ($t < 1 / 2) {\n            return $q;\n        }\n        if ($t < 2 / 3) {\n            return $p + ($q - $p) * (2 / 3 - $t) * 6;\n        }\n\n        return $p;\n    }\n\n    /**\n     * Calculate the contrast ratio between two colors.\n     */\n    private function calculateContrastRatio(string $color1, string $color2): float\n    {\n        $lum1 = $this->getRelativeLuminance($color1);\n        $lum2 = $this->getRelativeLuminance($color2);\n\n        $lighter = max($lum1, $lum2);\n        $darker = min($lum1, $lum2);\n\n        return ($lighter + 0.05) / ($darker + 0.05);\n    }\n\n    /**\n     * Calculate the relative luminance of a color.\n     */\n    private function getRelativeLuminance(string $hexColor): float\n    {\n        $hex = ltrim($hexColor, '#');\n\n        // Handle both shorthand and regular hex formats\n        if (strlen($hex) === 3) {\n            $r = hexdec(str_repeat(substr($hex, 0, 1), 2)) / 255;\n            $g = hexdec(str_repeat(substr($hex, 1, 1), 2)) / 255;\n            $b = hexdec(str_repeat(substr($hex, 2, 1), 2)) / 255;\n        } else {\n            $r = hexdec(substr($hex, 0, 2)) / 255;\n            $g = hexdec(substr($hex, 2, 2)) / 255;\n            $b = hexdec(substr($hex, 4, 2)) / 255;\n        }\n\n        // Transform sRGB values\n        $r = $r <= 0.03928 ? $r / 12.92 : (($r + 0.055) / 1.055) ** 2.4;\n        $g = $g <= 0.03928 ? $g / 12.92 : (($g + 0.055) / 1.055) ** 2.4;\n        $b = $b <= 0.03928 ? $b / 12.92 : (($b + 0.055) / 1.055) ** 2.4;\n\n        // Calculate luminance\n        return 0.2126 * $r + 0.7152 * $g + 0.0722 * $b;\n    }\n\n    /**\n     * Check if two colors have enough contrast for accessibility.\n     */\n    private function hasEnoughContrast(string $color1, string $color2): bool\n    {\n        return $this->calculateContrastRatio($color1, $color2) >= self::MINIMUM_CONTRAST_RATIO;\n    }\n\n    /**\n     * @return array<string, float|int>\n     */\n    private function analyzeNameCharacteristics(string $name): array\n    {\n        $normalizedName = Str::ascii(trim($name));\n\n        // Handle empty names\n        if (blank($normalizedName)) {\n            return [\n                'length' => 0,\n                'vowelRatio' => 0.5,\n                'uniqueness' => 0,\n                'adjustment' => 0,\n            ];\n        }\n\n        // Calculate characteristics\n        $length = mb_strlen($normalizedName);\n        $lengthFactor = min(10, max(1, $length)) / 10;\n\n        // Count vowels and consonants more accurately\n        $vowels = preg_match_all('/[aeiouàáâãäåæèéêëìíîïòóôõöøùúûüýÿ]/i', $normalizedName, $matches);\n        $consonants = preg_match_all('/[bcdfghjklmnpqrstvwxyzçñß]/i', $normalizedName, $matches);\n\n        // Names with more vowels tend to be \"softer\" - adjust colors accordingly\n        $vowelRatio = $vowels / ($vowels + $consonants !== 0 ? $vowels + $consonants : 1);\n\n        // More sophisticated uniqueness calculation\n        $uniqueness = $this->calculateUniquenessScore($normalizedName);\n\n        // Calculate overall adjustment (-10 to +10 range)\n        $adjustment = (($lengthFactor - 0.5) * 10) +  // Length factor\n            ((0.5 - $vowelRatio) * 10) +    // Vowel ratio (fewer vowels = higher adjustment)\n            ($uniqueness - 5);              // Uniqueness factor normalized to -5 to +5 range\n\n        // Ensure the adjustment stays within reasonable bounds\n        $adjustment = max(-10, min(10, $adjustment));\n\n        return [\n            'length' => $length,\n            'vowelRatio' => $vowelRatio,\n            'uniqueness' => $uniqueness,\n            'adjustment' => $adjustment,\n        ];\n    }\n\n    /**\n     * Calculate a uniqueness score for a name.\n     *\n     * @param  string  $name  The normalized name to analyze\n     * @return float A uniqueness score from 0 to 10\n     */\n    private function calculateUniquenessScore(string $name): float\n    {\n        if ($name === '' || $name === '0') {\n            return 0;\n        }\n\n        $name = strtolower($name);\n        $chars = str_split($name);\n        $charFrequency = array_count_values($chars);\n        $uniqueChars = count($charFrequency);\n\n        // Base uniqueness on ratio of unique characters\n        $uniquenessBase = $uniqueChars / mb_strlen($name) * 5;\n\n        // Additional points for rare letters\n        $rarityScore = 0;\n        $rareLetters = ['q' => 1.5, 'x' => 1.5, 'z' => 1.5, 'j' => 1, 'k' => 0.8, 'w' => 0.8, 'y' => 0.8, 'v' => 0.7];\n\n        foreach ($charFrequency as $char => $freq) {\n            // Award points for rare letters\n            if (isset($rareLetters[$char])) {\n                $rarityScore += $rareLetters[$char];\n            }\n\n            // Penalize for highly repetitive patterns\n            if ($freq > 2 && ctype_alpha((string) $char)) {\n                $rarityScore -= ($freq - 2) * 0.5;\n            }\n        }\n\n        // Combine scores and ensure within 0-10 range\n        $finalScore = $uniquenessBase + $rarityScore;\n\n        return max(0, min(10, $finalScore));\n    }\n}\n"
  },
  {
    "path": "app/Services/Favicon/Drivers/GoogleHighResDriver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Services\\Favicon\\Drivers;\n\nuse AshAllenDesign\\FaviconFetcher\\Collections\\FaviconCollection;\nuse AshAllenDesign\\FaviconFetcher\\Concerns\\HasDefaultFunctionality;\nuse AshAllenDesign\\FaviconFetcher\\Concerns\\MakesHttpRequests;\nuse AshAllenDesign\\FaviconFetcher\\Concerns\\ValidatesUrls;\nuse AshAllenDesign\\FaviconFetcher\\Contracts\\Fetcher;\nuse AshAllenDesign\\FaviconFetcher\\Exceptions\\InvalidUrlException;\nuse AshAllenDesign\\FaviconFetcher\\Favicon;\n\nfinal class GoogleHighResDriver implements Fetcher\n{\n    use HasDefaultFunctionality;\n    use MakesHttpRequests;\n    use ValidatesUrls;\n\n    private const string BASE_URL = 'https://www.google.com/s2/favicons';\n\n    public function __construct(private readonly int $size = 256) {}\n\n    public function fetch(string $url): ?Favicon\n    {\n        throw_unless($this->urlIsValid($url), InvalidUrlException::class, $url.' is not a valid URL');\n\n        if ($this->useCache && $favicon = $this->attemptToFetchFromCache($url)) {\n            return $favicon;\n        }\n\n        $faviconUrl = self::BASE_URL.'?sz='.$this->size.'&domain='.$url;\n\n        $response = $this->withRequestExceptionHandling(\n            fn () => $this->httpClient()->get($faviconUrl)\n        );\n\n        return $response->successful()\n            ? new Favicon(url: $url, faviconUrl: $faviconUrl, fromDriver: $this)\n                ->setIconSize($this->size)\n            : $this->notFound($url);\n    }\n\n    public function fetchAll(string $url): FaviconCollection\n    {\n        throw new \\Exception('Google API does not support fetching all favicons');\n    }\n}\n"
  },
  {
    "path": "app/Services/Favicon/Drivers/HighQualityDriver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Services\\Favicon\\Drivers;\n\nuse AshAllenDesign\\FaviconFetcher\\Collections\\FaviconCollection;\nuse AshAllenDesign\\FaviconFetcher\\Concerns\\HasDefaultFunctionality;\nuse AshAllenDesign\\FaviconFetcher\\Concerns\\MakesHttpRequests;\nuse AshAllenDesign\\FaviconFetcher\\Concerns\\ValidatesUrls;\nuse AshAllenDesign\\FaviconFetcher\\Contracts\\Fetcher;\nuse AshAllenDesign\\FaviconFetcher\\Exceptions\\InvalidUrlException;\nuse AshAllenDesign\\FaviconFetcher\\Favicon;\nuse Illuminate\\Http\\Client\\Response;\n\nfinal class HighQualityDriver implements Fetcher\n{\n    use HasDefaultFunctionality;\n    use MakesHttpRequests;\n    use ValidatesUrls;\n\n    /**\n     * Attempt to fetch high-quality favicon using a waterfall strategy.\n     *\n     * Strategy:\n     * 1. Try direct HTML parsing for Apple Touch icons (180x180)\n     * 2. Try direct HTML parsing for high-res PNG favicons\n     * 3. Fall back to Google with 256px size parameter\n     * 4. Fall back to DuckDuckGo\n     */\n    public function fetch(string $url): ?Favicon\n    {\n        throw_unless($this->urlIsValid($url), InvalidUrlException::class, $url.' is not a valid URL');\n\n        if ($this->useCache && $favicon = $this->attemptToFetchFromCache($url)) {\n            return $favicon;\n        }\n\n        $favicon = $this->tryAppleTouchIcon($url);\n        if ($favicon instanceof Favicon && $this->faviconIsAccessible($favicon)) {\n            return $favicon;\n        }\n\n        $favicon = $this->tryHighResFavicon($url);\n        if ($favicon instanceof Favicon && $this->faviconIsAccessible($favicon)) {\n            return $favicon;\n        }\n\n        $favicon = $this->tryGoogleHighRes($url);\n        if ($favicon instanceof Favicon && $this->faviconIsAccessible($favicon)) {\n            return $favicon;\n        }\n\n        return $this->tryDuckDuckGo($url);\n    }\n\n    public function fetchAll(string $url): FaviconCollection\n    {\n        throw new \\Exception('fetchAll not supported by HighQualityDriver');\n    }\n\n    private function tryAppleTouchIcon(string $url): ?Favicon\n    {\n        try {\n            $response = $this->withRequestExceptionHandling(\n                fn () => $this->httpClient()->get($url)\n            );\n\n            if (! $response->successful()) {\n                return null;\n            }\n\n            $html = $response->body();\n\n            if (preg_match('/<link[^>]+rel=[\"\\']apple-touch-icon[\"\\'][^>]+href=[\"\\'](.*?)[\"\\']/i', (string) $html, $matches)) {\n                $iconUrl = $this->convertToAbsoluteUrl($url, $matches[1]);\n\n                return new Favicon(\n                    url: $url,\n                    faviconUrl: $iconUrl,\n                    fromDriver: $this,\n                )->setIconType(Favicon::TYPE_APPLE_TOUCH_ICON)\n                    ->setIconSize(180);\n            }\n\n            $iconUrl = $this->stripPathFromUrl($url).'/apple-touch-icon.png';\n            /** @var Response $testResponse */\n            $testResponse = $this->httpClient()->head($iconUrl);\n\n            if ($testResponse->successful()) {\n                return new Favicon(\n                    url: $url,\n                    faviconUrl: $iconUrl,\n                    fromDriver: $this,\n                )->setIconType(Favicon::TYPE_APPLE_TOUCH_ICON)\n                    ->setIconSize(180);\n            }\n\n        } catch (\\Exception) {\n            // Fall through to next strategy\n        }\n\n        return null;\n    }\n\n    private function tryHighResFavicon(string $url): ?Favicon\n    {\n        try {\n            $response = $this->withRequestExceptionHandling(\n                fn () => $this->httpClient()->get($url)\n            );\n\n            if (! $response->successful()) {\n                return null;\n            }\n\n            $html = $response->body();\n\n            $patterns = [\n                '/sizes=[\"\\']512x512[\"\\'][^>]+href=[\"\\'](.*?)[\"\\']/i',\n                '/href=[\"\\'](.*?)[\"\\']\\s+[^>]*sizes=[\"\\']512x512[\"\\']/i',\n                '/sizes=[\"\\']256x256[\"\\'][^>]+href=[\"\\'](.*?)[\"\\']/i',\n                '/href=[\"\\'](.*?)[\"\\']\\s+[^>]*sizes=[\"\\']256x256[\"\\']/i',\n                '/sizes=[\"\\']192x192[\"\\'][^>]+href=[\"\\'](.*?)[\"\\']/i',\n                '/href=[\"\\'](.*?)[\"\\']\\s+[^>]*sizes=[\"\\']192x192[\"\\']/i',\n            ];\n\n            foreach ($patterns as $pattern) {\n                if (preg_match($pattern, (string) $html, $matches)) {\n                    $iconUrl = $this->convertToAbsoluteUrl($url, $matches[1]);\n\n                    preg_match('/(\\d+)x\\d+/', $pattern, $sizeMatch);\n                    $size = isset($sizeMatch[1]) ? (int) $sizeMatch[1] : null;\n\n                    $favicon = new Favicon(\n                        url: $url,\n                        faviconUrl: $iconUrl,\n                        fromDriver: $this,\n                    );\n\n                    if ($size !== null) {\n                        $favicon->setIconSize($size);\n                    }\n\n                    return $favicon;\n                }\n            }\n\n        } catch (\\Exception) {\n            // Fall through\n        }\n\n        return null;\n    }\n\n    private function tryGoogleHighRes(string $url): ?Favicon\n    {\n        try {\n            $urlWithoutProtocol = str_replace(['https://', 'http://'], '', $url);\n\n            $faviconUrl = 'https://www.google.com/s2/favicons?sz=256&domain='.$urlWithoutProtocol;\n\n            $response = $this->withRequestExceptionHandling(\n                fn () => $this->httpClient()->get($faviconUrl)\n            );\n\n            if ($response->successful()) {\n                return new Favicon(\n                    url: $url,\n                    faviconUrl: $faviconUrl,\n                    fromDriver: $this,\n                )->setIconSize(256);\n            }\n\n        } catch (\\Exception) {\n            // Fall through\n        }\n\n        return null;\n    }\n\n    private function tryDuckDuckGo(string $url): ?Favicon\n    {\n        $urlWithoutProtocol = str_replace(['https://', 'http://'], '', $url);\n        $faviconUrl = 'https://icons.duckduckgo.com/ip3/'.$urlWithoutProtocol.'.ico';\n\n        try {\n            $response = $this->withRequestExceptionHandling(\n                fn () => $this->httpClient()->get($faviconUrl)\n            );\n\n            if ($response->successful()) {\n                return new Favicon(\n                    url: $url,\n                    faviconUrl: $faviconUrl,\n                    fromDriver: $this,\n                );\n            }\n\n        } catch (\\Exception) {\n            // Fall through\n        }\n\n        return $this->notFound($url);\n    }\n\n    private function faviconIsAccessible(Favicon $favicon): bool\n    {\n        try {\n            /** @var Response $response */\n            $response = $this->httpClient()->head($favicon->getFaviconUrl());\n\n            return $response->successful();\n        } catch (\\Exception) {\n            return false;\n        }\n    }\n\n    private function convertToAbsoluteUrl(string $baseUrl, string $path): string\n    {\n        if (filter_var($path, FILTER_VALIDATE_URL)) {\n            return $path;\n        }\n\n        $parsedBase = parse_url($baseUrl);\n        $scheme = $parsedBase['scheme'] ?? 'https';\n        $host = $parsedBase['host'] ?? '';\n\n        if (str_starts_with($path, '//')) {\n            return $scheme.':'.$path;\n        }\n\n        if (str_starts_with($path, '/')) {\n            return $scheme.'://'.$host.$path;\n        }\n\n        return $scheme.'://'.$host.'/'.ltrim($path, '/');\n    }\n\n    private function stripPathFromUrl(string $url): string\n    {\n        $parsedUrl = parse_url($url);\n\n        if ($parsedUrl === false || ! isset($parsedUrl['scheme'], $parsedUrl['host'])) {\n            return $url;\n        }\n\n        $result = $parsedUrl['scheme'].'://'.$parsedUrl['host'];\n\n        if (isset($parsedUrl['port'])) {\n            $result .= ':'.$parsedUrl['port'];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "app/Services/GitHubService.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Services;\n\nuse Exception;\nuse Illuminate\\Http\\Client\\Response;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Http;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Number;\n\nfinal readonly class GitHubService\n{\n    /**\n     * Get the stargazers to count for a GitHub repository\n     *\n     * @param  string  $owner  The repository owner\n     * @param  string  $repo  The repository name\n     * @param  int  $cacheMinutes  Minutes to cache the result (default: 15)\n     */\n    public function getStarsCount(string $owner = 'Relaticle', string $repo = 'relaticle', int $cacheMinutes = 15): int\n    {\n        $cacheKey = \"github_stars_{$owner}_{$repo}\";\n\n        return (int) Cache::remember($cacheKey, now()->addMinutes($cacheMinutes), function () use ($owner, $repo): int {\n            try {\n                /** @var Response $response */\n                $response = Http::withHeaders([\n                    'Accept' => 'application/vnd.github.v3+json',\n                ])->get(\"https://api.github.com/repos/{$owner}/{$repo}\");\n\n                if ($response->successful()) {\n                    return (int) $response->json('stargazers_count', 0);\n                }\n\n                Log::warning('Failed to fetch GitHub stars: '.$response->status());\n\n                return 0;\n            } catch (Exception $e) {\n                Log::error('Error fetching GitHub stars: '.$e->getMessage());\n\n                return 0;\n            }\n        });\n    }\n\n    /**\n     * Get the formatted stargazers to count for a GitHub repository\n     *\n     * @param  string  $owner  The repository owner\n     * @param  string  $repo  The repository name\n     * @param  int  $cacheMinutes  Minutes to cache the result (default: 15)\n     */\n    public function getFormattedStarsCount(string $owner = 'Relaticle', string $repo = 'relaticle', int $cacheMinutes = 15): string\n    {\n        $starsCount = $this->getStarsCount($owner, $repo, $cacheMinutes);\n\n        if ($starsCount >= 1000) {\n            return (string) Number::abbreviate($starsCount, 1);\n        }\n\n        return (string) $starsCount;\n    }\n}\n"
  },
  {
    "path": "app/Support/CustomFieldMerger.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Support;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\n\n/**\n * Merges partial custom_fields with existing values before update.\n *\n * The custom-fields package's saveCustomFields() iterates ALL defined fields\n * and writes null for any not present in the submitted array. This helper\n * loads the model's current values and merges submitted fields on top,\n * so omitted fields are preserved.\n */\nfinal readonly class CustomFieldMerger\n{\n    /**\n     * @param  array<string, mixed>  $attributes\n     * @return array<string, mixed>\n     */\n    public static function merge(Model $model, array $attributes): array\n    {\n        if (! isset($attributes['custom_fields']) || ! is_array($attributes['custom_fields'])) {\n            return $attributes;\n        }\n\n        if (! method_exists($model, 'customFieldValues')) {\n            return $attributes;\n        }\n\n        $model->loadMissing('customFieldValues.customField');\n\n        /** @var \\Illuminate\\Database\\Eloquent\\Collection<int, CustomFieldValue> $values */\n        $values = $model->getRelation('customFieldValues');\n\n        $existing = $values\n            /** @phpstan-ignore notIdentical.alwaysTrue (orphaned values can exist when a custom field is deleted) */\n            ->filter(fn (CustomFieldValue $v): bool => $v->customField !== null)\n            ->mapWithKeys(fn (CustomFieldValue $v): array => [\n                $v->customField->code => self::normalizeValue($v->getValue()),\n            ])\n            ->all();\n\n        $attributes['custom_fields'] = array_merge($existing, $attributes['custom_fields']);\n\n        return $attributes;\n    }\n\n    /**\n     * Normalize getValue() output to the input format saveCustomFields() expects.\n     *\n     * getValue() returns Collection for multi-choice fields (link, email, phone),\n     * but saveCustomFields() expects plain arrays.\n     */\n    private static function normalizeValue(mixed $value): mixed\n    {\n        if ($value instanceof Collection) {\n            return $value->all();\n        }\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "app/View/Components/GuestLayout.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\View\\Components;\n\nuse Illuminate\\View\\Component;\nuse Illuminate\\View\\View;\nuse Override;\n\nfinal class GuestLayout extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $title = null,\n        public ?string $description = null,\n        public ?string $ogTitle = null,\n        public ?string $ogDescription = null,\n        public ?string $ogImage = null,\n    ) {}\n\n    /**\n     * Get the view / contents that represents the component.\n     */\n    #[Override]\n    public function render(): View\n    {\n        return view('layouts.guest');\n    }\n}\n"
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\nuse Symfony\\Component\\Console\\Input\\ArgvInput;\n\ndefine('LARAVEL_START', microtime(true));\n\n// Register the Composer autoloader...\nrequire __DIR__.'/vendor/autoload.php';\n\n// Bootstrap Laravel and handle the command...\n$status = (require_once __DIR__.'/bootstrap/app.php')\n    ->handleCommand(new ArgvInput);\n\nexit($status);\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Middleware\\SetApiTeamContext;\nuse App\\Http\\Middleware\\SubdomainRootResponse;\nuse App\\Http\\Middleware\\ValidateSignature;\nuse App\\Models\\TeamInvitation;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Application;\nuse Illuminate\\Foundation\\Configuration\\Exceptions;\nuse Illuminate\\Foundation\\Configuration\\Middleware;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routing\\Middleware\\SubstituteBindings;\nuse Illuminate\\Support\\Facades\\Route;\nuse Sentry\\Laravel\\Integration;\nuse Spatie\\Health\\Commands\\DispatchQueueCheckJobsCommand;\nuse Spatie\\Health\\Commands\\RunHealthChecksCommand;\nuse Spatie\\Health\\Commands\\ScheduleCheckHeartbeatCommand;\n\nreturn Application::configure(basePath: dirname(__DIR__))\n    ->withRouting(\n        web: __DIR__.'/../routes/web.php',\n        health: '/up',\n        then: function (): void {\n            $apiDomain = config('app.api_domain');\n\n            $routes = Route::middleware('api');\n\n            if ($apiDomain) {\n                $routes->domain($apiDomain);\n            } else {\n                $routes->prefix('api');\n            }\n\n            $routes->group(base_path('routes/api.php'));\n        },\n    )\n    ->withMiddleware(function (Middleware $middleware): void {\n        $middleware->prepend(SubdomainRootResponse::class);\n\n        $middleware->prependToPriorityList(\n            before: SubstituteBindings::class,\n            prepend: SetApiTeamContext::class,\n        );\n\n        $middleware->alias([\n            'signed' => ValidateSignature::class,\n        ]);\n\n        $middleware->redirectGuestsTo(function (Request $request): string {\n            if ($request->routeIs('team-invitations.accept')) {\n                $invitation = TeamInvitation::query()\n                    ->whereKey($request->route('invitation'))\n                    ->first();\n\n                if ($invitation && User::query()->where('email', $invitation->email)->exists()) {\n                    return Filament::getLoginUrl();\n                }\n\n                return Filament::getRegistrationUrl();\n            }\n\n            return route('login');\n        });\n    })\n    ->withExceptions(function (Exceptions $exceptions): void {\n        Integration::handles($exceptions);\n        $exceptions->shouldRenderJsonWhen(fn (Request $request): bool => $request->is('api/*') || $request->getHost() === config('app.api_domain') || $request->expectsJson());\n    })\n    ->withSchedule(function (Schedule $schedule): void {\n        $schedule->command('app:generate-sitemap')->daily();\n        $schedule->command('import:cleanup')->hourly();\n        $schedule->command('queue:prune-batches --hours=24')->daily();\n        $schedule->command('invitations:cleanup')->daily();\n\n        if (config('app.health_checks_enabled')) {\n            $schedule->command(RunHealthChecksCommand::class)->everyMinute();\n            $schedule->command(DispatchQueueCheckJobsCommand::class)->everyMinute();\n            $schedule->command(ScheduleCheckHeartbeatCommand::class)->everyMinute();\n        }\n    })\n    ->booting(function (): void {\n        //        Model::automaticallyEagerLoadRelationships(); TODO: Before enabling this, check the test suite for any issues with eager loading.\n    })\n    ->create();\n"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "bootstrap/providers.php",
    "content": "<?php\n\ndeclare(strict_types=1);\nuse App\\Providers\\AppServiceProvider;\nuse App\\Providers\\FaviconServiceProvider;\nuse App\\Providers\\Filament\\AppPanelProvider;\nuse App\\Providers\\FortifyServiceProvider;\nuse App\\Providers\\HealthServiceProvider;\nuse App\\Providers\\HorizonServiceProvider;\nuse App\\Providers\\JetstreamServiceProvider;\nuse App\\Providers\\MacroServiceProvider;\nuse Relaticle\\Documentation\\DocumentationServiceProvider;\nuse Relaticle\\ImportWizard\\ImportWizardNewServiceProvider;\nuse Relaticle\\SystemAdmin\\SystemAdminPanelProvider;\n\nreturn [\n    AppServiceProvider::class,\n    FaviconServiceProvider::class,\n    AppPanelProvider::class,\n    FortifyServiceProvider::class,\n    HealthServiceProvider::class,\n    HorizonServiceProvider::class,\n    JetstreamServiceProvider::class,\n    MacroServiceProvider::class,\n    DocumentationServiceProvider::class,\n    ImportWizardNewServiceProvider::class,\n    SystemAdminPanelProvider::class,\n];\n"
  },
  {
    "path": "compose.dev.yml",
    "content": "services:\n    laravel.test:\n        build:\n            context: ./vendor/laravel/sail/runtimes/8.4\n            dockerfile: Dockerfile\n            args:\n                WWWGROUP: '${WWWGROUP}'\n        image: sail-8.4/app\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        ports:\n            - '${APP_PORT:-80}:80'\n            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'\n        environment:\n            WWWUSER: '${WWWUSER}'\n            LARAVEL_SAIL: 1\n            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'\n            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'\n            IGNITION_LOCAL_SITES_PATH: '${PWD}'\n        volumes:\n            - '.:/var/www/html'\n        networks:\n            - sail\n        depends_on:\n            - pgsql\n            - redis\n            - meilisearch\n            - mailpit\n            - selenium\n    pgsql:\n        image: 'postgres:18-alpine'\n        ports:\n            - '${FORWARD_DB_PORT:-5432}:5432'\n        environment:\n            PGPASSWORD: '${DB_PASSWORD:-secret}'\n            POSTGRES_DB: '${DB_DATABASE}'\n            POSTGRES_USER: '${DB_USERNAME}'\n            POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'\n        volumes:\n            - 'sail-pgsql:/var/lib/postgresql'\n            - './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'\n        networks:\n            - sail\n        healthcheck:\n            test: [\"CMD\", \"pg_isready\", \"-q\", \"-d\", \"${DB_DATABASE}\", \"-U\", \"${DB_USERNAME}\"]\n            retries: 3\n            timeout: 5s\n    redis:\n        image: 'redis:alpine'\n        ports:\n            - '${FORWARD_REDIS_PORT:-6379}:6379'\n        volumes:\n            - 'sail-redis:/data'\n        networks:\n            - sail\n        healthcheck:\n            test:\n                - CMD\n                - redis-cli\n                - ping\n            retries: 3\n            timeout: 5s\n    meilisearch:\n        image: 'getmeili/meilisearch:latest'\n        ports:\n            - '${FORWARD_MEILISEARCH_PORT:-7700}:7700'\n        environment:\n            MEILI_NO_ANALYTICS: '${MEILISEARCH_NO_ANALYTICS:-false}'\n        volumes:\n            - 'sail-meilisearch:/meili_data'\n        networks:\n            - sail\n        healthcheck:\n            test:\n                - CMD\n                - wget\n                - '--no-verbose'\n                - '--spider'\n                - 'http://127.0.0.1:7700/health'\n            retries: 3\n            timeout: 5s\n    mailpit:\n        image: 'axllent/mailpit:latest'\n        ports:\n            - '${FORWARD_MAILPIT_PORT:-1025}:1025'\n            - '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'\n        networks:\n            - sail\n    selenium:\n        image: seleniarm/standalone-chromium\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        volumes:\n            - '/dev/shm:/dev/shm'\n        networks:\n            - sail\nnetworks:\n    sail:\n        driver: bridge\nvolumes:\n    sail-pgsql:\n        driver: local\n    sail-redis:\n        driver: local\n    sail-meilisearch:\n        driver: local\n"
  },
  {
    "path": "compose.yml",
    "content": "services:\n  app:\n    build:\n      context: .\n      dockerfile: Dockerfile\n      target: production\n    image: ghcr.io/relaticle/relaticle:latest\n    restart: unless-stopped\n    ports:\n      - \"${APP_PORT:-80}:8080\"\n    environment:\n      APP_NAME: ${APP_NAME:-Relaticle}\n      APP_ENV: ${APP_ENV:-production}\n      APP_KEY: ${APP_KEY:?APP_KEY is required}\n      APP_DEBUG: ${APP_DEBUG:-false}\n      APP_TIMEZONE: ${APP_TIMEZONE:-UTC}\n      APP_URL: ${APP_URL:-http://localhost}\n      APP_PANEL_DOMAIN: ${APP_PANEL_DOMAIN:-}\n      LOG_CHANNEL: ${LOG_CHANNEL:-stderr}\n      LOG_LEVEL: ${LOG_LEVEL:-warning}\n      DB_CONNECTION: pgsql\n      DB_HOST: postgres\n      DB_PORT: 5432\n      DB_DATABASE: ${DB_DATABASE:-relaticle}\n      DB_USERNAME: ${DB_USERNAME:-relaticle}\n      DB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required}\n      REDIS_HOST: redis\n      REDIS_PASSWORD: ${REDIS_PASSWORD:-null}\n      REDIS_PORT: 6379\n      CACHE_STORE: redis\n      SESSION_DRIVER: redis\n      QUEUE_CONNECTION: redis\n      MAIL_MAILER: ${MAIL_MAILER:-log}\n      MAIL_HOST: ${MAIL_HOST:-}\n      MAIL_PORT: ${MAIL_PORT:-587}\n      MAIL_USERNAME: ${MAIL_USERNAME:-}\n      MAIL_PASSWORD: ${MAIL_PASSWORD:-}\n      MAIL_ENCRYPTION: ${MAIL_ENCRYPTION:-tls}\n      MAIL_FROM_ADDRESS: ${MAIL_FROM_ADDRESS:-hello@example.com}\n      MAIL_FROM_NAME: ${MAIL_FROM_NAME:-Relaticle}\n      # serversideup/php Laravel automations\n      AUTORUN_ENABLED: \"true\"\n      AUTORUN_LARAVEL_MIGRATION: \"true\"\n      AUTORUN_LARAVEL_MIGRATION_ISOLATION: \"true\"\n    volumes:\n      - storage:/var/www/html/storage/app\n    depends_on:\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8080/up\"]\n      interval: 30s\n      timeout: 5s\n      retries: 3\n      start_period: 60s\n\n  horizon:\n    build:\n      context: .\n      dockerfile: Dockerfile\n      target: production\n    image: ghcr.io/relaticle/relaticle:latest\n    restart: unless-stopped\n    command: [\"php\", \"/var/www/html/artisan\", \"horizon\"]\n    stop_signal: SIGTERM\n    environment:\n      APP_NAME: ${APP_NAME:-Relaticle}\n      APP_ENV: ${APP_ENV:-production}\n      APP_KEY: ${APP_KEY:?APP_KEY is required}\n      APP_DEBUG: ${APP_DEBUG:-false}\n      APP_URL: ${APP_URL:-http://localhost}\n      APP_PANEL_DOMAIN: ${APP_PANEL_DOMAIN:-}\n      LOG_CHANNEL: ${LOG_CHANNEL:-stderr}\n      DB_CONNECTION: pgsql\n      DB_HOST: postgres\n      DB_PORT: 5432\n      DB_DATABASE: ${DB_DATABASE:-relaticle}\n      DB_USERNAME: ${DB_USERNAME:-relaticle}\n      DB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required}\n      REDIS_HOST: redis\n      REDIS_PASSWORD: ${REDIS_PASSWORD:-null}\n      REDIS_PORT: 6379\n      QUEUE_CONNECTION: redis\n      # Disable automations for worker container\n      AUTORUN_ENABLED: \"false\"\n    volumes:\n      - storage:/var/www/html/storage/app\n    depends_on:\n      app:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n    healthcheck:\n      test: [\"CMD\", \"healthcheck-horizon\"]\n      start_period: 10s\n\n  scheduler:\n    build:\n      context: .\n      dockerfile: Dockerfile\n      target: production\n    image: ghcr.io/relaticle/relaticle:latest\n    restart: unless-stopped\n    command: [\"php\", \"/var/www/html/artisan\", \"schedule:work\"]\n    stop_signal: SIGTERM\n    environment:\n      APP_NAME: ${APP_NAME:-Relaticle}\n      APP_ENV: ${APP_ENV:-production}\n      APP_KEY: ${APP_KEY:?APP_KEY is required}\n      APP_DEBUG: ${APP_DEBUG:-false}\n      APP_URL: ${APP_URL:-http://localhost}\n      APP_PANEL_DOMAIN: ${APP_PANEL_DOMAIN:-}\n      LOG_CHANNEL: ${LOG_CHANNEL:-stderr}\n      DB_CONNECTION: pgsql\n      DB_HOST: postgres\n      DB_PORT: 5432\n      DB_DATABASE: ${DB_DATABASE:-relaticle}\n      DB_USERNAME: ${DB_USERNAME:-relaticle}\n      DB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required}\n      REDIS_HOST: redis\n      REDIS_PASSWORD: ${REDIS_PASSWORD:-null}\n      REDIS_PORT: 6379\n      QUEUE_CONNECTION: redis\n      # Disable automations for scheduler container\n      AUTORUN_ENABLED: \"false\"\n    volumes:\n      - storage:/var/www/html/storage/app\n    depends_on:\n      app:\n        condition: service_healthy\n    healthcheck:\n      test: [\"CMD\", \"healthcheck-schedule\"]\n      start_period: 10s\n\n  postgres:\n    image: postgres:17-alpine\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: ${DB_DATABASE:-relaticle}\n      POSTGRES_USER: ${DB_USERNAME:-relaticle}\n      POSTGRES_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required}\n    volumes:\n      - postgres:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U ${DB_USERNAME:-relaticle} -d ${DB_DATABASE:-relaticle}\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    restart: unless-stopped\n    command: redis-server --appendonly yes\n    volumes:\n      - redis:/data\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\nvolumes:\n  postgres:\n  redis:\n  storage:\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The Next-Generation Open-Source CRM Platform\",\n    \"keywords\": [\n        \"crm\",\n        \"laravel\",\n        \"filament\",\n        \"saas\",\n        \"customer-relationship-management\",\n        \"sales-pipeline\",\n        \"team-collaboration\"\n    ],\n    \"license\": \"AGPL-3.0\",\n    \"require\": {\n        \"php\": \"^8.4\",\n        \"andreiio/blade-remix-icon\": \"^3.9\",\n        \"ashallendesign/favicon-fetcher\": \"^3.8\",\n        \"asmit/resized-column\": \"^2.1\",\n        \"blade-ui-kit/blade-heroicons\": \"^2.6\",\n        \"blade-ui-kit/blade-icons\": \"^1.8\",\n        \"doctrine/dbal\": \"^4.4\",\n        \"filament/filament\": \"^5.0\",\n        \"knuckleswtf/scribe\": \"^5.8\",\n        \"laravel/framework\": \"^12.0\",\n        \"laravel/horizon\": \"^5.29\",\n        \"laravel/jetstream\": \"^5.2\",\n        \"laravel/mcp\": \"^0.6.2\",\n        \"laravel/sanctum\": \"^4.0\",\n        \"laravel/socialite\": \"^5.16\",\n        \"laravel/tinker\": \"^2.9\",\n        \"livewire/livewire\": \"^4.0\",\n        \"prism-php/prism\": \"^0.98.5\",\n        \"relaticle/custom-fields\": \"^3.0\",\n        \"relaticle/flowforge\": \"^4.0\",\n        \"ryangjchandler/laravel-cloudflare-turnstile\": \"^3.0\",\n        \"scalar/laravel\": \"^0.2.0\",\n        \"sentry/sentry-laravel\": \"^4.13\",\n        \"spatie/cpu-load-health-check\": \"^1.0\",\n        \"spatie/eloquent-sortable\": \"^4.4\",\n        \"spatie/laravel-data\": \"^4.15\",\n        \"spatie/laravel-health\": \"^1.37\",\n        \"spatie/laravel-honeypot\": \"^4.7\",\n        \"spatie/laravel-login-link\": \"^1.3\",\n        \"spatie/laravel-mailcoach-mailer\": \"^1.5\",\n        \"spatie/laravel-mailcoach-sdk\": \"^1.4\",\n        \"spatie/laravel-markdown\": \"^2.7\",\n        \"spatie/laravel-markdown-response\": \"^1.1\",\n        \"spatie/laravel-medialibrary\": \"^11.12\",\n        \"spatie/laravel-prefixed-ids\": \"^1.4\",\n        \"spatie/laravel-query-builder\": \"^7.0\",\n        \"spatie/laravel-settings\": \"^3.3\",\n        \"spatie/laravel-sitemap\": \"^7.3\",\n        \"spatie/laravel-sluggable\": \"^3.8\",\n        \"spatie/schema-org\": \"^4.0\",\n        \"spatie/security-advisories-health-check\": \"^1.3\",\n        \"spatie/simple-excel\": \"^3.8\",\n        \"symfony/http-client\": \"^7.2\",\n        \"symfony/postmark-mailer\": \"^7.2\",\n        \"symfony/yaml\": \"^7.2\"\n    },\n    \"require-dev\": {\n        \"driftingly/rector-laravel\": \"^2.0\",\n        \"fakerphp/faker\": \"^1.23\",\n        \"itsgoingd/clockwork\": \"^5.3\",\n        \"larastan/larastan\": \"^3.0\",\n        \"laravel/boost\": \"^2.0\",\n        \"laravel/pail\": \"^1.2.2\",\n        \"laravel/pint\": \"^1.21\",\n        \"laravel/sail\": \"^1.26\",\n        \"mockery/mockery\": \"^1.6\",\n        \"nunomaduro/collision\": \"^8.0\",\n        \"nunomaduro/pao\": \"^0.1\",\n        \"pestphp/pest\": \"^4.0\",\n        \"pestphp/pest-plugin-browser\": \"^4.3\",\n        \"pestphp/pest-plugin-laravel\": \"^4.0\",\n        \"pestphp/pest-plugin-type-coverage\": \"^4.0\",\n        \"rector/rector\": \"^2.0\",\n        \"spatie/boost-spatie-guidelines\": \"^1.1\",\n        \"spatie/pest-plugin-route-testing\": \"^1.1\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"app/\",\n            \"Relaticle\\\\SystemAdmin\\\\\": \"packages/SystemAdmin/src\",\n            \"Relaticle\\\\Documentation\\\\\": \"packages/Documentation/src\",\n            \"Relaticle\\\\OnboardSeed\\\\\": \"packages/OnboardSeed/src\",\n            \"Relaticle\\\\ImportWizard\\\\\": \"packages/ImportWizard/src\",\n            \"Database\\\\Factories\\\\\": \"database/factories/\",\n            \"Database\\\\Seeders\\\\\": \"database/seeders/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"scripts\": {\n        \"post-autoload-dump\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump\",\n            \"@php artisan package:discover --ansi\",\n            \"@php artisan filament:upgrade\"\n        ],\n        \"post-update-cmd\": [\n            \"@php artisan vendor:publish --tag=laravel-assets --ansi --force\"\n        ],\n        \"post-root-package-install\": [\n            \"@php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n        ],\n        \"post-create-project-cmd\": [\n            \"@php artisan key:generate --ansi\",\n            \"@php -r \\\"file_exists('database/database.sqlite') || touch('database/database.sqlite');\\\"\",\n            \"@php artisan migrate --graceful --ansi\"\n        ],\n        \"app-install\": [\n            \"@composer install\",\n            \"@php artisan relaticle:install\"\n        ],\n        \"dev\": [\n            \"Composer\\\\Config::disableProcessTimeout\",\n            \"npx concurrently -c \\\"#93c5fd,#c4b5fd,#fb7185,#fdba74\\\" \\\"php artisan serve\\\" \\\"php artisan queue:listen --tries=1\\\" \\\"php artisan pail --timeout=0\\\" \\\"npm run dev\\\" --names=server,queue,logs,vite --kill-others\"\n        ],\n        \"lint\": \"rector && pint --parallel\",\n        \"test:lint\": \"pint --test\",\n        \"test:refactor\": \"rector --dry-run\",\n        \"test:types\": \"phpstan analyse\",\n        \"test:arch\": \"pest tests/Arch/\",\n        \"test:type-coverage\": \"pest --type-coverage --min=100\",\n        \"test:pest\": \"pest --parallel --exclude-testsuite=Browser\",\n        \"test:pest:shard\": \"pest --parallel --shard=${SHARD} --exclude-testsuite=Browser\",\n        \"test:pest:ci\": \"pest --compact --configuration phpunit.ci.xml --shard=${SHARD} --exclude-testsuite=Browser\",\n        \"test:browser\": \"pest tests/Browser/\",\n        \"test\": [\n            \"@test:lint\",\n            \"@test:refactor\",\n            \"@test:type-coverage\",\n            \"@test:types\",\n            \"@test:pest\"\n        ],\n        \"test:ci\": [\n            \"@test:lint\",\n            \"@test:refactor\",\n            \"@test:type-coverage\",\n            \"@test:types\",\n            \"@test:pest:ci\"\n        ]\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"dont-discover\": []\n        }\n    },\n    \"config\": {\n        \"optimize-autoloader\": true,\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true,\n        \"allow-plugins\": {\n            \"pestphp/pest-plugin\": true,\n            \"php-http/discovery\": true\n        }\n    },\n    \"minimum-stability\": \"beta\",\n    \"prefer-stable\": true,\n    \"repositories\": []\n}\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application, which will be used when the\n    | framework needs to place the application's name in a notification or\n    | other UI elements where an application name needs to be displayed.\n    |\n    */\n\n    'name' => env('APP_NAME', 'Laravel'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services the application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => (bool) env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | the application so that it's available within Artisan commands.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | System Administrator Panel Configuration\n    |--------------------------------------------------------------------------\n    |\n    | These values configure how the system administrator panel is accessed.\n    | You can either use a subdomain (sysadmin_domain) or a path (sysadmin_path).\n    | If sysadmin_domain is set, it will be used; otherwise, sysadmin_path will be used.\n    |\n    */\n\n    'sysadmin_domain' => env('SYSADMIN_DOMAIN'),\n    'sysadmin_path' => env('SYSADMIN_PATH', 'sysadmin'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Panel Configuration\n    |--------------------------------------------------------------------------\n    |\n    | These values configure how the main application (CRM) panel is accessed.\n    | By default, the panel uses path-based routing at /app. For subdomain\n    | routing, set APP_PANEL_DOMAIN (e.g., app.example.com).\n    |\n    */\n\n    'app_panel_domain' => env('APP_PANEL_DOMAIN'),\n    'app_panel_path' => env('APP_PANEL_PATH', 'app'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | MCP Server Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The domain where the MCP server is publicly accessible.\n    | If set, URL helpers will generate URLs using this domain.\n    | Otherwise, the MCP endpoint is available at {APP_URL}/mcp.\n    |\n    */\n\n    'mcp_domain' => env('MCP_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | API Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The domain where the REST API is publicly accessible.\n    | If set, URL helpers will generate URLs using this domain.\n    | Otherwise, the API is available at {APP_URL}/api.\n    |\n    */\n\n    'api_domain' => env('API_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. The timezone\n    | is set to \"UTC\" by default as it is suitable for most use cases.\n    |\n    */\n\n    'timezone' => env('APP_TIMEZONE', 'UTC'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by Laravel's translation / localization methods. This option can be\n    | set to any locale for which you plan to have translation strings.\n    |\n    */\n\n    'locale' => env('APP_LOCALE', 'en'),\n\n    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),\n\n    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is utilized by Laravel's encryption services and should be set\n    | to a random, 32 character string to ensure that all encrypted values\n    | are secure. You should do this prior to deploying the application.\n    |\n    */\n\n    'cipher' => 'AES-256-CBC',\n\n    'key' => env('APP_KEY'),\n\n    'previous_keys' => [\n        ...array_filter(\n            explode(',', (string) env('APP_PREVIOUS_KEYS', ''))\n        ),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Maintenance Mode Driver\n    |--------------------------------------------------------------------------\n    |\n    | These configuration options determine the driver used to determine and\n    | manage Laravel's \"maintenance mode\" status. The \"cache\" driver will\n    | allow maintenance mode to be controlled across multiple machines.\n    |\n    | Supported drivers: \"file\", \"cache\"\n    |\n    */\n\n    'maintenance' => [\n        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),\n        'store' => env('APP_MAINTENANCE_STORE', 'database'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Health Checks\n    |--------------------------------------------------------------------------\n    |\n    | When enabled, Spatie Health will register all application health checks.\n    | Set the HEALTH_CHECKS_ENABLED environment variable to true to activate.\n    |\n    */\n\n    'health_checks_enabled' => (bool) env('HEALTH_CHECKS_ENABLED', false),\n\n];\n"
  },
  {
    "path": "config/auth.php",
    "content": "<?php\n\ndeclare(strict_types=1);\nuse App\\Models\\User;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default authentication \"guard\" and password\n    | reset \"broker\" for your application. You may change these values\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard' => env('AUTH_GUARD', 'web'),\n        'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | which utilizes session storage plus the Eloquent user provider.\n    |\n    | All authentication guards have a user provider, which defines how the\n    | users are actually retrieved out of your database or other storage\n    | system used by the application. Typically, Eloquent is utilized.\n    |\n    | Supported: \"session\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver' => 'session',\n            'provider' => 'users',\n        ],\n\n        'sysadmin' => [\n            'driver' => 'session',\n            'provider' => 'system_administrators',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication guards have a user provider, which defines how the\n    | users are actually retrieved out of your database or other storage\n    | system used by the application. Typically, Eloquent is utilized.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | providers to represent the model / table. These providers may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model' => env('AUTH_MODEL', User::class),\n        ],\n\n        'system_administrators' => [\n            'driver' => 'eloquent',\n            'model' => SystemAdministrator::class,\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | These configuration options specify the behavior of Laravel's password\n    | reset functionality, including the table utilized for token storage\n    | and the user provider that is invoked to actually retrieve users.\n    |\n    | The expiry time is the number of minutes that each reset token will be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    | The throttle setting is the number of seconds a user must wait before\n    | generating more password reset tokens. This prevents the user from\n    | quickly generating a very large amount of password reset tokens.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),\n            'expire' => 60,\n            'throttle' => 60,\n        ],\n\n        'system_administrators' => [\n            'provider' => 'system_administrators',\n            'expire' => 60,\n            'throttle' => 60,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Confirmation Timeout\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define the amount of seconds before a password confirmation\n    | window expires and users are asked to re-enter their password via the\n    | confirmation screen. By default, the timeout lasts for three hours.\n    |\n    */\n\n    'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),\n\n];\n"
  },
  {
    "path": "config/avatar.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Avatar Configuration\n    |--------------------------------------------------------------------------\n    |\n    | This file contains the configuration for the avatar generation service.\n    | The service generates SVG avatars for users based on their initials\n    | with configurable colors and caching options.\n    |\n    */\n\n    // Default background color for avatars (hex format)\n    'default_background_color' => env('AVATAR_BACKGROUND_COLOR', '#ede9fe'),\n\n    // Default text color for avatars (hex format)\n    'default_text_color' => env('AVATAR_TEXT_COLOR', '#5b21b6'),\n\n    // Time to live for avatar cache (in seconds)\n    'cache_ttl' => env('AVATAR_CACHE_TTL', 604800), // Default: 1 week (corrected from 1 second)\n\n    // Available background colors for random/deterministic selection\n    // Only used if background_color is set to null\n    'background_colors' => [\n        '#E53E3E', // Red\n        '#DD6B20', // Orange\n        '#D69E2E', // Yellow\n        '#38A169', // Green\n        '#3182CE', // Blue\n        '#805AD5', // Purple\n        '#D53F8C', // Pink\n        '#718096', // Gray\n        '#F87171', // Red\n        '#FBBF24', // Yellow\n        '#34D399', // Green\n        '#3B82F6', // Blue\n        '#A78BFA', // Purple\n        '#F472B6', // Pink\n        '#6B7280', // Gray\n    ],\n\n    // Minimum contrast ratio for text/background (WCAG AA requires 4.5:1)\n    'minimum_contrast_ratio' => 4.5,\n];\n"
  },
  {
    "path": "config/blade-icons.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Icons Sets\n    |--------------------------------------------------------------------------\n    |\n    | With this config option you can define a couple of\n    | default icon sets. Provide a key name for your icon\n    | set and a combination from the options below.\n    |\n    */\n\n    'sets' => [\n\n        'default' => [\n\n            /*\n             |-----------------------------------------------------------------\n             | Icons Path\n             |-----------------------------------------------------------------\n             |\n             | Provide the relative path from your app root to your SVG icons\n             | directory. Icons are loaded recursively so there's no need to\n             | list every sub-directory.\n             |\n             | Relative to the disk root when the disk option is set.\n             |\n             */\n\n            'path' => 'resources/svg',\n\n            /*\n             |-----------------------------------------------------------------\n             | Filesystem Disk\n             |-----------------------------------------------------------------\n             |\n             | Optionally, provide a specific filesystem disk to read\n             | icons from. When defining a disk, the \"path\" option\n             | starts relatively from the disk root.\n             |\n             */\n\n            'disk' => '',\n\n            /*\n             |-----------------------------------------------------------------\n             | Default Prefix\n             |-----------------------------------------------------------------\n             |\n             | This config option allows you to define a default prefix for\n             | your icons. The dash separator will be applied automatically\n             | to every icon name. It's required and needs to be unique.\n             |\n             */\n\n            'prefix' => 'icon',\n\n            /*\n             |-----------------------------------------------------------------\n             | Fallback Icon\n             |-----------------------------------------------------------------\n             |\n             | This config option allows you to define a fallback\n             | icon when an icon in this set cannot be found.\n             |\n             */\n\n            'fallback' => '',\n\n            /*\n             |-----------------------------------------------------------------\n             | Default Set Classes\n             |-----------------------------------------------------------------\n             |\n             | This config option allows you to define some classes which\n             | will be applied by default to all icons within this set.\n             |\n             */\n\n            'class' => '',\n\n            /*\n             |-----------------------------------------------------------------\n             | Default Set Attributes\n             |-----------------------------------------------------------------\n             |\n             | This config option allows you to define some attributes which\n             | will be applied by default to all icons within this set.\n             |\n             */\n\n            'attributes' => [\n                // 'width' => 50,\n                // 'height' => 50,\n            ],\n\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global Default Classes\n    |--------------------------------------------------------------------------\n    |\n    | This config option allows you to define some classes which\n    | will be applied by default to all icons.\n    |\n    */\n\n    'class' => '',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global Default Attributes\n    |--------------------------------------------------------------------------\n    |\n    | This config option allows you to define some attributes which\n    | will be applied by default to all icons.\n    |\n    */\n\n    'attributes' => [\n        // 'width' => 50,\n        // 'height' => 50,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global Fallback Icon\n    |--------------------------------------------------------------------------\n    |\n    | This config option allows you to define a global fallback\n    | icon when an icon in any set cannot be found. It can\n    | reference any icon from any configured set.\n    |\n    */\n\n    'fallback' => '',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Components\n    |--------------------------------------------------------------------------\n    |\n    | These config options allow you to define some\n    | settings related to Blade Components.\n    |\n    */\n\n    'components' => [\n\n        /*\n        |----------------------------------------------------------------------\n        | Disable Components\n        |----------------------------------------------------------------------\n        |\n        | This config option allows you to disable Blade components\n        | completely. It's useful to avoid performance problems\n        | when working with large icon libraries.\n        |\n        */\n\n        'disabled' => false,\n\n        /*\n        |----------------------------------------------------------------------\n        | Default Icon Component Name\n        |----------------------------------------------------------------------\n        |\n        | This config option allows you to define the name\n        | for the default Icon class component.\n        |\n        */\n\n        'default' => 'icon',\n\n    ],\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache store that will be used by the\n    | framework. This connection is utilized if another isn't explicitly\n    | specified when running a cache operation inside the application.\n    |\n    */\n\n    'default' => env('CACHE_STORE', 'database'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    | Supported drivers: \"array\", \"database\", \"file\", \"memcached\",\n    |                    \"redis\", \"dynamodb\", \"octane\", \"null\"\n    |\n    */\n\n    'stores' => [\n\n        'array' => [\n            'driver' => 'array',\n            'serialize' => false,\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'connection' => env('DB_CACHE_CONNECTION'),\n            'table' => env('DB_CACHE_TABLE', 'cache'),\n            'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),\n            'lock_table' => env('DB_CACHE_LOCK_TABLE'),\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n            'lock_path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),\n            'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),\n        ],\n\n        'dynamodb' => [\n            'driver' => 'dynamodb',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),\n            'endpoint' => env('DYNAMODB_ENDPOINT'),\n        ],\n\n        'octane' => [\n            'driver' => 'octane',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing the APC, database, memcached, Redis, and DynamoDB cache\n    | stores, there might be other applications using the same cache. For\n    | that reason, you may prefix every cache key to avoid collisions.\n    |\n    */\n\n    'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel'), '_').'_cache_'),\n\n];\n"
  },
  {
    "path": "config/custom-fields.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Filament\\Resources\\NoteResource;\nuse App\\Filament\\Resources\\PeopleResource;\nuse App\\Filament\\Resources\\TaskResource;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse Relaticle\\CustomFields\\EntitySystem\\EntityConfigurator;\nuse Relaticle\\CustomFields\\EntitySystem\\EntityModel;\nuse Relaticle\\CustomFields\\Enums\\AvatarShape;\nuse Relaticle\\CustomFields\\Enums\\CustomFieldsFeature;\nuse Relaticle\\CustomFields\\FeatureSystem\\FeatureConfigurator;\nuse Relaticle\\CustomFields\\FieldTypeSystem\\FieldTypeConfigurator;\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Entity Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Configure entities (models that can have custom fields) using the\n    | clean, type-safe fluent builder interface.\n    |\n    */\n    'entity_configuration' => EntityConfigurator::configure()\n        ->discover(app_path('Models'))\n        ->models([\n            EntityModel::configure(\n                modelClass: People::class,\n                primaryAttribute: 'name',\n                resourceClass: PeopleResource::class,\n                avatarConfiguration: EntityModel::avatar(attribute: 'avatar'),\n            ),\n            EntityModel::configure(\n                modelClass: Company::class,\n                primaryAttribute: 'name',\n                resourceClass: CompanyResource::class,\n                avatarConfiguration: EntityModel::avatar(attribute: 'logo', shape: AvatarShape::Square),\n            ),\n            EntityModel::configure(\n                modelClass: Note::class,\n                primaryAttribute: 'title',\n                resourceClass: NoteResource::class,\n                recordPage: null,\n            ),\n            EntityModel::configure(\n                modelClass: Task::class,\n                primaryAttribute: 'title',\n                resourceClass: TaskResource::class,\n                recordPage: null,\n            ),\n        ])\n        ->cache(),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Advanced Field Type Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Configure field types using the powerful fluent builder API.\n    | This provides advanced control over validation, security, and behavior.\n    |\n    */\n    'field_type_configuration' => FieldTypeConfigurator::configure()\n        // Control which field types are available globally\n        ->enabled([]) // Empty = all enabled, or specify: ['text', 'email', 'select']\n        ->disabled(['file-upload']) // Disable specific field types\n        ->discover(true)\n        ->cache(enabled: true, ttl: 3600),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Features Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Configure package features using the type-safe enum-based configurator.\n    | This consolidates all feature settings into a single, organized system.\n    |\n    */\n    'features' => FeatureConfigurator::configure()\n        ->enable(\n            CustomFieldsFeature::FIELD_ENCRYPTION,\n            CustomFieldsFeature::FIELD_OPTION_COLORS,\n            CustomFieldsFeature::FIELD_MULTI_VALUE,\n            CustomFieldsFeature::FIELD_UNIQUE_VALUE,\n            CustomFieldsFeature::FIELD_CODE_AUTO_GENERATE,\n            CustomFieldsFeature::UI_TABLE_COLUMNS,\n            CustomFieldsFeature::UI_TOGGLEABLE_COLUMNS,\n            CustomFieldsFeature::UI_TABLE_FILTERS,\n            CustomFieldsFeature::SYSTEM_MANAGEMENT_INTERFACE,\n            CustomFieldsFeature::SYSTEM_MULTI_TENANCY,\n        )->disable(\n            CustomFieldsFeature::FIELD_CONDITIONAL_VISIBILITY,\n            CustomFieldsFeature::FIELD_VALIDATION_RULES,\n            CustomFieldsFeature::UI_FIELD_WIDTH_CONTROL,\n            CustomFieldsFeature::SYSTEM_SECTIONS,\n        ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resource Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Customize the behavior of entity resources in Filament.\n    |\n    */\n    'resource' => [\n        'table' => [\n            'columns' => true,\n            'columns_toggleable' => true,\n            'filters' => true,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Management Interface\n    |--------------------------------------------------------------------------\n    |\n    | Configure the Custom Fields management interface in Filament.\n    |\n    */\n    'management' => [\n        'enabled' => true,\n        'slug' => 'custom-fields',\n        'navigation_sort' => 100,\n        'navigation_group' => true,\n        'cluster' => null,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Multi-Tenancy\n    |--------------------------------------------------------------------------\n    |\n    | Enable multi-tenancy support with automatic tenant isolation.\n    |\n    */\n    'tenant_aware' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Configure database table names and migration paths.\n    |\n    */\n    'database' => [\n        'migrations_path' => database_path('custom-fields'),\n        'table_names' => [\n            'custom_field_sections' => 'custom_field_sections',\n            'custom_fields' => 'custom_fields',\n            'custom_field_values' => 'custom_field_values',\n            'custom_field_options' => 'custom_field_options',\n        ],\n        'column_names' => [\n            'tenant_foreign_key' => 'tenant_id',\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/data.php",
    "content": "<?php\n\ndeclare(strict_types=1);\nuse Illuminate\\Contracts\\Support\\Arrayable;\nuse Spatie\\LaravelData\\Casts\\DateTimeInterfaceCast;\nuse Spatie\\LaravelData\\Casts\\EnumCast;\nuse Spatie\\LaravelData\\Normalizers\\ArrayableNormalizer;\nuse Spatie\\LaravelData\\Normalizers\\ArrayNormalizer;\nuse Spatie\\LaravelData\\Normalizers\\JsonNormalizer;\nuse Spatie\\LaravelData\\Normalizers\\ModelNormalizer;\nuse Spatie\\LaravelData\\Normalizers\\ObjectNormalizer;\nuse Spatie\\LaravelData\\RuleInferrers\\AttributesRuleInferrer;\nuse Spatie\\LaravelData\\RuleInferrers\\BuiltInTypesRuleInferrer;\nuse Spatie\\LaravelData\\RuleInferrers\\NullableRuleInferrer;\nuse Spatie\\LaravelData\\RuleInferrers\\RequiredRuleInferrer;\nuse Spatie\\LaravelData\\RuleInferrers\\SometimesRuleInferrer;\nuse Spatie\\LaravelData\\Support\\Creation\\ValidationStrategy;\nuse Spatie\\LaravelData\\Transformers\\ArrayableTransformer;\nuse Spatie\\LaravelData\\Transformers\\DateTimeInterfaceTransformer;\nuse Spatie\\LaravelData\\Transformers\\EnumTransformer;\n\nreturn [\n    /*\n     * The package will use this format when working with dates. If this option\n     * is an array, it will try to convert from the first format that works,\n     * and will serialize dates using the first format from the array.\n     */\n    'date_format' => DATE_ATOM,\n\n    /*\n     * When transforming or casting dates, the following timezone will be used to\n     * convert the date to the correct timezone. If set to null no timezone will\n     * be passed.\n     */\n    'date_timezone' => null,\n\n    /*\n     * It is possible to enable certain features of the package, these would otherwise\n     * be breaking changes, and thus they are disabled by default. In the next major\n     * version of the package, these features will be enabled by default.\n     */\n    'features' => [\n        'cast_and_transform_iterables' => false,\n\n        /*\n         * When trying to set a computed property value, the package will throw an exception.\n         * You can disable this behaviour by setting this option to true, which will then just\n         * ignore the value being passed into the computed property and recalculate it.\n         */\n        'ignore_exception_when_trying_to_set_computed_property_value' => false,\n    ],\n\n    /*\n     * Global transformers will take complex types and transform them into simple\n     * types.\n     */\n    'transformers' => [\n        DateTimeInterface::class => DateTimeInterfaceTransformer::class,\n        Arrayable::class => ArrayableTransformer::class,\n        BackedEnum::class => EnumTransformer::class,\n    ],\n\n    /*\n     * Global casts will cast values into complex types when creating a data\n     * object from simple types.\n     */\n    'casts' => [\n        DateTimeInterface::class => DateTimeInterfaceCast::class,\n        BackedEnum::class => EnumCast::class,\n        //        Enumerable::class => Spatie\\LaravelData\\Casts\\EnumerableCast::class,\n    ],\n\n    /*\n     * Rule inferrers can be configured here. They will automatically add\n     * validation rules to properties of a data object based upon\n     * the type of the property.\n     */\n    'rule_inferrers' => [\n        SometimesRuleInferrer::class,\n        NullableRuleInferrer::class,\n        RequiredRuleInferrer::class,\n        BuiltInTypesRuleInferrer::class,\n        AttributesRuleInferrer::class,\n    ],\n\n    /*\n     * Normalizers return an array representation of the payload, or null if\n     * it cannot normalize the payload. The normalizers below are used for\n     * every data object, unless overridden in a specific data object class.\n     */\n    'normalizers' => [\n        ModelNormalizer::class,\n        // Spatie\\LaravelData\\Normalizers\\FormRequestNormalizer::class,\n        ArrayableNormalizer::class,\n        ObjectNormalizer::class,\n        ArrayNormalizer::class,\n        JsonNormalizer::class,\n    ],\n\n    /*\n     * Data objects can be wrapped into a key like 'data' when used as a resource,\n     * this key can be set globally here for all data objects. You can pass in\n     * `null` if you want to disable wrapping.\n     */\n    'wrap' => null,\n\n    /*\n     * Adds a specific caster to the Symphony VarDumper component which hides\n     * some properties from data objects and collections when being dumped\n     * by `dump` or `dd`. Can be 'enabled', 'disabled' or 'development'\n     * which will only enable the caster locally.\n     */\n    'var_dumper_caster_mode' => 'development',\n\n    /*\n     * It is possible to skip the PHP reflection analysis of data objects\n     * when running in production. This will speed up the package. You\n     * can configure where data objects are stored and which cache\n     * store should be used.\n     *\n     * Structures are cached forever as they'll become stale when your\n     * application is deployed with changes. You can set a duration\n     * in seconds if you want the cache to clear after a certain\n     * timeframe.\n     */\n    'structure_caching' => [\n        'enabled' => true,\n        'directories' => [app_path('Data')],\n        'cache' => [\n            'store' => env('CACHE_STORE', env('CACHE_DRIVER', 'file')),\n            'prefix' => 'laravel-data',\n            'duration' => null,\n        ],\n        'reflection_discovery' => [\n            'enabled' => true,\n            'base_path' => base_path(),\n            'root_namespace' => null,\n        ],\n    ],\n\n    /*\n     * A data object can be validated when created using a factory or when calling the from\n     * method. By default, only when a request is passed the data is being validated. This\n     * behaviour can be changed to always validate or to completely disable validation.\n     */\n    'validation_strategy' => ValidationStrategy::OnlyRequests->value,\n\n    /*\n     * A data object can map the names of its properties when transforming (output) or when\n     * creating (input). By default, the package will not map any names. You can set a\n     * global strategy here, or override it on a specific data object.\n     */\n    'name_mapping_strategy' => [\n        'input' => null,\n        'output' => null,\n    ],\n\n    /*\n     * When using an invalid include, exclude, only or except partial, the package will\n     * throw an exception. You can disable this behaviour by setting this option to true.\n     */\n    'ignore_invalid_partials' => false,\n\n    /*\n     * When transforming a nested chain of data objects, the package can end up in an infinite\n     * loop when including a recursive relationship. The max transformation depth can be\n     * set as a safety measure to prevent this from happening. When set to null, the\n     * package will not enforce a maximum depth.\n     */\n    'max_transformation_depth' => null,\n\n    /*\n     * When the maximum transformation depth is reached, the package will throw an exception.\n     * You can disable this behaviour by setting this option to true which will return an\n     * empty array.\n     */\n    'throw_when_max_transformation_depth_reached' => true,\n\n    /*\n     * When using the `make:data` command, the package will use these settings to generate\n     * the data classes. You can override these settings by passing options to the command.\n     */\n    'commands' => [\n\n        /*\n         * Provides default configuration for the `make:data` command. These settings can be overridden with options\n         * passed directly to the `make:data` command for generating single Data classes, or if not set they will\n         * automatically fall back to these defaults. See `php artisan make:data --help` for more information\n         */\n        'make' => [\n\n            /*\n             * The default namespace for generated Data classes. This exists under the application's root namespace,\n             * so the default 'Data` will end up as '\\App\\Data', and generated Data classes will be placed in the\n             * app/Data/ folder. Data classes can live anywhere, but this is where `make:data` will put them.\n             */\n            'namespace' => 'Data',\n\n            /*\n             * This suffix will be appended to all data classes generated by make:data, so that they are less likely\n             * to conflict with other related classes, controllers or models with a similar name without resorting\n             * to adding an alias for the Data object. Set to a blank string (not null) to disable.\n             */\n            'suffix' => 'Data',\n        ],\n    ],\n\n    /*\n     * When using Livewire, the package allows you to enable or disable the synths\n     * these synths will automatically handle the data objects and their\n     * properties when used in a Livewire component.\n     */\n    'livewire' => [\n        'enable_synths' => false,\n    ],\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for database operations. This is\n    | the connection which will be utilized unless another connection\n    | is explicitly specified when you execute a query / statement.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'sqlite'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Below are all of the database connections defined for your application.\n    | An example configuration is provided for each database system which\n    | is supported by Laravel. You're free to add / remove connections.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'url' => env('DB_URL'),\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n            'busy_timeout' => null,\n            'journal_mode' => null,\n            'synchronous' => null,\n        ],\n\n        'mysql' => [\n            'driver' => 'mysql',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => env('DB_CHARSET', 'utf8mb4'),\n            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'mariadb' => [\n            'driver' => 'mariadb',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => env('DB_CHARSET', 'utf8mb4'),\n            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => env('DB_CHARSET', 'utf8'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'search_path' => 'public',\n            'sslmode' => 'prefer',\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => env('DB_CHARSET', 'utf8'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            // 'encrypt' => env('DB_ENCRYPT', 'yes'),\n            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run on the database.\n    |\n    */\n\n    'migrations' => [\n        'table' => 'migrations',\n        'update_date_on_publish' => true,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer body of commands than a typical key-value system\n    | such as Memcached. You may define your connection settings here.\n    |\n    */\n\n    'redis' => [\n\n        'client' => env('REDIS_CLIENT', 'phpredis'),\n\n        'options' => [\n            'cluster' => env('REDIS_CLUSTER', 'redis'),\n            'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel'), '_').'_database_'),\n        ],\n\n        'default' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'username' => env('REDIS_USERNAME'),\n            'password' => env('REDIS_PASSWORD'),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_DB', '0'),\n        ],\n\n        'cache' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'username' => env('REDIS_USERNAME'),\n            'password' => env('REDIS_PASSWORD'),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_CACHE_DB', '1'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/eloquent-sortable.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    /*\n     * Which column will be used as the order column.\n     */\n    'order_column_name' => 'order_column',\n\n    /*\n     * Define if the models should sort when creating.\n     * When true, the package will automatically assign the highest order number to a new model\n     */\n    'sort_when_creating' => true,\n\n    /*\n     * Define if the timestamps should be ignored when sorting.\n     * When true, updated_at will not be updated when using setNewOrder\n     */\n    'ignore_timestamps' => true,\n];\n"
  },
  {
    "path": "config/favicon-fetcher.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Driver\n    |--------------------------------------------------------------------------\n    |\n    | The driver that should be used by default for fetching the favicons.\n    | By default, the package comes with support for several drivers,\n    | but you can define your own if needed.\n    |\n    | Supported drivers: \"http\", \"google-shared-stuff\", \"favicon-kit\",\n    |                    \"unavatar\", \"favicon-grabber\"\n    |\n    */\n    'default' => 'unavatar',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Caching\n    |--------------------------------------------------------------------------\n    |\n    | The package provides support for caching the fetched favicon's URLs.\n    | Here, you can specify the different options for caching, such as\n    | cache prefix that is prepended to all the cache keys.\n    |\n    */\n    'cache' => [\n        'prefix' => 'favicon-fetcher',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Timeouts\n    |--------------------------------------------------------------------------\n    |\n    | Set the timeouts here in seconds for the HTTP requests that are made\n    | to fetch the favicons. If the timeout is set to 0, then no timeout\n    | will be applied. The connect timeout is the time taken to connect\n    | to the server, while the timeout is the time taken to get a\n    | response from the server after the connection is made.\n    |\n    */\n    'timeout' => 0,\n\n    'connect_timeout' => 0,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Verify TLS\n    |--------------------------------------------------------------------------\n    |\n    | Sets the TLS verification option when making HTTP requests, which is\n    | enabled by default.\n    */\n    'verify_tls' => env('FAVICON_FETCHER_VERIFY_TLS', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP User Agent\n    |--------------------------------------------------------------------------\n    |\n    | Set the user agent used by the HTTP client when fetching the favicons.\n    |\n    */\n    'user_agent' => env('FAVICON_FETCHER_USER_AGENT'),\n];\n"
  },
  {
    "path": "config/filament.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcasting\n    |--------------------------------------------------------------------------\n    |\n    | By uncommenting the Laravel Echo configuration, you may connect Filament\n    | to any Pusher-compatible websockets server.\n    |\n    | This will allow your users to receive real-time notifications.\n    |\n    */\n\n    'broadcasting' => env('VITE_PUSHER_APP_KEY') ? [\n\n        'echo' => [\n            'broadcaster' => 'pusher',\n            'key' => env('VITE_PUSHER_APP_KEY'),\n            'cluster' => env('VITE_PUSHER_APP_CLUSTER'),\n            'wsHost' => env('VITE_PUSHER_HOST'),\n            'wsPort' => env('VITE_PUSHER_PORT'),\n            'wssPort' => env('VITE_PUSHER_PORT'),\n            'authEndpoint' => '/broadcasting/auth',\n            'disableStats' => true,\n            'encrypted' => true,\n            'forceTLS' => true,\n        ],\n\n    ] : [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | This is the storage disk Filament will use to store files. You may use\n    | any of the disks defined in the `config/filesystems.php`.\n    |\n    */\n\n    'default_filesystem_disk' => env('FILAMENT_FILESYSTEM_DISK', 'public'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Assets Path\n    |--------------------------------------------------------------------------\n    |\n    | This is the directory where Filament's assets will be published to. It\n    | is relative to the `public` directory of your Laravel application.\n    |\n    | After changing the path, you should run `php artisan filament:assets`.\n    |\n    */\n\n    'assets_path' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Path\n    |--------------------------------------------------------------------------\n    |\n    | This is the directory that Filament will use to store cache files that\n    | are used to optimize the registration of components.\n    |\n    | After changing the path, you should run `php artisan filament:cache-components`.\n    |\n    */\n\n    'cache_path' => base_path('bootstrap/cache/filament'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Livewire Loading Delay\n    |--------------------------------------------------------------------------\n    |\n    | This sets the delay before loading indicators appear.\n    |\n    | Setting this to 'none' makes indicators appear immediately, which can be\n    | desirable for high-latency connections. Setting it to 'default' applies\n    | Livewire's standard 200ms delay.\n    |\n    */\n\n    'livewire_loading_delay' => 'default',\n\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application for file storage.\n    |\n    */\n\n    'default' => env('FILESYSTEM_DISK', 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Below you may configure as many filesystem disks as necessary, and you\n    | may even configure multiple disks for the same driver. Examples for\n    | most supported storage drivers are configured here for reference.\n    |\n    | Supported drivers: \"local\", \"ftp\", \"sftp\", \"s3\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app'),\n            'throw' => false,\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => storage_path('app/public'),\n            'url' => env('APP_URL').'/storage',\n            'visibility' => 'public',\n            'throw' => false,\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            'url' => env('AWS_URL'),\n            'endpoint' => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),\n            'throw' => false,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Symbolic Links\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the symbolic links that will be created when the\n    | `storage:link` Artisan command is executed. The array keys should be\n    | the locations of the links and the values should be their targets.\n    |\n    */\n\n    'links' => [\n        public_path('storage') => storage_path('app/public'),\n    ],\n\n];\n"
  },
  {
    "path": "config/fortify.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Laravel\\Fortify\\Features;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Fortify Guard\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which authentication guard Fortify will use while\n    | authenticating users. This value should correspond with one of your\n    | guards that is already present in your \"auth\" configuration file.\n    |\n    */\n\n    'guard' => 'web',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Fortify Password Broker\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which password broker Fortify can use when a user\n    | is resetting their password. This configured value should match one\n    | of your password brokers setup in your \"auth\" configuration file.\n    |\n    */\n\n    'passwords' => 'users',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Username / Email\n    |--------------------------------------------------------------------------\n    |\n    | This value defines which model attribute should be considered as your\n    | application's \"username\" field. Typically, this might be the email\n    | address of the users but you are free to change this value here.\n    |\n    | Out of the box, Fortify expects forgot password and reset password\n    | requests to have a field named 'email'. If the application uses\n    | another name for the field you may define it below as needed.\n    |\n    */\n\n    'username' => 'email',\n\n    'email' => 'email',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Lowercase Usernames\n    |--------------------------------------------------------------------------\n    |\n    | This value defines whether usernames should be lowercased before saving\n    | them in the database, as some database system string fields are case\n    | sensitive. You may disable this for your application if necessary.\n    |\n    */\n\n    'lowercase_usernames' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Home Path\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the path where users will get redirected during\n    | authentication or password reset when the operations are successful\n    | and the user is authenticated. You are free to change this value.\n    |\n    */\n\n    'home' => '/',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Fortify Routes Prefix / Subdomain\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which prefix Fortify will assign to all the routes\n    | that it registers with the application. If necessary, you may change\n    | subdomain under which all of the Fortify routes will be available.\n    |\n    */\n\n    'prefix' => '',\n\n    'domain' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Fortify Routes Middleware\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which middleware Fortify will assign to the routes\n    | that it registers with the application. If necessary, you may change\n    | these middleware but typically this provided default is preferred.\n    |\n    */\n\n    'middleware' => ['web'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Rate Limiting\n    |--------------------------------------------------------------------------\n    |\n    | By default, Fortify will throttle logins to five requests per minute for\n    | every email and IP address combination. However, if you would like to\n    | specify a custom rate limiter to call then you may specify it here.\n    |\n    */\n\n    'limiters' => [\n        'login' => 'login',\n        'two-factor' => 'two-factor',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Register View Routes\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify if the routes returning views should be disabled as\n    | you may not need them when building your own application. This may be\n    | especially true if you're writing a custom single-page application.\n    |\n    */\n\n    'views' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Features\n    |--------------------------------------------------------------------------\n    |\n    | Some of the Fortify features are optional. You may disable the features\n    | by removing them from this array. You're free to only remove some of\n    | these features or you can even remove all of these if you need to.\n    |\n    */\n\n    'features' => [\n        Features::registration(),\n        Features::resetPasswords(),\n        Features::emailVerification(),\n        Features::updateProfileInformation(),\n        Features::updatePasswords(),\n        Features::twoFactorAuthentication([\n            'confirm' => true,\n            'confirmPassword' => true,\n            // 'window' => 0,\n        ]),\n    ],\n\n];\n"
  },
  {
    "path": "config/health.php",
    "content": "<?php\n\ndeclare(strict_types=1);\nuse Spatie\\Health\\ResultStores\\InMemoryHealthResultStore;\n\nreturn [\n    /*\n     * A result store is responsible for saving the results of the checks. The\n     * `EloquentHealthResultStore` will save results in the database. You\n     * can use multiple stores at the same time.\n     */\n    'result_stores' => [\n        InMemoryHealthResultStore::class,\n    ],\n\n    /*\n     * You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.\n     * For Slack you need to install laravel/slack-notification-channel.\n     */\n    'notifications' => [\n        'enabled' => false,\n    ],\n\n    /*\n     * You can let Oh Dear monitor the results of all health checks. This way, you'll\n     * get notified of any problems even if your application goes totally down. Via\n     * Oh Dear, you can also have access to more advanced notification options.\n     */\n    'oh_dear_endpoint' => [\n        'enabled' => filled(env('OH_DEAR_HEALTH_CHECK_SECRET')),\n        'always_send_fresh_results' => true,\n        'secret' => env('OH_DEAR_HEALTH_CHECK_SECRET', ''),\n        'url' => '/oh-dear-health-check-results',\n    ],\n\n    /*\n     * When enabled, completed `HealthQueueJob`s will be displayed\n     * in Horizon's silenced jobs screen.\n     */\n    'silence_health_queue_job' => true,\n\n    /*\n     * The response code to use for HealthCheckJsonResultsController when a health\n     * check has failed\n     */\n    'json_results_failure_status' => 200,\n];\n"
  },
  {
    "path": "config/horizon-watcher.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    /*\n     * Horizon will be restarted when any PHP file inside these directories\n     * get created, updated or deleted. You can also specify other kinds\n     * of files here.\n     */\n    'paths' => [\n        app_path(),\n        config_path(),\n        database_path(),\n        resource_path('views'),\n        base_path('.env'),\n        base_path('composer.lock'),\n        base_path('packages'),\n    ],\n\n    /*\n     * This command will be executed to start Horizon.\n     */\n    'command' => 'php artisan horizon',\n];\n"
  },
  {
    "path": "config/horizon.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Horizon Domain\n    |--------------------------------------------------------------------------\n    |\n    | This is the subdomain where Horizon will be accessible from. If this\n    | setting is null, Horizon will reside under the same domain as the\n    | application. Otherwise, this value will serve as the subdomain.\n    |\n    */\n\n    'domain' => env('HORIZON_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Horizon Path\n    |--------------------------------------------------------------------------\n    |\n    | This is the URI path where Horizon will be accessible from. Feel free\n    | to change this path to anything you like. Note that the URI will not\n    | affect the paths of its internal API that aren't exposed to users.\n    |\n    */\n\n    'path' => env('HORIZON_PATH', 'horizon'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Horizon Redis Connection\n    |--------------------------------------------------------------------------\n    |\n    | This is the name of the Redis connection where Horizon will store the\n    | meta information required for it to function. It includes the list\n    | of supervisors, failed jobs, job metrics, and other information.\n    |\n    */\n\n    'use' => 'default',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Horizon Redis Prefix\n    |--------------------------------------------------------------------------\n    |\n    | This prefix will be used when storing all Horizon data in Redis. You\n    | may modify the prefix when you are running multiple installations\n    | of Horizon on the same server so that they don't have problems.\n    |\n    */\n\n    'prefix' => env(\n        'HORIZON_PREFIX',\n        Str::slug((string) env('APP_NAME', 'laravel'), '_').'_horizon:'\n    ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Horizon Route Middleware\n    |--------------------------------------------------------------------------\n    |\n    | These middleware will get attached onto each Horizon route, giving you\n    | the chance to add your own middleware to this list or change any of\n    | the existing middleware. Or, you can simply stick with this list.\n    |\n    */\n\n    'middleware' => ['web'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Wait Time Thresholds\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to configure when the LongWaitDetected event\n    | will be fired. Every connection / queue combination may have its\n    | own, unique threshold (in seconds) before this event is fired.\n    |\n    */\n\n    'waits' => [\n        'redis:default' => 60,\n        'redis:imports' => 120,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Job Trimming Times\n    |--------------------------------------------------------------------------\n    |\n    | Here you can configure for how long (in minutes) you desire Horizon to\n    | persist the recent and failed jobs. Typically, recent jobs are kept\n    | for one hour while all failed jobs are stored for an entire week.\n    |\n    */\n\n    'trim' => [\n        'recent' => 60,\n        'pending' => 60,\n        'completed' => 60,\n        'recent_failed' => 10080,\n        'failed' => 10080,\n        'monitored' => 10080,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Silenced Jobs\n    |--------------------------------------------------------------------------\n    |\n    | Silencing a job will instruct Horizon to not place the job in the list\n    | of completed jobs within the Horizon dashboard. This setting may be\n    | used to fully remove any noisy jobs from the completed jobs list.\n    |\n    */\n\n    'silenced' => [\n        // App\\Jobs\\ExampleJob::class,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Metrics\n    |--------------------------------------------------------------------------\n    |\n    | Here you can configure how many snapshots should be kept to display in\n    | the metrics graph. This will get used in combination with Horizon's\n    | `horizon:snapshot` schedule to define how long to retain metrics.\n    |\n    */\n\n    'metrics' => [\n        'trim_snapshots' => [\n            'job' => 24,\n            'queue' => 24,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Fast Termination\n    |--------------------------------------------------------------------------\n    |\n    | When this option is enabled, Horizon's \"terminate\" command will not\n    | wait on all of the workers to terminate unless the --wait option\n    | is provided. Fast termination can shorten deployment delay by\n    | allowing a new instance of Horizon to start while the last\n    | instance will continue to terminate each of its workers.\n    |\n    */\n\n    'fast_termination' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Memory Limit (MB)\n    |--------------------------------------------------------------------------\n    |\n    | This value describes the maximum amount of memory the Horizon master\n    | supervisor may consume before it is terminated and restarted. For\n    | configuring these limits on your workers, see the next section.\n    |\n    */\n\n    'memory_limit' => 64,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Worker Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define the queue worker settings used by your application\n    | in all environments. These supervisors and settings handle all your\n    | queued jobs and will be provisioned by Horizon during deployment.\n    |\n    */\n\n    'defaults' => [\n        'supervisor-1' => [\n            'connection' => 'redis',\n            'queue' => ['default'],\n            'balance' => 'auto',\n            'autoScalingStrategy' => 'time',\n            'maxProcesses' => 1,\n            'maxTime' => 0,\n            'maxJobs' => 0,\n            'memory' => 128,\n            'tries' => 1,\n            'timeout' => 60,\n            'nice' => 0,\n        ],\n        'supervisor-2' => [\n            'connection' => 'redis',\n            'queue' => ['default'],\n            'balance' => 'auto',\n            'autoScalingStrategy' => 'time',\n            'maxProcesses' => 1,\n            'maxTime' => 0,\n            'maxJobs' => 0,\n            'memory' => 128,\n            'tries' => 1,\n            'timeout' => 60,\n            'nice' => 0,\n        ],\n        'supervisor-3' => [\n            'connection' => 'redis',\n            'queue' => ['default'],\n            'balance' => 'auto',\n            'autoScalingStrategy' => 'time',\n            'maxProcesses' => 1,\n            'maxTime' => 0,\n            'maxJobs' => 0,\n            'memory' => 128,\n            'tries' => 1,\n            'timeout' => 60,\n            'nice' => 0,\n        ],\n        'supervisor-imports' => [\n            'connection' => 'redis',\n            'queue' => ['imports'],\n            'balance' => 'auto',\n            'autoScalingStrategy' => 'time',\n            'maxProcesses' => 20,\n            'minProcesses' => 5,\n            'maxTime' => 0,\n            'maxJobs' => 0,\n            'memory' => 256,\n            'tries' => 2,\n            'timeout' => 300,\n            'nice' => 0,\n        ],\n    ],\n\n    'environments' => [\n        'production' => [\n            'supervisor-1' => [\n                'connection' => 'redis',\n                'queue' => ['default'],\n                'balance' => 'auto',\n                'maxProcesses' => 10,\n                'minProcesses' => 1,\n                'balanceMaxShift' => 5,\n                'balanceCooldown' => 1,\n                'memory' => 128,\n                'tries' => 1,\n                'nice' => 0,\n            ],\n            'supervisor-2' => [\n                'connection' => 'redis',\n                'queue' => ['default'],\n                'balance' => 'auto',\n                'maxProcesses' => 10,\n                'minProcesses' => 1,\n                'balanceMaxShift' => 5,\n                'balanceCooldown' => 1,\n                'memory' => 128,\n                'tries' => 1,\n                'nice' => 0,\n            ],\n            'supervisor-3' => [\n                'connection' => 'redis',\n                'queue' => ['default'],\n                'balance' => 'auto',\n                'maxProcesses' => 10,\n                'minProcesses' => 1,\n                'balanceMaxShift' => 5,\n                'balanceCooldown' => 1,\n                'memory' => 128,\n                'tries' => 1,\n                'nice' => 0,\n            ],\n            'supervisor-imports' => [\n                'connection' => 'redis',\n                'queue' => ['imports'],\n                'balance' => 'auto',\n                'maxProcesses' => 15,\n                'minProcesses' => 3,\n                'balanceMaxShift' => 5,\n                'balanceCooldown' => 2,\n                'memory' => 256,\n                'tries' => 2,\n                'timeout' => 300,\n                'nice' => 0,\n            ],\n        ],\n\n        'local' => [\n            'supervisor-1' => [\n                'maxProcesses' => 3,\n            ],\n            'supervisor-2' => [\n                'maxProcesses' => 3,\n            ],\n            'supervisor-3' => [\n                'maxProcesses' => 3,\n            ],\n            'supervisor-imports' => [\n                'maxProcesses' => 5,\n            ],\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/jetstream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Laravel\\Jetstream\\Features;\nuse Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Jetstream Stack\n    |--------------------------------------------------------------------------\n    |\n    | This configuration value informs Jetstream which \"stack\" you will be\n    | using for your application. In general, this value is set for you\n    | during installation and will not need to be changed after that.\n    |\n    */\n\n    'stack' => 'livewire',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Jetstream Route Middleware\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which middleware Jetstream will assign to the routes\n    | that it registers with the application. When necessary, you may modify\n    | these middleware; however, this default value is usually sufficient.\n    |\n    */\n\n    'middleware' => ['web'],\n\n    'auth_session' => AuthenticateSession::class,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Jetstream Guard\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the authentication guard Jetstream will use while\n    | authenticating users. This value should correspond with one of your\n    | guards that is already present in your \"auth\" configuration file.\n    |\n    */\n\n    'guard' => 'sanctum',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Features\n    |--------------------------------------------------------------------------\n    |\n    | Some of Jetstream's features are optional. You may disable the features\n    | by removing them from this array. You're free to only remove some of\n    | these features or you can even remove all of these if you need to.\n    |\n    */\n\n    'features' => [\n        Features::termsAndPrivacyPolicy(),\n        Features::profilePhotos(),\n        Features::api(),\n        Features::teams(['invitations' => true]),\n        Features::accountDeletion(),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Profile Photo Disk\n    |--------------------------------------------------------------------------\n    |\n    | This configuration value determines the default disk that will be used\n    | when storing profile photos for your application's users. Typically\n    | this will be the \"public\" disk but you may adjust this if needed.\n    |\n    */\n\n    'profile_photo_disk' => 'public',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Invitation Expiry\n    |--------------------------------------------------------------------------\n    |\n    | This value determines how many days a team invitation link remains valid.\n    | After this period, the invitation is considered expired and the invitee\n    | must request a new invitation from the team owner.\n    |\n    */\n\n    'invitation_expiry_days' => 7,\n\n];\n"
  },
  {
    "path": "config/logging.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\nuse Monolog\\Processor\\PsrLogMessageProcessor;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that is utilized to write\n    | messages to your logs. The value provided here should match one of\n    | the channels present in the list of \"channels\" configured below.\n    |\n    */\n\n    'default' => env('LOG_CHANNEL', 'stack'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Deprecations Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the log channel that should be used to log warnings\n    | regarding deprecated PHP and library features. This allows you to get\n    | your application ready for upcoming major versions of dependencies.\n    |\n    */\n\n    'deprecations' => [\n        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),\n        'trace' => env('LOG_DEPRECATIONS_TRACE', false),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels for your application. Laravel\n    | utilizes the Monolog PHP logging library, which includes a variety\n    | of powerful log handlers and formatters that you're free to use.\n    |\n    | Available drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"monolog\", \"custom\", \"stack\"\n    |\n    */\n\n    'channels' => [\n\n        'stack' => [\n            'driver' => 'stack',\n            'channels' => explode(',', (string) env('LOG_STACK', 'single')),\n            'ignore_exceptions' => false,\n        ],\n\n        'single' => [\n            'driver' => 'single',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => env('LOG_LEVEL', 'debug'),\n            'replace_placeholders' => true,\n        ],\n\n        'daily' => [\n            'driver' => 'daily',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => env('LOG_LEVEL', 'debug'),\n            'days' => env('LOG_DAILY_DAYS', 14),\n            'replace_placeholders' => true,\n        ],\n\n        'slack' => [\n            'driver' => 'slack',\n            'url' => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),\n            'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),\n            'level' => env('LOG_LEVEL', 'critical'),\n            'replace_placeholders' => true,\n        ],\n\n        'papertrail' => [\n            'driver' => 'monolog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),\n            'handler_with' => [\n                'host' => env('PAPERTRAIL_URL'),\n                'port' => env('PAPERTRAIL_PORT'),\n                'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),\n            ],\n            'processors' => [PsrLogMessageProcessor::class],\n        ],\n\n        'stderr' => [\n            'driver' => 'monolog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'handler' => StreamHandler::class,\n            'formatter' => env('LOG_STDERR_FORMATTER'),\n            'with' => [\n                'stream' => 'php://stderr',\n            ],\n            'processors' => [PsrLogMessageProcessor::class],\n        ],\n\n        'syslog' => [\n            'driver' => 'syslog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),\n            'replace_placeholders' => true,\n        ],\n\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'replace_placeholders' => true,\n        ],\n\n        'null' => [\n            'driver' => 'monolog',\n            'handler' => NullHandler::class,\n        ],\n\n        'emergency' => [\n            'path' => storage_path('logs/laravel.log'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/login-link.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Spatie\\LoginLink\\Http\\Controllers\\LoginLinkController;\n\nreturn [\n    /*\n     * Login links will only work in these environments. In all\n     * other environments, an exception will be thrown.\n     */\n    'allowed_environments' => ['local'],\n\n    /*\n     * Login links will only work in these hosts. In all\n     * other hosts, an exception will be thrown.\n     */\n    'allowed_hosts' => array_filter([\n        'localhost',\n        '127.0.0.1',\n        'relaticle.test',\n        'app.relaticle.test',\n        parse_url((string) config('app.url'), PHP_URL_HOST),\n        config('app.app_panel_domain'),\n    ]),\n\n    /*\n     * The package will automatically create a user model when trying\n     * to log in a user that doesn't exist.\n     */\n    'automatically_create_missing_users' => true,\n\n    /*\n     * The user model that should be logged in. If this is set to `null`\n     * we'll take a look at the model used for the `users`\n     * provider in config/auth.php\n     */\n    'user_model' => null,\n\n    /*\n     * After a login link is clicked, we'll redirect the user to this route.\n     * If it is set to `null`, we'll redirect the user to their last intended/requested url.\n     * You can set it to `/`, for making redirect to the root page.\n     */\n    'redirect_route_name' => null,\n\n    /*\n     * The package will register a route that points to this controller. To have fine\n     * grained control over what happens when a login link is clicked, you can\n     * override this class.\n     */\n    'login_link_controller' => LoginLinkController::class,\n\n    /*\n     * This middleware will be applied on the route\n     * that logs in a user via a link.\n     */\n    'middleware' => ['web'],\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Mailer\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default mailer that is used to send all email\n    | messages unless another mailer is explicitly specified when sending\n    | the message. All additional mailers can be configured within the\n    | \"mailers\" array. Examples of each type of mailer are provided.\n    |\n    */\n\n    'default' => env('MAIL_MAILER', 'log'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mailer Configurations\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure all of the mailers used by your application plus\n    | their respective settings. Several examples have been configured for\n    | you and you are free to add your own as your application requires.\n    |\n    | Laravel supports a variety of mail \"transport\" drivers that can be used\n    | when delivering an email. You may specify which one you're using for\n    | your mailers below. You may also add additional mailers if needed.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"ses\", \"ses-v2\",\n    |            \"postmark\", \"resend\", \"log\", \"array\",\n    |            \"failover\", \"roundrobin\"\n    |\n    */\n\n    'mailers' => [\n\n        'smtp' => [\n            'transport' => 'smtp',\n            'url' => env('MAIL_URL'),\n            'host' => env('MAIL_HOST', '127.0.0.1'),\n            'port' => env('MAIL_PORT', 2525),\n            'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n            'username' => env('MAIL_USERNAME'),\n            'password' => env('MAIL_PASSWORD'),\n            'timeout' => null,\n            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),\n        ],\n\n        'ses' => [\n            'transport' => 'ses',\n        ],\n\n        'postmark' => [\n            'transport' => 'postmark',\n            // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),\n            // 'client' => [\n            //     'timeout' => 5,\n            // ],\n        ],\n\n        'resend' => [\n            'transport' => 'resend',\n        ],\n\n        'sendmail' => [\n            'transport' => 'sendmail',\n            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),\n        ],\n\n        'log' => [\n            'transport' => 'log',\n            'channel' => env('MAIL_LOG_CHANNEL'),\n        ],\n\n        'array' => [\n            'transport' => 'array',\n        ],\n\n        'failover' => [\n            'transport' => 'failover',\n            'mailers' => [\n                'smtp',\n                'log',\n            ],\n        ],\n\n        'roundrobin' => [\n            'transport' => 'roundrobin',\n            'mailers' => [\n                'ses',\n                'postmark',\n            ],\n        ],\n\n        'mailcoach' => [\n            'transport' => 'mailcoach',\n            'domain' => env('MAILCOACH_DOMAIN'),\n            'token' => env('MAILCOACH_API_TOKEN'),\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all emails sent by your application to be sent from\n    | the same address. Here you may specify a name and address that is\n    | used globally for all emails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),\n        'name' => env('MAIL_FROM_NAME', 'Example'),\n    ],\n\n];\n"
  },
  {
    "path": "config/mailcoach-sdk.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    /*\n     *  You'll find both the API token and endpoint on Mailcoach'\n     *  API tokens screen in the Mailcoach settings.\n     */\n    'api_token' => env('MAILCOACH_API_TOKEN'),\n\n    'endpoint' => env('MAILCOACH_API_ENDPOINT'),\n\n    'enabled_subscribers_sync' => env('MAILCOACH_ENABLED_SUBSCRIBERS_SYNC', false),\n\n    'subscribers_list_id' => env('MAILCOACH_SUBSCRIBERS_LIST_ID'),\n];\n"
  },
  {
    "path": "config/markdown-response.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Spatie\\MarkdownResponse\\Actions\\DetectsMarkdownRequest;\nuse Spatie\\MarkdownResponse\\Actions\\GeneratesCacheKey;\nuse Spatie\\MarkdownResponse\\Postprocessors\\CollapseBlankLinesPostprocessor;\nuse Spatie\\MarkdownResponse\\Postprocessors\\RemoveHtmlTagsPostprocessor;\nuse Spatie\\MarkdownResponse\\Preprocessors\\RemoveScriptsAndStylesPreprocessor;\n\nreturn [\n\n    /*\n     * When disabled, the middleware will not convert any responses to markdown.\n     */\n    'enabled' => env('MARKDOWN_RESPONSE_ENABLED', true),\n\n    /*\n     * The driver used to convert HTML to markdown.\n     * Supported: \"league\", \"cloudflare\"\n     */\n    'driver' => env('MARKDOWN_RESPONSE_DRIVER', 'league'),\n\n    'detection' => [\n\n        /*\n         * The class responsible for detecting whether a request wants\n         * a markdown response. You can extend the default class to\n         * customize the detection logic.\n         */\n        'detector' => DetectsMarkdownRequest::class,\n\n        /*\n         * When enabled, requests with an `Accept: text/markdown` header\n         * will receive a markdown response.\n         */\n        'detect_via_accept_header' => true,\n\n        /*\n         * When enabled, URLs ending in `.md` (e.g. `/about.md`) will\n         * receive a markdown response. The `.md` suffix is stripped\n         * before routing, so `/about.md` resolves to `/about`.\n         */\n        'detect_via_md_suffix' => true,\n\n        /*\n         * Requests from user agents containing any of these strings\n         * will automatically receive a markdown response. Matching\n         * is case-insensitive.\n         */\n        'detect_via_user_agents' => [\n            'GPTBot',\n            'ClaudeBot',\n            'Claude-Web',\n            'Anthropic',\n            'ChatGPT-User',\n            'PerplexityBot',\n            'Bytespider',\n            'Google-Extended',\n        ],\n    ],\n\n    /*\n     * Preprocessors are run on the HTML before it is converted to\n     * markdown. Each class must implement the Preprocessor interface.\n     */\n    'preprocessors' => [\n        RemoveScriptsAndStylesPreprocessor::class,\n    ],\n\n    /*\n     * Postprocessors are run on the markdown after conversion.\n     * Each class must implement the Postprocessor interface.\n     */\n    'postprocessors' => [\n        RemoveHtmlTagsPostprocessor::class,\n        CollapseBlankLinesPostprocessor::class,\n    ],\n\n    'cache' => [\n\n        /*\n         * When enabled, converted markdown responses will be cached\n         * so subsequent requests skip the conversion entirely.\n         */\n        'enabled' => env('MARKDOWN_RESPONSE_CACHE_ENABLED', true),\n\n        /*\n         * The cache store to use. Set to null to use the default store.\n         */\n        'store' => env('MARKDOWN_RESPONSE_CACHE_STORE'),\n\n        /*\n         * How long converted markdown should be cached, in seconds.\n         */\n        'ttl' => (int) env('MARKDOWN_RESPONSE_CACHE_TTL', 3600),\n\n        /*\n         * The class responsible for generating cache keys from requests.\n         * You can extend the default class to customize the key generation.\n         */\n        'key_generator' => GeneratesCacheKey::class,\n\n        /*\n         * These query parameters will be stripped when generating cache\n         * keys, so the same page with different tracking parameters\n         * shares a single cache entry.\n         */\n        'ignored_query_parameters' => [\n            'utm_source',\n            'utm_medium',\n            'utm_campaign',\n            'utm_term',\n            'utm_content',\n            'gclid',\n            'fbclid',\n        ],\n    ],\n\n    /*\n     * These signals are sent as a `Content-Signal` response header to\n     * inform AI agents what they are allowed to do with your content.\n     * Set to an empty array to disable the header entirely.\n     *\n     * See: https://contentstandards.org\n     */\n    'content_signals' => [\n        'ai-train' => 'disallow',\n        'ai-input' => 'allow',\n        'search' => 'allow',\n    ],\n\n    'driver_options' => [\n\n        /*\n         * The league driver uses league/html-to-markdown.\n         * Options are passed directly to the HtmlConverter constructor.\n         * See: https://github.com/thephpleague/html-to-markdown#options\n         */\n        'league' => [\n            'options' => [\n                'strip_tags' => true,\n                'hard_break' => true,\n            ],\n        ],\n\n        /*\n         * The Cloudflare driver uses the Workers AI API to convert\n         * HTML to markdown. Requires an account ID and API token.\n         */\n        'cloudflare' => [\n            'account_id' => env('CLOUDFLARE_ACCOUNT_ID'),\n            'api_token' => env('CLOUDFLARE_API_TOKEN'),\n        ],\n\n    ],\n];\n"
  },
  {
    "path": "config/markdown.php",
    "content": "<?php\n\ndeclare(strict_types=1);\nuse League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkExtension;\nuse League\\CommonMark\\Extension\\Table\\TableExtension;\nuse Spatie\\LaravelMarkdown\\MarkdownRenderer;\n\nreturn [\n    'code_highlighting' => [\n        /*\n         * To highlight code, we'll use Shiki under the hood. Make sure it's installed.\n         *\n         * More info: https://spatie.be/docs/laravel-markdown/v1/installation-setup\n         */\n        'enabled' => true,\n\n        /*\n         * The name of or path to a Shiki theme\n         *\n         * More info: https://github.com/shikijs/shiki/blob/main/docs/themes.md\n         */\n        'theme' => 'github-dark',\n    ],\n\n    /*\n     * When enabled, anchor links will be added to all titles\n     */\n    'add_anchors_to_headings' => true,\n\n    /**\n     * When enabled, anchors will be rendered as links.\n     */\n    'render_anchors_as_links' => false,\n\n    /*\n     * These options will be passed to the league/commonmark package which is\n     * used under the hood to render markdown.\n     *\n     * More info: https://spatie.be/docs/laravel-markdown/v1/using-the-blade-component/passing-options-to-commonmark\n     */\n    'commonmark_options' => [\n        'heading_permalink' => [\n            'html_class' => 'heading-permalink',\n            'id_prefix' => '',\n            'fragment_prefix' => '',\n            'insert' => 'before',\n            'min_heading_level' => 1,\n            'max_heading_level' => 6,\n            'title' => 'Permalink',\n            'symbol' => '#',\n            'aria_hidden' => false,\n        ],\n    ],\n\n    /*\n     * Rendering markdown to HTML can be resource intensive. By default\n     * we'll cache the results.\n     *\n     * You can specify the name of a cache store here. When set to `null`\n     * the default cache store will be used. If you do not want to use\n     * caching set this value to `false`.\n     */\n    'cache_store' => null,\n\n    /*\n     * When cache_store is enabled, this value will be used to determine\n     * how long the cache will be valid. If you set this to `null` the\n     * cache will never expire.\n     *\n     */\n    'cache_duration' => null,\n\n    /*\n     * This class will convert markdown to HTML\n     *\n     * You can change this to a class of your own to greatly\n     * customize the rendering process\n     *\n     * More info: https://spatie.be/docs/laravel-markdown/v1/advanced-usage/customizing-the-rendering-process\n     */\n    'renderer_class' => MarkdownRenderer::class,\n\n    /*\n     * These extensions should be added to the markdown environment. A valid\n     * extension implements League\\CommonMark\\Extension\\ExtensionInterface\n     *\n     * More info: https://commonmark.thephpleague.com/2.4/extensions/overview/\n     */\n    'extensions' => [\n        HeadingPermalinkExtension::class,\n        TableExtension::class,\n    ],\n\n    /*\n     * These block renderers should be added to the markdown environment. A valid\n     * renderer implements League\\CommonMark\\Renderer\\NodeRendererInterface;\n     *\n     * More info: https://commonmark.thephpleague.com/2.4/customization/rendering/\n     */\n    'block_renderers' => [\n        // ['class' => FencedCode::class, 'renderer' => MyCustomCodeRenderer::class, 'priority' => 0]\n    ],\n\n    /*\n     * These inline renderers should be added to the markdown environment. A valid\n     * renderer implements League\\CommonMark\\Renderer\\NodeRendererInterface;\n     *\n     * More info: https://commonmark.thephpleague.com/2.4/customization/rendering/\n     */\n    'inline_renderers' => [\n        // ['class' => FencedCode::class, 'renderer' => MyCustomCodeRenderer::class, 'priority' => 0]\n    ],\n\n    /*\n     * These inline parsers should be added to the markdown environment. A valid\n     * parser implements League\\CommonMark\\Renderer\\InlineParserInterface;\n     *\n     * More info: https://commonmark.thephpleague.com/2.4/customization/inline-parsing/\n     */\n    'inline_parsers' => [\n        // ['parser' => MyCustomInlineParser::class, 'priority' => 0]\n    ],\n];\n"
  },
  {
    "path": "config/media-library.php",
    "content": "<?php\n\ndeclare(strict_types=1);\nuse Spatie\\ImageOptimizer\\Optimizers\\Avifenc;\nuse Spatie\\ImageOptimizer\\Optimizers\\Cwebp;\nuse Spatie\\ImageOptimizer\\Optimizers\\Gifsicle;\nuse Spatie\\ImageOptimizer\\Optimizers\\Jpegoptim;\nuse Spatie\\ImageOptimizer\\Optimizers\\Optipng;\nuse Spatie\\ImageOptimizer\\Optimizers\\Pngquant;\nuse Spatie\\ImageOptimizer\\Optimizers\\Svgo;\nuse Spatie\\MediaLibrary\\Conversions\\ImageGenerators\\Avif;\nuse Spatie\\MediaLibrary\\Conversions\\ImageGenerators\\Image;\nuse Spatie\\MediaLibrary\\Conversions\\ImageGenerators\\Pdf;\nuse Spatie\\MediaLibrary\\Conversions\\ImageGenerators\\Svg;\nuse Spatie\\MediaLibrary\\Conversions\\ImageGenerators\\Video;\nuse Spatie\\MediaLibrary\\Conversions\\ImageGenerators\\Webp;\nuse Spatie\\MediaLibrary\\Conversions\\Jobs\\PerformConversionsJob;\nuse Spatie\\MediaLibrary\\Downloaders\\DefaultDownloader;\nuse Spatie\\MediaLibrary\\MediaCollections\\Models\\Media;\nuse Spatie\\MediaLibrary\\MediaCollections\\Models\\Observers\\MediaObserver;\nuse Spatie\\MediaLibrary\\ResponsiveImages\\Jobs\\GenerateResponsiveImagesJob;\nuse Spatie\\MediaLibrary\\ResponsiveImages\\TinyPlaceholderGenerator\\Blurred;\nuse Spatie\\MediaLibrary\\ResponsiveImages\\WidthCalculator\\FileSizeOptimizedWidthCalculator;\nuse Spatie\\MediaLibrary\\Support\\FileNamer\\DefaultFileNamer;\nuse Spatie\\MediaLibrary\\Support\\FileRemover\\DefaultFileRemover;\nuse Spatie\\MediaLibrary\\Support\\PathGenerator\\DefaultPathGenerator;\nuse Spatie\\MediaLibrary\\Support\\UrlGenerator\\DefaultUrlGenerator;\nuse Spatie\\MediaLibraryPro\\Models\\TemporaryUpload;\n\nreturn [\n\n    /*\n     * The disk on which to store added files and derived images by default. Choose\n     * one or more of the disks you've configured in config/filesystems.php.\n     */\n    'disk_name' => env('MEDIA_DISK', 'public'),\n\n    /*\n     * The maximum file size of an item in bytes.\n     * Adding a larger file will result in an exception.\n     */\n    'max_file_size' => 1024 * 1024 * 10, // 10MB\n\n    /*\n     * This queue connection will be used to generate derived and responsive images.\n     * Leave empty to use the default queue connection.\n     */\n    'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),\n\n    /*\n     * This queue will be used to generate derived and responsive images.\n     * Leave empty to use the default queue.\n     */\n    'queue_name' => env('MEDIA_QUEUE', ''),\n\n    /*\n     * By default all conversions will be performed on a queue.\n     */\n    'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),\n\n    /*\n     * Should database transactions be run after database commits?\n     */\n    'queue_conversions_after_database_commit' => env('QUEUE_CONVERSIONS_AFTER_DB_COMMIT', true),\n\n    /*\n     * The fully qualified class name of the media model.\n     */\n    'media_model' => Media::class,\n\n    /*\n     * The fully qualified class name of the media observer.\n     */\n    'media_observer' => MediaObserver::class,\n\n    /*\n     * When enabled, media collections will be serialised using the default\n     * laravel model serialization behaviour.\n     *\n     * Keep this option disabled if using Media Library Pro components (https://medialibrary.pro)\n     */\n    'use_default_collection_serialization' => false,\n\n    /*\n     * The fully qualified class name of the model used for temporary uploads.\n     *\n     * This model is only used in Media Library Pro (https://medialibrary.pro)\n     */\n    'temporary_upload_model' => TemporaryUpload::class, /** @phpstan-ignore class.notFound */\n\n    /*\n     * When enabled, Media Library Pro will only process temporary uploads that were uploaded\n     * in the same session. You can opt to disable this for stateless usage of\n     * the pro components.\n     */\n    'enable_temporary_uploads_session_affinity' => true,\n\n    /*\n     * When enabled, Media Library pro will generate thumbnails for uploaded file.\n     */\n    'generate_thumbnails_for_temporary_uploads' => true,\n\n    /*\n     * This is the class that is responsible for naming generated files.\n     */\n    'file_namer' => DefaultFileNamer::class,\n\n    /*\n     * The class that contains the strategy for determining a media file's path.\n     */\n    'path_generator' => DefaultPathGenerator::class,\n\n    /*\n     * The class that contains the strategy for determining how to remove files.\n     */\n    'file_remover_class' => DefaultFileRemover::class,\n\n    /*\n     * Here you can specify which path generator should be used for the given class.\n     */\n    'custom_path_generators' => [\n        // Model::class => PathGenerator::class\n        // or\n        // 'model_morph_alias' => PathGenerator::class\n    ],\n\n    /*\n     * When urls to files get generated, this class will be called. Use the default\n     * if your files are stored locally above the site root or on s3.\n     */\n    'url_generator' => DefaultUrlGenerator::class,\n\n    /*\n     * Moves media on updating to keep path consistent. Enable it only with a custom\n     * PathGenerator that uses, for example, the media UUID.\n     */\n    'moves_media_on_update' => false,\n\n    /*\n     * Whether to activate versioning when urls to files get generated.\n     * When activated, this attaches a ?v=xx query string to the URL.\n     */\n    'version_urls' => false,\n\n    /*\n     * The media library will try to optimize all converted images by removing\n     * metadata and applying a little bit of compression. These are\n     * the optimizers that will be used by default.\n     */\n    'image_optimizers' => [\n        Jpegoptim::class => [\n            '-m85', // set maximum quality to 85%\n            '--force', // ensure that progressive generation is always done also if a little bigger\n            '--strip-all', // this strips out all text information such as comments and EXIF data\n            '--all-progressive', // this will make sure the resulting image is a progressive one\n        ],\n        Pngquant::class => [\n            '--force', // required parameter for this package\n        ],\n        Optipng::class => [\n            '-i0', // this will result in a non-interlaced, progressive scanned image\n            '-o2', // this set the optimization level to two (multiple IDAT compression trials)\n            '-quiet', // required parameter for this package\n        ],\n        Svgo::class => [\n            '--disable=cleanupIDs', // disabling because it is known to cause troubles\n        ],\n        Gifsicle::class => [\n            '-b', // required parameter for this package\n            '-O3', // this produces the slowest but best results\n        ],\n        Cwebp::class => [\n            '-m 6', // for the slowest compression method in order to get the best compression.\n            '-pass 10', // for maximizing the amount of analysis pass.\n            '-mt', // multithreading for some speed improvements.\n            '-q 90', // quality factor that brings the least noticeable changes.\n        ],\n        Avifenc::class => [\n            '-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).\n            '-j all', // number of jobs (worker threads, \"all\" uses all available cores).\n            '--min 0', // min quantizer for color (0-63).\n            '--max 63', // max quantizer for color (0-63).\n            '--minalpha 0', // min quantizer for alpha (0-63).\n            '--maxalpha 63', // max quantizer for alpha (0-63).\n            '-a end-usage=q', // rate control mode set to Constant Quality mode.\n            '-a tune=ssim', // SSIM as tune the encoder for distortion metric.\n        ],\n    ],\n\n    /*\n     * These generators will be used to create an image of media files.\n     */\n    'image_generators' => [\n        Image::class,\n        Webp::class,\n        Avif::class,\n        Pdf::class,\n        Svg::class,\n        Video::class,\n    ],\n\n    /*\n     * The path where to store temporary files while performing image conversions.\n     * If set to null, storage_path('media-library/temp') will be used.\n     */\n    'temporary_directory_path' => null,\n\n    /*\n     * The engine that should perform the image conversions.\n     * Should be either `gd` or `imagick`.\n     */\n    'image_driver' => env('IMAGE_DRIVER', 'gd'),\n\n    /*\n     * FFMPEG & FFProbe binaries paths, only used if you try to generate video\n     * thumbnails and have installed the php-ffmpeg/php-ffmpeg composer\n     * dependency.\n     */\n    'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),\n    'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),\n\n    /*\n     * Here you can override the class names of the jobs used by this package. Make sure\n     * your custom jobs extend the ones provided by the package.\n     */\n    'jobs' => [\n        'perform_conversions' => PerformConversionsJob::class,\n        'generate_responsive_images' => GenerateResponsiveImagesJob::class,\n    ],\n\n    /*\n     * When using the addMediaFromUrl method you may want to replace the default downloader.\n     * This is particularly useful when the url of the image is behind a firewall and\n     * need to add additional flags, possibly using curl.\n     */\n    'media_downloader' => DefaultDownloader::class,\n\n    /*\n     * When using the addMediaFromUrl method the SSL is verified by default.\n     * This is option disables SSL verification when downloading remote media.\n     * Please note that this is a security risk and should only be false in a local environment.\n     */\n    'media_downloader_ssl' => env('MEDIA_DOWNLOADER_SSL', true),\n\n    'remote' => [\n        /*\n         * Any extra headers that should be included when uploading media to\n         * a remote disk. Even though supported headers may vary between\n         * different drivers, a sensible default has been provided.\n         *\n         * Supported by S3: CacheControl, Expires, StorageClass,\n         * ServerSideEncryption, Metadata, ACL, ContentEncoding\n         */\n        'extra_headers' => [\n            'CacheControl' => 'max-age=604800',\n        ],\n    ],\n\n    'responsive_images' => [\n        /*\n         * This class is responsible for calculating the target widths of the responsive\n         * images. By default we optimize for filesize and create variations that each are 30%\n         * smaller than the previous one. More info in the documentation.\n         *\n         * https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images\n         */\n        'width_calculator' => FileSizeOptimizedWidthCalculator::class,\n\n        /*\n         * By default rendering media to a responsive image will add some javascript and a tiny placeholder.\n         * This ensures that the browser can already determine the correct layout.\n         * When disabled, no tiny placeholder is generated.\n         */\n        'use_tiny_placeholders' => true,\n\n        /*\n         * This class will generate the tiny placeholder used for progressive image loading. By default\n         * the media library will use a tiny blurred jpg image.\n         */\n        'tiny_placeholder_generator' => Blurred::class,\n    ],\n\n    /*\n     * When enabling this option, a route will be registered that will enable\n     * the Media Library Pro Vue and React components to move uploaded files\n     * in a S3 bucket to their right place.\n     */\n    'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),\n\n    /*\n     * When converting Media instances to response the media library will add\n     * a `loading` attribute to the `img` tag. Here you can set the default\n     * value of that attribute.\n     *\n     * Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.\n     *\n     * More info: https://css-tricks.com/native-lazy-loading/\n     */\n    'default_loading_attribute_value' => null,\n\n    /*\n     * You can specify a prefix for that is used for storing all media.\n     * If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.\n     */\n    'prefix' => env('MEDIA_PREFIX', ''),\n\n    /*\n     * When forcing lazy loading, media will be loaded even if you don't eager load media and you have\n     * disabled lazy loading globally in the service provider.\n     */\n    'force_lazy_loading' => env('FORCE_MEDIA_LIBRARY_LAZY_LOADING', true),\n];\n"
  },
  {
    "path": "config/prism.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    'prism_server' => [\n        // The middleware that will be applied to the Prism Server routes.\n        'middleware' => [],\n        'enabled' => env('PRISM_SERVER_ENABLED', false),\n    ],\n    'providers' => [\n        'openai' => [\n            'url' => env('OPENAI_URL', 'https://api.openai.com/v1'),\n            'api_key' => env('OPENAI_API_KEY', ''),\n            'organization' => env('OPENAI_ORGANIZATION'),\n            'project' => env('OPENAI_PROJECT'),\n        ],\n        'anthropic' => [\n            'api_key' => env('ANTHROPIC_API_KEY', ''),\n            'version' => env('ANTHROPIC_API_VERSION', '2023-06-01'),\n            'url' => env('ANTHROPIC_URL', 'https://api.anthropic.com/v1'),\n            'default_thinking_budget' => env('ANTHROPIC_DEFAULT_THINKING_BUDGET', 1024),\n            // Include beta strings as a comma separated list.\n            'anthropic_beta' => env('ANTHROPIC_BETA'),\n        ],\n        'ollama' => [\n            'url' => env('OLLAMA_URL', 'http://localhost:11434'),\n        ],\n        'mistral' => [\n            'api_key' => env('MISTRAL_API_KEY', ''),\n            'url' => env('MISTRAL_URL', 'https://api.mistral.ai/v1'),\n        ],\n        'groq' => [\n            'api_key' => env('GROQ_API_KEY', ''),\n            'url' => env('GROQ_URL', 'https://api.groq.com/openai/v1'),\n        ],\n        'xai' => [\n            'api_key' => env('XAI_API_KEY', ''),\n            'url' => env('XAI_URL', 'https://api.x.ai/v1'),\n        ],\n        'gemini' => [\n            'api_key' => env('GEMINI_API_KEY', ''),\n            'url' => env('GEMINI_URL', 'https://generativelanguage.googleapis.com/v1beta/models'),\n        ],\n        'deepseek' => [\n            'api_key' => env('DEEPSEEK_API_KEY', ''),\n            'url' => env('DEEPSEEK_URL', 'https://api.deepseek.com/v1'),\n        ],\n        'elevenlabs' => [\n            'api_key' => env('ELEVENLABS_API_KEY', ''),\n            'url' => env('ELEVENLABS_URL', 'https://api.elevenlabs.io/v1/'),\n        ],\n        'voyageai' => [\n            'api_key' => env('VOYAGEAI_API_KEY', ''),\n            'url' => env('VOYAGEAI_URL', 'https://api.voyageai.com/v1'),\n        ],\n        'openrouter' => [\n            'api_key' => env('OPENROUTER_API_KEY', ''),\n            'url' => env('OPENROUTER_URL', 'https://openrouter.ai/api/v1'),\n            'site' => [\n                'http_referer' => env('OPENROUTER_SITE_HTTP_REFERER'),\n                'x_title' => env('OPENROUTER_SITE_X_TITLE'),\n            ],\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue supports a variety of backends via a single, unified\n    | API, giving you convenient access to each backend using identical\n    | syntax for each. The default queue connection is defined below.\n    |\n    */\n\n    'default' => env('QUEUE_CONNECTION', 'database'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection options for every queue backend\n    | used by your application. An example configuration is provided for\n    | each backend supported by Laravel. You're also free to add more.\n    |\n    | Drivers: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'connection' => env('DB_QUEUE_CONNECTION'),\n            'table' => env('DB_QUEUE_TABLE', 'jobs'),\n            'queue' => env('DB_QUEUE', 'default'),\n            'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),\n            'after_commit' => false,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),\n            'queue' => env('BEANSTALKD_QUEUE', 'default'),\n            'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),\n            'block_for' => 0,\n            'after_commit' => false,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),\n            'queue' => env('SQS_QUEUE', 'default'),\n            'suffix' => env('SQS_SUFFIX'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'after_commit' => false,\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),\n            'queue' => env('REDIS_QUEUE', 'default'),\n            'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),\n            'block_for' => null,\n            'after_commit' => false,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Job Batching\n    |--------------------------------------------------------------------------\n    |\n    | The following options configure the database and table that store job\n    | batching information. These options can be updated to any database\n    | connection and table which has been defined by your application.\n    |\n    */\n\n    'batching' => [\n        'database' => env('DB_CONNECTION', 'sqlite'),\n        'table' => 'job_batches',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control how and where failed jobs are stored. Laravel ships with\n    | support for storing failed jobs in a simple file or in a database.\n    |\n    | Supported drivers: \"database-uuids\", \"dynamodb\", \"file\", \"null\"\n    |\n    */\n\n    'failed' => [\n        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),\n        'database' => env('DB_CONNECTION', 'sqlite'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/relaticle.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    'contact' => [\n        'email' => env('CONTACT_EMAIL', 'hello@relaticle.com'),\n    ],\n\n];\n"
  },
  {
    "path": "config/sanctum.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies;\nuse Illuminate\\Foundation\\Http\\Middleware\\ValidateCsrfToken;\nuse Laravel\\Sanctum\\Http\\Middleware\\AuthenticateSession;\nuse Laravel\\Sanctum\\Sanctum;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Stateful Domains\n    |--------------------------------------------------------------------------\n    |\n    | Requests from the following domains / hosts will receive stateful API\n    | authentication cookies. Typically, these should include your local\n    | and production domains which access your API via a frontend SPA.\n    |\n    */\n\n    'stateful' => explode(',', (string) env('SANCTUM_STATEFUL_DOMAINS', sprintf(\n        '%s%s',\n        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',\n        Sanctum::currentApplicationUrlWithPort()\n    ))),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sanctum Guards\n    |--------------------------------------------------------------------------\n    |\n    | This array contains the authentication guards that will be checked when\n    | Sanctum is trying to authenticate a request. If none of these guards\n    | are able to authenticate the request, Sanctum will use the bearer\n    | token that's present on an incoming request for authentication.\n    |\n    */\n\n    'guard' => ['web'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Expiration Minutes\n    |--------------------------------------------------------------------------\n    |\n    | This value controls the number of minutes until an issued token will be\n    | considered expired. This will override any values set in the token's\n    | \"expires_at\" attribute, but first-party sessions are not affected.\n    |\n    */\n\n    'expiration' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Token Prefix\n    |--------------------------------------------------------------------------\n    |\n    | Sanctum can prefix new tokens in order to take advantage of numerous\n    | security scanning initiatives maintained by open source platforms\n    | that notify developers if they commit tokens into repositories.\n    |\n    | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning\n    |\n    */\n\n    'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sanctum Middleware\n    |--------------------------------------------------------------------------\n    |\n    | When authenticating your first-party SPA with Sanctum you may need to\n    | customize some of the middleware Sanctum uses while processing the\n    | request. You may change the middleware listed below as required.\n    |\n    */\n\n    'middleware' => [\n        'authenticate_session' => AuthenticateSession::class,\n        'encrypt_cookies' => EncryptCookies::class,\n        'validate_csrf_token' => ValidateCsrfToken::class,\n    ],\n\n];\n"
  },
  {
    "path": "config/scribe.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Scribe\\Strategies\\GetFromSpatieQueryBuilder;\nuse Knuckles\\Scribe\\Config\\AuthIn;\nuse Knuckles\\Scribe\\Config\\Defaults;\nuse Knuckles\\Scribe\\Extracting\\Strategies;\n\nuse function Knuckles\\Scribe\\Config\\configureStrategy;\nuse function Knuckles\\Scribe\\Config\\removeStrategies;\n\nif (! class_exists(AuthIn::class)) {\n    return [];\n}\n\n// Only the most common configs are shown. See the https://scribe.knuckles.wtf/laravel/reference/config for all.\n\nreturn [\n    // The HTML <title> for the generated documentation.\n    'title' => 'Relaticle API',\n\n    // A short description of your API. Will be included in the docs webpage, Postman collection and OpenAPI spec.\n    'description' => 'REST API for managing CRM entities including companies, people, opportunities, tasks, and notes.',\n\n    // Text to place in the \"Introduction\" section, right after the `description`. Markdown and HTML are supported.\n    'intro_text' => <<<'INTRO'\n    Welcome to the Relaticle API documentation. This API follows the [JSON:API](https://jsonapi.org/) specification.\n\n    All endpoints require authentication via Bearer token. Generate an access token from **Settings > Access Tokens** in the Relaticle app.\n    INTRO\n    ,\n    // The base URL displayed in the docs.\n    // If you're using `laravel` type, you can set this to a dynamic string, like '{{ config(\"app.tenant_url\") }}' to get a dynamic base URL.\n    'base_url' => config('app.api_domain') ? 'https://'.config('app.api_domain') : config('app.url'),\n\n    // Routes to include in the docs\n    'routes' => [\n        [\n            'match' => [\n                // Match only routes whose paths match this pattern (use * as a wildcard to match any characters). Example: 'users/*'.\n                'prefixes' => config('app.api_domain') ? ['v1/*'] : ['api/v1/*'],\n\n                // Match only routes whose domains match this pattern (use * as a wildcard to match any characters). Example: 'api.*'.\n                'domains' => ['*'],\n            ],\n\n            // Include these routes even if they did not match the rules above.\n            'include' => [\n                // 'users.index', 'POST /new', '/auth/*'\n            ],\n\n            // Exclude these routes even if they matched the rules above.\n            'exclude' => [\n                // 'GET /health', 'admin.*'\n            ],\n        ],\n    ],\n\n    // The type of documentation output to generate.\n    // - \"static\" will generate a static HTMl page in the /public/docs folder,\n    // - \"laravel\" will generate the documentation as a Blade view, so you can add routing and authentication.\n    // - \"external_static\" and \"external_laravel\" do the same as above, but pass the OpenAPI spec as a URL to an external UI template\n    'type' => 'external_laravel',\n\n    // See https://scribe.knuckles.wtf/laravel/reference/config#theme for supported options\n    'theme' => 'scalar',\n\n    'static' => [\n        // HTML documentation, assets and Postman collection will be generated to this folder.\n        // Source Markdown will still be in resources/docs.\n        'output_path' => 'public/docs',\n    ],\n\n    'laravel' => [\n        // Whether to automatically create a docs route for you to view your generated docs. You can still set up routing manually.\n        'add_routes' => true,\n\n        // URL path to use for the docs endpoint (if `add_routes` is true).\n        // By default, `/docs` opens the HTML page, `/docs.postman` opens the Postman collection, and `/docs.openapi` the OpenAPI spec.\n        'docs_url' => '/docs/api',\n\n        // Directory within `public` in which to store CSS and JS assets.\n        // By default, assets are stored in `public/vendor/scribe`.\n        // If set, assets will be stored in `public/{{assets_directory}}`\n        'assets_directory' => null,\n\n        // Middleware to attach to the docs endpoint (if `add_routes` is true).\n        'middleware' => [],\n    ],\n\n    'external' => [\n        'html_attributes' => [],\n    ],\n\n    'try_it_out' => [\n        // Add a Try It Out button to your endpoints so consumers can test endpoints right from their browser.\n        // Don't forget to enable CORS headers for your endpoints.\n        'enabled' => true,\n\n        // The base URL to use in the API tester. Leave as null to be the same as the displayed URL (`scribe.base_url`).\n        'base_url' => null,\n\n        // [Laravel Sanctum] Fetch a CSRF token before each request, and add it as an X-XSRF-TOKEN header.\n        'use_csrf' => false,\n\n        // The URL to fetch the CSRF token from (if `use_csrf` is true).\n        'csrf_url' => '/sanctum/csrf-cookie',\n    ],\n\n    // How is your API authenticated? This information will be used in the displayed docs, generated examples and response calls.\n    'auth' => [\n        // Set this to true if ANY endpoints in your API use authentication.\n        'enabled' => true,\n\n        // Set this to true if your API should be authenticated by default. If so, you must also set `enabled` (above) to true.\n        // You can then use @unauthenticated or @authenticated on individual endpoints to change their status from the default.\n        'default' => true,\n\n        // Where is the auth value meant to be sent in a request?\n        'in' => AuthIn::BEARER->value,\n\n        // The name of the auth parameter (e.g. token, key, apiKey) or header (e.g. Authorization, Api-Key).\n        'name' => 'Authorization',\n\n        // The value of the parameter to be used by Scribe to authenticate response calls.\n        // This will NOT be included in the generated documentation. If empty, Scribe will use a random value.\n        'use_value' => env('SCRIBE_AUTH_KEY'),\n\n        // Placeholder your users will see for the auth parameter in the example requests.\n        // Set this to null if you want Scribe to use a random value as placeholder instead.\n        'placeholder' => '{YOUR_API_TOKEN}',\n\n        // Any extra authentication-related info for your users. Markdown and HTML are supported.\n        'extra_info' => 'Generate an access token from **Settings > Access Tokens** in the Relaticle app.',\n    ],\n\n    // Example requests for each endpoint will be shown in each of these languages.\n    // Supported options are: bash, javascript, php, python\n    // To add a language of your own, see https://scribe.knuckles.wtf/laravel/advanced/example-requests\n    // Note: does not work for `external` docs types\n    'example_languages' => ['bash', 'javascript'],\n\n    // Generate a Postman collection (v2.1.0) in addition to HTML docs.\n    // For 'static' docs, the collection will be generated to public/docs/collection.json.\n    // For 'laravel' docs, it will be generated to storage/app/scribe/collection.json.\n    // Setting `laravel.add_routes` to true (above) will also add a route for the collection.\n    'postman' => [\n        'enabled' => true,\n\n        'overrides' => [\n            // 'info.version' => '2.0.0',\n        ],\n    ],\n\n    // Generate an OpenAPI spec in addition to docs webpage.\n    // For 'static' docs, the collection will be generated to public/docs/openapi.yaml.\n    // For 'laravel' docs, it will be generated to storage/app/scribe/openapi.yaml.\n    // Setting `laravel.add_routes` to true (above) will also add a route for the spec.\n    'openapi' => [\n        'enabled' => true,\n\n        // The OpenAPI spec version to generate. Supported versions: '3.0.3', '3.1.0'.\n        // OpenAPI 3.1 is more compatible with JSON Schema and is becoming the dominant version.\n        // See https://spec.openapis.org/oas/v3.1.0 for details on 3.1 changes.\n        'version' => '3.1.0',\n\n        'overrides' => [\n            'info.version' => '1.0.0',\n        ],\n\n        // Additional generators to use when generating the OpenAPI spec.\n        // Should extend `Knuckles\\Scribe\\Writing\\OpenApiSpecGenerators\\OpenApiGenerator`.\n        'generators' => [],\n    ],\n\n    'groups' => [\n        // Endpoints which don't have a @group will be placed in this default group.\n        'default' => 'Endpoints',\n\n        // By default, Scribe will sort groups alphabetically, and endpoints in the order their routes are defined.\n        // You can override this by listing the groups, subgroups and endpoints here in the order you want them.\n        // See https://scribe.knuckles.wtf/blog/laravel-v4#easier-sorting and https://scribe.knuckles.wtf/laravel/reference/config#order for details\n        // Note: does not work for `external` docs types\n        'order' => [\n            'Companies',\n            'People',\n            'Opportunities',\n            'Tasks',\n            'Notes',\n            'Custom Fields',\n        ],\n    ],\n\n    // Custom logo path. This will be used as the value of the src attribute for the <img> tag,\n    // so make sure it points to an accessible URL or path. Set to false to not use a logo.\n    // For example, if your logo is in public/img:\n    // - 'logo' => '../img/logo.png' // for `static` type (output folder is public/docs)\n    // - 'logo' => 'img/logo.png' // for `laravel` type\n    'logo' => false,\n\n    // Customize the \"Last updated\" value displayed in the docs by specifying tokens and formats.\n    // Examples:\n    // - {date:F j Y} => March 28, 2022\n    // - {git:short} => Short hash of the last Git commit\n    // Available tokens are `{date:<format>}` and `{git:<format>}`.\n    // The format you pass to `date` will be passed to PHP's `date()` function.\n    // The format you pass to `git` can be either \"short\" or \"long\".\n    // Note: does not work for `external` docs types\n    'last_updated' => 'Last updated: {date:F j, Y}',\n\n    'examples' => [\n        // Set this to any number to generate the same example values for parameters on each run,\n        'faker_seed' => 12345,\n\n        // With API resources and transformers, Scribe tries to generate example models to use in your API responses.\n        // By default, Scribe will try the model's factory, and if that fails, try fetching the first from the database.\n        // You can reorder or remove strategies here.\n        'models_source' => ['factoryMake'],\n    ],\n\n    // The strategies Scribe will use to extract information about your routes at each stage.\n    // Use configureStrategy() to specify settings for a strategy in the list.\n    // Use removeStrategies() to remove an included strategy.\n    'strategies' => [\n        'metadata' => [...Defaults::METADATA_STRATEGIES],\n        'headers' => [\n            ...Defaults::HEADERS_STRATEGIES,\n            Strategies\\StaticData::withSettings(\n                data: [\n                    'Content-Type' => 'application/json',\n                    'Accept' => 'application/json',\n                ],\n            ),\n        ],\n        'urlParameters' => [...Defaults::URL_PARAMETERS_STRATEGIES],\n        'queryParameters' => [\n            ...Defaults::QUERY_PARAMETERS_STRATEGIES,\n            GetFromSpatieQueryBuilder::class,\n        ],\n        'bodyParameters' => [...Defaults::BODY_PARAMETERS_STRATEGIES],\n        'responses' => removeStrategies(\n            Defaults::RESPONSES_STRATEGIES,\n            [Strategies\\Responses\\ResponseCalls::class],\n        ),\n        'responseFields' => [...Defaults::RESPONSE_FIELDS_STRATEGIES],\n    ],\n\n    // For response calls, API resource responses and transformer responses,\n    // Scribe will try to start database transactions, so no changes are persisted to your database.\n    // Tell Scribe which connections should be transacted here. If you only use one db connection, you can leave this as is.\n    'database_connections_to_transact' => [],\n\n    'fractal' => [\n        // If you are using a custom serializer with league/fractal, you can specify it here.\n        'serializer' => null,\n    ],\n];\n"
  },
  {
    "path": "config/sentry.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * Sentry Laravel SDK configuration file.\n *\n * @see https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/\n */\nreturn [\n\n    // @see https://docs.sentry.io/product/sentry-basics/dsn-explainer/\n    'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),\n\n    // @see https://spotlightjs.com/\n    // 'spotlight' => env('SENTRY_SPOTLIGHT', false),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#logger\n    // 'logger' => Sentry\\Logger\\DebugFileLogger::class, // By default this will log to `storage_path('logs/sentry.log')`\n\n    // The release version of your application\n    // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty=\"%h\" -n1 HEAD'))\n    'release' => env('SENTRY_RELEASE'),\n\n    // When left empty or `null` the Laravel environment will be used (usually discovered from `APP_ENV` in your `.env`)\n    'environment' => env('SENTRY_ENVIRONMENT'),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#sample-rate\n    'sample_rate' => env('SENTRY_SAMPLE_RATE') === null ? 1.0 : (float) env('SENTRY_SAMPLE_RATE'),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate\n    'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_TRACES_SAMPLE_RATE'),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#profiles-sample-rate\n    'profiles_sample_rate' => env('SENTRY_PROFILES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_PROFILES_SAMPLE_RATE'),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii\n    'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false),\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore-exceptions\n    // 'ignore_exceptions' => [],\n\n    // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore-transactions\n    'ignore_transactions' => [\n        // Ignore Laravel's default health URL\n        '/up',\n    ],\n\n    // Breadcrumb specific configuration\n    'breadcrumbs' => [\n        // Capture Laravel logs as breadcrumbs\n        'logs' => env('SENTRY_BREADCRUMBS_LOGS_ENABLED', true),\n\n        // Capture Laravel cache events (hits, writes etc.) as breadcrumbs\n        'cache' => env('SENTRY_BREADCRUMBS_CACHE_ENABLED', true),\n\n        // Capture Livewire components like routes as breadcrumbs\n        'livewire' => env('SENTRY_BREADCRUMBS_LIVEWIRE_ENABLED', true),\n\n        // Capture SQL queries as breadcrumbs\n        'sql_queries' => env('SENTRY_BREADCRUMBS_SQL_QUERIES_ENABLED', true),\n\n        // Capture SQL query bindings (parameters) in SQL query breadcrumbs\n        'sql_bindings' => env('SENTRY_BREADCRUMBS_SQL_BINDINGS_ENABLED', false),\n\n        // Capture queue job information as breadcrumbs\n        'queue_info' => env('SENTRY_BREADCRUMBS_QUEUE_INFO_ENABLED', true),\n\n        // Capture command information as breadcrumbs\n        'command_info' => env('SENTRY_BREADCRUMBS_COMMAND_JOBS_ENABLED', true),\n\n        // Capture HTTP client request information as breadcrumbs\n        'http_client_requests' => env('SENTRY_BREADCRUMBS_HTTP_CLIENT_REQUESTS_ENABLED', true),\n\n        // Capture send notifications as breadcrumbs\n        'notifications' => env('SENTRY_BREADCRUMBS_NOTIFICATIONS_ENABLED', true),\n    ],\n\n    // Performance monitoring specific configuration\n    'tracing' => [\n        // Trace queue jobs as their own transactions (this enables tracing for queue jobs)\n        'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', true),\n\n        // Capture queue jobs as spans when executed on the sync driver\n        'queue_jobs' => env('SENTRY_TRACE_QUEUE_JOBS_ENABLED', true),\n\n        // Capture SQL queries as spans\n        'sql_queries' => env('SENTRY_TRACE_SQL_QUERIES_ENABLED', true),\n\n        // Capture SQL query bindings (parameters) in SQL query spans\n        'sql_bindings' => env('SENTRY_TRACE_SQL_BINDINGS_ENABLED', false),\n\n        // Capture where the SQL query originated from on the SQL query spans\n        'sql_origin' => env('SENTRY_TRACE_SQL_ORIGIN_ENABLED', true),\n\n        // Define a threshold in milliseconds for SQL queries to resolve their origin\n        'sql_origin_threshold_ms' => env('SENTRY_TRACE_SQL_ORIGIN_THRESHOLD_MS', 100),\n\n        // Capture views rendered as spans\n        'views' => env('SENTRY_TRACE_VIEWS_ENABLED', true),\n\n        // Capture Livewire components as spans\n        'livewire' => env('SENTRY_TRACE_LIVEWIRE_ENABLED', true),\n\n        // Capture HTTP client requests as spans\n        'http_client_requests' => env('SENTRY_TRACE_HTTP_CLIENT_REQUESTS_ENABLED', true),\n\n        // Capture Laravel cache events (hits, writes etc.) as spans\n        'cache' => env('SENTRY_TRACE_CACHE_ENABLED', true),\n\n        // Capture Redis operations as spans (this enables Redis events in Laravel)\n        'redis_commands' => env('SENTRY_TRACE_REDIS_COMMANDS', false),\n\n        // Capture where the Redis command originated from on the Redis command spans\n        'redis_origin' => env('SENTRY_TRACE_REDIS_ORIGIN_ENABLED', true),\n\n        // Capture send notifications as spans\n        'notifications' => env('SENTRY_TRACE_NOTIFICATIONS_ENABLED', true),\n\n        // Enable tracing for requests without a matching route (404's)\n        'missing_routes' => env('SENTRY_TRACE_MISSING_ROUTES_ENABLED', false),\n\n        // Configures if the performance trace should continue after the response has been sent to the user until the application terminates\n        // This is required to capture any spans that are created after the response has been sent like queue jobs dispatched using `dispatch(...)->afterResponse()` for example\n        'continue_after_response' => env('SENTRY_TRACE_CONTINUE_AFTER_RESPONSE', true),\n\n        // Enable the tracing integrations supplied by Sentry (recommended)\n        'default_integrations' => env('SENTRY_TRACE_DEFAULT_INTEGRATIONS_ENABLED', true),\n    ],\n\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Mailgun, Postmark, AWS and more. This file provides the de facto\n    | location for this type of information, allowing packages to have\n    | a conventional file to locate the various service credentials.\n    |\n    */\n\n    'postmark' => [\n        'token' => env('POSTMARK_TOKEN'),\n    ],\n\n    'ses' => [\n        'key' => env('AWS_ACCESS_KEY_ID'),\n        'secret' => env('AWS_SECRET_ACCESS_KEY'),\n        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n    ],\n\n    'resend' => [\n        'key' => env('RESEND_KEY'),\n    ],\n\n    'slack' => [\n        'notifications' => [\n            'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),\n            'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),\n        ],\n    ],\n\n    'google' => [\n        'client_id' => env('GOOGLE_CLIENT_ID'),\n        'client_secret' => env('GOOGLE_CLIENT_SECRET'),\n        'redirect' => env('GOOGLE_REDIRECT_URI'),\n    ],\n\n    'github' => [\n        'client_id' => env('GITHUB_CLIENT_ID'),\n        'client_secret' => env('GITHUB_CLIENT_SECRET'),\n        'redirect' => '/auth/callback/github',\n    ],\n\n    'fathom' => [\n        'site_id' => env('FATHOM_ANALYTICS_SITE_ID'),\n    ],\n\n    'discord' => [\n        'invite_url' => env('DISCORD_INVITE_URL'),\n    ],\n\n    'turnstile' => [\n        'key' => env('TURNSTILE_SITE_KEY'),\n        'secret' => env('TURNSTILE_SECRET_KEY'),\n    ],\n\n    'anthropic' => [\n        'summary_model' => env('ANTHROPIC_SUMMARY_MODEL', 'claude-haiku-4-5'),\n    ],\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option determines the default session driver that is utilized for\n    | incoming requests. Laravel supports a variety of storage options to\n    | persist session data. Database storage is a great default choice.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"dynamodb\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'database'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to expire immediately when the browser is closed then you may\n    | indicate that via the expire_on_close configuration option.\n    |\n    */\n\n    'lifetime' => env('SESSION_LIFETIME', 120),\n\n    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it's stored. All encryption is performed\n    | automatically by Laravel and you may use the session like normal.\n    |\n    */\n\n    'encrypt' => env('SESSION_ENCRYPT', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing the \"file\" session driver, the session files are placed\n    | on disk. The default storage location is defined here; however, you\n    | are free to provide another location where they should be stored.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => env('SESSION_CONNECTION'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table to\n    | be used to store sessions. Of course, a sensible default is defined\n    | for you; however, you're welcome to change this to another table.\n    |\n    */\n\n    'table' => env('SESSION_TABLE', 'sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | When using one of the framework's cache driven session backends, you may\n    | define the cache store which should be used to store the session data\n    | between requests. This must match one of your defined cache stores.\n    |\n    | Affects: \"apc\", \"dynamodb\", \"memcached\", \"redis\"\n    |\n    */\n\n    'store' => env('SESSION_STORE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the session cookie that is created by\n    | the framework. Typically, you should not need to change this value\n    | since doing so does not grant a meaningful security improvement.\n    |\n    */\n\n    'cookie' => env(\n        'SESSION_COOKIE',\n        Str::slug((string) env('APP_NAME', 'laravel'), '_').'_session'\n    ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application, but you're free to change this when necessary.\n    |\n    */\n\n    'path' => env('SESSION_PATH', '/'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the domain and subdomains the session cookie is\n    | available to. By default, the cookie will be available to the root\n    | domain and all subdomains. Typically, this shouldn't be changed.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you when it can't be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. It's unlikely you should disable this option.\n    |\n    */\n\n    'http_only' => env('SESSION_HTTP_ONLY', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | will set this value to \"lax\" to permit secure cross-site requests.\n    |\n    | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value\n    |\n    | Supported: \"lax\", \"strict\", \"none\", null\n    |\n    */\n\n    'same_site' => env('SESSION_SAME_SITE', 'lax'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Partitioned Cookies\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will tie the cookie to the top-level site for\n    | a cross-site context. Partitioned cookies are accepted by the browser\n    | when flagged \"secure\" and the Same-Site attribute is set to \"none\".\n    |\n    */\n\n    'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),\n\n];\n"
  },
  {
    "path": "config/sitemap.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse GuzzleHttp\\RequestOptions;\nuse Spatie\\Sitemap\\Crawler\\Profile;\n\nreturn [\n\n    /*\n     * These options will be passed to GuzzleHttp\\Client when it is created.\n     * For in-depth information on all options see the Guzzle docs:\n     *\n     * http://docs.guzzlephp.org/en/stable/request-options.html\n     */\n    'guzzle_options' => [\n\n        /*\n         * Whether or not cookies are used in a request.\n         */\n        RequestOptions::COOKIES => true,\n\n        /*\n         * The number of seconds to wait while trying to connect to a server.\n         * Use 0 to wait indefinitely.\n         */\n        RequestOptions::CONNECT_TIMEOUT => 10,\n\n        /*\n         * The timeout of the request in seconds. Use 0 to wait indefinitely.\n         */\n        RequestOptions::TIMEOUT => 10,\n\n        /*\n         * Describes the redirect behavior of a request.\n         */\n        RequestOptions::ALLOW_REDIRECTS => false,\n    ],\n\n    /*\n     * The sitemap generator can execute JavaScript on each page so it will\n     * discover links that are generated by your JS scripts. This feature\n     * is powered by headless Chrome.\n     */\n    'execute_javascript' => false,\n\n    /*\n     * The package will make an educated guess as to where Google Chrome is installed.\n     * You can also manually pass its location here.\n     */\n    'chrome_binary_path' => null,\n\n    /*\n     * The sitemap generator uses a CrawlProfile implementation to determine\n     * which urls should be crawled for the sitemap.\n     */\n    'crawl_profile' => Profile::class,\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite*\n"
  },
  {
    "path": "database/factories/CompanyFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Company;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<Company>\n */\nfinal class CompanyFactory extends Factory\n{\n    protected $model = Company::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => $this->faker->company(),\n            'account_owner_id' => User::factory(),\n            'team_id' => Team::factory(),\n        ];\n    }\n\n    public function configure(): Factory\n    {\n        $factory = $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n\n        if (config('scribe.generating')) {\n            return $factory->state([\n                'account_owner_id' => (string) Str::ulid(),\n                'team_id' => (string) Str::ulid(),\n            ]);\n        }\n\n        return $factory;\n    }\n}\n"
  },
  {
    "path": "database/factories/CustomFieldFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\CustomField;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\n\n/**\n * @extends Factory<CustomField>\n */\nfinal class CustomFieldFactory extends Factory\n{\n    protected $model = CustomField::class;\n\n    public function definition(): array\n    {\n        return [\n            'code' => $this->faker->unique()->word(),\n            'name' => $this->faker->name(),\n            'type' => $this->faker->randomElement(['text', 'number', 'link', 'textarea', 'date', 'select']),\n            'entity_type' => $this->faker->randomElement(['company', 'people', 'opportunity', 'task', 'note']),\n            'sort_order' => 1,\n            'validation_rules' => [],\n            'active' => true,\n            'system_defined' => false,\n            'settings' => new CustomFieldSettingsData(encrypted: false),\n            'created_at' => now(),\n            'updated_at' => now(),\n        ];\n    }\n\n    public function configure(): static\n    {\n        if (config('scribe.generating')) {\n            return $this->state([\n                'entity_type' => 'company',\n                'code' => 'industry',\n                'name' => 'Industry',\n                'type' => 'select',\n            ]);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "database/factories/NoteFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Note;\nuse App\\Models\\Team;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<Note>\n */\nfinal class NoteFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'title' => $this->faker->sentence(),\n            'team_id' => Team::factory(),\n        ];\n    }\n\n    public function configure(): Factory\n    {\n        $factory = $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n\n        if (config('scribe.generating')) {\n            return $factory->state(['team_id' => (string) Str::ulid()]);\n        }\n\n        return $factory;\n    }\n}\n"
  },
  {
    "path": "database/factories/OpportunityFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Opportunity;\nuse App\\Models\\Team;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<Opportunity>\n */\nfinal class OpportunityFactory extends Factory\n{\n    protected $model = Opportunity::class;\n\n    public function definition(): array\n    {\n        return [\n            'name' => $this->faker->sentence(),\n            'team_id' => Team::factory(),\n        ];\n    }\n\n    public function configure(): Factory\n    {\n        $factory = $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n\n        if (config('scribe.generating')) {\n            return $factory->state(['team_id' => (string) Str::ulid()]);\n        }\n\n        return $factory;\n    }\n}\n"
  },
  {
    "path": "database/factories/PeopleFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<People>\n */\nfinal class PeopleFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'team_id' => Team::factory(),\n        ];\n    }\n\n    public function configure(): Factory\n    {\n        $factory = $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n\n        if (config('scribe.generating')) {\n            return $factory->state(['team_id' => (string) Str::ulid()]);\n        }\n\n        return $factory;\n    }\n}\n"
  },
  {
    "path": "database/factories/SystemAdministratorFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\n/**\n * @extends Factory<SystemAdministrator>\n */\nfinal class SystemAdministratorFactory extends Factory\n{\n    protected $model = SystemAdministrator::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'email' => fake()->unique()->safeEmail(),\n            'email_verified_at' => now(),\n            'password' => Hash::make('password'),\n            'role' => SystemAdministratorRole::SuperAdministrator,\n            'remember_token' => Str::random(10),\n        ];\n    }\n\n    /**\n     * Indicate that the model's email address should be unverified.\n     */\n    public function unverified(): static\n    {\n        return $this->state(fn (array $attributes): array => [\n            'email_verified_at' => null,\n        ]);\n    }\n\n    public function configure(): Factory\n    {\n        return $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/factories/TaskFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Facades\\Date;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<Task>\n */\nfinal class TaskFactory extends Factory\n{\n    protected $model = Task::class;\n\n    public function definition(): array\n    {\n        return [\n            'title' => $this->faker->sentence(3),\n            'created_at' => Date::now(),\n            'updated_at' => Date::now(),\n            'team_id' => Team::factory(),\n        ];\n    }\n\n    public function configure(): Factory\n    {\n        $factory = $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n\n        if (config('scribe.generating')) {\n            return $factory->state(['team_id' => (string) Str::ulid()]);\n        }\n\n        return $factory;\n    }\n}\n"
  },
  {
    "path": "database/factories/TeamFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<Team>\n */\nfinal class TeamFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => $this->faker->unique()->company(),\n            'user_id' => User::factory(),\n            'personal_team' => true,\n        ];\n    }\n\n    public function configure(): static\n    {\n        $factory = $this->afterMaking(function (Team $team): void {\n            if (blank($team->slug)) {\n                $team->slug = Str::slug($team->name).'-'.Str::lower(Str::random(5));\n            }\n        })->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n\n        if (config('scribe.generating')) {\n            return $factory->state(['user_id' => (string) Str::ulid()]);\n        }\n\n        return $factory;\n    }\n}\n"
  },
  {
    "path": "database/factories/TeamInvitationFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Team;\nuse App\\Models\\TeamInvitation;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends Factory<TeamInvitation>\n */\nfinal class TeamInvitationFactory extends Factory\n{\n    protected $model = TeamInvitation::class;\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'team_id' => Team::factory(),\n            'email' => $this->faker->unique()->safeEmail(),\n            'role' => $this->faker->randomElement(['admin', 'editor']),\n            'expires_at' => now()->addDays(config('jetstream.invitation_expiry_days', 7)),\n        ];\n    }\n\n    public function expired(): static\n    {\n        return $this->state([\n            'expires_at' => now()->subDay(),\n        ]);\n    }\n\n    public function expiresIn(int $days): static\n    {\n        return $this->state([\n            'expires_at' => now()->addDays($days),\n        ]);\n    }\n\n    public function withoutExpiry(): static\n    {\n        return $this->state([\n            'expires_at' => null,\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends Factory<User>\n */\nfinal class UserFactory extends Factory\n{\n    /**\n     * The current password being used by the factory.\n     */\n    private static ?string $password = null;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    #[\\Override]\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'email' => fake()->unique()->safeEmail(),\n            'email_verified_at' => now(),\n            'password' => self::$password ??= Hash::make('password'),\n            'two_factor_secret' => null,\n            'two_factor_recovery_codes' => null,\n            'remember_token' => Str::random(10),\n            'profile_photo_path' => null,\n            'current_team_id' => null,\n        ];\n    }\n\n    /**\n     * Indicate that the model's email address should be unverified.\n     */\n    public function unverified(): static\n    {\n        return $this->state(fn (array $attributes): array => [\n            'email_verified_at' => null,\n        ]);\n    }\n\n    /**\n     * Indicate that the user should have a personal team.\n     */\n    public function withPersonalTeam(?callable $callback = null): UserFactory\n    {\n        return $this->afterCreating(function (User $user) use ($callback): void {\n            $team = Team::factory()->create([\n                'name' => $user->name.'\\'s Team',\n                'user_id' => $user->id,\n                'personal_team' => true,\n            ]);\n\n            if (is_callable($callback)) {\n                $callback($team, $user);\n            }\n\n            // Update the relationship\n            $user->ownedTeams()->save($team);\n        });\n    }\n\n    /**\n     * Indicate that the user should have a standard (non-personal) team.\n     */\n    public function withTeam(?callable $callback = null): static\n    {\n        return $this->afterCreating(function (User $user) use ($callback): void {\n            $team = Team::factory()->create([\n                'name' => $user->name.\"'s Team\",\n                'user_id' => $user->id,\n                'personal_team' => false,\n            ]);\n\n            if (is_callable($callback)) {\n                $callback($team, $user);\n            }\n\n            $user->ownedTeams()->save($team);\n            $user->switchTeam($team);\n        });\n    }\n\n    public function socialOnly(): static\n    {\n        return $this->state(fn (array $attributes): array => [\n            'password' => null,\n        ]);\n    }\n\n    public function configure(): Factory\n    {\n        return $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/factories/UserSocialAccountFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Factories;\n\nuse App\\Models\\User;\nuse App\\Models\\UserSocialAccount;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\n\n/**\n * @extends Factory<UserSocialAccount>\n */\nfinal class UserSocialAccountFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var class-string<UserSocialAccount>\n     */\n    protected $model = UserSocialAccount::class;\n\n    public function definition(): array\n    {\n        return [\n            'user_id' => User::factory(),\n            'provider_name' => 'facebook',\n            'provider_id' => $this->faker->unique()->randomNumber(),\n        ];\n    }\n\n    public function configure(): Factory\n    {\n        return $this->sequence(fn (Sequence $sequence): array => [\n            'created_at' => now()->subMinutes($sequence->index),\n            'updated_at' => now()->subMinutes($sequence->index),\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/migrations/0001_01_01_000000_create_users_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('users', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->timestamp('email_verified_at')->nullable();\n            $table->string('password')->nullable();\n            $table->rememberToken();\n            $table->foreignUlid('current_team_id')->nullable();\n            $table->string('profile_photo_path', 2048)->nullable();\n            $table->timestamps();\n        });\n\n        Schema::create('password_reset_tokens', function (Blueprint $table): void {\n            $table->string('email')->primary();\n            $table->string('token');\n            $table->timestamp('created_at')->nullable();\n        });\n\n        Schema::create('sessions', function (Blueprint $table): void {\n            $table->string('id')->primary();\n            $table->ulid('user_id')->nullable()->index();\n            $table->string('ip_address', 45)->nullable();\n            $table->text('user_agent')->nullable();\n            $table->longText('payload');\n            $table->integer('last_activity')->index();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('users');\n        Schema::dropIfExists('password_reset_tokens');\n        Schema::dropIfExists('sessions');\n    }\n};\n"
  },
  {
    "path": "database/migrations/0001_01_01_000001_create_cache_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('cache', function (Blueprint $table): void {\n            $table->string('key')->primary();\n            $table->mediumText('value');\n            $table->integer('expiration');\n        });\n\n        Schema::create('cache_locks', function (Blueprint $table): void {\n            $table->string('key')->primary();\n            $table->string('owner');\n            $table->integer('expiration');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('cache');\n        Schema::dropIfExists('cache_locks');\n    }\n};\n"
  },
  {
    "path": "database/migrations/0001_01_01_000002_create_jobs_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('jobs', function (Blueprint $table): void {\n            $table->id();\n            $table->string('queue')->index();\n            $table->longText('payload');\n            $table->unsignedTinyInteger('attempts');\n            $table->unsignedInteger('reserved_at')->nullable();\n            $table->unsignedInteger('available_at');\n            $table->unsignedInteger('created_at');\n        });\n\n        Schema::create('job_batches', function (Blueprint $table): void {\n            $table->string('id')->primary();\n            $table->string('name');\n            $table->integer('total_jobs');\n            $table->integer('pending_jobs');\n            $table->integer('failed_jobs');\n            $table->longText('failed_job_ids');\n            $table->mediumText('options')->nullable();\n            $table->integer('cancelled_at')->nullable();\n            $table->integer('created_at');\n            $table->integer('finished_at')->nullable();\n        });\n\n        Schema::create('failed_jobs', function (Blueprint $table): void {\n            $table->id();\n            $table->string('uuid')->unique();\n            $table->text('connection');\n            $table->text('queue');\n            $table->longText('payload');\n            $table->longText('exception');\n            $table->timestamp('failed_at')->useCurrent();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('jobs');\n        Schema::dropIfExists('job_batches');\n        Schema::dropIfExists('failed_jobs');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_23_110718_create_teams_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('teams', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n            $table->foreignUlid('user_id')->index();\n            $table->string('name');\n            $table->boolean('personal_team');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('teams');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_23_110719_create_team_user_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('team_user', function (Blueprint $table): void {\n            $table->id();\n            $table->foreignUlid('team_id')->constrained('teams')->cascadeOnDelete();\n            $table->foreignUlid('user_id')->constrained('users')->cascadeOnDelete();\n            $table->string('role')->nullable();\n            $table->timestamps();\n\n            $table->unique(['team_id', 'user_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('team_user');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_23_110720_create_team_invitations_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('team_invitations', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n            $table->foreignUlid('team_id')->constrained()->cascadeOnDelete();\n            $table->string('email');\n            $table->string('role')->nullable();\n            $table->timestamps();\n\n            $table->unique(['team_id', 'email']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('team_invitations');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_08_24_133803_create_companies_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('companies', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->constrained('teams')->cascadeOnDelete();\n            $table->foreignUlid('creator_id')->nullable()->constrained('users')->onDelete('set null');\n\n            $table->foreignUlid('account_owner_id')->nullable()->constrained('users')->onDelete('set null');\n\n            $table->string('name');\n            $table->string('creation_source', 50);\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->index(['team_id', 'deleted_at', 'creation_source', 'created_at'], 'idx_companies_team_activity');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_11_114549_create_tasks_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('tasks', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->constrained('teams')->cascadeOnDelete();\n            $table->foreignUlid('creator_id')->nullable()->constrained('users')->onDelete('set null');\n\n            $table->string('title');\n            $table->string('creation_source', 50);\n\n            $table->unsignedBigInteger('order_column')->nullable();\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->index(['team_id', 'deleted_at', 'creation_source', 'created_at'], 'idx_tasks_team_activity');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_22_084119_create_notes_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('notes', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->constrained('teams')->cascadeOnDelete();\n            $table->foreignUlid('creator_id')->nullable()->constrained('users')->onDelete('set null');\n\n            $table->string('title');\n            $table->string('creation_source', 50);\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->index(['team_id', 'deleted_at', 'creation_source', 'created_at'], 'idx_notes_team_activity');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_22_091034_create_people_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('people', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->constrained('teams')->cascadeOnDelete();\n            $table->foreignUlid('creator_id')->nullable()->constrained('users')->onDelete('set null');\n            $table->foreignUlid('company_id')->nullable()->constrained()->onDelete('set null');\n\n            $table->string('name');\n            $table->string('creation_source', 50);\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->index(['team_id', 'deleted_at', 'creation_source', 'created_at'], 'idx_people_team_activity');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_22_092300_create_task_user_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('task_user', function (Blueprint $table): void {\n            $table->id();\n\n            $table->foreignUlid('task_id')->constrained('tasks')->cascadeOnDelete();\n            $table->foreignUlid('user_id')->constrained('users')->cascadeOnDelete();\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('task_user');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_22_110651_add_two_factor_columns_to_users_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Laravel\\Fortify\\Fortify;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('users', function (Blueprint $table): void {\n            $table->text('two_factor_secret')\n                ->after('password')\n                ->nullable();\n\n            $table->text('two_factor_recovery_codes')\n                ->after('two_factor_secret')\n                ->nullable();\n\n            if (Fortify::confirmsTwoFactorAuthentication()) {\n                $table->timestamp('two_factor_confirmed_at')\n                    ->after('two_factor_recovery_codes')\n                    ->nullable();\n            }\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('users', function (Blueprint $table): void {\n            $table->dropColumn(array_merge([\n                'two_factor_secret',\n                'two_factor_recovery_codes',\n            ], Fortify::confirmsTwoFactorAuthentication() ? [\n                'two_factor_confirmed_at',\n            ] : []));\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_22_110718_create_personal_access_tokens_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('personal_access_tokens', function (Blueprint $table): void {\n            $table->id();\n            $table->ulidMorphs('tokenable');\n            $table->string('name');\n            $table->string('token', 64)->unique();\n            $table->text('abilities')->nullable();\n            $table->timestamp('last_used_at')->nullable();\n            $table->timestamp('expires_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('personal_access_tokens');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_22_114735_create_opportunities_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('opportunities', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->constrained('teams')->cascadeOnDelete();\n            $table->foreignUlid('creator_id')->nullable()->constrained('users')->onDelete('set null');\n            $table->foreignUlid('company_id')->nullable()->constrained()->onDelete('set null');\n            $table->foreignUlid('contact_id')->nullable()->constrained('people')->onDelete('set null');\n\n            $table->string('name');\n            $table->string('creation_source', 50);\n\n            $table->unsignedBigInteger('order_column')->nullable();\n\n            $table->timestamps();\n            $table->softDeletes();\n\n            $table->index(['team_id', 'deleted_at', 'creation_source', 'created_at'], 'idx_opportunities_team_activity');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_26_160649_create_user_social_accounts_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('user_social_accounts', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n            $table->foreignUlid('user_id')\n                ->constrained('users')\n                ->onUpdate('cascade')\n                ->onDelete('cascade');\n\n            $table->string('provider_name')->nullable();\n            $table->string('provider_id')->nullable();\n\n            $table->unique(['provider_name', 'provider_id']);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('user_social_accounts');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_26_170133_create_notifications_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('notifications', function (Blueprint $table): void {\n            $table->uuid('id')->primary();\n            $table->string('type');\n            $table->ulidMorphs('notifiable');\n            $table->json('data');\n            $table->timestamp('read_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('notifications');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_02_07_192236_create_custom_fields_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Relaticle\\CustomFields\\Enums\\CustomFieldsFeature;\nuse Relaticle\\CustomFields\\FeatureSystem\\FeatureManager;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        /**\n         * Custom Field Sections\n         */\n        Schema::create(config('custom-fields.database.table_names.custom_field_sections'), function (Blueprint $table): void {\n            $uniqueColumns = ['entity_type', 'code'];\n\n            $table->ulid('id')->primary();\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->foreignUlid(config('custom-fields.database.column_names.tenant_foreign_key'))->nullable()->index();\n                $uniqueColumns[] = config('custom-fields.database.column_names.tenant_foreign_key');\n            }\n\n            $table->string('width')->nullable();\n\n            $table->string('code');\n            $table->string('name');\n            $table->string('type');\n            $table->string('entity_type');\n            $table->unsignedBigInteger('sort_order')->nullable();\n\n            $table->string('description')->nullable();\n\n            $table->boolean('active')->default(true);\n            $table->boolean('system_defined')->default(false);\n\n            $table->json('settings')->nullable();\n\n            $table->unique($uniqueColumns);\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->index([config('custom-fields.database.column_names.tenant_foreign_key'), 'entity_type', 'active'], 'custom_field_sections_tenant_entity_active_idx');\n            } else {\n                $table->index(['entity_type', 'active'], 'custom_field_sections_entity_active_idx');\n            }\n\n            $table->timestamps();\n        });\n\n        /**\n         * Custom Fields\n         */\n        Schema::create(config('custom-fields.database.table_names.custom_fields'), function (Blueprint $table): void {\n            $uniqueColumns = ['code', 'entity_type'];\n\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('custom_field_section_id')->nullable();\n            $table->string('width')->nullable();\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->foreignUlid(config('custom-fields.database.column_names.tenant_foreign_key'))->nullable()->index();\n                $uniqueColumns[] = config('custom-fields.database.column_names.tenant_foreign_key');\n            }\n\n            $table->string('code');\n            $table->string('name');\n            $table->string('type');\n            $table->string('lookup_type')->nullable();\n            $table->string('entity_type');\n            $table->unsignedBigInteger('sort_order')->nullable();\n            $table->json('validation_rules')->nullable();\n\n            $table->boolean('active')->default(true);\n            $table->boolean('system_defined')->default(false);\n\n            $table->json('settings')->nullable();\n\n            $table->unique($uniqueColumns);\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->index([config('custom-fields.database.column_names.tenant_foreign_key'), 'entity_type', 'active'], 'custom_fields_tenant_entity_active_idx');\n            } else {\n                $table->index(['entity_type', 'active'], 'custom_fields_entity_active_idx');\n            }\n\n            $table->timestamps();\n        });\n\n        /**\n         * Custom Field Options\n         */\n        Schema::create(config('custom-fields.database.table_names.custom_field_options'), function (Blueprint $table): void {\n            $uniqueColumns = ['custom_field_id', 'name'];\n\n            $table->ulid('id')->primary();\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->foreignUlid(config('custom-fields.database.column_names.tenant_foreign_key'))->nullable()->index();\n                $uniqueColumns[] = config('custom-fields.database.column_names.tenant_foreign_key');\n            }\n\n            $table->foreignUlid('custom_field_id')\n                ->constrained(config('custom-fields.database.table_names.custom_fields'))\n                ->cascadeOnDelete();\n\n            $table->string('name')->nullable();\n            $table->unsignedBigInteger('sort_order')->nullable();\n            $table->json('settings')->nullable();\n\n            $table->timestamps();\n\n            $table->unique($uniqueColumns);\n        });\n\n        /**\n         * Custom Field Values\n         */\n        Schema::create(config('custom-fields.database.table_names.custom_field_values'), function (Blueprint $table): void {\n            $uniqueColumns = ['entity_type', 'entity_id', 'custom_field_id'];\n\n            $table->ulid('id')->primary();\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->foreignUlid(config('custom-fields.database.column_names.tenant_foreign_key'))->nullable()->index();\n                $uniqueColumns[] = config('custom-fields.database.column_names.tenant_foreign_key');\n            }\n\n            $table->ulidMorphs('entity');\n            $table->foreignUlid('custom_field_id')\n                ->constrained(config('custom-fields.database.table_names.custom_fields'))\n                ->cascadeOnDelete();\n\n            $table->text('string_value')->nullable();\n            $table->longText('text_value')->nullable();\n            $table->boolean('boolean_value')->nullable();\n            $table->bigInteger('integer_value')->nullable();\n            $table->double('float_value')->nullable();\n            $table->date('date_value')->nullable();\n            $table->dateTime('datetime_value')->nullable();\n            $table->json('json_value')->nullable();\n\n            $table->unique($uniqueColumns, 'custom_field_values_entity_type_unique');\n\n            if (FeatureManager::isEnabled(CustomFieldsFeature::SYSTEM_MULTI_TENANCY)) {\n                $table->index([config('custom-fields.database.column_names.tenant_foreign_key'), 'entity_type', 'entity_id'], 'custom_field_values_tenant_entity_idx');\n            } else {\n                $table->index(['entity_type', 'entity_id'], 'custom_field_values_entity_idx');\n            }\n\n            $table->index(['entity_id', 'custom_field_id'], 'custom_field_values_entity_id_custom_field_id_index');\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists(config('custom-fields.database.table_names.custom_field_values'));\n        Schema::dropIfExists(config('custom-fields.database.table_names.custom_field_options'));\n        Schema::dropIfExists(config('custom-fields.database.table_names.custom_fields'));\n        Schema::dropIfExists(config('custom-fields.database.table_names.custom_field_sections'));\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_15_180559_create_taskables_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('taskables', function (Blueprint $table): void {\n            $table->id();\n\n            $table->foreignUlid('task_id');\n\n            $table->ulidMorphs('taskable');\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('taskables');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_15_192334_create_notables_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('noteables', function (Blueprint $table): void {\n            $table->id();\n\n            $table->foreignUlid('note_id');\n\n            $table->ulidMorphs('noteable');\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('noteables');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_03_17_180206_create_media_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('media', function (Blueprint $table): void {\n            $table->id();\n\n            $table->ulidMorphs('model');\n            $table->uuid()->nullable()->unique();\n            $table->string('collection_name');\n            $table->string('name');\n            $table->string('file_name');\n            $table->string('mime_type')->nullable();\n            $table->string('disk');\n            $table->string('conversions_disk')->nullable();\n            $table->unsignedBigInteger('size');\n            $table->json('manipulations');\n            $table->json('custom_properties');\n            $table->json('generated_conversions');\n            $table->json('responsive_images');\n            $table->unsignedInteger('order_column')->nullable()->index();\n\n            $table->nullableTimestamps();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_04_30_143551_add_creation_source_to_entity_tables.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CreationSource;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /** @var array<int, string> */\n    private array $tables = [\n        'companies',\n        'people',\n        'opportunities',\n        'tasks',\n        'notes',\n    ];\n\n    public function up(): void\n    {\n        foreach ($this->tables as $table) {\n            if (Schema::hasColumn($table, 'creation_source')) {\n                continue;\n            }\n\n            Schema::table($table, function (Blueprint $blueprint): void {\n                $blueprint->string('creation_source', 50);\n            });\n        }\n\n        foreach ($this->tables as $table) {\n            DB::table($table)->whereNull('creation_source')->update(['creation_source' => CreationSource::WEB->value]);\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_05_08_112613_create_imports_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('imports', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->nullable()->constrained('teams')->cascadeOnDelete();\n\n            $table->timestamp('completed_at')->nullable();\n            $table->string('file_name');\n            $table->string('file_path');\n            $table->string('importer');\n            $table->unsignedInteger('processed_rows')->default(0);\n            $table->unsignedInteger('total_rows');\n            $table->unsignedInteger('successful_rows')->default(0);\n            $table->foreignUlid('user_id')->constrained()->cascadeOnDelete();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('imports');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_05_08_112614_create_exports_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('exports', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->nullable()->constrained('teams')->cascadeOnDelete();\n\n            $table->timestamp('completed_at')->nullable();\n            $table->string('file_disk');\n            $table->string('file_name')->nullable();\n            $table->string('exporter');\n            $table->unsignedInteger('processed_rows')->default(0);\n            $table->unsignedInteger('total_rows');\n            $table->unsignedInteger('successful_rows')->default(0);\n            $table->foreignUlid('user_id')->constrained()->cascadeOnDelete();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('exports');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_05_08_112615_create_failed_import_rows_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('failed_import_rows', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n\n            $table->foreignUlid('team_id')->nullable()->constrained('teams')->cascadeOnDelete();\n\n            $table->json('data');\n            $table->foreignUlid('import_id')->constrained()->cascadeOnDelete();\n            $table->text('validation_error')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('failed_import_rows');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_07_05_093310_update_opportunity_amount_field_type_to_currency.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        // Get all amount fields across all teams that have type 'number'\n        $amountFieldIds = DB::table('custom_fields')\n            ->where('code', 'amount')\n            ->where('entity_type', 'opportunity')\n            ->where('type', 'number')\n            ->pluck('id');\n\n        if ($amountFieldIds->isNotEmpty()) {\n            // Migrate values from integer_value to float_value for all amount fields\n            DB::table('custom_field_values')\n                ->whereIn('custom_field_id', $amountFieldIds)\n                ->whereNotNull('integer_value')\n                ->update([\n                    'float_value' => DB::raw('CAST(integer_value AS DECIMAL(15,2))'),\n                    'integer_value' => null,\n                ]);\n\n            // Update the field type from 'number' to 'currency' for all amount fields\n            DB::table('custom_fields')\n                ->whereIn('id', $amountFieldIds)\n                ->update(['type' => 'currency']);\n        }\n    }\n\n    /**\n     * Determine if this migration should run.\n     */\n    public function shouldRun(): bool\n    {\n        return true;\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_08_12_202409_add_settings_to_custom_field_options_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::table('custom_field_options', function (Blueprint $table): void {\n            $table->json('settings')->nullable()->after('sort_order');\n        });\n    }\n\n    /**\n     * Determine if this migration should run.\n     */\n    public function shouldRun(): bool\n    {\n        return Schema::hasTable('custom_field_options') && ! Schema::hasColumn('custom_field_options', 'settings');\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::table('custom_field_options', function (Blueprint $table): void {\n            $table->dropColumn('settings');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_08_25_173222_update_order_column_to_flowforge_position_for_tasks_and_opportunities.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Relaticle\\Flowforge\\Services\\Rank;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        // Update tasks table\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->flowforgePositionColumn('order_column');\n        });\n\n        // Set proper order_column values for existing tasks\n        $this->setTaskOrderColumns();\n\n        // Update opportunities table\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->flowforgePositionColumn('order_column');\n        });\n\n        // Set proper order_column values for existing opportunities\n        $this->setOpportunityOrderColumns();\n    }\n\n    /**\n     * Set proper order_column values for tasks grouped by team and status.\n     */\n    private function setTaskOrderColumns(): void\n    {\n        // Get all tasks with their status information, grouped by team and status\n        $tasks = DB::select(\"\n            SELECT \n                t.id,\n                t.team_id,\n                COALESCE(cfv.integer_value, 0) as status_id\n            FROM tasks t\n            LEFT JOIN custom_field_values cfv ON (\n                t.id = cfv.entity_id \n                AND cfv.custom_field_id = (\n                    SELECT id FROM custom_fields \n                    WHERE code = 'status' \n                    AND entity_type = 'App\\\\\\\\Models\\\\\\\\Task'\n                    LIMIT 1\n                )\n            )\n            ORDER BY t.team_id, status_id, t.id\n        \");\n\n        // Group tasks by team and status\n        $groupedTasks = [];\n        foreach ($tasks as $task) {\n            $key = \"{$task->team_id}_{$task->status_id}\";\n            $groupedTasks[$key][] = $task;\n        }\n\n        // Set positions for each group\n        foreach ($groupedTasks as $tasks) {\n            $this->setPositionsForGroup($tasks, 'tasks');\n        }\n    }\n\n    /**\n     * Set proper order_column values for opportunities grouped by team and stage.\n     */\n    private function setOpportunityOrderColumns(): void\n    {\n        // Get all opportunities with their stage information, grouped by team and stage\n        $opportunities = DB::select(\"\n            SELECT \n                o.id,\n                o.team_id,\n                COALESCE(cfv.integer_value, 0) as stage_id\n            FROM opportunities o\n            LEFT JOIN custom_field_values cfv ON (\n                o.id = cfv.entity_id \n                AND cfv.custom_field_id = (\n                    SELECT id FROM custom_fields \n                    WHERE code = 'stage' \n                    AND entity_type = 'App\\\\\\\\Models\\\\\\\\Opportunity'\n                    LIMIT 1\n                )\n            )\n            ORDER BY o.team_id, stage_id, o.id\n        \");\n\n        // Group opportunities by team and stage\n        $groupedOpportunities = [];\n        foreach ($opportunities as $opportunity) {\n            $key = \"{$opportunity->team_id}_{$opportunity->stage_id}\";\n            $groupedOpportunities[$key][] = $opportunity;\n        }\n\n        // Set positions for each group\n        foreach ($groupedOpportunities as $opportunities) {\n            $this->setPositionsForGroup($opportunities, 'opportunities');\n        }\n    }\n\n    /**\n     * Set Flowforge position values for a group of records.\n     *\n     * @param  array  $records  Array of records with id property\n     * @param  string  $table  Table name ('tasks' or 'opportunities')\n     */\n    private function setPositionsForGroup(array $records, string $table): void\n    {\n        if ($records === []) {\n            return;\n        }\n\n        $count = count($records);\n        $positions = [];\n\n        if ($count === 1) {\n            // Single record: use empty sequence position\n            $positions[] = [\n                'id' => $records[0]->id,\n                'position' => Rank::forEmptySequence()->get(),\n            ];\n        } else {\n            // Multiple records: generate evenly distributed positions\n            $positions[] = [\n                'id' => $records[0]->id,\n                'position' => Rank::forEmptySequence()->get(),\n            ];\n\n            $prevRank = Rank::forEmptySequence();\n\n            for ($i = 1; $i < $count; $i++) {\n                $nextRank = Rank::after($prevRank);\n                $positions[] = [\n                    'id' => $records[$i]->id,\n                    'position' => $nextRank->get(),\n                ];\n                $prevRank = $nextRank;\n            }\n        }\n\n        // Update the database\n        foreach ($positions as $position) {\n            DB::table($table)\n                ->where('id', $position['id'])\n                ->update(['order_column' => $position['position']]);\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        // Revert tasks table\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->integer('order_column')->nullable();\n        });\n\n        // Revert opportunities table\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->integer('order_column')->nullable();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_08_26_124042_create_system_administrators_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('system_administrators', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n            $table->string('name');\n\n            $table->string('email')->unique();\n            $table->timestamp('email_verified_at')->nullable();\n\n            $table->string('password');\n            $table->string('role');\n\n            $table->rememberToken();\n            $table->timestamps();\n\n            $table->index('email');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('system_administrators');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_11_30_202612_create_ai_summaries_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('ai_summaries', function (Blueprint $table): void {\n            $table->ulid('id')->primary();\n            $table->foreignUlid('team_id')->constrained()->cascadeOnDelete();\n            $table->ulidMorphs('summarizable');\n            $table->text('summary');\n            $table->string('model_used');\n            $table->unsignedInteger('prompt_tokens')->nullable();\n            $table->unsignedInteger('completion_tokens')->nullable();\n            $table->timestamps();\n\n            $table->unique(['summarizable_type', 'summarizable_id', 'team_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('ai_summaries');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_12_10_191207_update_people_emails_field_type_to_email.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * - Change type from 'tags-input' to 'email'\n     * - Set allow_multiple, max_values, unique_per_entity_type settings\n     *\n     * Note: Value migration (string_value → json_value) is handled in\n     * 2025_12_20_000000_migrate_to_ulid.php::phaseA8_migrateEmailFieldValues()\n     */\n    public function up(): void\n    {\n        // Get all people emails custom fields that need updating\n        $fields = DB::table('custom_fields')\n            ->where('code', 'emails')\n            ->where('entity_type', 'people')\n            ->where('type', 'tags-input')\n            ->get();\n\n        foreach ($fields as $field) {\n            $settings = json_decode($field->settings ?? '{}', true);\n\n            // Set the new settings values\n            $settings['allow_multiple'] = true;\n            $settings['max_values'] = 5;\n            $settings['unique_per_entity_type'] = true;\n\n            DB::table('custom_fields')\n                ->where('id', $field->id)\n                ->update([\n                    'type' => 'email',\n                    'settings' => json_encode($settings),\n                ]);\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_12_11_000001_update_company_domain_name_settings.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * - Rename 'domain_name' to 'domains'\n     * - Rename 'Domain Name' to 'Domains'\n     * - Set allow_multiple, max_values, unique_per_entity_type settings\n     *\n     * Note: Value migration (string_value → json_value) is handled in\n     * 2025_12_20_000000_migrate_to_ulid.php::phaseA9_migrateDomainFieldValues()\n     */\n    public function up(): void\n    {\n        // Get all company domain_name custom fields that need updating\n        $fields = DB::table('custom_fields')\n            ->where('code', 'domain_name')\n            ->where('entity_type', 'company')\n            ->get();\n\n        foreach ($fields as $field) {\n            $settings = json_decode($field->settings ?? '{}', true);\n\n            // Set the new settings values\n            $settings['allow_multiple'] = true;\n            $settings['max_values'] = 5;\n            $settings['unique_per_entity_type'] = true;\n\n            // Rename field code and name, update settings\n            DB::table('custom_fields')\n                ->where('id', $field->id)\n                ->update([\n                    'code' => 'domains',\n                    'name' => 'Domains',\n                    'settings' => json_encode($settings),\n                ]);\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_12_20_000000_migrate_to_ulid.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Export;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Database\\Query\\Builder;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Support\\Str;\n\n/**\n * Consolidated ULID Migration\n *\n * Migrates the database from auto-increment bigint IDs to ULID primary keys.\n *\n * This migration handles:\n * - Core entity tables (users, teams, companies, people, opportunities, tasks, notes)\n * - Related entity tables (imports, exports, team_invitations, user_social_accounts, failed_import_rows)\n * - Pivot tables (team_user, task_user, taskables, noteables) - keep int id, convert foreign keys\n * - Polymorphic tables (notifications, media, ai_summaries, personal_access_tokens, custom_field_values)\n * - Tenant-scoped tables (custom_fields, custom_field_options, custom_field_sections, sessions)\n * - Email field data migration (string_value → json_value conversion for EmailFieldType)\n *\n * Migration Strategy:\n * PHASE A: Add ULID columns to ALL tables and populate values (while old integer IDs still exist)\n * PHASE B: Cutover - drop old columns, rename ULID columns, recreate foreign key constraints\n *\n * IMPORTANT: This migration is idempotent - it skips if tables already use ULIDs.\n */\nreturn new class extends Migration\n{\n    /**\n     * Core entity tables that need ULID primary keys.\n     *\n     * @var array<string>\n     */\n    private array $coreEntityTables = [\n        'users',\n        'teams',\n        'companies',\n        'people',\n        'opportunities',\n        'tasks',\n        'notes',\n    ];\n\n    /**\n     * Other entity tables that need ULID primary keys.\n     *\n     * @var array<string>\n     */\n    private array $otherEntityTables = [\n        'imports',\n        'exports',\n        'team_invitations',\n        'user_social_accounts',\n        'failed_import_rows',\n        'ai_summaries',\n        'system_administrators',\n    ];\n\n    /**\n     * Custom field tables that need ULID primary keys.\n     * These have internal relationships (custom_field_id).\n     *\n     * @var array<string>\n     */\n    private array $customFieldTables = [\n        'custom_fields',\n        'custom_field_sections',\n        'custom_field_options',\n        'custom_field_values',\n    ];\n\n    /**\n     * Map morph aliases to their tables.\n     * CRITICAL: Use morph aliases (from Relation::enforceMorphMap) as keys,\n     * NOT full class names, because the database stores aliases.\n     *\n     * @var array<string, string>\n     */\n    private array $morphTypes = [\n        'user' => 'users',\n        'team' => 'teams',\n        'company' => 'companies',\n        'people' => 'people',\n        'opportunity' => 'opportunities',\n        'task' => 'tasks',\n        'note' => 'notes',\n        'system_administrator' => 'system_administrators',\n        'import' => 'imports',\n        'export' => 'exports',\n    ];\n\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        // Allow long-running migration\n        set_time_limit(0);\n        ini_set('memory_limit', '2048M');\n\n        // Disable query log to save memory on large datasets\n        DB::disableQueryLog();\n\n        $driver = DB::getDriverName();\n\n        // Skip if already using ULID (fresh install or already migrated)\n        if ($this->isAlreadyUlid('users', 'id')) {\n            return;\n        }\n\n        if ($driver === 'sqlite') {\n            $this->migrateForSqlite();\n        } else {\n            // MySQL, PostgreSQL, MariaDB\n            $this->migrateForRelationalDb();\n        }\n    }\n\n    /**\n     * Migration for MySQL/PostgreSQL/MariaDB.\n     *\n     * Two-phase approach:\n     * Phase A: Add ULID columns and populate (while old IDs exist for JOINs)\n     * Phase B: Cutover (drop old columns, rename new ones)\n     */\n    private function migrateForRelationalDb(): void\n    {\n        Schema::disableForeignKeyConstraints();\n\n        // =====================================================================\n        // PHASE A: Add ULID columns and populate values (keep old IDs for JOINs)\n        // =====================================================================\n\n        // A1: Core entity tables - add ulid column and populate\n        $this->phaseA_addUlidToCoreTables();\n\n        // A2: Core entity tables - add foreign key ULID columns and populate\n        $this->phaseA_addForeignUlidsToCoreTablesAndPopulate();\n\n        // A3: Other entity tables - add ulid column and foreign ULID columns, populate\n        $this->phaseA_addUlidsToOtherEntityTables();\n\n        // A4: Pivot tables - add foreign ULID columns and populate\n        $this->phaseA_addUlidsToPivotTables();\n\n        // A5: Polymorphic tables - add morph ULID columns and populate\n        // CRITICAL: Must run while old integer IDs still exist in core tables!\n        $this->phaseA_addUlidsToPolymorphicTables();\n\n        // A6: Tenant-scoped tables - add foreign ULID columns and populate\n        $this->phaseA_addUlidsToTenantScopedTables();\n\n        // A7: Custom field tables - add ulid and foreign ULID columns, populate\n        $this->phaseA_addUlidsToCustomFieldTables();\n\n        // A7b: Migrate SINGLE_CHOICE field value references (integer_value → string_value)\n        // CRITICAL: Must run while option table still has integer IDs for lookup!\n        $this->phaseA7b_migrateOptionValueReferences();\n\n        // A8: Migrate email field data format (string_value → json_value)\n        $this->phaseA8_migrateEmailFieldValues();\n\n        // A9: Migrate domain field data format (string_value → json_value)\n        $this->phaseA9_migrateDomainFieldValues();\n\n        // =====================================================================\n        // PHASE B: Cutover - drop old columns, rename ULID columns\n        // =====================================================================\n\n        // B0: Drop ALL foreign key constraints first (MySQL requirement)\n        // MySQL won't allow dropping PRIMARY KEY if foreign keys reference it\n        $this->phaseB_dropAllForeignKeyConstraints();\n\n        // B1: Core entity tables - cutover primary keys\n        $this->phaseB_cutoverCorePrimaryKeys();\n\n        // B2: Core entity tables - cutover foreign keys\n        $this->phaseB_cutoverCoreForeignKeys();\n\n        // B3: Other entity tables - cutover\n        $this->phaseB_cutoverOtherEntityTables();\n\n        // B4: Pivot tables - cutover foreign keys\n        $this->phaseB_cutoverPivotTables();\n\n        // B5: Polymorphic tables - cutover morph columns\n        $this->phaseB_cutoverPolymorphicTables();\n\n        // B6: Tenant-scoped tables - cutover\n        $this->phaseB_cutoverTenantScopedTables();\n\n        // B7: Custom field tables - cutover primary keys and foreign keys\n        $this->phaseB_cutoverCustomFieldTables();\n\n        // B8: Recreate composite unique indexes with new ULID columns\n        $this->phaseB_recreateUniqueIndexes();\n\n        // B9: Recreate foreign key constraints with ULID references\n        $this->phaseB9_recreateForeignKeyConstraints();\n\n        Schema::enableForeignKeyConstraints();\n    }\n\n    // =========================================================================\n    // PHASE A: Add ULID columns and populate\n    // =========================================================================\n\n    /**\n     * A1: Add ULID column to core entity tables and populate with values.\n     */\n    private function phaseA_addUlidToCoreTables(): void\n    {\n        foreach ($this->coreEntityTables as $table) {\n            // Add ulid column\n            Schema::table($table, function (Blueprint $table): void {\n                $table->ulid('ulid')->after('id')->nullable()->unique();\n            });\n\n            // Populate with ULID values\n            DB::table($table)\n                ->whereNull('ulid')\n                ->lazyById(100)\n                ->each(function ($record) use ($table): void {\n                    DB::table($table)\n                        ->where('id', $record->id)\n                        ->update(['ulid' => (string) Str::ulid()]);\n                });\n        }\n    }\n\n    /**\n     * A2: Add foreign key ULID columns to core tables and populate.\n     */\n    private function phaseA_addForeignUlidsToCoreTablesAndPopulate(): void\n    {\n        // Companies: team_id, creator_id, account_owner_id\n        $this->addAndPopulateForeignUlid('companies', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('companies', 'creator_id', 'users');\n        $this->addAndPopulateForeignUlid('companies', 'account_owner_id', 'users');\n\n        // People: team_id, creator_id, company_id\n        $this->addAndPopulateForeignUlid('people', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('people', 'creator_id', 'users');\n        $this->addAndPopulateForeignUlid('people', 'company_id', 'companies');\n\n        // Opportunities: team_id, creator_id, company_id, contact_id\n        $this->addAndPopulateForeignUlid('opportunities', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('opportunities', 'creator_id', 'users');\n        $this->addAndPopulateForeignUlid('opportunities', 'company_id', 'companies');\n        $this->addAndPopulateForeignUlid('opportunities', 'contact_id', 'people');\n\n        // Tasks: team_id, creator_id\n        $this->addAndPopulateForeignUlid('tasks', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('tasks', 'creator_id', 'users');\n\n        // Notes: team_id, creator_id\n        $this->addAndPopulateForeignUlid('notes', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('notes', 'creator_id', 'users');\n\n        // Users: current_team_id\n        $this->addAndPopulateForeignUlid('users', 'current_team_id', 'teams');\n\n        // Teams: user_id\n        $this->addAndPopulateForeignUlid('teams', 'user_id', 'users');\n    }\n\n    /**\n     * A3: Add ULID columns to other entity tables and populate.\n     */\n    private function phaseA_addUlidsToOtherEntityTables(): void\n    {\n        // imports: id (primary), team_id, user_id\n        $this->addUlidPrimaryKeyColumn('imports');\n        $this->addAndPopulateForeignUlid('imports', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('imports', 'user_id', 'users');\n\n        // exports: id (primary), team_id, user_id\n        $this->addUlidPrimaryKeyColumn('exports');\n        $this->addAndPopulateForeignUlid('exports', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('exports', 'user_id', 'users');\n\n        // team_invitations: id (primary), team_id\n        $this->addUlidPrimaryKeyColumn('team_invitations');\n        $this->addAndPopulateForeignUlid('team_invitations', 'team_id', 'teams');\n\n        // user_social_accounts: id (primary), user_id\n        $this->addUlidPrimaryKeyColumn('user_social_accounts');\n        $this->addAndPopulateForeignUlid('user_social_accounts', 'user_id', 'users');\n\n        // failed_import_rows: id (primary), team_id, import_id\n        $this->addUlidPrimaryKeyColumn('failed_import_rows');\n        $this->addAndPopulateForeignUlid('failed_import_rows', 'team_id', 'teams');\n        // Note: import_id references imports which still has integer id at this point\n        $this->addAndPopulateForeignUlid('failed_import_rows', 'import_id', 'imports');\n\n        // ai_summaries: id (primary), team_id\n        // Note: summarizable_id is already char(26), so only need primary key and team_id\n        $this->addUlidPrimaryKeyColumn('ai_summaries');\n        $this->addAndPopulateForeignUlid('ai_summaries', 'team_id', 'teams');\n\n        // system_administrators: id (primary only, no foreign keys)\n        $this->addUlidPrimaryKeyColumn('system_administrators');\n    }\n\n    /**\n     * A4: Add ULID columns to pivot tables and populate.\n     * Pivot tables keep their integer primary key, only foreign keys are converted.\n     */\n    private function phaseA_addUlidsToPivotTables(): void\n    {\n        // team_user: team_id, user_id\n        $this->addAndPopulateForeignUlid('team_user', 'team_id', 'teams');\n        $this->addAndPopulateForeignUlid('team_user', 'user_id', 'users');\n\n        // task_user: task_id, user_id\n        $this->addAndPopulateForeignUlid('task_user', 'task_id', 'tasks');\n        $this->addAndPopulateForeignUlid('task_user', 'user_id', 'users');\n\n        // taskables: task_id, taskable_id (morph)\n        $this->addAndPopulateForeignUlid('taskables', 'task_id', 'tasks');\n        $this->addAndPopulateMorphUlid('taskables', 'taskable');\n\n        // noteables: note_id, noteable_id (morph)\n        $this->addAndPopulateForeignUlid('noteables', 'note_id', 'notes');\n        $this->addAndPopulateMorphUlid('noteables', 'noteable');\n    }\n\n    /**\n     * A5: Add ULID columns to polymorphic tables and populate.\n     * CRITICAL: Must run while old integer IDs still exist!\n     */\n    private function phaseA_addUlidsToPolymorphicTables(): void\n    {\n        // notifications: notifiable_id\n        $this->addAndPopulateMorphUlid('notifications', 'notifiable');\n\n        // media: model_id\n        $this->addAndPopulateMorphUlid('media', 'model');\n\n        // ai_summaries: summarizable_id\n        $this->addAndPopulateMorphUlid('ai_summaries', 'summarizable');\n\n        // personal_access_tokens: tokenable_id\n        $this->addAndPopulateMorphUlid('personal_access_tokens', 'tokenable');\n\n        // custom_field_values: entity_id\n        $this->addAndPopulateMorphUlid('custom_field_values', 'entity');\n    }\n\n    /**\n     * A6: Add ULID columns to tenant-scoped tables and populate.\n     */\n    private function phaseA_addUlidsToTenantScopedTables(): void\n    {\n        // sessions: user_id\n        $this->addAndPopulateForeignUlid('sessions', 'user_id', 'users');\n\n        // custom_fields: tenant_id\n        $this->addAndPopulateForeignUlid('custom_fields', 'tenant_id', 'teams');\n\n        // custom_field_options: tenant_id\n        $this->addAndPopulateForeignUlid('custom_field_options', 'tenant_id', 'teams');\n\n        // custom_field_sections: tenant_id\n        $this->addAndPopulateForeignUlid('custom_field_sections', 'tenant_id', 'teams');\n\n        // custom_field_values: tenant_id (entity_id already handled in polymorphic)\n        $this->addAndPopulateForeignUlid('custom_field_values', 'tenant_id', 'teams');\n    }\n\n    /**\n     * A7: Add ULID columns to custom field tables and populate.\n     */\n    private function phaseA_addUlidsToCustomFieldTables(): void\n    {\n        // Add ULID primary key columns to all custom field tables\n        foreach ($this->customFieldTables as $table) {\n            $this->addUlidPrimaryKeyColumn($table);\n        }\n\n        // custom_fields: custom_field_section_id references custom_field_sections\n        $this->addAndPopulateForeignUlid('custom_fields', 'custom_field_section_id', 'custom_field_sections');\n\n        // custom_field_options: custom_field_id references custom_fields\n        $this->addAndPopulateForeignUlid('custom_field_options', 'custom_field_id', 'custom_fields');\n\n        // custom_field_values: custom_field_id references custom_fields\n        $this->addAndPopulateForeignUlid('custom_field_values', 'custom_field_id', 'custom_fields');\n    }\n\n    /**\n     * A7b: Migrate SINGLE_CHOICE field value references from integer_value to string_value.\n     *\n     * Maps old integer option IDs to new ULID option IDs.\n     * CRITICAL: Must run while custom_field_options still has both 'id' (integer) and 'ulid' columns.\n     *\n     * IDEMPOTENT: Only migrates values with non-null integer_value.\n     */\n    private function phaseA7b_migrateOptionValueReferences(): void\n    {\n        $fieldTable = 'custom_fields';\n        $valueTable = 'custom_field_values';\n        $optionTable = 'custom_field_options';\n\n        // Find all SINGLE_CHOICE type fields (select, radio)\n        $singleChoiceFieldIds = DB::table($fieldTable)\n            ->whereIn('type', ['select', 'radio'])\n            ->pluck('id');\n\n        if ($singleChoiceFieldIds->isEmpty()) {\n            return; // No single-choice fields\n        }\n\n        // Migrate in chunks to avoid memory issues\n        DB::table($valueTable)\n            ->whereIn('custom_field_id', $singleChoiceFieldIds)\n            ->whereNotNull('integer_value')\n            ->lazyById(100)\n            ->each(function ($value) use ($valueTable, $optionTable): void {\n                // Get the option's new ULID using the old integer id stored in integer_value\n                // At this point, options still have both 'id' (original integer) and 'ulid' columns\n                $optionUlid = DB::table($optionTable)\n                    ->where('id', $value->integer_value)\n                    ->value('ulid');\n\n                if ($optionUlid) {\n                    DB::table($valueTable)\n                        ->where('id', $value->id)\n                        ->update([\n                            'string_value' => $optionUlid,\n                            'integer_value' => null,\n                        ]);\n                }\n            });\n    }\n\n    /**\n     * A8: Migrate email field values from string_value to json_value format.\n     *\n     * EmailFieldType was changed from STRING data type (string_value) to\n     * MULTI_CHOICE (json_value array format) to support multiple emails.\n     *\n     * IDEMPOTENT: Only migrates values with non-empty string_value and empty json_value.\n     */\n    private function phaseA8_migrateEmailFieldValues(): void\n    {\n        $fieldTable = 'custom_fields';\n        $valueTable = 'custom_field_values';\n\n        // Find all email type custom fields (using integer id, we're in Phase A)\n        $emailFieldIds = DB::table($fieldTable)\n            ->where('type', 'email')\n            ->pluck('id');\n\n        if ($emailFieldIds->isEmpty()) {\n            return; // No email fields\n        }\n\n        // Find values needing migration: has string_value, empty/null json_value\n        $valuesToMigrate = DB::table($valueTable)\n            ->whereIn('custom_field_id', $emailFieldIds)\n            ->whereNotNull('string_value')\n            ->where('string_value', '!=', '')\n            ->where(function (Builder $query): void {\n                $query->whereNull('json_value')\n                    ->orWhereRaw('\"json_value\"::text = ?', ['[]'])\n                    ->orWhereRaw('\"json_value\"::text = ?', ['null']);\n            })\n            ->select(['id', 'string_value'])\n            ->get();\n\n        if ($valuesToMigrate->isEmpty()) {\n            return; // Already migrated\n        }\n\n        // Migrate in chunks to avoid memory issues\n        foreach ($valuesToMigrate->chunk(100) as $chunk) {\n            foreach ($chunk as $value) {\n                DB::table($valueTable)\n                    ->where('id', $value->id)\n                    ->update([\n                        'json_value' => json_encode([$value->string_value]),\n                        'string_value' => null,\n                    ]);\n            }\n        }\n    }\n\n    /**\n     * A9: Migrate domain field values from string_value to json_value format.\n     *\n     * Domains field (company) was changed from STRING data type (string_value) to\n     * array format (json_value) to support multiple domains.\n     *\n     * IDEMPOTENT: Only migrates values with non-empty string_value and empty json_value.\n     */\n    private function phaseA9_migrateDomainFieldValues(): void\n    {\n        $fieldTable = 'custom_fields';\n        $valueTable = 'custom_field_values';\n\n        // Find all domains custom fields (code 'domains' or legacy 'domain_name')\n        $domainFieldIds = DB::table($fieldTable)\n            ->where('entity_type', 'company')\n            ->where(function (Builder $query): void {\n                $query->where('code', 'domains')\n                    ->orWhere('code', 'domain_name');\n            })\n            ->pluck('id');\n\n        if ($domainFieldIds->isEmpty()) {\n            return; // No domain fields\n        }\n\n        // Find values needing migration: has string_value, empty/null json_value\n        $valuesToMigrate = DB::table($valueTable)\n            ->whereIn('custom_field_id', $domainFieldIds)\n            ->whereNotNull('string_value')\n            ->where('string_value', '!=', '')\n            ->where(function (Builder $query): void {\n                $query->whereNull('json_value')\n                    ->orWhereRaw('\"json_value\"::text = ?', ['[]'])\n                    ->orWhereRaw('\"json_value\"::text = ?', ['null']);\n            })\n            ->select(['id', 'string_value'])\n            ->get();\n\n        if ($valuesToMigrate->isEmpty()) {\n            return; // Already migrated\n        }\n\n        // Migrate in chunks to avoid memory issues\n        foreach ($valuesToMigrate->chunk(100) as $chunk) {\n            foreach ($chunk as $value) {\n                // Handle comma-separated domains\n                $domains = array_filter(\n                    array_map(trim(...), explode(',', (string) $value->string_value)),\n                    fn ($d): bool => $d !== ''\n                );\n\n                DB::table($valueTable)\n                    ->where('id', $value->id)\n                    ->update([\n                        'json_value' => json_encode(array_values($domains)),\n                        'string_value' => null,\n                    ]);\n            }\n        }\n    }\n\n    // =========================================================================\n    // PHASE B: Cutover - drop old columns, rename ULID columns\n    // =========================================================================\n\n    /**\n     * B0: Drop ALL foreign key constraints and composite unique indexes.\n     *\n     * MySQL: Cannot drop PRIMARY KEY if foreign keys reference it,\n     *        cannot drop column if it's part of a unique index.\n     * PostgreSQL: Same logical requirement, different SQL syntax.\n     */\n    private function phaseB_dropAllForeignKeyConstraints(): void\n    {\n        $driver = DB::getDriverName();\n\n        if ($driver === 'pgsql') {\n            $foreignKeys = DB::select(\"\n                SELECT tc.table_name, tc.constraint_name\n                FROM information_schema.table_constraints tc\n                WHERE tc.constraint_type = 'FOREIGN KEY'\n                AND tc.table_schema = 'public'\n            \");\n\n            foreach ($foreignKeys as $fk) {\n                try {\n                    DB::statement(\"ALTER TABLE \\\"{$fk->table_name}\\\" DROP CONSTRAINT IF EXISTS \\\"{$fk->constraint_name}\\\"\");\n                } catch (Throwable) {\n                }\n            }\n\n            $indexesToDrop = [\n                'team_invitations_team_id_email_unique',\n                'team_user_team_id_user_id_unique',\n                'ai_summaries_summarizable_type_summarizable_id_team_id_unique',\n                'custom_field_options_custom_field_id_name_tenant_id_unique',\n                'custom_field_sections_entity_type_code_tenant_id_unique',\n                'custom_field_values_entity_type_unique',\n                'custom_fields_code_entity_type_tenant_id_unique',\n            ];\n\n            foreach ($indexesToDrop as $indexName) {\n                try {\n                    DB::statement(\"DROP INDEX IF EXISTS \\\"{$indexName}\\\"\");\n                } catch (Throwable) {\n                }\n            }\n        } else {\n            $foreignKeys = DB::select('\n                SELECT TABLE_NAME, CONSTRAINT_NAME\n                FROM information_schema.KEY_COLUMN_USAGE\n                WHERE REFERENCED_TABLE_NAME IS NOT NULL\n                AND TABLE_SCHEMA = DATABASE()\n            ');\n\n            foreach ($foreignKeys as $fk) {\n                try {\n                    DB::statement(\"ALTER TABLE `{$fk->TABLE_NAME}` DROP FOREIGN KEY `{$fk->CONSTRAINT_NAME}`\");\n                } catch (Throwable) {\n                }\n            }\n\n            $indexesToDrop = [\n                'team_invitations' => 'team_invitations_team_id_email_unique',\n                'team_user' => 'team_user_team_id_user_id_unique',\n                'ai_summaries' => 'ai_summaries_summarizable_type_summarizable_id_team_id_unique',\n                'custom_field_options' => 'custom_field_options_custom_field_id_name_tenant_id_unique',\n                'custom_field_sections' => 'custom_field_sections_entity_type_code_tenant_id_unique',\n                'custom_field_values' => 'custom_field_values_entity_type_unique',\n                'custom_fields' => 'custom_fields_code_entity_type_tenant_id_unique',\n            ];\n\n            foreach ($indexesToDrop as $table => $indexName) {\n                try {\n                    DB::statement(\"ALTER TABLE `{$table}` DROP INDEX `{$indexName}`\");\n                } catch (Throwable) {\n                }\n            }\n        }\n    }\n\n    /**\n     * B1: Cutover core table primary keys.\n     */\n    private function phaseB_cutoverCorePrimaryKeys(): void\n    {\n        foreach ($this->coreEntityTables as $table) {\n            $this->cutoverPrimaryKey($table);\n        }\n    }\n\n    /**\n     * B2: Cutover core table foreign keys.\n     */\n    private function phaseB_cutoverCoreForeignKeys(): void\n    {\n        // Companies\n        $this->cutoverForeignKeyColumn('companies', 'team_id');\n        $this->cutoverForeignKeyColumn('companies', 'creator_id');\n        $this->cutoverForeignKeyColumn('companies', 'account_owner_id');\n\n        // People\n        $this->cutoverForeignKeyColumn('people', 'team_id');\n        $this->cutoverForeignKeyColumn('people', 'creator_id');\n        $this->cutoverForeignKeyColumn('people', 'company_id');\n\n        // Opportunities\n        $this->cutoverForeignKeyColumn('opportunities', 'team_id');\n        $this->cutoverForeignKeyColumn('opportunities', 'creator_id');\n        $this->cutoverForeignKeyColumn('opportunities', 'company_id');\n        $this->cutoverForeignKeyColumn('opportunities', 'contact_id');\n\n        // Tasks\n        $this->cutoverForeignKeyColumn('tasks', 'team_id');\n        $this->cutoverForeignKeyColumn('tasks', 'creator_id');\n\n        // Notes\n        $this->cutoverForeignKeyColumn('notes', 'team_id');\n        $this->cutoverForeignKeyColumn('notes', 'creator_id');\n\n        // Users\n        $this->cutoverForeignKeyColumn('users', 'current_team_id');\n\n        // Teams\n        $this->cutoverForeignKeyColumn('teams', 'user_id');\n    }\n\n    /**\n     * B3: Cutover other entity tables.\n     */\n    private function phaseB_cutoverOtherEntityTables(): void\n    {\n        foreach ($this->otherEntityTables as $table) {\n            $this->cutoverPrimaryKey($table);\n        }\n\n        // Cutover foreign keys\n        $this->cutoverForeignKeyColumn('imports', 'team_id');\n        $this->cutoverForeignKeyColumn('imports', 'user_id');\n\n        $this->cutoverForeignKeyColumn('exports', 'team_id');\n        $this->cutoverForeignKeyColumn('exports', 'user_id');\n\n        $this->cutoverForeignKeyColumn('team_invitations', 'team_id');\n\n        $this->cutoverForeignKeyColumn('user_social_accounts', 'user_id');\n\n        $this->cutoverForeignKeyColumn('failed_import_rows', 'team_id');\n        $this->cutoverForeignKeyColumn('failed_import_rows', 'import_id');\n\n        $this->cutoverForeignKeyColumn('ai_summaries', 'team_id');\n    }\n\n    /**\n     * B4: Cutover pivot tables (foreign keys only, keep integer id).\n     */\n    private function phaseB_cutoverPivotTables(): void\n    {\n        // team_user\n        $this->cutoverForeignKeyColumn('team_user', 'team_id');\n        $this->cutoverForeignKeyColumn('team_user', 'user_id');\n\n        // task_user\n        $this->cutoverForeignKeyColumn('task_user', 'task_id');\n        $this->cutoverForeignKeyColumn('task_user', 'user_id');\n\n        // taskables\n        $this->cutoverForeignKeyColumn('taskables', 'task_id');\n        $this->cutoverMorphColumn('taskables', 'taskable');\n\n        // noteables\n        $this->cutoverForeignKeyColumn('noteables', 'note_id');\n        $this->cutoverMorphColumn('noteables', 'noteable');\n    }\n\n    /**\n     * B5: Cutover polymorphic tables.\n     */\n    private function phaseB_cutoverPolymorphicTables(): void\n    {\n        $this->cutoverMorphColumn('notifications', 'notifiable');\n        $this->cutoverMorphColumn('media', 'model');\n        $this->cutoverMorphColumn('ai_summaries', 'summarizable');\n        $this->cutoverMorphColumn('personal_access_tokens', 'tokenable');\n        $this->cutoverMorphColumn('custom_field_values', 'entity');\n    }\n\n    /**\n     * B6: Cutover tenant-scoped tables.\n     */\n    private function phaseB_cutoverTenantScopedTables(): void\n    {\n        $this->cutoverForeignKeyColumn('sessions', 'user_id');\n        $this->cutoverForeignKeyColumn('custom_fields', 'tenant_id');\n        $this->cutoverForeignKeyColumn('custom_field_options', 'tenant_id');\n        $this->cutoverForeignKeyColumn('custom_field_sections', 'tenant_id');\n        $this->cutoverForeignKeyColumn('custom_field_values', 'tenant_id');\n    }\n\n    /**\n     * B7: Cutover custom field tables - primary keys and foreign keys.\n     */\n    private function phaseB_cutoverCustomFieldTables(): void\n    {\n        foreach ($this->customFieldTables as $table) {\n            $this->cutoverPrimaryKey($table);\n        }\n\n        // Cutover foreign keys\n        $this->cutoverForeignKeyColumn('custom_fields', 'custom_field_section_id');\n        $this->cutoverForeignKeyColumn('custom_field_options', 'custom_field_id');\n        $this->cutoverForeignKeyColumn('custom_field_values', 'custom_field_id');\n    }\n\n    /**\n     * B8: Recreate composite unique indexes with new ULID columns.\n     */\n    private function phaseB_recreateUniqueIndexes(): void\n    {\n        // team_invitations: (team_id, email) unique\n        Schema::table('team_invitations', function (Blueprint $table): void {\n            $table->unique(['team_id', 'email'], 'team_invitations_team_id_email_unique');\n        });\n\n        // team_user: (team_id, user_id) unique\n        Schema::table('team_user', function (Blueprint $table): void {\n            $table->unique(['team_id', 'user_id'], 'team_user_team_id_user_id_unique');\n        });\n\n        // ai_summaries: (summarizable_type, summarizable_id, team_id) unique\n        Schema::table('ai_summaries', function (Blueprint $table): void {\n            $table->unique(['summarizable_type', 'summarizable_id', 'team_id'], 'ai_summaries_summarizable_type_summarizable_id_team_id_unique');\n        });\n\n        // custom_field_options: (custom_field_id, name, tenant_id) unique\n        Schema::table('custom_field_options', function (Blueprint $table): void {\n            $table->unique(['custom_field_id', 'name', 'tenant_id'], 'custom_field_options_custom_field_id_name_tenant_id_unique');\n        });\n\n        // custom_field_sections: (entity_type, code, tenant_id) unique\n        Schema::table('custom_field_sections', function (Blueprint $table): void {\n            $table->unique(['entity_type', 'code', 'tenant_id'], 'custom_field_sections_entity_type_code_tenant_id_unique');\n        });\n\n        // custom_field_values: (entity_type, entity_id, custom_field_id, tenant_id) unique\n        Schema::table('custom_field_values', function (Blueprint $table): void {\n            $table->unique(['entity_type', 'entity_id', 'custom_field_id', 'tenant_id'], 'custom_field_values_entity_type_unique');\n        });\n\n        // custom_fields: (code, entity_type, tenant_id) unique\n        Schema::table('custom_fields', function (Blueprint $table): void {\n            $table->unique(['code', 'entity_type', 'tenant_id'], 'custom_fields_code_entity_type_tenant_id_unique');\n        });\n    }\n\n    /**\n     * B9: Recreate foreign key constraints with ULID references.\n     *\n     * CRITICAL: Foreign keys were dropped in B0, must be recreated\n     * to restore referential integrity.\n     */\n    private function phaseB9_recreateForeignKeyConstraints(): void\n    {\n        // Core entity foreign keys\n        Schema::table('companies', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('creator_id')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('account_owner_id')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('people', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('creator_id')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');\n        });\n\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('creator_id')->references('id')->on('users')->onDelete('set null');\n            $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');\n            $table->foreign('contact_id')->references('id')->on('people')->onDelete('set null');\n        });\n\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('creator_id')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('notes', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('creator_id')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('users', function (Blueprint $table): void {\n            $table->foreign('current_team_id')->references('id')->on('teams')->onDelete('set null');\n        });\n\n        Schema::table('teams', function (Blueprint $table): void {\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        // Related entity foreign keys\n        Schema::table('imports', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('exports', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');\n        });\n\n        Schema::table('team_invitations', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n        });\n\n        Schema::table('user_social_accounts', function (Blueprint $table): void {\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        Schema::table('failed_import_rows', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('import_id')->references('id')->on('imports')->onDelete('cascade');\n        });\n\n        Schema::table('ai_summaries', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n        });\n\n        // Pivot table foreign keys\n        Schema::table('team_user', function (Blueprint $table): void {\n            $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        Schema::table('task_user', function (Blueprint $table): void {\n            $table->foreign('task_id')->references('id')->on('tasks')->onDelete('cascade');\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        Schema::table('taskables', function (Blueprint $table): void {\n            $table->foreign('task_id')->references('id')->on('tasks')->onDelete('cascade');\n            // taskable_id is polymorphic, no FK constraint\n        });\n\n        Schema::table('noteables', function (Blueprint $table): void {\n            $table->foreign('note_id')->references('id')->on('notes')->onDelete('cascade');\n            // noteable_id is polymorphic, no FK constraint\n        });\n\n        // Tenant-scoped table foreign keys\n        Schema::table('sessions', function (Blueprint $table): void {\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n        });\n\n        Schema::table('custom_fields', function (Blueprint $table): void {\n            $table->foreign('tenant_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('custom_field_section_id')->references('id')->on('custom_field_sections')->onDelete('cascade');\n        });\n\n        Schema::table('custom_field_options', function (Blueprint $table): void {\n            $table->foreign('tenant_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('custom_field_id')->references('id')->on('custom_fields')->onDelete('cascade');\n        });\n\n        Schema::table('custom_field_sections', function (Blueprint $table): void {\n            $table->foreign('tenant_id')->references('id')->on('teams')->onDelete('cascade');\n        });\n\n        Schema::table('custom_field_values', function (Blueprint $table): void {\n            $table->foreign('tenant_id')->references('id')->on('teams')->onDelete('cascade');\n            $table->foreign('custom_field_id')->references('id')->on('custom_fields')->onDelete('cascade');\n            // entity_id is polymorphic, no FK constraint\n        });\n    }\n\n    // =========================================================================\n    // Helper Methods - Phase A (Add and Populate)\n    // =========================================================================\n\n    /**\n     * Add a ULID column for primary key and populate with values.\n     */\n    private function addUlidPrimaryKeyColumn(string $tableName): void\n    {\n        Schema::table($tableName, function (Blueprint $table): void {\n            $table->ulid('ulid')->after('id')->nullable();\n        });\n\n        DB::table($tableName)\n            ->whereNull('ulid')\n            ->lazyById(100)\n            ->each(function ($record) use ($tableName): void {\n                DB::table($tableName)\n                    ->where('id', $record->id)\n                    ->update(['ulid' => (string) Str::ulid()]);\n            });\n    }\n\n    /**\n     * Add a ULID foreign key column and populate by looking up the referenced table.\n     */\n    private function addAndPopulateForeignUlid(string $tableName, string $fkColumn, string $refTable): void\n    {\n        $ulidColumn = $fkColumn.'_ulid';\n\n        // Add ULID column\n        Schema::table($tableName, function (Blueprint $table) use ($fkColumn, $ulidColumn): void {\n            $table->char($ulidColumn, 26)->nullable()->after($fkColumn);\n        });\n\n        // Populate by looking up the referenced table's ulid column\n        // At this point, referenced tables have both 'id' (integer) and 'ulid' columns\n        DB::statement(\"\n            UPDATE {$tableName}\n            SET {$ulidColumn} = (\n                SELECT ulid FROM {$refTable} WHERE {$refTable}.id = {$tableName}.{$fkColumn}\n            )\n            WHERE {$fkColumn} IS NOT NULL\n        \");\n    }\n\n    /**\n     * Add a ULID morph column and populate by looking up each morph type.\n     * Handles both morph aliases ('company') and full class names ('App\\Models\\Company').\n     */\n    private function addAndPopulateMorphUlid(string $tableName, string $morphName): void\n    {\n        $morphIdColumn = $morphName.'_id';\n        $morphTypeColumn = $morphName.'_type';\n        $morphUlidColumn = $morphIdColumn.'_ulid';\n\n        // Add ULID column\n        Schema::table($tableName, function (Blueprint $table) use ($morphIdColumn, $morphUlidColumn): void {\n            $table->char($morphUlidColumn, 26)->nullable()->after($morphIdColumn);\n        });\n\n        // Populate for each morph type using aliases (e.g., 'company', 'people')\n        // These match what's stored in the database via Relation::enforceMorphMap()\n        foreach ($this->morphTypes as $morphAlias => $refTable) {\n            // At this point, core tables have both 'id' (integer) and 'ulid' columns\n            DB::statement(\"\n                UPDATE {$tableName}\n                SET {$morphUlidColumn} = (\n                    SELECT ulid FROM {$refTable} WHERE {$refTable}.id = {$tableName}.{$morphIdColumn}\n                )\n                WHERE {$morphTypeColumn} = '{$morphAlias}'\n                AND {$morphIdColumn} IS NOT NULL\n            \");\n        }\n\n        // SPECIAL CASE: Handle full class names (e.g., Spatie Media Library)\n        // Check if any rows still have NULL after alias-based population\n        $nullCount = DB::table($tableName)\n            ->whereNull($morphUlidColumn)\n            ->whereNotNull($morphIdColumn)\n            ->count();\n\n        if ($nullCount > 0) {\n            // Populate using full class name mapping\n            $fullClassMap = [\n                User::class => 'users',\n                Team::class => 'teams',\n                Company::class => 'companies',\n                People::class => 'people',\n                Opportunity::class => 'opportunities',\n                Task::class => 'tasks',\n                Note::class => 'notes',\n                'App\\\\Models\\\\Import' => 'imports',\n                Export::class => 'exports',\n                'App\\\\Models\\\\SystemAdministrator' => 'system_administrators',\n            ];\n\n            foreach ($fullClassMap as $fullClass => $refTable) {\n                DB::statement(\"\n                    UPDATE {$tableName}\n                    SET {$morphUlidColumn} = (\n                        SELECT ulid FROM {$refTable} WHERE {$refTable}.id = {$tableName}.{$morphIdColumn}\n                    )\n                    WHERE {$morphTypeColumn} = '{$fullClass}'\n                    AND {$morphIdColumn} IS NOT NULL\n                \");\n            }\n        }\n    }\n\n    // =========================================================================\n    // Helper Methods - Phase B (Cutover)\n    // =========================================================================\n\n    /**\n     * Cutover a primary key from integer to ULID.\n     *\n     * MySQL requires removing AUTO_INCREMENT before dropping the primary key (Error 1075).\n     * PostgreSQL uses sequences — this step is unnecessary and skipped.\n     */\n    private function cutoverPrimaryKey(string $table): void\n    {\n        $driver = DB::getDriverName();\n\n        if ($driver === 'mysql') {\n            Schema::table($table, function (Blueprint $blueprint): void {\n                $blueprint->unsignedBigInteger('id')->change();\n            });\n        }\n\n        Schema::table($table, function (Blueprint $blueprint): void {\n            $blueprint->dropPrimary(['id']);\n        });\n\n        Schema::table($table, function (Blueprint $blueprint): void {\n            $blueprint->dropColumn('id');\n        });\n\n        Schema::table($table, function (Blueprint $blueprint): void {\n            $blueprint->renameColumn('ulid', 'id');\n        });\n\n        Schema::table($table, function (Blueprint $blueprint): void {\n            $blueprint->primary('id');\n        });\n    }\n\n    /**\n     * Cutover a foreign key column: drop old, rename ULID column.\n     */\n    private function cutoverForeignKeyColumn(string $tableName, string $fkColumn): void\n    {\n        $ulidColumn = $fkColumn.'_ulid';\n\n        // Drop old integer column\n        Schema::table($tableName, function (Blueprint $table) use ($fkColumn): void {\n            $table->dropColumn($fkColumn);\n        });\n\n        // Rename ULID column to original name\n        Schema::table($tableName, function (Blueprint $table) use ($fkColumn, $ulidColumn): void {\n            $table->renameColumn($ulidColumn, $fkColumn);\n        });\n    }\n\n    /**\n     * Cutover a morph column: drop old, rename ULID column, recreate index.\n     */\n    private function cutoverMorphColumn(string $tableName, string $morphName): void\n    {\n        $morphIdColumn = $morphName.'_id';\n        $morphTypeColumn = $morphName.'_type';\n        $morphUlidColumn = $morphIdColumn.'_ulid';\n\n        // Drop index if exists\n        try {\n            Schema::table($tableName, function (Blueprint $table) use ($tableName, $morphTypeColumn, $morphIdColumn): void {\n                $table->dropIndex(\"{$tableName}_{$morphTypeColumn}_{$morphIdColumn}_index\");\n            });\n        } catch (Throwable) {\n            // Index might not exist\n        }\n\n        // Drop old morph id column\n        Schema::table($tableName, function (Blueprint $table) use ($morphIdColumn): void {\n            $table->dropColumn($morphIdColumn);\n        });\n\n        // Rename ULID column to original name\n        Schema::table($tableName, function (Blueprint $table) use ($morphIdColumn, $morphUlidColumn): void {\n            $table->renameColumn($morphUlidColumn, $morphIdColumn);\n        });\n\n        // Recreate index\n        Schema::table($tableName, function (Blueprint $table) use ($morphTypeColumn, $morphIdColumn): void {\n            $table->index([$morphTypeColumn, $morphIdColumn]);\n        });\n    }\n\n    // =========================================================================\n    // SQLite Implementation (for tests)\n    // =========================================================================\n\n    /**\n     * Migration for SQLite (used in tests).\n     * Uses table rebuild approach due to SQLite limitations.\n     */\n    private function migrateForSqlite(): void\n    {\n        DB::statement('PRAGMA foreign_keys = OFF');\n\n        // SQLite requires table rebuilds to change column types\n        // This simplified approach works for fresh test databases\n\n        // Core entity tables\n        foreach ($this->coreEntityTables as $table) {\n            $this->rebuildTableWithUlidPrimarySqlite($table);\n        }\n\n        // Other entity tables\n        foreach ($this->otherEntityTables as $table) {\n            $this->rebuildTableWithUlidPrimarySqlite($table);\n        }\n\n        // Pivot tables - rebuild with ULID foreign keys (keep integer id)\n        $this->rebuildPivotTableSqlite('team_user', ['team_id', 'user_id']);\n        $this->rebuildPivotTableSqlite('task_user', ['task_id', 'user_id']);\n        $this->rebuildPivotWithMorphSqlite('taskables', 'task_id', 'taskable_id');\n        $this->rebuildPivotWithMorphSqlite('noteables', 'note_id', 'noteable_id');\n\n        // Polymorphic tables - rebuild with ULID morph columns\n        $this->rebuildMorphTableSqlite('notifications', 'notifiable_id');\n        $this->rebuildMorphTableSqlite('media', 'model_id');\n        $this->rebuildMorphTableSqlite('ai_summaries', 'summarizable_id');\n        $this->rebuildMorphTableSqlite('personal_access_tokens', 'tokenable_id');\n        $this->rebuildMorphTableSqlite('custom_field_values', 'entity_id');\n\n        // Tenant-scoped tables - rebuild foreign keys\n        $this->rebuildForeignKeysSqlite('sessions', ['user_id']);\n        $this->rebuildForeignKeysSqlite('custom_fields', ['tenant_id']);\n        $this->rebuildForeignKeysSqlite('custom_field_options', ['tenant_id']);\n        $this->rebuildForeignKeysSqlite('custom_field_sections', ['tenant_id']);\n        // custom_field_values tenant_id already handled above\n\n        DB::statement('PRAGMA foreign_keys = ON');\n    }\n\n    /**\n     * Rebuild a table with ULID primary key (SQLite).\n     */\n    private function rebuildTableWithUlidPrimarySqlite(string $tableName): void\n    {\n        $columns = DB::select(\"PRAGMA table_info({$tableName})\");\n        $columnDefs = [];\n        $columnNames = [];\n\n        foreach ($columns as $col) {\n            $columnNames[] = $col->name;\n            if ($col->name === 'id') {\n                // Change id to TEXT for ULID\n                $columnDefs[] = 'id TEXT PRIMARY KEY';\n            } else {\n                $type = $col->type;\n                $nullable = $col->notnull ? '' : '';\n                $default = $col->dflt_value !== null ? \" DEFAULT {$col->dflt_value}\" : '';\n                $columnDefs[] = \"{$col->name} {$type}{$nullable}{$default}\";\n            }\n        }\n\n        // Create new table\n        $columnDefsStr = implode(', ', $columnDefs);\n        DB::statement(\"CREATE TABLE {$tableName}_new ({$columnDefsStr})\");\n\n        // Copy data (excluding id, we'll generate new ULIDs)\n        $otherColumns = array_filter($columnNames, fn ($c): bool => $c !== 'id');\n        if ($otherColumns !== []) {\n            $otherColumnsStr = implode(', ', $otherColumns);\n            $rows = DB::select(\"SELECT {$otherColumnsStr} FROM {$tableName}\");\n            foreach ($rows as $row) {\n                $values = [(string) Str::ulid()];\n                $placeholders = ['?'];\n                foreach ($otherColumns as $col) {\n                    $values[] = $row->$col;\n                    $placeholders[] = '?';\n                }\n                $placeholdersStr = implode(', ', $placeholders);\n                DB::insert(\"INSERT INTO {$tableName}_new (id, {$otherColumnsStr}) VALUES ({$placeholdersStr})\", $values);\n            }\n        }\n\n        // Swap tables\n        DB::statement(\"DROP TABLE {$tableName}\");\n        DB::statement(\"ALTER TABLE {$tableName}_new RENAME TO {$tableName}\");\n    }\n\n    /**\n     * Rebuild pivot table with ULID foreign keys (SQLite).\n     *\n     * @param  array<string>  $foreignKeys\n     */\n    private function rebuildPivotTableSqlite(string $tableName, array $foreignKeys): void\n    {\n        $columns = DB::select(\"PRAGMA table_info({$tableName})\");\n        $columnDefs = [];\n        $columnNames = [];\n\n        foreach ($columns as $col) {\n            $columnNames[] = $col->name;\n            if (in_array($col->name, $foreignKeys, true)) {\n                // Change foreign keys to TEXT for ULID\n                $columnDefs[] = \"{$col->name} TEXT\";\n            } else {\n                $type = $col->type;\n                $pk = $col->pk ? ' PRIMARY KEY AUTOINCREMENT' : '';\n                $columnDefs[] = \"{$col->name} {$type}{$pk}\";\n            }\n        }\n\n        $columnDefsStr = implode(', ', $columnDefs);\n        DB::statement(\"CREATE TABLE {$tableName}_new ({$columnDefsStr})\");\n\n        // No data to copy for fresh tests\n        DB::statement(\"DROP TABLE {$tableName}\");\n        DB::statement(\"ALTER TABLE {$tableName}_new RENAME TO {$tableName}\");\n    }\n\n    /**\n     * Rebuild pivot table with morph (SQLite).\n     */\n    private function rebuildPivotWithMorphSqlite(string $tableName, string $fkColumn, string $morphIdColumn): void\n    {\n        $columns = DB::select(\"PRAGMA table_info({$tableName})\");\n        $columnDefs = [];\n\n        foreach ($columns as $col) {\n            if ($col->name === $fkColumn || $col->name === $morphIdColumn) {\n                $columnDefs[] = \"{$col->name} TEXT\";\n            } else {\n                $type = $col->type;\n                $pk = $col->pk ? ' PRIMARY KEY AUTOINCREMENT' : '';\n                $columnDefs[] = \"{$col->name} {$type}{$pk}\";\n            }\n        }\n\n        $columnDefsStr = implode(', ', $columnDefs);\n        DB::statement(\"CREATE TABLE {$tableName}_new ({$columnDefsStr})\");\n        DB::statement(\"DROP TABLE {$tableName}\");\n        DB::statement(\"ALTER TABLE {$tableName}_new RENAME TO {$tableName}\");\n    }\n\n    /**\n     * Rebuild morph table (SQLite).\n     */\n    private function rebuildMorphTableSqlite(string $tableName, string $morphIdColumn): void\n    {\n        $columns = DB::select(\"PRAGMA table_info({$tableName})\");\n        $columnDefs = [];\n\n        foreach ($columns as $col) {\n            if ($col->name === $morphIdColumn) {\n                $columnDefs[] = \"{$col->name} TEXT\";\n            } else {\n                $type = $col->type;\n                $pk = $col->pk ? ' PRIMARY KEY AUTOINCREMENT' : '';\n                $columnDefs[] = \"{$col->name} {$type}{$pk}\";\n            }\n        }\n\n        $columnDefsStr = implode(', ', $columnDefs);\n        DB::statement(\"CREATE TABLE {$tableName}_new ({$columnDefsStr})\");\n        DB::statement(\"DROP TABLE {$tableName}\");\n        DB::statement(\"ALTER TABLE {$tableName}_new RENAME TO {$tableName}\");\n    }\n\n    /**\n     * Rebuild table with ULID foreign keys (SQLite).\n     *\n     * @param  array<string>  $foreignKeys\n     */\n    private function rebuildForeignKeysSqlite(string $tableName, array $foreignKeys): void\n    {\n        $columns = DB::select(\"PRAGMA table_info({$tableName})\");\n        $columnDefs = [];\n\n        foreach ($columns as $col) {\n            if (in_array($col->name, $foreignKeys, true)) {\n                $columnDefs[] = \"{$col->name} TEXT\";\n            } else {\n                $type = $col->type;\n                $pk = $col->pk ? ' PRIMARY KEY' : '';\n                $columnDefs[] = \"{$col->name} {$type}{$pk}\";\n            }\n        }\n\n        $columnDefsStr = implode(', ', $columnDefs);\n        DB::statement(\"CREATE TABLE {$tableName}_new ({$columnDefsStr})\");\n        DB::statement(\"DROP TABLE {$tableName}\");\n        DB::statement(\"ALTER TABLE {$tableName}_new RENAME TO {$tableName}\");\n    }\n\n    // =========================================================================\n    // Utility Methods\n    // =========================================================================\n\n    /**\n     * Check if a column is already using ULID (char/string type).\n     */\n    private function isAlreadyUlid(string $table, string $column): bool\n    {\n        if (! Schema::hasTable($table) || ! Schema::hasColumn($table, $column)) {\n            return false;\n        }\n\n        $columnType = Schema::getColumnType($table, $column);\n\n        return in_array($columnType, ['string', 'char', 'varchar', 'bpchar', 'text'], true);\n    }\n};\n"
  },
  {
    "path": "database/migrations/2025_12_27_122241_convert_order_column_to_decimal_and_regenerate_positions.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Relaticle\\Flowforge\\Services\\DecimalPosition;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        // Convert tasks table order_column from VARCHAR to DECIMAL\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->decimal('order_column', 20, 10)->nullable();\n        });\n\n        // Regenerate positions for tasks\n        $this->regenerateTaskPositions();\n\n        // Convert opportunities table order_column from VARCHAR to DECIMAL\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->decimal('order_column', 20, 10)->nullable();\n        });\n\n        // Regenerate positions for opportunities\n        $this->regenerateOpportunityPositions();\n    }\n\n    /**\n     * Regenerate positions for tasks using DecimalPosition service.\n     */\n    private function regenerateTaskPositions(): void\n    {\n        // Get all tasks with their status information, grouped by team and status\n        // CRITICAL: Preserve existing order_column (user's manual arrangement) when regenerating positions\n        $tasks = DB::select(\"\n            SELECT\n                t.id,\n                t.team_id,\n                COALESCE(cfv.integer_value, 0) as status_id\n            FROM tasks t\n            LEFT JOIN custom_field_values cfv ON (\n                t.id = cfv.entity_id\n                AND cfv.custom_field_id = (\n                    SELECT id FROM custom_fields\n                    WHERE code = 'status'\n                    AND entity_type = 'App\\\\\\\\Models\\\\\\\\Task'\n                    LIMIT 1\n                )\n            )\n            ORDER BY t.team_id, status_id, t.order_column IS NULL, t.order_column, t.id\n        \");\n\n        // Group tasks by team and status\n        $groupedTasks = [];\n        foreach ($tasks as $task) {\n            $key = \"{$task->team_id}_{$task->status_id}\";\n            $groupedTasks[$key][] = $task;\n        }\n\n        // Set positions for each group using DecimalPosition\n        foreach ($groupedTasks as $tasks) {\n            $this->setPositionsForGroup($tasks, 'tasks');\n        }\n    }\n\n    /**\n     * Regenerate positions for opportunities using DecimalPosition service.\n     */\n    private function regenerateOpportunityPositions(): void\n    {\n        // Get all opportunities with their stage information, grouped by team and stage\n        // CRITICAL: Preserve existing order_column (user's manual arrangement) when regenerating positions\n        $opportunities = DB::select(\"\n            SELECT\n                o.id,\n                o.team_id,\n                COALESCE(cfv.integer_value, 0) as stage_id\n            FROM opportunities o\n            LEFT JOIN custom_field_values cfv ON (\n                o.id = cfv.entity_id\n                AND cfv.custom_field_id = (\n                    SELECT id FROM custom_fields\n                    WHERE code = 'stage'\n                    AND entity_type = 'App\\\\\\\\Models\\\\\\\\Opportunity'\n                    LIMIT 1\n                )\n            )\n            ORDER BY o.team_id, stage_id, o.order_column IS NULL, o.order_column, o.id\n        \");\n\n        // Group opportunities by team and stage\n        $groupedOpportunities = [];\n        foreach ($opportunities as $opportunity) {\n            $key = \"{$opportunity->team_id}_{$opportunity->stage_id}\";\n            $groupedOpportunities[$key][] = $opportunity;\n        }\n\n        // Set positions for each group using DecimalPosition\n        foreach ($groupedOpportunities as $opportunities) {\n            $this->setPositionsForGroup($opportunities, 'opportunities');\n        }\n    }\n\n    /**\n     * Set positions for a group of records using DecimalPosition.\n     *\n     * @param  array<int, object{id: string, team_id: string}>  $records  Array of records with id property\n     * @param  string  $table  Table name ('tasks' or 'opportunities')\n     */\n    private function setPositionsForGroup(array $records, string $table): void\n    {\n        if ($records === []) {\n            return;\n        }\n\n        $count = count($records);\n\n        // Generate sequential positions using DecimalPosition\n        $positions = DecimalPosition::generateSequence($count);\n\n        // Update database with new positions\n        foreach ($records as $index => $record) {\n            DB::table($table)\n                ->where('id', $record->id)\n                ->update(['order_column' => $positions[$index]]);\n        }\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        // Revert tasks table\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('tasks', function (Blueprint $table): void {\n            $table->string('order_column')->nullable();\n        });\n\n        // Revert opportunities table\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->dropColumn('order_column');\n        });\n\n        Schema::table('opportunities', function (Blueprint $table): void {\n            $table->string('order_column')->nullable();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_02_152157_update_phone_number_custom_fields_type.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        // Get all phone_number custom field IDs that are currently text type\n        /** @var Collection<int, int|string> */\n        $phoneFieldIds = DB::table('custom_fields')\n            ->where('code', 'phone_number')\n            ->where('type', 'text')\n            ->pluck('id');\n\n        if ($phoneFieldIds->isEmpty()) {\n            return;\n        }\n\n        // Update the field type from text to phone\n        DB::table('custom_fields')\n            ->whereIn('id', $phoneFieldIds)\n            ->update(['type' => 'phone']);\n\n        // Migrate values from text_value to json_value (as JSON array)\n        // Phone type uses multiChoice schema which stores values in json_value\n        // NOTE: Uses lazyById() instead of each() to avoid OFFSET pagination bug\n        // where updating rows causes them to drop from the result set, skipping subsequent rows.\n        DB::table('custom_field_values')\n            ->whereIn('custom_field_id', $phoneFieldIds)\n            ->whereNotNull('text_value')\n            ->whereNull('json_value')\n            ->lazyById(100)\n            ->each(function (object $row): void {\n                DB::table('custom_field_values')\n                    ->where('id', $row->id)\n                    ->update([\n                        'json_value' => json_encode([$row->text_value]),\n                        'text_value' => null,\n                    ]);\n            });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_01_12_225824_upgrade_custom_fields_to_v3.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\Artisan;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        // Allow long-running migration\n        set_time_limit(0);\n        ini_set('memory_limit', '2048M');\n\n        //\n        Artisan::call('custom-fields:upgrade', [\n            '--force' => true,\n            '--skip' => 'clear-caches',\n        ]);\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_11_232804_add_slug_to_teams_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Support\\Str;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('teams', function (Blueprint $table): void {\n            $table->string('slug')->nullable()->after('name');\n        });\n\n        $this->backfillSlugs();\n\n        Schema::table('teams', function (Blueprint $table): void {\n            $table->string('slug')->nullable(false)->unique()->change();\n        });\n    }\n\n    private function backfillSlugs(): void\n    {\n        $teams = DB::table('teams')->oldest()->get();\n        $usedSlugs = [];\n\n        foreach ($teams as $team) {\n            $baseSlug = Str::slug($team->name);\n\n            if ($baseSlug === '') {\n                $baseSlug = Str::lower(Str::random(8));\n            }\n\n            $slug = $baseSlug;\n            $counter = 2;\n\n            while (in_array($slug, $usedSlugs, true)) {\n                $slug = \"{$baseSlug}-{$counter}\";\n                $counter++;\n            }\n\n            $usedSlugs[] = $slug;\n\n            DB::table('teams')->where('id', $team->id)->update(['slug' => $slug]);\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_12_222910_expand_imports_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('imports', function (Blueprint $table): void {\n            $table->string('entity_type')->nullable()->after('user_id');\n            $table->string('status')->default('uploading')->after('entity_type');\n\n            $table->json('headers')->nullable()->after('status');\n            $table->json('column_mappings')->nullable()->after('headers');\n            $table->json('results')->nullable()->after('column_mappings');\n            $table->json('failed_rows_data')->nullable()->after('results');\n\n            $table->unsignedInteger('created_rows')->default(0)->after('successful_rows');\n            $table->unsignedInteger('updated_rows')->default(0)->after('created_rows');\n            $table->unsignedInteger('skipped_rows')->default(0)->after('updated_rows');\n\n            $table->string('file_path')->nullable()->change();\n            $table->string('importer')->nullable()->change();\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_13_002721_cleanup_imports_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('imports', function (Blueprint $table): void {\n            $table->unsignedInteger('failed_rows')->default(0)->after('skipped_rows');\n        });\n\n        Schema::table('imports', function (Blueprint $table): void {\n            $table->dropColumn([\n                'file_path',\n                'importer',\n                'processed_rows',\n                'successful_rows',\n                'results',\n                'failed_rows_data',\n            ]);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_15_214730_drop_sessions_user_id_foreign_key.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        $hasForeignKey = collect(Schema::getForeignKeys('sessions'))\n            ->contains('name', 'sessions_user_id_foreign');\n\n        if (! $hasForeignKey) {\n            return;\n        }\n\n        Schema::table('sessions', function (Blueprint $table): void {\n            $table->dropForeign(['user_id']);\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_20_212853_add_team_id_to_personal_access_tokens_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        $this->ensureTeamsPrimaryKey();\n\n        Schema::table('personal_access_tokens', function (Blueprint $table): void {\n            $table->foreignUlid('team_id')->nullable()->after('tokenable_id')->index()->constrained('teams')->cascadeOnDelete();\n        });\n    }\n\n    /**\n     * The ULID migration may leave teams.id without a primary key on PostgreSQL.\n     * A foreign key constraint requires a unique/primary constraint on the referenced column.\n     */\n    private function ensureTeamsPrimaryKey(): void\n    {\n        if (DB::getDriverName() !== 'pgsql') {\n            return;\n        }\n\n        $hasPrimary = DB::selectOne(\n            \"SELECT 1 FROM pg_constraint WHERE conrelid = 'teams'::regclass AND contype = 'p'\"\n        );\n\n        if (! $hasPrimary) {\n            Schema::table('teams', function (Blueprint $table): void {\n                $table->primary('id');\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_02_25_124942_add_team_id_indexes_to_entity_tables.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /** @var array<int, string> */\n    private array $tables = ['companies', 'people', 'opportunities', 'tasks', 'notes'];\n\n    public function up(): void\n    {\n        foreach ($this->tables as $table) {\n            $indexName = \"idx_{$table}_team_activity\";\n\n            if (Schema::hasIndex($table, $indexName)) {\n                continue;\n            }\n\n            Schema::table($table, function (Blueprint $blueprint) use ($indexName): void {\n                $blueprint->index(\n                    ['team_id', 'deleted_at', 'creation_source', 'created_at'],\n                    $indexName,\n                );\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_15_201741_add_custom_field_value_filtering_indexes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('custom_field_values', function (Blueprint $table): void {\n            $table->index(['custom_field_id', 'float_value'], 'cfv_field_float_idx');\n            $table->index(['custom_field_id', 'date_value'], 'cfv_field_date_idx');\n            $table->index(['custom_field_id', 'datetime_value'], 'cfv_field_datetime_idx');\n            $table->index(['custom_field_id', 'string_value'], 'cfv_field_string_idx');\n            $table->index(['custom_field_id', 'integer_value'], 'cfv_field_integer_idx');\n            $table->index(['custom_field_id', 'boolean_value'], 'cfv_field_boolean_idx');\n        });\n    }\n};\n"
  },
  {
    "path": "database/migrations/2026_03_18_202956_add_expires_at_to_team_invitations_table.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::table('team_invitations', function (Blueprint $table): void {\n            $table->timestamp('expires_at')->nullable()->after('role');\n            $table->index('expires_at');\n        });\n    }\n};\n"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Seeders;\n\n// use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\n\nfinal class DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's database.\n     */\n    public function run(): void\n    {\n        $this->call([\n            LocalSeeder::class,\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/LocalSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Factories\\Sequence;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\Auth;\n\nfinal class LocalSeeder extends Seeder\n{\n    public function run(): void\n    {\n        if (! app()->isLocal()) {\n            $this->command->info('Skipping local seeding as the environment is not local.');\n\n            return;\n        }\n\n        $this->call(SystemAdministratorSeeder::class);\n\n        $user = User::factory()\n            ->withPersonalTeam()\n            ->create([\n                'name' => 'Manuk Minasyan',\n                'email' => 'manuk.minasyan1@gmail.com',\n            ]);\n\n        $teamId = $user->personalTeam()->id;\n        //\n        //        User::factory()\n        //            ->withPersonalTeam()\n        //            ->create([\n        //                'name' => 'Test User',\n        //                'email' => 'test@example.com',\n        //            ]);\n        //\n        //        // Create 10 Test Users\n        User::factory()\n            ->count(10)\n            ->create()\n            ->after(function (User $user) use ($teamId): void {\n                // Assign the user to the personal team.\n                $user->teams()->attach($teamId, [\n                    'role' => 'member',\n                ]);\n            });\n        //\n        //        // Set the current user and tenant.\n        //        Auth::setUser($user);\n        //        Filament::setTenant($user->personalTeam());\n        //\n        //        $customFields = CustomField::query()\n        //            ->whereIn('code', ['icp', 'stage', 'domain_name'])\n        //            ->get()\n        //            ->keyBy('code');\n        //\n        //        Company::factory()\n        //            ->for($user->personalTeam(), 'team')\n        //            ->count(50)\n        //            ->afterCreating(function (Company $company) use ($customFields): void {\n        //                $company->saveCustomFieldValue($customFields->get('domain_name'), 'https://'.fake()->domainName());\n        //                $company->saveCustomFieldValue($customFields->get('icp'), fake()->boolean(70));\n        //            })\n        //            ->create();\n        //\n        //        // Create people.\n        //        People::factory()\n        //            ->for($user->personalTeam(), 'team')\n        //            ->for($user->currentTeam->companies->random(), 'company')\n        //            ->state(new Sequence(\n        //                fn (Sequence $sequence): array => ['company_id' => $user->personalTeam()->companies->random()->id]\n        //            ))\n        //            ->count(500)->create();\n        //\n        //        // Create opportunities.\n        //        Opportunity::factory()->for($user->personalTeam(), 'team')\n        //            ->count(150)\n        //            ->afterCreating(function (Opportunity $opportunity) use ($customFields): void {\n        //                $opportunity->saveCustomFieldValue($customFields->get('stage'), $customFields->get('stage')->options->random()->id);\n        //            })\n        //            ->create();\n    }\n}\n"
  },
  {
    "path": "database/seeders/SystemAdministratorSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class SystemAdministratorSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        SystemAdministrator::query()->firstOrCreate(['email' => 'sysadmin@relaticle.com'], [\n            'name' => 'System Administrator',\n            'password' => bcrypt('password'),\n            'role' => SystemAdministratorRole::SuperAdministrator,\n            'email_verified_at' => now(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "lang/en/access-tokens.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    'title' => 'Access Tokens',\n\n    'sections' => [\n        'create' => [\n            'title' => 'Create Access Token',\n            'description' => 'Access tokens allow third-party services and AI agents to authenticate with our application on your behalf.',\n        ],\n        'manage' => [\n            'title' => 'Manage Access Tokens',\n            'description' => 'You may delete any of your existing tokens if they are no longer needed.',\n        ],\n    ],\n\n    'form' => [\n        'name' => 'Token Name',\n        'team' => 'Team',\n        'expiration' => 'Expiration',\n        'permissions' => 'Permissions',\n    ],\n\n    'actions' => [\n        'create' => 'Create',\n    ],\n\n    'modals' => [\n        'show_token' => [\n            'title' => 'Access Token',\n            'description' => 'Please copy your new access token. For your security, it won\\'t be shown again.',\n        ],\n        'permissions' => [\n            'title' => 'Access Token Permissions',\n        ],\n        'delete' => [\n            'title' => 'Delete Access Token',\n            'description' => 'Are you sure you would like to delete this access token?',\n        ],\n    ],\n\n    'notifications' => [\n        'permissions_updated' => 'Access token permissions updated.',\n        'deleted' => 'Access token deleted.',\n    ],\n\n    'empty_state' => [\n        'heading' => 'No access tokens',\n        'description' => 'Create a token above to get started.',\n    ],\n\n    'integrations' => [\n        'heading' => 'What to do next',\n        'api_link' => 'REST API',\n        'api_description' => 'Manage CRM data programmatically.',\n        'mcp_link' => 'MCP Server',\n        'mcp_description' => 'Connect AI assistants like Claude.',\n    ],\n\n    'user_menu' => 'Access Tokens',\n];\n"
  },
  {
    "path": "lang/en/profile.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    'form' => [\n        'name' => [\n            'label' => 'Name',\n        ],\n        'email' => [\n            'label' => 'Email',\n        ],\n        'profile_photo' => [\n            'label' => 'Photo',\n        ],\n        'current_password' => [\n            'label' => 'Current Password',\n        ],\n        'new_password' => [\n            'label' => 'New Password',\n        ],\n        'confirm_password' => [\n            'label' => 'Confirm Password',\n        ],\n        'password' => [\n            'label' => 'Password',\n        ],\n    ],\n\n    'sections' => [\n        'update_profile_information' => [\n            'title' => 'Profile Information',\n            'description' => 'Update your account\\'s profile information and email address.',\n        ],\n        'update_password' => [\n            'title' => 'Update Password',\n            'description' => 'Ensure your account is using a long, random password to stay secure.',\n        ],\n        'set_password' => [\n            'title' => 'Set Password',\n            'description' => 'Add a password to your account so you can also sign in with your email and password.',\n        ],\n        'browser_sessions' => [\n            'title' => 'Browser Sessions',\n            'description' => 'Manage and log out your active sessions on other browsers and devices.',\n            'notice' => 'If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.',\n            'labels' => [\n                'current_device' => 'This device',\n                'last_active' => 'Last active',\n                'unknown_device' => 'Unknown',\n            ],\n        ],\n        'delete_account' => [\n            'title' => 'Delete Account',\n            'description' => 'Permanently delete your account.',\n            'notice' => 'Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.',\n        ],\n    ],\n\n    'actions' => [\n        'save' => 'Save',\n        'delete_account' => 'Delete Account',\n        'log_out_other_browsers' => 'Log Out Other Browser Sessions',\n    ],\n\n    'notifications' => [\n        'save' => [\n            'success' => 'Saved.',\n        ],\n        'logged_out_other_sessions' => [\n            'success' => 'All other browser sessions have been logged out successfully.',\n        ],\n    ],\n\n    'modals' => [\n        'delete_account' => [\n            'notice' => 'Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.',\n            'notice_no_password' => 'Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted.',\n        ],\n        'log_out_other_browsers' => [\n            'title' => 'Log Out Other Browser Sessions',\n            'description' => 'Enter your password to confirm you would like to log out of your other browser sessions across all of your devices.',\n            'description_no_password' => 'Are you sure you would like to log out of your other browser sessions across all of your devices?',\n        ],\n    ],\n\n    'edit_profile' => 'Edit Profile',\n];\n"
  },
  {
    "path": "lang/en/teams.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    'form' => [\n        'team_name' => [\n            'label' => 'Team Name',\n        ],\n        'team_slug' => [\n            'label' => 'Team Slug',\n            'helper_text' => 'Only lowercase letters, numbers, and hyphens. This appears in your team URL.',\n        ],\n        'email' => [\n            'label' => 'Email',\n        ],\n    ],\n\n    'sections' => [\n        'update_team_name' => [\n            'title' => 'Team Name',\n            'description' => 'The team\\'s name and owner information.',\n        ],\n        'add_team_member' => [\n            'title' => 'Add Team Member',\n            'description' => 'Add a new team member to your team, allowing them to collaborate with you.',\n            'notice' => 'Please provide the email address of the person you would like to add to this team.',\n        ],\n        'team_members' => [\n            'title' => 'Team Members',\n            'description' => 'All of the people that are part of this team.',\n        ],\n        'pending_team_invitations' => [\n            'title' => 'Pending Team Invitations',\n            'description' => 'These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.',\n        ],\n        'delete_team' => [\n            'title' => 'Delete Team',\n            'description' => 'Permanently delete this team.',\n            'notice' => 'Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information that you wish to retain.',\n        ],\n    ],\n\n    'actions' => [\n        'save' => 'Save',\n        'add_team_member' => 'Add',\n        'update_team_role' => 'Manage Role',\n        'remove_team_member' => 'Remove',\n        'leave_team' => 'Leave',\n        'resend_team_invitation' => 'Resend',\n        'extend_team_invitation' => 'Extend',\n        'copy_invite_link' => 'Copy Link',\n        'cancel_team_invitation' => 'Cancel',\n        'delete_team' => 'Delete Team',\n    ],\n\n    'notifications' => [\n        'save' => [\n            'success' => 'Saved.',\n        ],\n        'team_invitation_sent' => [\n            'success' => 'Team invitation sent.',\n        ],\n        'team_invitation_cancelled' => [\n            'success' => 'Team invitation cancelled.',\n        ],\n        'team_invitation_extended' => [\n            'success' => 'Team invitation extended.',\n        ],\n        'invite_link_copied' => [\n            'success' => 'Invite link copied to clipboard.',\n        ],\n        'team_member_removed' => [\n            'success' => 'You have removed this team member.',\n        ],\n        'leave_team' => [\n            'success' => 'You have left the team.',\n        ],\n        'team_deleted' => [\n            'success' => 'Team deleted!',\n        ],\n        'permission_denied' => [\n            'cannot_update_team_member' => 'You do not have permission to update this team member.',\n            'cannot_leave_team' => 'You may not leave a team that you created.',\n            'cannot_remove_team_member' => 'You do not have permission to remove this team member.',\n        ],\n    ],\n\n    'validation' => [\n        'email_already_invited' => 'This user has already been invited to the team.',\n    ],\n\n    'modals' => [\n        'leave_team' => [\n            'notice' => 'Are you sure you would like to leave this team?',\n        ],\n        'delete_team' => [\n            'notice' => 'Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.',\n        ],\n    ],\n\n    'edit_team' => 'Edit Team',\n];\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite\",\n        \"prebuild\": \"rm -f public/hot\",\n        \"build\": \"vite build\"\n    },\n    \"devDependencies\": {\n        \"@tailwindcss/forms\": \"^0.5.11\",\n        \"@tailwindcss/typography\": \"^0.5.19\",\n        \"autoprefixer\": \"^10.4.27\",\n        \"chokidar\": \"^5.0.0\",\n        \"laravel-vite-plugin\": \"^2.1\",\n        \"playwright\": \"^1.54.1\",\n        \"postcss\": \"^8.5.8\",\n        \"postcss-nesting\": \"^14.0.0\",\n        \"tailwindcss\": \"^4.2.1\",\n        \"vite\": \"^7.3\"\n    },\n    \"dependencies\": {\n        \"@alpinejs/collapse\": \"^3.15.10\",\n        \"@tailwindcss/vite\": \"^4.2.1\",\n        \"alpinejs\": \"^3.15.10\",\n        \"motion\": \"^12.34.3\",\n        \"shiki\": \"^4.0.2\"\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/README.md",
    "content": "# Documentation Package\n\nA dedicated documentation package for the Relaticle application with a modern, customized frontend architecture.\n\n## Features\n\n- Modern frontend architecture with TailwindCSS 3 and Alpine.js 3\n- Responsive design with mobile-first approach\n- Dark mode support with system preference detection\n- Interactive table of contents with active state highlighting\n- Code block syntax highlighting with copy functionality\n- Search functionality with highlighted results\n- Custom callout components for warnings, tips, notes\n- Keyboard navigation and accessibility improvements\n- Print styles for documentation pages\n\n## Installation\n\nThe Documentation package is included in the Relaticle application by default. If you need to install it manually:\n\n```bash\n# Publish the package's resources\nphp artisan vendor:publish --tag=documentation-views\nphp artisan vendor:publish --tag=documentation-markdown\nphp artisan vendor:publish --tag=documentation-config\n\n# Install dependencies\ncd packages/Documentation\nnpm install\n\n# Build assets\nnpm run build\n```\n\n## Development\n\nTo work on the Documentation package's frontend:\n\n```bash\n# Start the Vite development server\ncd packages/Documentation\nnpm run dev\n```\n\n## Asset Architecture\n\nThe Documentation package uses a dedicated asset pipeline with separate CSS and JS files:\n\n- `resources/css/documentation.css`: Main CSS file with Tailwind directives\n- `resources/js/documentation.js`: Main JS file with Alpine.js components\n- `tailwind.config.js`: TailwindCSS configuration for the Documentation package\n- `vite.config.js`: Vite configuration for the Documentation package\n\n## Components\n\n### Layout Components\n- `<x-documentation::layout>`: The main layout component for documentation pages\n- `<x-documentation::content>`: The content component for documentation pages\n\n### UI Components\n- `<x-documentation::callout>`: Callout component for warnings, tips, notes\n\n## Usage\n\nTo render a documentation page:\n\n```php\n<x-documentation::layout :title=\"$documentTitle\">\n    <x-documentation::content :content=\"$documentContent\" />\n</x-documentation::layout>\n```\n\nTo create a callout:\n\n```php\n<x-documentation::callout type=\"tip\" title=\"Quick Tip\">\n    This is a helpful tip for the documentation.\n</x-documentation::callout>\n```\n\nAvailable callout types:\n- `info` (default)\n- `warning`\n- `danger`\n- `tip`\n\n## Customization\n\n### Styling\nThe Documentation package uses TailwindCSS 3 with a custom configuration. You can customize the styles by editing:\n\n- `tailwind.config.js`: Colors, typography, and other Tailwind settings\n- `resources/css/documentation.css`: Custom components and utilities\n\n### Templates\nThe Documentation package's templates are located in:\n\n- `resources/views/components/`: Blade components\n- `resources/views/`: Blade templates\n\n## Accessibility\n\nThe Documentation package is designed with accessibility in mind:\n\n- Proper ARIA attributes on interactive elements\n- Keyboard navigation for all features\n- Focus management for interactive components\n- Color contrast meeting WCAG AA standards\n- Dark mode support for reduced eye strain\n\n## Browser Support\n\nThe Documentation package supports all modern browsers:\n\n- Chrome (latest)\n- Firefox (latest)\n- Safari (latest)\n- Edge (latest)\n\n## License\n\nThe Documentation package is open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).\n"
  },
  {
    "path": "packages/Documentation/config/documentation.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Settings\n    |--------------------------------------------------------------------------\n    |\n    | These options control the caching behavior of the documentation package.\n    |\n    */\n    'cache' => [\n        'enabled' => env('DOCUMENTATION_CACHE_ENABLED', true),\n        'ttl' => env('DOCUMENTATION_CACHE_TTL', 3600), // In seconds\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Search Settings\n    |--------------------------------------------------------------------------\n    |\n    | Controls search functionality behavior and constraints.\n    |\n    */\n    'search' => [\n        'enabled' => true,\n        'min_length' => 3,\n        'highlight' => true,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Documentation Types\n    |--------------------------------------------------------------------------\n    |\n    | Defines the types of documentation available in the system.\n    |\n    */\n    'documents' => [\n        'getting-started' => [\n            'title' => 'Getting Started',\n            'file' => 'getting-started.md',\n            'description' => 'Set up your account and learn the basics.',\n        ],\n        'import' => [\n            'title' => 'Import Guide',\n            'file' => 'import-guide.md',\n            'description' => 'Import data from CSV files.',\n        ],\n        'developer' => [\n            'title' => 'Developer Guide',\n            'file' => 'developer-guide.md',\n            'description' => 'Installation, architecture, and contributing.',\n        ],\n        'self-hosting' => [\n            'title' => 'Self-Hosting Guide',\n            'file' => 'self-hosting-guide.md',\n            'description' => 'Deploy Relaticle with Docker or manually.',\n        ],\n        'mcp' => [\n            'title' => 'MCP Server',\n            'file' => 'mcp-guide.md',\n            'description' => 'Connect AI assistants like Claude to your CRM.',\n        ],\n        'api' => [\n            'title' => 'API Reference',\n            'url' => '/docs/api',\n            'description' => 'REST API documentation for managing CRM entities.',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Markdown Processing\n    |--------------------------------------------------------------------------\n    |\n    | Settings for markdown processing and rendering.\n    |\n    */\n    'markdown' => [\n        'allow_html' => false,\n        'code_highlighting' => true,\n        'table_of_contents' => true,\n        'base_path' => base_path('packages/Documentation/resources/markdown'),\n    ],\n];\n"
  },
  {
    "path": "packages/Documentation/resources/css/documentation.css",
    "content": "@import 'tailwindcss';\n\n@import \"~/css/theme.css\";\n\nmark {\n    background: oklch(0.42 0.24 287.23 / 0.1);\n    color: inherit;\n    padding: 1px 3px;\n    border-radius: 3px;\n}\n\n:is(.dark) mark {\n    background: oklch(0.42 0.24 287.23 / 0.2);\n}\n\n#documentation-content {\n    h1,\n    h2,\n    h3 {\n        @apply font-display relative;\n    }\n\n    h2,\n    h3 {\n        @apply cursor-pointer w-fit;\n    }\n\n    .heading-permalink {\n        @apply absolute -left-6 top-1/2 -translate-y-1/2 opacity-0 text-gray-300 dark:text-gray-600 transition-all no-underline;\n    }\n\n    h2:hover .heading-permalink,\n    h3:hover .heading-permalink {\n        @apply opacity-100 text-[var(--color-primary)] dark:text-[var(--color-primary-400)];\n    }\n\n    h1 .heading-permalink {\n        @apply hidden;\n    }\n\n    /* Code block wrapper for sticky copy button */\n    .code-block-wrapper {\n        @apply relative rounded-lg bg-gray-900 dark:bg-gray-950;\n        margin: 1rem 0;\n    }\n\n    .code-block-wrapper pre {\n        @apply rounded-lg bg-transparent text-gray-100 text-sm leading-relaxed overflow-x-auto m-0;\n        padding: 1rem 1.25rem;\n    }\n\n    /* Standalone pre without wrapper */\n    pre:not(.code-block-wrapper pre) {\n        @apply rounded-lg bg-gray-900 dark:bg-gray-950 text-gray-100 text-sm leading-relaxed overflow-x-auto;\n        padding: 1rem 1.25rem;\n        margin: 1rem 0;\n    }\n\n    pre code {\n        @apply bg-transparent p-0 text-sm font-mono;\n        white-space: pre;\n        word-spacing: normal;\n        word-break: normal;\n        tab-size: 4;\n    }\n\n    /* Inline code */\n    :not(pre) > code {\n        @apply bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200 px-1.5 py-0.5 rounded text-sm font-mono;\n    }\n\n    /* Copy button - positioned on wrapper, stays fixed during scroll */\n    .copy-button {\n        @apply absolute top-2 right-2 p-1.5 rounded-md bg-gray-700/80 hover:bg-gray-600 text-gray-400 hover:text-gray-200 transition-all opacity-0 cursor-pointer border-0 flex items-center justify-center w-8 h-8 z-10;\n    }\n\n    .code-block-wrapper:hover .copy-button,\n    pre:hover > .copy-button {\n        @apply opacity-100;\n    }\n\n    .copy-button.copied {\n        @apply text-green-400;\n    }\n\n    .copy-button svg {\n        @apply w-4 h-4 shrink-0;\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/resources/js/documentation.js",
    "content": "// Copy button functionality for code blocks\nfunction addCopyButtons() {\n    const codeBlocks = document.querySelectorAll('pre code');\n\n    codeBlocks.forEach((codeBlock) => {\n        const pre = codeBlock.parentElement;\n\n        // Skip if already wrapped\n        if (pre.parentElement?.classList.contains('code-block-wrapper')) return;\n\n        // Create wrapper div to hold pre and copy button\n        const wrapper = document.createElement('div');\n        wrapper.className = 'code-block-wrapper';\n\n        // Insert wrapper before pre and move pre inside\n        pre.parentNode.insertBefore(wrapper, pre);\n        wrapper.appendChild(pre);\n\n        // Create copy button\n        const copyButton = document.createElement('button');\n        copyButton.className = 'copy-button';\n        copyButton.setAttribute('aria-label', 'Copy code to clipboard');\n        copyButton.innerHTML = `\n            <svg class=\"copy-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n                <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n            </svg>\n            <svg class=\"check-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"display: none;\">\n                <polyline points=\"20 6 9 17 4 12\"></polyline>\n            </svg>\n        `;\n\n        // Add click handler\n        copyButton.addEventListener('click', async () => {\n            const text = codeBlock.textContent;\n\n            try {\n                await navigator.clipboard.writeText(text);\n\n                // Show success state with subtle feedback\n                copyButton.classList.add('copied');\n                copyButton.querySelector('.copy-icon').style.display = 'none';\n                copyButton.querySelector('.check-icon').style.display = 'block';\n\n                // Reset after 1.5 seconds\n                setTimeout(() => {\n                    copyButton.classList.remove('copied');\n                    copyButton.querySelector('.copy-icon').style.display = 'block';\n                    copyButton.querySelector('.check-icon').style.display = 'none';\n                }, 1500);\n            } catch (err) {\n                // Fallback for older browsers\n                const textArea = document.createElement('textarea');\n                textArea.value = text;\n                textArea.style.position = 'fixed';\n                textArea.style.opacity = '0';\n                document.body.appendChild(textArea);\n                textArea.select();\n\n                try {\n                    document.execCommand('copy');\n                    copyButton.classList.add('copied');\n                    copyButton.querySelector('.copy-icon').style.display = 'none';\n                    copyButton.querySelector('.check-icon').style.display = 'block';\n\n                    setTimeout(() => {\n                        copyButton.classList.remove('copied');\n                        copyButton.querySelector('.copy-icon').style.display = 'block';\n                        copyButton.querySelector('.check-icon').style.display = 'none';\n                    }, 1500);\n                } catch (err) {\n                    console.error('Failed to copy code:', err);\n                }\n\n                document.body.removeChild(textArea);\n            }\n        });\n\n        // Append button to wrapper (not pre), so it stays fixed during horizontal scroll\n        wrapper.appendChild(copyButton);\n    });\n}\n\n// Simple smooth scrolling for anchor links\ndocument.addEventListener('DOMContentLoaded', function() {\n    // Add copy buttons to code blocks\n    addCopyButtons();\n\n    // Watch for dynamic content changes\n    const observer = new MutationObserver(() => {\n        addCopyButtons();\n    });\n\n    const contentElement = document.getElementById('documentation-content');\n    if (contentElement) {\n        observer.observe(contentElement, {\n            childList: true,\n            subtree: true\n        });\n    }\n\n    // Make h2/h3 heading text clickable -- navigate to their anchor\n    document.querySelectorAll('#documentation-content h2, #documentation-content h3').forEach(function(heading) {\n        heading.addEventListener('click', function(e) {\n            if (e.target.closest('a')) return;\n            if (e.target !== heading && !heading.contains(e.target)) return;\n            var permalink = heading.querySelector('.heading-permalink');\n            if (permalink) {\n                var href = permalink.getAttribute('href');\n                if (href) {\n                    var targetId = href.substring(1);\n                    var targetEl = document.getElementById(targetId);\n                    if (targetEl) {\n                        var pos = targetEl.getBoundingClientRect().top + window.scrollY - 80;\n                        window.scrollTo({ top: pos, behavior: 'smooth' });\n                        history.pushState(null, null, href);\n                    }\n                }\n            }\n        });\n    });\n\n    // Add smooth scrolling\n    document.addEventListener('click', function(e) {\n        const link = e.target.closest('a[href^=\"#\"]');\n        if (link) {\n            e.preventDefault();\n            const targetId = link.getAttribute('href').substring(1);\n            const targetElement = document.getElementById(targetId);\n\n            if (targetElement) {\n                // Calculate the element's position relative to the document\n                const elementPosition = targetElement.getBoundingClientRect().top + window.scrollY;\n                const offsetPosition = elementPosition - 80;\n\n                // Scroll with offset for fixed header\n                window.scrollTo({\n                    top: offsetPosition,\n                    behavior: 'smooth'\n                });\n\n                // Update the URL hash without scrolling\n                history.pushState(null, null, `#${targetId}`);\n            }\n        }\n    });\n});\n\n// Ensure sidebars can properly scroll\nfunction adjustSidebarHeights() {\n    // Calculate available height for sidebars\n    const viewportHeight = window.innerHeight;\n    const topOffset = 96; // 24 (top-24 in TailwindCSS) = 6rem\n    const sidebarMaxHeight = viewportHeight - topOffset;\n\n    // Apply height to sidebar containers if needed\n    document.querySelectorAll('.docs-sidebar > div, .toc').forEach(sidebar => {\n        if (sidebar) {\n            sidebar.style.maxHeight = `${sidebarMaxHeight}px`;\n        }\n    });\n}\n\n// Run on load and resize\nwindow.addEventListener('load', adjustSidebarHeights);\nwindow.addEventListener('resize', adjustSidebarHeights);\n"
  },
  {
    "path": "packages/Documentation/resources/markdown/developer-guide.md",
    "content": "# Developer Guide\n\nTechnical documentation for developers and contributors.\n\n---\n\n## Quick Start\n\n```\ngit clone https://github.com/Relaticle/relaticle.git\ncd relaticle && composer app-install\ncomposer run dev\n```\n\nVisit `http://localhost:8000` to access the application.\n\n---\n\n## Tech Stack\n\n| Component | Technology                            |\n|-----------|---------------------------------------|\n| Backend | PHP 8.4, Laravel 12                   |\n| Admin UI | Filament 5                            |\n| Frontend | Livewire 4, Alpine.js, Tailwind CSS 4 |\n| Database | PostgreSQL                             |\n| Queue | Laravel Horizon                       |\n| Testing | Pest v4                               |\n| Static Analysis | PHPStan (Level 7)                     |\n| Code Style | Laravel Pint, Rector                  |\n| Auth | Laravel Jetstream                     |\n\n---\n\n## Architecture\n\n### Core Models\n\n```\nTeam ─┬─ User (via Membership)\n      ├─ Company ─┬─ People\n      │           └─ Opportunity ─── Contact (People)\n      ├─ Task (many-to-many with Company, People, Opportunity)\n      └─ Note (many-to-many with Company, People, Opportunity)\n```\n\n### Multi-Tenancy\n\nAll workspace data is isolated via the `HasTeam` trait. Every query automatically scopes to the current team.\n\n### Key Traits\n\n| Trait | Purpose |\n|-------|---------|\n| `HasTeam` | Workspace isolation |\n| `HasCreator` | Tracks record creator |\n| `HasNotes` | Polymorphic notes relationship |\n| `HasAiSummary` | AI-generated summaries |\n\n---\n\n## Development Setup\n\n### Requirements\n\n- **PHP 8.4+** with extensions: pdo_pgsql, gd, bcmath, mbstring, xml\n- **PostgreSQL 17+**\n- **Node.js 20+**\n- **Composer 2+**\n\n### Manual Installation\n\n```\ngit clone https://github.com/Relaticle/relaticle.git\ncd relaticle\ncomposer install\nnpm install\ncp .env.example .env\nphp artisan key:generate\nphp artisan migrate\nphp artisan storage:link\nnpm run build\ncomposer run dev\n```\n\n### Environment Config\n\nFor PostgreSQL:\n```\nDB_CONNECTION=pgsql\nDB_HOST=127.0.0.1\nDB_PORT=5432\nDB_DATABASE=relaticle\nDB_USERNAME=postgres\nDB_PASSWORD=your_password\n```\n\n---\n\n## Quality Tools\n\n```\ncomposer lint          # Format with Pint + Rector\ncomposer test:lint     # Check formatting\ncomposer test:types    # PHPStan analysis\ncomposer test:pest     # Run tests\ncomposer test          # All checks (required before PR)\n```\n\n### Git Hooks\n\nEnable pre-commit checks:\n```\ngit config core.hooksPath .githooks\n```\n\n---\n\n## Testing\n\nAll contributions require:\n- Unit tests for new functionality\n- Feature tests for user interactions\n- Minimum 99.9% type coverage\n\nRun specific tests:\n```\nphp artisan test tests/Feature/ExampleTest.php\nphp artisan test --filter=\"test_method_name\"\n```\n\n---\n\n## Custom Fields\n\nRelaticle includes a custom fields system for extending entities without migrations.\n\n- **License**: AGPL-3.0 (free for open source) or Commercial\n- **Docs**: [Custom Fields Documentation](https://relaticle.github.io/custom-fields/)\n\n---\n\n## Deployment\n\nFor production deployment instructions, including Docker setup, environment configuration, reverse proxy, and platform-specific guides (Dokploy, Coolify), see the **Self-Hosting Guide**.\n\n---\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| Queue not processing | `php artisan queue:restart` |\n| File upload errors | `chmod -R 775 storage bootstrap/cache` |\n| Slow queries | Use Laravel Telescope to identify, then add indexes |\n| View cache issues | `php artisan view:clear && npm run build` |\n\n---\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feat/your-feature`\n3. Make changes following coding standards\n4. Run tests: `composer test`\n5. Commit with conventional messages\n6. Open a Pull Request\n\nPRs must pass all checks before merge.\n\n---\n\n## Resources\n\n- [Laravel Docs](https://laravel.com/docs/12.x)\n- [Filament Docs](https://filamentphp.com/docs)\n- [Livewire Docs](https://livewire.laravel.com/)\n- [Pest Docs](https://pestphp.com/)\n"
  },
  {
    "path": "packages/Documentation/resources/markdown/getting-started.md",
    "content": "# Getting Started\n\nWelcome to Relaticle. This guide gets you up and running in 5 minutes.\n\n---\n\n## Quick Setup\n\n### 1. Create Your Account\n\n1. Go to the registration page\n2. Enter your name, email, and password\n3. You'll be taken to your new workspace\n\n### 2. Complete Your Profile\n\n1. Click your avatar in the top-right corner\n2. Select **Profile**\n3. Add your profile photo and details\n\n### 3. Invite Team Members\n\n1. Click your workspace name in the sidebar\n2. Select **Team Settings**\n3. Click **Invite Member**\n4. Enter their email address and select a role\n\n---\n\n## Core Concepts\n\nRelaticle organizes your customer data into five connected entities:\n\n| Entity | Purpose | Example |\n|--------|---------|---------|\n| **Companies** | Organizations you work with | Acme Corporation |\n| **People** | Contacts at companies | John Doe, CEO at Acme |\n| **Opportunities** | Deals in your sales pipeline | Q1 Enterprise Contract |\n| **Tasks** | Actions to complete | Follow up on proposal |\n| **Notes** | Important information to remember | Meeting notes from call |\n\n**How they connect:**\n- People belong to Companies\n- Opportunities link to Companies and People\n- Tasks and Notes can be attached to any record\n\n---\n\n## Your First Actions\n\n### Add a Company\n\n1. Click **Companies** in the sidebar\n2. Click **New Company** (top right)\n3. Enter the company name (required)\n4. Add optional details: website, address, phone\n5. Click **Create**\n\n### Add a Contact\n\n1. Open the company you just created\n2. In the **People** section, click **Create People**\n3. Enter the contact's name (required)\n4. Add their email, phone, and title\n5. Click **Create**\n\n### Create an Opportunity\n\n1. Click **Opportunities** in the sidebar\n2. Click **New Opportunity**\n3. Enter the opportunity name\n4. Select the **Company** and **Contact**\n5. Click **Create**\n\n### Add a Follow-Up Task\n\n1. Open your opportunity\n2. In the **Tasks** section, click **Create Task**\n3. Enter a title (e.g., \"Send proposal\")\n4. Set a due date and priority\n5. Assign it to yourself or a team member\n6. Click **Create**\n\n---\n\n## Custom Fields\n\nEvery entity supports custom fields for tracking data specific to your business.\n\n**To manage custom fields:**\n1. Click the **Settings** icon in the sidebar\n2. Select **Custom Fields**\n3. Choose the entity type (Companies, People, etc.)\n4. Add, edit, or reorder fields\n\n**Field types available:**\n- Text, Number, Date, Email, URL\n- Select (dropdown), Multi-select\n- Boolean (yes/no)\n\n---\n\n## Import Existing Data\n\nAlready have data in spreadsheets? Import it directly.\n\n1. Go to any entity list (Companies, People, etc.)\n2. Click **Import** in the header\n3. Upload your CSV file\n4. Map columns to Relaticle fields\n5. Review and import\n\nSee the **Import Guide** for detailed instructions and CSV templates.\n\n---\n\n## Daily Workflow\n\n**Start of day:**\n- Check your **Tasks** for today's priorities\n- Review any new **Opportunities**\n\n**Throughout the day:**\n- Update records after customer interactions\n- Add **Notes** to capture important details\n- Create **Tasks** for follow-ups\n\n**End of day:**\n- Ensure all activities are logged\n- Update opportunity stages as needed\n\n---\n\n## What's Next\n\n- **Import data** → See the Import Guide\n- **Customize fields** → Settings > Custom Fields\n- **Integrate via API** → [API Reference](/docs/api)\n"
  },
  {
    "path": "packages/Documentation/resources/markdown/import-guide.md",
    "content": "# Import Guide\n\nRelaticle's import wizard lets you bulk import data from CSV files into your CRM.\n\n## Supported Entities\n\n- **Companies** - Organizations and accounts\n- **People** - Contacts linked to companies\n- **Opportunities** - Deals and sales pipeline\n- **Tasks** - Action items and to-dos\n- **Notes** - Meeting notes and observations\n\n---\n\n## Quick Start\n\n### File Requirements\n\n| Requirement | Value |\n|-------------|-------|\n| Format | CSV (comma-separated values) |\n| Encoding | UTF-8 |\n| Max Rows | 10,000 per file |\n| Max Size | 10MB |\n| Headers | Required in first row |\n\n**Tip**: In Excel, use \"Save As\" → \"CSV UTF-8 (Comma delimited)\".\n\n### Required Fields\n\n| Entity | Required |\n|--------|----------|\n| Companies | Name |\n| People | Name |\n| Opportunities | Name |\n| Tasks | Title |\n| Notes | Title |\n\n---\n\n## The 4-Step Process\n\n### Step 1: Upload\n\n1. Navigate to the entity list (Companies, People, etc.)\n2. Click **Import**\n3. Select your CSV file\n4. Review file info (columns found, row count)\n\n### Step 2: Map Columns\n\nThe wizard automatically matches CSV columns to Relaticle fields by comparing column names.\n\n**Auto-Mapping Examples**:\n- \"company_name\", \"Company\", \"Organization\" → Company Name\n- \"email\", \"Email Address\", \"contact_email\" → Email\n- \"custom_fields_industry\" → Industry custom field\n\n**Manual Adjustment**: Click any dropdown to change the mapping or select \"Don't Import\" to skip a column.\n\n**Linking Related Records**: When mapping a column to a relationship (like Company or Contact), a submenu appears where you choose the match method — by Record ID, Domain, Email, or Name.\n\n### Step 3: Review Values\n\nThe wizard analyzes your data and flags validation issues.\n\n**Actions You Can Take**:\n- **Fix**: Enter a corrected value to apply to all rows with that value\n- **Skip**: Click the skip icon to exclude a value. The row will still be imported, but this field will be empty\n- **Change Date Format**: For date columns, select the correct format if auto-detection is uncertain\n\n### Step 4: Preview & Import\n\nReview what will happen:\n- **New**: Records that will be created\n- **Update**: Existing records that will be modified\n\nClick **Start Import** when ready. Large imports process in the background.\n\n---\n\n## Date Format Detection\n\nThe import wizard automatically detects date formats in your CSV and handles three common formats:\n\n### Supported Formats\n\n| Format | Pattern | Example |\n|--------|---------|---------|\n| **ISO** | YYYY-MM-DD | 2024-05-15 |\n| **European** | DD/MM/YYYY or DD-MM-YYYY | 15/05/2024, 15 May 2024 |\n| **American** | MM/DD/YYYY or MM-DD-YYYY | 05/15/2024, May 15th 2024 |\n\n### How Detection Works\n\nThe wizard analyzes your date values to determine the format:\n\n1. **Unambiguous dates**: When the day is > 12, the format is clear\n   - `31/01/2024` → Must be European (DD/MM)\n   - `01/31/2024` → Must be American (MM/DD)\n\n2. **Ambiguous dates**: When both positions are ≤ 12\n   - `01/02/2024` → Could be Jan 2 or Feb 1\n   - You'll see a warning and can select the correct format\n\n3. **ISO dates**: Always unambiguous\n   - `2024-01-15` → Clearly January 15\n\n### Selecting Date Format\n\nIn Step 3 (Review Values), date columns show a format dropdown:\n\n- **High confidence**: Format auto-selected, dropdown shows detected format\n- **Low confidence**: Warning icon appears, select the correct format manually\n\n**Example**: If your CSV has `01/02/2024` and you know it means February 1st (European), select \"European\" from the dropdown.\n\n---\n\n## Matching Existing Records\n\nWhen you map a field that uniquely identifies records (like email or domain), the wizard automatically finds matches in your existing data. How matching works depends on the match method you choose in Step 2.\n\n### Match Methods\n\n| Method | Behavior | Available For |\n|--------|----------|---------------|\n| **Record ID** | Updates the exact record. Skips if ID not found. | All entities |\n| **Domain** | Finds existing company by domain, or creates new. | Companies |\n| **Email** | Finds existing person by email, or creates new. | People |\n| **Phone** | Finds existing person by phone, or creates new. | People |\n| **Name** | Always creates a new record (names aren't unique). | Companies, People |\n\n### What Happens in Preview\n\nAfter the wizard resolves matches, Step 4 shows the result:\n- Rows matched to existing records → **Update**\n- Rows with no match (or using Name matching) → **Create new**\n- Rows with an ID that doesn't exist → **Skip**\n\n### No Unique Field Mapped?\n\nIf you don't map any matchable field, the wizard shows a warning: all rows will be created as new records. You can go back and map a field, or continue anyway.\n\n### Update Behavior\n\nWhen the wizard matches a CSV row to an existing record, updates follow these rules:\n\n- **Blank fields are ignored**: If a CSV column is empty, the existing value is preserved. You don't need to fill in every column — only include the fields you want to change.\n- **Multi-value fields merge**: For fields that accept multiple values (emails, phone numbers, tags, multi-select), new values are merged with existing ones rather than replacing them.\n- **Duplicates within the CSV**: If the same record appears multiple times in your file (e.g., two rows with the same email), the second row updates the first instead of creating a duplicate.\n\n---\n\n## ID-Based Updates\n\nFor precise updates, include Record IDs from a previous export.\n\n### Workflow\n\n1. **Export** your records (includes `id` column with ULIDs)\n2. **Modify** the CSV, keeping the `id` column intact\n3. **Re-import** - rows with valid IDs update those exact records\n\n### Example\n\n```\nid,name,custom_fields_industry\n01KCCFMZ52QWZSQZWVG0AP704V,Acme Corporation,Software\n01KCCFN1A8XVQR4ZFWB3KC5M7P,TechStart Inc,Hardware\n```\n\n**Preview shows**:\n- Rows with valid IDs → \"Update\"\n- Rows without IDs → \"New\"\n\n### Mixed Imports\n\nYou can create and update in the same file:\n\n```\nid,name\n01KCCFMZ52QWZSQZWVG0AP704V,Update This Company\n,New Company (blank ID = create new)\n```\n\n---\n\n## Entity-Specific Details\n\n### Companies\n\n**Fields**:\n- `name` (required) - Company name\n- `account_owner_email` - Team member email for ownership\n- Custom fields with `custom_fields_` prefix\n\n**Matching**: By domain (`custom_fields_domains`) or Record ID\n\n```\nname,account_owner_email,custom_fields_industry,custom_fields_domains\nAcme Corporation,owner@yourcompany.com,Technology,acme.com\n```\n\n### People\n\n**Fields**:\n- `name` (required) - Person's full name\n- Custom fields with `custom_fields_` prefix\n\n**Relationships** (mapped in Step 2):\n- **Company** - Link to a company. Match by Record ID, Domain, or Name (creates new).\n\n**Matching**: By email (`custom_fields_emails`), phone (`custom_fields_phone_number`), or Record ID\n\n```\nname,company,custom_fields_emails,custom_fields_title\nJohn Doe,acme.com,john@acme.com,CEO\nJane Smith,acme.com,jane@acme.com,CTO\n```\n\n**Note**: In the example above, the `company` column is mapped to the Company relationship. In Step 2, choose \"Match by Domain\" so `acme.com` links to the existing company. If you choose \"Match by Name\", a new company will always be created.\n\n### Opportunities\n\n**Fields**:\n- `name` (required) - Opportunity name\n- Custom fields (amount, stage, close_date, etc.)\n\n**Relationships** (mapped in Step 2):\n- **Company** - Link to a company. Match by Record ID, Domain, or Name.\n- **Contact** - Link to a person. Match by Record ID, Email, Phone, or Name.\n\n**Matching**: Record ID only\n\n```\nname,company,contact,custom_fields_amount,custom_fields_stage\nQ1 Enterprise Deal,acme.com,john@acme.com,50000,Proposal\n```\n\n**Note**: Map the `company` column to Company → Domain and the `contact` column to Contact → Email for the best matching results.\n\n### Tasks\n\n**Fields**:\n- `title` (required) - Task title\n\n**Relationships** (mapped in Step 2):\n- **Companies** - Link to one or more companies\n- **People** - Link to one or more people\n- **Opportunities** - Link to one or more opportunities\n- **Assignees** - Assign to team members by email\n\n**Matching**: Record ID only\n\n```\ntitle,assignee,company,custom_fields_due_date,custom_fields_priority\nFollow up with client,assignee@yourcompany.com,acme.com,2024-03-15,High\n```\n\n**Note**: The `assignee` column is mapped to the Assignees relationship in Step 2. Choose \"Match by Email\" to link to team members by their email address.\n\n### Notes\n\n**Fields**:\n- `title` (required) - Note title\n\n**Relationships** (mapped in Step 2):\n- **Companies** - Link to one or more companies\n- **People** - Link to one or more people\n- **Opportunities** - Link to one or more opportunities\n\n**Matching**: None. Notes are always created as new records.\n\n```\ntitle,company\nMeeting Notes,acme.com\n```\n\n---\n\n## Custom Fields\n\n### Column Naming\n\nUse the prefix `custom_fields_` followed by the field code:\n\n```\ncustom_fields_industry\ncustom_fields_emails\ncustom_fields_website\n```\n\nFind field codes in **Settings → Custom Fields** under the \"Code\" column.\n\n### Field Type Formatting\n\n| Type | Format | Example |\n|------|--------|---------|\n| Text | Plain text | `Technology` |\n| Number | Numeric, no symbols | `50000` |\n| Date | YYYY-MM-DD, DD/MM/YYYY, or MM/DD/YYYY | `2024-03-15` |\n| Email | Valid email(s), comma-separated | `john@acme.com,jane@acme.com` |\n| Select | Exact option label | `Enterprise` |\n| Multi-Select | Comma-separated labels | `CRM,Analytics` |\n| Boolean | true/false, yes/no, 1/0 | `true` |\n\n---\n\n## CSV Best Practices\n\n### Do\n\n- Include headers in the first row\n- Save as UTF-8 encoding\n- Quote values containing commas: `\"Last, First\"`\n- Use consistent formatting within each column\n- Test with a small sample first (5-10 rows)\n\n### Don't\n\n- Use Excel's default encoding (use \"CSV UTF-8\")\n- Mix date formats in the same column\n- Include currency symbols in numbers: use `50000` not `$50,000`\n- Leave empty rows at the end of the file\n\n### Date Formatting Tips\n\nThe wizard accepts multiple date formats, but consistency is key:\n\n**Good** (pick one format per column):\n- `2024-03-15` (ISO - recommended)\n- `15/03/2024` (European)\n- `03/15/2024` (American)\n\n**Avoid**:\n- Mixing formats: `2024-03-15` and `03/15/2024` in same column\n- Two-digit years without context: `03/15/24`\n\n---\n\n## Troubleshooting\n\n### Upload Issues\n\n| Problem | Solution |\n|---------|----------|\n| File too large | Split into files under 10,000 rows each |\n| Invalid format | Re-save as \"CSV UTF-8\" from Excel |\n| Upload fails | Check internet, try smaller file |\n\n### Mapping Issues\n\n| Problem | Solution |\n|---------|----------|\n| Column not auto-mapped | Manually select from dropdown |\n| Custom field missing | Check field code in Settings → Custom Fields |\n| Required field red | Map a CSV column to the required field |\n\n### Validation Issues\n\n| Problem | Solution |\n|---------|----------|\n| Invalid email | Fix email format: `user@domain.com` |\n| Invalid date | Use a supported format (ISO, European, or American) |\n| Invalid ID | Re-export to get fresh Record IDs |\n| Unknown select option | Use exact option label from field settings |\n\n### Import Issues\n\n| Problem | Solution |\n|---------|----------|\n| Stuck at \"Processing\" | Large imports take time; check back in a few minutes |\n| Some rows failed | Download failed rows, fix errors, re-import |\n| Unexpected duplicates | Map a unique field (email, domain, or ID) in Step 2 |\n\n---\n\n## FAQ\n\n**Can I import multiple entity types at once?**\nNo, each entity imports separately. When importing People, related companies can be auto-created if you choose \"Match by Name\" for the Company relationship.\n\n**What happens if my import fails halfway?**\nSuccessful rows remain. Failed rows can be downloaded, fixed, and re-imported.\n\n**Can I undo an import?**\nNo automatic undo. Test with small samples first and backup important data.\n\n**How do I update existing records?**\nInclude the `id` column from a previous export. For People, email or phone matching also works. For Companies, domain matching works.\n\n**What date formats are supported?**\nISO (YYYY-MM-DD), European (DD/MM/YYYY), and American (MM/DD/YYYY). The wizard auto-detects the format.\n\n**What if a date is ambiguous (like 01/02/2024)?**\nYou'll see a warning. Use the format dropdown to select European or American interpretation.\n\n**What's the maximum file size?**\n10MB or 10,000 rows per file. Split larger datasets into multiple imports.\n\n**Do imports run in real-time?**\nSmall imports complete immediately. Large imports process in the background with progress updates.\n\n**How does the wizard match existing records?**\nIt depends on which match method you choose in Step 2. Record ID updates exact records. Domain and email find existing records or create new ones. Name always creates new records.\n\n**Can Notes be updated via import?**\nNo. Notes are always created as new records regardless of whether you include an ID column.\n\n---\n\n## CSV Templates\n\nExport existing records to get perfectly formatted templates with all your custom fields.\n\n### Company Template\n```\nid,name,account_owner_email,custom_fields_industry,custom_fields_domains\n,Acme Corporation,owner@yourcompany.com,Technology,acme.com\n```\n\n### People Template\n```\nid,name,company,custom_fields_emails,custom_fields_title\n,John Doe,acme.com,john@acme.com,CEO\n```\n\n**Tip**: Map the `company` column to Company → Domain to link to existing companies. Choose \"Match by Name\" only when you want to create new companies.\n\n### Opportunity Template\n```\nid,name,company,contact,custom_fields_amount,custom_fields_stage\n,Q1 Enterprise Deal,acme.com,john@acme.com,50000,Proposal\n```\n\n**Tip**: Map `company` to Company → Domain and `contact` to Contact → Email to link to existing records.\n\n### Task Template\n```\nid,title,assignee,custom_fields_due_date,custom_fields_priority\n,Follow up with client,assignee@yourcompany.com,2024-03-15,High\n```\n\n**Tip**: Map the `assignee` column to Assignees → Email to assign tasks to team members.\n\n### Note Template\n```\ntitle,company\nMeeting Notes,acme.com\n```\n\n**Tip**: Export any existing record to get a template with all your workspace's custom fields already included.\n"
  },
  {
    "path": "packages/Documentation/resources/markdown/mcp-guide.md",
    "content": "# MCP Server\n\nMCP (Model Context Protocol) lets AI assistants like Claude work directly with your Relaticle CRM data. Instead of copy-pasting between tools, your AI assistant can list companies, create tasks, update contacts, and more -- all from a natural conversation.\n\n---\n\n## What You Can Do\n\nWith the Relaticle MCP server, your AI assistant can:\n\n- **List and search** companies, people, opportunities, tasks, and notes\n- **Create new records** directly from a conversation\n- **Update existing records** -- rename a company, reassign a task\n- **Delete records** you no longer need\n- **Read entity schemas** to understand your custom fields\n- **Get a CRM overview** with record counts and recent activity\n\n---\n\n## Prerequisites\n\nBefore connecting an AI assistant, you need an access token:\n\n1. Log in to Relaticle\n2. Click your avatar in the top-right corner\n3. Select **Access Tokens**\n4. Click **Create** and give your token a name\n5. Copy the token -- it won't be shown again\n\nThe token scopes your access to the team you select when creating it. All MCP operations use that team's data.\n\n---\n\n## Setup by Client\n\nThe MCP server endpoint is `https://mcp.relaticle.com`. Replace `YOUR_TOKEN` in the examples below with the access token you created above.\n\n### Claude Desktop\n\nAdd this to your Claude Desktop configuration file (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"relaticle\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://mcp.relaticle.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_TOKEN\"\n      }\n    }\n  }\n}\n```\n\n### Claude Code\n\nAdd the server from your terminal:\n\n```bash\nclaude mcp add relaticle \\\n  --transport streamable-http \\\n  https://mcp.relaticle.com \\\n  --header \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n### Cursor\n\nAdd this to your Cursor MCP configuration (`.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"relaticle\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://mcp.relaticle.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_TOKEN\"\n      }\n    }\n  }\n}\n```\n\n### VS Code (GitHub Copilot)\n\nAdd this to your VS Code settings (`.vscode/mcp.json`):\n\n```json\n{\n  \"servers\": {\n    \"relaticle\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://mcp.relaticle.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_TOKEN\"\n      }\n    }\n  }\n}\n```\n\n---\n\n## Available Tools\n\nThe server provides 30 tools across five CRM entities:\n\n### Companies\n\n| Tool | Description |\n|------|-------------|\n| `list_companies` | List companies with optional search by name and pagination |\n| `create_company` | Create a new company (requires `name`) |\n| `update_company` | Update a company by ID |\n| `delete_company` | Soft-delete a company by ID |\n\n### People\n\n| Tool | Description |\n|------|-------------|\n| `list_people` | List contacts with optional search, filter by company |\n| `create_people` | Create a new contact (requires `name`, optional `company_id`) |\n| `update_people` | Update a contact by ID |\n| `delete_people` | Soft-delete a contact by ID |\n\n### Opportunities\n\n| Tool | Description |\n|------|-------------|\n| `list_opportunities` | List deals with optional search, filter by company |\n| `create_opportunity` | Create a new deal (requires `name`, optional `company_id`, `contact_id`) |\n| `update_opportunity` | Update a deal by ID |\n| `delete_opportunity` | Soft-delete a deal by ID |\n\n### Tasks\n\n| Tool | Description |\n|------|-------------|\n| `list_tasks` | List tasks with optional search by title |\n| `create_task` | Create a new task (requires `title`) |\n| `update_task` | Update a task by ID |\n| `delete_task` | Soft-delete a task by ID |\n\n### Notes\n\n| Tool | Description |\n|------|-------------|\n| `list_notes` | List notes with optional search by title |\n| `create_note` | Create a new note (requires `title`) |\n| `update_note` | Update a note by ID |\n| `delete_note` | Soft-delete a note by ID |\n\nAll list tools support `search`, `per_page` (default 15), and `page` parameters. Create and update tools accept `custom_fields` as key-value pairs when your team has custom fields configured.\n\n---\n\n## Schema Resources\n\nThe server exposes five schema resources that describe each entity's fields, including any custom fields your team has configured:\n\n| Resource URI | Description |\n|---|---|\n| `relaticle://schema/company` | Company fields and custom fields |\n| `relaticle://schema/people` | People (contact) fields and custom fields |\n| `relaticle://schema/opportunity` | Opportunity (deal) fields and custom fields |\n| `relaticle://schema/task` | Task fields and custom fields |\n| `relaticle://schema/note` | Note fields and custom fields |\n\nAI assistants read these schemas automatically to understand what data they can work with, including your team's custom fields.\n\n---\n\n## CRM Overview Prompt\n\nThe server includes a built-in prompt called **CRM Overview** that gives your AI assistant a snapshot of your CRM data -- record counts for each entity and recently created companies and people. This is a great starting point for any conversation.\n\n---\n\n## Example Prompts\n\nOnce connected, try these in your AI assistant:\n\n- \"List all my companies\"\n- \"Create a new company called Acme Corp\"\n- \"Show me the people at company X\"\n- \"Create a task to follow up with John next week\"\n- \"Give me an overview of my CRM\"\n- \"Update the name of company X to Y\"\n- \"Delete the task with ID abc-123\"\n\n---\n\n## Troubleshooting\n\n### \"Unauthorized\" or 401 Error\n\nYour access token may be expired or invalid. Create a new one from **Settings > Access Tokens**.\n\n### No Data Returned\n\nThe MCP server scopes all data to the team associated with your token. Make sure the token was created for the correct team and that the team has data.\n\n### Connection Refused\n\nVerify the MCP URL is correct: `https://mcp.relaticle.com`.\n\n### Custom Fields Not Showing\n\nCustom fields are team-specific. If you don't see them, confirm they're configured for your team in **Settings > Custom Fields**. The AI assistant reads schema resources automatically to discover available fields.\n\n### Rate Limiting\n\nThe MCP server uses the same rate limits as the REST API. If you hit limits, wait a moment and retry.\n"
  },
  {
    "path": "packages/Documentation/resources/markdown/self-hosting-guide.md",
    "content": "# Self-Hosting Guide\n\nDeploy Relaticle on your own infrastructure with Docker or manually.\n\n---\n\n## Quick Start\n\nGet Relaticle running in 5 steps:\n\n1. Download the compose file:\n\n```bash\ncurl -o compose.yml https://raw.githubusercontent.com/Relaticle/relaticle/main/compose.yml\n```\n\n2. Generate an application key:\n\n```bash\necho \"APP_KEY=base64:$(openssl rand -base64 32)\"\n```\n\n3. Create a `.env` file with your settings:\n\n```bash\nAPP_KEY=base64:your-generated-key-here\nDB_PASSWORD=your-secure-database-password\nAPP_URL=https://crm.example.com\n```\n\n4. Start the containers:\n\n```bash\ndocker compose up -d\n```\n\n5. Create your admin account:\n\n```bash\ndocker compose exec app php artisan make:filament-user\n```\n\nYour CRM is now available at `{APP_URL}/app`.\n\n---\n\n## Requirements\n\n| Resource | Minimum | Recommended |\n|----------|---------|-------------|\n| RAM | 2 GB | 4 GB |\n| CPU | 1 core | 2 cores |\n| Disk | 10 GB | 20 GB+ |\n| Docker | 20.10+ | Latest |\n| Docker Compose | v2.0+ | Latest |\n\n---\n\n## Environment Variables\n\n### Required\n\nThese must be set or the containers will refuse to start.\n\n| Variable | Description |\n|----------|-------------|\n| `APP_KEY` | Encryption key. Generate with `openssl rand -base64 32`, then prefix with `base64:`. |\n| `DB_PASSWORD` | PostgreSQL password. Use a strong random value. |\n\n### Application\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `APP_NAME` | `Relaticle` | Displayed in the browser tab and emails. |\n| `APP_ENV` | `production` | Set to `production` for self-hosting. |\n| `APP_DEBUG` | `false` | Set to `true` only for debugging. Never in production. |\n| `APP_TIMEZONE` | `UTC` | Application timezone. |\n| `APP_URL` | `http://localhost` | Full URL where Relaticle is accessible. Include the scheme. |\n| `APP_PORT` | `80` | Host port the app container binds to. |\n| `APP_PANEL_DOMAIN` | (empty) | Set for subdomain routing (e.g., `app.example.com`). Leave empty for path mode (`/app`). |\n| `LOG_CHANNEL` | `stderr` | Where logs go. `stderr` is recommended for Docker. |\n| `LOG_LEVEL` | `warning` | Minimum log level. Use `debug` for troubleshooting. |\n\n### Mail\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `MAIL_MAILER` | `log` | Mail driver: `smtp`, `ses`, `mailgun`, `postmark`, or `log`. |\n| `MAIL_HOST` | (empty) | SMTP host (e.g., `smtp.mailgun.org`). |\n| `MAIL_PORT` | `587` | SMTP port. |\n| `MAIL_USERNAME` | (empty) | SMTP username. |\n| `MAIL_PASSWORD` | (empty) | SMTP password. |\n| `MAIL_ENCRYPTION` | `tls` | `tls` or `ssl`. |\n| `MAIL_FROM_ADDRESS` | `hello@example.com` | Sender email address. |\n| `MAIL_FROM_NAME` | `Relaticle` | Sender display name. |\n\n### Database and Redis\n\nThese are pre-configured in `compose.yml` and generally don't need changing.\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `DB_DATABASE` | `relaticle` | PostgreSQL database name. |\n| `DB_USERNAME` | `relaticle` | PostgreSQL username. |\n| `REDIS_PASSWORD` | `null` | Redis password. Leave as `null` for no auth. |\n\n### Optional\n\n| Variable | Description |\n|----------|-------------|\n| `GOOGLE_CLIENT_ID` | Google OAuth client ID for social login. |\n| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret. |\n| `GITHUB_CLIENT_ID` | GitHub OAuth client ID for social login. |\n| `GITHUB_CLIENT_SECRET` | GitHub OAuth client secret. |\n| `SENTRY_LARAVEL_DSN` | Sentry DSN for error tracking. |\n| `FATHOM_ANALYTICS_SITE_ID` | Fathom Analytics site ID. |\n\n---\n\n## Architecture\n\nThe Docker setup runs 5 containers:\n\n| Container | Image | Purpose |\n|-----------|-------|---------|\n| **app** | `ghcr.io/relaticle/relaticle:latest` | Web server (nginx + PHP-FPM) on port 8080. Runs migrations automatically on startup. |\n| **horizon** | `ghcr.io/relaticle/relaticle:latest` | Queue worker powered by Laravel Horizon. Processes background jobs. |\n| **scheduler** | `ghcr.io/relaticle/relaticle:latest` | Runs `schedule:work` for recurring tasks (e.g., cleanup, notifications). |\n| **postgres** | `postgres:17-alpine` | PostgreSQL 17 database. |\n| **redis** | `redis:7-alpine` | Cache, sessions, and queue backend. Runs with append-only persistence. |\n\n### Volumes\n\n| Volume | Purpose |\n|--------|---------|\n| `postgres` | Database files. Back this up. |\n| `redis` | Redis persistence data. |\n| `storage` | Uploaded files and application storage. Back this up. |\n\n### Networking\n\nThe app container listens on port 8080 internally and maps to `APP_PORT` (default 80) on the host. All containers communicate through Docker's internal network. Only the app container exposes a port to the host.\n\n---\n\n## Creating Your Admin Account\n\nAfter starting the containers, create your first admin user:\n\n```bash\ndocker compose exec app php artisan make:filament-user\n```\n\nYou will be prompted for a name, email, and password. Once created, access the CRM panel at `{APP_URL}/app`.\n\n**Note**: By default the CRM panel is available at the `/app` path. To use subdomain routing instead (e.g., `app.example.com`), set the `APP_PANEL_DOMAIN` environment variable.\n\n---\n\n## Reverse Proxy and SSL\n\nThe app container serves HTTP on port 8080 internally. Place a reverse proxy in front to handle SSL termination and route traffic to the container.\n\n### Nginx\n\n```nginx\nserver {\n    listen 443 ssl http2;\n    server_name crm.example.com;\n\n    ssl_certificate /etc/letsencrypt/live/crm.example.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/crm.example.com/privkey.pem;\n\n    location / {\n        proxy_pass http://127.0.0.1:80;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n\nserver {\n    listen 80;\n    server_name crm.example.com;\n    return 301 https://$server_name$request_uri;\n}\n```\n\n### Caddy\n\n```\ncrm.example.com {\n    reverse_proxy 127.0.0.1:80\n}\n```\n\nCaddy handles SSL certificates automatically via Let's Encrypt.\n\n### Traefik\n\nAdd these labels to the `app` service in your `compose.yml`:\n\n```yaml\nlabels:\n  - \"traefik.enable=true\"\n  - \"traefik.http.routers.relaticle.rule=Host(`crm.example.com`)\"\n  - \"traefik.http.routers.relaticle.entrypoints=websecure\"\n  - \"traefik.http.routers.relaticle.tls.certresolver=letsencrypt\"\n  - \"traefik.http.services.relaticle.loadbalancer.server.port=8080\"\n```\n\n**Note**: When using a reverse proxy, set `APP_URL` to your public HTTPS URL (e.g., `https://crm.example.com`). The `TRUSTED_PROXIES` environment variable defaults to `*` in Docker, so forwarded headers are handled automatically.\n\n---\n\n## Deploying on Dokploy\n\n[Dokploy](https://dokploy.com/) is an open-source deployment platform. Here's how to deploy Relaticle on it.\n\n### 1. Create a Project\n\nIn the Dokploy dashboard, click **Create Project** and give it a name (e.g., \"Relaticle\").\n\n### 2. Add a Compose Service\n\n1. Inside your project, click **Create Service** and select **Compose**\n2. Set the source to **Raw** and paste the contents of the [compose.yml](https://raw.githubusercontent.com/Relaticle/relaticle/main/compose.yml)\n3. Click **Create**\n\n### 3. Set Environment Variables\n\nIn the service's **Environment** tab, add the required variables:\n\n```bash\nAPP_KEY=base64:your-generated-key-here\nDB_PASSWORD=your-secure-database-password\nAPP_URL=https://crm.yourdomain.com\nAPP_PORT=8080\n```\n\nGenerate your `APP_KEY` with:\n\n```bash\necho \"base64:$(openssl rand -base64 32)\"\n```\n\n**Note**: Set `APP_PORT=8080` so the container maps port 8080:8080, avoiding conflicts with Dokploy's own port 80.\n\n### 4. Deploy\n\nClick **Deploy**. Dokploy will pull the images and start all 5 containers. Wait for health checks to pass.\n\n### 5. Configure Domain\n\n1. Go to the **Domains** tab of the `app` service\n2. Add your domain (e.g., `crm.yourdomain.com`)\n3. Set the container port to `8080`\n4. Enable HTTPS (Dokploy handles Let's Encrypt automatically)\n\n### 6. Create Admin User\n\nOpen the Dokploy terminal for the `app` container and run:\n\n```bash\nphp artisan make:filament-user\n```\n\nYour Relaticle instance is now live at `https://crm.yourdomain.com/app`.\n\n---\n\n## Deploying on Coolify\n\n[Coolify](https://coolify.io/) is an open-source, self-hostable platform for deploying applications.\n\n### 1. Create a New Project\n\nIn the Coolify dashboard, click **New Project** and give it a name.\n\n### 2. Add a Docker Compose Resource\n\n1. Click **Add Resource** in your project\n2. Select **Docker Compose**\n3. Choose **Empty** as the source, then paste the contents of the [compose.yml](https://raw.githubusercontent.com/Relaticle/relaticle/main/compose.yml)\n\n### 3. Configure Environment Variables\n\nIn the resource's **Environment Variables** section, add:\n\n```bash\nAPP_KEY=base64:your-generated-key-here\nDB_PASSWORD=your-secure-database-password\nAPP_URL=https://crm.yourdomain.com\n```\n\n### 4. Set Up Domain\n\n1. Go to the app service's **Settings**\n2. Set your domain (e.g., `crm.yourdomain.com`)\n3. Coolify will automatically provision an SSL certificate\n\n### 5. Deploy\n\nClick **Deploy**. Coolify will pull the images, create containers, and start the services.\n\n### 6. Create Admin User\n\nUse Coolify's **Terminal** feature to run in the `app` container:\n\n```bash\nphp artisan make:filament-user\n```\n\nAccess your CRM at `https://crm.yourdomain.com/app`.\n\n---\n\n## Upgrading\n\n### 1. Back Up Your Data\n\nAlways back up before upgrading. See the Backup and Restore section below.\n\n### 2. Pull the Latest Images\n\n```bash\ndocker compose pull\n```\n\n### 3. Restart the Containers\n\n```bash\ndocker compose up -d\n```\n\nDatabase migrations run automatically on startup. The app container will apply any pending migrations before serving traffic.\n\n**Note**: Check the [release notes](https://github.com/Relaticle/relaticle/releases) before upgrading. Breaking changes will be documented there.\n\n---\n\n## Backup and Restore\n\n### Database Backup\n\n```bash\ndocker compose exec postgres pg_dump -U relaticle relaticle > backup-$(date +%Y%m%d).sql\n```\n\n### Database Restore\n\n```bash\ndocker compose exec -T postgres psql -U relaticle relaticle < backup-20260320.sql\n```\n\n### Storage Backup\n\nBack up the storage volume which contains uploaded files:\n\n```bash\ndocker compose cp app:/var/www/html/storage/app ./storage-backup\n```\n\n### Automated Backups\n\nAdd a cron job to back up daily:\n\n```bash\n0 3 * * * cd /path/to/relaticle && docker compose exec -T postgres pg_dump -U relaticle relaticle | gzip > /backups/relaticle-$(date +\\%Y\\%m\\%d).sql.gz\n```\n\n---\n\n## Manual Deployment\n\nIf you prefer not to use Docker, you can deploy Relaticle directly on a server.\n\n### Requirements\n\n- PHP 8.4+ with extensions: pdo_pgsql, gd, bcmath, mbstring, xml, redis\n- PostgreSQL 17+\n- Redis 7+\n- Node.js 20+\n- Composer 2+\n- Nginx or Apache\n- Supervisor (for queue workers)\n\n### Installation\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/Relaticle/relaticle.git /var/www/relaticle\ncd /var/www/relaticle\n```\n\n2. Install dependencies:\n\n```bash\ncomposer install --no-dev --optimize-autoloader\nnpm ci && npm run build\n```\n\n3. Configure the environment:\n\n```bash\ncp .env.example .env\nphp artisan key:generate\n```\n\nEdit `.env` with your database credentials, mail settings, and `APP_URL`.\n\n4. Set up the database:\n\n```bash\nphp artisan migrate --force\nphp artisan storage:link\n```\n\n5. Set permissions:\n\n```bash\nchown -R www-data:www-data storage bootstrap/cache\nchmod -R 775 storage bootstrap/cache\n```\n\n6. Create your admin user:\n\n```bash\nphp artisan make:filament-user\n```\n\n### Nginx Configuration\n\n```nginx\nserver {\n    listen 80;\n    server_name crm.example.com;\n    root /var/www/relaticle/public;\n\n    index index.php;\n\n    location / {\n        try_files $uri $uri/ /index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_pass unix:/run/php/php8.4-fpm.sock;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~ /\\.(?!well-known).* {\n        deny all;\n    }\n}\n```\n\n### Supervisor for Horizon\n\nCreate `/etc/supervisor/conf.d/relaticle-horizon.conf`:\n\n```ini\n[program:relaticle-horizon]\nprocess_name=%(program_name)s\ncommand=php /var/www/relaticle/artisan horizon\nautostart=true\nautorestart=true\nuser=www-data\nredirect_stderr=true\nstdout_logfile=/var/www/relaticle/storage/logs/horizon.log\nstopwaitsecs=3600\n```\n\nThen start it:\n\n```bash\nsudo supervisorctl reread\nsudo supervisorctl update\nsudo supervisorctl start relaticle-horizon\n```\n\n### Scheduler Cron\n\nAdd to `www-data`'s crontab:\n\n```bash\n* * * * * cd /var/www/relaticle && php artisan schedule:run >> /dev/null 2>&1\n```\n\n---\n\n## Troubleshooting\n\n### \"APP_KEY is required\" error on startup\n\nThe `APP_KEY` environment variable is not set. Generate one:\n\n```bash\necho \"base64:$(openssl rand -base64 32)\"\n```\n\nAdd it to your `.env` file and restart:\n\n```bash\ndocker compose up -d\n```\n\n### Container restart loops\n\nCheck the logs:\n\n```bash\ndocker compose logs app --tail 50\n```\n\nCommon causes:\n- Missing required environment variables (`APP_KEY`, `DB_PASSWORD`)\n- PostgreSQL not ready yet (the app waits for a health check, but custom configs may skip this)\n- Insufficient memory (need at least 2 GB)\n\n### 500 errors after deployment\n\n1. Check `APP_DEBUG=true` temporarily to see the full error\n2. View logs: `docker compose logs app --tail 100`\n3. Ensure `APP_URL` matches your actual domain (including scheme)\n4. Run `docker compose exec app php artisan optimize:clear` to clear all caches\n\n### Email not sending\n\n1. Verify `MAIL_MAILER` is set to `smtp` (not `log`)\n2. Check your SMTP credentials are correct\n3. Test with: `docker compose exec app php artisan tinker --execute \"Mail::raw('Test', fn(\\$m) => \\$m->to('you@example.com')->subject('Test'))\"`\n4. Check logs: `docker compose logs app | grep -i mail`\n\n### Horizon not processing jobs\n\n1. Check Horizon status: `docker compose exec app php artisan horizon:status`\n2. Verify the horizon container is running: `docker compose ps`\n3. Check horizon logs: `docker compose logs horizon --tail 50`\n4. Restart Horizon: `docker compose restart horizon`\n\n### Permission errors on storage\n\n```bash\ndocker compose exec app chown -R www-data:www-data /var/www/html/storage\ndocker compose exec app chmod -R 775 /var/www/html/storage\n```\n\n### Database connection refused\n\n1. Verify PostgreSQL is running: `docker compose ps postgres`\n2. Check PostgreSQL logs: `docker compose logs postgres --tail 20`\n3. Ensure `DB_PASSWORD` matches between the app and postgres containers (both read from the same `.env` variable by default)\n"
  },
  {
    "path": "packages/Documentation/resources/views/components/card.blade.php",
    "content": "@props([\n    'title',\n    'description',\n    'link',\n    'icon' => null,\n])\n\n<a href=\"{{ $link }}\" {{ $attributes->merge(['class' => 'group block p-6 md:p-8 transition-colors duration-200 hover:bg-gray-50/50 dark:hover:bg-white/[0.02]']) }}>\n    <div class=\"flex flex-col h-full\">\n        <div class=\"mb-4 text-gray-400 dark:text-gray-500 group-hover:text-primary dark:group-hover:text-primary-400 transition-colors duration-200\">\n            @if($icon)\n                <x-dynamic-component :component=\"$icon\" class=\"h-6 w-6\"/>\n            @else\n                <x-heroicon-o-document-text class=\"h-6 w-6\"/>\n            @endif\n        </div>\n\n        <h3 class=\"font-display text-[15px] font-semibold text-gray-900 dark:text-white mb-2\">\n            {{ $title }}\n        </h3>\n        <div class=\"text-[13px] leading-relaxed text-gray-500 dark:text-gray-400 mb-5\">\n            @if($description)\n                <p>{{ $description }}</p>\n            @else\n                {{ $slot }}\n            @endif\n        </div>\n\n        <div class=\"mt-auto\">\n            <span class=\"inline-flex items-center gap-1 text-xs font-medium text-gray-900 dark:text-white group-hover:text-primary dark:group-hover:text-primary-400 transition-colors duration-200\">\n                Read docs\n                <x-ri-arrow-right-line class=\"w-3 h-3 group-hover:translate-x-0.5 transition-transform duration-200\"/>\n            </span>\n        </div>\n    </div>\n</a>\n"
  },
  {
    "path": "packages/Documentation/resources/views/components/layout.blade.php",
    "content": "@php\n    $documentTitle = '';\n    if (isset($document)) {\n        if (is_array($document)) {\n            $documentTitle = $document['title'] ?? '';\n        } else {\n            $documentTitle = $document->title ?? '';\n        }\n    }\n@endphp\n\n<x-guest-layout \n    :title=\"!empty($documentTitle) ? $documentTitle . ' - ' . config('app.name') . ' ' . __('Documentation') : config('app.name') . ' - ' . __('Documentation')\"\n    :description=\"!empty($documentTitle) ? $documentTitle . ' - Relaticle Documentation' : 'Documentation for Relaticle - the open-source CRM built for AI agents. Self-hosted with 30 MCP tools, REST API, and 22 custom field types.'\"\n    :ogTitle=\"!empty($documentTitle) ? $documentTitle . ' - ' . config('app.name') . ' ' . __('Documentation') : config('app.name') . ' - Documentation'\"\n    :ogDescription=\"!empty($documentTitle) ? 'Learn about ' . $documentTitle . ' in the Relaticle documentation.' : 'Explore the Relaticle documentation. Installation, MCP server setup, REST API integration, custom fields, and more.'\">\n    @pushonce('header')\n        @vite(['packages/Documentation/resources/js/documentation.js', 'packages/Documentation/resources/css/documentation.css'])\n    @endpushonce\n\n    <div class=\"pt-32 pb-24 md:pt-40 md:pb-32 bg-white dark:bg-black relative\">\n        <div class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative\">\n            <div class=\"documentation-content\">\n                {{ $slot }}\n            </div>\n        </div>\n    </div>\n\n    @php\n        $breadcrumbItems = [\n            \\Spatie\\SchemaOrg\\Schema::listItem()\n                ->position(1)\n                ->name('Home')\n                ->item(url('/')),\n            \\Spatie\\SchemaOrg\\Schema::listItem()\n                ->position(2)\n                ->name('Documentation')\n                ->item(route('documentation.index')),\n        ];\n\n        if (! empty($documentTitle)) {\n            $breadcrumbItems[] = \\Spatie\\SchemaOrg\\Schema::listItem()\n                ->position(3)\n                ->name($documentTitle)\n                ->item(url()->current());\n        }\n\n        $breadcrumbs = \\Spatie\\SchemaOrg\\Schema::breadcrumbList()\n            ->itemListElement($breadcrumbItems);\n    @endphp\n\n    {!! $breadcrumbs->toScript() !!}\n</x-guest-layout>\n"
  },
  {
    "path": "packages/Documentation/resources/views/components/search-form.blade.php",
    "content": "@props(['query' => ''])\n\n<form action=\"{{ route('documentation.search') }}\" method=\"GET\"\n      x-data\n      x-init=\"$nextTick(() => {\n          document.addEventListener('keydown', (e) => {\n              if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n                  e.preventDefault();\n                  $refs.searchInput.focus();\n              }\n          });\n      })\"\n      {{ $attributes->merge(['class' => 'relative']) }}>\n    <div class=\"relative flex items-center gap-2 rounded-full border border-gray-200/80 dark:border-white/[0.08] bg-white dark:bg-white/[0.03] px-4 py-1.5 shadow-[0_1px_3px_rgba(0,0,0,0.04)] focus-within:border-primary/40 dark:focus-within:border-primary/30 focus-within:shadow-[0_0_0_3px_rgba(124,58,237,0.06)] transition-all duration-200\">\n        <x-ri-search-line class=\"h-4 w-4 text-gray-400 dark:text-gray-500 shrink-0\"/>\n        <input\n            x-ref=\"searchInput\"\n            type=\"text\"\n            name=\"query\"\n            value=\"{{ $query }}\"\n            class=\"flex-1 bg-transparent border-none outline-none text-sm text-gray-700 dark:text-gray-200 placeholder-gray-400 dark:placeholder-gray-500 focus:ring-0 focus:outline-none p-0 py-1.5\"\n            style=\"box-shadow: none !important;\"\n            placeholder=\"Search documentation...\"\n        >\n        <kbd class=\"hidden sm:inline-flex items-center gap-0.5 rounded-md border border-gray-200/80 dark:border-white/[0.08] bg-gray-50/80 dark:bg-white/[0.04] px-1.5 py-0.5 text-[10px] font-medium text-gray-400 dark:text-gray-500\">\n            <span class=\"text-xs\">⌘</span>K\n        </kbd>\n        <button type=\"submit\"\n                class=\"shrink-0 flex items-center justify-center h-8 px-4 rounded-full bg-primary text-white text-xs font-medium hover:brightness-110 transition-all duration-200 cursor-pointer\">\n            Search\n        </button>\n    </div>\n</form>\n"
  },
  {
    "path": "packages/Documentation/resources/views/index.blade.php",
    "content": "<x-documentation::layout :document=\"null\" class=\"documentation-hub\">\n    <div class=\"absolute inset-0 bg-[linear-gradient(to_right,rgba(0,0,0,0.015)_1px,transparent_1px),linear-gradient(to_bottom,rgba(0,0,0,0.015)_1px,transparent_1px)] dark:bg-[linear-gradient(to_right,rgba(255,255,255,0.025)_1px,transparent_1px),linear-gradient(to_bottom,rgba(255,255,255,0.025)_1px,transparent_1px)] bg-[size:3rem_3rem] [mask-image:radial-gradient(ellipse_70%_50%_at_50%_50%,black_30%,transparent_100%)] pointer-events-none\"></div>\n\n    <div class=\"max-w-4xl mx-auto relative\">\n        <div class=\"text-center space-y-5 max-w-3xl mx-auto mb-12\">\n            <h1 class=\"font-display text-4xl sm:text-5xl font-bold text-gray-950 dark:text-white leading-[1.1] tracking-[-0.02em]\">\n                Documentation\n            </h1>\n            <p class=\"text-lg text-gray-500 dark:text-gray-400 max-w-2xl mx-auto leading-relaxed\">\n                Guides and resources to help you get the most out of Relaticle CRM.\n            </p>\n        </div>\n\n        <div class=\"mb-12 max-w-lg mx-auto\">\n            <x-documentation::search-form />\n        </div>\n\n        @php\n            $documentIcons = [\n                'getting-started' => 'ri-rocket-2-line',\n                'import' => 'ri-upload-2-line',\n                'mcp' => 'ri-cpu-line',\n                'developer' => 'ri-code-s-slash-line',\n                'self-hosting' => 'ri-server-line',\n                'api' => 'ri-terminal-box-line',\n            ];\n            $allDocs = collect($documentTypes);\n        @endphp\n\n        <h2 class=\"sr-only\">Available Guides</h2>\n        <div class=\"border-t border-gray-200/60 dark:border-white/[0.04] divide-y divide-gray-200/60 dark:divide-white/[0.04]\">\n            <div class=\"grid grid-cols-1 md:grid-cols-2 divide-y md:divide-y-0 md:divide-x divide-gray-200/60 dark:divide-white/[0.04]\">\n                @foreach($allDocs as $type => $document)\n                    @if($loop->index % 2 === 0 && !$loop->first)\n                        </div>\n                        <div class=\"grid grid-cols-1 md:grid-cols-2 divide-y md:divide-y-0 md:divide-x divide-gray-200/60 dark:divide-white/[0.04]\">\n                    @endif\n                    <x-documentation::card\n                        :title=\"$document['title']\"\n                        :description=\"$document['description'] ?? ''\"\n                        :link=\"isset($document['url']) ? $document['url'] : route('documentation.show', ['type' => $type])\"\n                        :icon=\"$documentIcons[$type] ?? null\"\n                    />\n                @endforeach\n            </div>\n        </div>\n    </div>\n</x-documentation::layout>\n"
  },
  {
    "path": "packages/Documentation/resources/views/search.blade.php",
    "content": "<x-documentation::layout :document=\"[\n    'title' => 'Search Results for: ' . $query\n]\">\n    <div class=\"max-w-4xl mx-auto\">\n\n        {{-- Back link --}}\n        <div class=\"mb-8 flex justify-center\">\n            <a href=\"{{ route('documentation.index') }}\" class=\"inline-flex items-center gap-1.5 text-sm font-medium text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\">\n                <x-ri-arrow-left-line class=\"w-3.5 h-3.5\"/>\n                Back to documentation\n            </a>\n        </div>\n\n        {{-- Header --}}\n        <div class=\"text-center max-w-2xl mx-auto mb-12\">\n            <h1 class=\"font-display text-4xl sm:text-5xl font-bold text-gray-950 dark:text-white leading-[1.1] tracking-[-0.02em]\">\n                Search Results\n            </h1>\n            @if($results->isNotEmpty())\n                <p class=\"mt-5 text-base text-gray-500 dark:text-gray-400\">\n                    {{ $results->count() }} {{ Str::plural('result', $results->count()) }} for \"{{ $query }}\"\n                </p>\n            @endif\n        </div>\n\n        {{-- Search form --}}\n        <div class=\"mb-14 max-w-lg mx-auto\">\n            <x-documentation::search-form :query=\"$query\" />\n        </div>\n\n        @if($results->isEmpty())\n            {{-- Empty state --}}\n            <div class=\"text-center max-w-md mx-auto\">\n                <div class=\"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-gray-100 dark:bg-white/[0.04] mb-4\">\n                    <x-ri-search-line class=\"w-5 h-5 text-gray-400 dark:text-gray-500\"/>\n                </div>\n\n                <h2 class=\"font-display text-lg font-semibold text-gray-900 dark:text-white mb-2\">\n                    No matches found\n                </h2>\n                <p class=\"text-sm text-gray-500 dark:text-gray-400 mb-8\">\n                    We couldn't find anything matching \"<span class=\"font-medium text-gray-700 dark:text-gray-300\">{{ $query }}</span>\"\n                </p>\n\n                <div class=\"text-left text-sm text-gray-500 dark:text-gray-400 space-y-2\">\n                    <p class=\"text-xs font-medium text-gray-400 dark:text-gray-500 uppercase tracking-wider mb-3\">Search tips</p>\n                    <div class=\"flex items-center gap-2\">\n                        <x-ri-check-line class=\"w-3.5 h-3.5 text-gray-300 dark:text-gray-600 shrink-0\"/>\n                        Try simpler or alternate terms\n                    </div>\n                    <div class=\"flex items-center gap-2\">\n                        <x-ri-check-line class=\"w-3.5 h-3.5 text-gray-300 dark:text-gray-600 shrink-0\"/>\n                        Check spelling of search terms\n                    </div>\n                    <div class=\"flex items-center gap-2\">\n                        <x-ri-check-line class=\"w-3.5 h-3.5 text-gray-300 dark:text-gray-600 shrink-0\"/>\n                        Use fewer keywords to broaden results\n                    </div>\n                </div>\n            </div>\n        @else\n            {{-- Results --}}\n            <div class=\"border-t border-gray-200/60 dark:border-white/[0.04] divide-y divide-gray-200/60 dark:divide-white/[0.04]\">\n                @foreach($results as $result)\n                    <a href=\"{{ $result->url }}\" class=\"group block p-6 transition-colors duration-200 hover:bg-gray-50/50 dark:hover:bg-white/[0.02]\">\n                        <div class=\"flex items-start justify-between gap-4\">\n                            <div class=\"flex-1 min-w-0\">\n                                <div class=\"flex items-center gap-2 mb-1.5\">\n                                    <span class=\"text-[11px] font-medium text-gray-400 dark:text-gray-500 uppercase tracking-wider\">\n                                        {{ $documentTypes[$result->type]['title'] }}\n                                    </span>\n                                </div>\n                                <h2 class=\"font-display text-[15px] font-semibold text-gray-900 dark:text-white mb-1.5\">\n                                    {{ $result->title }}\n                                </h2>\n                                <p class=\"text-[13px] leading-relaxed text-gray-500 dark:text-gray-400 line-clamp-2\">\n                                    {!! strip_tags($result->excerpt, '<mark>') !!}\n                                </p>\n                            </div>\n                            <x-ri-arrow-right-line class=\"w-3.5 h-3.5 text-gray-300 dark:text-gray-600 group-hover:text-gray-400 group-hover:translate-x-0.5 transition-all duration-200 shrink-0 mt-1\"/>\n                        </div>\n                    </a>\n                @endforeach\n            </div>\n        @endif\n    </div>\n</x-documentation::layout>\n"
  },
  {
    "path": "packages/Documentation/resources/views/show.blade.php",
    "content": "<x-documentation::layout :document=\"$document ?? null\">\n    <div class=\"grid grid-cols-12 gap-6 lg:gap-8 min-h-screen\">\n        <!-- Left Sidebar: Documentation Types -->\n        <div class=\"hidden sm:block col-span-12 sm:col-span-3 lg:col-span-2 relative\">\n            <div class=\"sticky top-24 pt-0.5 max-h-[calc(100vh-6rem)] overflow-y-auto pr-4 pb-16\">\n                <h2 class=\"text-sm font-semibold text-black dark:text-white mb-4 flex items-center space-x-2\">\n                    <x-heroicon-o-book-open class=\"h-4 w-4 text-primary dark:text-primary-400\" />\n                    <span>Documentation</span>\n                </h2>\n                <div class=\"flex flex-col space-y-1 border-l border-gray-200 dark:border-gray-800\">\n                    @foreach($documentTypes as $typeKey => $typeValue)\n                        <a href=\"{{ route('documentation.show', $typeKey) }}\"\n                           class=\"pl-4 py-2 text-sm rounded-r-md flex items-center gap-2 transition-all\n                                      {{ $currentType === $typeKey\n                                        ? 'border-l-2 border-primary border-l-primary-500 -ml-[1px] pl-[17px] dark:border-l-primary-400 bg-primary-50/50 dark:bg-primary-900/10 text-primary-600 dark:text-primary-400 font-medium'\n                                        : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800/50 hover:border-l hover:border-l-gray-300 dark:hover:border-l-gray-700 hover:-ml-[1px] hover:pl-[17px]' }}\">\n                            <span>{{ $typeValue['title'] }}</span>\n                        </a>\n                    @endforeach\n                </div>\n            </div>\n        </div>\n\n        <!-- Main Content Column -->\n        <div class=\"col-span-12 sm:col-span-9 md:col-span-6 lg:col-span-7 px-4\">\n            <!-- Documentation content with improved typography -->\n            <div id=\"documentation-content\"\n                 class=\"prose prose-sm sm:prose-base lg:prose-lg dark:prose-invert max-w-none mx-auto\">\n                {!! $content !!}\n            </div>\n\n            @php\n                $editFile = config(\"documentation.documents.{$currentType}.file\");\n            @endphp\n            @if($editFile)\n                <div class=\"mt-10 pt-6 border-t border-gray-200 dark:border-gray-800\">\n                    <a href=\"https://github.com/Relaticle/relaticle/edit/main/packages/Documentation/resources/markdown/{{ $editFile }}\"\n                       target=\"_blank\"\n                       rel=\"noopener noreferrer\"\n                       class=\"inline-flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400 transition-colors\">\n                        <x-ri-github-fill class=\"w-4 h-4\"/>\n                        Edit this page on GitHub\n                    </a>\n                </div>\n            @endif\n        </div>\n\n        <!-- Right Sidebar: Table of Contents -->\n        <aside class=\"hidden lg:block pb-16 col-span-3 print-hidden \">\n            <div class=\"sticky top-[5rem] pt-0.5 overflow-y-auto pb-16\">\n                @if(count($tableOfContents))\n                    <h3 class=\"text-sm font-semibold text-black dark:text-white mb-4 flex items-center space-x-2\">\n                        <x-heroicon-o-list-bullet class=\"h-4 w-4 text-primary dark:text-primary-400\" />\n                        <span>On this page</span>\n                    </h3>\n                    <nav>\n                        <ul class=\"space-y-2.5\">\n                            @foreach($tableOfContents as $fragment => $title)\n                                <li class=\"text-sm\">\n                                    <a href=\"#{{ $fragment }}\"\n                                       class=\"group flex items-center text-gray-600 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400 transition-colors border-l border-gray-200 dark:border-gray-800 pl-3 py-1 hover:border-primary-500 dark:hover:border-primary-400\">\n                                        <span class=\"truncate\">{{ $title }}</span>\n                                    </a>\n                                </li>\n                            @endforeach\n                        </ul>\n                    </nav>\n                @endif\n            </div>\n        </aside>\n    </div>\n</x-documentation::layout>\n"
  },
  {
    "path": "packages/Documentation/routes/web.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Relaticle\\Documentation\\Http\\Controllers\\DocumentationController;\nuse Spatie\\MarkdownResponse\\Middleware\\ProvideMarkdownResponse;\n\nRoute::middleware(ProvideMarkdownResponse::class)->prefix('docs')->name('documentation.')->group(function (): void {\n    Route::get('/', [DocumentationController::class, 'index'])->name('index');\n    Route::get('/search', [DocumentationController::class, 'search'])->name('search');\n    Route::get('/{type}', [DocumentationController::class, 'show'])->name('show');\n});\n"
  },
  {
    "path": "packages/Documentation/src/Components/Card.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation\\Components;\n\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\View\\Component;\n\nfinal class Card extends Component\n{\n    /**\n     * Create a new component instance.\n     */\n    public function __construct(\n        public ?string $title = null,\n        public ?string $header = null,\n        public ?string $icon = null,\n        public ?string $url = null,\n        public string $class = '',\n        public string $iconClass = '',\n    ) {\n        //\n    }\n\n    /**\n     * Get the view / contents that represent the component.\n     */\n    public function render(): View\n    {\n        return view('documentation::components.card');\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/src/Data/DocumentData.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation\\Data;\n\nuse Spatie\\LaravelData\\Attributes\\Validation\\StringType;\nuse Spatie\\LaravelData\\Data;\nuse Spatie\\LaravelMarkdown\\MarkdownRenderer;\n\nfinal class DocumentData extends Data\n{\n    public function __construct(\n        #[StringType]\n        public string $type,\n\n        #[StringType]\n        public string $title,\n\n        #[StringType]\n        public string $content,\n\n        /** @var array<string, string> $tableOfContents */\n        public array $tableOfContents,\n\n        public ?string $description = null,\n    ) {}\n\n    /**\n     * Create a document from the given type\n     */\n    public static function fromType(string $type): self\n    {\n        $documents = config('documentation.documents', []);\n\n        abort_if(! isset($documents[$type]), 404, 'Document not found');\n\n        $documentConfig = $documents[$type];\n        $file = $documentConfig['file'];\n        $title = $documentConfig['title'];\n        $description = $documentConfig['description'] ?? null;\n\n        $path = self::getMarkdownPath($file);\n\n        // Validate the path is within the intended directory\n        $realPath = realpath($path);\n        $resourcePath = realpath(config('documentation.markdown.base_path'));\n\n        abort_if($resourcePath === false, 500, 'Unable to determine resource path');\n\n        abort_if($realPath === '0' || $realPath === false || ! str_starts_with($realPath, $resourcePath) || ! file_exists($realPath), 404, 'Document not found');\n\n        $content = file_get_contents($realPath);\n\n        abort_if($content === false, 500, 'Unable to read document content');\n\n        $renderedContent = resolve(MarkdownRenderer::class)->toHtml($content);\n\n        $tableOfContents = self::extractTableOfContents($renderedContent);\n\n        return new self(\n            type: $type,\n            title: $title,\n            content: $renderedContent,\n            tableOfContents: $tableOfContents,\n            description: $description,\n        );\n    }\n\n    /**\n     * Extract table of contents from the rendered HTML\n     *\n     * @return array<string, string>\n     */\n    private static function extractTableOfContents(string $contents): array\n    {\n        $matches = [];\n\n        preg_match_all('/<h2.*><a.*id=\"([^\"]+)\".*>#<\\/a>([^<]+)/', $contents, $matches);\n\n        if (blank($matches[1]) || blank($matches[2])) {\n            return [];\n        }\n\n        return array_combine($matches[1], $matches[2]);\n    }\n\n    /**\n     * Get the path to the Markdown file\n     */\n    private static function getMarkdownPath(string $file): string\n    {\n        return config('documentation.markdown.base_path').'/'.$file;\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/src/Data/DocumentSearchRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation\\Data;\n\nuse Illuminate\\Validation\\Rule;\nuse Illuminate\\Validation\\Rules\\In;\nuse Spatie\\LaravelData\\Attributes\\Validation\\Min;\nuse Spatie\\LaravelData\\Attributes\\Validation\\StringType;\nuse Spatie\\LaravelData\\Data;\n\nfinal class DocumentSearchRequest extends Data\n{\n    public function __construct(\n        #[StringType]\n        #[Min(3)]\n        public string $query,\n\n        #[StringType]\n        public ?string $type = null,\n    ) {}\n\n    /**\n     * @return array<string, array<int, string|In>>\n     */\n    public static function rules(): array\n    {\n        $minLength = config('documentation.search.min_length', 3);\n        $documentTypes = array_keys(config('documentation.documents', []));\n\n        return [\n            'query' => ['required', 'string', 'min:'.$minLength],\n            'type' => ['nullable', 'string', Rule::in($documentTypes)],\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/src/Data/DocumentSearchResultData.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation\\Data;\n\nuse Spatie\\LaravelData\\Attributes\\Validation\\StringType;\nuse Spatie\\LaravelData\\Attributes\\Validation\\Url;\nuse Spatie\\LaravelData\\Attributes\\WithoutValidation;\nuse Spatie\\LaravelData\\Data;\n\nfinal class DocumentSearchResultData extends Data\n{\n    public function __construct(\n        #[StringType]\n        public string $type,\n\n        #[StringType]\n        public string $title,\n\n        #[StringType]\n        public string $excerpt,\n\n        #[WithoutValidation]\n        #[Url]\n        public string $url,\n\n        #[WithoutValidation]\n        public float $relevance = 0.0,\n    ) {}\n\n    /**\n     * Generate a URL for this search result\n     */\n    public static function generateUrl(string $type): string\n    {\n        return route('documentation.show', ['type' => $type]);\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/src/DocumentationServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation;\n\nuse Illuminate\\Support\\Facades\\Blade;\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Support\\ServiceProvider;\nuse Relaticle\\Documentation\\Services\\DocumentationService;\n\nfinal class DocumentationServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     */\n    public function register(): void\n    {\n        $this->mergeConfigFrom(__DIR__.'/../config/documentation.php', 'documentation');\n\n        $this->app->singleton(DocumentationService::class);\n    }\n\n    /**\n     * Bootstrap any application services.\n     */\n    public function boot(): void\n    {\n        $this->registerRoutes();\n        $this->registerViews();\n        $this->registerComponents();\n        $this->registerPublishing();\n    }\n\n    /**\n     * Register the package routes.\n     */\n    private function registerRoutes(): void\n    {\n        Route::middleware('web')\n            ->group(function (): void {\n                $this->loadRoutesFrom(__DIR__.'/../routes/web.php');\n            });\n    }\n\n    /**\n     * Register the package views.\n     */\n    private function registerViews(): void\n    {\n        $this->loadViewsFrom(__DIR__.'/../resources/views', 'documentation');\n    }\n\n    /**\n     * Register Blade components.\n     */\n    private function registerComponents(): void\n    {\n        // Register components with the 'documentation::' namespace\n        Blade::componentNamespace('Relaticle\\\\Documentation\\\\Components', 'documentation');\n\n        // Register anonymous components\n        $this->loadViewComponentsAs('documentation', []);\n    }\n\n    /**\n     * Register publishable resources.\n     */\n    private function registerPublishing(): void\n    {\n        if ($this->app->runningInConsole()) {\n            // Config\n            $this->publishes([\n                __DIR__.'/../config/documentation.php' => config_path('documentation.php'),\n            ], 'documentation-config');\n\n            // Views\n            $this->publishes([\n                __DIR__.'/../resources/views' => resource_path('views/vendor/documentation'),\n            ], 'documentation-views');\n\n            // Markdown\n            $this->publishes([\n                __DIR__.'/../resources/markdown' => resource_path('markdown/documentation'),\n            ], 'documentation-markdown');\n        }\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/src/Http/Controllers/DocumentationController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\View\\View;\nuse Relaticle\\Documentation\\Data\\DocumentSearchRequest;\nuse Relaticle\\Documentation\\Services\\DocumentationService;\n\nfinal readonly class DocumentationController\n{\n    public function __construct(\n        private DocumentationService $documentationService\n    ) {}\n\n    /**\n     * Display the documentation index page\n     */\n    public function index(): View\n    {\n        return view('documentation::index', [\n            'documentTypes' => $this->documentationService->getAllDocumentTypes(),\n        ]);\n    }\n\n    /**\n     * Display a specific documentation page\n     */\n    public function show(string $type = 'business'): View\n    {\n        $document = $this->documentationService->getDocument($type);\n\n        return view('documentation::show', [\n            'document' => $document,\n            'content' => $document->content,\n            'tableOfContents' => $document->tableOfContents,\n            'currentType' => $document->type,\n            'documentTitle' => $document->title,\n            'documentTypes' => $this->documentationService->getAllDocumentTypes(),\n        ]);\n    }\n\n    /**\n     * Search documentation\n     */\n    public function search(Request $request): View\n    {\n        $searchRequest = DocumentSearchRequest::from($request);\n        $results = $this->documentationService->search($searchRequest);\n\n        return view('documentation::search', [\n            'results' => $results,\n            'query' => $searchRequest->query,\n            'documentTypes' => $this->documentationService->getAllDocumentTypes(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "packages/Documentation/src/Services/DocumentationService.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\Documentation\\Services;\n\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\Documentation\\Data\\DocumentData;\nuse Relaticle\\Documentation\\Data\\DocumentSearchRequest;\nuse Relaticle\\Documentation\\Data\\DocumentSearchResultData;\n\nfinal class DocumentationService\n{\n    /**\n     * Get a document by its type\n     */\n    public function getDocument(string $type): DocumentData\n    {\n        if (! config('documentation.cache.enabled', true)) {\n            return DocumentData::fromType($type);\n        }\n\n        return Cache::remember(\n            \"documentation.{$type}\",\n            config('documentation.cache.ttl', 3600),\n            fn (): DocumentData => DocumentData::fromType($type)\n        );\n    }\n\n    /**\n     * Get all document types\n     *\n     * @return array<string, array<string, string>>\n     */\n    public function getAllDocumentTypes(): array\n    {\n        return config('documentation.documents', []);\n    }\n\n    /**\n     * Search for documents matching the query\n     *\n     * @return Collection<int, DocumentSearchResultData>\n     */\n    public function search(DocumentSearchRequest $searchRequest): Collection\n    {\n        $query = $searchRequest->query;\n        $type = $searchRequest->type;\n\n        $minLength = config('documentation.search.min_length', 3);\n\n        if (strlen($query) < $minLength) {\n            return DocumentSearchResultData::collect([], Collection::class);\n        }\n\n        $documentTypes = $this->getAllDocumentTypes();\n\n        // If a specific type is requested, only search that type\n        if ($type && isset($documentTypes[$type])) {\n            $documentTypes = [$type => $documentTypes[$type]];\n        }\n\n        $results = collect();\n\n        foreach ($documentTypes as $docType => $document) {\n            if (! isset($document['file'])) {\n                continue;\n            }\n\n            $path = $this->getMarkdownPath($document['file']);\n\n            if (! file_exists($path)) {\n                continue;\n            }\n\n            $content = file_get_contents($path);\n\n            if ($content === false) {\n                continue;\n            }\n\n            if (stripos($content, $query) === false) {\n                continue;\n            }\n\n            $results->push(\n                new DocumentSearchResultData(\n                    type: $docType,\n                    title: $document['title'],\n                    excerpt: $this->generateExcerpt($content, $query),\n                    url: DocumentSearchResultData::generateUrl($docType),\n                    relevance: $this->calculateRelevance($content, $query),\n                )\n            );\n        }\n\n        // Sort by relevance\n        $sortedResults = $results->sortByDesc('relevance')->values();\n\n        return DocumentSearchResultData::collect($sortedResults, Collection::class);\n    }\n\n    /**\n     * Generate an excerpt from content with the query highlighted\n     */\n    private function generateExcerpt(string $content, string $query): string\n    {\n        $position = stripos($content, $query);\n\n        if ($position === false) {\n            return Str::limit($content, 150);\n        }\n\n        $start = max(0, $position - 75);\n        $length = 150;\n        $excerpt = substr($content, $start, $length);\n\n        // Add ellipsis if needed\n        if ($start > 0) {\n            $excerpt = '...'.$excerpt;\n        }\n\n        if ($start + $length < strlen($content)) {\n            $excerpt .= '...';\n        }\n\n        // Highlight the matched query if configured\n        if (config('documentation.search.highlight', true)) {\n            $pattern = '/('.preg_quote($query, '/').')/i';\n            $excerpt = preg_replace($pattern, '<mark>$1</mark>', $excerpt);\n        }\n\n        return $excerpt;\n    }\n\n    /**\n     * Calculate the relevance score for a document based on the query\n     */\n    private function calculateRelevance(string $content, string $query): float\n    {\n        // Count occurrences\n        $count = substr_count(strtolower($content), strtolower($query));\n\n        // Check if the query is in a heading (more relevant)\n        $headingRelevance = 0;\n        if (preg_match('/#+ .*'.preg_quote($query, '/').'.*$/im', $content)) {\n            $headingRelevance = 2.0;\n        }\n\n        // Give more weight to exact case matches\n        $exactCaseCount = substr_count($content, $query);\n        $exactCaseMultiplier = $exactCaseCount > 0 ? 1.5 : 1.0;\n\n        // Calculate base relevance\n        $baseRelevance = $count / (strlen($content) / 1000);\n\n        return ($baseRelevance * $exactCaseMultiplier) + $headingRelevance;\n    }\n\n    /**\n     * Get the path to the markdown file\n     */\n    private function getMarkdownPath(string $file): string\n    {\n        return config('documentation.markdown.base_path').'/'.$file;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/config/import-wizard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    'max_rows' => 10_000,\n    'max_file_size' => 10 * 1024 * 1024, // 10MB\n    'storage_path' => storage_path('app/imports'),\n    'chunk_size' => 500,\n];\n"
  },
  {
    "path": "packages/ImportWizard/resources/lang/en/validation.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n    'invalid_date' => 'Cannot parse as :format date format.',\n    'invalid_choice' => '\":value\" is not a valid option.',\n    'invalid_number' => 'Cannot parse as number with :format decimal separator.',\n];\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/components/field-select.blade.php",
    "content": "@props([\n    'fields',\n    'entityLinks' => [],\n    'selected' => null,\n    'mappedFieldKeys' => [],\n    'mappedEntityLinkMatchers' => [],\n    'column',\n    'placeholder' => 'Select attribute',\n])\n\n@php\n    $dropdownId = \"fs-{$column}\";\n    $isFieldMapping = $selected?->isFieldMapping() ?? false;\n    $isEntityLinkMapping = $selected?->isEntityLinkMapping() ?? false;\n    $selectedField = $isFieldMapping ? $fields->get($selected->target) : null;\n    $selectedEntityLink = $isEntityLinkMapping ? ($entityLinks[$selected->entityLink] ?? null) : null;\n    $selectedMatcher = $selectedEntityLink?->getMatcher($selected->target);\n    $hasValue = $selectedField !== null || $selectedEntityLink !== null;\n\n    $sortedItems = collect($fields->all())\n        ->map(fn($f) => (object)[\n            'type' => 'field',\n            'item' => $f,\n            'key' => $f->key,\n            'order' => $f->sortOrder ?? -1\n        ])\n        ->concat(\n            collect($entityLinks)->map(fn($link, $key) => (object)[\n                'type' => 'link',\n                'item' => $link,\n                'key' => $key,\n                'order' => $link->sortOrder ?? -1\n            ])\n        )\n        ->sortBy('order');\n@endphp\n\n<div\n    x-data=\"{\n        open: false,\n        search: '',\n        activeSubmenu: null,\n        submenuPosition: { top: 0, left: 0 },\n        submenuTimeout: null,\n        dropdownId: {{ Js::from($dropdownId) }},\n        init() {\n            this.$watch('open', (isOpen) => {\n                if (isOpen) {\n                    this.$nextTick(() => this.$refs.searchInput?.focus());\n                } else {\n                    this.search = '';\n                    this.activeSubmenu = null;\n                }\n            });\n        },\n        toggle() {\n            if (this.open) {\n                this.close();\n            } else {\n                this.openPanel();\n            }\n        },\n        openPanel() {\n            if (this.open) return;\n            this.$refs.panel?.open?.(this.$refs.trigger);\n            this.open = true;\n        },\n        close() {\n            if (!this.open) return;\n            this.$refs.panel?.close?.();\n            this.open = false;\n        },\n        showSubmenu(name, event) {\n            clearTimeout(this.submenuTimeout);\n            const rect = event.currentTarget.getBoundingClientRect();\n            this.submenuPosition = { top: rect.top, left: rect.right + 4 };\n            this.activeSubmenu = name;\n\n            this.$nextTick(() => {\n                const el = document.querySelector('[data-submenu=' + CSS.escape(this.dropdownId + '-' + name) + ']');\n                if (!el) return;\n\n                const margin = 8;\n                const sh = el.offsetHeight;\n                const sw = el.offsetWidth;\n                const vh = window.innerHeight;\n                const vw = window.innerWidth;\n                let { top, left } = this.submenuPosition;\n\n                if (top + sh > vh - margin) {\n                    top = Math.max(margin, vh - sh - margin);\n                }\n\n                if (left + sw > vw - margin) {\n                    left = rect.left - sw - 4;\n                }\n\n                if (top !== this.submenuPosition.top || left !== this.submenuPosition.left) {\n                    this.submenuPosition = { top, left };\n                }\n            });\n        },\n        hideSubmenu() {\n            this.submenuTimeout = setTimeout(() => { this.activeSubmenu = null; }, 150);\n        },\n        keepSubmenu() {\n            clearTimeout(this.submenuTimeout);\n        },\n        selectField(fieldKey) {\n            this.$dispatch('field-selected', { column: {{ Js::from($column) }}, fieldKey });\n            this.close();\n        },\n        selectEntityLink(entityLinkKey, matcherKey) {\n            this.$dispatch('entity-link-selected', { column: {{ Js::from($column) }}, entityLinkKey, matcherKey });\n            this.close();\n        },\n        clear() {\n            this.$dispatch('field-cleared', { column: {{ Js::from($column) }} });\n        }\n    }\"\n    @click.outside=\"close()\"\n    @keydown.escape.window=\"open && close()\"\n    class=\"w-52 relative\"\n>\n    {{-- Trigger Button --}}\n    <button\n        type=\"button\"\n        role=\"combobox\"\n        aria-haspopup=\"listbox\"\n        :aria-expanded=\"open\"\n        aria-label=\"Map column {{ $column }} to field\"\n        class=\"w-full flex items-center gap-1.5 px-2.5 py-1.5 text-sm rounded-lg border bg-white dark:bg-gray-900 focus:outline-none transition-colors cursor-pointer\"\n        :class=\"open\n            ? 'border-primary-500 dark:border-primary-400 ring-2 ring-primary-500/20'\n            : 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'\"\n        x-ref=\"trigger\"\n        @click=\"toggle()\"\n    >\n        @if ($selectedEntityLink)\n            <x-filament::icon icon=\"{{ $selectedEntityLink->icon() }}\" class=\"w-3.5 h-3.5 text-gray-500 dark:text-gray-400 shrink-0\" />\n            <span class=\"flex-1 text-left text-gray-900 dark:text-white truncate text-sm\">\n                {{ $selectedEntityLink->label }}\n                @if ($selectedMatcher)\n                    <x-filament::icon icon=\"heroicon-m-chevron-right\" class=\"inline w-3 h-3 text-gray-400 dark:text-gray-500 mx-0.5\" />\n                    <span class=\"text-gray-500 dark:text-gray-400\">{{ $selectedMatcher->label }}</span>\n                @endif\n            </span>\n        @elseif ($selectedField)\n            <x-filament::icon icon=\"{{ $selectedField->icon ?? 'heroicon-o-squares-2x2' }}\" class=\"w-3.5 h-3.5 text-gray-500 dark:text-gray-400 shrink-0\" />\n            <span class=\"flex-1 text-left text-gray-900 dark:text-white truncate text-sm\">{{ $selectedField->label }}</span>\n        @else\n            <x-filament::icon icon=\"heroicon-o-squares-2x2\" class=\"w-3.5 h-3.5 text-gray-400 shrink-0\" />\n            <span class=\"flex-1 text-left text-gray-400 truncate text-sm\">{{ $placeholder }}</span>\n        @endif\n\n        @if ($hasValue)\n            <span\n                role=\"button\"\n                tabindex=\"0\"\n                @click.stop=\"clear()\"\n                @keydown.enter.stop=\"clear()\"\n                @keydown.space.stop=\"clear()\"\n                aria-label=\"Clear mapping\"\n                class=\"p-0.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 shrink-0 transition-colors\"\n            >\n                <x-filament::icon icon=\"heroicon-o-x-mark\" class=\"w-3.5 h-3.5\" />\n            </span>\n        @else\n            <x-filament::icon\n                icon=\"heroicon-o-chevron-down\"\n                class=\"w-3.5 h-3.5 text-gray-400 shrink-0 transition-transform duration-150\"\n                x-bind:class=\"open && 'rotate-180'\"\n            />\n        @endif\n    </button>\n\n    {{-- Dropdown Panel --}}\n    <div\n        x-ref=\"panel\"\n        x-cloak\n        x-show=\"open\"\n        x-float.placement.bottom-start.flip.offset.teleport=\"{ offset: 4 }\"\n        x-transition:enter=\"transition ease-out duration-100\"\n        x-transition:enter-start=\"opacity-0 scale-95\"\n        x-transition:enter-end=\"opacity-100 scale-100\"\n        role=\"listbox\"\n        aria-label=\"Available fields\"\n        class=\"absolute z-50 w-52 rounded-lg bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 shadow-lg ring-1 ring-black/5 dark:ring-white/5 overflow-hidden\"\n    >\n        {{-- Search Header --}}\n        <div class=\"relative border-b border-gray-200 dark:border-gray-700\">\n            <x-filament::icon icon=\"heroicon-o-magnifying-glass\" class=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400 pointer-events-none\" />\n            <input\n                type=\"text\"\n                placeholder=\"Search...\"\n                aria-label=\"Search fields\"\n                class=\"w-full h-8 pl-8 pr-2 text-xs bg-transparent text-gray-900 dark:text-white placeholder-gray-400 focus:outline-none\"\n                x-ref=\"searchInput\"\n                x-model=\"search\"\n            />\n        </div>\n\n        {{-- Options (unified sorted list) --}}\n        <div class=\"max-h-56 overflow-y-auto p-1\">\n            @foreach ($sortedItems as $entry)\n                @if ($entry->type === 'field')\n                    @php\n                        $field = $entry->item;\n                        $isSelected = $isFieldMapping && $selected->target === $field->key;\n                        $isMapped = in_array($field->key, $mappedFieldKeys) && !$isSelected;\n                    @endphp\n                    <button\n                        type=\"button\"\n                        role=\"option\"\n                        :aria-selected=\"{{ $isSelected ? 'true' : 'false' }}\"\n                        x-show=\"!search || {{ Js::from(strtolower($field->label)) }}.includes(search.toLowerCase())\"\n                        @click=\"selectField('{{ $field->key }}')\"\n                        {{ $isMapped ? 'disabled' : '' }}\n                        class=\"w-full flex items-center gap-1.5 px-2 py-1.5 text-xs rounded-md transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/50 focus-visible:bg-gray-50 dark:focus-visible:bg-gray-800\n                            {{ $isSelected ? 'bg-primary-50 dark:bg-primary-950/50 text-primary-700 dark:text-primary-300' : '' }}\n                            {{ $isMapped ? 'opacity-40 cursor-not-allowed' : 'hover:bg-gray-50 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200' }}\"\n                    >\n                        <x-filament::icon icon=\"{{ $field->icon ?? 'heroicon-o-squares-2x2' }}\" class=\"w-3.5 h-3.5 text-gray-400 shrink-0\" />\n                        <span class=\"truncate flex-1 text-left\">{{ $field->label }}{{ $field->required ? ' *' : '' }}</span>\n                        @if ($isMapped)\n                            <span class=\"text-[9px] text-gray-400 dark:text-gray-500 italic\">in use</span>\n                        @elseif ($isSelected)\n                            <x-filament::icon icon=\"heroicon-s-check\" class=\"w-3 h-3 text-primary-500 shrink-0\" />\n                        @endif\n                    </button>\n                @else\n                    @php\n                        $linkKey = $entry->key;\n                        $link = $entry->item;\n                        $isLinkSelected = $isEntityLinkMapping && $selected->entityLink === $linkKey;\n                        $linkMappedMatchers = $mappedEntityLinkMatchers[$linkKey] ?? [];\n                        $isLinkFullyMapped = count($linkMappedMatchers) >= count($link->matchableFields) && !$isLinkSelected;\n                    @endphp\n                    <div\n                        x-show=\"!search || {{ Js::from(strtolower($link->label)) }}.includes(search.toLowerCase())\"\n                        @if (!$isLinkFullyMapped)\n                            @mouseenter=\"showSubmenu('{{ $linkKey }}', $event)\"\n                            @mouseleave=\"hideSubmenu()\"\n                        @endif\n                    >\n                        <button\n                            type=\"button\"\n                            role=\"option\"\n                            aria-haspopup=\"menu\"\n                            {{ $isLinkFullyMapped ? 'disabled aria-disabled=true' : '' }}\n                            @if (!$isLinkFullyMapped)\n                                @focus=\"showSubmenu('{{ $linkKey }}', $event)\"\n                                @blur=\"hideSubmenu()\"\n                                @keydown.enter.prevent=\"showSubmenu('{{ $linkKey }}', $event)\"\n                                @keydown.space.prevent=\"showSubmenu('{{ $linkKey }}', $event)\"\n                                @keydown.arrow-right.prevent=\"showSubmenu('{{ $linkKey }}', $event)\"\n                            @endif\n                            class=\"w-full flex items-center gap-1.5 px-2 py-1.5 text-xs rounded-md transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/50 focus-visible:bg-gray-50 dark:focus-visible:bg-gray-800\n                                {{ $isLinkSelected ? 'bg-primary-50 dark:bg-primary-950/50 text-primary-700 dark:text-primary-300' : '' }}\n                                {{ $isLinkFullyMapped ? 'opacity-40 cursor-not-allowed' : 'hover:bg-gray-50 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200' }}\"\n                        >\n                            <x-filament::icon icon=\"{{ $link->icon() }}\" class=\"w-3.5 h-3.5 text-gray-400 shrink-0\" />\n                            <span class=\"flex-1 text-left\">{{ $link->label }}</span>\n                            @if ($isLinkFullyMapped)\n                                <span class=\"text-[9px] text-gray-400 dark:text-gray-500 italic\">in use</span>\n                            @else\n                                @if ($isLinkSelected)\n                                    <x-filament::icon icon=\"heroicon-s-check\" class=\"w-3 h-3 text-primary-500 shrink-0\" />\n                                @endif\n                                <x-filament::icon icon=\"heroicon-s-chevron-right\" class=\"w-3.5 h-3.5 shrink-0 {{ $isLinkSelected ? 'text-primary-400' : 'text-gray-400' }}\" />\n                            @endif\n                        </button>\n                    </div>\n                @endif\n            @endforeach\n        </div>\n    </div>\n\n    {{-- Teleported Submenus --}}\n    @foreach ($entityLinks as $linkKey => $link)\n        @php\n            $isLinkSelected = $isEntityLinkMapping && $selected->entityLink === $linkKey;\n        @endphp\n        <template x-teleport=\"body\">\n            <div\n                data-submenu=\"{{ $dropdownId }}-{{ $linkKey }}\"\n                x-cloak\n                x-show=\"activeSubmenu === '{{ $linkKey }}'\"\n                x-transition:enter=\"transition ease-out duration-100\"\n                x-transition:enter-start=\"opacity-0\"\n                x-transition:enter-end=\"opacity-100\"\n                :style=\"{ position: 'fixed', top: submenuPosition.top + 'px', left: submenuPosition.left + 'px' }\"\n                @mouseenter=\"keepSubmenu()\"\n                @mouseleave=\"hideSubmenu()\"\n                @keydown.escape.prevent=\"activeSubmenu = null\"\n                @keydown.arrow-left.prevent=\"activeSubmenu = null\"\n                x-effect=\"if (activeSubmenu === '{{ $linkKey }}') $nextTick(() => $el.querySelector('button')?.focus())\"\n                role=\"menu\"\n                aria-label=\"Match options for {{ $link->label }}\"\n                class=\"w-56 rounded-lg bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 shadow-lg overflow-hidden z-[60]\"\n            >\n                <div class=\"px-2.5 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50\">\n                    <span class=\"text-[10px] font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">Match by</span>\n                </div>\n                <div class=\"p-1\">\n                    @foreach ($link->matchableFields as $matcher)\n                        @php\n                            $isMatcherSelected = $isLinkSelected && $selected->target === $matcher->field;\n                            $globalMappedMatchers = $mappedEntityLinkMatchers[$linkKey] ?? [];\n                            $isMatcherUsed = in_array($matcher->field, $globalMappedMatchers) && !$isMatcherSelected;\n                        @endphp\n                        <button\n                            type=\"button\"\n                            role=\"menuitem\"\n                            @click=\"selectEntityLink('{{ $linkKey }}', '{{ $matcher->field }}')\"\n                            @keydown.enter.prevent=\"selectEntityLink('{{ $linkKey }}', '{{ $matcher->field }}')\"\n                            @keydown.space.prevent=\"selectEntityLink('{{ $linkKey }}', '{{ $matcher->field }}')\"\n                            {{ $isMatcherUsed ? 'disabled' : '' }}\n                            class=\"w-full px-2.5 py-2 text-left rounded-md transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/50 focus-visible:bg-gray-50 dark:focus-visible:bg-gray-800\n                                {{ $isMatcherSelected ? 'bg-primary-50 dark:bg-primary-950/50' : 'hover:bg-gray-50 dark:hover:bg-gray-800' }}\n                                {{ $isMatcherUsed ? 'opacity-40 cursor-not-allowed' : '' }}\"\n                        >\n                            <div class=\"flex items-center gap-1.5\">\n                                @if ($isMatcherSelected)\n                                    <x-filament::icon icon=\"heroicon-s-check\" class=\"w-3 h-3 text-primary-500 shrink-0\" />\n                                @endif\n                                <span class=\"text-sm font-medium {{ $isMatcherSelected ? 'text-primary-700 dark:text-primary-300' : 'text-gray-900 dark:text-white' }}\">\n                                    {{ $matcher->label }}\n                                </span>\n                                @if($isMatcherUsed)\n                                    <span class=\"text-[9px] text-gray-400 dark:text-gray-500 italic ml-auto\">in use</span>\n                                @endif\n                                @if ($matcher->isCreate())\n                                    <span class=\"px-1.5 py-0.5 text-[9px] font-medium rounded bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-400 ml-auto\">creates</span>\n                                @endif\n                            </div>\n                            <p class=\"text-[11px] text-gray-500 dark:text-gray-400 mt-1\">{{ $matcher->description() }}</p>\n                        </button>\n                    @endforeach\n                </div>\n            </div>\n        </template>\n    @endforeach\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/components/multi-value-input.blade.php",
    "content": "@props([\n    'value' => '',\n    'placeholder' => 'Add value...',\n    'disabled' => false,\n    'inputType' => 'text',\n    'borderless' => false,\n    'errors' => [],\n    'eventName' => 'input',\n])\n\n@php\n    $inputmode = match($inputType) {\n        'email' => 'email',\n        'url' => 'url',\n        'tel' => 'tel',\n        default => 'text',\n    };\n    $linkPrefix = match($inputType) {\n        'email' => 'mailto:',\n        'tel' => 'tel:',\n        'url' => '',\n        default => null,\n    };\n@endphp\n\n<div\n    x-data=\"{\n        values: @js(array_filter(array_map('trim', explode(',', $value ?? '')))),\n        errors: @js((array) $errors),\n        newValue: '',\n        isDisabled: @js($disabled),\n        inputType: @js($inputType),\n        linkPrefix: @js($linkPrefix),\n        eventName: @js($eventName),\n        maxVisibleValues: 3,\n        open: false,\n        documentClickListener: null,\n\n        get rootEl() {\n            return this.$refs.trigger?.closest('[data-multi-value-input]');\n        },\n\n        init() {\n            this.documentClickListener = (event) => {\n                if (!this.isOpen()) return;\n                const clickedInTrigger = this.rootEl?.contains(event.target);\n                const clickedInPanel = this.$refs.panel?.contains(event.target);\n                if (!clickedInTrigger && !clickedInPanel) {\n                    this.closePanel();\n                }\n            };\n            document.addEventListener('click', this.documentClickListener);\n        },\n\n        destroy() {\n            if (this.documentClickListener) {\n                document.removeEventListener('click', this.documentClickListener);\n            }\n        },\n\n        get hasValues() {\n            return this.values.length > 0;\n        },\n\n        get hasErrors() {\n            return Object.keys(this.errors).length > 0;\n        },\n\n        get errorCount() {\n            return Object.keys(this.errors).length;\n        },\n\n        get visibleValues() {\n            return this.values.slice(0, this.maxVisibleValues);\n        },\n\n        get hiddenCount() {\n            return Math.max(0, this.values.length - this.maxVisibleValues);\n        },\n\n        get hiddenErrorCount() {\n            return this.values.slice(this.maxVisibleValues).filter(v => this.hasError(v)).length;\n        },\n\n        get commaSeparated() {\n            return this.values.join(', ');\n        },\n\n        hasError(value) {\n            return this.errors.hasOwnProperty(value);\n        },\n\n        getError(value) {\n            return this.errors[value] || null;\n        },\n\n        isOpen() {\n            return this.open;\n        },\n\n        togglePanel() {\n            if (this.isDisabled) return;\n            this.open = !this.open;\n            if (this.open) {\n                this.newValue = '';\n                this.$nextTick(() => this.$refs.newInput?.focus());\n            }\n        },\n\n        openPanel() {\n            if (this.isDisabled) return;\n            this.open = true;\n            this.newValue = '';\n            this.$nextTick(() => this.$refs.newInput?.focus());\n        },\n\n        closePanel() {\n            this.open = false;\n            this.newValue = '';\n        },\n\n        addValue() {\n            const value = this.newValue.trim();\n            if (!value) return;\n\n            if (this.values.includes(value)) {\n                this.newValue = '';\n                return;\n            }\n\n            this.values.push(value);\n            this.newValue = '';\n            this.emitChange();\n            this.$nextTick(() => this.$refs.newInput?.focus());\n        },\n\n        deleteValue(valueToDelete) {\n            if (this.errors.hasOwnProperty(valueToDelete)) {\n                delete this.errors[valueToDelete];\n            }\n            this.values = this.values.filter((v) => v !== valueToDelete);\n            this.emitChange();\n        },\n\n        handleEnter(e) {\n            e.preventDefault();\n            this.addValue();\n        },\n\n        emitChange() {\n            this.rootEl?.dispatchEvent(new CustomEvent(this.eventName, {\n                detail: this.commaSeparated,\n                bubbles: true,\n            }));\n        },\n\n        reorderValues(event) {\n            const reordered = this.values.splice(event.oldIndex, 1)[0];\n            this.values.splice(event.newIndex, 0, reordered);\n            this.values = [...this.values];\n            this.emitChange();\n        },\n\n        getLink(value) {\n            if (!this.linkPrefix) return null;\n            return this.linkPrefix + value;\n        }\n    }\"\n    x-on:keydown.esc=\"isOpen() && (closePanel(), $event.stopPropagation())\"\n    x-on:update-errors=\"errors = $event.detail.errors || {}\"\n    data-multi-value-input\n    {{ $attributes->merge(['class' => 'relative w-full']) }}\n>\n    {{-- Trigger Button --}}\n    <button\n        type=\"button\"\n        x-ref=\"trigger\"\n        x-on:click.stop=\"togglePanel()\"\n        x-on:keydown.enter.prevent=\"togglePanel()\"\n        x-on:keydown.space.prevent=\"togglePanel()\"\n        :disabled=\"isDisabled\"\n        :aria-expanded=\"isOpen() ? 'true' : 'false'\"\n        aria-haspopup=\"dialog\"\n        @class([\n            'flex w-full min-h-[2rem] items-center gap-1.5 py-1 text-left focus:outline-none rounded transition-colors',\n            'px-2.5 border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 hover:border-gray-300 dark:hover:border-gray-600' => !$borderless,\n            'px-2 border-0 bg-transparent hover:bg-gray-50 dark:hover:bg-gray-800/50' => $borderless,\n        ])\n    >\n        {{-- Content area --}}\n        <div class=\"flex flex-1 items-center gap-1.5 overflow-hidden\">\n            {{-- Empty State --}}\n            <template x-if=\"!hasValues\">\n                <span class=\"text-sm text-gray-400 dark:text-gray-500\">\n                    {{ $placeholder }}\n                </span>\n            </template>\n\n            {{-- Visible Values as Tags --}}\n            <template x-for=\"(value, index) in visibleValues\" :key=\"`${value}-${index}`\">\n                <span\n                    class=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-xs font-medium truncate max-w-[120px]\"\n                    :class=\"hasError(value)\n                        ? 'bg-danger-50 text-danger-700 dark:bg-danger-950/50 dark:text-danger-400'\n                        : 'bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300'\"\n                    :title=\"hasError(value) ? getError(value) : value\"\n                >\n                    <template x-if=\"hasError(value)\">\n                        <x-heroicon-o-exclamation-triangle class=\"size-3 shrink-0\" aria-hidden=\"true\" />\n                    </template>\n                    <span class=\"truncate\" x-text=\"value\"></span>\n                </span>\n            </template>\n\n            {{-- \"+N more\" indicator (turns red when hidden items have errors) --}}\n            <template x-if=\"hiddenCount > 0\">\n                <span\n                    :class=\"hiddenErrorCount > 0\n                        ? 'text-danger-600 dark:text-danger-400 font-medium'\n                        : 'text-gray-500 dark:text-gray-400'\"\n                    class=\"text-xs shrink-0\"\n                >\n                    +<span x-text=\"hiddenCount\"></span>\n                </span>\n            </template>\n        </div>\n\n        {{-- Chevron indicator --}}\n        <x-heroicon-m-chevron-down\n            class=\"size-4 text-gray-400 dark:text-gray-500 shrink-0 transition-transform duration-150\"\n            x-bind:class=\"{ 'rotate-180': isOpen() }\"\n            aria-hidden=\"true\"\n        />\n    </button>\n\n    {{-- Popover Panel - teleported to body to avoid Livewire re-render z-index issues --}}\n    <template x-teleport=\"body\">\n        <div\n            x-cloak\n            x-show=\"open\"\n            x-anchor.bottom-start.offset.4=\"$refs.trigger\"\n            x-ref=\"panel\"\n            x-transition:enter=\"transition ease-out duration-100\"\n            x-transition:enter-start=\"opacity-0 scale-95\"\n            x-transition:enter-end=\"opacity-100 scale-100\"\n            x-transition:leave=\"transition ease-in duration-75\"\n            x-transition:leave-start=\"opacity-100 scale-100\"\n            x-transition:leave-end=\"opacity-0 scale-95\"\n            role=\"dialog\"\n            aria-label=\"Manage values\"\n            class=\"fixed z-[9999] min-w-[240px] rounded-lg bg-white shadow-lg ring-1 ring-gray-200 dark:bg-gray-900 dark:ring-gray-700 overflow-hidden\"\n            :style=\"{ width: $refs.trigger?.offsetWidth + 'px' }\"\n        >\n            {{-- Existing Values List --}}\n            <template x-if=\"hasValues\">\n                <div\n                    x-sortable\n                    x-on:end.stop=\"reorderValues($event)\"\n                    class=\"max-h-[240px] overflow-y-auto divide-y divide-gray-100 dark:divide-gray-800\"\n                >\n                <template x-for=\"(value, index) in values\" :key=\"`${value}-${index}`\">\n                    <div\n                        :x-sortable-item=\"value\"\n                        class=\"group flex items-center gap-2 px-3 py-2\"\n                    >\n                        {{-- Drag Handle --}}\n                        <div\n                            x-sortable-handle\n                            class=\"shrink-0 cursor-grab active:cursor-grabbing text-gray-300 dark:text-gray-600 hover:text-gray-400 dark:hover:text-gray-500\"\n                            x-show=\"values.length > 1\"\n                        >\n                            <svg class=\"size-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n                                <circle cx=\"7\" cy=\"5\" r=\"1.5\"/>\n                                <circle cx=\"13\" cy=\"5\" r=\"1.5\"/>\n                                <circle cx=\"7\" cy=\"10\" r=\"1.5\"/>\n                                <circle cx=\"13\" cy=\"10\" r=\"1.5\"/>\n                                <circle cx=\"7\" cy=\"15\" r=\"1.5\"/>\n                                <circle cx=\"13\" cy=\"15\" r=\"1.5\"/>\n                            </svg>\n                        </div>\n\n                        {{-- Value content --}}\n                        <div class=\"flex-1 min-w-0\">\n                            {{-- Invalid value as badge --}}\n                            <template x-if=\"hasError(value)\">\n                                <span\n                                    x-tooltip=\"{ content: getError(value), theme: $store.theme }\"\n                                    class=\"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-md text-xs font-medium bg-danger-50 text-danger-700 dark:bg-danger-950/50 dark:text-danger-400 cursor-help max-w-full\"\n                                >\n                                    <x-heroicon-o-exclamation-triangle class=\"size-3 shrink-0\" aria-hidden=\"true\" />\n                                    <span class=\"truncate\" x-text=\"value\"></span>\n                                </span>\n                            </template>\n\n                            {{-- Valid value as link or text --}}\n                            <template x-if=\"!hasError(value) && linkPrefix\">\n                                <a\n                                    :href=\"getLink(value)\"\n                                    class=\"text-sm text-primary-600 dark:text-primary-400 hover:underline truncate\"\n                                    x-text=\"value\"\n                                ></a>\n                            </template>\n                            <template x-if=\"!hasError(value) && !linkPrefix\">\n                                <span class=\"text-sm text-gray-900 dark:text-white truncate\" x-text=\"value\"></span>\n                            </template>\n                        </div>\n\n                        {{-- Delete Button --}}\n                        <button\n                            type=\"button\"\n                            x-on:click.stop=\"deleteValue(value)\"\n                            :aria-label=\"'Delete ' + value\"\n                            class=\"shrink-0 text-gray-400 hover:text-danger-500\"\n                        >\n                            <x-heroicon-m-x-mark class=\"size-4\" aria-hidden=\"true\" />\n                        </button>\n                    </div>\n                    </template>\n                </div>\n            </template>\n\n            {{-- Add New Value --}}\n            <div class=\"flex items-center gap-2 px-3 py-2.5 bg-gray-50 dark:bg-gray-800/50\">\n            <x-heroicon-m-plus class=\"size-4 text-gray-400 shrink-0\" aria-hidden=\"true\" />\n\n            <input\n                type=\"text\"\n                inputmode=\"{{ $inputmode }}\"\n                x-model=\"newValue\"\n                x-ref=\"newInput\"\n                x-on:keydown.enter=\"handleEnter($event)\"\n                aria-label=\"Add new value\"\n                class=\"flex-1 bg-transparent border-0 p-0 text-sm text-gray-900 dark:text-gray-100 placeholder:text-gray-400 dark:placeholder:text-gray-500 focus:ring-0 focus:outline-none\"\n                placeholder=\"{{ $placeholder }}\"\n            />\n\n            <button\n                type=\"button\"\n                x-on:click.stop=\"addValue()\"\n                :disabled=\"!newValue.trim()\"\n                aria-label=\"Add value\"\n                class=\"shrink-0 rounded-md px-2 py-1 text-xs font-medium text-primary-600 hover:bg-primary-50 dark:text-primary-400 dark:hover:bg-primary-950/50 transition-colors disabled:opacity-40 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-primary-500\"\n            >\n                Add\n            </button>\n            </div>\n        </div>\n    </template>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/components/select-menu.blade.php",
    "content": "@props([\n    'options' => [],\n    'multiple' => false,\n    'searchable' => true,\n    'placeholder' => 'Select...',\n    'disabled' => false,\n    'label' => null,\n    'inlineLabel' => null,\n    'icon' => null,\n    'value' => null,\n    'borderless' => false,\n])\n\n@php\n    // Normalize options to consistent format: [{value, label, description?, invalid?}]\n    $normalizedOptions = collect($options)->map(function ($option, $key) {\n        if (is_array($option) && isset($option['value'])) {\n            return [\n                'value' => $option['value'],\n                'label' => (string) ($option['label'] ?? $option['value']),\n                'description' => isset($option['description']) ? (string) $option['description'] : null,\n                'invalid' => ! empty($option['invalid']),\n            ];\n        }\n        if (is_string($key)) {\n            return ['value' => $key, 'label' => (string) $option, 'description' => null, 'invalid' => false];\n        }\n        return ['value' => $option, 'label' => (string) $option, 'description' => null, 'invalid' => false];\n    })->values()->all();\n\n    // Extract wire:model for Livewire integration\n    $wireModel = $attributes->wire('model')->value();\n    $hasLiveModifier = $attributes->wire('model')->hasModifier('live');\n@endphp\n\n<div\n    :data-state=\"open ? 'open' : 'closed'\"\n    @if($wireModel)\n    wire:ignore\n    @endif\n    x-modelable=\"state\"\n    x-data=\"{\n        open: false,\n        search: '',\n        state: @if($wireModel) $wire.$entangle('{{ $wireModel }}'{{ $hasLiveModifier ? ', { live: true }' : '' }}) @else @js($value ?? ($multiple ? [] : null)) @endif,\n        multiple: @js($multiple),\n        options: @js($normalizedOptions),\n        disabled: @js($disabled),\n        searchable: @js($searchable),\n        activeIndex: -1,\n\n        init() {\n            this.$watch('open', (isOpen) => {\n                if (isOpen) {\n                    this.activeIndex = this.getInitialActiveIndex();\n                    this.$nextTick(() => {\n                        this.scrollActiveIntoView();\n                        if (this.searchable) {\n                            this.$refs.searchInput?.focus();\n                        }\n                    });\n                } else {\n                    this.activeIndex = -1;\n                    this.search = '';\n                }\n            });\n        },\n\n        get selected() {\n            return this.state;\n        },\n\n        set selected(value) {\n            this.state = value;\n        },\n\n        get displayText() {\n            if (!this.hasValue) return null;\n            if (this.multiple && Array.isArray(this.selected)) {\n                return this.selected.map(v => this.getOption(v)?.label || v).join(', ');\n            }\n            const opt = this.getOption(this.selected);\n            return opt ? opt.label : String(this.selected ?? '');\n        },\n\n        get hasValue() {\n            if (this.multiple) {\n                return Array.isArray(this.selected) && this.selected.length > 0;\n            }\n            return this.selected !== null && this.selected !== undefined && this.selected !== '';\n        },\n\n        get isMissingSingleSelect() {\n            if (this.multiple) return false;\n            if (!this.hasValue) return false;\n            return !this.getOption(this.selected);\n        },\n\n        get filteredOptions() {\n            // Filter out invalid options that aren't selected (they disappear when unselected)\n            let opts = this.options.filter(o => !o.invalid || this.isSelected(o.value));\n\n            // Apply search filter\n            if (!this.search || !this.search.trim()) return opts;\n            const q = this.search.toLowerCase().trim();\n            return opts.filter(o => {\n                const label = String(o.label || '').toLowerCase();\n                const desc = o.description ? String(o.description).toLowerCase() : '';\n                return label.includes(q) || desc.includes(q);\n            });\n        },\n\n        get activeDescendant() {\n            if (!this.open || this.activeIndex < 0 || this.activeIndex >= this.filteredOptions.length) {\n                return null;\n            }\n            return this.getOptionId(this.activeIndex);\n        },\n\n        getInitialActiveIndex() {\n            if (!this.hasValue) return 0;\n            if (this.multiple && Array.isArray(this.selected) && this.selected.length > 0) {\n                const index = this.filteredOptions.findIndex(o => this.valuesEqual(o.value, this.selected[0]));\n                return index >= 0 ? index : 0;\n            }\n            if (!this.multiple && this.selected !== null) {\n                const index = this.filteredOptions.findIndex(o => this.valuesEqual(o.value, this.selected));\n                return index >= 0 ? index : 0;\n            }\n            return 0;\n        },\n\n        toggle() {\n            if (this.disabled) return;\n            if (this.open) {\n                this.close();\n            } else {\n                this.openPanel();\n            }\n        },\n\n        openPanel() {\n            if (this.disabled || this.open) return;\n            this.$refs.panel?.open?.(this.$refs.trigger);\n            this.open = true;\n        },\n\n        close() {\n            if (!this.open) return;\n            this.$refs.panel?.close?.();\n            this.open = false;\n            // Dispatch change event when closing (useful for syncing multi-select on close)\n            this.$dispatch('change', this.selected);\n        },\n\n        select(value) {\n            if (this.multiple) {\n                let current = Array.isArray(this.selected) ? [...this.selected] : [];\n                if (this.isSelected(value)) {\n                    current = current.filter(v => !this.valuesEqual(v, value));\n                } else {\n                    current.push(value);\n                }\n                this.selected = current;\n                this.announceSelection(value);\n                this.$dispatch('input', current);\n            } else {\n                // Single-select: clicking already-selected invalid option clears selection\n                const option = this.options.find(o => this.valuesEqual(o.value, value));\n                if (this.isSelected(value) && option?.invalid) {\n                    this.open = false;\n                    this.selected = null;\n                    this.$dispatch('input', null);\n                    return;\n                }\n\n                // Close first (instantly) to avoid transition collision with Livewire\n                // When entangled with wire:model.live, setting selected triggers Livewire\n                // which morphs the DOM while leave transition would still be animating\n                this.open = false;\n                this.selected = value;\n                this.$dispatch('input', value);\n            }\n        },\n\n        valuesEqual(a, b) {\n            if (a == null && b == null) return true;\n            if (a == null || b == null) return false;\n            return String(a) === String(b);\n        },\n\n        isSelected(value) {\n            if (this.multiple) {\n                if (!Array.isArray(this.selected)) return false;\n                return this.selected.some(v => this.valuesEqual(v, value));\n            }\n            return this.valuesEqual(this.selected, value);\n        },\n\n        getOption(value) {\n            return this.options.find(o => this.valuesEqual(o.value, value)) || null;\n        },\n\n        getOptionId(index) {\n            return this.$id('option-' + index);\n        },\n\n        onKeydown(event) {\n            if (this.disabled) return;\n\n            switch (event.key) {\n                case 'ArrowDown':\n                    event.preventDefault();\n                    event.stopPropagation();\n                    if (this.open) {\n                        this.focusNext();\n                    } else {\n                        this.openPanel();\n                    }\n                    break;\n                case 'ArrowUp':\n                    event.preventDefault();\n                    event.stopPropagation();\n                    if (this.open) {\n                        this.focusPrevious();\n                    } else {\n                        this.openPanel();\n                    }\n                    break;\n                case 'Home':\n                    if (this.open) { event.preventDefault(); this.focusFirst(); }\n                    break;\n                case 'End':\n                    if (this.open) { event.preventDefault(); this.focusLast(); }\n                    break;\n                case 'Enter':\n                    event.preventDefault();\n                    if (this.open && this.activeIndex >= 0 && this.activeIndex < this.filteredOptions.length) {\n                        this.select(this.filteredOptions[this.activeIndex].value);\n                    } else if (!this.open) {\n                        this.openPanel();\n                    }\n                    break;\n                case ' ':\n                    if (this.searchable && document.activeElement === this.$refs.searchInput) {\n                        return;\n                    }\n                    if (!this.open) {\n                        event.preventDefault();\n                        this.openPanel();\n                    }\n                    break;\n                case 'Tab':\n                    if (this.open) this.close();\n                    break;\n            }\n        },\n\n        onSearchKeydown(event) {\n            switch (event.key) {\n                case 'ArrowDown':\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.focusNext();\n                    break;\n                case 'ArrowUp':\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.focusPrevious();\n                    break;\n                case 'Enter':\n                    event.preventDefault();\n                    event.stopPropagation();\n                    if (this.activeIndex >= 0 && this.activeIndex < this.filteredOptions.length) {\n                        this.select(this.filteredOptions[this.activeIndex].value);\n                    } else if (this.filteredOptions.length > 0) {\n                        this.select(this.filteredOptions[0].value);\n                    }\n                    break;\n                case 'Escape':\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.close();\n                    this.$refs.trigger?.focus();\n                    break;\n            }\n        },\n\n        onSearchInput() {\n            this.activeIndex = this.filteredOptions.length > 0 ? 0 : -1;\n        },\n\n        focusNext() {\n            const max = this.filteredOptions.length - 1;\n            if (max < 0) return;\n            this.activeIndex = this.activeIndex >= max ? 0 : this.activeIndex + 1;\n            this.scrollActiveIntoView();\n        },\n\n        focusPrevious() {\n            const max = this.filteredOptions.length - 1;\n            if (max < 0) return;\n            this.activeIndex = this.activeIndex <= 0 ? max : this.activeIndex - 1;\n            this.scrollActiveIntoView();\n        },\n\n        focusFirst() {\n            if (this.filteredOptions.length === 0) return;\n            this.activeIndex = 0;\n            this.scrollActiveIntoView();\n        },\n\n        focusLast() {\n            if (this.filteredOptions.length === 0) return;\n            this.activeIndex = this.filteredOptions.length - 1;\n            this.scrollActiveIntoView();\n        },\n\n        scrollActiveIntoView() {\n            this.$nextTick(() => {\n                const activeOption = this.$refs.listbox?.querySelector('[data-highlighted]');\n                if (activeOption) {\n                    activeOption.scrollIntoView({ block: 'nearest' });\n                }\n            });\n        },\n\n        announceSelection(value) {\n            const option = this.getOption(value);\n            if (option && this.$refs.announcer) {\n                const action = this.isSelected(value) ? 'selected' : 'deselected';\n                let message = option.label + ' ' + action;\n\n                if (this.multiple && Array.isArray(this.selected)) {\n                    const count = this.selected.length;\n                    message += `. ${count} item${count !== 1 ? 's' : ''} total`;\n                }\n\n                this.$refs.announcer.textContent = message;\n            }\n        },\n    }\"\n    x-on:click.outside=\"close()\"\n    x-on:keydown.esc=\"open && (close(), $event.stopPropagation())\"\n    x-on:keydown=\"onKeydown($event)\"\n    {{ $attributes->whereDoesntStartWith(['wire:model', 'x-model'])->merge(['class' => 'relative']) }}\n>\n    {{-- Hidden live region for screen reader announcements --}}\n    <div x-ref=\"announcer\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\"></div>\n\n    {{-- Optional visible label --}}\n    @if ($label)\n        <label :id=\"$id('label')\" class=\"block text-xs font-medium text-gray-700 dark:text-gray-300 mb-1\">\n            {{ $label }}\n        </label>\n    @endif\n\n    {{-- Trigger Button --}}\n    <button\n        x-ref=\"trigger\"\n        type=\"button\"\n        role=\"combobox\"\n        :id=\"$id('button')\"\n        aria-haspopup=\"listbox\"\n        :aria-expanded=\"open ? 'true' : 'false'\"\n        :aria-controls=\"$id('listbox')\"\n        :aria-activedescendant=\"activeDescendant\"\n        @if ($label)\n            :aria-labelledby=\"$id('label')\"\n        @else\n            aria-label=\"{{ $placeholder }}\"\n        @endif\n        :disabled=\"disabled\"\n        @class([\n            'w-full flex items-center text-sm focus:outline-none',\n            'gap-1.5 px-2.5 py-1.5 rounded-lg border' => !$borderless,\n            'gap-2 px-2 py-1 border-0 bg-transparent' => $borderless,\n            'cursor-not-allowed opacity-50' => $disabled,\n            'cursor-pointer' => !$disabled,\n        ])\n        @if(!$borderless)\n        :class=\"[\n            open\n                ? 'border-primary-500 dark:border-primary-400 ring-2 ring-primary-500/20'\n                : 'border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 bg-white dark:bg-gray-900'\n        ]\"\n        @endif\n        x-on:click=\"toggle()\"\n    >\n        @if ($icon)\n            <x-filament::icon\n                :icon=\"$icon\"\n                class=\"w-4 h-4 text-gray-400 shrink-0\"\n                aria-hidden=\"true\"\n            />\n        @endif\n\n        <span class=\"flex-1 text-left truncate text-sm min-w-0\">\n            @if ($inlineLabel)\n                <span class=\"text-gray-500 dark:text-gray-400\">{{ $inlineLabel }}</span>\n            @endif\n            {{-- Missing single-select: show warning badge --}}\n            <template x-if=\"isMissingSingleSelect\">\n                <span class=\"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-warning-50 text-warning-700 dark:bg-warning-950/50 dark:text-warning-400\">\n                    Missing select option\n                </span>\n            </template>\n            {{-- Normal display --}}\n            <template x-if=\"!isMissingSingleSelect\">\n                <span\n                    :class=\"hasValue ? 'text-gray-900 dark:text-white' : 'text-gray-400'\"\n                    :title=\"displayText\"\n                    x-text=\"displayText || '{{ $placeholder }}'\"\n                ></span>\n            </template>\n        </span>\n\n        <x-filament::icon\n            icon=\"heroicon-o-chevron-down\"\n            class=\"w-3.5 h-3.5 text-gray-400 shrink-0 transition-transform duration-150\"\n            x-bind:class=\"open && 'rotate-180'\"\n            aria-hidden=\"true\"\n        />\n    </button>\n\n    {{-- Dropdown Panel --}}\n    <div\n        x-cloak\n        x-show=\"open\"\n        x-float.placement.bottom-start.flip.offset=\"{ offset: 4 }\"\n        x-transition:enter=\"transition ease-out duration-100\"\n        x-transition:enter-start=\"opacity-0 scale-95\"\n        x-transition:enter-end=\"opacity-100 scale-100\"\n        x-ref=\"panel\"\n        class=\"absolute z-50 w-full min-w-[200px] rounded-lg bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 shadow-lg ring-1 ring-black/5 dark:ring-white/5 overflow-hidden\"\n    >\n        @if ($searchable)\n            <div class=\"relative border-b border-gray-200 dark:border-gray-700\">\n                <x-filament::icon icon=\"heroicon-o-magnifying-glass\" class=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400 pointer-events-none\" aria-hidden=\"true\" />\n                <input\n                    type=\"text\"\n                    placeholder=\"Search...\"\n                    aria-label=\"Search options\"\n                    :aria-controls=\"$id('listbox')\"\n                    :aria-activedescendant=\"activeDescendant\"\n                    class=\"w-full h-8 pl-8 pr-2 text-xs bg-transparent text-gray-900 dark:text-white placeholder-gray-400 focus:outline-none\"\n                    x-ref=\"searchInput\"\n                    x-model=\"search\"\n                    x-on:input=\"onSearchInput()\"\n                    x-on:keydown=\"onSearchKeydown($event)\"\n                />\n            </div>\n        @endif\n\n        {{-- Listbox --}}\n        <ul\n            x-ref=\"listbox\"\n            role=\"listbox\"\n            :id=\"$id('listbox')\"\n            :aria-multiselectable=\"multiple ? 'true' : 'false'\"\n            :aria-labelledby=\"$id('button')\"\n            tabindex=\"-1\"\n            class=\"max-h-56 overflow-y-auto p-1 focus:outline-none\"\n        >\n            <template x-for=\"(option, index) in filteredOptions\" :key=\"option.value\">\n                <li\n                    role=\"option\"\n                    :id=\"getOptionId(index)\"\n                    :aria-selected=\"isSelected(option.value) ? 'true' : 'false'\"\n                    :data-highlighted=\"activeIndex === index ? '' : undefined\"\n                    :data-selected=\"isSelected(option.value) ? '' : undefined\"\n                    :data-invalid=\"option.invalid ? '' : undefined\"\n                    x-on:click.stop=\"select(option.value)\"\n                    x-on:mouseenter=\"activeIndex = index\"\n                    class=\"w-full text-left px-2.5 py-2 rounded-md transition-colors cursor-pointer\"\n                    :class=\"activeIndex === index\n                        ? 'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white'\n                        : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800'\"\n                >\n                    <div class=\"flex items-center gap-1.5\">\n                        {{-- Invalid option: badge style --}}\n                        <template x-if=\"option.invalid\">\n                            <span\n                                class=\"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-md text-xs font-medium bg-danger-50 text-danger-700 dark:bg-danger-950/50 dark:text-danger-400 min-w-0 max-w-[70%]\"\n                                :title=\"option.label + ' - ' + option.description\"\n                            >\n                                <x-heroicon-o-exclamation-triangle class=\"size-3 shrink-0\" aria-hidden=\"true\" />\n                                <span class=\"truncate\" x-text=\"option.label\"></span>\n                            </span>\n                        </template>\n\n                        {{-- Valid option: label + description --}}\n                        <template x-if=\"!option.invalid\">\n                            <span class=\"truncate flex-1 min-w-0\">\n                                <span class=\"text-xs block truncate\" :title=\"option.label\" x-text=\"option.label\"></span>\n                                <template x-if=\"option.description\">\n                                    <span class=\"text-[10px] text-gray-400 dark:text-gray-500 block truncate\" x-text=\"option.description\"></span>\n                                </template>\n                            </span>\n                        </template>\n\n                        {{-- Spacer to push checkmark right --}}\n                        <template x-if=\"option.invalid\">\n                            <span class=\"flex-1\"></span>\n                        </template>\n\n                        {{-- Checkmark on right for all options --}}\n                        <span\n                            class=\"w-4 h-4 shrink-0 flex items-center justify-center transition-opacity duration-75\"\n                            :class=\"isSelected(option.value) ? 'opacity-100' : 'opacity-0'\"\n                            aria-hidden=\"true\"\n                        >\n                            <x-filament::icon icon=\"heroicon-s-check\" class=\"w-4 h-4 text-primary-600 dark:text-primary-400\" />\n                        </span>\n                    </div>\n                </li>\n            </template>\n\n            <template x-if=\"filteredOptions.length === 0 && options.length > 0\">\n                <li role=\"option\" aria-disabled=\"true\" class=\"px-2 py-3 text-xs text-gray-500 dark:text-gray-400 text-center\">\n                    No matching options\n                </li>\n            </template>\n\n            <template x-if=\"options.length === 0\">\n                <li role=\"option\" aria-disabled=\"true\" class=\"px-2 py-3 text-xs text-gray-500 dark:text-gray-400 text-center\">\n                    No options available\n                </li>\n            </template>\n        </ul>\n    </div>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/components/value-row-actions.blade.php",
    "content": "{{-- Shared action buttons for value row partials --}}\n@props([\n    'selectedColumn',\n    'rawValue',\n    'hasCorrection' => false,\n    'showSkip' => true,\n    'showUndo' => null,\n    'undoTitle' => 'Undo correction',\n])\n\n@php\n    $showUndo = $showUndo ?? $hasCorrection;\n@endphp\n\n<div class=\"flex items-center bg-gray-50 dark:bg-gray-900 border-l border-gray-200 dark:border-gray-700 shrink-0\">\n    @if ($showUndo)\n        <button\n            wire:click.stop.preserve-scroll=\"undoCorrection({{ Js::from($rawValue) }})\"\n            class=\"p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 dark:hover:text-gray-300 dark:hover:bg-gray-700 transition-colors\"\n            title=\"{{ $undoTitle }}\"\n            aria-label=\"{{ $undoTitle }}\"\n        >\n            <x-filament::icon icon=\"heroicon-o-arrow-uturn-left\" class=\"w-4 h-4\"/>\n        </button>\n        @if ($showSkip)\n            <div class=\"w-px h-4 bg-gray-200 dark:bg-gray-700\"></div>\n        @endif\n    @endif\n\n    @if ($showSkip)\n        <button\n            wire:click.stop.preserve-scroll=\"skipValue({{ Js::from($rawValue) }})\"\n            class=\"p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-50 dark:hover:text-gray-400 dark:hover:bg-gray-950/50 transition-colors\"\n            title=\"Skip this value\"\n            aria-label=\"Skip this value\"\n        >\n            <x-filament::icon icon=\"heroicon-o-no-symbol\" class=\"w-4 h-4\"/>\n        </button>\n    @endif\n\n    {{ $slot }}\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/filament/pages/import-history.blade.php",
    "content": "<x-filament-panels::page>\n    {{ $this->table }}\n</x-filament-panels::page>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/filament/pages/import-page.blade.php",
    "content": "<x-filament-panels::page>\n    <livewire:import-wizard-new.wizard\n        :entity-type=\"$this->getEntityType()\"\n        :return-url=\"$this->getReturnUrl()\"\n    />\n</x-filament-panels::page>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/import-wizard.blade.php",
    "content": "<div class=\"flex flex-col h-[calc(100vh-13.8rem)]\">\n    {{-- Step Progress --}}\n    @include('import-wizard-new::livewire.partials.step-indicator')\n\n    {{-- Step Content (Child Components) --}}\n    <div class=\"flex-1 min-h-0 overflow-hidden flex flex-col [&>div]:flex-1 [&>div]:min-h-0 [&>div]:flex [&>div]:flex-col\">\n        @if($currentStep === self::STEP_UPLOAD)\n            <livewire:import-wizard-new.steps.upload\n                :entity-type=\"$entityType\"\n                :store-id=\"$storeId\"\n                @completed=\"onUploadCompleted($event.detail.storeId, $event.detail.rowCount, $event.detail.columnCount)\"\n                :wire:key=\"'upload-' . ($storeId ?? 'new')\"\n            />\n        @elseif($currentStep === self::STEP_MAP)\n            <livewire:import-wizard-new.steps.mapping\n                :store-id=\"$storeId\"\n                :entity-type=\"$entityType\"\n                @completed=\"nextStep\"\n                :wire:key=\"'map-' . $storeId\"\n            />\n        @elseif($currentStep === self::STEP_REVIEW)\n            <livewire:import-wizard-new.steps.review\n                :store-id=\"$storeId\"\n                :entity-type=\"$entityType\"\n                @completed=\"nextStep\"\n                :wire:key=\"'review-' . $storeId\"\n            />\n        @elseif($currentStep === self::STEP_PREVIEW)\n            <livewire:import-wizard-new.steps.preview\n                :store-id=\"$storeId\"\n                :entity-type=\"$entityType\"\n                :wire:key=\"'preview-' . $storeId\"\n            />\n        @endif\n    </div>\n\n    {{-- Filament Action Modals --}}\n    <x-filament-actions::modals />\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/partials/step-indicator.blade.php",
    "content": "<nav class=\"mb-8\" aria-label=\"Progress\">\n    <ol role=\"list\" class=\"flex items-center gap-2\">\n        @foreach ([1 => 'Upload', 2 => 'Map', 3 => 'Review', 4 => 'Import'] as $step => $label)\n            @php\n                $isCompleted = $step < $currentStep;\n                $isCurrent = $step === $currentStep;\n            @endphp\n            <li class=\"flex items-center\">\n                @if ($isCompleted && ! $importStarted)\n                    <button\n                        type=\"button\"\n                        wire:click=\"goToStep({{ $step }})\"\n                        class=\"flex items-center gap-2 text-sm transition-colors cursor-pointer hover:opacity-80\"\n                    >\n                        <span class=\"inline-flex items-center justify-center h-5 w-5 rounded text-xs font-medium bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-300\">{{ $step }}</span>\n                        <span class=\"text-gray-500 dark:text-gray-400\">{{ $label }}</span>\n                    </button>\n                @else\n                    <span class=\"flex items-center gap-2 text-sm\">\n                        <span @class([\n                            'inline-flex items-center justify-center h-5 w-5 rounded text-xs font-medium',\n                            'bg-primary-600 text-white' => $isCurrent,\n                            'bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-300' => !$isCurrent,\n                        ])>{{ $step }}</span>\n                        <span @class([\n                            'text-gray-950 dark:text-white' => $isCurrent,\n                            'text-gray-500 dark:text-gray-400' => !$isCurrent,\n                        ])>{{ $label }}</span>\n                    </span>\n                @endif\n                @if ($step < 4)\n                    <x-filament::icon icon=\"heroicon-m-chevron-right\" class=\"h-4 w-4 text-gray-300 dark:text-gray-600 mx-2\" />\n                @endif\n            </li>\n        @endforeach\n    </ol>\n</nav>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/mapping-step.blade.php",
    "content": "<div\n    class=\"flex flex-col h-full overflow-hidden\"\n    x-data=\"{ hoveredColumn: {{ Js::from($headers[0] ?? '') }} }\"\n    @field-selected.window=\"$wire.mapToField($event.detail.column, $event.detail.fieldKey)\"\n    @entity-link-selected.window=\"$wire.mapToEntityLink($event.detail.column, $event.detail.matcherKey, $event.detail.entityLinkKey)\"\n    @field-cleared.window=\"$wire.unmapColumn($event.detail.column)\"\n    wire:ignore.self\n>\n    <div class=\"flex-1 flex flex-col space-y-4 overflow-hidden min-h-[12rem]\">\n        <div class=\"flex-1 flex gap-4 min-h-0 overflow-hidden\">\n            {{-- Column Mapping List --}}\n            <div\n                class=\"flex-1 border border-gray-200 dark:border-gray-700 rounded-xl bg-white dark:bg-gray-900 flex flex-col overflow-hidden\">\n                {{-- Header --}}\n                <div\n                    class=\"flex items-center px-3 py-2 text-[11px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-gray-700 rounded-t-xl shrink-0\">\n                    <div class=\"flex-1\">File column</div>\n                    <div class=\"w-6\"></div>\n                    <div class=\"flex-1 flex justify-end\">\n                        <div class=\"w-52\">Map to</div>\n                    </div>\n                </div>\n\n                {{-- Mapping Rows --}}\n                <div class=\"flex-1 overflow-y-auto\">\n                    @foreach ($headers as $index => $header)\n                        @php\n                            $mapping = $this->getMapping($header);\n                            $allMappedMatchers = $this->getMappedEntityLinkMatchers();\n                            $mappedEntityLinkMatchers = [];\n                            foreach ($allMappedMatchers as $lk => $matcherFields) {\n                                $currentMappingMatcher = ($mapping?->entityLink === $lk) ? $mapping?->target : null;\n                                $mappedEntityLinkMatchers[$lk] = array_values(\n                                    array_filter($matcherFields, fn ($f) => $f !== $currentMappingMatcher)\n                                );\n                            }\n                        @endphp\n\n                        <div\n                            wire:key=\"row-{{ md5($header) }}\"\n                            class=\"flex items-center py-2 border-b border-gray-100 dark:border-gray-800 last:border-b-0 px-3 transition-colors\"\n                            :class=\"hoveredColumn === {{ Js::from($header) }} ? 'bg-primary-50/50 dark:bg-primary-950/20' : ''\"\n                            @mouseenter=\"hoveredColumn = {{ Js::from($header) }}\"\n                        >\n                            {{-- File Column Name --}}\n                            <div class=\"flex-1 min-w-0\">\n                                <span class=\"text-sm text-gray-900 dark:text-white truncate\">{{ $header }}</span>\n                            </div>\n\n                            {{-- Arrow --}}\n                            <div class=\"w-6 flex items-center justify-center\">\n                                <x-filament::icon icon=\"heroicon-m-arrow-long-right\"\n                                                  class=\"w-4 h-4 text-gray-300 dark:text-gray-600\"/>\n                            </div>\n\n                            {{-- Attribute Selector --}}\n                            <div class=\"flex-1 flex justify-end\">\n                                <x-import-wizard-new::field-select\n                                    :fields=\"$this->allFields\"\n                                    :entity-links=\"$this->entityLinks\"\n                                    :selected=\"$mapping\"\n                                    :mapped-field-keys=\"$this->mappedFieldKeys\"\n                                    :mapped-entity-link-matchers=\"$mappedEntityLinkMatchers\"\n                                    :column=\"$header\"\n                                />\n                            </div>\n                        </div>\n                    @endforeach\n                </div>\n            </div>\n\n            {{-- Preview Panel --}}\n            <div\n                class=\"w-56 shrink-0 border border-gray-200 dark:border-gray-700 rounded-xl overflow-hidden flex flex-col bg-white dark:bg-gray-900\">\n                <div class=\"px-3 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50\">\n                    <div class=\"flex items-center justify-between gap-2\">\n                        <span class=\"text-[11px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">Preview</span>\n                        <x-filament::icon icon=\"heroicon-o-eye\" class=\"w-3.5 h-3.5 text-gray-400\"/>\n                    </div>\n                </div>\n                <div\n                    class=\"px-3 py-1.5 border-b border-gray-200 dark:border-gray-700 bg-primary-50/50 dark:bg-primary-950/20\">\n                    <span class=\"text-xs font-medium text-gray-900 dark:text-white truncate block\"\n                          x-text=\"hoveredColumn\"></span>\n                </div>\n                <div class=\"flex-1 overflow-y-auto\">\n                    @foreach ($headers as $header)\n                        <div x-show=\"hoveredColumn === {{ Js::from($header) }}\" x-cloak>\n                            @foreach ($this->previewValues($header, 50) as $value)\n                                <div\n                                    class=\"px-3 py-1.5 border-b border-gray-100 dark:border-gray-800 last:border-b-0 text-xs text-gray-600 dark:text-gray-300 truncate\">\n                                    {{ $value ?: '—' }}\n                                </div>\n                            @endforeach\n                        </div>\n                    @endforeach\n                </div>\n                <div class=\"px-3 py-1.5 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50\">\n                    <p class=\"text-[10px] text-gray-500 dark:text-gray-400\">Showing sample values</p>\n                </div>\n            </div>\n        </div>\n\n        {{-- Required Fields Warning --}}\n        @if ($this->unmappedRequired->isNotEmpty())\n            @php\n                $unmappedLabels = $this->unmappedRequired->pluck('label');\n            @endphp\n            <div\n                class=\"flex items-center gap-2 px-3 py-2 rounded-xl bg-warning-50 dark:bg-warning-950/50 border border-warning-200 dark:border-warning-800\">\n                <x-filament::icon icon=\"heroicon-o-exclamation-triangle\" class=\"w-4 h-4 text-warning-500 shrink-0\"/>\n                <p class=\"text-xs text-warning-700 dark:text-warning-300\">\n                    <span class=\"font-medium text-warning-800 dark:text-warning-200\">Required:</span>\n                    {{ $unmappedLabels->join(', ') }}\n                </p>\n            </div>\n        @endif\n    </div>\n\n    <x-filament-actions::modals />\n\n    {{-- Navigation --}}\n    <div class=\"shrink-0 flex justify-end gap-3 pt-4 mt-6 border-t border-gray-200 dark:border-gray-700 pb-1\">\n        <x-filament::button\n            wire:click=\"$parent.mountAction('startOver')\"\n            color=\"gray\"\n        >\n            Start over\n        </x-filament::button>\n        {{ $this->continueAction }}\n    </div>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/partials/value-row-choice.blade.php",
    "content": "{{-- Choice field value row: Select dropdown for single/multi choice fields --}}\n@php\n    $isMulti = $selectedColumn->getType()->isMultiChoiceField();\n    $validOptions = $this->choiceOptions;\n    $validationError = $valueData->validation_error;\n    $isValid = $validationError === null;\n\n    // Parse values - trim handles both \"a, b\" and \"a,b\" formats\n    $selectedValue = $isMulti\n        ? collect(explode(',', $mappedValue))->map(fn ($v) => trim($v))->filter()->values()->all()\n        : $mappedValue;\n\n    // Build options: for multi-select include invalid values first, for single-select only valid\n    // Single-select: user must select valid option or skip (no deselecting invalid)\n    $validValues = collect($validOptions)->pluck('value');\n    $invalidOptions = $isMulti\n        ? collect((array) $selectedValue)\n            ->filter(fn ($v) => $v && ! $validValues->contains($v))\n            ->unique()\n            ->map(fn ($v) => ['value' => $v, 'label' => $v, 'invalid' => true])\n            ->values()\n        : collect();\n\n    $options = $invalidOptions->merge($validOptions)->all();\n\n    $rowKey = 'choice-' . crc32($rawValue);\n@endphp\n\n<div\n    wire:key=\"{{ $rowKey }}\"\n    x-data=\"{\n        selected: @js($selectedValue),\n        isMulti: @js($isMulti),\n        rawValue: @js($rawValue),\n        updateValue(newVal) {\n            if (this.isMulti && Array.isArray(newVal) && newVal.length === 0) {\n                $wire.skipValue(this.rawValue);\n                return;\n            }\n            const value = this.isMulti && Array.isArray(newVal) ? newVal.join(', ') : (newVal ?? '');\n            $wire.updateMappedValue(this.rawValue, value);\n        }\n    }\"\n    class=\"flex-1 min-w-0 flex items-center rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\n>\n    {{-- Show warning icon only for multi-select (single-select has badge inside) --}}\n    @if (! $isValid)\n        <span\n            x-tooltip=\"{ content: @js($validationError . ' Select a valid option from the dropdown.'), theme: $store.theme }\"\n            class=\"ml-2 cursor-help\"\n        >\n            <x-filament::icon icon=\"heroicon-o-exclamation-triangle\" class=\"w-4 h-4 text-warning-500 shrink-0\"/>\n        </span>\n    @endif\n\n    <div class=\"flex-1 min-w-0\" wire:ignore>\n        <x-import-wizard-new::select-menu\n            :options=\"$options\"\n            :multiple=\"$isMulti\"\n            :searchable=\"count($options) > 5\"\n            :value=\"$selectedValue\"\n            :borderless=\"true\"\n            :placeholder=\"$isValid ? 'Select...' : 'Select to fix...'\"\n            @input=\"selected = $event.detail; if (!isMulti) updateValue($event.detail)\"\n            @change=\"if (isMulti) updateValue($event.detail)\"\n        />\n    </div>\n\n    <x-import-wizard-new::value-row-actions\n        :selected-column=\"$selectedColumn\"\n        :raw-value=\"$rawValue\"\n        :has-correction=\"$hasCorrection\"\n        :show-undo=\"$hasCorrection\"\n    />\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/partials/value-row-date.blade.php",
    "content": "{{-- Date/DateTime value row: Bordered container with date picker --}}\n@php\n    use Relaticle\\ImportWizard\\Enums\\DateFormat;\n\n    $dateFormat = $this->selectedColumn->dateFormat ?? DateFormat::ISO;\n    $isTimestamp = $this->selectedColumn->getType()->isTimestamp();\n    $validationError = $valueData->validation_error;\n\n    $parsedDate = $dateFormat->parse($mappedValue ?? $rawValue, $isTimestamp);\n\n    // Fallback: Try ISO format for corrections (date picker always outputs ISO)\n    // This handles cases where format changed after correction was made\n    if ($parsedDate === null && $dateFormat !== DateFormat::ISO && $mappedValue !== null) {\n        $parsedDate = DateFormat::ISO->parse($mappedValue, $isTimestamp);\n    }\n\n    $pickerValue = $parsedDate ? $dateFormat->toPickerValue($parsedDate, $isTimestamp) : '';\n    $formattedDisplay = $parsedDate ? $dateFormat->format($parsedDate, $isTimestamp) : '';\n    $isValid = $validationError === null && $parsedDate !== null;\n@endphp\n\n<div class=\"flex-1 flex items-center gap-2\">\n    <div\n        x-data\n        class=\"relative flex-1 flex items-center rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\n    >\n        {{-- Invisible date input positioned over clickable area --}}\n        <input\n            x-ref=\"picker\"\n            type=\"{{ $isTimestamp ? 'datetime-local' : 'date' }}\"\n            value=\"{{ $isValid ? $pickerValue : '' }}\"\n            wire:change.preserve-scroll=\"updateMappedValue({{ Js::from($rawValue) }}, $event.target.value)\"\n            class=\"absolute left-0 top-0 w-[calc(100%-4rem)] h-full opacity-0 cursor-pointer [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:left-0 [&::-webkit-calendar-picker-indicator]:top-0 [&::-webkit-calendar-picker-indicator]:w-full [&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:m-0 [&::-webkit-calendar-picker-indicator]:p-0 [&::-webkit-calendar-picker-indicator]:cursor-pointer\"\n        />\n\n        @if ($isValid)\n            {{-- Valid: Show formatted date --}}\n            <div class=\"flex-1 flex items-center gap-2 px-2 py-1 pointer-events-none\">\n                <x-filament::icon icon=\"heroicon-o-calendar\" class=\"w-4 h-4 text-gray-400 shrink-0\"/>\n                <span class=\"text-sm text-gray-900 dark:text-white\">{{ $formattedDisplay }}</span>\n            </div>\n\n            <x-import-wizard-new::value-row-actions\n                :selected-column=\"$selectedColumn\"\n                :raw-value=\"$rawValue\"\n                :has-correction=\"$hasCorrection\"\n            />\n        @else\n            {{-- Invalid: Show warning and raw value --}}\n            <span\n                x-tooltip=\"{ content: @js($validationError . ' Click the edit button or select a different format.'), theme: $store.theme }\"\n                class=\"relative z-10 ml-2 cursor-help shrink-0\"\n            >\n                <x-filament::icon icon=\"heroicon-o-exclamation-triangle\" class=\"w-4 h-4 text-warning-500\"/>\n            </span>\n\n            <div class=\"flex-1 flex items-center gap-2 px-2 py-1 pointer-events-none\">\n                <span class=\"text-sm text-gray-900 dark:text-white\">{{ $rawValue }}</span>\n            </div>\n\n            {{-- Actions: Fix (opens picker) and Skip --}}\n            <div\n                class=\"flex items-center bg-gray-50 dark:bg-gray-900 border-l border-gray-200 dark:border-gray-700 shrink-0\">\n                <button\n                    type=\"button\"\n                    @click=\"$refs.picker.showPicker()\"\n                    class=\"p-1.5 text-gray-400 hover:text-primary-600 hover:bg-primary-50 dark:hover:text-primary-400 dark:hover:bg-primary-950/50 transition-colors\"\n                    title=\"Fix this value\"\n                >\n                    <x-filament::icon icon=\"heroicon-o-pencil-square\" class=\"w-4 h-4\"/>\n                </button>\n                <div class=\"w-px h-4 bg-gray-200 dark:bg-gray-700\"></div>\n                <button\n                    wire:click.stop.preserve-scroll=\"skipValue({{ Js::from($rawValue) }})\"\n                    class=\"p-1.5 text-gray-400 hover:text-warning-600 hover:bg-warning-50 dark:hover:text-warning-400 dark:hover:bg-warning-950/50 transition-colors\"\n                    title=\"Skip this value\"\n                >\n                    <x-filament::icon icon=\"heroicon-o-no-symbol\" class=\"w-4 h-4\"/>\n                </button>\n            </div>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/partials/value-row-multi-value.blade.php",
    "content": "{{-- Multi-value arbitrary field row: For email, phone, tags etc. --}}\n@php\n    use Relaticle\\ImportWizard\\Support\\Validation\\ValidationError;\n\n    $storedError = $valueData->validation_error;\n    $validationError = ValidationError::fromStorageFormat($storedError);\n    $perValueErrors = $validationError?->getItemErrors() ?? [];\n    $simpleMessage = $validationError?->getMessage();\n    $hasErrors = !empty($perValueErrors) || $simpleMessage !== null;\n\n    $inputType = match(true) {\n        str_contains(strtolower($selectedColumn->target), 'email') => 'email',\n        str_contains(strtolower($selectedColumn->target), 'phone') => 'tel',\n        str_contains(strtolower($selectedColumn->target), 'url') || str_contains(strtolower($selectedColumn->target), 'website') => 'url',\n        default => 'text',\n    };\n    $placeholder = match($inputType) {\n        'email' => 'Add email...',\n        'tel' => 'Add phone...',\n        'url' => 'Add URL...',\n        default => 'Add value...',\n    };\n    $rowKey = 'multi-value-' . crc32($rawValue);\n@endphp\n\n<div\n    wire:key=\"{{ $rowKey }}\"\n    x-data=\"{\n        rawValue: @js($rawValue),\n        handleChange(detail) {\n            const mvi = this.$el.querySelector('[data-multi-value-input]');\n            this.$wire.updateMappedValue(this.rawValue, detail).then(errors => {\n                mvi?.dispatchEvent(\n                    new CustomEvent('update-errors', { detail: { errors: errors || {} } })\n                );\n            });\n        }\n    }\"\n    x-on:multi-value-change.debounce.300ms=\"handleChange($event.detail)\"\n    class=\"flex-1 min-w-0 flex items-center rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\"\n>\n    @if ($simpleMessage !== null)\n        <span\n            x-tooltip=\"{ content: @js($simpleMessage), theme: $store.theme }\"\n            class=\"ml-2 cursor-help shrink-0\"\n        >\n            <x-filament::icon icon=\"heroicon-o-exclamation-triangle\" class=\"w-4 h-4 text-warning-500\"/>\n        </span>\n    @endif\n    <div class=\"flex-1 min-w-0\" wire:ignore>\n        <x-import-wizard-new::multi-value-input\n            :value=\"$mappedValue\"\n            :input-type=\"$inputType\"\n            :placeholder=\"$placeholder\"\n            :errors=\"$perValueErrors\"\n            :borderless=\"true\"\n            event-name=\"multi-value-change\"\n        />\n    </div>\n\n    <x-import-wizard-new::value-row-actions\n        :selected-column=\"$selectedColumn\"\n        :raw-value=\"$rawValue\"\n        :has-correction=\"$hasCorrection\"\n        :show-undo=\"$hasCorrection\"\n    />\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/partials/value-row-number.blade.php",
    "content": "{{-- Number value row: Bordered container with number input --}}\n@php\n    use Relaticle\\ImportWizard\\Enums\\NumberFormat;\n\n    $numberFormat = $this->selectedColumn->numberFormat ?? NumberFormat::POINT;\n    $validationError = $valueData->validation_error;\n\n    $parsedNumber = $numberFormat->parse($mappedValue ?? $rawValue);\n    $formattedDisplay = $parsedNumber !== null ? $numberFormat->format($parsedNumber) : '';\n    $isValid = $validationError === null && $parsedNumber !== null;\n@endphp\n\n<div class=\"flex-1 flex items-center rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n    @unless ($isValid)\n        <span\n            x-tooltip=\"{ content: @js($validationError ?? __('import-wizard-new::validation.invalid_number', ['format' => $numberFormat->getLabel()])), theme: $store.theme }\"\n            class=\"ml-2 cursor-help\"\n        >\n            <x-filament::icon icon=\"heroicon-o-exclamation-triangle\" class=\"w-4 h-4 text-warning-500 shrink-0\"/>\n        </span>\n    @else\n        <x-filament::icon icon=\"heroicon-o-hashtag\" class=\"w-4 h-4 text-gray-400 shrink-0 ml-2\"/>\n    @endunless\n    <input\n        type=\"text\"\n        inputmode=\"decimal\"\n        value=\"{{ $isValid ? $formattedDisplay : ($mappedValue ?? $rawValue) }}\"\n        wire:change.preserve-scroll=\"updateMappedValue({{ Js::from($rawValue) }}, $event.target.value)\"\n        class=\"flex-1 text-sm pl-2 pr-2 py-1 bg-transparent border-0 text-gray-900 dark:text-white focus:ring-0 focus:outline-none\"\n    />\n    <x-import-wizard-new::value-row-actions\n        :selected-column=\"$selectedColumn\"\n        :raw-value=\"$rawValue\"\n        :has-correction=\"$hasCorrection\"\n    />\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/partials/value-row-skipped.blade.php",
    "content": "{{-- Skipped value row: Bordered container with skip icon and restore action --}}\n<div class=\"flex-1 flex items-center rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n    <div class=\"flex-1 flex items-center gap-2 px-2 py-1\">\n        <x-filament::icon icon=\"heroicon-o-no-symbol\" class=\"w-4 h-4 text-gray-400 shrink-0\"/>\n        <span class=\"text-sm text-gray-400 dark:text-gray-500 italic\">Skipped</span>\n    </div>\n    <div class=\"flex items-center bg-gray-50 dark:bg-gray-900 border-l border-gray-200 dark:border-gray-700 shrink-0\">\n        <button\n            wire:click.stop.preserve-scroll=\"unskipValue({{ Js::from($rawValue) }})\"\n            class=\"p-1.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 dark:hover:text-gray-300 dark:hover:bg-gray-700 transition-colors\"\n            title=\"Restore original value\"\n        >\n            <x-filament::icon icon=\"heroicon-o-arrow-uturn-left\" class=\"w-4 h-4\"/>\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/partials/value-row-text.blade.php",
    "content": "{{-- Text value row: Bordered container with text input --}}\n@php\n    $validationError = $valueData->validation_error;\n    $isValid = $validationError === null;\n@endphp\n\n<div class=\"flex-1 flex items-center rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800\">\n    @unless ($isValid)\n        <span\n            x-tooltip=\"{ content: @js($validationError), theme: $store.theme }\"\n            class=\"ml-2 cursor-help\"\n        >\n            <x-filament::icon icon=\"heroicon-o-exclamation-triangle\" class=\"w-4 h-4 text-warning-500 shrink-0\"/>\n        </span>\n    @else\n        <x-filament::icon icon=\"heroicon-o-pencil\" class=\"w-4 h-4 text-gray-400 shrink-0 ml-2\"/>\n    @endunless\n    <input\n        type=\"text\"\n        value=\"{{ $mappedValue }}\"\n        wire:change.preserve-scroll=\"updateMappedValue({{ Js::from($rawValue) }}, $event.target.value)\"\n        class=\"flex-1 text-sm pl-2 pr-2 py-1 bg-transparent border-0 text-gray-900 dark:text-white focus:ring-0 focus:outline-none\"\n    />\n    <x-import-wizard-new::value-row-actions\n        :selected-column=\"$selectedColumn\"\n        :raw-value=\"$rawValue\"\n        :has-correction=\"$hasCorrection\"\n    />\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/preview-step.blade.php",
    "content": "<div\n    class=\"flex flex-col h-full overflow-hidden\"\n    x-data=\"{\n        timer: null,\n        matchTimer: null,\n        poll() {\n            return setInterval(() => $wire.checkImportProgress(), 2000);\n        },\n        destroy() {\n            if (this.timer) { clearInterval(this.timer); this.timer = null; }\n            if (this.matchTimer) { clearInterval(this.matchTimer); this.matchTimer = null; }\n        }\n    }\"\n    x-init=\"\n        if (@js($this->isImporting)) { timer = poll(); }\n        $wire.on('import-polling-start', () => { if (!timer) { timer = poll(); } });\n        $wire.on('import-polling-complete', () => { clearInterval(timer); timer = null; });\n\n        if (@js($this->matchResolutionBatchId !== null)) {\n            matchTimer = setInterval(() => $wire.checkMatchResolution(), 1000);\n        }\n        $wire.on('match-resolution-complete', () => { clearInterval(matchTimer); matchTimer = null; });\n    \"\n>\n    <div class=\"flex-1 flex flex-col overflow-hidden min-h-[20rem]\">\n        @if($this->isCompleted)\n            <div class=\"flex items-center gap-3 px-4 py-3 mb-3 shrink-0 bg-gray-50 dark:bg-white/5 border border-gray-200 dark:border-white/10 rounded-xl\">\n                <x-heroicon-o-check-circle class=\"h-5 w-5 text-success-600 dark:text-success-400 shrink-0\" />\n                <p class=\"text-sm font-medium text-gray-900 dark:text-white\">Import Complete</p>\n\n                @if($this->results)\n                    <div class=\"flex items-center gap-4 text-xs ml-auto shrink-0\">\n                        <span class=\"flex items-center gap-1.5\">\n                            <span class=\"font-semibold text-success-700 dark:text-success-300\">{{ number_format($this->results['created'] ?? 0) }}</span>\n                            <span class=\"text-gray-500 dark:text-gray-400\">created</span>\n                        </span>\n                        <span class=\"flex items-center gap-1.5\">\n                            <span class=\"font-semibold text-primary-700 dark:text-primary-300\">{{ number_format($this->results['updated'] ?? 0) }}</span>\n                            <span class=\"text-gray-500 dark:text-gray-400\">updated</span>\n                        </span>\n                        <span class=\"flex items-center gap-1.5\">\n                            <span class=\"font-semibold text-danger-700 dark:text-danger-300\">{{ number_format($this->results['failed'] ?? 0) }}</span>\n                            <span class=\"text-gray-500 dark:text-gray-400\">failed</span>\n                        </span>\n                    </div>\n\n                    @if(($this->results['failed'] ?? 0) > 0)\n                        {{ $this->downloadFailedRowsAction }}\n                    @endif\n                @endif\n            </div>\n        @elseif($this->isImporting)\n            <div class=\"flex items-center gap-3 px-4 py-3 mb-3 shrink-0 bg-gray-50 dark:bg-white/5 border border-gray-200 dark:border-white/10 rounded-xl\">\n                <x-heroicon-o-arrow-path class=\"h-5 w-5 text-primary-600 dark:text-primary-400 animate-spin shrink-0\" />\n\n                <div class=\"flex-1 min-w-0\">\n                    <div class=\"flex items-center justify-between mb-1.5\">\n                        <p class=\"text-sm font-medium text-gray-900 dark:text-white\">\n                            Importing...\n                            <span class=\"text-xs font-normal text-gray-500 dark:text-gray-400\">\n                                {{ number_format($this->processedCount) }} of {{ number_format($this->totalRowCount) }} rows\n                            </span>\n                        </p>\n                        <span class=\"text-xs font-medium text-gray-700 dark:text-gray-300\">{{ $this->progressPercent }}%</span>\n                    </div>\n                    <div class=\"h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden\">\n                        <div\n                            class=\"h-full bg-primary-500 rounded-full transition-all duration-500 ease-out\"\n                            style=\"width: {{ $this->progressPercent }}%\"\n                        ></div>\n                    </div>\n                </div>\n            </div>\n        @endif\n\n        <div class=\"border border-gray-200 dark:border-gray-700 rounded-xl bg-white dark:bg-gray-900 flex flex-col flex-1 overflow-hidden\">\n            <div class=\"px-3 py-2 bg-gray-50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-gray-700 rounded-t-xl shrink-0\">\n                <div class=\"flex gap-1 text-xs\">\n                    <button\n                        wire:click=\"setActiveTab('all')\"\n                        @class([\n                            'flex items-center gap-1.5 px-2.5 py-1.5 rounded transition-colors font-medium',\n                            'bg-primary-100 dark:bg-primary-900/50 text-primary-700 dark:text-primary-300' => $activeTab === 'all',\n                            'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800' => $activeTab !== 'all',\n                        ])\n                    >\n                        <x-filament::icon :icon=\"$entityType->icon()\" class=\"w-3.5 h-3.5\"/>\n                        {{ $entityType->label() }}\n                        <span class=\"text-gray-400 dark:text-gray-500\">{{ number_format($this->totalRowCount) }}</span>\n                    </button>\n\n                    @foreach($this->relationshipTabs as $tab)\n                        <button\n                            wire:key=\"tab-{{ $tab['key'] }}\"\n                            wire:click=\"setActiveTab({{ Js::from($tab['key']) }})\"\n                            @class([\n                                'flex items-center gap-1.5 px-2.5 py-1.5 rounded transition-colors font-medium',\n                                'bg-primary-100 dark:bg-primary-900/50 text-primary-700 dark:text-primary-300' => $activeTab === $tab['key'],\n                                'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800' => $activeTab !== $tab['key'],\n                            ])\n                        >\n                            <x-filament::icon :icon=\"$tab['icon']\" class=\"w-3.5 h-3.5\"/>\n                            {{ $tab['label'] }}\n                            <span class=\"text-gray-400 dark:text-gray-500\">{{ number_format($tab['count']) }}</span>\n                        </button>\n                    @endforeach\n                </div>\n            </div>\n\n            @if($activeTab === 'all')\n                <div class=\"px-3 py-2 border-b border-gray-200 dark:border-gray-700 shrink-0\">\n                    <div class=\"flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400\">\n                        <span class=\"flex items-center gap-1\">\n                            <x-filament::icon icon=\"heroicon-m-plus\" class=\"w-3.5 h-3.5 text-success-500\"/>\n                            <span class=\"font-medium text-gray-700 dark:text-gray-300\">{{ number_format($this->createCount) }}</span>\n                            will be created\n                        </span>\n                        <span class=\"flex items-center gap-1\">\n                            <x-filament::icon icon=\"heroicon-m-arrow-path\" class=\"w-3.5 h-3.5 text-primary-500\"/>\n                            <span class=\"font-medium text-gray-700 dark:text-gray-300\">{{ number_format($this->updateCount) }}</span>\n                            will be updated\n                        </span>\n                    </div>\n                </div>\n\n                <div class=\"flex-1 overflow-auto\">\n                    <div class=\"min-w-max\">\n                        <div class=\"flex items-stretch text-[10px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 sticky top-0 z-10\">\n                            <div class=\"w-8 shrink-0 border-r border-gray-200 dark:border-gray-700 py-1.5\"></div>\n                            @foreach($this->columns as $column)\n                                <div class=\"w-36 shrink-0 px-2 flex items-center gap-1 border-r border-gray-200 dark:border-gray-700 py-1.5\" title=\"{{ $column->getLabel() }}\">\n                                    <x-filament::icon :icon=\"$column->getIcon()\" class=\"w-3 h-3 shrink-0\"/>\n                                    <span class=\"truncate\">{{ $column->getLabel() }}</span>\n                                </div>\n                            @endforeach\n                        </div>\n\n                        @forelse($this->previewRows as $row)\n                            <div\n                                wire:key=\"row-{{ $row->row_number }}\"\n                                class=\"flex items-stretch border-b border-gray-100 dark:border-gray-800 text-sm\"\n                            >\n                                <div class=\"w-8 shrink-0 flex items-center justify-center border-r border-gray-200 dark:border-gray-700 py-2\">\n                                    @if($row->match_action)\n                                        <x-filament::icon\n                                            :icon=\"$row->match_action->icon()\"\n                                            @class(['w-4 h-4', $row->match_action->color()])\n                                        />\n                                    @endif\n                                </div>\n                                @foreach($this->columns as $column)\n                                    <div class=\"w-36 shrink-0 px-2 min-w-0 flex flex-col justify-center border-r border-gray-200 dark:border-gray-700 py-2\">\n                                        @if($column->isEntityLinkMapping())\n                                            @php\n                                                $relMatch = $row->relationships?->first(fn ($m) => $m->relationship === $column->entityLink);\n                                                $rawValue = $row->raw_data->get($column->source);\n                                            @endphp\n                                            @if($relMatch && filled($rawValue))\n                                                <span class=\"inline-flex items-center gap-1 text-xs truncate\" title=\"{{ $rawValue }}\">\n                                                    @if($relMatch->isExisting())\n                                                        <x-filament::icon icon=\"heroicon-m-link\" class=\"w-3.5 h-3.5 text-primary-500 shrink-0\"/>\n                                                    @else\n                                                        <x-filament::icon icon=\"heroicon-m-plus\" class=\"w-3.5 h-3.5 text-success-500 shrink-0\"/>\n                                                    @endif\n                                                    <span class=\"text-gray-900 dark:text-white truncate\">{{ Str::limit((string) $rawValue, 28) }}</span>\n                                                </span>\n                                            @endif\n                                        @else\n                                            @php $value = $row->getFinalValue($column->source) @endphp\n                                            @if(filled($value))\n                                                <span class=\"text-gray-900 dark:text-white text-xs truncate\" title=\"{{ $value }}\">{{ Str::limit((string) $value, 30) }}</span>\n                                            @endif\n                                        @endif\n                                    </div>\n                                @endforeach\n                            </div>\n                        @empty\n                            <div class=\"flex items-center justify-center py-8 text-sm text-gray-500 dark:text-gray-400\">\n                                No rows to display\n                            </div>\n                        @endforelse\n                    </div>\n                </div>\n\n                @if($this->previewRows->lastPage() > 1)\n                    <div class=\"px-3 py-2 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 shrink-0 flex items-center justify-between\">\n                        <button\n                            wire:click=\"previousPage\"\n                            @disabled($this->previewRows->onFirstPage())\n                            class=\"px-3 py-1 text-xs font-medium rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n                        >\n                            Previous\n                        </button>\n                        <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n                            {{ number_format($this->previewRows->firstItem()) }}–{{ number_format($this->previewRows->lastItem()) }} of {{ number_format($this->previewRows->total()) }}\n                        </span>\n                        <button\n                            wire:click=\"nextPage\"\n                            @disabled(!$this->previewRows->hasMorePages())\n                            class=\"px-3 py-1 text-xs font-medium rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n                        >\n                            Next\n                        </button>\n                    </div>\n                @endif\n            @else\n                <div class=\"px-3 py-2 border-b border-gray-200 dark:border-gray-700 shrink-0\">\n                    <div class=\"flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400\">\n                        <span class=\"flex items-center gap-1\">\n                            <x-filament::icon icon=\"heroicon-m-link\" class=\"w-3.5 h-3.5 text-primary-500\"/>\n                            <span class=\"font-medium text-gray-700 dark:text-gray-300\">{{ number_format($this->relationshipStats['link']) }}</span>\n                            will be linked\n                        </span>\n                        <span class=\"flex items-center gap-1\">\n                            <x-filament::icon icon=\"heroicon-m-plus\" class=\"w-3.5 h-3.5 text-success-500\"/>\n                            <span class=\"font-medium text-gray-700 dark:text-gray-300\">{{ number_format($this->relationshipStats['create']) }}</span>\n                            will be created\n                        </span>\n                    </div>\n                </div>\n\n                <div class=\"flex items-stretch text-[10px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 bg-gray-50/50 dark:bg-gray-800/30 border-b border-gray-200 dark:border-gray-700\">\n                    <div class=\"w-8 shrink-0 border-r border-gray-200 dark:border-gray-700 py-1.5\"></div>\n                    <div class=\"w-2/5 px-2 py-1.5 border-r border-gray-200 dark:border-gray-700 flex items-center gap-1\">\n                        <x-filament::icon icon=\"heroicon-m-tag\" class=\"w-3 h-3 shrink-0\"/>\n                        Value\n                    </div>\n                    <div class=\"w-2/5 px-2 py-1.5 border-r border-gray-200 dark:border-gray-700 flex items-center gap-1\">\n                        <x-filament::icon icon=\"heroicon-m-arrow-path-rounded-square\" class=\"w-3 h-3 shrink-0\"/>\n                        Resolution\n                    </div>\n                    <div class=\"flex-1 px-2 py-1.5 flex items-center justify-end gap-1\">\n                        <x-filament::icon icon=\"heroicon-m-queue-list\" class=\"w-3 h-3 shrink-0\"/>\n                        Rows\n                    </div>\n                </div>\n\n                <div class=\"flex-1 overflow-y-auto\">\n                    @forelse($this->relationshipSummary as $entry)\n                        <div class=\"flex items-stretch border-b border-gray-100 dark:border-gray-800 text-sm\">\n                            <div class=\"w-8 shrink-0 flex items-center justify-center border-r border-gray-200 dark:border-gray-700 py-2\">\n                                @if($entry['action'] === 'link')\n                                    <x-filament::icon icon=\"heroicon-m-link\" class=\"w-4 h-4 text-primary-500\"/>\n                                @else\n                                    <x-filament::icon icon=\"heroicon-m-plus\" class=\"w-4 h-4 text-success-500\"/>\n                                @endif\n                            </div>\n                            <div class=\"w-2/5 min-w-0 px-2 py-2 flex items-center border-r border-gray-200 dark:border-gray-700\">\n                                <span class=\"text-gray-900 dark:text-white truncate text-xs\">{{ Str::limit($entry['name'], 30) }}</span>\n                            </div>\n                            <div class=\"w-2/5 px-2 py-2 flex items-center border-r border-gray-200 dark:border-gray-700\">\n                                @if($entry['action'] === 'link')\n                                    <span class=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] font-medium bg-primary-50 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300\">\n                                        <x-filament::icon icon=\"heroicon-m-link\" class=\"w-3 h-3\"/>\n                                        Link existing\n                                    </span>\n                                @else\n                                    <span class=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] font-medium bg-success-50 dark:bg-success-900/30 text-success-700 dark:text-success-300\">\n                                        <x-filament::icon icon=\"heroicon-m-plus\" class=\"w-3 h-3\"/>\n                                        Create new\n                                    </span>\n                                @endif\n                            </div>\n                            <div class=\"flex-1 px-2 py-2 flex items-center justify-end\">\n                                <span class=\"text-xs text-gray-500 dark:text-gray-400\">{{ $entry['count'] }}</span>\n                            </div>\n                        </div>\n                    @empty\n                        <div class=\"flex items-center justify-center py-8 text-sm text-gray-500 dark:text-gray-400\">\n                            No relationships to display\n                        </div>\n                    @endforelse\n                </div>\n\n                @if($this->relationshipSummary->lastPage() > 1)\n                    <div class=\"px-3 py-2 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 shrink-0 flex items-center justify-between\">\n                        <button\n                            wire:click=\"previousPage\"\n                            @disabled($this->relationshipSummary->onFirstPage())\n                            class=\"px-3 py-1 text-xs font-medium rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n                        >\n                            Previous\n                        </button>\n                        <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n                            {{ number_format($this->relationshipSummary->firstItem()) }}–{{ number_format($this->relationshipSummary->lastItem()) }} of {{ number_format($this->relationshipSummary->total()) }}\n                        </span>\n                        <button\n                            wire:click=\"nextPage\"\n                            @disabled(!$this->relationshipSummary->hasMorePages())\n                            class=\"px-3 py-1 text-xs font-medium rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n                        >\n                            Next\n                        </button>\n                    </div>\n                @endif\n            @endif\n        </div>\n    </div>\n\n    <x-filament-actions::modals />\n\n    @if(! $this->isImporting && ! $this->isCompleted)\n        <div class=\"flex justify-end gap-3 pt-4 mt-6 border-t border-gray-200 dark:border-gray-700 pb-1\">\n            <x-filament::button\n                color=\"gray\"\n                wire:click=\"$parent.goBack()\"\n            >\n                Back\n            </x-filament::button>\n            {{ $this->startImportAction }}\n        </div>\n    @endif\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/review-step.blade.php",
    "content": "@php\n    use Relaticle\\ImportWizard\\Enums\\DateFormat;\n    use Relaticle\\ImportWizard\\Enums\\NumberFormat;\n    use Relaticle\\ImportWizard\\Enums\\ReviewFilter;\n    use Relaticle\\ImportWizard\\Enums\\SortField;\n    use Relaticle\\ImportWizard\\Enums\\SortDirection;\n@endphp\n<div\n    class=\"flex flex-col h-full overflow-hidden\"\n    x-data=\"{\n        timer: null,\n        startPolling() {\n            if (!this.timer) {\n                this.timer = setInterval(() => $wire.checkProgress(), 2000);\n            }\n        },\n        stopPolling() {\n            if (this.timer) { clearInterval(this.timer); this.timer = null; }\n        },\n        destroy() {\n            this.stopPolling();\n        }\n    }\"\n    x-init=\"\n        if (@js(count($batchIds) > 0)) { startPolling(); }\n        $wire.on('polling-complete', () => stopPolling());\n    \"\n>\n    {{-- Main Content --}}\n    <div class=\"flex-1 flex gap-4 overflow-hidden min-h-[12rem]\">\n        {{-- Column List (Left Panel) --}}\n        <div\n            class=\"w-56 shrink-0 border border-gray-200 dark:border-gray-700 rounded-xl bg-white dark:bg-gray-900 flex flex-col overflow-hidden\">\n            <div\n                class=\"px-3 py-2 text-[11px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-gray-700 rounded-t-xl shrink-0\">\n                Mapped Columns\n            </div>\n\n            <div class=\"flex-1 overflow-y-auto\">\n                @foreach ($this->columns as $column)\n                    @php $isSelected = $selectedColumn->source === $column->source @endphp\n                    <button\n                        wire:key=\"col-{{ md5($column->source) }}\"\n                        wire:click=\"selectColumn({{ Js::from($column->source) }})\"\n                        @class([\n                            'w-full px-3 py-2.5 text-left border-b border-gray-100 dark:border-gray-800 last:border-b-0 transition-colors data-[loading]:opacity-50',\n                            'bg-primary-50 dark:bg-primary-950/30' => $isSelected,\n                            'hover:bg-gray-50 dark:hover:bg-gray-800/50' => !$isSelected,\n                        ])\n                    >\n                        <div class=\"flex gap-2 items-start\">\n                            <div @class([\n                                'w-5 h-5 mt-0.5 rounded flex items-center justify-center shrink-0',\n                                'bg-primary-100 dark:bg-primary-900/50' => $isSelected,\n                                'bg-gray-100 dark:bg-gray-800' => !$isSelected,\n                            ])>\n                                <x-filament::icon\n                                    :icon=\"$column->getIcon()\"\n                                    @class([\n                                        'w-3 h-3',\n                                        'text-primary-500 dark:text-primary-400' => $isSelected,\n                                        'text-gray-500 dark:text-gray-400' => !$isSelected,\n                                    ])\n                                />\n                            </div>\n                            <div class=\"flex-1 min-w-0\">\n                                <div class=\"flex items-center gap-1.5\">\n                                    <span @class([\n                                        'text-sm font-medium truncate',\n                                        'text-primary-700 dark:text-primary-300' => $isSelected,\n                                        'text-gray-900 dark:text-white' => !$isSelected,\n                                    ])>{{ $column->getLabel() }}</span>\n                                    @if ($column->getMatcher())\n                                        <span class=\"text-gray-400 dark:text-gray-500\">·</span>\n                                        <span class=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{{ $column->getMatcher()->label }}</span>\n                                    @endif\n                                </div>\n                                <span class=\"text-[11px] text-gray-500 dark:text-gray-400 truncate block\">{{ $column->source }}</span>\n                            </div>\n                            @if ($this->columnErrorStatuses[$column->source] ?? false)\n                                <span class=\"w-1.5 h-1.5 mt-2 rounded-full bg-amber-400 shrink-0\"></span>\n                            @endif\n                        </div>\n                    </button>\n                @endforeach\n            </div>\n        </div>\n\n        {{-- Values Panel (Right Panel) --}}\n        <div\n            class=\"flex-1 border border-gray-200 dark:border-gray-700 rounded-xl bg-white dark:bg-gray-900 flex flex-col overflow-hidden\">\n            {{-- Header (always visible) --}}\n            <div\n                class=\"px-3 py-2 bg-gray-50 dark:bg-gray-800/50 border-b border-gray-200 dark:border-gray-700 rounded-t-xl shrink-0\">\n                <div class=\"flex items-start justify-between gap-2\">\n                    <div>\n                        <h3 class=\"text-sm font-medium text-gray-900 dark:text-white\">{{ $selectedColumn->source }}</h3>\n                        <p class=\"text-[10px] text-gray-500 dark:text-gray-400\">\n                            Mapped to <span class=\"font-medium\">{{ $selectedColumn->getLabel() }}</span>\n                            @if (!$this->isSelectedColumnValidating)\n                                · {{ number_format($this->selectedColumnRows->total()) }} unique values\n                            @endif\n                        </p>\n                    </div>\n\n                    @if (!$this->isSelectedColumnValidating)\n                        @if ($this->selectedColumn->getType()->isDateOrDateTime())\n                            <x-import-wizard-new::select-menu\n                                wire:key=\"date-format-{{ $this->selectedColumn->getType()->value }}\"\n                                :options=\"DateFormat::toOptions($this->selectedColumn->getType()->isTimestamp())\"\n                                :searchable=\"false\"\n                                :inline-label=\"$this->selectedColumn->getType()->isTimestamp() ? 'Timestamp format:' : 'Date format:'\"\n                                icon=\"heroicon-o-cog-6-tooth\"\n                                :value=\"$this->selectedColumn->dateFormat ?? DateFormat::ISO\"\n                                @input=\"$wire.setColumnFormat('date', $event.detail)\"\n                            />\n                        @endif\n\n                        @if ($this->selectedColumn->getType()->isFloat())\n                            <x-import-wizard-new::select-menu\n                                :options=\"NumberFormat::toOptions()\"\n                                :searchable=\"false\"\n                                inline-label=\"Decimal separator:\"\n                                icon=\"heroicon-o-cog-6-tooth\"\n                                :value=\"$this->selectedColumn->numberFormat ?? NumberFormat::POINT\"\n                                @input=\"$wire.setColumnFormat('number', $event.detail)\"\n                            />\n                        @endif\n                    @endif\n                </div>\n            </div>\n\n            @if ($this->isSelectedColumnValidating)\n                {{-- Loading State with Fake Progress Animation --}}\n                <div\n                    x-data=\"{\n                        progress: 5,\n                        interval: null,\n                        init() {\n                            this.interval = setInterval(() => {\n                                if (this.progress < 90) {\n                                    this.progress += Math.random() * 8;\n                                    if (this.progress > 90) this.progress = 90;\n                                }\n                            }, 200);\n                            $wire.on('validation-complete', () => {\n                                clearInterval(this.interval);\n                                this.progress = 100;\n                            });\n                        },\n                        destroy() {\n                            if (this.interval) { clearInterval(this.interval); }\n                        }\n                    }\"\n                    class=\"flex-1 flex items-center justify-center\"\n                >\n                    <div class=\"flex flex-col items-center text-center max-w-sm\">\n                        <x-filament::icon icon=\"heroicon-o-arrow-path\" class=\"h-12 w-12 text-primary-500 animate-spin\" />\n                        <p class=\"mt-6 text-sm font-medium text-gray-700 dark:text-gray-300\">Processing column values...</p>\n                        <p class=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">Validating and preparing data for review</p>\n\n                        {{-- Fake Progress Bar --}}\n                        <div class=\"w-full mt-6\">\n                            <div class=\"flex items-center justify-between text-xs mb-2\">\n                                <span class=\"font-medium text-gray-900 dark:text-white\" x-text=\"Math.round(progress) + '%'\"></span>\n                                <span class=\"text-gray-500 dark:text-gray-400\">complete</span>\n                            </div>\n                            <div class=\"w-full h-1.5 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden\">\n                                <div\n                                    class=\"h-full bg-primary-500 rounded-full transition-all duration-200\"\n                                    :style=\"`width: ${progress}%`\"\n                                ></div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            @else\n                {{-- Filters --}}\n                <div class=\"px-3 py-2 border-b border-gray-200 dark:border-gray-700 shrink-0\">\n                    <div class=\"flex items-center justify-between gap-3\">\n                        <div class=\"flex gap-1 text-xs\">\n                            @foreach (ReviewFilter::cases() as $filterCase)\n                                <button\n                                    wire:key=\"filter-{{ $filterCase->value }}\"\n                                    wire:click=\"setFilter('{{ $filterCase->value }}')\"\n                                    class=\"flex items-center gap-1 px-2 py-1 rounded transition-colors data-[loading]:opacity-50 {{ $filter === $filterCase\n                                            ? 'bg-primary-100 dark:bg-primary-900/50 text-primary-700 dark:text-primary-300'\n                                            : 'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800' }}\"\n                                >\n                                    @if($icon = $filterCase->getIcon())\n                                        <x-filament::icon :icon=\"$icon\" class=\"w-3 h-3\"/>\n                                    @endif\n                                    {{ $filterCase->getLabel() }} ({{ $this->filterCounts[$filterCase->value] ?? 0 }})\n                                </button>\n                            @endforeach\n                        </div>\n\n                        <div class=\"flex items-center gap-2\">\n                            {{-- Search --}}\n                            <div class=\"relative\">\n                                <x-filament::icon\n                                    icon=\"heroicon-o-magnifying-glass\"\n                                    class=\"absolute left-2 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400\"\n                                />\n                                <input\n                                    type=\"text\"\n                                    wire:model.live.debounce.300ms=\"search\"\n                                    placeholder=\"Search...\"\n                                    class=\"{{ $search !== '' ? 'w-48' : 'w-32' }} pl-7 pr-2 py-1 text-xs rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-900 dark:text-white placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-primary-500 focus:border-primary-500 focus:w-48 transition-all\"\n                                />\n                            </div>\n\n                            {{-- Sort Dropdown --}}\n                            <div x-data=\"{ open: false }\" class=\"relative\">\n                                <button\n                                    @click=\"open = !open\"\n                                    @click.outside=\"open = false\"\n                                    class=\"flex items-center gap-1.5 px-2 py-1 text-xs rounded border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n                                >\n                                    <x-filament::icon :icon=\"$sortDirection->getIcon()\" class=\"w-4 h-4\"/>\n                                    <span>{{ $sortField->getLabel() }}</span>\n                                    <x-filament::icon icon=\"heroicon-m-chevron-down\" class=\"w-3 h-3\"/>\n                                </button>\n\n                                <div\n                                    x-show=\"open\"\n                                    x-transition:enter=\"transition ease-out duration-100\"\n                                    x-transition:enter-start=\"opacity-0 scale-95\"\n                                    x-transition:enter-end=\"opacity-100 scale-100\"\n                                    x-transition:leave=\"transition ease-in duration-75\"\n                                    x-transition:leave-start=\"opacity-100 scale-100\"\n                                    x-transition:leave-end=\"opacity-0 scale-95\"\n                                    class=\"absolute right-0 mt-1 w-44 rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 shadow-lg z-10\"\n                                >\n                                    <div class=\"p-1 border-b border-gray-100 dark:border-gray-700\">\n                                        @foreach(SortField::cases() as $field)\n                                            <button\n                                                wire:click=\"setSortField('{{ $field->value }}')\"\n                                                @class([\n                                                    'w-full flex items-center justify-between px-3 py-1.5 text-sm rounded hover:bg-gray-100 dark:hover:bg-gray-700',\n                                                    'text-primary-600 dark:text-primary-400' => $sortField === $field,\n                                                    'text-gray-700 dark:text-gray-300' => $sortField !== $field,\n                                                ])\n                                            >\n                                                <span class=\"flex items-center gap-2\">\n                                                    <x-filament::icon :icon=\"$field->getIcon()\" class=\"w-4 h-4\"/>\n                                                    {{ $field->getLabel() }}\n                                                </span>\n                                                @if($sortField === $field)\n                                                    <x-filament::icon icon=\"heroicon-m-check\" class=\"w-4 h-4\"/>\n                                                @endif\n                                            </button>\n                                        @endforeach\n                                    </div>\n\n                                    <div class=\"p-1\">\n                                        @foreach(SortDirection::cases() as $direction)\n                                            <button\n                                                wire:click=\"setSortDirection('{{ $direction->value }}')\"\n                                                @class([\n                                                    'w-full flex items-center justify-between px-3 py-1.5 text-sm rounded hover:bg-gray-100 dark:hover:bg-gray-700',\n                                                    'text-primary-600 dark:text-primary-400' => $sortDirection === $direction,\n                                                    'text-gray-700 dark:text-gray-300' => $sortDirection !== $direction,\n                                                ])\n                                            >\n                                                <span class=\"flex items-center gap-2\">\n                                                    <x-filament::icon :icon=\"$direction->getIcon()\" class=\"w-4 h-4\"/>\n                                                    {{ $direction->getLabel() }}\n                                                </span>\n                                                @if($sortDirection === $direction)\n                                                    <x-filament::icon icon=\"heroicon-m-check\" class=\"w-4 h-4\"/>\n                                                @endif\n                                            </button>\n                                        @endforeach\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                {{-- Table Header --}}\n                <div\n                    class=\"flex items-center px-3 py-1.5 text-[10px] font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700 bg-gray-50/50 dark:bg-gray-800/30 shrink-0\">\n                    <div class=\"w-1/2\">Raw Data</div>\n                    <div class=\"w-6 text-center\">\n                        <x-filament::icon icon=\"heroicon-o-arrow-right\" class=\"w-3 h-3 mx-auto\"/>\n                    </div>\n                    <div class=\"flex-1\">Mapped Value</div>\n                </div>\n\n                {{-- Values List --}}\n                <div class=\"flex-1 overflow-y-auto\">\n                    @forelse ($this->selectedColumnRows as $index => $valueData)\n                        @php\n                            $rawValue = $valueData->raw_value ?? '';\n                            $hasCorrection = $valueData->correction !== null;\n                            $mappedValue = $hasCorrection ? $valueData->correction : $rawValue;\n                            $isRawBlank = blank($rawValue);\n                            $isSkipped = (bool) ($valueData->is_skipped ?? false);\n                            $count = (int) $valueData->count;\n                        @endphp\n\n                        <div\n                            wire:key=\"val-{{ $index }}-{{ crc32((string) $rawValue) }}\"\n                            class=\"flex items-center px-3 py-2 border-b border-gray-100 dark:border-gray-800 last:border-b-0\"\n                        >\n                            {{-- Raw Data + Row Count --}}\n                            <div class=\"w-1/2 min-w-0 pr-2 flex items-center gap-2\">\n                                <span\n                                    @class([\n                                        'text-sm truncate',\n                                        'text-gray-400 dark:text-gray-500 italic' => $isRawBlank,\n                                        'text-gray-900 dark:text-white' => !$isRawBlank,\n                                    ])\n                                    title=\"{{ $rawValue }}\">\n                                    {{ $isRawBlank ? '(blank)' : Str::limit($rawValue, 35) }}\n                                </span>\n                                <span class=\"text-xs text-gray-400 dark:text-gray-500 shrink-0\">\n                                    {{ $count }} {{ Str::plural('row', $count) }}\n                                </span>\n                            </div>\n\n                            {{-- Arrow --}}\n                            <div class=\"w-6 text-center\">\n                                <x-filament::icon icon=\"heroicon-o-arrow-right\" class=\"w-3 h-3 text-gray-400 mx-auto\"/>\n                            </div>\n\n                            {{-- Mapped Value + Actions --}}\n                            <div class=\"flex-1 min-w-0 flex items-center gap-2\">\n                                @if ($isSkipped)\n                                    @include('import-wizard-new::livewire.steps.partials.value-row-skipped', compact('rawValue', 'selectedColumn'))\n                                @elseif ($isRawBlank)\n                                    <span class=\"text-sm text-gray-400 dark:text-gray-500 italic\">(blank)</span>\n                                @elseif ($this->selectedColumn->getType()->isDateOrDateTime())\n                                    @include('import-wizard-new::livewire.steps.partials.value-row-date', compact('rawValue', 'mappedValue', 'hasCorrection', 'selectedColumn', 'valueData'))\n                                @elseif ($this->selectedColumn->getType()->isFloat())\n                                    @include('import-wizard-new::livewire.steps.partials.value-row-number', compact('rawValue', 'mappedValue', 'hasCorrection', 'selectedColumn', 'valueData'))\n                                @elseif ($this->selectedColumn->isMultiChoicePredefined())\n                                    @include('import-wizard-new::livewire.steps.partials.value-row-choice', compact('rawValue', 'mappedValue', 'hasCorrection', 'selectedColumn', 'valueData'))\n                                @elseif ($this->selectedColumn->isMultiChoiceArbitrary())\n                                    @include('import-wizard-new::livewire.steps.partials.value-row-multi-value', compact('rawValue', 'mappedValue', 'hasCorrection', 'selectedColumn', 'valueData'))\n                                @else\n                                    @include('import-wizard-new::livewire.steps.partials.value-row-text', compact('rawValue', 'mappedValue', 'hasCorrection', 'selectedColumn', 'valueData'))\n                                @endif\n                            </div>\n                        </div>\n                    @empty\n                        <div class=\"flex flex-col items-center justify-center py-8 text-sm text-gray-500 dark:text-gray-400\">\n                            @if ($search !== '' && $filter !== ReviewFilter::All)\n                                <x-filament::icon icon=\"heroicon-o-magnifying-glass\" class=\"w-8 h-8 mb-2 text-gray-300 dark:text-gray-600\"/>\n                                <span>No values match your search and filter</span>\n                            @elseif ($search !== '')\n                                <x-filament::icon icon=\"heroicon-o-magnifying-glass\" class=\"w-8 h-8 mb-2 text-gray-300 dark:text-gray-600\"/>\n                                <span>No values match \"{{ $search }}\"</span>\n                            @elseif ($filter !== ReviewFilter::All)\n                                <x-filament::icon icon=\"heroicon-o-funnel\" class=\"w-8 h-8 mb-2 text-gray-300 dark:text-gray-600\"/>\n                                <span>No {{ $filter->getLabel() }} values</span>\n                            @else\n                                No values to display\n                            @endif\n\n                            @if ($search !== '' || $filter !== ReviewFilter::All)\n                                <button\n                                    wire:click=\"clearFilters\"\n                                    class=\"mt-2 text-xs text-primary-600 dark:text-primary-400 hover:underline\"\n                                >\n                                    Clear filters\n                                </button>\n                            @endif\n                        </div>\n                    @endforelse\n                </div>\n\n                {{-- Pagination --}}\n                @if ($this->selectedColumnRows->lastPage() > 1)\n                    <div\n                        class=\"px-3 py-2 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 shrink-0 flex items-center justify-between\">\n                        <button\n                            wire:click=\"previousPage\"\n                            @disabled($this->selectedColumnRows->onFirstPage())\n                            class=\"px-3 py-1 text-xs font-medium rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n                        >\n                            Previous\n                        </button>\n                        <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n                            {{ number_format($this->selectedColumnRows->firstItem()) }}–{{ number_format($this->selectedColumnRows->lastItem()) }} of {{ number_format($this->selectedColumnRows->total()) }}\n                        </span>\n                        <button\n                            wire:click=\"nextPage\"\n                            @disabled(!$this->selectedColumnRows->hasMorePages())\n                            class=\"px-3 py-1 text-xs font-medium rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n                        >\n                            Next\n                        </button>\n                    </div>\n                @endif\n            @endif\n        </div>\n    </div>\n\n    {{-- Navigation --}}\n    <div class=\"shrink-0 flex justify-end gap-3 pt-4 mt-6 border-t border-gray-200 dark:border-gray-700 pb-1\">\n        <x-filament::button color=\"gray\" wire:click=\"$parent.goBack()\">\n            Back\n        </x-filament::button>\n        <x-filament::button\n            wire:click=\"continueToPreview\"\n            :disabled=\"$this->isValidating\"\n        >\n            Continue\n        </x-filament::button>\n    </div>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/resources/views/livewire/steps/upload-step.blade.php",
    "content": "<div class=\"flex flex-col h-full\">\n    {{-- File Upload Container --}}\n    <div class=\"flex-1 flex flex-col min-h-[12rem]\">\n    @if ($isParsed)\n        @php\n            $fileName = $uploadedFile?->getClientOriginalName() ?? 'import.csv';\n            $fileExtension = strtoupper(pathinfo($fileName, PATHINFO_EXTENSION));\n            $fileSizeFormatted = Number::fileSize($uploadedFile?->getSize() ?? 0, precision: 1);\n        @endphp\n        <div class=\"flex-1 rounded-xl border border-dashed border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900 p-12 flex items-center justify-center\">\n            {{-- File Info Card --}}\n            <div x-data class=\"bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-5 w-full max-w-sm\">\n                {{-- Hidden file input for replace --}}\n                <input x-ref=\"replaceInput\" type=\"file\" wire:model=\"uploadedFile\" accept=\".csv\" class=\"hidden\" />\n\n                {{-- File Header --}}\n                <div class=\"flex items-start justify-between\">\n                    <div>\n                        <p class=\"text-sm font-medium text-gray-950 dark:text-white\">{{ $fileName }}</p>\n                        <p class=\"text-xs text-gray-500 dark:text-gray-400\">.{{ $fileExtension }} file - {{ $fileSizeFormatted }}</p>\n                    </div>\n                    <button\n                        type=\"button\"\n                        wire:click=\"removeFile\"\n                        class=\"p-1.5 rounded-lg text-gray-400 hover:text-danger-500 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n                    >\n                        <x-filament::icon icon=\"heroicon-o-trash\" class=\"h-4 w-4\" />\n                    </button>\n                </div>\n\n                {{-- Divider --}}\n                <div class=\"border-t border-dashed border-gray-200 dark:border-gray-700 my-4\"></div>\n\n                {{-- Stats --}}\n                <div class=\"grid grid-cols-2 gap-3\">\n                    <div class=\"border border-gray-200 dark:border-gray-700 rounded-lg p-3\">\n                        <div class=\"flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-400\">\n                            <x-filament::icon icon=\"heroicon-o-view-columns\" class=\"h-3.5 w-3.5\" />\n                            <span>Columns found</span>\n                        </div>\n                        <p class=\"text-xl font-semibold text-gray-950 dark:text-white mt-1\">{{ count($headers) }}</p>\n                    </div>\n                    <div class=\"border border-gray-200 dark:border-gray-700 rounded-lg p-3\">\n                        <div class=\"flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-400\">\n                            <x-filament::icon icon=\"heroicon-o-queue-list\" class=\"h-3.5 w-3.5\" />\n                            <span>Rows found</span>\n                        </div>\n                        <p class=\"text-xl font-semibold text-gray-950 dark:text-white mt-1\">{{ number_format($rowCount) }}</p>\n                    </div>\n                </div>\n\n                {{-- Column Preview --}}\n                @if (count($headers) > 0)\n                    <div class=\"mt-4 pt-4 border-t border-dashed border-gray-200 dark:border-gray-700\">\n                        <p class=\"text-xs text-gray-500 dark:text-gray-400 mb-2\">Column preview</p>\n                        <div class=\"flex flex-wrap gap-1.5\">\n                            @foreach (array_slice($headers, 0, 5) as $header)\n                                <span class=\"inline-flex items-center px-2 py-0.5 rounded text-xs bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-300\">\n                                    {{ Str::limit($header, 15) }}\n                                </span>\n                            @endforeach\n                            @if (count($headers) > 5)\n                                <span class=\"inline-flex items-center px-2 py-0.5 rounded text-xs bg-gray-100 dark:bg-gray-700 text-gray-500\">\n                                    +{{ count($headers) - 5 }} more\n                                </span>\n                            @endif\n                        </div>\n                    </div>\n                @endif\n            </div>\n        </div>\n    @else\n        <div\n            x-data=\"{ dragging: false }\"\n            x-on:dragover.prevent=\"dragging = true\"\n            x-on:dragleave.prevent=\"dragging = false\"\n            x-on:drop.prevent=\"\n                dragging = false;\n                const file = $event.dataTransfer.files[0];\n                if (file) {\n                    $refs.fileInput.files = $event.dataTransfer.files;\n                    $refs.fileInput.dispatchEvent(new Event('change', { bubbles: true }));\n                }\n            \"\n            x-bind:class=\"dragging\n                ? 'border-primary-500 bg-primary-50 dark:bg-primary-950 ring-2 ring-primary-500/20'\n                : 'border-gray-300 dark:border-gray-700 bg-gray-50 dark:bg-gray-900'\"\n            class=\"flex-1 relative rounded-xl border border-dashed p-12 transition-all duration-200 grid place-items-center\"\n        >\n            {{-- Hidden file input (NOT covering the zone) --}}\n            <input\n                x-ref=\"fileInput\"\n                type=\"file\"\n                wire:model=\"uploadedFile\"\n                accept=\".csv\"\n                class=\"hidden\"\n                aria-label=\"Choose CSV file to upload\"\n            >\n\n            {{-- Content (hidden during loading) --}}\n            <div class=\"flex flex-col items-center text-center\" wire:loading.remove wire:target=\"uploadedFile\">\n                <x-filament::icon\n                    icon=\"heroicon-o-arrow-up-tray\"\n                    class=\"h-12 w-12 text-gray-400 dark:text-gray-600 mx-auto\"\n                />\n                <p class=\"mt-6 text-sm text-gray-700 dark:text-gray-400\">\n                    Drop your .CSV file onto this area to upload\n                </p>\n                <p class=\"mt-2 text-xs text-gray-400 dark:text-gray-500\">\n                    Max 10,000 rows • Max 10MB\n                </p>\n                <div class=\"flex items-center gap-4 mt-6 w-full max-w-xs\">\n                    <div class=\"flex-1 border-t border-dashed border-gray-300 dark:border-gray-600\"></div>\n                    <span class=\"text-sm text-gray-500 dark:text-gray-500\">or</span>\n                    <div class=\"flex-1 border-t border-dashed border-gray-300 dark:border-gray-600\"></div>\n                </div>\n                <x-filament::button\n                    color=\"gray\"\n                    class=\"mt-6\"\n                    x-on:click.prevent=\"$refs.fileInput.click()\"\n                >\n                    Choose a .CSV file\n                </x-filament::button>\n\n                {{-- Validation Error --}}\n                @error('uploadedFile')\n                    <p class=\"mt-3 text-sm text-danger-600 dark:text-danger-400 text-center\">{{ $message }}</p>\n                @enderror\n            </div>\n\n            {{-- Loading (absolute centered) --}}\n            <div wire:loading.flex wire:target=\"uploadedFile\" class=\"absolute inset-0 items-center justify-center\">\n                <div class=\"flex flex-col items-center text-center\">\n                    <x-filament::loading-indicator class=\"h-10 w-10 text-primary-500\" />\n                    <p class=\"mt-4 text-sm font-medium text-gray-700 dark:text-gray-300\">Analyzing your file...</p>\n                    <p class=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">Detecting columns and counting rows</p>\n                </div>\n            </div>\n\n        </div>\n    @endif\n    </div>\n\n    {{-- Navigation --}}\n    <div class=\"flex items-center justify-between pt-4 mt-6 border-t border-gray-200 dark:border-gray-700 pb-1\">\n        <a\n            href=\"{{ url()->getPublicUrl('documentation/import') }}\"\n            target=\"_blank\"\n            class=\"inline-flex items-center gap-1.5 text-sm text-gray-500 hover:text-primary-600 dark:text-gray-400 dark:hover:text-primary-400 transition-colors\"\n        >\n            <x-filament::icon icon=\"heroicon-o-book-open\" class=\"w-4 h-4\" />\n            <span>Import Guide</span>\n            <x-filament::icon icon=\"heroicon-o-arrow-top-right-on-square\" class=\"w-3 h-3\" />\n        </a>\n        <x-filament::button\n            wire:click=\"continueToMapping\"\n            :disabled=\"!$isParsed\"\n            wire:loading.attr=\"disabled\"\n        >\n            <span wire:loading.remove wire:target=\"continueToMapping\">Continue</span>\n            <span wire:loading wire:target=\"continueToMapping\">Processing...</span>\n        </x-filament::button>\n    </div>\n</div>\n"
  },
  {
    "path": "packages/ImportWizard/routes/web.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Relaticle\\ImportWizard\\Http\\Controllers\\DownloadFailedRowsController;\n\nRoute::get('imports/{import}/failed-rows/download', DownloadFailedRowsController::class)\n    ->name('import-history.failed-rows.download')\n    ->middleware('signed');\n"
  },
  {
    "path": "packages/ImportWizard/src/Commands/CleanupImportsCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\File;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nfinal class CleanupImportsCommand extends Command\n{\n    protected $signature = 'import:cleanup\n        {--hours=24 : Delete abandoned imports older than this many hours}\n        {--completed-hours=2 : Delete completed/failed import files older than this many hours}';\n\n    protected $description = 'Clean up stale and completed import files';\n\n    public function handle(): void\n    {\n        $staleHours = (int) $this->option('hours');\n        $completedHours = (int) $this->option('completed-hours');\n        $deleted = 0;\n\n        $deleted += $this->cleanupTerminalImportFiles($completedHours);\n        $deleted += $this->cleanupAbandonedImports($staleHours);\n        $deleted += $this->cleanupOrphanedDirectories();\n\n        $this->comment(\"Cleaned up {$deleted} import(s).\");\n    }\n\n    private function cleanupTerminalImportFiles(int $completedHours): int\n    {\n        $deleted = 0;\n\n        $terminalImports = Import::query()\n            ->whereIn('status', [ImportStatus::Completed, ImportStatus::Failed])\n            ->where('updated_at', '<', now()->subHours($completedHours))\n            ->get();\n\n        foreach ($terminalImports as $import) {\n            $store = ImportStore::load($import->id);\n\n            if (! $store instanceof ImportStore) {\n                continue;\n            }\n\n            $this->info(\"Cleaning up files for import {$import->id} (status: {$import->status->value})\");\n            $store->destroy();\n            $deleted++;\n        }\n\n        return $deleted;\n    }\n\n    private function cleanupAbandonedImports(int $staleHours): int\n    {\n        $deleted = 0;\n\n        $abandonedImports = Import::query()\n            ->whereNotIn('status', [ImportStatus::Completed, ImportStatus::Failed])\n            ->where('updated_at', '<', now()->subHours($staleHours))\n            ->get();\n\n        foreach ($abandonedImports as $import) {\n            $this->info(\"Cleaning up abandoned import {$import->id} (status: {$import->status->value})\");\n            ImportStore::load($import->id)?->destroy();\n            $import->delete();\n            $deleted++;\n        }\n\n        return $deleted;\n    }\n\n    private function cleanupOrphanedDirectories(): int\n    {\n        $deleted = 0;\n        $importsPath = storage_path('app/imports');\n\n        if (! File::isDirectory($importsPath)) {\n            return 0;\n        }\n\n        foreach (File::directories($importsPath) as $directory) {\n            $id = basename((string) $directory);\n\n            if (Import::query()->where('id', $id)->exists()) {\n                continue;\n            }\n\n            $this->info(\"Cleaning up orphaned directory {$id}\");\n            File::deleteDirectory($directory);\n            $deleted++;\n        }\n\n        return $deleted;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/ColumnData.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse Livewire\\Wireable;\nuse Relaticle\\CustomFields\\Enums\\FieldDataType;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\nuse Spatie\\LaravelData\\Concerns\\WireableData;\nuse Spatie\\LaravelData\\Data;\n\n/**\n * Represents a mapping from a CSV column to an entity field or entity link.\n *\n * The naming convention:\n * - source: CSV column header (the key in the ColumnDatas array)\n * - target: field key for field mappings, or matcherKey for entity link mappings\n * - entityLink: if set, indicates this is an entity link mapping (relationship or Record custom field)\n * - dateFormat: if set, indicates the date format to use for parsing (iso, european, american)\n *\n * The rule: presence of `entityLink` determines the mapping type.\n *\n * Note: importField and entityLinkField are hydrated at runtime by ImportStore, not stored in JSON.\n */\nfinal class ColumnData extends Data implements Wireable\n{\n    use WireableData;\n\n    /** Hydrated at runtime by ImportStore, not persisted. */\n    public ?ImportField $importField = null;\n\n    /** Hydrated at runtime by ImportStore, not persisted. */\n    public ?EntityLink $entityLinkField = null;\n\n    public function __construct(\n        public readonly string $source,\n        public readonly string $target,\n        public readonly ?string $entityLink = null,\n        public readonly ?DateFormat $dateFormat = null,\n        public readonly ?NumberFormat $numberFormat = null,\n    ) {}\n\n    public static function toField(string $source, string $target): self\n    {\n        return new self(\n            source: $source,\n            target: $target,\n        );\n    }\n\n    public static function toEntityLink(\n        string $source,\n        string $matcherKey,\n        string $entityLinkKey,\n    ): self {\n        return new self(\n            source: $source,\n            target: $matcherKey,\n            entityLink: $entityLinkKey,\n        );\n    }\n\n    public function getType(): FieldDataType\n    {\n        return $this->importField->type ?? FieldDataType::STRING;\n    }\n\n    /**\n     * Check if this is a MULTI_CHOICE field with predefined options (not arbitrary).\n     *\n     * Returns false for fields like email/phone that use MULTI_CHOICE type\n     * but accept arbitrary values without predefined options.\n     */\n    public function isMultiChoicePredefined(): bool\n    {\n        return $this->getType()->isMultiChoiceField() && ! ($this->importField->acceptsArbitraryValues ?? false);\n    }\n\n    public function isSingleChoicePredefined(): bool\n    {\n        return $this->getType()->isChoiceField() && ! $this->getType()->isMultiChoiceField();\n    }\n\n    public function isMultiChoiceArbitrary(): bool\n    {\n        return $this->getType()->isMultiChoiceField() && ($this->importField->acceptsArbitraryValues ?? false);\n    }\n\n    /** @return array<string> */\n    public function getRules(): array\n    {\n        return $this->importField->rules ?? [];\n    }\n\n    public function getLabel(): string\n    {\n        if ($this->isFieldMapping()) {\n            return $this->importField->label ?? $this->target;\n        }\n\n        return $this->entityLinkField->label ?? $this->entityLink ?? $this->target;\n    }\n\n    public function getIcon(): string\n    {\n        if ($this->isEntityLinkMapping()) {\n            return $this->entityLinkField?->icon() ?? 'heroicon-o-link';\n        }\n\n        return $this->importField->icon ?? 'heroicon-o-squares-2x2';\n    }\n\n    public function getMatcher(): ?MatchableField\n    {\n        if (! $this->isEntityLinkMapping()) {\n            return null;\n        }\n\n        return $this->entityLinkField?->getMatcher($this->target);\n    }\n\n    public function isFieldMapping(): bool\n    {\n        return $this->entityLink === null;\n    }\n\n    public function isEntityLinkMapping(): bool\n    {\n        return $this->entityLink !== null;\n    }\n\n    /**\n     * Get the EntityLink and MatchableField for this column.\n     *\n     * Uses hydrated entityLinkField if available, otherwise looks up from importer.\n     *\n     * @return array{link: EntityLink, matcher: MatchableField}|null\n     */\n    public function resolveEntityLinkContext(BaseImporter $importer): ?array\n    {\n        if (! $this->isEntityLinkMapping()) {\n            return null;\n        }\n\n        $link = $this->entityLinkField\n            ?? ($importer->entityLinks()[$this->entityLink] ?? null);\n\n        if ($link === null) {\n            return null;\n        }\n\n        $matcher = $link->getMatcher($this->target);\n\n        if ($matcher === null) {\n            return null;\n        }\n\n        return ['link' => $link, 'matcher' => $matcher];\n    }\n\n    /** @return array<string, mixed> */\n    public function toArray(): array\n    {\n        return [\n            'source' => $this->source,\n            'target' => $this->target,\n            'entityLink' => $this->entityLink,\n            'dateFormat' => $this->dateFormat,\n            'numberFormat' => $this->numberFormat,\n        ];\n    }\n\n    public function withDateFormat(DateFormat $format): self\n    {\n        return $this->cloneWith(dateFormat: $format);\n    }\n\n    public function withNumberFormat(NumberFormat $format): self\n    {\n        return $this->cloneWith(numberFormat: $format);\n    }\n\n    private function cloneWith(?DateFormat $dateFormat = null, ?NumberFormat $numberFormat = null): self\n    {\n        $new = new self(\n            source: $this->source,\n            target: $this->target,\n            entityLink: $this->entityLink,\n            dateFormat: $dateFormat ?? $this->dateFormat,\n            numberFormat: $numberFormat ?? $this->numberFormat,\n        );\n\n        $new->importField = $this->importField;\n        $new->entityLinkField = $this->entityLinkField;\n\n        return $new;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/EntityLink.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse App\\Models\\Company;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\Relation;\nuse Relaticle\\CustomFields\\Facades\\Entities;\nuse Relaticle\\CustomFields\\Models\\CustomField;\nuse Relaticle\\ImportWizard\\Enums\\EntityLinkSource;\nuse Relaticle\\ImportWizard\\Enums\\EntityLinkStorage;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkStorage\\CustomFieldValueStorage;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkStorage\\EntityLinkStorageInterface;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkStorage\\ForeignKeyStorage;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkStorage\\MorphToManyStorage;\nuse Spatie\\LaravelData\\Attributes\\DataCollectionOf;\nuse Spatie\\LaravelData\\Data;\n\nfinal class EntityLink extends Data\n{\n    /**\n     * @param  string  $key  Unique identifier (e.g., 'company' or 'custom_fields_linked_company')\n     * @param  EntityLinkSource  $source  Where this link comes from (Relationship or CustomField)\n     * @param  string  $targetEntity  Entity alias (e.g., 'company', 'people')\n     * @param  class-string<Model>  $targetModelClass  The target model class\n     * @param  array<MatchableField>  $matchableFields  Fields that can match related records\n     * @param  EntityLinkStorage  $storageType  How the link is persisted\n     * @param  string  $label  Display label\n     * @param  bool  $allowMultiple  Whether multiple values are allowed\n     * @param  string|null  $foreignKey  FK column (for ForeignKey storage)\n     * @param  string|null  $morphRelation  Relation name (for MorphToMany storage)\n     * @param  string|null  $customFieldCode  Custom field code (for CustomFieldValue storage)\n     * @param  array<string>  $guesses  Column name aliases for auto-mapping\n     * @param  int|null  $sortOrder  Display order for custom field entity links\n     */\n    public function __construct(\n        public readonly string $key,\n        public readonly EntityLinkSource $source,\n        public readonly string $targetEntity,\n        public readonly string $targetModelClass,\n        #[DataCollectionOf(MatchableField::class)]\n        public readonly array $matchableFields = [],\n        public readonly EntityLinkStorage $storageType = EntityLinkStorage::ForeignKey,\n        public readonly string $label = '',\n        public readonly bool $allowMultiple = false,\n        public readonly ?string $foreignKey = null,\n        public readonly ?string $morphRelation = null,\n        public readonly ?string $customFieldCode = null,\n        public readonly array $guesses = [],\n        public readonly ?int $sortOrder = null,\n    ) {}\n\n    /** @var array<string, EntityLinkStorageInterface> */\n    private static array $storageStrategies = [];\n\n    /** @param  array<string, mixed>  $overrides */\n    private function cloneWith(array $overrides): self\n    {\n        return new self(\n            key: $overrides['key'] ?? $this->key,\n            source: $overrides['source'] ?? $this->source,\n            targetEntity: $overrides['targetEntity'] ?? $this->targetEntity,\n            targetModelClass: $overrides['targetModelClass'] ?? $this->targetModelClass,\n            matchableFields: $overrides['matchableFields'] ?? $this->matchableFields,\n            storageType: $overrides['storageType'] ?? $this->storageType,\n            label: $overrides['label'] ?? $this->label,\n            allowMultiple: $overrides['allowMultiple'] ?? $this->allowMultiple,\n            foreignKey: $overrides['foreignKey'] ?? $this->foreignKey,\n            morphRelation: $overrides['morphRelation'] ?? $this->morphRelation,\n            customFieldCode: $overrides['customFieldCode'] ?? $this->customFieldCode,\n            guesses: $overrides['guesses'] ?? $this->guesses,\n            sortOrder: $overrides['sortOrder'] ?? $this->sortOrder,\n        );\n    }\n\n    /** @param  class-string<Model>  $modelClass */\n    public static function belongsTo(string $name, string $modelClass): self\n    {\n        return new self(\n            key: $name,\n            source: EntityLinkSource::Relationship,\n            targetEntity: self::getEntityAliasForModel($modelClass),\n            targetModelClass: $modelClass,\n            storageType: EntityLinkStorage::ForeignKey,\n            label: ucfirst($name),\n        );\n    }\n\n    /** @param  class-string<Model>  $modelClass */\n    public static function morphToMany(string $name, string $modelClass): self\n    {\n        return new self(\n            key: $name,\n            source: EntityLinkSource::Relationship,\n            targetEntity: self::getEntityAliasForModel($modelClass),\n            targetModelClass: $modelClass,\n            storageType: EntityLinkStorage::MorphToMany,\n            label: ucfirst($name),\n            allowMultiple: true,\n            morphRelation: $name,\n        );\n    }\n\n    public static function fromCustomField(CustomField $customField): self\n    {\n        $lookupType = $customField->lookup_type;\n        $modelClass = Relation::getMorphedModel($lookupType);\n\n        throw_if($modelClass === null, \\InvalidArgumentException::class, \"Unknown lookup type: {$lookupType}\");\n\n        return new self(\n            key: \"custom_fields_{$customField->code}\",\n            source: EntityLinkSource::CustomField,\n            targetEntity: $lookupType,\n            targetModelClass: $modelClass,\n            matchableFields: self::getUniqueMatchableFieldsForEntity($modelClass),\n            storageType: EntityLinkStorage::CustomFieldValue,\n            label: $customField->name,\n            allowMultiple: $customField->typeData->supportsMultiValue ?? false,\n            customFieldCode: $customField->code,\n            guesses: [\n                $customField->code,\n                $customField->name,\n                strtolower($customField->name),\n                str_replace(' ', '_', strtolower($customField->name)),\n            ],\n            sortOrder: $customField->sort_order,\n        );\n    }\n\n    public static function company(): self\n    {\n        return self::belongsTo('company', Company::class)\n            ->matchableFields([\n                MatchableField::id(),\n                MatchableField::domain('custom_fields_domains'),\n                MatchableField::name(),\n            ])\n            ->foreignKey('company_id')\n            ->guess([\n                'company', 'company_name', 'organization', 'account',\n                'employer', 'company id', 'company_id',\n            ]);\n    }\n\n    public static function contact(): self\n    {\n        return self::belongsTo('contact', People::class)\n            ->matchableFields([\n                MatchableField::id(),\n                MatchableField::email('custom_fields_emails'),\n                MatchableField::phone('custom_fields_phone_number'),\n                MatchableField::name(),\n            ])\n            ->foreignKey('contact_id')\n            ->guess([\n                'contact', 'contact_name', 'person', 'contact_id',\n                'person_id', 'people_id',\n            ]);\n    }\n\n    public static function polymorphicCompanies(): self\n    {\n        return self::morphToMany('companies', Company::class)\n            ->matchableFields([\n                MatchableField::id(),\n                MatchableField::domain('custom_fields_domains'),\n                MatchableField::name(),\n            ])\n            ->guess([\n                'company', 'companies', 'company_name', 'company_id',\n            ]);\n    }\n\n    public static function polymorphicPeople(): self\n    {\n        return self::morphToMany('people', People::class)\n            ->matchableFields([\n                MatchableField::id(),\n                MatchableField::email('custom_fields_emails'),\n                MatchableField::phone('custom_fields_phone_number'),\n                MatchableField::name(),\n            ])\n            ->guess([\n                'person', 'people', 'contact', 'contact_name', 'person_id',\n            ]);\n    }\n\n    public static function polymorphicOpportunities(): self\n    {\n        return self::morphToMany('opportunities', Opportunity::class)\n            ->matchableFields([\n                MatchableField::id(),\n            ])\n            ->guess([\n                'opportunity', 'opportunities', 'deal', 'opportunity_id',\n            ]);\n    }\n\n    /** @param  array<MatchableField>  $matchableFields */\n    public function matchableFields(array $matchableFields): self\n    {\n        return $this->cloneWith(['matchableFields' => $matchableFields]);\n    }\n\n    public function foreignKey(string $foreignKey): self\n    {\n        return $this->cloneWith(['foreignKey' => $foreignKey]);\n    }\n\n    public function morphRelation(string $relation): self\n    {\n        return $this->cloneWith(['morphRelation' => $relation]);\n    }\n\n    /** @param  array<string>  $guesses */\n    public function guess(array $guesses): self\n    {\n        return $this->cloneWith(['guesses' => $guesses]);\n    }\n\n    public function label(string $label): self\n    {\n        return $this->cloneWith(['label' => $label]);\n    }\n\n    public function getHighestPriorityMatcher(): ?MatchableField\n    {\n        if ($this->matchableFields === []) {\n            return null;\n        }\n\n        return collect($this->matchableFields)\n            ->sortByDesc(fn (MatchableField $field): int => $field->priority)\n            ->first();\n    }\n\n    public function getMatcher(string $field): ?MatchableField\n    {\n        return collect($this->matchableFields)\n            ->first(fn (MatchableField $m): bool => $m->field === $field);\n    }\n\n    public function matchesHeader(string $header): bool\n    {\n        $normalized = $this->normalizeHeader($header);\n\n        $candidates = array_merge([$this->key, $this->label], $this->guesses);\n\n        return array_any($candidates, fn (string $candidate): bool => $this->normalizeHeader($candidate) === $normalized);\n    }\n\n    private function normalizeHeader(string $value): string\n    {\n        return str($value)->lower()->replace(['-', '_'], ' ')->squish()->toString();\n    }\n\n    public function icon(): string\n    {\n        return Entities::getEntity($this->targetEntity)?->getIcon() ?? 'heroicon-o-link';\n    }\n\n    public function isForeignKey(): bool\n    {\n        return $this->storageType === EntityLinkStorage::ForeignKey;\n    }\n\n    public function isMorphToMany(): bool\n    {\n        return $this->storageType === EntityLinkStorage::MorphToMany;\n    }\n\n    public function isCustomFieldValue(): bool\n    {\n        return $this->storageType === EntityLinkStorage::CustomFieldValue;\n    }\n\n    public function isFromRelationship(): bool\n    {\n        return $this->source === EntityLinkSource::Relationship;\n    }\n\n    public function isFromCustomField(): bool\n    {\n        return $this->source === EntityLinkSource::CustomField;\n    }\n\n    public function getStorageStrategy(): EntityLinkStorageInterface\n    {\n        return self::$storageStrategies[$this->storageType->value] ??= match ($this->storageType) {\n            EntityLinkStorage::ForeignKey => new ForeignKeyStorage,\n            EntityLinkStorage::MorphToMany => new MorphToManyStorage,\n            EntityLinkStorage::CustomFieldValue => new CustomFieldValueStorage,\n        };\n    }\n\n    /** @param  class-string<Model>  $modelClass */\n    private static function getEntityAliasForModel(string $modelClass): string\n    {\n        return match ($modelClass) {\n            Company::class => 'company',\n            People::class => 'people',\n            Opportunity::class => 'opportunity',\n            default => (new $modelClass)->getMorphClass(),\n        };\n    }\n\n    /**\n     * @param  class-string<Model>  $modelClass\n     * @return array<MatchableField>\n     */\n    private static function getUniqueMatchableFieldsForEntity(string $modelClass): array\n    {\n        return match ($modelClass) {\n            Company::class => [\n                MatchableField::id(),\n                MatchableField::domain('custom_fields_domains'),\n                MatchableField::name(),\n            ],\n            People::class => [\n                MatchableField::id(),\n                MatchableField::email('custom_fields_emails'),\n                MatchableField::name(),\n            ],\n            default => [\n                MatchableField::id(),\n            ],\n        };\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/ImportField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse Relaticle\\CustomFields\\Enums\\FieldDataType;\nuse Spatie\\LaravelData\\Data;\n\n/**\n * Defines a single importable field.\n *\n * ImportField is immutable - all builder methods return new instances.\n */\nfinal class ImportField extends Data\n{\n    /**\n     * @param  string  $key  The field key (database column or custom field key)\n     * @param  string  $label  Display label\n     * @param  bool  $required  Whether the field is required\n     * @param  array<string>  $rules  Laravel validation rules\n     * @param  array<string>  $guesses  Column name aliases for auto-mapping\n     * @param  string|null  $example  Example value for display\n     * @param  bool  $isCustomField  Whether this is a custom field\n     * @param  FieldDataType|null  $type  The data type\n     * @param  string|null  $icon  The display icon (Heroicon name)\n     * @param  int|null  $sortOrder  Display order for custom fields\n     * @param  bool  $acceptsArbitraryValues  Whether field accepts arbitrary values (email, phone, tags)\n     * @param  array<int, array{label: string, value: string}>|null  $options  Choice options for select fields\n     */\n    public function __construct(\n        public readonly string $key,\n        public readonly string $label,\n        public readonly bool $required = false,\n        public readonly array $rules = [],\n        public readonly array $guesses = [],\n        public readonly ?string $example = null,\n        public readonly bool $isCustomField = false,\n        public readonly ?FieldDataType $type = null,\n        public readonly ?string $icon = null,\n        public readonly ?int $sortOrder = null,\n        public readonly bool $acceptsArbitraryValues = false,\n        public readonly ?array $options = null,\n    ) {}\n\n    /**\n     * Create a new ImportField.\n     */\n    public static function make(string $key): self\n    {\n        return new self(\n            key: $key,\n            label: ucfirst(str_replace('_', ' ', $key)),\n        );\n    }\n\n    /**\n     * Create a pre-configured ID field for record matching.\n     */\n    public static function id(): self\n    {\n        return new self(\n            key: 'id',\n            label: 'Record ID',\n            required: false,\n            rules: ['nullable', 'ulid'],\n            guesses: ['id', 'record_id', 'ulid', 'record id'],\n            example: '01KCCFMZ52QWZSQZWVG0AP704V',\n            icon: 'heroicon-o-finger-print',\n        );\n    }\n\n    /**\n     * Set the display label.\n     */\n    public function label(string $label): self\n    {\n        return $this->cloneWith(['label' => $label]);\n    }\n\n    /**\n     * Set whether the field is required.\n     */\n    public function required(bool $required = true): self\n    {\n        return $this->cloneWith(['required' => $required]);\n    }\n\n    /**\n     * Set validation rules.\n     *\n     * @param  array<string>  $rules\n     */\n    public function rules(array $rules): self\n    {\n        return $this->cloneWith(['rules' => $rules]);\n    }\n\n    /**\n     * Set column name aliases for auto-mapping.\n     *\n     * @param  array<string>  $aliases\n     */\n    public function guess(array $aliases): self\n    {\n        return $this->cloneWith(['guesses' => $aliases]);\n    }\n\n    /**\n     * Set an example value.\n     */\n    public function example(string $example): self\n    {\n        return $this->cloneWith(['example' => $example]);\n    }\n\n    /**\n     * Mark as a custom field.\n     */\n    public function asCustomField(bool $isCustomField = true): self\n    {\n        return $this->cloneWith(['isCustomField' => $isCustomField]);\n    }\n\n    /**\n     * Set the data type.\n     */\n    public function type(?FieldDataType $type): self\n    {\n        return $this->cloneWith(['type' => $type]);\n    }\n\n    /**\n     * Set the display icon.\n     */\n    public function icon(?string $icon): self\n    {\n        return $this->cloneWith(['icon' => $icon]);\n    }\n\n    /**\n     * Set the sort order.\n     */\n    public function sortOrder(?int $sortOrder): self\n    {\n        return $this->cloneWith(['sortOrder' => $sortOrder]);\n    }\n\n    /**\n     * Mark field as accepting arbitrary values (email, phone, tags).\n     */\n    public function acceptsArbitraryValues(bool $accepts = true): self\n    {\n        return $this->cloneWith(['acceptsArbitraryValues' => $accepts]);\n    }\n\n    /**\n     * Set choice options for select fields.\n     *\n     * @param  array<int, array{label: string, value: string}>|null  $options\n     */\n    public function options(?array $options): self\n    {\n        return $this->cloneWith(['options' => $options]);\n    }\n\n    /**\n     * Create a new instance with specified property overrides.\n     *\n     * @param  array<string, mixed>  $overrides\n     */\n    private function cloneWith(array $overrides): self\n    {\n        return new self(\n            key: $overrides['key'] ?? $this->key,\n            label: $overrides['label'] ?? $this->label,\n            required: $overrides['required'] ?? $this->required,\n            rules: $overrides['rules'] ?? $this->rules,\n            guesses: $overrides['guesses'] ?? $this->guesses,\n            example: $overrides['example'] ?? $this->example,\n            isCustomField: $overrides['isCustomField'] ?? $this->isCustomField,\n            type: $overrides['type'] ?? $this->type,\n            icon: $overrides['icon'] ?? $this->icon,\n            sortOrder: $overrides['sortOrder'] ?? $this->sortOrder,\n            acceptsArbitraryValues: $overrides['acceptsArbitraryValues'] ?? $this->acceptsArbitraryValues,\n            options: $overrides['options'] ?? $this->options,\n        );\n    }\n\n    /**\n     * Check if this field matches a given column header.\n     *\n     * Normalizes spaces, dashes, and underscores as interchangeable (Filament convention).\n     */\n    public function matchesHeader(string $header): bool\n    {\n        $normalized = $this->normalizeHeader($header);\n\n        $candidates = array_merge([$this->key, $this->label], $this->guesses);\n\n        return array_any($candidates, fn (string $candidate): bool => $this->normalizeHeader($candidate) === $normalized);\n    }\n\n    private function normalizeHeader(string $value): string\n    {\n        return str($value)->lower()->replace(['-', '_'], ' ')->squish()->toString();\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/ImportFieldCollection.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse Illuminate\\Support\\Collection;\n\n/**\n * A typed collection of ImportField objects.\n *\n * Extends Laravel's Collection to provide domain-specific methods\n * for working with import fields while inheriting all Collection functionality.\n *\n * @extends Collection<int, ImportField>\n */\nfinal class ImportFieldCollection extends Collection\n{\n    /** @phpstan-param ImportField|null $default */\n    public function get(mixed $key, mixed $default = null): ?ImportField\n    {\n        return $this->first(fn (ImportField $f): bool => $f->key === $key) ?? $default;\n    }\n\n    /**\n     * Check if a field with the given key exists.\n     */\n    public function hasKey(string $key): bool\n    {\n        return $this->get($key) instanceof ImportField;\n    }\n\n    /**\n     * Find the best matching field for a CSV column header.\n     *\n     * Returns the first field that matches the header based on:\n     * 1. Exact key match\n     * 2. Exact label match\n     * 3. Guess alias match\n     */\n    public function guessFor(string $header): ?ImportField\n    {\n        return $this->first(fn (ImportField $f): bool => $f->matchesHeader($header));\n    }\n\n    /**\n     * Get all required fields.\n     */\n    public function required(): static\n    {\n        return $this->filter(fn (ImportField $f): bool => $f->required);\n    }\n\n    /**\n     * Get all optional fields.\n     */\n    public function optional(): static\n    {\n        return $this->reject(fn (ImportField $f): bool => $f->required);\n    }\n\n    /**\n     * Get standard (non-custom) fields.\n     */\n    public function standard(): static\n    {\n        return $this->reject(fn (ImportField $f): bool => $f->isCustomField);\n    }\n\n    /**\n     * Get custom fields only.\n     */\n    public function custom(): static\n    {\n        return $this->filter(fn (ImportField $f): bool => $f->isCustomField);\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/InferenceResult.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse Spatie\\LaravelData\\Data;\n\n/**\n * Result of data type inference for a CSV column.\n */\nfinal class InferenceResult extends Data\n{\n    /**\n     * @param  string|null  $type  Detected type: email, phone, date, number, url, currency, or null\n     * @param  float  $confidence  Confidence level 0.0 - 1.0\n     * @param  array<string>  $suggestedFields  Field keys that match this type\n     */\n    public function __construct(\n        public readonly ?string $type,\n        public readonly float $confidence,\n        public readonly array $suggestedFields = [],\n    ) {}\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/MatchableField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Spatie\\LaravelData\\Data;\n\nfinal class MatchableField extends Data\n{\n    public function __construct(\n        public readonly string $field,\n        public readonly string $label,\n        public readonly int $priority = 0,\n        public readonly MatchBehavior $behavior = MatchBehavior::MatchOrCreate,\n        public readonly bool $multiValue = false,\n    ) {}\n\n    public static function id(): self\n    {\n        return new self(\n            field: 'id',\n            label: 'Record ID',\n            priority: 100,\n            behavior: MatchBehavior::MatchOnly,\n        );\n    }\n\n    public static function email(\n        string $fieldKey = 'custom_fields_emails',\n        MatchBehavior $behavior = MatchBehavior::MatchOrCreate,\n    ): self {\n        return new self(\n            field: $fieldKey,\n            label: 'Email',\n            priority: 90,\n            behavior: $behavior,\n            multiValue: true,\n        );\n    }\n\n    public static function domain(\n        string $fieldKey = 'custom_fields_domains',\n        MatchBehavior $behavior = MatchBehavior::MatchOrCreate,\n    ): self {\n        return new self(\n            field: $fieldKey,\n            label: 'Domain',\n            priority: 80,\n            behavior: $behavior,\n            multiValue: true,\n        );\n    }\n\n    public static function phone(\n        string $fieldKey = 'custom_fields_phone_number',\n        MatchBehavior $behavior = MatchBehavior::MatchOrCreate,\n    ): self {\n        return new self(\n            field: $fieldKey,\n            label: 'Phone',\n            priority: 70,\n            behavior: $behavior,\n            multiValue: true,\n        );\n    }\n\n    public static function name(): self\n    {\n        return new self(\n            field: 'name',\n            label: 'Name',\n            priority: 10,\n            behavior: MatchBehavior::Create,\n        );\n    }\n\n    public function description(): string\n    {\n        return $this->behavior->description();\n    }\n\n    public function isCreate(): bool\n    {\n        return $this->behavior === MatchBehavior::Create;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Data/RelationshipMatch.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Data;\n\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Spatie\\LaravelData\\Data;\n\nfinal class RelationshipMatch extends Data\n{\n    public function __construct(\n        public readonly string $relationship,\n        public readonly RowMatchAction $action,\n        public readonly ?string $id = null,\n        public readonly ?string $name = null,\n        public readonly ?MatchBehavior $behavior = null,\n        public readonly ?string $matchField = null,\n    ) {}\n\n    public static function existing(string $relationship, string $id, ?MatchBehavior $behavior = null, ?string $matchField = null): self\n    {\n        return new self(\n            relationship: $relationship,\n            action: RowMatchAction::Update,\n            id: $id,\n            behavior: $behavior,\n            matchField: $matchField,\n        );\n    }\n\n    public static function create(string $relationship, string $name, ?MatchBehavior $behavior = null, ?string $matchField = null): self\n    {\n        return new self(\n            relationship: $relationship,\n            action: RowMatchAction::Create,\n            name: $name,\n            behavior: $behavior,\n            matchField: $matchField,\n        );\n    }\n\n    public function isExisting(): bool\n    {\n        return $this->action === RowMatchAction::Update;\n    }\n\n    public function isCreate(): bool\n    {\n        return $this->action === RowMatchAction::Create;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/DateFormat.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nuse Carbon\\Carbon;\nuse Filament\\Support\\Contracts\\HasLabel;\nuse Illuminate\\Support\\Facades\\Date;\n\n/**\n * Supported date/datetime formats for CSV import parsing.\n *\n * Handles both date-only and datetime values with a unified interface.\n * The format determines how ambiguous dates (like 01/02/2024) are interpreted.\n */\nenum DateFormat: string implements HasLabel\n{\n    case ISO = 'iso';\n    case EUROPEAN = 'european';\n    case AMERICAN = 'american';\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::ISO => 'ISO standard',\n            self::EUROPEAN => 'European',\n            self::AMERICAN => 'American',\n        };\n    }\n\n    /**\n     * Get example patterns for UI display.\n     *\n     * @return array<string>\n     */\n    public function getExamples(bool $withTime = false): array\n    {\n        if ($withTime) {\n            return match ($this) {\n                self::ISO => ['2024-05-15 16:00:00'],\n                self::EUROPEAN => ['16:00 15-05-2024', '21:30:02 15 May 2024'],\n                self::AMERICAN => ['16:00 05-15-2024', '21:30:02 May 15th 2024'],\n            };\n        }\n\n        return match ($this) {\n            self::ISO => ['2024-05-15'],\n            self::EUROPEAN => ['15-05-2024', '15/05/2024', '15 May 2024'],\n            self::AMERICAN => ['05-15-2024', '05/15/2024', 'May 15th 2024'],\n        };\n    }\n\n    /**\n     * Format a Carbon instance for display.\n     */\n    public function format(Carbon $date, bool $withTime = false): string\n    {\n        if ($withTime) {\n            return match ($this) {\n                self::ISO => $date->format('Y-m-d H:i:s'),\n                self::EUROPEAN => $date->format('H:i:s d/m/Y'),\n                self::AMERICAN => $date->format('H:i:s m/d/Y'),\n            };\n        }\n\n        return match ($this) {\n            self::ISO => $date->format('Y-m-d'),\n            self::EUROPEAN => $date->format('d/m/Y'),\n            self::AMERICAN => $date->format('m/d/Y'),\n        };\n    }\n\n    /**\n     * @return array<string, array{value: string, label: string, description: string}>\n     */\n    public static function toOptions(bool $withTime = false): array\n    {\n        $options = [];\n\n        foreach (self::cases() as $case) {\n            $options[$case->value] = [\n                'value' => $case->value,\n                'label' => $case->getLabel(),\n                'description' => implode(', ', $case->getExamples($withTime)),\n            ];\n        }\n\n        return $options;\n    }\n\n    /**\n     * Parse a date string into a Carbon instance.\n     *\n     * Attempts multiple format variations to handle real-world CSV data.\n     */\n    public function parse(string $value, bool $withTime = false): ?Carbon\n    {\n        $value = trim($value);\n\n        if ($value === '') {\n            return null;\n        }\n\n        foreach ($this->getParseFormats($withTime) as $format) {\n            try {\n                $date = Date::createFromFormat($format, $value);\n\n                if ($date instanceof Carbon) {\n                    return $date;\n                }\n            } catch (\\Exception) {\n                continue;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Format a Carbon instance for use in HTML date/datetime-local input.\n     */\n    public function toPickerValue(Carbon $date, bool $withTime = false): string\n    {\n        return $date->format($withTime ? 'Y-m-d\\TH:i' : 'Y-m-d');\n    }\n\n    /**\n     * Get the parse formats to attempt for this date format.\n     *\n     * @return array<string>\n     */\n    private function getParseFormats(bool $withTime): array\n    {\n        if ($withTime) {\n            return match ($this) {\n                self::ISO => [\n                    'Y-m-d H:i:s',\n                    'Y-m-d\\TH:i:s',\n                    'Y-m-d\\TH:i',\n                    'Y-m-d H:i',\n                ],\n                self::EUROPEAN => [\n                    'd/m/Y H:i:s',\n                    'd-m-Y H:i:s',\n                    'd.m.Y H:i:s',\n                    'j/n/Y H:i:s',\n                    'd/m/Y H:i',\n                    'd-m-Y H:i',\n                    'd.m.Y H:i',\n                    'j/n/Y H:i',\n                    'H:i:s d/m/Y',\n                    'H:i:s d-m-Y',\n                    'H:i d/m/Y',\n                    'H:i d-m-Y',\n                ],\n                self::AMERICAN => [\n                    'm/d/Y H:i:s',\n                    'm-d-Y H:i:s',\n                    'n/j/Y H:i:s',\n                    'm/d/Y H:i',\n                    'm-d-Y H:i',\n                    'n/j/Y H:i',\n                    'H:i:s m/d/Y',\n                    'H:i:s m-d-Y',\n                    'H:i m/d/Y',\n                    'H:i m-d-Y',\n                ],\n            };\n        }\n\n        return match ($this) {\n            self::ISO => [\n                'Y-m-d',\n            ],\n            self::EUROPEAN => [\n                'd/m/Y',\n                'd-m-Y',\n                'd.m.Y',\n                'j/n/Y',\n                'j-n-Y',\n                'j.n.Y',\n            ],\n            self::AMERICAN => [\n                'm/d/Y',\n                'm-d-Y',\n                'n/j/Y',\n                'n-j-Y',\n            ],\n        };\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/EntityLinkSource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\n/**\n * Defines the source of an entity link definition.\n *\n * EntityLinks can come from two sources:\n * - Relationship: Hardcoded relationship definitions in importers\n * - CustomField: Record-type custom fields from the database\n */\nenum EntityLinkSource: string\n{\n    case Relationship = 'relationship';\n    case CustomField = 'custom_field';\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/EntityLinkStorage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\n/**\n * Defines how an entity link is stored in the database.\n *\n * Different link types require different storage strategies:\n * - ForeignKey: Direct FK column (e.g., company_id)\n * - MorphToMany: Junction table with polymorphic relationship\n * - CustomFieldValue: Stored in custom_field_values table\n */\nenum EntityLinkStorage: string\n{\n    case ForeignKey = 'foreign_key';\n    case MorphToMany = 'morph_to_many';\n    case CustomFieldValue = 'custom_field_value';\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/ImportEntityType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\nuse Relaticle\\ImportWizard\\Importers\\CompanyImporter;\nuse Relaticle\\ImportWizard\\Importers\\NoteImporter;\nuse Relaticle\\ImportWizard\\Importers\\OpportunityImporter;\nuse Relaticle\\ImportWizard\\Importers\\PeopleImporter;\nuse Relaticle\\ImportWizard\\Importers\\TaskImporter;\n\nenum ImportEntityType: string\n{\n    case Company = 'company';\n    case People = 'people';\n    case Opportunity = 'opportunity';\n    case Task = 'task';\n    case Note = 'note';\n\n    public function label(): string\n    {\n        return match ($this) {\n            self::Company => 'Companies',\n            self::People => 'People',\n            self::Opportunity => 'Opportunities',\n            self::Task => 'Tasks',\n            self::Note => 'Notes',\n        };\n    }\n\n    public function singular(): string\n    {\n        return match ($this) {\n            self::Company => 'Company',\n            self::People => 'Person',\n            self::Opportunity => 'Opportunity',\n            self::Task => 'Task',\n            self::Note => 'Note',\n        };\n    }\n\n    /**\n     * Get the importer class for this entity type.\n     *\n     * @return class-string<BaseImporter>\n     */\n    public function importerClass(): string\n    {\n        return match ($this) {\n            self::Company => CompanyImporter::class,\n            self::People => PeopleImporter::class,\n            self::Opportunity => OpportunityImporter::class,\n            self::Task => TaskImporter::class,\n            self::Note => NoteImporter::class,\n        };\n    }\n\n    public function icon(): string\n    {\n        return match ($this) {\n            self::Company => 'heroicon-o-building-office',\n            self::People => 'heroicon-o-users',\n            self::Opportunity => 'heroicon-o-currency-dollar',\n            self::Task => 'heroicon-o-clipboard-document-check',\n            self::Note => 'heroicon-o-document-text',\n        };\n    }\n\n    public function importer(string $teamId): BaseImporter\n    {\n        $class = $this->importerClass();\n\n        return new $class($teamId);\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/ImportStatus.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nenum ImportStatus: string\n{\n    case Uploading = 'uploading';\n    case Mapping = 'mapping';\n    case Reviewing = 'reviewing';\n    case Previewing = 'previewing';\n    case Importing = 'importing';\n    case Completed = 'completed';\n    case Failed = 'failed';\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/MatchBehavior.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nenum MatchBehavior: string\n{\n    case MatchOnly = 'match_only';\n    case MatchOrCreate = 'match_or_create';\n    case Create = 'create';\n\n    public function description(): string\n    {\n        return match ($this) {\n            self::MatchOnly => 'Only update existing records. Skip if not found.',\n            self::MatchOrCreate => 'Find existing record or create new if not found.',\n            self::Create => 'Always create a new record (no lookup).',\n        };\n    }\n\n    public function performsLookup(): bool\n    {\n        return $this !== self::Create;\n    }\n\n    public function createsOnNoMatch(): bool\n    {\n        return $this === self::MatchOrCreate || $this === self::Create;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/NumberFormat.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nuse Filament\\Support\\Contracts\\HasLabel;\n\n/**\n * Decimal separator format for CSV import parsing.\n *\n * only asks about decimal separator,\n * thousands separators are stripped automatically.\n */\nenum NumberFormat: string implements HasLabel\n{\n    case POINT = 'point';\n    case COMMA = 'comma';\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::POINT => 'Point',\n            self::COMMA => 'Comma',\n        };\n    }\n\n    /**\n     * Get example pattern for UI display\n     */\n    public function getExample(): string\n    {\n        return match ($this) {\n            self::POINT => '1,000.00',\n            self::COMMA => '1.000,00',\n        };\n    }\n\n    /**\n     * Parse a string value into a float.\n     *\n     * Strips non-numeric characters except the decimal separator,\n     * then normalizes to PHP float format.\n     */\n    public function parse(string $value): ?float\n    {\n        $value = trim($value);\n\n        if ($value === '') {\n            return null;\n        }\n\n        $decimalSeparator = match ($this) {\n            self::POINT => '.',\n            self::COMMA => ',',\n        };\n\n        $otherSeparator = match ($this) {\n            self::POINT => ',',\n            self::COMMA => '.',\n        };\n\n        $value = str_replace(' ', '', $value);\n        $value = str_replace($otherSeparator, '', $value);\n\n        if ($decimalSeparator === ',') {\n            $value = str_replace(',', '.', $value);\n        }\n\n        if (! is_numeric($value)) {\n            return null;\n        }\n\n        return (float) $value;\n    }\n\n    /**\n     * Format a float value for display.\n     */\n    public function format(float $value, int $decimals = 2): string\n    {\n        return match ($this) {\n            self::POINT => number_format($value, $decimals, '.', ''),\n            self::COMMA => number_format($value, $decimals, ',', ''),\n        };\n    }\n\n    /**\n     * Get select options for UI display.\n     *\n     * @return array<string, array{value: string, label: string, description: string}>\n     */\n    public static function toOptions(): array\n    {\n        $options = [];\n\n        foreach (self::cases() as $case) {\n            $options[$case->value] = [\n                'value' => $case->value,\n                'label' => $case->getLabel(),\n                'description' => $case->getExample(),\n            ];\n        }\n\n        return $options;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/ReviewFilter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nuse Filament\\Support\\Contracts\\HasIcon;\nuse Filament\\Support\\Contracts\\HasLabel;\n\nenum ReviewFilter: string implements HasIcon, HasLabel\n{\n    case All = 'all';\n    case NeedsReview = 'needs_review';\n    case Modified = 'modified';\n    case Skipped = 'skipped';\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::All => 'All',\n            self::NeedsReview => 'Needs Review',\n            self::Modified => 'Modified',\n            self::Skipped => 'Skipped',\n        };\n    }\n\n    public function getIcon(): ?string\n    {\n        return match ($this) {\n            self::NeedsReview => 'heroicon-o-exclamation-triangle',\n            default => null,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/RowMatchAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nenum RowMatchAction: string\n{\n    case Create = 'create';\n    case Update = 'update';\n    case Skip = 'skip';\n\n    public function icon(): string\n    {\n        return match ($this) {\n            self::Create => 'heroicon-m-plus',\n            self::Update => 'heroicon-m-arrow-path',\n            self::Skip => 'heroicon-m-minus',\n        };\n    }\n\n    public function color(): string\n    {\n        return match ($this) {\n            self::Create => 'text-success-500',\n            self::Update => 'text-primary-500',\n            self::Skip => 'text-gray-400',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/SortDirection.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nuse Filament\\Support\\Contracts\\HasIcon;\nuse Filament\\Support\\Contracts\\HasLabel;\n\nenum SortDirection: string implements HasIcon, HasLabel\n{\n    case Desc = 'desc';\n    case Asc = 'asc';\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::Desc => 'Descending',\n            self::Asc => 'Ascending',\n        };\n    }\n\n    public function getIcon(): string\n    {\n        return match ($this) {\n            self::Desc => 'heroicon-o-bars-arrow-down',\n            self::Asc => 'heroicon-o-bars-arrow-up',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Enums/SortField.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Enums;\n\nuse Filament\\Support\\Contracts\\HasIcon;\nuse Filament\\Support\\Contracts\\HasLabel;\n\nenum SortField: string implements HasIcon, HasLabel\n{\n    case Count = 'count';\n    case Value = 'raw_value';\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::Count => 'Row count',\n            self::Value => 'Value',\n        };\n    }\n\n    public function getIcon(): string\n    {\n        return match ($this) {\n            self::Count => 'heroicon-o-hashtag',\n            self::Value => 'heroicon-o-language',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportCompanies.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse App\\Filament\\Resources\\CompanyResource;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\n\n/**\n * Import page for companies using the new import wizard.\n */\nfinal class ImportCompanies extends ImportPage\n{\n    protected static ?string $slug = 'companies/import';\n\n    public static function getEntityType(): ImportEntityType\n    {\n        return ImportEntityType::Company;\n    }\n\n    public static function getResourceClass(): string\n    {\n        return CompanyResource::class;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportHistory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse BackedEnum;\nuse Filament\\Actions\\Action;\nuse Filament\\Pages\\Page;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Concerns\\InteractsWithTable;\nuse Filament\\Tables\\Contracts\\HasTable;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Support\\Facades\\URL;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\n\nfinal class ImportHistory extends Page implements HasTable\n{\n    use InteractsWithTable;\n\n    protected string $view = 'import-wizard-new::filament.pages.import-history';\n\n    protected static string|null|BackedEnum $navigationIcon = Heroicon::OutlinedClock;\n\n    protected static ?string $navigationLabel = 'Import History';\n\n    protected static ?string $title = 'Import History';\n\n    protected static ?int $navigationSort = 100;\n\n    protected static bool $shouldRegisterNavigation = false;\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->query(\n                Import::query()\n                    ->forTeam((string) filament()->getTenant()?->getKey())\n                    ->whereIn('status', [ImportStatus::Completed, ImportStatus::Failed, ImportStatus::Importing])\n                    ->latest()\n            )\n            ->columns([\n                TextColumn::make('entity_type')\n                    ->label('Type')\n                    ->badge()\n                    ->formatStateUsing(fn (ImportEntityType $state): string => $state->label())\n                    ->icon(fn (ImportEntityType $state): string => $state->icon()),\n\n                TextColumn::make('file_name')\n                    ->label('File')\n                    ->searchable()\n                    ->limit(30),\n\n                TextColumn::make('status')\n                    ->badge()\n                    ->color(fn (ImportStatus $state): string => match ($state) {\n                        ImportStatus::Completed => 'success',\n                        ImportStatus::Failed => 'danger',\n                        ImportStatus::Importing => 'warning',\n                        default => 'gray',\n                    }),\n\n                TextColumn::make('total_rows')\n                    ->label('Total')\n                    ->numeric(),\n\n                TextColumn::make('created_rows')\n                    ->label('Created')\n                    ->numeric()\n                    ->color('success'),\n\n                TextColumn::make('updated_rows')\n                    ->label('Updated')\n                    ->numeric()\n                    ->color('info'),\n\n                TextColumn::make('skipped_rows')\n                    ->label('Skipped')\n                    ->numeric()\n                    ->color('gray'),\n\n                TextColumn::make('failed_rows')\n                    ->label('Failed')\n                    ->numeric()\n                    ->color('danger'),\n\n                TextColumn::make('user.name')\n                    ->label('User'),\n\n                TextColumn::make('created_at')\n                    ->label('Date')\n                    ->since()\n                    ->sortable(),\n            ])\n            ->filters([\n                SelectFilter::make('entity_type')\n                    ->options(ImportEntityType::class),\n\n                SelectFilter::make('status')\n                    ->options([\n                        ImportStatus::Completed->value => 'Completed',\n                        ImportStatus::Failed->value => 'Failed',\n                        ImportStatus::Importing->value => 'Importing',\n                    ]),\n            ])\n            ->actions([\n                Action::make('downloadFailedRows')\n                    ->label('Failed Rows')\n                    ->icon(Heroicon::OutlinedArrowDownTray)\n                    ->color('danger')\n                    ->url(fn (Import $record): string => URL::temporarySignedRoute(\n                        'import-history.failed-rows.download',\n                        now()->addHour(),\n                        ['import' => $record],\n                    ), shouldOpenInNewTab: true)\n                    ->visible(fn (Import $record): bool => $record->failedRows()->exists()),\n            ])\n            ->defaultSort('created_at', 'desc')\n            ->poll('10s');\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportNotes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse App\\Filament\\Resources\\NoteResource;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\n\nfinal class ImportNotes extends ImportPage\n{\n    protected static ?string $slug = 'notes/import';\n\n    public static function getEntityType(): ImportEntityType\n    {\n        return ImportEntityType::Note;\n    }\n\n    public static function getResourceClass(): string\n    {\n        return NoteResource::class;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportOpportunities.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse App\\Filament\\Resources\\OpportunityResource;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\n\nfinal class ImportOpportunities extends ImportPage\n{\n    protected static ?string $slug = 'opportunities/import';\n\n    public static function getEntityType(): ImportEntityType\n    {\n        return ImportEntityType::Opportunity;\n    }\n\n    public static function getResourceClass(): string\n    {\n        return OpportunityResource::class;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportPage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse BackedEnum;\nuse Filament\\Pages\\Page;\nuse Override;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse UnitEnum;\n\n/**\n * Base import page that embeds the new import wizard for a specific entity type.\n */\nabstract class ImportPage extends Page\n{\n    protected string $view = 'import-wizard-new::filament.pages.import-page';\n\n    protected static string|null|BackedEnum $navigationIcon = 'heroicon-o-arrow-up-tray';\n\n    protected static string|null|UnitEnum $navigationGroup = null;\n\n    protected static bool $shouldRegisterNavigation = false;\n\n    /**\n     * Check if the user can access the import page.\n     *\n     * Delegates to the resource's canCreate authorization if available.\n     */\n    public static function canAccess(): bool\n    {\n        $resourceClass = static::getResourceClass();\n\n        if (method_exists($resourceClass, 'canCreate')) {\n            return $resourceClass::canCreate();\n        }\n\n        return true;\n    }\n\n    /**\n     * Get the entity type for this import page.\n     */\n    abstract public static function getEntityType(): ImportEntityType;\n\n    /**\n     * Get the resource class to redirect back to after import.\n     *\n     * @return class-string\n     */\n    abstract public static function getResourceClass(): string;\n\n    #[Override]\n    public function getTitle(): string\n    {\n        return 'Import '.static::getEntityType()->label();\n    }\n\n    #[Override]\n    public function getSubheading(): string\n    {\n        return 'Import '.strtolower(static::getEntityType()->label()).' from a CSV file';\n    }\n\n    /**\n     * Get breadcrumbs for navigation context.\n     *\n     * @return array<string, string>\n     */\n    public function getBreadcrumbs(): array\n    {\n        $resourceClass = static::getResourceClass();\n\n        $breadcrumbs = [];\n\n        if (method_exists($resourceClass, 'getUrl')) {\n            $breadcrumbs[$resourceClass::getUrl()] = static::getEntityType()->label();\n        }\n\n        $breadcrumbs[] = 'Import';\n\n        return $breadcrumbs;\n    }\n\n    /**\n     * Get the URL to redirect to after import completion.\n     */\n    public function getReturnUrl(): string\n    {\n        $resourceClass = static::getResourceClass();\n\n        return $resourceClass::getUrl();\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse App\\Filament\\Resources\\PeopleResource;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\n\nfinal class ImportPeople extends ImportPage\n{\n    protected static ?string $slug = 'people/import';\n\n    public static function getEntityType(): ImportEntityType\n    {\n        return ImportEntityType::People;\n    }\n\n    public static function getResourceClass(): string\n    {\n        return PeopleResource::class;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Filament/Pages/ImportTasks.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Filament\\Pages;\n\nuse App\\Filament\\Resources\\TaskResource;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\n\n/**\n * Import page for tasks using the new import wizard.\n */\nfinal class ImportTasks extends ImportPage\n{\n    protected static ?string $slug = 'tasks/import';\n\n    public static function getEntityType(): ImportEntityType\n    {\n        return ImportEntityType::Task;\n    }\n\n    public static function getResourceClass(): string\n    {\n        return TaskResource::class;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Http/Controllers/DownloadFailedRowsController.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Relaticle\\ImportWizard\\Models\\FailedImportRow;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Symfony\\Component\\HttpFoundation\\StreamedResponse;\n\nfinal class DownloadFailedRowsController\n{\n    public function __invoke(Request $request, Import $import): StreamedResponse\n    {\n        /** @var User $user */\n        $user = $request->user();\n\n        abort_unless(\n            (string) $import->team_id === (string) $user->currentTeam?->getKey(),\n            403,\n        );\n\n        $columnHeaders = $import->headers;\n        $csvHeaders = [...$columnHeaders, 'Import Error'];\n\n        return response()->streamDownload(function () use ($import, $columnHeaders, $csvHeaders): void {\n            $handle = fopen('php://output', 'w');\n\n            if ($handle === false) {\n                return;\n            }\n\n            fwrite($handle, \"\\xEF\\xBB\\xBF\");\n            fputcsv($handle, $csvHeaders, escape: '\\\\');\n\n            $import->failedRows()\n                ->lazyById(100)\n                ->each(function (FailedImportRow $row) use ($handle, $columnHeaders): void {\n                    $data = $row->data;\n                    $values = array_map(fn (string $header): string => $data[$header] ?? '', $columnHeaders);\n                    $values[] = $row->validation_error ?? 'System error';\n                    fputcsv($handle, $values, escape: '\\\\');\n                });\n\n            fclose($handle);\n        }, \"failed-rows-{$import->id}.csv\", ['Content-Type' => 'text/csv']);\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/ImportWizardNewServiceProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Support\\ServiceProvider;\nuse Livewire\\Livewire;\nuse Relaticle\\ImportWizard\\Commands\\CleanupImportsCommand;\nuse Relaticle\\ImportWizard\\Livewire\\ImportWizard;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\MappingStep;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\PreviewStep;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\ReviewStep;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\UploadStep;\n\nfinal class ImportWizardNewServiceProvider extends ServiceProvider\n{\n    public function register(): void\n    {\n        $this->mergeConfigFrom(__DIR__.'/../config/import-wizard.php', 'import-wizard-new');\n    }\n\n    public function boot(): void\n    {\n        $this->registerCommands();\n        $this->registerRoutes();\n        $this->registerViews();\n        $this->registerTranslations();\n        $this->registerLivewireComponents();\n    }\n\n    private function registerCommands(): void\n    {\n        $this->commands([\n            CleanupImportsCommand::class,\n        ]);\n    }\n\n    private function registerRoutes(): void\n    {\n        Route::middleware(['web', 'auth'])\n            ->group(function (): void {\n                $this->loadRoutesFrom(__DIR__.'/../routes/web.php');\n            });\n    }\n\n    private function registerViews(): void\n    {\n        $this->loadViewsFrom(__DIR__.'/../resources/views', 'import-wizard-new');\n    }\n\n    private function registerTranslations(): void\n    {\n        $this->loadTranslationsFrom(__DIR__.'/../resources/lang', 'import-wizard-new');\n    }\n\n    private function registerLivewireComponents(): void\n    {\n        Livewire::component('import-wizard-new.wizard', ImportWizard::class);\n        Livewire::component('import-wizard-new.steps.upload', UploadStep::class);\n        Livewire::component('import-wizard-new.steps.mapping', MappingStep::class);\n        Livewire::component('import-wizard-new.steps.review', ReviewStep::class);\n        Livewire::component('import-wizard-new.steps.preview', PreviewStep::class);\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/BaseImporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\CustomField;\nuse App\\Models\\Team;\nuse Illuminate\\Database\\Eloquent\\Collection as EloquentCollection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\nuse Relaticle\\CustomFields\\Models\\CustomFieldOption;\nuse Relaticle\\CustomFields\\Services\\ValidationService;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Importers\\Contracts\\ImporterContract;\n\n/**\n * Base class for entity importers.\n *\n * Provides shared functionality and optional helper methods for common operations.\n * Each concrete importer can use these helpers or implement custom logic.\n */\nabstract class BaseImporter implements ImporterContract\n{\n    private ?ImportFieldCollection $allFieldsCache = null;\n\n    /** @var array<string, EntityLink>|null */\n    private ?array $entityLinksCache = null;\n\n    private ?Team $teamCache = null;\n\n    public function __construct(\n        protected readonly string $teamId,\n    ) {}\n\n    public function getTeamId(): string\n    {\n        return $this->teamId;\n    }\n\n    public function getTeam(): ?Team\n    {\n        return $this->teamCache ??= Team::query()->find($this->teamId);\n    }\n\n    /**\n     * Get all fields including custom fields, excluding Record-type fields.\n     *\n     * Record-type custom fields are excluded because they appear in entityLinks() instead.\n     * Results are cached for the lifetime of this importer instance.\n     */\n    public function allFields(): ImportFieldCollection\n    {\n        return $this->allFieldsCache ??= $this->fields()->merge($this->customFields());\n    }\n\n    /**\n     * Get all entity links (hardcoded relationships + Record-type custom fields).\n     *\n     * This unifies relationship definitions and Record custom fields into a single\n     * collection for consistent handling in the UI and import process.\n     * Results are cached for the lifetime of this importer instance.\n     *\n     * @return array<string, EntityLink>\n     */\n    public function entityLinks(): array\n    {\n        if ($this->entityLinksCache !== null) {\n            return $this->entityLinksCache;\n        }\n\n        $links = $this->defineEntityLinks();\n\n        foreach ($this->getRecordCustomFields() as $customField) {\n            $link = EntityLink::fromCustomField($customField);\n            $links[$link->key] = $link;\n        }\n\n        return $this->entityLinksCache = $links;\n    }\n\n    /**\n     * Define hardcoded entity links for this importer.\n     *\n     * Override in child classes to define entity-specific relationships.\n     *\n     * @return array<string, EntityLink>\n     */\n    protected function defineEntityLinks(): array\n    {\n        return [];\n    }\n\n    /** @return EloquentCollection<int, \\Relaticle\\CustomFields\\Models\\CustomField> */\n    protected function getRecordCustomFields(): EloquentCollection\n    {\n        return CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->teamId)\n            ->where('entity_type', $this->entityName())\n            ->forType('record')\n            ->active()\n            ->orderBy('sort_order')\n            ->get();\n    }\n\n    /**\n     * Get fields that can be used to match imported rows to existing records.\n     *\n     * Override in child classes to specify entity-specific matching fields.\n     *\n     * @return array<MatchableField>\n     */\n    public function matchableFields(): array\n    {\n        return [\n            MatchableField::id(),\n        ];\n    }\n\n    /**\n     * Prepare data for saving to the database.\n     *\n     * Base implementation strips the ID field and passes through other data.\n     * Override this to add custom data transformations.\n     *\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  &$context\n     * @return array<string, mixed>\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array\n    {\n        unset($data['id']);\n\n        return $data;\n    }\n\n    /**\n     * Perform post-save operations.\n     *\n     * Base implementation does nothing. Override for relationship syncing, etc.\n     *\n     * @param  array<string, mixed>  $context\n     */\n    public function afterSave(Model $record, array $context): void\n    {\n        $this->saveCustomFieldValues($record);\n    }\n\n    /**\n     * Get custom fields for this entity as ImportField objects.\n     *\n     * Excludes Record-type custom fields since they appear in entityLinks() instead.\n     * Eager loads options for choice fields.\n     */\n    protected function customFields(): ImportFieldCollection\n    {\n        $customFields = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->teamId)\n            ->where('entity_type', $this->entityName())\n            ->where('type', '!=', 'record')\n            ->active()\n            ->with('options')\n            ->orderBy('sort_order')\n            ->get();\n\n        $validationService = resolve(ValidationService::class);\n\n        $fields = $customFields->map(function (CustomField $customField) use ($validationService): ImportField {\n            // For multi-value arbitrary fields (email, phone), use item-level rules\n            // since CSV values are strings that may be comma-separated\n            $isMultiChoiceArbitrary = $customField->typeData->dataType->isMultiChoiceField()\n                && $customField->typeData->acceptsArbitraryValues;\n\n            $rules = $isMultiChoiceArbitrary\n                ? $validationService->getItemValidationRules($customField)\n                : $validationService->getValidationRules($customField);\n\n            // Filter out object rules (like UniqueCustomFieldValue) for import preview\n            $importRules = array_filter($rules, is_string(...));\n\n            // Load options for real choice fields (not email/phone which accept arbitrary values)\n            $options = $this->shouldLoadOptions($customField)\n                ? $customField->options->map(fn (CustomFieldOption $o): array => ['label' => $o->name, 'value' => $o->name])->all()\n                : null;\n\n            return ImportField::make(\"custom_fields_{$customField->code}\")\n                ->label($customField->name)\n                ->guess($this->buildCustomFieldGuesses($customField->code, $customField->name))\n                ->required($validationService->isRequired($customField))\n                ->rules($importRules)\n                ->asCustomField()\n                ->type($customField->typeData->dataType)\n                ->icon($customField->typeData->icon)\n                ->sortOrder($customField->sort_order)\n                ->acceptsArbitraryValues($customField->typeData->acceptsArbitraryValues)\n                ->options($options);\n        });\n\n        return new ImportFieldCollection($fields->all());\n    }\n\n    private function shouldLoadOptions(CustomField $customField): bool\n    {\n        return $customField->typeData->dataType->isChoiceField()\n            && ! $customField->typeData->acceptsArbitraryValues;\n    }\n\n    /**\n     * @return array<string>\n     */\n    private function buildCustomFieldGuesses(string $code, string $name): array\n    {\n        $guesses = [$code, $name];\n\n        $singularCode = Str::singular($code);\n        if ($singularCode !== $code) {\n            $guesses[] = $singularCode;\n        }\n\n        $singularName = Str::singular($name);\n        if ($singularName !== $name) {\n            $guesses[] = $singularName;\n        }\n\n        return $guesses;\n    }\n\n    /**\n     * Initialize a new record with team, creator, and source.\n     *\n     * Call this in prepareForSave when the record is new.\n     *\n     * @param  array<string, mixed>  $data\n     * @return array<string, mixed>\n     */\n    protected function initializeNewRecordData(array $data, ?string $creatorId = null): array\n    {\n        $data['team_id'] = $this->teamId;\n        $data['creator_id'] = $creatorId;\n        $data['creation_source'] = CreationSource::IMPORT;\n\n        return $data;\n    }\n\n    protected function saveCustomFieldValues(Model $record): void\n    {\n        $team = $this->getTeam();\n\n        if (! $team instanceof Team) {\n            return;\n        }\n\n        CustomFields::importer()->forModel($record)->saveValues($team);\n    }\n\n    /**\n     * @param  array<string>  $mappedFields\n     */\n    public function getMatchFieldForMappedColumns(array $mappedFields): ?MatchableField\n    {\n        return collect($this->matchableFields())\n            ->sortByDesc(fn (MatchableField $field): int => $field->priority)\n            ->first(fn (MatchableField $field): bool => in_array($field->field, $mappedFields, true));\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/CompanyImporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers;\n\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\n\nfinal class CompanyImporter extends BaseImporter\n{\n    public function modelClass(): string\n    {\n        return Company::class;\n    }\n\n    public function entityName(): string\n    {\n        return 'company';\n    }\n\n    public function fields(): ImportFieldCollection\n    {\n        return new ImportFieldCollection([\n            ImportField::id(),\n\n            ImportField::make('name')\n                ->label('Name')\n                ->required()\n                ->rules(['required', 'string', 'max:255'])\n                ->guess([\n                    'name', 'company_name', 'company', 'organization', 'account', 'account_name',\n                    'company name', 'associated company', 'company domain name',\n                    'account name', 'parent account', 'billing name',\n                    'business', 'business_name', 'org', 'org_name', 'organisation',\n                    'firm', 'client', 'customer', 'customer_name', 'vendor', 'vendor_name',\n                ])\n                ->example('Acme Corporation')\n                ->icon('heroicon-o-building-office-2'),\n        ]);\n    }\n\n    /** @return array<string, EntityLink> */\n    protected function defineEntityLinks(): array\n    {\n        return [\n            'account_owner' => EntityLink::belongsTo('account_owner', User::class)\n                ->matchableFields([\n                    MatchableField::id(),\n                    MatchableField::email('email', MatchBehavior::MatchOnly),\n                ])\n                ->foreignKey('account_owner_id')\n                ->label('Account Owner')\n                ->guess([\n                    'account_owner', 'owner_email', 'owner', 'assigned_to', 'account_manager',\n                    'owner email', 'sales rep', 'sales_rep', 'rep', 'salesperson', 'sales_owner',\n                    'account_rep', 'assigned_user', 'manager_email', 'contact_owner',\n                    'account_owner_email', 'owner_id',\n                ]),\n        ];\n    }\n\n    /** @return array<MatchableField> */\n    public function matchableFields(): array\n    {\n        return [\n            MatchableField::id(),\n            MatchableField::domain('custom_fields_domains'),\n        ];\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  &$context\n     * @return array<string, mixed>\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array\n    {\n        $data = parent::prepareForSave($data, $existing, $context);\n\n        if (! $existing instanceof Model) {\n            return $this->initializeNewRecordData($data, $context['creator_id'] ?? null);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/Contracts/ImporterContract.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers\\Contracts;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\n\n/**\n * Contract for entity importers.\n *\n * Importers are the single source of truth for import configuration.\n * They define fields, entity links, matching strategies, and processing logic.\n */\ninterface ImporterContract\n{\n    /**\n     * Get the team ID for this import.\n     */\n    public function getTeamId(): string;\n\n    /**\n     * Get the fully-qualified model class name.\n     *\n     * @return class-string<Model>\n     */\n    public function modelClass(): string;\n\n    /**\n     * Get the entity name identifier (e.g., 'company', 'people').\n     */\n    public function entityName(): string;\n\n    /**\n     * Get the standard fields for this entity.\n     */\n    public function fields(): ImportFieldCollection;\n\n    /**\n     * Get all fields including custom fields.\n     */\n    public function allFields(): ImportFieldCollection;\n\n    /**\n     * Get entity links (relationships and Record custom fields) for this entity.\n     *\n     * @return array<string, EntityLink>\n     */\n    public function entityLinks(): array;\n\n    /**\n     * Get fields that can be used to match imported rows to existing records.\n     *\n     * @return array<MatchableField>\n     */\n    public function matchableFields(): array;\n\n    /**\n     * Get the highest priority matchable field that is mapped.\n     *\n     * @param  array<string>  $mappedFields  List of mapped field keys\n     */\n    public function getMatchFieldForMappedColumns(array $mappedFields): ?MatchableField;\n\n    /**\n     * Prepare data for saving to the database.\n     *\n     * This method transforms the mapped CSV data into model-ready data.\n     * Override this to handle special cases like entity link resolution.\n     *\n     * @param  array<string, mixed>  $data  The mapped row data\n     * @param  Model|null  $existing  The existing record if updating\n     * @param  array<string, mixed>  &$context  Additional context (e.g., match field info), passed by reference\n     * @return array<string, mixed> The prepared data ready for fill()\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array;\n\n    /**\n     * Perform post-save operations.\n     *\n     * Called after the record is saved. Use for entity link syncing,\n     * polymorphic links, and other operations that require the saved record.\n     *\n     * @param  Model  $record  The saved record\n     * @param  array<string, mixed>  $context  Additional context from prepareForSave\n     */\n    public function afterSave(Model $record, array $context): void;\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/NoteImporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers;\n\nuse App\\Models\\Note;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\n\n/**\n * Importer for Note entities.\n *\n * Notes have polymorphic relationships with companies, people, and opportunities.\n * Notes cannot be matched to existing records (always create new).\n */\nfinal class NoteImporter extends BaseImporter\n{\n    public function modelClass(): string\n    {\n        return Note::class;\n    }\n\n    public function entityName(): string\n    {\n        return 'note';\n    }\n\n    public function fields(): ImportFieldCollection\n    {\n        return new ImportFieldCollection([\n            ImportField::id(),\n\n            ImportField::make('title')\n                ->label('Title')\n                ->required()\n                ->rules(['required', 'string', 'max:255'])\n                ->guess([\n                    'title', 'subject', 'note_title', 'heading',\n                    'note subject', 'summary',\n                ])\n                ->example('Meeting Notes')\n                ->icon('heroicon-o-pencil-square'),\n        ]);\n    }\n\n    /**\n     * @return array<string, EntityLink>\n     */\n    protected function defineEntityLinks(): array\n    {\n        return [\n            'companies' => EntityLink::polymorphicCompanies(),\n            'people' => EntityLink::polymorphicPeople(),\n            'opportunities' => EntityLink::polymorphicOpportunities(),\n        ];\n    }\n\n    /**\n     * Notes cannot be matched - always create new.\n     *\n     * @return array<MatchableField>\n     */\n    public function matchableFields(): array\n    {\n        return [];\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  &$context\n     * @return array<string, mixed>\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array\n    {\n        $data = parent::prepareForSave($data, $existing, $context);\n\n        if (! $existing instanceof Model) {\n            return $this->initializeNewRecordData($data, $context['creator_id'] ?? null);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/OpportunityImporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers;\n\nuse App\\Models\\Opportunity;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\n\n/**\n * Importer for Opportunity entities.\n *\n * Opportunities are linked to companies and contacts.\n * They can only be matched by ID (no attribute-based matching).\n */\nfinal class OpportunityImporter extends BaseImporter\n{\n    public function modelClass(): string\n    {\n        return Opportunity::class;\n    }\n\n    public function entityName(): string\n    {\n        return 'opportunity';\n    }\n\n    public function fields(): ImportFieldCollection\n    {\n        return new ImportFieldCollection([\n            ImportField::id(),\n\n            ImportField::make('name')\n                ->label('Name')\n                ->required()\n                ->rules(['required', 'string', 'max:255'])\n                ->guess([\n                    'name', 'opportunity_name', 'deal', 'deal_name',\n                    'opportunity', 'title', 'subject',\n                    'deal title', 'opportunity title', 'pipeline',\n                ])\n                ->example('Enterprise License Deal')\n                ->icon('heroicon-o-currency-dollar'),\n        ]);\n    }\n\n    /**\n     * @return array<string, EntityLink>\n     */\n    protected function defineEntityLinks(): array\n    {\n        return [\n            'company' => EntityLink::company(),\n            'contact' => EntityLink::contact(),\n        ];\n    }\n\n    /**\n     * @return array<MatchableField>\n     */\n    public function matchableFields(): array\n    {\n        return [\n            MatchableField::id(),\n        ];\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  &$context\n     * @return array<string, mixed>\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array\n    {\n        $data = parent::prepareForSave($data, $existing, $context);\n\n        if (! $existing instanceof Model) {\n            return $this->initializeNewRecordData($data, $context['creator_id'] ?? null);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/PeopleImporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers;\n\nuse App\\Models\\People;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\n\n/**\n * Importer for People entities.\n *\n * People can be matched by email or phone, and linked to companies.\n */\nfinal class PeopleImporter extends BaseImporter\n{\n    public function modelClass(): string\n    {\n        return People::class;\n    }\n\n    public function entityName(): string\n    {\n        return 'people';\n    }\n\n    public function fields(): ImportFieldCollection\n    {\n        return new ImportFieldCollection([\n            ImportField::id(),\n\n            ImportField::make('name')\n                ->label('Name')\n                ->required()\n                ->rules(['required', 'string', 'max:255'])\n                ->guess([\n                    'name', 'full_name', 'person_name',\n                    'contact', 'contact_name', 'person', 'individual', 'member', 'employee',\n                    'full name', 'display_name', 'displayname',\n                    'contact name', 'lead name', 'prospect name',\n                ])\n                ->example('John Doe')\n                ->icon('heroicon-o-user'),\n        ]);\n    }\n\n    /**\n     * @return array<string, EntityLink>\n     */\n    protected function defineEntityLinks(): array\n    {\n        return [\n            'company' => EntityLink::company(),\n        ];\n    }\n\n    /**\n     * @return array<MatchableField>\n     */\n    public function matchableFields(): array\n    {\n        return [\n            MatchableField::id(),\n            MatchableField::email('custom_fields_emails'),\n            MatchableField::phone('custom_fields_phone_number'),\n        ];\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  &$context\n     * @return array<string, mixed>\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array\n    {\n        $data = parent::prepareForSave($data, $existing, $context);\n\n        if (! $existing instanceof Model) {\n            return $this->initializeNewRecordData($data, $context['creator_id'] ?? null);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Importers/TaskImporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Importers;\n\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\n\n/**\n * Importer for Task entities.\n *\n * Tasks have polymorphic relationships with companies, people, opportunities,\n * and assignees (users). They can only be matched by ID.\n */\nfinal class TaskImporter extends BaseImporter\n{\n    public function modelClass(): string\n    {\n        return Task::class;\n    }\n\n    public function entityName(): string\n    {\n        return 'task';\n    }\n\n    public function fields(): ImportFieldCollection\n    {\n        return new ImportFieldCollection([\n            ImportField::id(),\n\n            ImportField::make('title')\n                ->label('Title')\n                ->required()\n                ->rules(['required', 'string', 'max:255'])\n                ->guess([\n                    'title', 'task_title', 'name', 'subject', 'todo',\n                    'task', 'task name', 'action', 'action item',\n                    'to do', 'todo item', 'activity',\n                ])\n                ->example('Follow up with client')\n                ->icon('heroicon-o-check-circle'),\n        ]);\n    }\n\n    /**\n     * @return array<string, EntityLink>\n     */\n    protected function defineEntityLinks(): array\n    {\n        return [\n            'companies' => EntityLink::polymorphicCompanies(),\n            'people' => EntityLink::polymorphicPeople(),\n            'opportunities' => EntityLink::polymorphicOpportunities(),\n            'assignees' => EntityLink::morphToMany('assignees', User::class)\n                ->matchableFields([\n                    MatchableField::id(),\n                    MatchableField::email('email', MatchBehavior::MatchOnly),\n                ])\n                ->label('Assignee')\n                ->guess([\n                    'assignee', 'assigned_to', 'owner', 'assignee_email',\n                    'assigned_email', 'owner_email', 'responsible',\n                ]),\n        ];\n    }\n\n    /**\n     * @return array<MatchableField>\n     */\n    public function matchableFields(): array\n    {\n        return [\n            MatchableField::id(),\n        ];\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  &$context\n     * @return array<string, mixed>\n     */\n    public function prepareForSave(array $data, ?Model $existing, array &$context): array\n    {\n        $data = parent::prepareForSave($data, $existing, $context);\n\n        if (! $existing instanceof Model) {\n            return $this->initializeNewRecordData($data, $context['creator_id'] ?? null);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Jobs/ExecuteImportJob.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Jobs;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Filament\\Notifications\\Notification;\nuse Illuminate\\Bus\\Batchable;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\CustomFields\\CustomFields;\nuse Relaticle\\CustomFields\\Enums\\FieldDataType;\nuse Relaticle\\CustomFields\\Filament\\Integration\\Support\\Imports\\ImportDataStorage;\nuse Relaticle\\CustomFields\\Models\\CustomFieldOption;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\nuse Relaticle\\CustomFields\\Support\\SafeValueConverter;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Data\\RelationshipMatch;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\nuse Relaticle\\ImportWizard\\Enums\\EntityLinkStorage;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportRow;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkStorage\\EntityLinkStorageInterface;\n\nfinal class ExecuteImportJob implements ShouldQueue\n{\n    use Batchable;\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $timeout = 300;\n\n    public int $tries = 3;\n\n    /** @var list<int> */\n    public array $backoff = [10, 30];\n\n    private const string CUSTOM_FIELD_PREFIX = 'custom_fields_';\n\n    /** @var array<string, string> Dedup map for auto-created records: \"{entityLinkKey}:{name}\" => id */\n    private array $createdRecords = [];\n\n    /** @var array<string, string> Matchable value => record ID for intra-import dedup */\n    private array $matchableValueCache = [];\n\n    /** @var list<array{row: int, error: string, data?: array<string, mixed>}> */\n    private array $failedRows = [];\n\n    /** @var list<int> */\n    private array $processedRows = [];\n\n    /** @var list<int> Row numbers promoted from Create to Update by intra-import dedup */\n    private array $dedupedRows = [];\n\n    /** @var list<array<string, mixed>> */\n    private array $pendingCustomFieldValues = [];\n\n    public function __construct(\n        private readonly string $importId,\n        private readonly string $teamId,\n    ) {\n        $this->onQueue('imports');\n    }\n\n    public function handle(): void\n    {\n        $import = Import::query()->findOrFail($this->importId);\n\n        if ($import->team_id !== $this->teamId) {\n            return;\n        }\n\n        $store = ImportStore::load($this->importId);\n\n        if (! $store instanceof ImportStore) {\n            return;\n        }\n\n        $store->ensureProcessedColumn();\n\n        $importer = $import->getImporter();\n        $mappings = $import->columnMappings();\n\n        $results = [\n            'created' => $import->created_rows,\n            'updated' => $import->updated_rows,\n            'skipped' => $import->skipped_rows,\n            'failed' => $import->failed_rows,\n        ];\n        $allowedKeys = $this->allowedAttributeKeys($importer);\n        $customFieldDefs = $this->loadCustomFieldDefinitions($importer);\n        $fieldMappings = $mappings->filter(fn (ColumnData $col): bool => $col->isFieldMapping());\n        $customFieldFormatMap = $this->buildCustomFieldFormatMap($fieldMappings);\n\n        $matchField = $this->resolveMatchField($importer, $fieldMappings);\n        $matchSourceColumn = $matchField instanceof MatchableField\n            ? $this->findMatchSourceColumn($matchField, $fieldMappings)\n            : null;\n\n        $context = [\n            'team_id' => $this->teamId,\n            'creator_id' => $import->user_id,\n        ];\n\n        try {\n            $store->query()\n                ->where('processed', false)\n                ->orderBy('row_number')\n                ->chunkById(500, function (Collection $rows) use ($importer, $fieldMappings, $allowedKeys, $customFieldDefs, $customFieldFormatMap, $matchField, $matchSourceColumn, $context, &$results, $store, $import): void {\n                    $existingRecords = $this->preloadExistingRecords($rows, $importer);\n\n                    foreach ($rows as $row) {\n                        $this->processRow($row, $importer, $fieldMappings, $allowedKeys, $customFieldDefs, $customFieldFormatMap, $matchField, $matchSourceColumn, $context, $results, $existingRecords);\n                        $this->flushProcessedRows($store);\n                    }\n                    $this->flushCustomFieldValues();\n                    $this->flushFailedRows($import);\n                    $this->persistResults($import, $results);\n                });\n\n            $import->update([\n                'status' => ImportStatus::Completed,\n                'completed_at' => now(),\n                'created_rows' => $results['created'],\n                'updated_rows' => $results['updated'],\n                'skipped_rows' => $results['skipped'],\n                'failed_rows' => $results['failed'],\n            ]);\n\n            $this->notifyUser($import, $results);\n        } catch (\\Throwable $e) {\n            $this->flushFailedRows($import);\n            $this->persistResults($import, $results);\n            $import->update(['status' => ImportStatus::Failed]);\n\n            try {\n                $this->notifyUser($import, $results, failed: true);\n            } catch (\\Throwable) {\n            }\n\n            throw $e;\n        }\n    }\n\n    public function failed(\\Throwable $exception): void\n    {\n        $import = Import::query()->find($this->importId);\n\n        if ($import === null) {\n            return;\n        }\n\n        if (! in_array($import->status, [ImportStatus::Completed, ImportStatus::Failed], true)) {\n            $import->update(['status' => ImportStatus::Failed]);\n        }\n\n        $this->flushFailedRows($import);\n\n        try {\n            $this->notifyUser($import, [\n                'created' => $import->created_rows,\n                'updated' => $import->updated_rows,\n                'skipped' => $import->skipped_rows,\n                'failed' => $import->failed_rows,\n            ], failed: true);\n        } catch (\\Throwable) {\n        }\n    }\n\n    /**\n     * @param  Collection<int, ColumnData>  $fieldMappings\n     * @param  array<string, true>  $allowedKeys\n     * @param  Collection<string, CustomField>  $customFieldDefs\n     * @param  array<string, ColumnData>  $customFieldFormatMap\n     * @param  array<string, mixed>  $context\n     * @param  array<string, int>  $results\n     * @param  array<string, Model>  $existingRecords\n     */\n    private function processRow(\n        ImportRow $row,\n        BaseImporter $importer,\n        Collection $fieldMappings,\n        array $allowedKeys,\n        Collection $customFieldDefs,\n        array $customFieldFormatMap,\n        ?MatchableField $matchField,\n        ?string $matchSourceColumn,\n        array $context,\n        array &$results,\n        array $existingRecords = [],\n    ): void {\n        if (! $row->isCreate() && ! $row->isUpdate()) {\n            $results['skipped']++;\n            $this->markProcessed($row);\n\n            return;\n        }\n\n        $effectiveAction = $row->match_action;\n        $effectiveMatchedId = $row->matched_id;\n\n        if ($effectiveAction === RowMatchAction::Create\n            && $matchField instanceof MatchableField\n            && $matchSourceColumn !== null\n        ) {\n            $cachedRecordId = $this->lookupMatchableValueCache($row, $matchField, $matchSourceColumn);\n\n            if ($cachedRecordId !== null) {\n                $effectiveAction = RowMatchAction::Update;\n                $effectiveMatchedId = $cachedRecordId;\n                $this->dedupedRows[] = $row->row_number;\n            }\n        }\n\n        $isCreate = $effectiveAction === RowMatchAction::Create;\n\n        try {\n            $data = $this->buildDataFromRow($row, $fieldMappings);\n            $existing = $isCreate\n                ? (null)\n                : $existingRecords[(string) $effectiveMatchedId] ?? $this->findExistingRecord($importer, $effectiveMatchedId);\n\n            if (! $isCreate && ! $existing instanceof Model) {\n                $results['skipped']++;\n                $this->markProcessed($row);\n\n                return;\n            }\n\n            DB::transaction(function () use ($row, $importer, $data, $existing, $context, $isCreate, $matchField, $matchSourceColumn, $allowedKeys, $customFieldDefs, $customFieldFormatMap, &$results): void {\n                $pendingRelationships = $this->resolveEntityLinkRelationships($row, $data, $importer, $context);\n\n                $prepared = $importer->prepareForSave($data, $existing, $context);\n                $customFieldData = $this->extractCustomFieldData($prepared);\n                $prepared = array_intersect_key($prepared, $allowedKeys);\n\n                if (! $isCreate) {\n                    unset($prepared['team_id'], $prepared['creator_id'], $prepared['creation_source']);\n                    $prepared = array_filter($prepared, filled(...));\n                }\n\n                $record = $isCreate\n                    ? new ($importer->modelClass())\n                    : $existing;\n\n                if ($customFieldData !== []) {\n                    ImportDataStorage::setMultiple($record, $customFieldData);\n                }\n\n                $record->forceFill($prepared);\n                $record->save();\n\n                if ($isCreate && $matchField instanceof MatchableField && $matchSourceColumn !== null) {\n                    $this->registerInMatchableValueCache($row, $matchField, $matchSourceColumn, (string) $record->getKey());\n                }\n\n                $this->storeEntityLinkRelationships($record, $pendingRelationships, $context);\n\n                $results[$isCreate ? 'created' : 'updated']++;\n\n                $storedCustomFieldData = ImportDataStorage::pull($record);\n                $batchableData = array_intersect_key($storedCustomFieldData, $customFieldDefs->all());\n                $remainingData = array_diff_key($storedCustomFieldData, $batchableData);\n\n                $this->collectCustomFieldValues($record, $batchableData, $customFieldDefs, $customFieldFormatMap, $isCreate);\n\n                if ($remainingData !== []) {\n                    ImportDataStorage::setMultiple($record, $remainingData);\n                }\n\n                $importer->afterSave($record, $context);\n            });\n\n            $this->markProcessed($row);\n        } catch (\\Throwable $e) {\n            $results['failed']++;\n            $this->recordFailedRow($row->row_number, $row->raw_data->all(), $e);\n            report($e);\n        }\n    }\n\n    /** @return Collection<string, CustomField> */\n    private function loadCustomFieldDefinitions(BaseImporter $importer): Collection\n    {\n        /** @phpstan-ignore return.type (App\\Models\\CustomField extends vendor class at runtime via model swapping) */\n        return CustomField::query()\n            ->withoutGlobalScopes()\n            ->with(['options' => fn (HasMany $q) => $q->withoutGlobalScopes()])\n            ->where('tenant_id', $this->teamId)\n            ->where('entity_type', $importer->entityName())\n            ->where('type', '!=', 'record')\n            ->active()\n            ->get()\n            ->keyBy('code');\n    }\n\n    /**\n     * @param  array<string, mixed>  $customFieldData\n     * @param  Collection<string, CustomField>  $customFieldDefs\n     * @param  array<string, ColumnData>  $customFieldFormatMap\n     */\n    private function collectCustomFieldValues(\n        Model $record,\n        array $customFieldData,\n        Collection $customFieldDefs,\n        array $customFieldFormatMap = [],\n        bool $isCreate = true,\n    ): void {\n        if ($customFieldData === []) {\n            return;\n        }\n\n        $tenantKey = config('custom-fields.database.column_names.tenant_foreign_key');\n\n        foreach ($customFieldData as $code => $value) {\n            $cf = $customFieldDefs->get($code);\n\n            if ($cf === null) {\n                continue;\n            }\n\n            $value = $this->convertCustomFieldValue($value, $cf, $customFieldFormatMap[$code] ?? null);\n\n            $valueColumn = CustomFieldValue::getValueColumn($cf->type);\n            $safeValue = SafeValueConverter::toDbSafe($value, $cf->type);\n\n            if (! $isCreate && $cf->typeData->dataType === FieldDataType::MULTI_CHOICE && is_array($safeValue)) {\n                $safeValue = $this->mergeWithExistingMultiChoiceValues($record, $cf, $safeValue, $tenantKey);\n            }\n\n            $row = [\n                'id' => (string) Str::ulid(),\n                'entity_type' => $record->getMorphClass(),\n                'entity_id' => $record->getKey(),\n                'custom_field_id' => $cf->getKey(),\n                $tenantKey => $this->teamId,\n                'string_value' => null,\n                'text_value' => null,\n                'integer_value' => null,\n                'float_value' => null,\n                'json_value' => null,\n                'boolean_value' => null,\n                'date_value' => null,\n                'datetime_value' => null,\n            ];\n\n            $row[$valueColumn] = $valueColumn === 'json_value' && $safeValue !== null\n                ? json_encode($safeValue)\n                : $safeValue;\n\n            $this->pendingCustomFieldValues[] = $row;\n        }\n    }\n\n    /**\n     * @param  array<int, int|string>  $newValues\n     * @return array<int, int|string>\n     */\n    private function mergeWithExistingMultiChoiceValues(\n        Model $record,\n        CustomField $cf,\n        array $newValues,\n        string $tenantKey,\n    ): array {\n        $entityType = $record->getMorphClass();\n        $entityId = $record->getKey();\n        $cfId = $cf->getKey();\n\n        $existingValues = [];\n\n        foreach ($this->pendingCustomFieldValues as $pending) {\n            if ($pending['entity_type'] === $entityType\n                && (string) $pending['entity_id'] === (string) $entityId\n                && (string) $pending['custom_field_id'] === (string) $cfId\n                && $pending['json_value'] !== null\n            ) {\n                $existingValues = json_decode($pending['json_value'], true) ?? [];\n            }\n        }\n\n        if ($existingValues === []) {\n            $table = config('custom-fields.database.table_names.custom_field_values');\n            $dbRow = DB::table($table)\n                ->where('entity_type', $entityType)\n                ->where('entity_id', $entityId)\n                ->where('custom_field_id', $cfId)\n                ->where($tenantKey, $this->teamId)\n                ->value('json_value');\n\n            if ($dbRow !== null) {\n                $existingValues = json_decode($dbRow, true) ?? [];\n            }\n        }\n\n        if ($existingValues === []) {\n            return $newValues;\n        }\n\n        return array_values(array_unique([...$existingValues, ...$newValues]));\n    }\n\n    private function flushCustomFieldValues(): void\n    {\n        if ($this->pendingCustomFieldValues === []) {\n            return;\n        }\n\n        $tenantKey = config('custom-fields.database.column_names.tenant_foreign_key');\n        $table = config('custom-fields.database.table_names.custom_field_values');\n        $uniqueBy = ['entity_type', 'entity_id', 'custom_field_id', $tenantKey];\n        $updateColumns = [\n            'string_value', 'text_value', 'integer_value', 'float_value',\n            'json_value', 'boolean_value', 'date_value', 'datetime_value',\n        ];\n\n        $deduplicated = [];\n\n        foreach ($this->pendingCustomFieldValues as $row) {\n            $key = $row['entity_type'].'|'.$row['entity_id'].'|'.$row['custom_field_id'].'|'.$row[$tenantKey];\n            $deduplicated[$key] = $row;\n        }\n\n        foreach (array_chunk(array_values($deduplicated), 500) as $chunk) {\n            DB::table($table)->upsert($chunk, $uniqueBy, $updateColumns);\n        }\n\n        $this->pendingCustomFieldValues = [];\n    }\n\n    private function markProcessed(ImportRow $row): void\n    {\n        $this->processedRows[] = $row->row_number;\n    }\n\n    private function flushProcessedRows(ImportStore $store): void\n    {\n        if ($this->dedupedRows !== []) {\n            $store->connection()->table('import_rows')\n                ->whereIn('row_number', $this->dedupedRows)\n                ->update(['match_action' => RowMatchAction::Update->value]);\n\n            $this->dedupedRows = [];\n        }\n\n        if ($this->processedRows === []) {\n            return;\n        }\n\n        $store->connection()->table('import_rows')\n            ->whereIn('row_number', $this->processedRows)\n            ->update(['processed' => true]);\n\n        $this->processedRows = [];\n    }\n\n    /**\n     * @param  Collection<int, ImportRow>  $rows\n     * @return array<string, Model>\n     */\n    private function preloadExistingRecords(Collection $rows, BaseImporter $importer): array\n    {\n        $updateIds = $rows\n            ->filter(fn (ImportRow $row): bool => $row->isUpdate() && $row->matched_id !== null)\n            ->pluck('matched_id')\n            ->unique()\n            ->all();\n\n        if ($updateIds === []) {\n            return [];\n        }\n\n        $modelClass = $importer->modelClass();\n\n        return $modelClass::query()\n            ->where('team_id', $this->teamId)\n            ->whereIn((new $modelClass)->getKeyName(), $updateIds)\n            ->get()\n            ->keyBy(fn (Model $model): string => (string) $model->getKey())\n            ->all();\n    }\n\n    /** @param array<string, mixed> $rawData */\n    private function recordFailedRow(int $rowNumber, array $rawData, \\Throwable $e): void\n    {\n        $this->failedRows[] = [\n            'row' => $rowNumber,\n            'error' => Str::limit($e->getMessage(), 500),\n            'data' => $rawData,\n        ];\n    }\n\n    /** @param  array<string, int>  $results */\n    private function persistResults(Import $import, array $results): void\n    {\n        $import->update([\n            'created_rows' => $results['created'],\n            'updated_rows' => $results['updated'],\n            'skipped_rows' => $results['skipped'],\n            'failed_rows' => $results['failed'],\n        ]);\n    }\n\n    private function flushFailedRows(Import $import): void\n    {\n        if ($this->failedRows === []) {\n            return;\n        }\n\n        $now = now();\n\n        $rows = collect($this->failedRows)->map(fn (array $row): array => [\n            'id' => (string) Str::ulid(),\n            'import_id' => $import->id,\n            'team_id' => $this->teamId,\n            'data' => json_encode($row['data'] ?? ['row_number' => $row['row']]),\n            'validation_error' => $row['error'],\n            'created_at' => $now,\n            'updated_at' => $now,\n        ]);\n\n        foreach ($rows->chunk(100) as $chunk) {\n            $import->failedRows()->insert($chunk->all());\n        }\n\n        $this->failedRows = [];\n    }\n\n    /**\n     * @param  Collection<int, ColumnData>  $fieldMappings\n     * @return array<string, mixed>\n     */\n    private function buildDataFromRow(ImportRow $row, Collection $fieldMappings): array\n    {\n        return $fieldMappings\n            ->mapWithKeys(fn (ColumnData $mapping): array => [\n                $mapping->target => $row->getFinalValue($mapping->source),\n            ])\n            ->all();\n    }\n\n    /**\n     * @param  array<string, mixed>  $prepared\n     * @return array<string, mixed>\n     */\n    private function extractCustomFieldData(array &$prepared): array\n    {\n        $customFieldData = [];\n\n        foreach ($prepared as $key => $value) {\n            if (! str_starts_with($key, self::CUSTOM_FIELD_PREFIX)) {\n                continue;\n            }\n\n            unset($prepared[$key]);\n\n            if (blank($value)) {\n                continue;\n            }\n\n            $customFieldData[Str::after($key, self::CUSTOM_FIELD_PREFIX)] = $value;\n        }\n\n        return $customFieldData;\n    }\n\n    /**\n     * Build a map from custom field code to its ColumnData for format lookups.\n     *\n     * @param  Collection<int, ColumnData>  $fieldMappings\n     * @return array<string, ColumnData>\n     */\n    private function buildCustomFieldFormatMap(Collection $fieldMappings): array\n    {\n        return $fieldMappings\n            ->filter(fn (ColumnData $m): bool => str_starts_with($m->target, self::CUSTOM_FIELD_PREFIX))\n            ->mapWithKeys(fn (ColumnData $m): array => [\n                Str::after($m->target, self::CUSTOM_FIELD_PREFIX) => $m,\n            ])\n            ->all();\n    }\n\n    /**\n     * Apply format-aware conversion for date/datetime and float custom field values.\n     */\n    private function convertCustomFieldValue(mixed $value, CustomField $cf, ?ColumnData $columnData): mixed\n    {\n        if (! is_string($value) || $value === '') {\n            return $value;\n        }\n\n        $dataType = $cf->typeData->dataType;\n\n        if ($dataType === FieldDataType::DATE || $dataType === FieldDataType::DATE_TIME) {\n            $format = $columnData instanceof ColumnData ? ($columnData->dateFormat ?? DateFormat::ISO) : DateFormat::ISO;\n            $parsed = $format->parse($value, $dataType->isTimestamp());\n\n            if (! $parsed instanceof Carbon) {\n                return $value;\n            }\n\n            return $dataType === FieldDataType::DATE\n                ? $parsed->format('Y-m-d')\n                : $parsed->format('Y-m-d H:i:s');\n        }\n\n        if ($dataType === FieldDataType::FLOAT) {\n            $format = $columnData instanceof ColumnData ? ($columnData->numberFormat ?? NumberFormat::POINT) : NumberFormat::POINT;\n\n            return $format->parse($value);\n        }\n\n        if ($dataType === FieldDataType::SINGLE_CHOICE) {\n            return $this->resolveChoiceValue($cf, $value);\n        }\n\n        if ($dataType === FieldDataType::MULTI_CHOICE) {\n            return $this->resolveMultiChoiceValue($cf, $value);\n        }\n\n        return $value;\n    }\n\n    private function resolveChoiceValue(CustomField $cf, string $value): int|string\n    {\n        $option = $cf->options->firstWhere('name', $value);\n\n        if (! $option) {\n            $option = $cf->options->first(\n                fn (CustomFieldOption $opt): bool => mb_strtolower((string) $opt->name) === mb_strtolower($value)\n            );\n        }\n\n        if ($option) {\n            $key = $option->getKey();\n\n            return CustomFields::optionModelUsesStringKeys() ? (string) $key : $key;\n        }\n\n        $isExistingId = $cf->options->contains(fn (CustomFieldOption $opt): bool => (string) $opt->getKey() === $value);\n\n        if ($isExistingId) {\n            return CustomFields::optionModelUsesStringKeys() ? $value : (int) $value;\n        }\n\n        return $value;\n    }\n\n    /**\n     * @return array<int, int|string>\n     */\n    private function resolveMultiChoiceValue(CustomField $cf, string $value): array\n    {\n        $items = array_map(trim(...), explode(',', $value));\n\n        if ($cf->typeData->acceptsArbitraryValues) {\n            return $items;\n        }\n\n        $resolved = [];\n\n        foreach ($items as $item) {\n            $resolved[] = $this->resolveChoiceValue($cf, $item);\n        }\n\n        return $resolved;\n    }\n\n    /** @return array<string, true> */\n    private function allowedAttributeKeys(BaseImporter $importer): array\n    {\n        $keys = collect($importer->allFields())\n            ->reject(fn (ImportField $field): bool => $field->key === 'id')\n            ->pluck('key')\n            ->merge(['team_id', 'creator_id', 'creation_source'])\n            ->merge(\n                collect($importer->entityLinks())\n                    ->pluck('foreignKey')\n                    ->filter()\n            )\n            ->all();\n\n        /** @var array<string, true> */\n        return array_fill_keys($keys, true);\n    }\n\n    private function findExistingRecord(BaseImporter $importer, ?string $matchedId): ?Model\n    {\n        if ($matchedId === null) {\n            return null;\n        }\n\n        $modelClass = $importer->modelClass();\n\n        return $modelClass::query()\n            ->where('team_id', $this->teamId)\n            ->find($matchedId);\n    }\n\n    /**\n     * Resolve the highest-priority matchable field from the mapped columns.\n     *\n     * Returns null if no matchable field is mapped or the match behavior is Create-only.\n     *\n     * @param  Collection<int, ColumnData>  $fieldMappings\n     */\n    private function resolveMatchField(BaseImporter $importer, Collection $fieldMappings): ?MatchableField\n    {\n        $mappedFieldKeys = $fieldMappings->pluck('target')->all();\n        $matchField = $importer->getMatchFieldForMappedColumns($mappedFieldKeys);\n\n        if (! $matchField instanceof MatchableField || $matchField->isCreate()) {\n            return null;\n        }\n\n        return $matchField;\n    }\n\n    /**\n     * Find the CSV source column name that maps to the given matchable field.\n     *\n     * @param  Collection<int, ColumnData>  $fieldMappings\n     */\n    private function findMatchSourceColumn(MatchableField $matchField, Collection $fieldMappings): ?string\n    {\n        $mapping = $fieldMappings->first(\n            fn (ColumnData $col): bool => $col->target === $matchField->field\n        );\n\n        return $mapping?->source;\n    }\n\n    private function lookupMatchableValueCache(ImportRow $row, MatchableField $matchField, string $sourceColumn): ?string\n    {\n        foreach ($this->normalizeMatchableValues($row, $matchField, $sourceColumn) as $normalized) {\n            if (isset($this->matchableValueCache[$normalized])) {\n                return $this->matchableValueCache[$normalized];\n            }\n        }\n\n        return null;\n    }\n\n    private function registerInMatchableValueCache(ImportRow $row, MatchableField $matchField, string $sourceColumn, string $recordId): void\n    {\n        foreach ($this->normalizeMatchableValues($row, $matchField, $sourceColumn) as $normalized) {\n            $this->matchableValueCache[$normalized] = $recordId;\n        }\n    }\n\n    /**\n     * Extract and normalize the matchable values from a row's source column.\n     *\n     * For multi-value fields (email, phone), splits on commas.\n     * Returns lowercased, trimmed, non-empty strings.\n     *\n     * @return list<string>\n     */\n    private function normalizeMatchableValues(ImportRow $row, MatchableField $matchField, string $sourceColumn): array\n    {\n        $rawValue = $row->getFinalValue($sourceColumn);\n\n        if (blank($rawValue)) {\n            return [];\n        }\n\n        $parts = $matchField->multiValue\n            ? explode(',', (string) $rawValue)\n            : [(string) $rawValue];\n\n        return array_values(array_filter(\n            array_map(fn (string $part): string => mb_strtolower(trim($part)), $parts),\n            fn (string $v): bool => $v !== '',\n        ));\n    }\n\n    /**\n     * @param  array<string, mixed>  $data\n     * @param  array<string, mixed>  $context\n     * @return array<int, array{link: EntityLink, strategy: EntityLinkStorageInterface, ids: array<int|string>}>\n     */\n    private function resolveEntityLinkRelationships(\n        ImportRow $row,\n        array &$data,\n        BaseImporter $importer,\n        array $context,\n    ): array {\n        if ($row->relationships === null || $row->relationships->count() === 0) {\n            return [];\n        }\n\n        $entityLinks = $importer->entityLinks();\n        $pending = [];\n\n        $grouped = collect($row->relationships->all())->groupBy('relationship');\n\n        foreach ($grouped as $linkKey => $matches) {\n            $link = $entityLinks[$linkKey] ?? null;\n\n            if ($link === null) {\n                continue;\n            }\n\n            $resolvedId = $this->resolveGroupedMatches($matches, $link, $context);\n\n            if ($resolvedId === null) {\n                continue;\n            }\n\n            $storageStrategy = $link->getStorageStrategy();\n            $data = $storageStrategy->prepareData($data, $link, [$resolvedId]);\n\n            $pending[] = [\n                'link' => $link,\n                'strategy' => $storageStrategy,\n                'ids' => [$resolvedId],\n            ];\n        }\n\n        return $pending;\n    }\n\n    /**\n     * @param  Collection<int, RelationshipMatch>  $matches\n     * @param  array<string, mixed>  $context\n     */\n    private function resolveGroupedMatches(\n        Collection $matches,\n        EntityLink $link,\n        array $context,\n    ): ?string {\n        foreach ($matches as $match) {\n            if ($match->isExisting() && $match->id !== null) {\n                return $match->id;\n            }\n        }\n\n        $creationMatch = $this->resolveCreationMatch($matches);\n\n        if (! $creationMatch instanceof RelationshipMatch || blank($creationMatch->name)) {\n            return null;\n        }\n\n        $creationName = trim($creationMatch->name);\n\n        if ($creationName === '') {\n            return null;\n        }\n\n        $dedupKey = \"{$link->key}:\".mb_strtolower($creationName);\n\n        if (isset($this->createdRecords[$dedupKey])) {\n            return $this->createdRecords[$dedupKey];\n        }\n\n        if ($link->storageType === EntityLinkStorage::CustomFieldValue) {\n            return $this->resolveRecordFieldByName($link, $creationName, $context, $dedupKey);\n        }\n\n        /** @var Model $record */\n        $record = new $link->targetModelClass;\n        $record->forceFill([\n            'name' => $creationName,\n            'team_id' => $context['team_id'],\n            'creator_id' => $context['creator_id'],\n            'creation_source' => CreationSource::IMPORT,\n        ]);\n        $record->save();\n\n        $this->populateMatchingCustomField($record, $link, $creationMatch, $context);\n\n        $id = (string) $record->getKey();\n        $this->createdRecords[$dedupKey] = $id;\n\n        return $id;\n    }\n\n    /** @param  Collection<int, RelationshipMatch>  $matches */\n    private function resolveCreationMatch(Collection $matches): ?RelationshipMatch\n    {\n        $preferred = $matches->first(\n            fn (RelationshipMatch $m): bool => $m->isCreate() && $m->behavior === MatchBehavior::Create\n        );\n\n        return $preferred ?? $matches->first(\n            fn (RelationshipMatch $m): bool => $m->isCreate() && $m->behavior === MatchBehavior::MatchOrCreate\n        );\n    }\n\n    /** @param  array<string, mixed>  $context */\n    private function populateMatchingCustomField(\n        Model $record,\n        EntityLink $link,\n        RelationshipMatch $match,\n        array $context,\n    ): void {\n        if ($match->matchField === null) {\n            return;\n        }\n\n        if (! str_starts_with($match->matchField, self::CUSTOM_FIELD_PREFIX)) {\n            return;\n        }\n\n        $fieldCode = Str::after($match->matchField, self::CUSTOM_FIELD_PREFIX);\n\n        $cf = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $context['team_id'])\n            ->where('entity_type', $link->targetEntity)\n            ->where('code', $fieldCode)\n            ->first();\n\n        if ($cf === null) {\n            return;\n        }\n\n        $valueColumn = CustomFieldValue::getValueColumn($cf->type);\n        $tenantKey = config('custom-fields.database.column_names.tenant_foreign_key');\n        $value = $match->name;\n\n        $isJsonColumn = $valueColumn === 'json_value';\n        $safeValue = $isJsonColumn ? [$value] : $value;\n\n        $this->pendingCustomFieldValues[] = [\n            'id' => (string) Str::ulid(),\n            'entity_type' => $record->getMorphClass(),\n            'entity_id' => $record->getKey(),\n            'custom_field_id' => $cf->getKey(),\n            $tenantKey => $context['team_id'],\n            'string_value' => null,\n            'text_value' => null,\n            'integer_value' => null,\n            'float_value' => null,\n            'json_value' => null,\n            'boolean_value' => null,\n            'date_value' => null,\n            'datetime_value' => null,\n            $valueColumn => $isJsonColumn ? json_encode($safeValue) : $safeValue,\n        ];\n    }\n\n    /**\n     * Record custom fields should never auto-create target entities, only match existing ones.\n     *\n     * @param  array<string, mixed>  $context\n     */\n    private function resolveRecordFieldByName(\n        EntityLink $link,\n        string $name,\n        array $context,\n        string $dedupKey,\n    ): ?string {\n        $record = $link->targetModelClass::query()\n            ->where('team_id', $context['team_id'])\n            ->where('name', $name)\n            ->first();\n\n        if ($record === null) {\n            return null;\n        }\n\n        $id = (string) $record->getKey();\n        $this->createdRecords[$dedupKey] = $id;\n\n        return $id;\n    }\n\n    /** @param  array<string, int>  $results */\n    private function notifyUser(Import $import, array $results, bool $failed = false): void\n    {\n        $user = User::query()->find($import->user_id);\n\n        if ($user === null) {\n            return;\n        }\n\n        $entityLabel = $import->entity_type->label();\n        $status = $failed ? 'failed' : 'completed';\n\n        $notification = Notification::make()\n            ->title(\"Import of {$entityLabel} {$status}\")\n            ->viewData(['results' => $results]);\n\n        $failed\n            ? $notification->danger()\n            : $notification->success();\n\n        $notification->sendToDatabase($user);\n    }\n\n    /**\n     * @param  array<int, array{link: EntityLink, strategy: EntityLinkStorageInterface, ids: array<int|string>}>  $pendingRelationships\n     * @param  array<string, mixed>  $context\n     */\n    private function storeEntityLinkRelationships(\n        Model $record,\n        array $pendingRelationships,\n        array $context,\n    ): void {\n        foreach ($pendingRelationships as $pending) {\n            $pending['strategy']->store($record, $pending['link'], $pending['ids'], $context);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Jobs/ResolveMatchesJob.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Jobs;\n\nuse Illuminate\\Bus\\Batchable;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\MatchResolver;\n\nfinal class ResolveMatchesJob implements ShouldQueue\n{\n    use Batchable;\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $timeout = 120;\n\n    public int $tries = 1;\n\n    public function __construct(\n        private readonly string $importId,\n    ) {\n        $this->onQueue('imports');\n    }\n\n    public function handle(): void\n    {\n        if ($this->batch()?->cancelled()) {\n            return;\n        }\n\n        $import = Import::query()->findOrFail($this->importId);\n        $store = ImportStore::load($this->importId);\n\n        if (! $store instanceof ImportStore) {\n            return;\n        }\n\n        $importer = $import->getImporter();\n\n        new MatchResolver($store, $import, $importer)->resolve();\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Jobs/ValidateColumnJob.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Jobs;\n\nuse Illuminate\\Bus\\Batchable;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Database\\Connection;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\RelationshipMatch;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkValidator;\nuse Relaticle\\ImportWizard\\Support\\Validation\\ColumnValidator;\n\nfinal class ValidateColumnJob implements ShouldQueue\n{\n    use Batchable;\n    use Dispatchable;\n    use InteractsWithQueue;\n    use Queueable;\n    use SerializesModels;\n\n    public int $timeout = 120;\n\n    public int $tries = 1;\n\n    public function __construct(\n        private readonly string $importId,\n        private readonly ColumnData $column,\n    ) {\n        $this->onQueue('imports');\n    }\n\n    public function handle(): void\n    {\n        if ($this->batch()?->cancelled()) {\n            return;\n        }\n\n        $import = Import::query()->findOrFail($this->importId);\n        $store = ImportStore::load($this->importId);\n\n        if (! $store instanceof ImportStore) {\n            return;\n        }\n\n        $connection = $store->connection();\n        $jsonPath = '$.'.$this->column->source;\n\n        if ($this->column->isEntityLinkMapping()) {\n            $this->validateEntityLink($import, $store, $connection, $jsonPath);\n\n            return;\n        }\n\n        $this->clearValidationForCorrectedDateFields($connection, $jsonPath);\n\n        $uniqueValues = $this->fetchUncorrectedUniqueValues($store, $jsonPath);\n\n        if ($uniqueValues === []) {\n            return;\n        }\n\n        $results = $this->validateValues($import, $uniqueValues);\n\n        $this->updateValidationErrors($connection, $jsonPath, $results);\n    }\n\n    private function validateEntityLink(Import $import, ImportStore $store, Connection $connection, string $jsonPath): void\n    {\n        $uniqueValues = $this->fetchUncorrectedUniqueValues($store, $jsonPath);\n\n        if ($uniqueValues === []) {\n            return;\n        }\n\n        $validator = new EntityLinkValidator($import->team_id);\n        $errorMap = $validator->batchValidateFromColumn($this->column, $import->getImporter(), $uniqueValues);\n\n        $results = [];\n        foreach ($errorMap as $value => $error) {\n            $results[] = [\n                'raw_value' => $value,\n                'validation_error' => $error,\n            ];\n        }\n\n        $this->updateValidationErrors($connection, $jsonPath, $results);\n        $this->writeEntityLinkRelationships($import, $connection, $jsonPath, $validator, $uniqueValues, $validator->getLastFormatErrors());\n    }\n\n    /**\n     * @param  array<int, string>  $uniqueValues\n     * @param  array<string, string|null>  $errorMap\n     */\n    private function writeEntityLinkRelationships(\n        Import $import,\n        Connection $connection,\n        string $jsonPath,\n        EntityLinkValidator $validator,\n        array $uniqueValues,\n        array $errorMap = [],\n    ): void {\n        $context = $this->column->resolveEntityLinkContext($import->getImporter());\n\n        if ($context === null) {\n            return;\n        }\n\n        $link = $context['link'];\n        $matcher = $context['matcher'];\n\n        $validValues = array_filter($uniqueValues, fn (string $v): bool => ($errorMap[$v] ?? null) === null);\n\n        $resolvedMap = $matcher->behavior === MatchBehavior::Create\n            ? array_fill_keys($validValues, null)\n            : $validator->getResolver()->batchResolve($link, $matcher, $validValues);\n\n        $connection->statement('\n            CREATE TEMPORARY TABLE IF NOT EXISTS temp_relationships (\n                lookup_value TEXT,\n                relationship_json TEXT\n            )\n        ');\n\n        try {\n            $inserts = [];\n\n            foreach ($resolvedMap as $value => $resolvedId) {\n                if ($resolvedId === null && $matcher->behavior === MatchBehavior::MatchOnly) {\n                    continue;\n                }\n\n                $match = $resolvedId !== null\n                    ? RelationshipMatch::existing($link->key, (string) $resolvedId, $matcher->behavior, $matcher->field)\n                    : RelationshipMatch::create($link->key, (string) $value, $matcher->behavior, $matcher->field);\n\n                $inserts[] = [\n                    'lookup_value' => (string) $value,\n                    'relationship_json' => json_encode($match->toArray()),\n                ];\n            }\n\n            if ($inserts === []) {\n                return;\n            }\n\n            $connection->table('temp_relationships')->insert($inserts);\n\n            $connection->statement(\"\n                UPDATE import_rows\n                SET relationships = json_insert(\n                    COALESCE(relationships, '[]'),\n                    '\\$[#]',\n                    json(temp.relationship_json)\n                )\n                FROM temp_relationships AS temp\n                WHERE json_extract(import_rows.raw_data, ?) = temp.lookup_value\n            \", [$jsonPath]);\n        } finally {\n            $connection->statement('DROP TABLE IF EXISTS temp_relationships');\n        }\n    }\n\n    private function clearValidationForCorrectedDateFields(\n        Connection $connection,\n        string $jsonPath,\n    ): void {\n        if (! $this->column->getType()->isDateOrDateTime()) {\n            return;\n        }\n\n        $connection->statement(\"\n            UPDATE import_rows\n            SET validation = json_remove(COALESCE(validation, '{}'), ?)\n            WHERE json_extract(corrections, ?) IS NOT NULL\n        \", [$jsonPath, $jsonPath]);\n    }\n\n    /** @return array<int, string> */\n    private function fetchUncorrectedUniqueValues(ImportStore $store, string $jsonPath): array\n    {\n        return $store->query()\n            ->selectRaw('DISTINCT json_extract(raw_data, ?) as value', [$jsonPath])\n            ->whereRaw('json_extract(corrections, ?) IS NULL', [$jsonPath])\n            ->pluck('value')\n            ->filter()\n            ->all();\n    }\n\n    /**\n     * @param  array<int, string>  $uniqueValues\n     * @return array<int, array{raw_value: string, validation_error: string|null}>\n     */\n    private function validateValues(Import $import, array $uniqueValues): array\n    {\n        $this->hydrateColumnField($import);\n\n        $validator = new ColumnValidator;\n        $results = [];\n\n        foreach ($uniqueValues as $value) {\n            $error = $validator->validate($this->column, $value);\n            $results[] = [\n                'raw_value' => $value,\n                'validation_error' => $error?->toStorageFormat(),\n            ];\n        }\n\n        return $results;\n    }\n\n    private function hydrateColumnField(Import $import): void\n    {\n        if ($this->column->importField instanceof ImportField) {\n            return;\n        }\n\n        $importer = $import->getImporter();\n        $this->column->importField = $importer->allFields()->get($this->column->target);\n    }\n\n    /**\n     * @param  array<int, array{raw_value: string, validation_error: string|null}>  $results\n     *\n     * @throws \\Throwable\n     */\n    private function updateValidationErrors(\n        Connection $connection,\n        string $jsonPath,\n        array $results,\n    ): void {\n        $connection->transaction(function () use ($connection, $jsonPath, $results): void {\n            $connection->statement('\n                CREATE TEMPORARY TABLE IF NOT EXISTS temp_validation (\n                    raw_value TEXT,\n                    validation_error TEXT\n                )\n            ');\n\n            try {\n                $connection->table('temp_validation')->insert($results);\n\n                $connection->statement(\"\n                    UPDATE import_rows\n                    SET validation = CASE\n                        WHEN temp.validation_error IS NULL\n                            THEN json_remove(COALESCE(validation, '{}'), ?)\n                        ELSE\n                            json_set(COALESCE(validation, '{}'), ?, temp.validation_error)\n                    END\n                    FROM temp_validation AS temp\n                    WHERE json_extract(import_rows.raw_data, ?) = temp.raw_value\n                      AND json_extract(import_rows.corrections, ?) IS NULL\n                \", [$jsonPath, $jsonPath, $jsonPath, $jsonPath]);\n            } finally {\n                $connection->statement('DROP TABLE IF EXISTS temp_validation');\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Livewire/Concerns/WithImportStore.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Livewire\\Concerns;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Livewire\\Attributes\\Locked;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\ntrait WithImportStore\n{\n    #[Locked]\n    public string $storeId;\n\n    #[Locked]\n    public ImportEntityType $entityType;\n\n    private ?Import $import = null;\n\n    private ?ImportStore $store = null;\n\n    public function mountWithImportStore(string $storeId, ImportEntityType $entityType): void\n    {\n        $this->storeId = $storeId;\n        $this->entityType = $entityType;\n    }\n\n    protected function import(): Import\n    {\n        if ($this->import === null) {\n            $this->import = Import::query()\n                ->forTeam($this->getCurrentTeamId() ?? '')\n                ->findOrFail($this->storeId);\n        }\n\n        return $this->import;\n    }\n\n    protected function refreshImport(): Import\n    {\n        $this->import = null;\n\n        return $this->import();\n    }\n\n    protected function store(): ImportStore\n    {\n        $store = $this->store ??= ImportStore::load($this->storeId);\n\n        abort_if(! $store instanceof ImportStore, 404, 'Import session not found or expired.');\n\n        return $store;\n    }\n\n    private function getCurrentTeamId(): ?string\n    {\n        $tenant = filament()->getTenant();\n\n        return $tenant instanceof Model ? (string) $tenant->getKey() : null;\n    }\n\n    /** @return list<string> */\n    protected function headers(): array\n    {\n        return $this->import()->headers ?? [];\n    }\n\n    protected function rowCount(): int\n    {\n        return $this->import()->total_rows;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Livewire/ImportWizard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Livewire;\n\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\Concerns\\InteractsWithActions;\nuse Filament\\Actions\\Contracts\\HasActions;\nuse Filament\\Forms\\Concerns\\InteractsWithForms;\nuse Filament\\Forms\\Contracts\\HasForms;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\View\\View;\nuse Livewire\\Attributes\\Locked;\nuse Livewire\\Attributes\\On;\nuse Livewire\\Attributes\\Url;\nuse Livewire\\Component;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nfinal class ImportWizard extends Component implements HasActions, HasForms\n{\n    use InteractsWithActions;\n    use InteractsWithForms;\n\n    public const int STEP_UPLOAD = 1;\n\n    public const int STEP_MAP = 2;\n\n    public const int STEP_REVIEW = 3;\n\n    public const int STEP_PREVIEW = 4;\n\n    public int $currentStep = self::STEP_UPLOAD;\n\n    #[Locked]\n    public ImportEntityType $entityType = ImportEntityType::Company;\n\n    #[Locked]\n    public ?string $returnUrl = null;\n\n    #[Url(as: 'import')]\n    public ?string $storeId = null;\n\n    public int $rowCount = 0;\n\n    public int $columnCount = 0;\n\n    public bool $importStarted = false;\n\n    public function mount(ImportEntityType $entityType, ?string $returnUrl = null): void\n    {\n        $this->entityType = $entityType;\n        $this->returnUrl = $this->sanitizeReturnUrl($returnUrl);\n\n        $this->restoreFromStore();\n    }\n\n    public function render(): View\n    {\n        return view('import-wizard-new::livewire.import-wizard');\n    }\n\n    public function onUploadCompleted(string $storeId, int $rowCount, int $columnCount): void\n    {\n        $this->storeId = $storeId;\n        $this->rowCount = $rowCount;\n        $this->columnCount = $columnCount;\n        $this->nextStep();\n    }\n\n    public function nextStep(): void\n    {\n        $this->currentStep = min($this->currentStep + 1, self::STEP_PREVIEW);\n    }\n\n    public function goBack(): void\n    {\n        if ($this->importStarted) {\n            return;\n        }\n\n        $this->currentStep = max($this->currentStep - 1, self::STEP_UPLOAD);\n        $this->syncStepStatus();\n    }\n\n    public function goToStep(int $step): void\n    {\n        if ($this->importStarted) {\n            return;\n        }\n\n        if ($step < self::STEP_UPLOAD || $step >= $this->currentStep) {\n            return;\n        }\n\n        if ($step === self::STEP_UPLOAD) {\n            $this->mountAction('startOver');\n\n            return;\n        }\n\n        $this->currentStep = $step;\n        $this->syncStepStatus();\n    }\n\n    public function getStepTitle(): string\n    {\n        return match ($this->currentStep) {\n            self::STEP_UPLOAD => 'Upload CSV',\n            self::STEP_MAP => 'Map Columns',\n            self::STEP_REVIEW => 'Review Values',\n            self::STEP_PREVIEW => 'Preview & Import',\n            default => '',\n        };\n    }\n\n    public function getStepDescription(): string\n    {\n        $label = $this->entityType->label();\n        $singular = $this->entityType->singular();\n\n        return match ($this->currentStep) {\n            self::STEP_UPLOAD => \"Upload your CSV file to import {$label}\",\n            self::STEP_MAP => \"Match CSV columns to {$singular} fields\",\n            self::STEP_REVIEW => 'Review and fix any data issues',\n            self::STEP_PREVIEW => 'Preview changes and start import',\n            default => '',\n        };\n    }\n\n    public function cancelImport(): void\n    {\n        if ($this->storeId !== null) {\n            $this->destroyImportAndStore($this->storeId);\n        }\n\n        if ($this->returnUrl !== null) {\n            $this->redirect($this->returnUrl);\n        }\n    }\n\n    #[On('import-started')]\n    public function onImportStarted(): void\n    {\n        $this->importStarted = true;\n    }\n\n    public function startOverAction(): Action\n    {\n        return Action::make('startOver')\n            ->label('Start over')\n            ->color('gray')\n            ->icon(Heroicon::OutlinedArrowPath)\n            ->requiresConfirmation()\n            ->modalHeading('Start a new import?')\n            ->modalDescription('Are you sure you want to start a new import? Your current progress will be lost.')\n            ->modalSubmitActionLabel('Start over')\n            ->modalCancelActionLabel('Cancel')\n            ->action(fn () => $this->startOver());\n    }\n\n    public function startOver(): void\n    {\n        if ($this->storeId !== null) {\n            $this->destroyImportAndStore($this->storeId);\n        }\n\n        $this->storeId = null;\n        $this->rowCount = 0;\n        $this->columnCount = 0;\n        $this->importStarted = false;\n        $this->currentStep = self::STEP_UPLOAD;\n    }\n\n    private function restoreFromStore(): void\n    {\n        $import = $this->findCurrentImport();\n\n        if (! $import instanceof Import) {\n            $this->storeId = null;\n\n            return;\n        }\n\n        $this->rowCount = $import->total_rows;\n        $this->columnCount = count($import->headers ?? []);\n        $this->currentStep = $this->stepFromStatus($import->status);\n        $this->importStarted = in_array($import->status, [\n            ImportStatus::Importing,\n            ImportStatus::Completed,\n            ImportStatus::Failed,\n        ], true);\n    }\n\n    private function syncStepStatus(): void\n    {\n        $this->findCurrentImport()\n            ?->update(['status' => $this->statusForStep($this->currentStep)]);\n    }\n\n    private function findCurrentImport(): ?Import\n    {\n        if ($this->storeId === null) {\n            return null;\n        }\n\n        $teamId = $this->getCurrentTeamId();\n\n        if ($teamId === null) {\n            return null;\n        }\n\n        $import = Import::query()\n            ->forTeam($teamId)\n            ->find($this->storeId);\n\n        return $import instanceof Import ? $import : null;\n    }\n\n    private function statusForStep(int $step): ImportStatus\n    {\n        return match ($step) {\n            self::STEP_UPLOAD => ImportStatus::Uploading,\n            self::STEP_MAP => ImportStatus::Mapping,\n            self::STEP_REVIEW => ImportStatus::Reviewing,\n            default => ImportStatus::Previewing,\n        };\n    }\n\n    private function stepFromStatus(ImportStatus $status): int\n    {\n        return match ($status) {\n            ImportStatus::Uploading => self::STEP_UPLOAD,\n            ImportStatus::Mapping => self::STEP_MAP,\n            ImportStatus::Reviewing => self::STEP_REVIEW,\n            ImportStatus::Previewing, ImportStatus::Importing, ImportStatus::Completed, ImportStatus::Failed => self::STEP_PREVIEW,\n        };\n    }\n\n    private function destroyImportAndStore(string $importId): void\n    {\n        $teamId = $this->getCurrentTeamId();\n\n        if ($teamId === null) {\n            return;\n        }\n\n        Import::query()\n            ->forTeam($teamId)\n            ->where('id', $importId)\n            ->delete();\n\n        ImportStore::load($importId)?->destroy();\n    }\n\n    private function sanitizeReturnUrl(?string $url): ?string\n    {\n        if ($url === null) {\n            return null;\n        }\n\n        if (str_starts_with($url, '/') && ! str_starts_with($url, '//')) {\n            return $url;\n        }\n\n        return null;\n    }\n\n    private function getCurrentTeamId(): ?string\n    {\n        $tenant = filament()->getTenant();\n\n        return $tenant instanceof Model ? (string) $tenant->getKey() : null;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Livewire/Steps/MappingStep.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Livewire\\Steps;\n\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\Concerns\\InteractsWithActions;\nuse Filament\\Actions\\Contracts\\HasActions;\nuse Filament\\Forms\\Concerns\\InteractsWithForms;\nuse Filament\\Forms\\Contracts\\HasForms;\nuse Filament\\Support\\Enums\\Width;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\View\\View;\nuse Livewire\\Attributes\\Computed;\nuse Livewire\\Component;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\nuse Relaticle\\ImportWizard\\Livewire\\Concerns\\WithImportStore;\nuse Relaticle\\ImportWizard\\Support\\DataTypeInferencer;\n\nfinal class MappingStep extends Component implements HasActions, HasForms\n{\n    use InteractsWithActions;\n    use InteractsWithForms;\n    use WithImportStore;\n\n    /** @var array<string, array<string, mixed>> */\n    public array $columns = [];\n\n    private ?BaseImporter $importer = null;\n\n    public function mount(string $storeId, ImportEntityType $entityType): void\n    {\n        $this->mountWithImportStore($storeId, $entityType);\n        $this->loadMappings();\n\n        if ($this->columns === []) {\n            $this->autoMap();\n        }\n    }\n\n    public function render(): View\n    {\n        return view('import-wizard-new::livewire.steps.mapping-step', [\n            'headers' => $this->headers(),\n            'rowCount' => $this->rowCount(),\n        ]);\n    }\n\n    #[Computed]\n    public function allFields(): ImportFieldCollection\n    {\n        return $this->getImporter()->allFields();\n    }\n\n    /** @return array<string, EntityLink> */\n    #[Computed]\n    public function entityLinks(): array\n    {\n        return $this->getImporter()->entityLinks();\n    }\n\n    #[Computed]\n    public function unmappedRequired(): ImportFieldCollection\n    {\n        $mappedFieldKeys = $this->mappedFieldKeys();\n\n        return $this->allFields()->filter(\n            fn (ImportField $field): bool => $field->required && ! in_array($field->key, $mappedFieldKeys, true)\n        );\n    }\n\n    #[Computed]\n    public function hasEntityLinks(): bool\n    {\n        return $this->entityLinks() !== [];\n    }\n\n    /** @return list<string> */\n    #[Computed]\n    public function mappedFieldKeys(): array\n    {\n        /** @var list<string> */\n        return collect($this->columns)\n            ->filter(fn (array $m): bool => ($m['entityLink'] ?? null) === null)\n            ->pluck('target')\n            ->values()\n            ->all();\n    }\n\n    public function isMapped(string $source): bool\n    {\n        return isset($this->columns[$source]);\n    }\n\n    public function isTargetMapped(string $target): bool\n    {\n        return collect($this->columns)\n            ->contains(fn (array $m): bool => $m['target'] === $target && ($m['entityLink'] ?? null) === null);\n    }\n\n    public function getMapping(string $source): ?ColumnData\n    {\n        if (! isset($this->columns[$source])) {\n            return null;\n        }\n\n        return ColumnData::from($this->columns[$source]);\n    }\n\n    public function getSourceForTarget(string $target): ?string\n    {\n        return collect($this->columns)\n            ->filter(fn (array $m): bool => $m['target'] === $target && ($m['entityLink'] ?? null) === null)\n            ->keys()\n            ->first();\n    }\n\n    public function getFieldForSource(string $source): ?ImportField\n    {\n        $mapping = $this->getMapping($source);\n\n        if (! $mapping instanceof ColumnData || $mapping->isEntityLinkMapping()) {\n            return null;\n        }\n\n        return $this->allFields()->get($mapping->target);\n    }\n\n    /** @return array{linkKey: string, link: EntityLink, matcherKey: string}|null */\n    public function getEntityLinkForSource(string $source): ?array\n    {\n        $mapping = $this->getMapping($source);\n\n        if (! $mapping instanceof ColumnData || $mapping->isFieldMapping()) {\n            return null;\n        }\n\n        $link = $this->entityLinks()[$mapping->entityLink] ?? null;\n\n        if ($link === null) {\n            return null;\n        }\n\n        return ['linkKey' => $mapping->entityLink, 'link' => $link, 'matcherKey' => $mapping->target];\n    }\n\n    /** @return array<string> */\n    public function previewValues(string $column, int $limit = 5): array\n    {\n        return $this->store()->query()\n            ->limit($limit)\n            ->get()\n            ->pluck('raw_data')\n            ->map(fn (Collection $data): string => (string) ($data[$column] ?? ''))\n            ->all();\n    }\n\n    public function canProceed(): bool\n    {\n        return $this->unmappedRequired()->isEmpty();\n    }\n\n    public function autoMap(): void\n    {\n        $this->autoMapByHeaders();\n        $this->autoMapEntityLinks();\n        $this->inferDataTypes();\n    }\n\n    private function autoMapByHeaders(): void\n    {\n        $headers = $this->headers();\n        $allFields = $this->allFields();\n\n        foreach ($headers as $header) {\n            if ($this->isMapped($header)) {\n                continue;\n            }\n\n            $field = $allFields->guessFor($header);\n            if ($field instanceof ImportField && ! $this->isTargetMapped($field->key)) {\n                $this->columns[$header] = ColumnData::toField($header, $field->key)->toArray();\n            }\n        }\n    }\n\n    private function autoMapEntityLinks(): void\n    {\n        $headers = $this->headers();\n        $entityLinks = $this->entityLinks();\n\n        foreach ($entityLinks as $linkKey => $entityLink) {\n            if ($this->isEntityLinkMapped($linkKey)) {\n                continue;\n            }\n\n            foreach ($headers as $header) {\n                if ($this->isMapped($header)) {\n                    continue;\n                }\n\n                if ($entityLink->matchesHeader($header)) {\n                    $highestMatcher = $entityLink->getHighestPriorityMatcher();\n                    if ($highestMatcher !== null) {\n                        $this->columns[$header] = ColumnData::toEntityLink(\n                            $header,\n                            $highestMatcher->field,\n                            $linkKey,\n                        )->toArray();\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n    public function isEntityLinkMapped(string $linkKey): bool\n    {\n        return collect($this->columns)\n            ->contains(fn (array $m): bool => ($m['entityLink'] ?? null) === $linkKey);\n    }\n\n    /** @return array<string, list<string>> */\n    public function getMappedEntityLinkMatchers(): array\n    {\n        /** @var array<string, list<string>> */\n        return collect($this->columns)\n            ->filter(fn (array $m): bool => ($m['entityLink'] ?? null) !== null)\n            ->groupBy(fn (array $m): string => $m['entityLink'])\n            ->map(fn (Collection $group): array => $group->pluck('target')->values()->all())\n            ->all();\n    }\n\n    private function inferDataTypes(): void\n    {\n        $headers = $this->headers();\n        $inferencer = new DataTypeInferencer(\n            entityName: $this->entityType->value,\n            teamId: $this->import()->team_id,\n        );\n        $allFields = $this->allFields();\n\n        foreach ($headers as $header) {\n            if ($this->isMapped($header)) {\n                continue;\n            }\n\n            $values = $this->previewValues($header, 10);\n            $result = $inferencer->infer($values);\n\n            if ($result->confidence >= 0.8) {\n                $suggestedField = array_find(\n                    $result->suggestedFields,\n                    fn (string $fieldKey): bool => $allFields->hasKey($fieldKey) && ! $this->isTargetMapped($fieldKey)\n                );\n\n                if ($suggestedField !== null) {\n                    $this->columns[$header] = ColumnData::toField($header, $suggestedField)->toArray();\n                }\n            }\n        }\n    }\n\n    public function mapToField(string $source, string $target): void\n    {\n        if ($target === '') {\n            unset($this->columns[$source]);\n\n            return;\n        }\n\n        if (! $this->isTargetMapped($target)) {\n            $this->columns[$source] = ColumnData::toField($source, $target)->toArray();\n        }\n    }\n\n    public function mapToEntityLink(string $source, string $matcherKey, string $entityLinkKey): void\n    {\n        $this->columns[$source] = ColumnData::toEntityLink($source, $matcherKey, $entityLinkKey)->toArray();\n    }\n\n    public function unmapColumn(string $source): void\n    {\n        unset($this->columns[$source]);\n    }\n\n    public function continueAction(): Action\n    {\n        $needsConfirmation = ! $this->hasMatchableFieldMapped();\n\n        $action = Action::make('continue')\n            ->label('Continue')\n            ->color('primary')\n            ->disabled(fn (): bool => ! $this->canProceed())\n            ->action(function (): void {\n                $this->saveMappings();\n                $this->import()->update(['status' => ImportStatus::Reviewing]);\n                $this->dispatch('completed');\n            });\n\n        if ($needsConfirmation) {\n            $action\n                ->requiresConfirmation()\n                ->modalWidth(Width::Large)\n                ->modalIcon('heroicon-o-exclamation-triangle')\n                ->modalIconColor('warning')\n                ->modalHeading('Avoid creating duplicate records')\n                ->modalDescription($this->buildMatchWarningDescription())\n                ->modalSubmitActionLabel('Continue without mapping')\n                ->modalCancelActionLabel('Go Back');\n        }\n\n        return $action;\n    }\n\n    public function hasMatchableFieldMapped(): bool\n    {\n        $matchableFields = collect($this->getImporter()->matchableFields())\n            ->reject(fn (MatchableField $field): bool => $field->isCreate());\n\n        if ($matchableFields->isEmpty()) {\n            return true;\n        }\n\n        $mappedKeys = $this->mappedFieldKeys();\n\n        return $matchableFields\n            ->contains(fn (MatchableField $field): bool => in_array($field->field, $mappedKeys, true));\n    }\n\n    private function buildMatchWarningDescription(): string\n    {\n        $matchableFields = collect($this->getImporter()->matchableFields())\n            ->reject(fn (MatchableField $field): bool => $field->isCreate())\n            ->sortByDesc(fn (MatchableField $field): int => $field->priority);\n\n        $fieldLabels = $matchableFields\n            ->map(fn (MatchableField $field): string => $field->label)\n            ->values()\n            ->all();\n\n        $entityLabel = $this->entityType->label();\n        $fieldList = implode(' or ', $fieldLabels);\n\n        return \"To avoid creating duplicate records, make sure you map a column that uniquely identifies each record.\\n\\nFor {$entityLabel}, map a {$fieldList} column.\";\n    }\n\n    private function saveMappings(): void\n    {\n        $mappings = collect($this->columns)\n            ->map(fn (array $data): ColumnData => ColumnData::from($data))\n            ->values();\n\n        $this->import()->setColumnMappings($mappings);\n    }\n\n    private function loadMappings(): void\n    {\n        $this->columns = $this->import()->columnMappings()\n            ->keyBy('source')\n            ->map(fn (ColumnData $m): array => $m->toArray())\n            ->all();\n    }\n\n    private function getImporter(): BaseImporter\n    {\n        return $this->importer ??= $this->import()->getImporter();\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Livewire/Steps/PreviewStep.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Livewire\\Steps;\n\nuse Filament\\Actions\\Action;\nuse Filament\\Actions\\Concerns\\InteractsWithActions;\nuse Filament\\Actions\\Contracts\\HasActions;\nuse Filament\\Forms\\Concerns\\InteractsWithForms;\nuse Filament\\Forms\\Contracts\\HasForms;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Pagination\\LengthAwarePaginator as Paginator;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Bus;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\View\\View;\nuse Livewire\\Attributes\\Computed;\nuse Livewire\\Component;\nuse Livewire\\WithPagination;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Jobs\\ExecuteImportJob;\nuse Relaticle\\ImportWizard\\Livewire\\Concerns\\WithImportStore;\nuse Relaticle\\ImportWizard\\Livewire\\ImportWizard;\nuse Relaticle\\ImportWizard\\Models\\FailedImportRow;\nuse Relaticle\\ImportWizard\\Store\\ImportRow;\nuse Symfony\\Component\\HttpFoundation\\StreamedResponse;\n\nfinal class PreviewStep extends Component implements HasActions, HasForms\n{\n    use InteractsWithActions;\n    use InteractsWithForms;\n    use WithImportStore;\n    use WithPagination;\n\n    public ?string $batchId = null;\n\n    public ?string $matchResolutionBatchId = null;\n\n    public bool $isCompleted = false;\n\n    public string $activeTab = 'all';\n\n    public function mount(string $storeId, ImportEntityType $entityType): void\n    {\n        $this->mountWithImportStore($storeId, $entityType);\n        $this->syncCompletionState();\n        $this->syncMatchResolutionState();\n    }\n\n    public function setActiveTab(string $tab): void\n    {\n        $this->activeTab = $tab;\n        $this->resetPage();\n    }\n\n    #[Computed]\n    public function createCount(): int\n    {\n        return $this->store()->query()->toCreate()->count();\n    }\n\n    #[Computed]\n    public function updateCount(): int\n    {\n        return $this->store()->query()->toUpdate()->count();\n    }\n\n    #[Computed]\n    public function skipCount(): int\n    {\n        return $this->store()->query()->toSkip()->count();\n    }\n\n    #[Computed]\n    public function errorCount(): int\n    {\n        return $this->store()->query()\n            ->whereNotNull('validation')\n            ->where('validation', '!=', '{}')\n            ->count();\n    }\n\n    #[Computed]\n    public function isImporting(): bool\n    {\n        if ($this->isCompleted) {\n            return false;\n        }\n\n        return $this->batchId !== null\n            || $this->import()->status === ImportStatus::Importing;\n    }\n\n    #[Computed]\n    public function progressPercent(): int\n    {\n        if ($this->isCompleted) {\n            return 100;\n        }\n\n        $processed = $this->processedCount();\n        $total = $this->totalRowCount();\n\n        if ($processed === 0 || $total === 0) {\n            return 0;\n        }\n\n        return (int) min(round(($processed / $total) * 100), 99);\n    }\n\n    #[Computed]\n    public function processedCount(): int\n    {\n        return array_sum($this->results());\n    }\n\n    #[Computed]\n    public function matchField(): ?string\n    {\n        $mappedFieldKeys = $this->columns()\n            ->filter(fn (ColumnData $col): bool => $col->isFieldMapping())\n            ->pluck('target')\n            ->all();\n\n        return $this->import()->getImporter()\n            ->getMatchFieldForMappedColumns($mappedFieldKeys)\n            ?->label;\n    }\n\n    #[Computed]\n    public function totalRowCount(): int\n    {\n        return $this->store()->query()->count();\n    }\n\n    /** @return Collection<int, ColumnData> */\n    #[Computed]\n    public function columns(): Collection\n    {\n        return $this->import()->columnMappings();\n    }\n\n    /** @return LengthAwarePaginator<int, ImportRow> */\n    #[Computed]\n    public function previewRows(): LengthAwarePaginator\n    {\n        $query = $this->store()->query()->orderBy('row_number');\n\n        if ($this->activeTab !== 'all') {\n            $query->whereRaw(\n                \"EXISTS (SELECT 1 FROM json_each(relationships) WHERE json_extract(value, '$.relationship') = ?)\",\n                [$this->activeTab]\n            );\n        }\n\n        return $query->paginate(25);\n    }\n\n    /**\n     * @return array<int, array{key: string, label: string, icon: string, count: int}>\n     */\n    #[Computed]\n    public function relationshipTabs(): array\n    {\n        $connection = $this->store()->connection();\n\n        return $this->columns()\n            ->filter(fn (ColumnData $col): bool => $col->isEntityLinkMapping())\n            ->unique(fn (ColumnData $col): string => $col->entityLink)\n            ->map(function (ColumnData $col) use ($connection): array {\n                $uniqueCount = $connection->selectOne(\n                    \"SELECT COUNT(*) as total FROM ({$this->uniqueRelationshipSubquery()}) sub\",\n                    [$col->entityLink],\n                );\n\n                return [\n                    'key' => $col->entityLink,\n                    'label' => $col->getLabel(),\n                    'icon' => $col->getIcon(),\n                    'count' => (int) $uniqueCount->total,\n                ];\n            })\n            ->values()\n            ->all();\n    }\n\n    /** @phpstan-ignore missingType.generics */\n    #[Computed]\n    public function relationshipSummary(): Paginator\n    {\n        if ($this->activeTab === 'all') {\n            return new Paginator([], 0, 25);\n        }\n\n        $perPage = 25;\n        $page = $this->getPage();\n        $offset = ($page - 1) * $perPage;\n        $connection = $this->store()->connection();\n        $groupBy = $this->relationshipGroupByClause();\n\n        $rows = $connection->select(\"\n            SELECT\n                json_extract(je.value, '$.action') as action,\n                COALESCE(json_extract(je.value, '$.name'), 'Record #' || json_extract(je.value, '$.id')) as name,\n                json_extract(je.value, '$.id') as id,\n                COUNT(*) as count\n            FROM import_rows, json_each(import_rows.relationships) AS je\n            WHERE json_extract(je.value, '$.relationship') = ?\n            GROUP BY action, {$groupBy}\n            ORDER BY count DESC\n            LIMIT ? OFFSET ?\n        \", [$this->activeTab, $perPage, $offset]);\n\n        $total = $connection->selectOne(\n            \"SELECT COUNT(*) as total FROM ({$this->uniqueRelationshipSubquery()}) sub\",\n            [$this->activeTab],\n        );\n\n        /** @var list<array{action: string, name: string, id: string|null, count: int}> $items */\n        $items = array_map(fn (\\stdClass $row): array => [\n            'action' => $row->action === 'update' ? 'link' : 'create',\n            'name' => $row->name,\n            'id' => $row->id,\n            'count' => (int) $row->count,\n        ], $rows);\n\n        return new Paginator(\n            $items,\n            $total->total,\n            $perPage,\n            $page,\n        );\n    }\n\n    /** @return array{link: int, create: int} */\n    #[Computed]\n    public function relationshipStats(): array\n    {\n        if ($this->activeTab === 'all') {\n            return ['link' => 0, 'create' => 0];\n        }\n\n        $rows = $this->store()->connection()->select(\"\n            SELECT action, COUNT(*) as count FROM (\n                SELECT json_extract(je.value, '$.action') as action\n                FROM import_rows, json_each(import_rows.relationships) AS je\n                WHERE json_extract(je.value, '$.relationship') = ?\n                GROUP BY action, {$this->relationshipGroupByClause()}\n            )\n            GROUP BY action\n        \", [$this->activeTab]);\n\n        $stats = ['link' => 0, 'create' => 0];\n\n        foreach ($rows as $row) {\n            if ($row->action === 'update') {\n                $stats['link'] = (int) $row->count;\n            } else {\n                $stats['create'] = (int) $row->count;\n            }\n        }\n\n        return $stats;\n    }\n\n    /** @return array{created: int, updated: int, skipped: int, failed: int} */\n    #[Computed]\n    public function results(): array\n    {\n        $import = $this->import();\n\n        return [\n            'created' => $import->created_rows,\n            'updated' => $import->updated_rows,\n            'skipped' => $import->skipped_rows,\n            'failed' => $import->failed_rows,\n        ];\n    }\n\n    public function startImportAction(): Action\n    {\n        return Action::make('startImport')\n            ->label($this->matchResolutionBatchId !== null ? 'Resolving matches...' : 'Start Import')\n            ->color('primary')\n            ->icon($this->matchResolutionBatchId !== null ? Heroicon::OutlinedArrowPath : Heroicon::OutlinedPlay)\n            ->disabled(fn (): bool => $this->matchResolutionBatchId !== null)\n            ->requiresConfirmation()\n            ->modalHeading('Start import')\n            ->modalDescription('Are you sure that you want to start running this import?')\n            ->modalSubmitActionLabel('Start import')\n            ->action(fn () => $this->startImport());\n    }\n\n    public function downloadFailedRowsAction(): Action\n    {\n        return Action::make('downloadFailedRows')\n            ->label('Download Failed Rows')\n            ->color('danger')\n            ->icon(Heroicon::OutlinedArrowDownTray)\n            ->visible(fn (): bool => $this->isCompleted && $this->import()->failed_rows > 0)\n            ->action(fn (): StreamedResponse => $this->downloadFailedRows());\n    }\n\n    public function downloadFailedRows(): StreamedResponse\n    {\n        $import = $this->import();\n        $headers = $import->headers;\n\n        return response()->streamDownload(function () use ($import, $headers): void {\n            $handle = fopen('php://output', 'w');\n\n            if ($handle === false) {\n                return;\n            }\n\n            fwrite($handle, \"\\xEF\\xBB\\xBF\");\n            fputcsv($handle, [...$headers, 'Import Error'], escape: '\\\\');\n\n            $import->failedRows()\n                ->lazyById(100)\n                ->each(function (FailedImportRow $row) use ($handle, $headers): void {\n                    $values = [];\n\n                    foreach ($headers as $header) {\n                        $values[] = $row->data[$header] ?? '';\n                    }\n\n                    $values[] = $row->validation_error ?? '';\n                    fputcsv($handle, $values, escape: '\\\\');\n                });\n\n            fclose($handle);\n        }, 'failed-rows.csv', ['Content-Type' => 'text/csv']);\n    }\n\n    public function checkMatchResolution(): void\n    {\n        $this->syncMatchResolutionState();\n\n        if ($this->matchResolutionBatchId === null) {\n            $this->dispatch('match-resolution-complete');\n        }\n    }\n\n    public function startImport(): void\n    {\n        if ($this->matchResolutionBatchId !== null || $this->batchId !== null || $this->isCompleted) {\n            return;\n        }\n\n        if (! $this->import()->transitionToImporting()) {\n            return;\n        }\n\n        $batch = Bus::batch([\n            new ExecuteImportJob(\n                importId: $this->import()->id,\n                teamId: $this->import()->team_id,\n            ),\n        ])->dispatch();\n\n        $this->batchId = $batch->id;\n        $this->dispatch('import-polling-start');\n        $this->dispatch('import-started')->to(ImportWizard::class);\n    }\n\n    public function checkImportProgress(): void\n    {\n        $this->refreshImport();\n        $this->syncCompletionState();\n\n        unset($this->results, $this->progressPercent, $this->processedCount, $this->isImporting);\n\n        if ($this->isCompleted) {\n            $this->dispatch('import-polling-complete');\n        }\n    }\n\n    public function render(): View\n    {\n        return view('import-wizard-new::livewire.steps.preview-step');\n    }\n\n    private function syncCompletionState(): void\n    {\n        $this->isCompleted = in_array($this->import()->status, [\n            ImportStatus::Completed,\n            ImportStatus::Failed,\n        ], true);\n    }\n\n    private function syncMatchResolutionState(): void\n    {\n        if ($this->matchResolutionBatchId !== null) {\n            $batch = Bus::findBatch($this->matchResolutionBatchId);\n\n            if ($batch === null || $batch->finished()) {\n                $this->matchResolutionBatchId = null;\n            }\n\n            return;\n        }\n\n        $batchId = Cache::get(\"import-{$this->storeId}-match-resolution-batch\");\n\n        if ($batchId === null) {\n            return;\n        }\n\n        $batch = Bus::findBatch($batchId);\n\n        $this->matchResolutionBatchId = ($batch !== null && ! $batch->finished())\n            ? $batchId\n            : null;\n    }\n\n    private function relationshipGroupByClause(): string\n    {\n        return \"CASE\n            WHEN json_extract(je.value, '$.action') = 'update' THEN json_extract(je.value, '$.id')\n            ELSE json_extract(je.value, '$.name')\n        END\";\n    }\n\n    private function uniqueRelationshipSubquery(): string\n    {\n        return \"SELECT 1\n            FROM import_rows, json_each(import_rows.relationships) AS je\n            WHERE json_extract(je.value, '$.relationship') = ?\n            GROUP BY json_extract(je.value, '$.action'), {$this->relationshipGroupByClause()}\";\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Livewire/Steps/ReviewStep.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Livewire\\Steps;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Database\\Connection;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Bus;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\View\\View;\nuse Livewire\\Attributes\\Computed;\nuse Livewire\\Component;\nuse Livewire\\WithPagination;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\nuse Relaticle\\ImportWizard\\Enums\\ReviewFilter;\nuse Relaticle\\ImportWizard\\Enums\\SortDirection;\nuse Relaticle\\ImportWizard\\Enums\\SortField;\nuse Relaticle\\ImportWizard\\Jobs\\ResolveMatchesJob;\nuse Relaticle\\ImportWizard\\Jobs\\ValidateColumnJob;\nuse Relaticle\\ImportWizard\\Livewire\\Concerns\\WithImportStore;\nuse Relaticle\\ImportWizard\\Store\\ImportRow;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkValidator;\nuse Relaticle\\ImportWizard\\Support\\Validation\\ColumnValidator;\nuse Relaticle\\ImportWizard\\Support\\Validation\\ValidationError;\n\nfinal class ReviewStep extends Component\n{\n    use WithImportStore;\n    use WithPagination;\n\n    public string $search = '';\n\n    public ReviewFilter $filter = ReviewFilter::All;\n\n    public SortField $sortField = SortField::Count;\n\n    public SortDirection $sortDirection = SortDirection::Desc;\n\n    /** @var Collection<int, ColumnData> */\n    public Collection $columns;\n\n    public ColumnData $selectedColumn;\n\n    /** @var array<string, string> Column source => batch ID */\n    public array $batchIds = [];\n\n    private function connection(): Connection\n    {\n        return $this->store()->connection();\n    }\n\n    private function selectedColumnJsonPath(): string\n    {\n        return \"$.{$this->selectedColumn->source}\";\n    }\n\n    private function validateValue(ColumnData $column, string $value, bool $isCorrection = false): ?string\n    {\n        if ($column->isEntityLinkMapping()) {\n            return $this->validateEntityLinkValue($column, $value);\n        }\n\n        if ($isCorrection && $column->getType()->isDateOrDateTime()) {\n            return DateFormat::ISO->parse($value, $column->getType()->isTimestamp()) instanceof Carbon\n                ? null\n                : 'Invalid date format';\n        }\n\n        return (new ColumnValidator)->validate($column, $value)?->toStorageFormat();\n    }\n\n    private function validateEntityLinkValue(ColumnData $column, string $value): ?string\n    {\n        $validator = new EntityLinkValidator($this->import()->team_id);\n\n        return $validator->validateFromColumn($column, $this->import()->getImporter(), $value);\n    }\n\n    private function updateValidationForRawValue(string $jsonPath, string $rawValue, ?string $error): void\n    {\n        if ($error === null) {\n            $this->connection()->statement('\n                UPDATE import_rows\n                SET validation = json_remove(validation, ?)\n                WHERE json_extract(raw_data, ?) = ?\n            ', [$jsonPath, $jsonPath, $rawValue]);\n\n            return;\n        }\n\n        $this->connection()->statement(\"\n            UPDATE import_rows\n            SET validation = json_set(COALESCE(validation, '{}'), ?, ?)\n            WHERE json_extract(raw_data, ?) = ?\n        \", [$jsonPath, $error, $jsonPath, $rawValue]);\n    }\n\n    private function validateColumnAsync(ColumnData $column): string\n    {\n        $batch = Bus::batch([\n            new ValidateColumnJob($this->import()->id, $column),\n        ])\n            ->name(\"Validate {$column->source}\")\n            ->dispatch();\n\n        return $batch->id;\n    }\n\n    private function clearRelationshipsForReentry(): void\n    {\n        $this->connection()->statement('UPDATE import_rows SET relationships = NULL');\n    }\n\n    private function dispatchMatchResolution(): string\n    {\n        $batch = Bus::batch([\n            new ResolveMatchesJob(\n                importId: $this->import()->id,\n            ),\n        ])\n            ->name('Match resolution')\n            ->dispatch();\n\n        return $batch->id;\n    }\n\n    public function mount(): void\n    {\n        $this->columns = $this->import()->columnMappings();\n        $this->selectedColumn = $this->columns->first();\n\n        $currentHash = $this->currentMappingsHash();\n        $cached = Cache::get($this->validationCacheKey());\n\n        if ($cached !== null && $cached['hash'] === $currentHash) {\n            $this->batchIds = $this->filterRunningBatches($cached['batch_ids']);\n\n            return;\n        }\n\n        $this->cancelOldBatches($cached);\n        $this->clearRelationshipsForReentry();\n\n        foreach ($this->columns as $column) {\n            $this->batchIds[$column->source] = $this->validateColumnAsync($column);\n        }\n\n        $this->batchIds['__match_resolution'] = $this->dispatchMatchResolution();\n\n        $this->cacheValidationState($currentHash);\n    }\n\n    public function hydrate(): void\n    {\n        $this->columns = $this->import()->columnMappings();\n        $this->selectedColumn = $this->import()->getColumnMapping($this->selectedColumn->source);\n    }\n\n    public function render(): View\n    {\n        return view('import-wizard-new::livewire.steps.review-step');\n    }\n\n    /** @return LengthAwarePaginator<int, ImportRow> */\n    #[Computed]\n    public function selectedColumnRows(): LengthAwarePaginator\n    {\n        $column = $this->selectedColumn->source;\n\n        return $this->store()->query()\n            ->uniqueValuesFor($column)\n            ->forFilter($this->filter, $column)\n            ->when(filled($this->search), fn (Builder $q) => $q->searchValue($column, $this->search))\n            ->orderBy($this->sortField->value, $this->sortDirection->value)\n            ->paginate(100);\n    }\n\n    /** @return array<string, int> */\n    #[Computed]\n    public function filterCounts(): array\n    {\n        return ImportRow::countUniqueValuesByFilter(\n            $this->store()->query(),\n            $this->selectedColumn->source\n        );\n    }\n\n    public function selectColumn(string $columnSource): void\n    {\n        $this->selectedColumn = $this->columns->firstWhere('source', $columnSource);\n        $this->setFilter(ReviewFilter::All->value);\n    }\n\n    /** @return array<int, array{label: string, value: string}> */\n    #[Computed]\n    public function choiceOptions(): array\n    {\n        if (! $this->selectedColumn->isMultiChoicePredefined()) {\n            return [];\n        }\n\n        return $this->selectedColumn->importField->options ?? [];\n    }\n\n    public function setFilter(string $filter): void\n    {\n        $this->filter = ReviewFilter::from($filter);\n        $this->resetPage();\n    }\n\n    public function setSortField(string $field): void\n    {\n        $this->sortField = SortField::from($field);\n        $this->resetPage();\n    }\n\n    public function setSortDirection(string $direction): void\n    {\n        $this->sortDirection = SortDirection::from($direction);\n        $this->resetPage();\n    }\n\n    public function clearFilters(): void\n    {\n        $this->search = '';\n        $this->filter = ReviewFilter::All;\n        $this->resetPage();\n    }\n\n    public function updatedSearch(): void\n    {\n        $this->resetPage();\n    }\n\n    public function setColumnFormat(string $type, string $value): void\n    {\n        $currentValue = match ($type) {\n            'date' => $this->selectedColumn->dateFormat?->value,\n            'number' => $this->selectedColumn->numberFormat?->value,\n            default => null,\n        };\n\n        if ($currentValue === $value) {\n            return;\n        }\n\n        $updated = match ($type) {\n            'date' => $this->selectedColumn->withDateFormat(DateFormat::from($value)),\n            'number' => $this->selectedColumn->withNumberFormat(NumberFormat::from($value)),\n            default => throw new \\InvalidArgumentException(\"Unknown format type: {$type}\"),\n        };\n\n        $this->import()->updateColumnMapping($this->selectedColumn->source, $updated);\n\n        $this->columns = $this->columns->map(\n            fn (ColumnData $col): ColumnData => $col->source === $updated->source ? $updated : $col\n        );\n        $this->selectedColumn = $updated;\n\n        $oldBatchId = $this->batchIds[$this->selectedColumn->source] ?? null;\n\n        if ($oldBatchId !== null) {\n            Bus::findBatch($oldBatchId)?->cancel();\n        }\n\n        $this->batchIds[$this->selectedColumn->source] = $this->validateColumnAsync($this->selectedColumn);\n\n        $this->cacheValidationState($this->currentMappingsHash());\n    }\n\n    /** @return array<string, string> */\n    public function updateMappedValue(string $rawValue, string $newValue): array\n    {\n        if (blank($newValue)) {\n            $this->skipValue($rawValue);\n\n            return [];\n        }\n\n        $error = $this->validateValue($this->selectedColumn, $newValue, isCorrection: true);\n        $jsonPath = $this->selectedColumnJsonPath();\n\n        $this->connection()->statement(\"\n            UPDATE import_rows\n            SET corrections = json_set(COALESCE(corrections, '{}'), ?, ?)\n            WHERE json_extract(raw_data, ?) = ?\n        \", [$jsonPath, $newValue, $jsonPath, $rawValue]);\n\n        $this->updateValidationForRawValue($jsonPath, $rawValue, $error);\n\n        unset($this->columnErrorStatuses);\n\n        if ($error === null || ! $this->selectedColumn->isMultiChoiceArbitrary()) {\n            return [];\n        }\n\n        $validationError = ValidationError::fromStorageFormat($error);\n\n        return $validationError?->getItemErrors() ?? [];\n    }\n\n    public function undoCorrection(string $rawValue): void\n    {\n        $error = $this->validateValue($this->selectedColumn, $rawValue, isCorrection: false);\n        $jsonPath = $this->selectedColumnJsonPath();\n\n        $this->connection()->statement('\n            UPDATE import_rows\n            SET corrections = json_remove(corrections, ?)\n            WHERE json_extract(raw_data, ?) = ?\n        ', [$jsonPath, $jsonPath, $rawValue]);\n\n        $this->updateValidationForRawValue($jsonPath, $rawValue, $error);\n\n        unset($this->columnErrorStatuses);\n    }\n\n    public function skipValue(string $rawValue): void\n    {\n        $jsonPath = $this->selectedColumnJsonPath();\n        $error = $this->validateValue($this->selectedColumn, $rawValue, isCorrection: false);\n\n        $this->connection()->statement(\"\n            UPDATE import_rows\n            SET skipped = json_set(COALESCE(skipped, '{}'), ?, json('true')),\n                corrections = json_remove(corrections, ?)\n            WHERE json_extract(raw_data, ?) = ?\n        \", [$jsonPath, $jsonPath, $jsonPath, $rawValue]);\n\n        $this->updateValidationForRawValue($jsonPath, $rawValue, $error);\n\n        unset($this->columnErrorStatuses);\n    }\n\n    public function unskipValue(string $rawValue): void\n    {\n        $jsonPath = $this->selectedColumnJsonPath();\n\n        $this->connection()->statement('\n            UPDATE import_rows\n            SET skipped = json_remove(skipped, ?)\n            WHERE json_extract(raw_data, ?) = ?\n        ', [$jsonPath, $jsonPath, $rawValue]);\n\n        unset($this->columnErrorStatuses);\n    }\n\n    public function checkProgress(): void\n    {\n        $hasCompleted = false;\n\n        foreach ($this->batchIds as $columnSource => $batchId) {\n            if (Bus::findBatch($batchId)?->finished()) {\n                unset($this->batchIds[$columnSource]);\n                $this->dispatch('validation-complete', column: $columnSource);\n                $hasCompleted = true;\n            }\n        }\n\n        if ($hasCompleted) {\n            unset($this->columnErrorStatuses);\n            $this->cacheValidationState($this->currentMappingsHash());\n        }\n\n        if ($this->batchIds === []) {\n            $this->dispatch('polling-complete');\n        }\n    }\n\n    #[Computed]\n    public function isSelectedColumnValidating(): bool\n    {\n        return isset($this->batchIds[$this->selectedColumn->source]);\n    }\n\n    #[Computed]\n    public function isValidating(): bool\n    {\n        return array_any(\n            array_keys($this->batchIds),\n            fn (string $key): bool => $key !== '__match_resolution'\n        );\n    }\n\n    /** @return array<string, bool> */\n    #[Computed(persist: true, seconds: 60)]\n    public function columnErrorStatuses(): array\n    {\n        $columnSources = $this->columns->pluck('source')->all();\n\n        return ImportRow::getColumnErrorStatuses($this->store()->query(), $columnSources);\n    }\n\n    public function continueToPreview(): void\n    {\n        if ($this->isValidating()) {\n            return;\n        }\n\n        $matchBatchId = $this->batchIds['__match_resolution'] ?? null;\n\n        if ($matchBatchId !== null) {\n            Cache::put(\n                \"import-{$this->storeId}-match-resolution-batch\",\n                $matchBatchId,\n                now()->addHour(),\n            );\n        }\n\n        $this->import()->update(['status' => ImportStatus::Previewing]);\n        $this->dispatch('completed');\n    }\n\n    private function currentMappingsHash(): string\n    {\n        $mappings = $this->import()->column_mappings ?? [];\n\n        return hash('xxh128', (string) json_encode($mappings));\n    }\n\n    private function validationCacheKey(): string\n    {\n        return \"import-{$this->storeId}-validation\";\n    }\n\n    private function cacheValidationState(string $hash): void\n    {\n        Cache::put($this->validationCacheKey(), [\n            'hash' => $hash,\n            'batch_ids' => $this->batchIds,\n        ], now()->addHour());\n    }\n\n    /**\n     * @param  array<string, string>  $batchIds\n     * @return array<string, string>\n     */\n    private function filterRunningBatches(array $batchIds): array\n    {\n        return array_filter($batchIds, function (string $batchId): bool {\n            $batch = Bus::findBatch($batchId);\n\n            return $batch !== null && ! $batch->finished();\n        });\n    }\n\n    /** @param array{hash: string, batch_ids: array<string, string>}|null $cached */\n    private function cancelOldBatches(?array $cached): void\n    {\n        if ($cached === null) {\n            return;\n        }\n\n        foreach ($cached['batch_ids'] as $batchId) {\n            Bus::findBatch($batchId)?->cancel();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Livewire/Steps/UploadStep.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Livewire\\Steps;\n\nuse Filament\\Forms\\Concerns\\InteractsWithForms;\nuse Filament\\Forms\\Contracts\\HasForms;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\LazyCollection;\nuse Illuminate\\View\\View;\nuse Livewire\\Attributes\\Locked;\nuse Livewire\\Attributes\\Validate;\nuse Livewire\\Component;\nuse Livewire\\Features\\SupportFileUploads\\TemporaryUploadedFile;\nuse Livewire\\WithFileUploads;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Spatie\\SimpleExcel\\SimpleExcelReader;\n\nfinal class UploadStep extends Component implements HasForms\n{\n    use InteractsWithForms;\n    use WithFileUploads;\n\n    #[Locked]\n    public ImportEntityType $entityType;\n\n    #[Locked]\n    public ?string $storeId = null;\n\n    #[Validate('required|file|max:10240|mimes:csv,txt')]\n    public ?TemporaryUploadedFile $uploadedFile = null;\n\n    /** @var list<string> */\n    public array $headers = [];\n\n    public int $rowCount = 0;\n\n    public bool $isParsed = false;\n\n    private ?Import $import = null;\n\n    private ?ImportStore $store = null;\n\n    public function mount(ImportEntityType $entityType, ?string $storeId = null): void\n    {\n        $this->entityType = $entityType;\n        $this->storeId = $storeId;\n\n        if ($storeId === null) {\n            return;\n        }\n\n        $this->import = Import::query()\n            ->forTeam($this->getCurrentTeamId() ?? '')\n            ->find($storeId);\n\n        if (! $this->import instanceof Import) {\n            return;\n        }\n\n        $this->headers = $this->import->headers ?? [];\n        $this->rowCount = $this->import->total_rows;\n        $this->isParsed = true;\n    }\n\n    private function getCurrentTeamId(): ?string\n    {\n        $tenant = filament()->getTenant();\n\n        return $tenant instanceof Model ? (string) $tenant->getKey() : null;\n    }\n\n    public function render(): View\n    {\n        return view('import-wizard-new::livewire.steps.upload-step');\n    }\n\n    public function updatedUploadedFile(): void\n    {\n        $this->resetErrorBag('uploadedFile');\n        $this->validateFile();\n    }\n\n    private function validateFile(): void\n    {\n        if (! $this->uploadedFile instanceof TemporaryUploadedFile) {\n            return;\n        }\n\n        $this->cleanupExisting();\n        $this->reset(['headers', 'rowCount', 'isParsed']);\n\n        try {\n            $reader = SimpleExcelReader::create($this->uploadedFile->getRealPath())->trimHeaderRow();\n            $rawHeaders = $reader->getHeaders();\n\n            if (blank($rawHeaders)) {\n                $this->addError('uploadedFile', 'CSV file is empty');\n\n                return;\n            }\n\n            $headers = $this->processHeaders($rawHeaders);\n            if ($headers === null) {\n                return;\n            }\n\n            $rowCount = $reader\n                ->getRows()\n                ->reject(fn (array $row): bool => array_all($row, blank(...)))\n                ->take($this->maxRows() + 1)\n                ->count();\n\n            if ($rowCount === 0) {\n                $this->addError('uploadedFile', 'CSV file has no data rows');\n\n                return;\n            }\n\n            if ($rowCount > $this->maxRows()) {\n                $this->addError('uploadedFile', \"Maximum {$this->maxRows()} rows allowed.\");\n\n                return;\n            }\n\n            $this->headers = $headers;\n            $this->rowCount = $rowCount;\n            $this->isParsed = true;\n        } catch (\\Exception $e) {\n            report($e);\n            $this->addError('uploadedFile', 'Unable to process this file. Please check the format and try again.');\n        }\n    }\n\n    public function continueToMapping(): void\n    {\n        if (! $this->isParsed || ! $this->uploadedFile instanceof TemporaryUploadedFile) {\n            $this->addError('uploadedFile', 'File no longer available. Please re-upload.');\n            $this->reset(['headers', 'rowCount', 'isParsed']);\n\n            return;\n        }\n\n        $teamId = $this->getCurrentTeamId();\n\n        if (blank($teamId)) {\n            $this->addError('uploadedFile', 'Unable to determine your workspace. Please refresh and try again.');\n\n            return;\n        }\n\n        try {\n            $this->import = Import::query()->create([\n                'team_id' => $teamId,\n                'user_id' => (string) auth()->id(),\n                'entity_type' => $this->entityType,\n                'file_name' => $this->uploadedFile->getClientOriginalName(),\n                'status' => ImportStatus::Uploading,\n                'total_rows' => 0,\n                'headers' => $this->headers,\n            ]);\n\n            $this->store = ImportStore::create($this->import->id);\n\n            $rowCount = 0;\n\n            SimpleExcelReader::create($this->uploadedFile->getRealPath())\n                ->trimHeaderRow()\n                ->getRows()\n                ->reject(fn (array $row): bool => array_all($row, blank(...)))\n                ->take($this->maxRows())\n                ->map(function (array $row) use (&$rowCount): array {\n                    return [\n                        'row_number' => ++$rowCount + 1,\n                        'raw_data' => json_encode(\n                            array_combine($this->headers, $this->normalizeRow($row)),\n                            JSON_UNESCAPED_UNICODE\n                        ) ?: '{}',\n                        'validation' => null,\n                        'corrections' => null,\n                    ];\n                })\n                ->chunk($this->chunkSize())\n                ->each(fn (LazyCollection $chunk) => $this->store->query()->insert($chunk->all()));\n\n            if ($rowCount === 0) {\n                $this->store->destroy();\n                $this->store = null;\n                $this->import->delete();\n                $this->import = null;\n                $this->addError('uploadedFile', 'Could not read file. Please re-upload.');\n                $this->reset(['headers', 'rowCount', 'isParsed']);\n\n                return;\n            }\n\n            $this->import->update([\n                'total_rows' => $rowCount,\n                'status' => ImportStatus::Mapping,\n            ]);\n\n            $this->dispatch('completed', storeId: $this->import->id, rowCount: $rowCount, columnCount: count($this->headers));\n        } catch (\\Exception $e) {\n            report($e);\n\n            if ($this->store !== null) { /** @phpstan-ignore notIdentical.alwaysFalse */\n                $this->store->destroy();\n                $this->store = null;\n            }\n\n            if ($this->import !== null) { /** @phpstan-ignore notIdentical.alwaysTrue */\n                $this->import->delete();\n                $this->import = null;\n            }\n            $this->addError('uploadedFile', 'Unable to process this file. Please try again or use a different file.');\n        }\n    }\n\n    /**\n     * @param  array<int|string, string>  $rawHeaders\n     * @return list<string>|null\n     */\n    private function processHeaders(array $rawHeaders): ?array\n    {\n        /** @var list<string> $headers */\n        $headers = collect($rawHeaders)\n            ->values()\n            ->map(fn (string $h, int $i): string => filled($h) ? $h : 'Column_'.($i + 1))\n            ->map(fn (string $h): string => preg_replace('/[^a-zA-Z0-9_ \\-]/', '', $h))\n            ->map(fn (string $h, int $i): string => filled($h) ? $h : 'Column_'.($i + 1))\n            ->all();\n\n        if (count($headers) !== count(array_unique($headers))) {\n            $this->addError('uploadedFile', 'Duplicate column names found.');\n\n            return null;\n        }\n\n        return $headers;\n    }\n\n    /**\n     * @param  array<string, mixed>  $row\n     * @return list<string>\n     */\n    private function normalizeRow(array $row): array\n    {\n        $headerCount = count($this->headers);\n        $values = array_values($row);\n\n        return array_slice(array_pad($values, $headerCount, ''), 0, $headerCount);\n    }\n\n    public function removeFile(): void\n    {\n        $this->cleanupExisting();\n        $this->reset(['storeId', 'uploadedFile', 'headers', 'rowCount', 'isParsed']);\n    }\n\n    private function cleanupExisting(): void\n    {\n        if ($this->store instanceof ImportStore) {\n            $this->store->destroy();\n            $this->store = null;\n        }\n\n        if ($this->import instanceof Import) {\n            $this->import->delete();\n            $this->import = null;\n        }\n    }\n\n    private function maxRows(): int\n    {\n        return once(fn (): int => (int) config('import-wizard.max_rows', 10_000));\n    }\n\n    private function chunkSize(): int\n    {\n        return once(fn (): int => (int) config('import-wizard.chunk_size', 500));\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Models/FailedImportRow.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\MassPrunable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\n\n/**\n * @property string $id\n * @property string $import_id\n * @property string $team_id\n * @property array<string, mixed> $data\n * @property string|null $validation_error\n */\nfinal class FailedImportRow extends Model\n{\n    use HasUlids;\n    use MassPrunable;\n\n    /** @var list<string> */\n    protected $fillable = [\n        'import_id',\n        'team_id',\n        'data',\n        'validation_error',\n    ];\n\n    protected function casts(): array\n    {\n        return [\n            'data' => 'array',\n        ];\n    }\n\n    /** @return BelongsTo<Import, $this> */\n    public function import(): BelongsTo\n    {\n        return $this->belongsTo(Import::class);\n    }\n\n    /** @return Builder<static> */\n    public function prunable(): Builder\n    {\n        return self::query()->where('created_at', '<=', now()->subMonth());\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Models/Import.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Models;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Attributes\\Scope;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\n\n/**\n * @property string $id\n * @property string $team_id\n * @property string $user_id\n * @property ImportEntityType $entity_type\n * @property string $file_name\n * @property ImportStatus $status\n * @property list<string> $headers\n * @property list<array<string, mixed>> $column_mappings\n * @property Carbon|null $completed_at\n * @property int $total_rows\n * @property int $created_rows\n * @property int $updated_rows\n * @property int $skipped_rows\n * @property int $failed_rows\n */\nfinal class Import extends Model\n{\n    use HasUlids;\n\n    /** @var list<string> */\n    protected $fillable = [\n        'team_id',\n        'user_id',\n        'entity_type',\n        'file_name',\n        'status',\n        'total_rows',\n        'headers',\n        'column_mappings',\n        'created_rows',\n        'updated_rows',\n        'skipped_rows',\n        'failed_rows',\n        'completed_at',\n    ];\n\n    private ?BaseImporter $importerCache = null;\n\n    protected function casts(): array\n    {\n        return [\n            'entity_type' => ImportEntityType::class,\n            'status' => ImportStatus::class,\n            'headers' => 'array',\n            'column_mappings' => 'array',\n            'completed_at' => 'datetime',\n            'total_rows' => 'integer',\n            'created_rows' => 'integer',\n            'updated_rows' => 'integer',\n            'skipped_rows' => 'integer',\n            'failed_rows' => 'integer',\n        ];\n    }\n\n    /** @return BelongsTo<User, $this> */\n    public function user(): BelongsTo\n    {\n        return $this->belongsTo(User::class);\n    }\n\n    /** @return BelongsTo<Team, $this> */\n    public function team(): BelongsTo\n    {\n        return $this->belongsTo(Team::class);\n    }\n\n    /** @return HasMany<FailedImportRow, $this> */\n    public function failedRows(): HasMany\n    {\n        return $this->hasMany(FailedImportRow::class);\n    }\n\n    /** @param Builder<Import> $query */\n    #[Scope]\n    protected function completed(Builder $query): void\n    {\n        $query->where('status', ImportStatus::Completed);\n    }\n\n    /** @param Builder<Import> $query */\n    #[Scope]\n    protected function failed(Builder $query): void\n    {\n        $query->where('status', ImportStatus::Failed);\n    }\n\n    /** @param Builder<Import> $query */\n    #[Scope]\n    protected function forTeam(Builder $query, string $teamId): void\n    {\n        $query->where('team_id', $teamId);\n    }\n\n    public function storagePath(): string\n    {\n        return storage_path(\"app/imports/{$this->id}\");\n    }\n\n    public function getImporter(): BaseImporter\n    {\n        return $this->importerCache ??= $this->entity_type->importer($this->team_id);\n    }\n\n    /**\n     * @return Collection<int, ColumnData>\n     */\n    public function columnMappings(): Collection\n    {\n        $raw = $this->column_mappings ?? [];\n        $importer = $this->getImporter();\n        $fields = $importer->allFields();\n        $entityLinks = collect($importer->entityLinks());\n        $headerOrder = array_flip($this->headers ?? []);\n\n        return ColumnData::collect($raw, Collection::class)\n            ->each(function (ColumnData $col) use ($fields, $entityLinks): void {\n                if ($col->isFieldMapping()) {\n                    $col->importField = $fields->get($col->target);\n                } else {\n                    $col->entityLinkField = $entityLinks->get($col->entityLink);\n                }\n            })\n            ->sortBy(fn (ColumnData $col): int => $headerOrder[$col->source] ?? PHP_INT_MAX)\n            ->values();\n    }\n\n    /** @param iterable<int, ColumnData> $mappings */\n    public function setColumnMappings(iterable $mappings): void\n    {\n        $raw = collect($mappings)\n            ->map(fn (ColumnData $m): array => $m->toArray())\n            ->values()\n            ->all();\n\n        $this->update(['column_mappings' => $raw]);\n    }\n\n    public function getColumnMapping(string $source): ?ColumnData\n    {\n        return $this->columnMappings()->firstWhere('source', $source);\n    }\n\n    public function updateColumnMapping(string $source, ColumnData $newMapping): void\n    {\n        $mappings = $this->columnMappings()\n            ->map(fn (ColumnData $m): ColumnData => $m->source === $source ? $newMapping : $m);\n\n        $this->setColumnMappings($mappings);\n    }\n\n    public function transitionToImporting(): bool\n    {\n        $lock = Cache::lock(\"import-{$this->id}-start\", 10);\n\n        if (! $lock->get()) {\n            return false;\n        }\n\n        try {\n            $this->refresh();\n\n            if (in_array($this->status, [ImportStatus::Importing, ImportStatus::Completed, ImportStatus::Failed], true)) {\n                return false;\n            }\n\n            $this->update(['status' => ImportStatus::Importing]);\n\n            return true;\n        } finally {\n            $lock->release();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Rules/ImportChoiceRule.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\n\n/**\n * Validates that a value matches one of the available choice options.\n *\n * Performs case-insensitive matching and supports multi-select fields\n * where values are comma-separated.\n */\nfinal readonly class ImportChoiceRule implements ValidationRule\n{\n    /**\n     * @param  array<int, array{value: string, label: string}>  $options  Available choice options\n     * @param  bool  $isMultiChoice  Whether multiple selections are allowed (comma-separated)\n     */\n    public function __construct(\n        private array $options,\n        private bool $isMultiChoice = false,\n    ) {}\n\n    /**\n     * Run the validation rule.\n     *\n     * ValueValidator guarantees non-empty string; keep type check only.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! is_string($value)) {\n            return;\n        }\n\n        $validValues = array_map(\n            fn (array $option): string => mb_strtolower($option['value']),\n            $this->options,\n        );\n\n        $values = $this->isMultiChoice\n            ? array_map(trim(...), explode(',', $value))\n            : [$value];\n\n        foreach ($values as $v) {\n            if ($v !== '' && ! in_array(mb_strtolower($v), $validValues, true)) {\n                $fail(__('import-wizard-new::validation.invalid_choice', [\n                    'value' => $v,\n                ]));\n\n                return;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Rules/ImportDateRule.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Rules;\n\nuse Carbon\\Carbon;\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\n\n/**\n * Validates that a value can be parsed as a date using the specified format.\n *\n * Uses DateFormat::parse() which handles ambiguous formats (European vs American),\n * 2-digit years, and multiple format variations - something Laravel's built-in\n * date validation cannot do correctly for imports.\n */\nfinal readonly class ImportDateRule implements ValidationRule\n{\n    public function __construct(\n        private DateFormat $format,\n    ) {}\n\n    /**\n     * Run the validation rule.\n     *\n     * ValueValidator guarantees non-empty string; keep type check only.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! is_string($value)) {\n            return;\n        }\n\n        if (! $this->format->parse($value) instanceof Carbon) {\n            $fail(__('import-wizard-new::validation.invalid_date', [\n                'format' => $this->format->getLabel(),\n            ]));\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Rules/ImportNumberRule.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Rules;\n\nuse Closure;\nuse Illuminate\\Contracts\\Validation\\ValidationRule;\nuse Illuminate\\Translation\\PotentiallyTranslatedString;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\n\n/**\n * Validates that a value can be parsed as a number in the specified format.\n */\nfinal readonly class ImportNumberRule implements ValidationRule\n{\n    public function __construct(\n        private NumberFormat $format,\n    ) {}\n\n    /**\n     * Run the validation rule.\n     *\n     * @param  Closure(string, ?string=): PotentiallyTranslatedString  $fail\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void\n    {\n        if (! is_string($value)) {\n            return;\n        }\n\n        if ($this->format->parse($value) === null) {\n            $fail(__('import-wizard-new::validation.invalid_number', [\n                'format' => $this->format->getLabel(),\n            ]));\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Store/ImportRow.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Store;\n\nuse Illuminate\\Database\\Eloquent\\Attributes\\Scope;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Casts\\AsCollection;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Relaticle\\ImportWizard\\Data\\RelationshipMatch;\nuse Relaticle\\ImportWizard\\Enums\\ReviewFilter;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Spatie\\LaravelData\\DataCollection;\n\n/**\n * Eloquent model for import rows within SQLite storage.\n *\n * This model is designed to be used with ImportStore's dynamic connections.\n * Use ImportStore::query() to get a properly bound query builder.\n *\n * @property int $row_number\n * @property Collection<string, mixed> $raw_data\n * @property Collection<string, string>|null $validation\n * @property Collection<string, mixed>|null $corrections\n * @property Collection<string, bool>|null $skipped\n * @property RowMatchAction|null $match_action\n * @property string|null $matched_id\n * @property DataCollection<int, RelationshipMatch>|null $relationships\n * @property bool $processed\n *\n * @method static Builder<static> withErrors(string $column)\n * @method static Builder<static> withCorrections(string $column)\n * @method static Builder<static> withSkipped(string $column)\n * @method static Builder<static> valid()\n * @method static Builder<static> toCreate()\n * @method static Builder<static> toUpdate()\n * @method static Builder<static> toSkip()\n * @method static Builder<static> uniqueValuesFor(string $column)\n * @method static Builder<static> searchValue(string $column, string $search)\n * @method static Builder<static> forFilter(ReviewFilter $filter, string $column)\n */\nfinal class ImportRow extends Model\n{\n    /** @use HasFactory<Factory<ImportRow>> */\n    use HasFactory;\n\n    protected $table = 'import_rows';\n\n    protected $primaryKey = 'row_number';\n\n    public $incrementing = false;\n\n    public $timestamps = false;\n\n    /** @var list<string> */\n    protected $fillable = [\n        'row_number',\n        'raw_data',\n        'validation',\n        'corrections',\n        'skipped',\n        'match_action',\n        'matched_id',\n        'relationships',\n        'processed',\n    ];\n\n    /**\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'raw_data' => AsCollection::class,\n            'validation' => AsCollection::class,\n            'corrections' => AsCollection::class,\n            'skipped' => AsCollection::class,\n            'match_action' => RowMatchAction::class,\n            'relationships' => DataCollection::class.':'.RelationshipMatch::class,\n            'processed' => 'boolean',\n        ];\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function withErrors(Builder $query, string $column): void\n    {\n        $query->whereRaw('json_extract(validation, ?) IS NOT NULL', ['$.'.$column]);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function withCorrections(Builder $query, string $column): void\n    {\n        $query->whereRaw('json_extract(corrections, ?) IS NOT NULL', ['$.'.$column]);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function withSkipped(Builder $query, string $column): void\n    {\n        $query->whereRaw('json_extract(skipped, ?) IS NOT NULL', ['$.'.$column]);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function valid(Builder $query): void\n    {\n        $query->where(function (Builder $q): void {\n            $q->whereNull('validation')->orWhere('validation', '=', '{}');\n        });\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function toCreate(Builder $query): void\n    {\n        $query->where('match_action', RowMatchAction::Create->value);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function toUpdate(Builder $query): void\n    {\n        $query->where('match_action', RowMatchAction::Update->value);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function toSkip(Builder $query): void\n    {\n        $query->where('match_action', RowMatchAction::Skip->value);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function uniqueValuesFor(Builder $query, string $column): void\n    {\n        $jsonPath = '$.'.$column;\n\n        $query->selectRaw(\n            'json_extract(raw_data, ?) as raw_value,\n             COUNT(*) as count,\n             MAX(json_extract(validation, ?)) as validation_error,\n             MAX(json_extract(corrections, ?)) as correction,\n             MAX(CASE WHEN json_extract(skipped, ?) IS NOT NULL THEN 1 ELSE 0 END) as is_skipped',\n            [$jsonPath, $jsonPath, $jsonPath, $jsonPath]\n        )\n            ->groupBy('raw_value')\n            ->orderByRaw('CASE WHEN raw_value IS NULL OR raw_value = \"\" THEN 0 ELSE 1 END');\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function searchValue(Builder $query, string $column, string $search): void\n    {\n        $escaped = str_replace(['\\\\', '%', '_'], ['\\\\\\\\', '\\\\%', '\\\\_'], $search);\n        $query->whereRaw('json_extract(raw_data, ?) LIKE ? ESCAPE ?', ['$.'.$column, \"%{$escaped}%\", '\\\\']);\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     */\n    #[Scope]\n    protected function forFilter(Builder $query, ReviewFilter $filter, string $column): void\n    {\n        match ($filter) {\n            ReviewFilter::All => null,\n            ReviewFilter::NeedsReview => $query\n                ->whereRaw('json_extract(validation, ?) IS NOT NULL', ['$.'.$column])\n                ->whereRaw('json_extract(skipped, ?) IS NULL', ['$.'.$column]),\n            ReviewFilter::Modified => $query\n                ->whereRaw('json_extract(corrections, ?) IS NOT NULL', ['$.'.$column])\n                ->whereRaw('json_extract(skipped, ?) IS NULL', ['$.'.$column]),\n            ReviewFilter::Skipped => $query->whereRaw('json_extract(skipped, ?) IS NOT NULL', ['$.'.$column]),\n        };\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     * @return array<string, int>\n     */\n    public static function countUniqueValuesByFilter(Builder $query, string $column): array\n    {\n        $jsonPath = '$.'.$column;\n\n        $result = $query\n            ->selectRaw('\n                COUNT(DISTINCT json_extract(raw_data, ?)) as all_count,\n                COUNT(DISTINCT CASE\n                    WHEN json_extract(validation, ?) IS NOT NULL\n                     AND json_extract(skipped, ?) IS NULL\n                    THEN json_extract(raw_data, ?)\n                END) as needs_review_count,\n                COUNT(DISTINCT CASE\n                    WHEN json_extract(corrections, ?) IS NOT NULL\n                     AND json_extract(skipped, ?) IS NULL\n                    THEN json_extract(raw_data, ?)\n                END) as modified_count,\n                COUNT(DISTINCT CASE\n                    WHEN json_extract(skipped, ?) IS NOT NULL\n                    THEN json_extract(raw_data, ?)\n                END) as skipped_count\n            ', [$jsonPath, $jsonPath, $jsonPath, $jsonPath, $jsonPath, $jsonPath, $jsonPath, $jsonPath, $jsonPath])\n            ->first();\n\n        return [\n            ReviewFilter::All->value => (int) $result?->getAttribute('all_count'),\n            ReviewFilter::NeedsReview->value => (int) $result?->getAttribute('needs_review_count'),\n            ReviewFilter::Modified->value => (int) $result?->getAttribute('modified_count'),\n            ReviewFilter::Skipped->value => (int) $result?->getAttribute('skipped_count'),\n        ];\n    }\n\n    /**\n     * @param  Builder<static>  $query\n     * @param  array<string>  $columns\n     * @return array<string, bool>\n     */\n    public static function getColumnErrorStatuses(Builder $query, array $columns): array\n    {\n        if ($columns === []) {\n            return [];\n        }\n\n        $selectParts = [];\n        $bindings = [];\n\n        foreach ($columns as $column) {\n            $selectParts[] = 'MAX(CASE WHEN json_extract(validation, ?) IS NOT NULL AND json_extract(skipped, ?) IS NULL THEN 1 ELSE 0 END) as '.$query->getGrammar()->wrap(\"has_error_{$column}\");\n            $bindings[] = '$.'.$column;\n            $bindings[] = '$.'.$column;\n        }\n\n        $result = $query->selectRaw(implode(', ', $selectParts), $bindings)->first();\n\n        $statuses = [];\n        foreach ($columns as $column) {\n            $statuses[$column] = (bool) ($result?->getAttribute(\"has_error_{$column}\") ?? false);\n        }\n\n        return $statuses;\n    }\n\n    public function hasErrors(): bool\n    {\n        return $this->validation?->isNotEmpty() ?? false;\n    }\n\n    public function hasCorrections(): bool\n    {\n        return $this->corrections?->isNotEmpty() ?? false;\n    }\n\n    public function getFinalValue(string $column): mixed\n    {\n        if ($this->isValueSkipped($column)) {\n            return null;\n        }\n\n        if ($this->hasValidationError($column)) {\n            return null;\n        }\n\n        if ($this->corrections?->has($column)) {\n            return $this->corrections->get($column);\n        }\n\n        return $this->raw_data->get($column);\n    }\n\n    public function isValueSkipped(string $column): bool\n    {\n        return $this->skipped?->has($column) ?? false;\n    }\n\n    public function hasValidationError(string $column): bool\n    {\n        return $this->validation?->has($column) ?? false;\n    }\n\n    /** @return array<string, mixed> */\n    public function getFinalData(): array\n    {\n        return $this->raw_data->merge($this->corrections ?? [])->all();\n    }\n\n    public function isCreate(): bool\n    {\n        return $this->match_action === RowMatchAction::Create;\n    }\n\n    public function isUpdate(): bool\n    {\n        return $this->match_action === RowMatchAction::Update;\n    }\n\n    public function isSkip(): bool\n    {\n        return $this->match_action === RowMatchAction::Skip;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Store/ImportStore.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Store;\n\nuse Illuminate\\Contracts\\Config\\Repository;\nuse Illuminate\\Database\\Connection;\nuse Illuminate\\Database\\Connectors\\ConnectionFactory;\nuse Illuminate\\Database\\Eloquent\\Builder as EloquentBuilder;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\n\nfinal class ImportStore\n{\n    private ?Connection $connection = null;\n\n    public function __construct(\n        private readonly string $id,\n    ) {}\n\n    public static function create(string $importId): self\n    {\n        $store = new self($importId);\n\n        File::ensureDirectoryExists($store->path());\n        file_put_contents($store->sqlitePath(), '');\n        $store->createTableSafely();\n\n        return $store;\n    }\n\n    public static function load(string $importId): ?self\n    {\n        if (! Str::isUlid($importId)) {\n            return null;\n        }\n\n        $store = new self($importId);\n\n        if (! File::exists($store->sqlitePath())) {\n            return null;\n        }\n\n        $store->connection();\n\n        return $store;\n    }\n\n    public function id(): string\n    {\n        return $this->id;\n    }\n\n    public function path(): string\n    {\n        return storage_path(\"app/imports/{$this->id}\");\n    }\n\n    public function sqlitePath(): string\n    {\n        return $this->path().'/data.sqlite';\n    }\n\n    public function connectionName(): string\n    {\n        return \"import_{$this->id}\";\n    }\n\n    public function connection(): Connection\n    {\n        return $this->connection ??= $this->createConnection();\n    }\n\n    /** @return EloquentBuilder<ImportRow> */\n    public function query(): EloquentBuilder\n    {\n        $this->connection();\n\n        return ImportRow::on($this->connectionName());\n    }\n\n    public function ensureProcessedColumn(): void\n    {\n        $schema = $this->connection()->getSchemaBuilder();\n\n        if ($schema->hasColumn('import_rows', 'processed')) {\n            return;\n        }\n\n        $schema->table('import_rows', function (Blueprint $table): void {\n            $table->boolean('processed')->default(false);\n        });\n    }\n\n    /**\n     * @param  array<string, int|string|null>  $resolvedMap\n     */\n    public function bulkUpdateMatches(string $jsonPath, array $resolvedMap, RowMatchAction $unmatchedAction): void\n    {\n        $connection = $this->connection();\n\n        $connection->statement('\n            CREATE TEMPORARY TABLE IF NOT EXISTS temp_match_results (\n                lookup_value TEXT,\n                match_action TEXT,\n                matched_id TEXT\n            )\n        ');\n\n        try {\n            $inserts = collect($resolvedMap)\n                ->map(fn (int|string|null $id, int|string $value): array => [\n                    'lookup_value' => $value,\n                    'match_action' => $id !== null ? RowMatchAction::Update->value : $unmatchedAction->value,\n                    'matched_id' => $id !== null ? (string) $id : null,\n                ])\n                ->values()\n                ->all();\n\n            if ($inserts === []) {\n                return;\n            }\n\n            foreach (array_chunk($inserts, 5000) as $chunk) {\n                $connection->table('temp_match_results')->insert($chunk);\n            }\n\n            $connection->statement('\n                UPDATE import_rows\n                SET match_action = temp.match_action,\n                    matched_id = temp.matched_id\n                FROM temp_match_results AS temp\n                WHERE json_extract(import_rows.raw_data, ?) = temp.lookup_value\n                  AND import_rows.match_action IS NULL\n            ', [$jsonPath]);\n        } finally {\n            $connection->statement('DROP TABLE IF EXISTS temp_match_results');\n        }\n    }\n\n    public function destroy(): void\n    {\n        $this->connection = null;\n        File::deleteDirectory($this->path());\n    }\n\n    private function createConnection(): Connection\n    {\n        $name = $this->connectionName();\n        $config = [\n            'driver' => 'sqlite',\n            'database' => $this->sqlitePath(),\n            'foreign_key_constraints' => true,\n        ];\n\n        resolve(Repository::class)->set(\"database.connections.{$name}\", $config);\n\n        return resolve(ConnectionFactory::class)->make($config, $name);\n    }\n\n    private function createTableSafely(): void\n    {\n        $schema = $this->connection()->getSchemaBuilder();\n\n        if ($schema->hasTable('import_rows')) {\n            return;\n        }\n\n        $schema->create('import_rows', function (Blueprint $table): void {\n            $table->integer('row_number')->primary();\n            $table->text('raw_data');\n            $table->text('validation')->nullable();\n            $table->text('corrections')->nullable();\n            $table->text('skipped')->nullable();\n            $table->string('match_action')->nullable();\n            $table->string('matched_id')->nullable();\n            $table->text('relationships')->nullable();\n            $table->boolean('processed')->default(false);\n        });\n\n        $this->connection()->statement('\n            CREATE TRIGGER validate_raw_data_insert\n            BEFORE INSERT ON import_rows\n            BEGIN\n                SELECT CASE\n                    WHEN NEW.raw_data IS NULL OR NEW.raw_data = \\'\\' OR NEW.raw_data = \\'{}\\'\n                    THEN RAISE(ABORT, \\'raw_data cannot be null or empty\\')\n                END;\n            END\n        ');\n\n        $schema->table('import_rows', function (Blueprint $table): void {\n            $table->index('validation');\n            $table->index('match_action');\n            $table->index('skipped');\n        });\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/DataTypeInferencer.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support;\n\nuse Illuminate\\Support\\Facades\\Validator;\nuse Relaticle\\CustomFields\\Contracts\\FieldTypeDefinitionInterface;\nuse Relaticle\\CustomFields\\Enums\\FieldDataType;\nuse Relaticle\\CustomFields\\FieldTypeSystem\\FieldManager;\nuse Relaticle\\CustomFields\\Models\\CustomField;\nuse Relaticle\\ImportWizard\\Data\\InferenceResult;\n\n/**\n * Infers data types from sample values using the custom-fields system.\n *\n * Detection rules and field type mappings are built dynamically\n * from FieldManager - no hardcoded mappings.\n */\nfinal class DataTypeInferencer\n{\n    /** @var array<string, string> Validation rule key => field type key */\n    private array $validationToFieldType = [];\n\n    /** @var array<string, string> FieldDataType value => field type key */\n    private array $dataTypeToFieldType = [];\n\n    private bool $initialized = false;\n\n    public function __construct(\n        private readonly ?string $entityName = null,\n        private readonly ?string $teamId = null,\n    ) {}\n\n    /**\n     * Analyze sample values and return inference result.\n     *\n     * @param  array<string>  $values  Sample values from CSV column\n     */\n    public function infer(array $values): InferenceResult\n    {\n        $this->initialize();\n\n        $nonEmptyValues = array_filter($values, fn (string $v): bool => $v !== '');\n\n        if ($nonEmptyValues === []) {\n            return new InferenceResult(type: null, confidence: 0.0, suggestedFields: []);\n        }\n\n        $allTypes = array_merge(\n            array_values($this->validationToFieldType),\n            array_values($this->dataTypeToFieldType),\n            ['text']\n        );\n        $typeVotes = array_fill_keys(array_unique($allTypes), 0);\n\n        foreach ($nonEmptyValues as $value) {\n            $type = $this->detectType(trim((string) $value));\n            if (isset($typeVotes[$type])) {\n                $typeVotes[$type]++;\n            }\n        }\n\n        $totalVotes = count($nonEmptyValues);\n        arsort($typeVotes);\n        $topType = array_key_first($typeVotes);\n        $topVotes = $typeVotes[$topType];\n\n        if ($topType === 'text') {\n            return new InferenceResult(type: null, confidence: 0.0, suggestedFields: []);\n        }\n\n        $confidence = $topVotes / $totalVotes;\n\n        if ($confidence < 0.5) {\n            return new InferenceResult(type: null, confidence: $confidence, suggestedFields: []);\n        }\n\n        return new InferenceResult(\n            type: $topType,\n            confidence: $confidence,\n            suggestedFields: $this->getSuggestedFieldsForType($topType),\n        );\n    }\n\n    /**\n     * Build detection rules dynamically from FieldManager.\n     */\n    private function initialize(): void\n    {\n        if ($this->initialized) {\n            return;\n        }\n\n        $fieldManager = resolve(FieldManager::class);\n\n        foreach ($fieldManager->getFieldTypes() as $fieldTypeClass) {\n            /** @var FieldTypeDefinitionInterface $instance */\n            $instance = new $fieldTypeClass;\n            $schema = $instance->configure();\n            $data = $schema->data();\n\n            // For multi-value fields with item validation rules\n            $itemRules = $schema->getDefaultItemValidationRules();\n            if ($itemRules !== []) {\n                // Look through all rules for a meaningful validation key\n                foreach ($itemRules as $rule) {\n                    $validationKey = $this->extractValidationKey($rule);\n                    if ($validationKey !== null) {\n                        $this->validationToFieldType[$validationKey] = $data->key;\n                        break;\n                    }\n                }\n            }\n\n            // Map dataType to field type key\n            $this->dataTypeToFieldType[$data->dataType->value] = $data->key;\n        }\n\n        $this->initialized = true;\n    }\n\n    /**\n     * Extract the validation key from a rule.\n     * 'email' => 'email', 'phone:AUTO' => 'phone', 'regex:...' => 'link'\n     */\n    private function extractValidationKey(string $rule): ?string\n    {\n        // Handle regex rules specially - they're for link validation\n        if (str_starts_with($rule, 'regex:')) {\n            return 'link';\n        }\n\n        // Strip parameters: 'phone:AUTO' => 'phone'\n        $key = explode(':', $rule)[0];\n\n        // Only return validation keys we can actually use\n        return in_array($key, ['email', 'phone', 'url', 'date'], true) ? $key : null;\n    }\n\n    /**\n     * Detect the type of a single value.\n     */\n    private function detectType(string $value): string\n    {\n        // Check validation-based types (email, phone, url/link)\n        foreach ($this->validationToFieldType as $validationKey => $fieldTypeKey) {\n            if ($this->passesValidation($value, $validationKey)) {\n                return $fieldTypeKey;\n            }\n        }\n\n        // Check date (using Laravel's date validator)\n        if (Validator::make(['v' => $value], ['v' => ['date']])->passes()) {\n            return $this->dataTypeToFieldType[FieldDataType::DATE->value] ?? 'date';\n        }\n\n        // Check currency (values with currency symbols)\n        if ($this->isCurrency($value)) {\n            return $this->dataTypeToFieldType[FieldDataType::FLOAT->value] ?? 'currency';\n        }\n\n        // Check number\n        if ($this->isNumber($value)) {\n            return $this->dataTypeToFieldType[FieldDataType::NUMERIC->value] ?? 'number';\n        }\n\n        return 'text';\n    }\n\n    /**\n     * Check if a value passes a specific validation rule.\n     */\n    private function passesValidation(string $value, string $validationKey): bool\n    {\n        $rules = match ($validationKey) {\n            'email' => ['email'],\n            'phone' => ['phone:AUTO'],\n            'url', 'link' => ['url'],\n            default => null,\n        };\n\n        if ($rules === null) {\n            return false;\n        }\n\n        return Validator::make(['v' => $value], ['v' => $rules])->passes();\n    }\n\n    private function isCurrency(string $value): bool\n    {\n        return (bool) preg_match('/^[$\\xe2\\x82\\xac\\xc2\\xa3\\xc2\\xa5]\\s*[\\d,]+(\\.\\d{1,2})?$|^[\\d,]+(\\.\\d{1,2})?\\s*[$\\xe2\\x82\\xac\\xc2\\xa3\\xc2\\xa5]$/u', $value);\n    }\n\n    private function isNumber(string $value): bool\n    {\n        return is_numeric(str_replace([',', ' '], '', $value));\n    }\n\n    /**\n     * Get suggested field keys for a detected field type.\n     *\n     * Queries actual custom fields configured for the entity.\n     *\n     * @return array<string>\n     */\n    private function getSuggestedFieldsForType(string $fieldTypeKey): array\n    {\n        if ($this->entityName === null || $this->teamId === null) {\n            return [];\n        }\n\n        // Query custom fields of this type for the entity\n        return CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('entity_type', $this->entityName)\n            ->where('tenant_id', $this->teamId)\n            ->where('type', $fieldTypeKey)\n            ->active()\n            ->pluck('code')\n            ->map(fn (string $code): string => \"custom_fields_{$code}\")\n            ->all();\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/EntityLinkResolver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support;\n\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\n\nfinal class EntityLinkResolver\n{\n    private const string CUSTOM_FIELD_PREFIX = 'custom_fields_';\n\n    /** @var array<string, array<string, int|string|null>> */\n    private array $cache = [];\n\n    public function __construct(\n        private readonly string $teamId,\n    ) {}\n\n    public function resolve(EntityLink $link, MatchableField $matcher, mixed $value): int|string|null\n    {\n        $value = $this->normalizeValue($value);\n\n        if ($value === null) {\n            return null;\n        }\n\n        $cacheKey = $this->getCacheKey($link, $matcher);\n\n        if (isset($this->cache[$cacheKey][$value])) {\n            return $this->cache[$cacheKey][$value];\n        }\n\n        $resolved = $this->batchResolve($link, $matcher, [$value]);\n\n        return $resolved[$value] ?? null;\n    }\n\n    /**\n     * @param  array<mixed>  $values\n     * @return array<string, int|string|null>\n     */\n    public function resolveMany(EntityLink $link, MatchableField $matcher, array $values): array\n    {\n        $uniqueValues = $this->normalizeUniqueValues($values);\n\n        if ($uniqueValues === []) {\n            return [];\n        }\n\n        $cacheKey = $this->getCacheKey($link, $matcher);\n        $results = [];\n        $toFetch = [];\n\n        foreach ($uniqueValues as $value) {\n            if (! isset($this->cache[$cacheKey][$value])) {\n                $toFetch[] = $value;\n\n                continue;\n            }\n\n            $results[$value] = $this->cache[$cacheKey][$value];\n        }\n\n        if ($toFetch !== []) {\n            return array_merge($results, $this->batchResolve($link, $matcher, $toFetch));\n        }\n\n        return $results;\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, int|string|null>\n     */\n    public function batchResolve(EntityLink $link, MatchableField $matcher, array $uniqueValues): array\n    {\n        if ($uniqueValues === []) {\n            return [];\n        }\n\n        $field = $matcher->field;\n        $cacheKey = $this->getCacheKey($link, $matcher);\n\n        $results = match (true) {\n            $link->targetModelClass === User::class => $this->resolveViaTeamMember($field, $uniqueValues),\n            $this->isCustomField($field) => $this->resolveViaCustomField($link, $field, $uniqueValues),\n            default => $this->resolveViaColumn($link, $field, $uniqueValues),\n        };\n\n        $normalizedResults = [];\n        foreach ($results as $dbValue => $id) {\n            $normalizedResults[$this->normalizeForComparison((string) $dbValue)] = $id;\n        }\n\n        $resolved = [];\n\n        foreach ($uniqueValues as $value) {\n            $matchedId = $normalizedResults[$this->normalizeForComparison($value)] ?? null;\n            $resolved[$value] = $matchedId;\n            $this->cache[$cacheKey][$value] = $matchedId;\n        }\n\n        return $resolved;\n    }\n\n    /**\n     * @param  array<mixed>  $values\n     * @return array<string>\n     */\n    private function normalizeUniqueValues(array $values): array\n    {\n        return collect($values)\n            ->map(fn (mixed $v): ?string => $this->normalizeValue($v))\n            ->filter()\n            ->unique()\n            ->values()\n            ->all();\n    }\n\n    private function isCustomField(string $field): bool\n    {\n        return str_starts_with($field, self::CUSTOM_FIELD_PREFIX);\n    }\n\n    private function getCustomFieldCode(string $field): string\n    {\n        return substr($field, strlen(self::CUSTOM_FIELD_PREFIX));\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, int|string>\n     */\n    private function resolveViaColumn(EntityLink $link, string $field, array $uniqueValues): array\n    {\n        $modelClass = $link->targetModelClass;\n\n        return $modelClass::query()\n            ->where('team_id', $this->teamId)\n            ->whereIn($field, $uniqueValues)\n            ->pluck('id', $field)\n            ->all();\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, int|string>\n     */\n    private function resolveViaTeamMember(string $field, array $uniqueValues): array\n    {\n        return User::query()\n            ->whereIn($field, $uniqueValues)\n            ->where(function (Builder $query): void {\n                $query->whereHas('teams', fn (Builder $q) => $q->where('teams.id', $this->teamId))\n                    ->orWhereHas('ownedTeams', fn (Builder $q) => $q->where('teams.id', $this->teamId));\n            })\n            ->pluck('id', $field)\n            ->all();\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, int|string>\n     */\n    private function resolveViaCustomField(EntityLink $link, string $field, array $uniqueValues): array\n    {\n        $customFieldCode = $this->getCustomFieldCode($field);\n\n        $customField = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->teamId)\n            ->where('entity_type', $link->targetEntity)\n            ->where('code', $customFieldCode)\n            ->first();\n\n        if ($customField === null) {\n            return [];\n        }\n\n        $valueColumn = $customField->getValueColumn();\n\n        if ($valueColumn === 'json_value') {\n            return $this->resolveViaJsonColumn($link->targetEntity, $customField->getKey(), $uniqueValues);\n        }\n\n        return CustomFieldValue::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->teamId)\n            ->where('custom_field_id', $customField->id)\n            ->where('entity_type', $link->targetEntity)\n            ->whereIn($valueColumn, $uniqueValues)\n            ->pluck('entity_id', $valueColumn)\n            ->all();\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, int|string>\n     */\n    private function resolveViaJsonColumn(string $entityType, int|string $customFieldId, array $uniqueValues): array\n    {\n        if ($uniqueValues === []) {\n            return [];\n        }\n\n        $model = new CustomFieldValue;\n        $connection = $model->getConnection();\n        $table = $model->getTable();\n        $driver = $connection->getDriverName();\n        $tenantKey = config('custom-fields.database.column_names.tenant_foreign_key');\n        $results = [];\n\n        foreach (array_chunk($uniqueValues, 5000) as $chunk) {\n            $lowerChunk = array_map(mb_strtolower(...), $chunk);\n            $placeholders = implode(',', array_fill(0, count($lowerChunk), '?'));\n\n            $sql = match ($driver) {\n                'sqlite' => \"SELECT cfv.entity_id, je.value AS matched_value\n                   FROM {$table} cfv, json_each(\n                       CASE WHEN JSON_TYPE(cfv.json_value) = 'array'\n                           THEN cfv.json_value\n                           ELSE JSON_ARRAY(cfv.json_value)\n                       END\n                   ) je\n                   WHERE cfv.{$tenantKey} = ?\n                     AND cfv.custom_field_id = ?\n                     AND cfv.entity_type = ?\n                     AND LOWER(CAST(je.value AS TEXT)) IN ({$placeholders})\",\n                'pgsql' => \"SELECT cfv.entity_id, LOWER(je.value) AS matched_value\n                   FROM {$table} cfv\n                   CROSS JOIN LATERAL jsonb_array_elements_text(\n                       CASE WHEN jsonb_typeof(cfv.json_value::jsonb) = 'array'\n                           THEN cfv.json_value::jsonb\n                           ELSE jsonb_build_array(cfv.json_value::jsonb)\n                       END\n                   ) AS je(value)\n                   WHERE cfv.{$tenantKey} = ?\n                     AND cfv.custom_field_id = ?\n                     AND cfv.entity_type = ?\n                     AND LOWER(je.value) IN ({$placeholders})\",\n                default => \"SELECT cfv.entity_id, jt.val AS matched_value\n                   FROM {$table} cfv\n                   JOIN JSON_TABLE(\n                       IF(JSON_TYPE(cfv.json_value) = 'ARRAY', cfv.json_value, JSON_ARRAY(cfv.json_value)),\n                       '\\$[*]' COLUMNS(val TEXT PATH '\\$')\n                   ) AS jt\n                   WHERE cfv.{$tenantKey} = ?\n                     AND cfv.custom_field_id = ?\n                     AND cfv.entity_type = ?\n                     AND LOWER(jt.val) IN ({$placeholders})\",\n            };\n\n            $bindings = array_merge([$this->teamId, $customFieldId, $entityType], $lowerChunk);\n            $rows = $connection->select($sql, $bindings);\n\n            foreach ($rows as $row) {\n                $key = mb_strtolower((string) $row->matched_value);\n\n                if (! isset($results[$key])) {\n                    $results[$key] = $row->entity_id;\n                }\n            }\n        }\n\n        return $results;\n    }\n\n    /** @param  array<mixed>  $values */\n    public function preloadCache(EntityLink $link, MatchableField $matcher, array $values): void\n    {\n        $uniqueValues = $this->normalizeUniqueValues($values);\n\n        if ($uniqueValues === []) {\n            return;\n        }\n\n        $this->batchResolve($link, $matcher, $uniqueValues);\n    }\n\n    public function getCachedId(EntityLink $link, MatchableField $matcher, mixed $value): int|string|null\n    {\n        $cacheKey = $this->getCacheKey($link, $matcher);\n        $normalized = $this->normalizeValue($value);\n\n        return $this->cache[$cacheKey][$normalized] ?? null;\n    }\n\n    public function clearCache(): void\n    {\n        $this->cache = [];\n    }\n\n    private function getCacheKey(EntityLink $link, MatchableField $matcher): string\n    {\n        return \"{$link->key}:{$matcher->field}\";\n    }\n\n    private function normalizeValue(mixed $value): ?string\n    {\n        if ($value === null || $value === '') {\n            return null;\n        }\n\n        $trimmed = trim((string) $value);\n\n        return $trimmed === '' ? null : $trimmed;\n    }\n\n    private function normalizeForComparison(string $value): string\n    {\n        return mb_strtolower(trim($value));\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/EntityLinkStorage/CustomFieldValueStorage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support\\EntityLinkStorage;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\n\n/**\n * Storage strategy for Record-type custom field values.\n *\n * Sets the custom field value attribute on the model (custom_fields_xxx).\n * The model's custom fields handling will persist to custom_field_values table.\n */\nfinal class CustomFieldValueStorage implements EntityLinkStorageInterface\n{\n    public function store(Model $record, EntityLink $link, array $resolvedIds, array $context): void\n    {\n        // Custom field values are set in prepareData(), no post-save action needed\n    }\n\n    public function prepareData(array $data, EntityLink $link, array $resolvedIds): array\n    {\n        if ($resolvedIds === [] || $link->customFieldCode === null) {\n            return $data;\n        }\n\n        $attributeKey = 'custom_fields_'.$link->customFieldCode;\n\n        // Record custom fields support single ID\n        $id = $resolvedIds[0] ?? null;\n\n        if ($id !== null) {\n            $data[$attributeKey] = $id;\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/EntityLinkStorage/EntityLinkStorageInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support\\EntityLinkStorage;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\n\n/**\n * Interface for entity link storage strategies.\n *\n * Different storage types (foreign key, morph-to-many, custom field values)\n * require different approaches to persist resolved entity links.\n */\ninterface EntityLinkStorageInterface\n{\n    /**\n     * Store resolved entity link(s) for a record after save.\n     *\n     * Called in afterSave() for operations that require the saved record.\n     *\n     * @param  Model  $record  The saved record\n     * @param  EntityLink  $link  The entity link configuration\n     * @param  array<int|string>  $resolvedIds  The resolved target record ID(s)\n     * @param  array<string, mixed>  $context  Additional context from import\n     */\n    public function store(Model $record, EntityLink $link, array $resolvedIds, array $context): void;\n\n    /**\n     * Prepare data for model fill() before save.\n     *\n     * Called in prepareForSave() for storage types that set model attributes.\n     *\n     * @param  array<string, mixed>  $data  Current prepared data\n     * @param  EntityLink  $link  The entity link configuration\n     * @param  array<int|string>  $resolvedIds  The resolved target record ID(s)\n     * @return array<string, mixed> Modified data with entity link values\n     */\n    public function prepareData(array $data, EntityLink $link, array $resolvedIds): array;\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/EntityLinkStorage/ForeignKeyStorage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support\\EntityLinkStorage;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\n\n/**\n * Storage strategy for foreign key relationships (belongsTo).\n *\n * Sets the foreign key column directly on the model (e.g., company_id).\n */\nfinal class ForeignKeyStorage implements EntityLinkStorageInterface\n{\n    public function store(Model $record, EntityLink $link, array $resolvedIds, array $context): void\n    {\n        // Foreign keys are set in prepareData(), no post-save action needed\n    }\n\n    public function prepareData(array $data, EntityLink $link, array $resolvedIds): array\n    {\n        $foreignKey = $link->foreignKey ?? $link->key.'_id';\n\n        // BelongsTo only supports single ID\n        $id = $resolvedIds[0] ?? null;\n\n        if ($id !== null) {\n            $data[$foreignKey] = $id;\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/EntityLinkStorage/MorphToManyStorage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support\\EntityLinkStorage;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\n\n/**\n * Storage strategy for polymorphic many-to-many relationships.\n *\n * Syncs the morph-to-many relation on the model after save.\n */\nfinal class MorphToManyStorage implements EntityLinkStorageInterface\n{\n    public function store(Model $record, EntityLink $link, array $resolvedIds, array $context): void\n    {\n        if ($resolvedIds === []) {\n            return;\n        }\n\n        $relationName = $link->morphRelation ?? $link->key;\n\n        if (! method_exists($record, $relationName)) {\n            return;\n        }\n\n        // Sync without detaching - adds new links while keeping existing ones\n        $record->{$relationName}()->syncWithoutDetaching($resolvedIds);\n    }\n\n    public function prepareData(array $data, EntityLink $link, array $resolvedIds): array\n    {\n        // MorphToMany relations are synced in store(), no data preparation needed\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/EntityLinkValidator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support;\n\nuse App\\Models\\CustomField;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Relaticle\\CustomFields\\Facades\\CustomFieldsType;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\n\nfinal class EntityLinkValidator\n{\n    private readonly EntityLinkResolver $resolver;\n\n    /** @var array<string, array<int, string>> */\n    private array $formatRulesCache = [];\n\n    /** @var array<string, string> */\n    private array $lastFormatErrors = [];\n\n    public function __construct(private readonly string $teamId)\n    {\n        $this->resolver = new EntityLinkResolver($this->teamId);\n    }\n\n    public function validate(EntityLink $link, MatchableField $matcher, mixed $value): ?string\n    {\n        if ($matcher->behavior === MatchBehavior::Create) {\n            return null;\n        }\n\n        $normalized = trim((string) ($value ?? ''));\n\n        if ($normalized === '') {\n            return null;\n        }\n\n        $id = $this->resolver->resolve($link, $matcher, $normalized);\n\n        return $id === null\n            ? $this->buildErrorMessage($link, $matcher, $normalized)\n            : null;\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, string|null>\n     */\n    public function batchValidate(EntityLink $link, MatchableField $matcher, array $uniqueValues): array\n    {\n        $this->lastFormatErrors = [];\n\n        if ($matcher->behavior === MatchBehavior::Create) {\n            return array_fill_keys($uniqueValues, null);\n        }\n\n        $results = [];\n        $toValidate = [];\n        $formatRules = $this->getMatchFieldFormatRules($link, $matcher);\n\n        foreach ($uniqueValues as $value) {\n            $trimmed = trim($value);\n\n            if ($trimmed === '') {\n                $results[$value] = null;\n\n                continue;\n            }\n\n            if ($formatRules !== []) {\n                $formatError = $this->validateFormat($trimmed, $matcher, $formatRules);\n\n                if ($formatError !== null) {\n                    $results[$value] = $formatError;\n                    $this->lastFormatErrors[$value] = $formatError;\n\n                    continue;\n                }\n            }\n\n            $toValidate[] = $trimmed;\n        }\n\n        if ($toValidate === []) {\n            return $results;\n        }\n\n        $resolved = $this->resolver->batchResolve($link, $matcher, $toValidate);\n\n        foreach ($toValidate as $value) {\n            $results[$value] = $resolved[$value] !== null\n                ? null\n                : $this->buildErrorMessage($link, $matcher, $value);\n        }\n\n        return $results;\n    }\n\n    public function validateFromColumn(ColumnData $column, BaseImporter $importer, mixed $value): ?string\n    {\n        $context = $column->resolveEntityLinkContext($importer);\n\n        return $context\n            ? $this->validate($context['link'], $context['matcher'], $value)\n            : null;\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, string|null>\n     */\n    public function batchValidateFromColumn(ColumnData $column, BaseImporter $importer, array $uniqueValues): array\n    {\n        $context = $column->resolveEntityLinkContext($importer);\n\n        return $context\n            ? $this->batchValidate($context['link'], $context['matcher'], $uniqueValues)\n            : array_fill_keys($uniqueValues, null);\n    }\n\n    /** @param  array<mixed>  $values */\n    public function preloadCache(EntityLink $link, MatchableField $matcher, array $values): void\n    {\n        $this->resolver->preloadCache($link, $matcher, $values);\n    }\n\n    public function getResolvedId(EntityLink $link, MatchableField $matcher, mixed $value): int|string|null\n    {\n        $normalized = trim((string) ($value ?? ''));\n\n        if ($normalized === '') {\n            return null;\n        }\n\n        return $this->resolver->getCachedId($link, $matcher, $normalized)\n            ?? $this->resolver->resolve($link, $matcher, $normalized);\n    }\n\n    public function getResolver(): EntityLinkResolver\n    {\n        return $this->resolver;\n    }\n\n    /** @return array<string, string> */\n    public function getLastFormatErrors(): array\n    {\n        return $this->lastFormatErrors;\n    }\n\n    /**\n     * @return array<int, string>\n     */\n    private function getMatchFieldFormatRules(EntityLink $link, MatchableField $matcher): array\n    {\n        if (! str_starts_with($matcher->field, 'custom_fields_')) {\n            return [];\n        }\n\n        $cacheKey = \"{$link->targetEntity}:{$matcher->field}\";\n\n        if (isset($this->formatRulesCache[$cacheKey])) {\n            return $this->formatRulesCache[$cacheKey];\n        }\n\n        $code = substr($matcher->field, strlen('custom_fields_'));\n\n        $customField = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->teamId)\n            ->where('entity_type', $link->targetEntity)\n            ->where('code', $code)\n            ->first();\n\n        if ($customField === null) {\n            return $this->formatRulesCache[$cacheKey] = [];\n        }\n\n        $fieldTypeInstance = CustomFieldsType::getFieldTypeInstance($customField->type);\n\n        if ($fieldTypeInstance === null) {\n            return $this->formatRulesCache[$cacheKey] = [];\n        }\n\n        return $this->formatRulesCache[$cacheKey] = $fieldTypeInstance->configure()->getDefaultItemValidationRules();\n    }\n\n    /**\n     * @param  array<int, string>  $rules\n     */\n    private function validateFormat(string $value, MatchableField $matcher, array $rules): ?string\n    {\n        $items = $matcher->multiValue\n            ? array_map(trim(...), explode(',', $value))\n            : [$value];\n\n        foreach ($items as $item) {\n            if ($item === '') {\n                continue;\n            }\n\n            $validator = Validator::make(['value' => $item], ['value' => $rules]);\n\n            if ($validator->fails()) {\n                return \"Invalid format: '{$item}'\";\n            }\n        }\n\n        return null;\n    }\n\n    private function buildErrorMessage(EntityLink $link, MatchableField $matcher, string $value): string\n    {\n        return \"No {$link->label} found matching '{$value}' by {$matcher->label}\";\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/MatchResolver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support;\n\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Enums\\EntityLinkSource;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Relaticle\\ImportWizard\\Importers\\BaseImporter;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nfinal readonly class MatchResolver\n{\n    public function __construct(\n        private ImportStore $store,\n        private Import $import,\n        private BaseImporter $importer,\n    ) {}\n\n    public function resolve(): void\n    {\n        $this->resetPreviousResolutions();\n\n        $mappings = $this->import->columnMappings();\n        $mappedFieldKeys = $mappings->filter(fn (ColumnData $col): bool => $col->isFieldMapping())\n            ->pluck('target')\n            ->all();\n\n        $matchField = $this->importer->getMatchFieldForMappedColumns($mappedFieldKeys);\n\n        if ($matchField instanceof MatchableField && $matchField->behavior !== MatchBehavior::Create) {\n            $this->resolveWithLookup($matchField, $mappings);\n        }\n\n        $this->markRemainingAs(RowMatchAction::Create);\n    }\n\n    private function resetPreviousResolutions(): void\n    {\n        $this->store->connection()->statement('\n            UPDATE import_rows\n            SET match_action = NULL,\n                matched_id = NULL\n        ');\n    }\n\n    private function markRemainingAs(RowMatchAction $action): void\n    {\n        $this->store->connection()->statement('\n            UPDATE import_rows\n            SET match_action = ?\n            WHERE match_action IS NULL\n        ', [$action->value]);\n    }\n\n    /** @param  Collection<int, ColumnData>  $mappings */\n    private function resolveWithLookup(MatchableField $matchField, Collection $mappings): void\n    {\n        $sourceColumn = $this->findSourceColumn($matchField, $mappings);\n\n        if (! $sourceColumn instanceof ColumnData) {\n            return;\n        }\n\n        $jsonPath = '$.'.$sourceColumn->source;\n        $uniqueValues = $this->extractUniqueValues($jsonPath);\n\n        if ($uniqueValues === []) {\n            return;\n        }\n\n        $resolvedMap = $this->resolveMatchIds($matchField, $uniqueValues);\n        $unmatchedAction = $matchField->behavior === MatchBehavior::MatchOnly\n            ? RowMatchAction::Skip\n            : RowMatchAction::Create;\n\n        $this->store->bulkUpdateMatches($jsonPath, $resolvedMap, $unmatchedAction);\n        $this->markRemainingAs($unmatchedAction);\n    }\n\n    /** @param  Collection<int, ColumnData>  $mappings */\n    private function findSourceColumn(MatchableField $matchField, Collection $mappings): ?ColumnData\n    {\n        return $mappings->first(\n            fn (ColumnData $col): bool => $col->isFieldMapping() && $col->target === $matchField->field,\n        );\n    }\n\n    /** @return array<string> */\n    private function extractUniqueValues(string $jsonPath): array\n    {\n        return $this->store->query()\n            ->whereNull('match_action')\n            ->selectRaw('DISTINCT json_extract(raw_data, ?) as value', [$jsonPath])\n            ->pluck('value')\n            ->filter()\n            ->values()\n            ->all();\n    }\n\n    /**\n     * @param  array<string>  $uniqueValues\n     * @return array<string, int|string|null>\n     */\n    private function resolveMatchIds(MatchableField $matchField, array $uniqueValues): array\n    {\n        $resolver = new EntityLinkResolver($this->import->team_id);\n        $selfLink = new EntityLink(\n            key: 'self',\n            source: EntityLinkSource::Relationship,\n            targetEntity: $this->importer->entityName(),\n            targetModelClass: $this->importer->modelClass(),\n        );\n\n        return $matchField->multiValue\n            ? $this->resolveMultiValueField($resolver, $selfLink, $matchField, $uniqueValues)\n            : $resolver->batchResolve($selfLink, $matchField, $uniqueValues);\n    }\n\n    /**\n     * @param  array<string>  $csvValues\n     * @return array<string, int|string|null>\n     */\n    private function resolveMultiValueField(\n        EntityLinkResolver $resolver,\n        EntityLink $selfLink,\n        MatchableField $matchField,\n        array $csvValues,\n    ): array {\n        $allParts = collect($csvValues)\n            ->flatMap(fn (string $csv) => Str::of($csv)->explode(',')->map(fn (string $v): string => trim($v))->filter())\n            ->unique()\n            ->values()\n            ->all();\n\n        $batchResults = $resolver->batchResolve($selfLink, $matchField, $allParts);\n\n        return collect($csvValues)\n            ->mapWithKeys(fn (string $csv): array => [\n                $csv => Str::of($csv)->explode(',')->map(fn (string $v): string => trim($v))->filter()\n                    ->map(fn (string $part) => $batchResults[$part] ?? null)\n                    ->filter()\n                    ->first(),\n            ])\n            ->all();\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/Validation/ColumnValidator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support\\Validation;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\n\nfinal class ColumnValidator\n{\n    public function validate(ColumnData $column, string $value): ?ValidationError\n    {\n        $type = $column->getType();\n\n        return match (true) {\n            $type->isDateOrDateTime() => $this->validateDate($column, $value),\n            $type->isFloat() => $this->validateNumber($column, $value),\n            $type->isBoolean() => $this->validateBoolean($value),\n            $column->isMultiChoiceArbitrary() => $this->validateMultiChoiceArbitrary($column, $value),\n            $column->isMultiChoicePredefined() => $this->validateMultiChoicePredefined($column, $value),\n            $column->isSingleChoicePredefined() => $this->validateSingleChoice($column, $value),\n            default => $this->validateText($column, $value),\n        };\n    }\n\n    private function validateDate(ColumnData $column, string $value): ?ValidationError\n    {\n        $format = $column->dateFormat ?? DateFormat::ISO;\n\n        if (! $format->parse($value, $column->getType()->isTimestamp()) instanceof Carbon) {\n            return ValidationError::message(\"Invalid date format. Expected: {$format->getLabel()}\");\n        }\n\n        return null;\n    }\n\n    private function validateNumber(ColumnData $column, string $value): ?ValidationError\n    {\n        $format = $column->numberFormat ?? NumberFormat::POINT;\n\n        if ($format->parse($value) === null) {\n            return ValidationError::message(\"Invalid number format. Expected: {$format->getLabel()}\");\n        }\n\n        return null;\n    }\n\n    private function validateSingleChoice(ColumnData $column, string $value): ?ValidationError\n    {\n        $originalValues = $this->getChoiceValues($column);\n        $lowercasedValues = $this->lowercaseValues($originalValues);\n\n        if (in_array(mb_strtolower($value), $lowercasedValues, true)) {\n            return null;\n        }\n\n        return ValidationError::message($this->formatInvalidChoiceMessage($originalValues));\n    }\n\n    private function validateMultiChoicePredefined(ColumnData $column, string $value): ?ValidationError\n    {\n        $lowercasedValues = $this->lowercaseValues($this->getChoiceValues($column));\n\n        $errors = $this->parseCommaSeparated($value)\n            ->reject(fn (string $item): bool => in_array(mb_strtolower($item), $lowercasedValues, true))\n            ->mapWithKeys(fn (string $item): array => [$item => 'Not a valid option'])\n            ->all();\n\n        if ($errors !== []) {\n            return ValidationError::itemErrors($errors);\n        }\n\n        return null;\n    }\n\n    private function validateMultiChoiceArbitrary(ColumnData $column, string $value): ?ValidationError\n    {\n        $rules = $this->getPreviewRules($column);\n\n        if ($rules === []) {\n            return null;\n        }\n\n        $errors = $this->parseCommaSeparated($value)\n            ->mapWithKeys(fn (string $item): array => [$item => $this->runValidator($item, $rules)])\n            ->filter()\n            ->all();\n\n        if ($errors !== []) {\n            return ValidationError::itemErrors($errors);\n        }\n\n        return null;\n    }\n\n    private function validateBoolean(string $value): ?ValidationError\n    {\n        $normalized = strtolower(trim($value));\n\n        if (in_array($normalized, ['1', '0', 'true', 'false', 'yes', 'no', 'on', 'off'], true)) {\n            return null;\n        }\n\n        return ValidationError::message('The value must be true or false (accepted: true, false, 1, 0, yes, no).');\n    }\n\n    private function validateText(ColumnData $column, string $value): ?ValidationError\n    {\n        $rules = $this->getPreviewRules($column);\n\n        if ($rules === []) {\n            return null;\n        }\n\n        $error = $this->runValidator($value, $rules);\n\n        if ($error !== null) {\n            return ValidationError::message($error);\n        }\n\n        return null;\n    }\n\n    /** @return Collection<int, non-falsy-string> */\n    private function parseCommaSeparated(string $value): Collection\n    {\n        return str($value)\n            ->explode(',')\n            ->map(fn (string $v): string => trim($v))\n            ->filter()\n            ->values();\n    }\n\n    /** @return array<int, string> */\n    private function getChoiceValues(ColumnData $column): array\n    {\n        return collect($column->importField->options ?? [])\n            ->pluck('value')\n            ->all();\n    }\n\n    /**\n     * @param  array<int, string>  $values\n     * @return array<int, string>\n     */\n    private function lowercaseValues(array $values): array\n    {\n        return array_map(mb_strtolower(...), $values);\n    }\n\n    /** @param array<int, string> $validValues */\n    private function formatInvalidChoiceMessage(array $validValues): string\n    {\n        $preview = collect($validValues)->take(5)->implode(', ');\n        $suffix = count($validValues) > 5 ? '...' : '';\n\n        return \"Invalid choice. Must be one of: {$preview}{$suffix}\";\n    }\n\n    /** @return array<int, string> */\n    private function getPreviewRules(ColumnData $column): array\n    {\n        return collect($column->getRules())\n            ->reject(fn (string $rule): bool => in_array($rule, ['required', 'nullable'], true))\n            ->values()\n            ->all();\n    }\n\n    /** @param array<int, string> $rules */\n    private function runValidator(string $value, array $rules): ?string\n    {\n        $validator = Validator::make(['value' => $value], ['value' => $rules]);\n\n        if ($validator->passes()) {\n            return null;\n        }\n\n        return $validator->errors()->first('value');\n    }\n}\n"
  },
  {
    "path": "packages/ImportWizard/src/Support/Validation/ValidationError.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\ImportWizard\\Support\\Validation;\n\n/**\n * Value object representing a validation error.\n *\n * Handles both simple error messages and per-item errors for multi-value fields.\n * Provides clean serialization/deserialization for database storage.\n */\nfinal readonly class ValidationError\n{\n    /**\n     * @param  string|null  $message  Simple error message\n     * @param  array<string, string>  $itemErrors  Per-item errors for multi-value fields\n     */\n    private function __construct(\n        private ?string $message = null,\n        private array $itemErrors = [],\n    ) {}\n\n    /**\n     * Create a simple error message.\n     */\n    public static function message(string $message): self\n    {\n        return new self(message: $message);\n    }\n\n    /**\n     * Create per-item errors for multi-value fields.\n     *\n     * @param  array<string, string>  $errors  Map of value => error message\n     */\n    public static function itemErrors(array $errors): self\n    {\n        return new self(itemErrors: $errors);\n    }\n\n    /**\n     * Create from database storage format.\n     *\n     * Handles both JSON (per-item errors) and plain strings (simple message).\n     */\n    public static function fromStorageFormat(?string $stored): ?self\n    {\n        if ($stored === null || $stored === '') {\n            return null;\n        }\n\n        $decoded = json_decode($stored, true);\n\n        if (is_array($decoded) && json_last_error() === JSON_ERROR_NONE) {\n            return new self(itemErrors: $decoded);\n        }\n\n        return new self(message: $stored);\n    }\n\n    /**\n     * Convert to database storage format.\n     *\n     * Returns JSON for per-item errors, plain string for simple message.\n     */\n    public function toStorageFormat(): string\n    {\n        if ($this->itemErrors !== []) {\n            return json_encode($this->itemErrors, JSON_THROW_ON_ERROR);\n        }\n\n        return $this->message ?? '';\n    }\n\n    public function hasItemErrors(): bool\n    {\n        return $this->itemErrors !== [];\n    }\n\n    public function getMessage(): ?string\n    {\n        return $this->message;\n    }\n\n    /**\n     * @return array<string, string>\n     */\n    public function getItemErrors(): array\n    {\n        return $this->itemErrors;\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/README.md",
    "content": "# OnboardSeed\n\n## Overview\n\nOnboardSeed provides a structured way to seed demo data for new teams. It uses YAML fixtures to define entities and\ntheir relationships, with a clean API for generating consistent demo data across multiple environments.\n\n## Features\n\n- Declarative YAML-based fixture definitions\n- Registry pattern for tracking entity relationships\n- All relationships defined directly in YAML fixtures\n- Consistent handling of custom fields\n- Extendable architecture for adding new entity types\n\n## Fixture Format\n\nAll fixtures follow a standardized format:\n\n```yaml\n# Required attributes for the entity\nname: \"Entity Name\"              # Required for most entities\ntitle: \"Entity Title\"            # For tasks/notes\n\n# References to other entities (singular form)\ncompany: company_key             # Reference to another entity\n\n# For notes, use noteable_type and noteable_key\n# Important: noteable_type should be SINGULAR (company, person)\nnoteable_type: company           # The singular entity type \nnoteable_key: company_fixture_key # The key of the referenced entity\n\n# Many-to-many relationships\nassigned_people: # Use plural form as property name\n    - person_key1                  # List related entity keys\n    - person_key2\n\n# Custom fields\ncustom_fields: # All custom field values under this key\n    field_code: value              # Simple value\n    another_field: [ value1, value2 ]  # Array value\n\n    # Dynamic value using simple date expression\n    date_field: '{{ +5d }}'\n```\n\n### Relationship Types in YAML\n\nThe package supports defining different types of relationships directly in YAML fixtures:\n\n1. **Belongs-To Relationships** - References to parent entities:\n   ```yaml\n   # In people/tim.yaml\n   company: apple  # Person belongs to the Apple company\n   ```\n\n2. **Many-to-Many Relationships** - Lists of related entities:\n   ```yaml\n   # In tasks/meeting.yaml\n   assigned_people:\n     - tim\n     - dylan\n   ```\n\n3. **Polymorphic Relationships** - Used for notes and other polymorphic relations:\n   ```yaml\n   # In notes/meeting_note.yaml\n   noteable_type: company  # The entity type (singular)\n   noteable_key: apple     # The entity key\n   ```\n\n### Naming Conventions\n\n- **Fixture Files**: `lowercase_with_underscores.yaml`\n- **Entity Keys**: Same as the filename without extension\n- **Entity References**: Always use the singular form of the entity type\n    - Example: In fixtures, use `company: figma` (not `companies: figma`)\n    - For notes, use `noteable_type: company` (not `noteable_type: companies`)\n- **Registry Keys**: Always use the plural form of the entity type\n    - Internally, entities are stored in the registry with plural keys\n    - Example: `companies`, `people`, `opportunities`\n- **Relationship Lists**: Use plural form of the entity type\n    - Example: `assigned_people`, `related_tasks`\n\n## Adding New Fixture Data\n\n### 1. Create a YAML File\n\nCreate a new YAML file in the appropriate directory:\n\n```yaml\n# resources/fixtures/companies/new_company.yaml\nname: New Company Name\ncustom_fields:\n    domain_name: https://example.com\n    icp: true\n    linkedin: https://www.linkedin.com/company/example\n```\n\nFor tasks with people relationships:\n\n```yaml\n# resources/fixtures/tasks/meeting.yaml\ntitle: Team Meeting\nassigned_people:\n    - person_key1\n    - person_key2\ncustom_fields:\n    description: Weekly team meeting\n    due_date: '{{ +2d }}'\n    status: To do\n    priority: High\n```\n\nFor notes that reference other entities:\n\n```yaml\n# resources/fixtures/notes/company_note.yaml\ntitle: Meeting Notes\nnoteable_type: company          # Singular form\nnoteable_key: new_company       # The key of the company\ncustom_fields:\n    body: <p>Important meeting notes about this company.</p>\n```\n\n### 2. Handling Relationships in Seeders\n\nEach model seeder has handlers for its specific relationship types:\n\n```php\n// In TaskSeeder.php - handling people assignments\nif (isset($data['assigned_people']) && is_array($data['assigned_people'])) {\n    foreach ($data['assigned_people'] as $personKey) {\n        $person = FixtureRegistry::get('people', $personKey);\n        $task->people()->attach($person->id);\n    }\n}\n\n// In NoteSeeder.php - handling polymorphic relationships\n$noteableType = $data['noteable_type'] ?? null;\n$noteableKey = $data['noteable_key'] ?? null;\n$registryKey = $this->getPluralEntityType($noteableType);\n$noteable = FixtureRegistry::get($registryKey, $noteableKey);\n```\n\n## Adding a New Entity Type\n\n### 1. Create Fixture Directory\n\n```bash\nmkdir -p resources/fixtures/new_entity_type\n```\n\n### 2. Create Fixtures\n\nCreate YAML files for your new entity type:\n\n```yaml\n# resources/fixtures/new_entity_type/example.yaml\nname: Example\ncustom_fields:\n    field1: value1\n    field2: value2\n```\n\n### 3. Create a Seeder\n\nCreate a new seeder class that extends BaseModelSeeder:\n\n```php\n<?php\n\nnamespace Relaticle\\OnboardSeed\\ModelSeeders;\n\nuse App\\Models\\NewEntityType;\nuse Relaticle\\OnboardSeed\\Support\\BaseModelSeeder;\n\nfinal class NewEntityTypeSeeder extends BaseModelSeeder\n{\n    protected string $modelClass = NewEntityType::class;\n    protected string $entityType = 'new_entity_types'; // Plural form\n    \n    protected array $fieldCodes = [\n        'field1',\n        'field2',\n    ];\n    \n    protected function createEntitiesFromFixtures(Team $team, User $user, array $context = []): array\n    {\n        $fixtures = $this->loadEntityFixtures();\n        $entities = [];\n        \n        foreach ($fixtures as $key => $data) {\n            $entity = $this->createEntityFromFixture($team, $user, $key, $data);\n            $entities[$key] = $entity;\n        }\n        \n        return [\n            'new_entity_types' => $entities, // Plural form\n        ];\n    }\n    \n    private function createEntityFromFixture(Team $team, User $user, string $key, array $data): NewEntityType\n    {\n        $attributes = [\n            'name' => $data['name'],\n            // other attributes\n        ];\n        \n        $customFields = $data['custom_fields'] ?? [];\n        \n        return $this->registerEntityFromFixture($key, $attributes, $customFields, $team, $user);\n    }\n}\n```\n\n### 4. Register the Seeder\n\nAdd your seeder to the sequence in `OnboardSeedManager`:\n\n```php\nprivate array $entitySeederSequence = [\n    CompanySeeder::class,\n    // ...\n    NewEntityTypeSeeder::class,\n];\n```\n\n### 5. Update Type Mapping for Notes (If Needed)\n\nIf the new entity type can have notes attached, update the `$entityTypeMap` in the NoteSeeder:\n\n```php\nprivate array $entityTypeMap = [\n    // Existing mappings...\n    'new_entity_type' => 'new_entity_types', // Singular to plural mapping\n];\n```\n\n## Template Expressions\n\nYou can use dynamic date values in fixtures using simple expressions:\n\n```yaml\n# Simple date keywords\ndue_date: '{{ now }}'           # Current datetime\nstart_date: '{{ today }}'       # Today's date\nend_date: '{{ tomorrow }}'      # Tomorrow's date\nlast_contact: '{{ yesterday }}' # Yesterday's date\nmeeting_date: '{{ nextWeek }}'  # One week from today\nprevious_date: '{{ lastWeek }}' # One week before today\npayment_date: '{{ nextMonth }}' # One month from today\nlast_payment: '{{ lastMonth }}' # One month before today\n\n# Relative dates with simple syntax\nfollowup_date: '{{ +7d }}'      # 7 days from now (+Nd for N days)\nreview_date: '{{ +2w }}'        # 2 weeks from now (+Nw for N weeks)\nrenewal_date: '{{ +3m }}'       # 3 months from now (+Nm for N months)\ncontract_date: '{{ +1y }}'      # 1 year from now (+Ny for N years)\ndeadline_date: '{{ +5b }}'      # 5 business days from now (+Nb for N business days)\n```\n\nFor formatting dates, you can handle that in your model's accessor/mutator or in the seeder class.\n\n## Best Practices\n\n1. **Keep fixtures small and focused** - One entity per file\n2. **Use descriptive keys** - Keys should describe the entity's role\n3. **Organize fixtures logically** - Group related fixtures together\n4. **Define all relationships in YAML** - Avoid defining relationships in PHP code\n5. **Use references consistently** - Always reference by fixture key\n6. **Remember singular vs plural forms** - Use singular in fixture references, plural in entity types \n"
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/companies/airbnb.yaml",
    "content": "name: Airbnb\ncustom_fields:\n  domains: https://airbnb.com\n  icp: true\n  linkedin: https://www.linkedin.com/company/airbnb "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/companies/apple.yaml",
    "content": "name: Apple\ncustom_fields:\n  domains: https://apple.com\n  icp: true\n  linkedin: https://www.linkedin.com/company/apple "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/companies/figma.yaml",
    "content": "name: Figma\ncustom_fields:\n  domains: https://figma.com\n  icp: true\n  linkedin: https://www.linkedin.com/company/figma "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/companies/notion.yaml",
    "content": "name: Notion\ncustom_fields:\n  domains: https://notion.com\n  icp: true\n  linkedin: https://www.linkedin.com/company/notion-so "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/notes/airbnb_note.yaml",
    "content": "title: Hospitality platform integration\nnoteable_type: company\nnoteable_key: airbnb\ncustom_fields:\n  body: <p>Airbnb is looking to enhance their host tools with our analytics solution. Brian expressed interest in a custom dashboard for hosts to better understand guest preferences.</p> "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/notes/apple_note.yaml",
    "content": "title: Developer partnership discussion\nnoteable_type: company\nnoteable_key: apple\ncustom_fields:\n  body: <p>Apple is interested in exploring a partnership for their developer ecosystem. They need a comprehensive solution within 3 months. Tim will be our main contact.</p> "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/notes/dylan_note.yaml",
    "content": "title: Dylan contact information\nnoteable_type: people\nnoteable_key: dylan\ncustom_fields:\n  body: <p>Dylan is the CEO and primary decision maker. He prefers communication via email rather than phone calls. He has final budget approval for the enterprise plan.</p> "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/notes/figma_note.yaml",
    "content": "title: Initial meeting summary\nnoteable_type: company\nnoteable_key: figma\ncustom_fields:\n  body: <p>Initial meeting with Figma went well. They're interested in our enterprise solutions and would like a proposal by next week. Key decision maker is Dylan.</p> "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/notes/notion_note.yaml",
    "content": "title: API integration possibilities\nnoteable_type: company\nnoteable_key: notion\ncustom_fields:\n  body: <p>Notion team is interested in exploring integration opportunities. They're looking for ways to connect their platform with our services. Ivan will be our primary contact for technical discussions.</p> "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/opportunities/airbnb_analytics.yaml",
    "content": "name: Airbnb Host Analytics Platform\ncompany: airbnb\ncustom_fields:\n  amount: 20000\n  close_date: '{{ +4w }}'\n  stage: Prospecting"
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/opportunities/apple_partnership.yaml",
    "content": "name: Apple Developer Partnership\ncompany: apple\ncustom_fields:\n  amount: 25000\n  close_date: '{{ +1m }}'\n  stage: Needs Analysis "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/opportunities/figma_enterprise.yaml",
    "content": "name: Figma Enterprise Plan\ncompany: figma\ncustom_fields:\n  amount: 15000\n  close_date: '{{ +2w }}'\n  stage: Proposal/Price Quote "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/opportunities/notion_integration.yaml",
    "content": "name: Notion API Integration\ncompany: notion\ncustom_fields:\n  amount: 18000\n  close_date: '{{ +3w }}'\n  stage: Qualification"
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/people/brian.yaml",
    "content": "name: Brian Chesky\ncompany: airbnb\ncustom_fields:\n  emails:\n    - brian@airbnb.com\n  phone_number: \"+14155550100\"\n  job_title: CEO & Co-founder\n  linkedin: https://www.linkedin.com/in/brianchesky/ "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/people/dylan.yaml",
    "content": "name: Dylan Field\ncompany: figma\ncustom_fields:\n  emails:\n    - dylan@figma.com\n  phone_number: \"+14155550101\"\n  job_title: CEO\n  linkedin: https://www.linkedin.com/in/dylanfield/ "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/people/ivan.yaml",
    "content": "name: Ivan Zhao\ncompany: notion\ncustom_fields:\n  emails:\n    - ivan@notion.com\n  phone_number: \"+14155550102\"\n  job_title: Co-founder\n  linkedin: https://www.linkedin.com/in/ivzhao/ "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/people/tim.yaml",
    "content": "name: Tim Cook\ncompany: apple\ncustom_fields:\n  emails:\n    - tim@apple.com\n  phone_number: \"+14155550103\"\n  job_title: CEO\n  linkedin: https://www.linkedin.com/in/timcook/ "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/tasks/brian_call.yaml",
    "content": "title: Discovery call with Brian\nassigned_people:\n  - brian\ncustom_fields:\n  description: Schedule a call to discuss potential partnership opportunities with Airbnb.\n  due_date: '{{ +7d }}'\n  status: To do\n  priority: High "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/tasks/dylan_followup.yaml",
    "content": "title: Follow up with Dylan\n# Add people assignment directly in the YAML\nassigned_people:\n  - dylan\ncustom_fields:\n  description: Discuss the Figma enterprise plan proposal and address any questions he may have.\n  due_date: '{{ +3d }}'\n  status: To do\n  priority: High "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/tasks/ivan_meeting.yaml",
    "content": "title: Integration meeting with Ivan\nassigned_people:\n  - ivan\ncustom_fields:\n  description: Discuss API integration possibilities with Notion and explore collaboration features.\n  due_date: '{{ +10d }}'\n  status: To do\n  priority: High "
  },
  {
    "path": "packages/OnboardSeed/resources/fixtures/tasks/tim_proposal.yaml",
    "content": "title: Send proposal to Tim\nassigned_people:\n  - tim\ncustom_fields:\n  description: Prepare and send the final proposal for the Apple developer partnership.\n  due_date: '{{ +5d }}'\n  status: To do\n  priority: Medium "
  },
  {
    "path": "packages/OnboardSeed/resources/templates/entity_template.yaml",
    "content": "# Template for creating a new fixture\n# Replace values with your actual data\n\n# Required entity attributes\n# --------------------------\n# Use 'name' for most entities (companies, people)\nname: \"Entity Name\"\n# Use 'title' for task or content entities (tasks, notes)\ntitle: \"Entity Title\"\n\n# Entity references \n# ----------------\n# IMPORTANT: Always use singular form of entity type\n# (e.g., 'company' not 'companies')\n# The value should be the key of an existing fixture\ncompany: company_key   # NOT 'companies: company_key'\nperson: person_key     # NOT 'people: person_key'\nopportunity: opportunity_key\n\n# Many-to-many relationships\n# --------------------------\n# For entities with many-to-many relationships (e.g., tasks with people)\nassigned_people:        # Use the plural form for the property name\n  - person_key1         # List the keys of related entities\n  - person_key2\n  \n# OR for many-to-many relationships in the other direction:\nrelated_tasks:          # Use the plural form for the property name\n  - task_key1           # List the keys of related entities\n  - task_key2\n\n# For notes, use noteable_type and noteable_key\n# IMPORTANT: noteable_type should be SINGULAR\nnoteable_type: company  # Singular form (NOT 'companies')\nnoteable_key: company_key  # The key of the referenced entity\n\n# Custom fields\n# ------------\n# All custom field values go under this section\ncustom_fields:\n  # Simple value\n  text_field: \"Text value\"\n  \n  # Boolean value\n  boolean_field: true\n  \n  # Numeric value\n  amount: 10000\n  \n  # Array value\n  emails:\n    - user@example.com\n    - another@example.com\n  \n  # Reference to option/dropdown value\n  # Will be resolved to option ID using the label\n  stage: \"Option Label\"\n  status: \"To do\"\n  \n  # Dynamic value using Laravel's date functions\n  # These will be evaluated at runtime\n  date_field: '{{ now()->addDays(7)->format(\"Y-m-d\") }}'\n  due_date: '{{ now()->addWeeks(2)->format(\"Y-m-d H:i:s\") }}'\n  \n  # Rich text content\n  body: <p>This is a paragraph of <strong>rich text</strong> content</p> "
  },
  {
    "path": "packages/OnboardSeed/src/Contracts/ModelSeederInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\Contracts;\n\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Support\\Collection;\n\ninterface ModelSeederInterface\n{\n    public function seed(Team $team, Authenticatable $user): void;\n\n    /**\n     * Get custom fields for this model\n     *\n     * @return Collection<string, mixed>\n     */\n    public function customFields(): Collection;\n\n    /**\n     * Initialize the seeder with necessary dependencies\n     *\n     * @return $this\n     */\n    public function initialize(): self;\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/ModelSeeders/CompanySeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\ModelSeeders;\n\nuse App\\Enums\\CustomFields\\CompanyField as CompanyCustomField;\nuse App\\Models\\Company;\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Relaticle\\OnboardSeed\\Support\\BaseModelSeeder;\n\nfinal class CompanySeeder extends BaseModelSeeder\n{\n    protected string $modelClass = Company::class;\n\n    protected string $entityType = 'companies';\n\n    protected array $fieldCodes = [\n        CompanyCustomField::DOMAINS->value,\n        CompanyCustomField::ICP->value,\n        CompanyCustomField::LINKEDIN->value,\n    ];\n\n    protected function createEntitiesFromFixtures(Team $team, Authenticatable $user): void\n    {\n        $fixtures = $this->loadEntityFixtures();\n\n        foreach ($fixtures as $key => $data) {\n            $this->createCompanyFromFixture($team, $user, $key, $data);\n        }\n    }\n\n    /**\n     * Create a company from fixture data\n     *\n     * @param  array<string, mixed>  $data\n     */\n    private function createCompanyFromFixture(Team $team, Authenticatable $user, string $key, array $data): Company\n    {\n        $attributes = [\n            'name' => $data['name'],\n            'account_owner_id' => $user->getAuthIdentifier(),\n        ];\n\n        $customFields = $data['custom_fields'] ?? [];\n\n        /** @var Company */\n        return $this->registerEntityFromFixture($key, $attributes, $customFields, $team, $user);\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/ModelSeeders/NoteSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\ModelSeeders;\n\nuse App\\Enums\\CustomFields\\NoteField as NoteCustomField;\nuse App\\Models\\Note;\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\OnboardSeed\\Support\\BaseModelSeeder;\nuse Relaticle\\OnboardSeed\\Support\\FixtureRegistry;\n\nfinal class NoteSeeder extends BaseModelSeeder\n{\n    protected string $modelClass = Note::class;\n\n    protected string $entityType = 'notes';\n\n    /**\n     * @var array<string, string>\n     */\n    private array $entityTypeMap = [\n        'company' => 'companies',\n        'person' => 'people',\n        'opportunity' => 'opportunities',\n        'task' => 'tasks',\n        'note' => 'notes',\n    ];\n\n    protected array $fieldCodes = [\n        NoteCustomField::BODY->value,\n    ];\n\n    protected function createEntitiesFromFixtures(Team $team, Authenticatable $user): void\n    {\n        $fixtures = $this->loadEntityFixtures();\n\n        foreach ($fixtures as $key => $data) {\n            $noteableType = $data['noteable_type'] ?? null;\n            $noteableKey = $data['noteable_key'] ?? null;\n\n            if (! $noteableType || ! $noteableKey) {\n                Log::warning(\"Missing noteable reference for note: {$key}\");\n\n                continue;\n            }\n\n            $registryKey = $this->getPluralEntityType($noteableType);\n            $noteable = FixtureRegistry::get($registryKey, $noteableKey);\n\n            if (! $noteable instanceof Model) {\n                Log::warning(\"Noteable entity not found for note: {$key}, entity type: {$noteableType} (registry key: {$registryKey}), key: {$noteableKey}\");\n\n                continue;\n            }\n\n            $this->createNoteFromFixture($noteable, $user, $key, $data);\n        }\n    }\n\n    private function getPluralEntityType(string $singularType): string\n    {\n        return $this->entityTypeMap[$singularType] ?? Str::plural($singularType);\n    }\n\n    /** @param  array<string, mixed>  $data */\n    private function createNoteFromFixture(\n        Model $noteable,\n        Authenticatable $user,\n        string $key,\n        array $data\n    ): Note {\n        $customFields = $data['custom_fields'] ?? [];\n\n        assert(method_exists($noteable, 'notes'));\n\n        /** @var Note $note */\n        $note = $noteable->notes()->create([\n            'title' => $data['title'],\n            'team_id' => $this->teamId,\n            'creator_id' => $user->getAuthIdentifier(),\n            ...$this->getGlobalAttributes(),\n        ]);\n\n        $this->applyCustomFields($note, $customFields);\n\n        FixtureRegistry::register($this->entityType, $key, $note);\n\n        return $note;\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/ModelSeeders/OpportunitySeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\ModelSeeders;\n\nuse App\\Enums\\CustomFields\\OpportunityField as OpportunityCustomField;\nuse App\\Models\\Company;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Support\\Facades\\Log;\nuse Relaticle\\OnboardSeed\\Support\\BaseModelSeeder;\nuse Relaticle\\OnboardSeed\\Support\\FixtureRegistry;\n\nfinal class OpportunitySeeder extends BaseModelSeeder\n{\n    protected string $modelClass = Opportunity::class;\n\n    protected string $entityType = 'opportunities';\n\n    protected array $fieldCodes = [\n        OpportunityCustomField::AMOUNT->value,\n        OpportunityCustomField::CLOSE_DATE->value,\n        OpportunityCustomField::STAGE->value,\n    ];\n\n    protected function createEntitiesFromFixtures(Team $team, Authenticatable $user): void\n    {\n        $fixtures = $this->loadEntityFixtures();\n\n        foreach ($fixtures as $key => $data) {\n            $companyKey = $data['company'] ?? null;\n\n            if (! $companyKey) {\n                Log::warning(\"Missing company reference for opportunity: {$key}\");\n\n                continue;\n            }\n\n            $company = FixtureRegistry::get('companies', $companyKey);\n\n            if (! $company instanceof Company) {\n                Log::warning(\"Company not found for opportunity: {$key}, company key: {$companyKey}\");\n\n                continue;\n            }\n\n            $this->createOpportunityFromFixture($team, $user, $company, $key, $data);\n        }\n    }\n\n    /**\n     * Create an opportunity from fixture data\n     *\n     * @param  array<string, mixed>  $data\n     */\n    private function createOpportunityFromFixture(\n        Team $team,\n        Authenticatable $user,\n        Company $company,\n        string $key,\n        array $data\n    ): Opportunity {\n        $attributes = [\n            'name' => $data['name'],\n            'company_id' => $company->id,\n        ];\n\n        $customFields = $data['custom_fields'] ?? [];\n\n        // Define field mappings for custom processing\n        $fieldMappings = [\n            OpportunityCustomField::CLOSE_DATE->value => fn (mixed $value): mixed => is_string($value) ? $this->evaluateTemplateExpression($value) : $value,\n            OpportunityCustomField::STAGE->value => 'option',\n        ];\n\n        // Process custom fields using utility method\n        $processedFields = $this->processCustomFieldValues($customFields, $fieldMappings);\n\n        /** @var Opportunity */\n        return $this->registerEntityFromFixture($key, $attributes, $processedFields, $team, $user);\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/ModelSeeders/PeopleSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\ModelSeeders;\n\nuse App\\Enums\\CustomFields\\PeopleField as PeopleCustomField;\nuse App\\Models\\Company;\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Support\\Facades\\Log;\nuse Relaticle\\OnboardSeed\\Support\\BaseModelSeeder;\nuse Relaticle\\OnboardSeed\\Support\\FixtureRegistry;\n\nfinal class PeopleSeeder extends BaseModelSeeder\n{\n    protected string $modelClass = People::class;\n\n    protected string $entityType = 'people';\n\n    protected array $fieldCodes = [\n        PeopleCustomField::EMAILS->value,\n        PeopleCustomField::PHONE_NUMBER->value,\n        PeopleCustomField::JOB_TITLE->value,\n        PeopleCustomField::LINKEDIN->value,\n    ];\n\n    protected function createEntitiesFromFixtures(Team $team, Authenticatable $user): void\n    {\n        $fixtures = $this->loadEntityFixtures();\n\n        foreach ($fixtures as $key => $data) {\n            $companyKey = $data['company'] ?? null;\n\n            if (! $companyKey) {\n                Log::warning(\"Missing company reference for person: {$key}\");\n\n                continue;\n            }\n\n            $company = FixtureRegistry::get('companies', $companyKey);\n\n            if (! $company instanceof Company) {\n                Log::warning(\"Company not found for person: {$key}, company key: {$companyKey}\");\n\n                continue;\n            }\n\n            $this->createPersonFromFixture($company, $team, $user, $key, $data);\n        }\n    }\n\n    /** @param  array<string, mixed>  $data */\n    private function createPersonFromFixture(Company $company, Team $team, Authenticatable $user, string $key, array $data): People\n    {\n        $attributes = [\n            'name' => $data['name'],\n            'company_id' => $company->id,\n        ];\n\n        $customFields = $data['custom_fields'] ?? [];\n\n        /** @var People */\n        return $this->registerEntityFromFixture($key, $attributes, $customFields, $team, $user);\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/ModelSeeders/TaskSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\ModelSeeders;\n\nuse App\\Enums\\CustomFields\\TaskField as TaskCustomField;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse Exception;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Relaticle\\OnboardSeed\\Support\\BaseModelSeeder;\nuse Relaticle\\OnboardSeed\\Support\\FixtureRegistry;\n\nfinal class TaskSeeder extends BaseModelSeeder\n{\n    protected string $modelClass = Task::class;\n\n    protected string $entityType = 'tasks';\n\n    protected array $fieldCodes = [\n        TaskCustomField::DESCRIPTION->value,\n        TaskCustomField::DUE_DATE->value,\n        TaskCustomField::STATUS->value,\n        TaskCustomField::PRIORITY->value,\n    ];\n\n    protected function createEntitiesFromFixtures(Team $team, Authenticatable $user): void\n    {\n        $fixtures = $this->loadEntityFixtures();\n\n        foreach ($fixtures as $key => $data) {\n            $task = $this->createTaskFromFixture($team, $user, $key, $data);\n\n            if (isset($data['assigned_people']) && is_array($data['assigned_people'])) {\n                $this->assignPeopleToTask($task, $data['assigned_people']);\n            }\n        }\n    }\n\n    /**\n     * Assign people to a task based on people keys\n     *\n     * @param  array<int, string>  $peopleKeys\n     */\n    private function assignPeopleToTask(Task $task, array $peopleKeys): void\n    {\n        foreach ($peopleKeys as $personKey) {\n            $person = FixtureRegistry::get('people', $personKey);\n\n            if (! $person instanceof Model) {\n                Log::warning(\"Person not found for task assignment: {$personKey}\");\n\n                continue;\n            }\n\n            try {\n                $task->people()->attach($person->getKey());\n            } catch (Exception $e) {\n                report($e);\n            }\n        }\n    }\n\n    /**\n     * Create a task from fixture data\n     *\n     * @param  array<string, mixed>  $data\n     */\n    private function createTaskFromFixture(\n        Team $team,\n        Authenticatable $user,\n        string $key,\n        array $data\n    ): Task {\n        $attributes = [\n            'title' => $data['title'],\n            'team_id' => $team->id,\n        ];\n\n        $customFields = $data['custom_fields'] ?? [];\n\n        // Define field mappings for custom processing\n        $fieldMappings = [\n            TaskCustomField::DUE_DATE->value => fn (mixed $value): mixed => is_string($value)\n                ? $this->formatDate($this->evaluateTemplateExpression($value))\n                : $value,\n            TaskCustomField::STATUS->value => 'option',\n            TaskCustomField::PRIORITY->value => 'option',\n        ];\n\n        // Process custom fields using utility method\n        $processedFields = $this->processCustomFieldValues($customFields, $fieldMappings);\n\n        /** @var Task */\n        return $this->registerEntityFromFixture($key, $attributes, $processedFields, $team, $user);\n    }\n\n    /**\n     * Format a date value for the task due date\n     *\n     * @param  mixed  $dateValue  The date value returned from template expression\n     * @return string The formatted date string\n     */\n    private function formatDate(mixed $dateValue): string\n    {\n        if ($dateValue instanceof Carbon) {\n            return $dateValue->format('Y-m-d H:i:s');\n        }\n\n        return (string) $dateValue;\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/OnboardSeedManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\OnboardSeed\\Contracts\\ModelSeederInterface;\nuse Relaticle\\OnboardSeed\\ModelSeeders\\CompanySeeder;\nuse Relaticle\\OnboardSeed\\ModelSeeders\\NoteSeeder;\nuse Relaticle\\OnboardSeed\\ModelSeeders\\OpportunitySeeder;\nuse Relaticle\\OnboardSeed\\ModelSeeders\\PeopleSeeder;\nuse Relaticle\\OnboardSeed\\ModelSeeders\\TaskSeeder;\nuse Relaticle\\OnboardSeed\\Support\\FixtureRegistry;\nuse Throwable;\n\nfinal class OnboardSeedManager\n{\n    /** @var array<class-string<ModelSeederInterface>> */\n    private array $entitySeederSequence = [\n        CompanySeeder::class,\n        PeopleSeeder::class,\n        OpportunitySeeder::class,\n        TaskSeeder::class,\n        NoteSeeder::class,\n    ];\n\n    /** @var array<string, ModelSeederInterface> */\n    private array $seeders = [];\n\n    public function generateFor(Authenticatable $user, ?Team $team = null): bool\n    {\n        if (! $team instanceof Team) {\n            /** @var User $user */\n            $user->loadMissing('ownedTeams');\n            $team = $user->personalTeam();\n        }\n\n        try {\n            FixtureRegistry::clear();\n            $this->initializeSeeders();\n\n            Model::withoutEvents(function () use ($user, $team): void {\n                foreach ($this->seeders as $seeder) {\n                    $seeder->seed($team, $user);\n                }\n            });\n\n            return true;\n        } catch (Throwable $e) {\n            report($e);\n\n            return false;\n        }\n    }\n\n    private function initializeSeeders(): void\n    {\n        foreach ($this->entitySeederSequence as $seederClass) {\n            $this->seeders[$seederClass] = resolve($seederClass)->initialize();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/OnboardSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed;\n\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Database\\Seeder;\n\nfinal class OnboardSeeder extends Seeder\n{\n    public function __construct(private readonly OnboardSeedManager $manager) {}\n\n    public function run(Authenticatable $user, ?Team $team = null): void\n    {\n        $this->manager->generateFor($user, $team);\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/Support/BaseModelSeeder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\Support;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\CustomField;\nuse App\\Models\\Team;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\nuse Relaticle\\Flowforge\\Services\\DecimalPosition;\nuse Relaticle\\OnboardSeed\\Contracts\\ModelSeederInterface;\nuse Spatie\\EloquentSortable\\SortableTrait;\n\nabstract class BaseModelSeeder implements ModelSeederInterface\n{\n    /** @var Collection<string, mixed> */\n    protected Collection $customFieldDefinitions;\n\n    protected string $modelClass;\n\n    protected string $entityType;\n\n    /** @var array<int, string> */\n    protected array $fieldCodes = [];\n\n    protected ?string $teamId = null;\n\n    private ?BulkCustomFieldValueWriter $bulkWriter = null;\n\n    private int $positionCounter = 0;\n\n    public function initialize(): self\n    {\n        if (! isset($this->entityType) && isset($this->modelClass)) {\n            $className = class_basename($this->modelClass);\n            $this->entityType = Str::plural(Str::snake($className));\n        }\n\n        return $this;\n    }\n\n    protected function setTeamId(string $teamId): void\n    {\n        $this->teamId = $teamId;\n    }\n\n    /** @return Collection<string, mixed> */\n    public function customFields(): Collection\n    {\n        if ($this->teamId === null) {\n            return collect();\n        }\n\n        return CustomField::query()\n            ->with('options')\n            ->whereTenantId($this->teamId)\n            ->forEntity($this->modelClass)\n            ->whereIn('code', $this->fieldCodes)\n            ->get()\n            ->keyBy('code');\n    }\n\n    protected function prepareForSeed(Team $team): void\n    {\n        $this->setTeamId($team->id);\n        $this->customFieldDefinitions = $this->customFields();\n        $this->positionCounter = 0;\n    }\n\n    public function seed(Team $team, Authenticatable $user): void\n    {\n        $this->prepareForSeed($team);\n\n        $this->createEntitiesFromFixtures($team, $user);\n\n        $this->flushCustomFieldValues();\n    }\n\n    abstract protected function createEntitiesFromFixtures(Team $team, Authenticatable $user): void;\n\n    /** @param  array<string, mixed>  $data */\n    protected function applyCustomFields(HasCustomFields&Model $model, array $data): void\n    {\n        if ($this->teamId === null) {\n            return;\n        }\n\n        foreach ($data as $code => $value) {\n            if (isset($this->customFieldDefinitions[$code])) {\n                $this->getBulkWriter()->queue(\n                    customField: $this->customFieldDefinitions[$code],\n                    value: $value,\n                    entityId: $model->getKey(),\n                    entityType: $model->getMorphClass(),\n                    tenantId: $this->teamId,\n                );\n            }\n        }\n    }\n\n    protected function getBulkWriter(): BulkCustomFieldValueWriter\n    {\n        return $this->bulkWriter ??= new BulkCustomFieldValueWriter;\n    }\n\n    protected function flushCustomFieldValues(): int\n    {\n        return $this->getBulkWriter()->flush();\n    }\n\n    protected function getOptionId(string $fieldCode, string $optionLabel): mixed\n    {\n        $field = $this->customFieldDefinitions[$fieldCode] ?? null;\n\n        if (! $field || ! $field->options || $field->options->isEmpty()) {\n            return null;\n        }\n\n        $option = $field->options->firstWhere('name', $optionLabel);\n\n        if (! $option) {\n            Log::warning(\"Option '{$optionLabel}' not found for field '{$fieldCode}'\");\n\n            return null;\n        }\n\n        return $option->id;\n    }\n\n    /** @return array<string, mixed> */\n    protected function getGlobalAttributes(): array\n    {\n        return [\n            'creation_source' => CreationSource::SYSTEM,\n        ];\n    }\n\n    /** @return array<string, array<string, mixed>> */\n    protected function loadEntityFixtures(): array\n    {\n        return FixtureLoader::load($this->entityType);\n    }\n\n    protected function evaluateTemplateExpression(string $template): mixed\n    {\n        if (! str_starts_with($template, '{{') || ! str_ends_with($template, '}}')) {\n            return $template;\n        }\n\n        $expression = trim(substr($template, 2, -2));\n\n        if (preg_match('/^([+])(\\d+)([dwmyb])$/', $expression, $matches)) {\n            $value = (int) $matches[2];\n            $unit = $matches[3];\n\n            return match ($unit) {\n                'd' => now()->addDays($value),\n                'w' => now()->addWeeks($value),\n                'm' => now()->addMonths($value),\n                'y' => now()->addYears($value),\n                'b' => now()->addWeekdays($value),\n            };\n        }\n\n        return match ($expression) {\n            'now' => now(),\n            'today' => today(),\n            'tomorrow' => today()->addDay(),\n            'yesterday' => today()->subDay(),\n            'nextWeek' => today()->addWeek(),\n            'lastWeek' => today()->subWeek(),\n            'nextMonth' => today()->addMonth(),\n            'lastMonth' => today()->subMonth(),\n            default => $template\n        };\n    }\n\n    /**\n     * @param  array<string, mixed>  $customFields\n     * @param  array<string, callable|string>  $fieldMappings\n     * @return array<string, mixed>\n     */\n    protected function processCustomFieldValues(array $customFields, array $fieldMappings = []): array\n    {\n        $processed = [];\n\n        foreach ($customFields as $code => $value) {\n            if (is_string($value) && str_starts_with($value, '{{') && str_ends_with($value, '}}')) {\n                $value = $this->evaluateTemplateExpression($value);\n            }\n\n            if (isset($fieldMappings[$code])) {\n                $processor = $fieldMappings[$code];\n\n                if ($processor === 'option' && is_string($value)) {\n                    $value = $this->getOptionId($code, $value);\n                } elseif (is_callable($processor)) {\n                    $value = $processor($value);\n                }\n            }\n\n            $processed[$code] = $value;\n        }\n\n        return $processed;\n    }\n\n    /**\n     * @param  array<string, mixed>  $attributes\n     * @param  array<string, mixed>  $customFields\n     */\n    protected function registerEntityFromFixture(string $key, array $attributes, array $customFields, Team $team, Authenticatable $user): Model\n    {\n        $attributes = array_merge($attributes, [\n            'team_id' => $team->id,\n            'creator_id' => $user->getAuthIdentifier(),\n            ...$this->getGlobalAttributes(),\n        ]);\n\n        // SortableTrait's creating event is suppressed by withoutEvents(),\n        // so we manually assign sequential order_column values.\n        if (in_array(SortableTrait::class, class_uses_recursive($this->modelClass), true)) {\n            $this->positionCounter++;\n            $attributes['order_column'] = bcmul((string) $this->positionCounter, DecimalPosition::DEFAULT_GAP, DecimalPosition::SCALE);\n        }\n\n        $entity = resolve($this->modelClass)->create($attributes);\n        $this->applyCustomFields($entity, $customFields);\n\n        FixtureRegistry::register($this->entityType, $key, $entity);\n\n        return $entity;\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/Support/BulkCustomFieldValueWriter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\Support;\n\nuse App\\Models\\CustomField;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\nuse Relaticle\\CustomFields\\Support\\SafeValueConverter;\n\nfinal class BulkCustomFieldValueWriter\n{\n    /** @var array<int, array<string, mixed>> */\n    private array $pendingInserts = [];\n\n    public function queue(\n        CustomField $customField,\n        mixed $value,\n        string $entityId,\n        string $entityType,\n        string $tenantId,\n    ): void {\n        $valueColumn = CustomFieldValue::getValueColumn($customField->type);\n        $safeValue = SafeValueConverter::toDbSafe($value, $customField->type);\n\n        if (is_array($safeValue)) {\n            $safeValue = json_encode($safeValue);\n        }\n\n        $this->pendingInserts[] = [\n            'id' => Str::ulid()->toBase32(),\n            'custom_field_id' => $customField->getKey(),\n            'entity_id' => $entityId,\n            'entity_type' => $entityType,\n            'tenant_id' => $tenantId,\n            $valueColumn => $safeValue,\n        ];\n    }\n\n    public function flush(): int\n    {\n        if ($this->pendingInserts === []) {\n            return 0;\n        }\n\n        $nullDefaults = array_fill_keys([\n            'id', 'custom_field_id', 'entity_id', 'entity_type', 'tenant_id',\n            'string_value', 'text_value', 'boolean_value', 'integer_value',\n            'float_value', 'date_value', 'datetime_value', 'json_value',\n        ], null);\n\n        $normalized = array_map(\n            fn (array $row): array => array_merge($nullDefaults, $row),\n            $this->pendingInserts,\n        );\n\n        $count = count($normalized);\n        $tableName = config('custom-fields.database.table_names.custom_field_values', 'custom_field_values');\n\n        foreach (array_chunk($normalized, 500) as $chunk) {\n            DB::table($tableName)->insert($chunk);\n        }\n\n        $this->pendingInserts = [];\n\n        return $count;\n    }\n\n    public function pending(): int\n    {\n        return count($this->pendingInserts);\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/Support/FixtureLoader.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\Support;\n\nuse Illuminate\\Contracts\\Filesystem\\FileNotFoundException;\nuse Illuminate\\Support\\Facades\\File;\nuse Symfony\\Component\\Yaml\\Yaml;\n\nfinal class FixtureLoader\n{\n    /**\n     * Base path for fixtures\n     */\n    private static string $basePath;\n\n    /**\n     * Set the base path for fixtures\n     */\n    public static function setBasePath(string $path): void\n    {\n        self::$basePath = $path;\n    }\n\n    /**\n     * Get the base path for fixtures\n     */\n    public static function getBasePath(): string\n    {\n        if (! isset(self::$basePath)) {\n            self::$basePath = dirname(__DIR__, 2).'/resources/fixtures';\n        }\n\n        return self::$basePath;\n    }\n\n    /**\n     * Load fixtures for a specific entity type\n     *\n     * @param  string  $type  The entity type (e.g., 'companies', 'people')\n     * @return array<string, array<string, mixed>> The loaded fixtures\n     *\n     * @throws FileNotFoundException\n     */\n    public static function load(string $type): array\n    {\n        $path = self::getBasePath().'/'.$type;\n\n        if (! File::isDirectory($path)) {\n            return [];\n        }\n\n        $fixtures = [];\n        $files = File::files($path);\n\n        foreach ($files as $file) {\n            if ($file->getExtension() !== 'yaml' && $file->getExtension() !== 'yml') {\n                continue;\n            }\n\n            $key = $file->getFilenameWithoutExtension();\n            $content = Yaml::parse(File::get($file->getPathname()));\n            $fixtures[$key] = $content;\n        }\n\n        return $fixtures;\n    }\n}\n"
  },
  {
    "path": "packages/OnboardSeed/src/Support/FixtureRegistry.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\OnboardSeed\\Support;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class FixtureRegistry\n{\n    /**\n     * Registry of entities\n     *\n     * @var array<string, array<string, Model>>\n     */\n    private static array $registry = [];\n\n    /**\n     * Register an entity in the registry\n     *\n     * @param  string  $type  The entity type (e.g., 'companies', 'people')\n     * @param  string  $key  The entity key\n     * @param  Model  $entity  The entity model\n     */\n    public static function register(string $type, string $key, Model $entity): void\n    {\n        if (! isset(self::$registry[$type])) {\n            self::$registry[$type] = [];\n        }\n\n        self::$registry[$type][$key] = $entity;\n    }\n\n    /**\n     * Get an entity from the registry\n     *\n     * @param  string  $type  The entity type\n     * @param  string  $key  The entity key\n     * @return Model|null The entity or null if not found\n     */\n    public static function get(string $type, string $key): ?Model\n    {\n        return self::$registry[$type][$key] ?? null;\n    }\n\n    public static function clear(): void\n    {\n        self::$registry = [];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Enums/SystemAdministratorRole.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Enums;\n\nenum SystemAdministratorRole: string\n{\n    case SuperAdministrator = 'super_administrator';\n\n    public function getLabel(): string\n    {\n        return match ($this) {\n            self::SuperAdministrator => 'Super Administrator',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Exports/CompanyExporter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Exports;\n\nuse App\\Models\\Company;\nuse Filament\\Actions\\Exports\\ExportColumn;\nuse Filament\\Actions\\Exports\\Exporter;\nuse Filament\\Actions\\Exports\\Models\\Export;\nuse Illuminate\\Contracts\\Container\\BindingResolutionException;\nuse Illuminate\\Contracts\\Container\\CircularDependencyException;\nuse Relaticle\\CustomFields\\Facades\\CustomFields;\n\nfinal class CompanyExporter extends Exporter\n{\n    protected static ?string $model = Company::class;\n\n    /**\n     * @throws CircularDependencyException\n     * @throws BindingResolutionException\n     */\n    public static function getColumns(): array\n    {\n        return [\n            ExportColumn::make('id')\n                ->label('ID'),\n            ExportColumn::make('team.name'),\n            ExportColumn::make('creator.name'),\n            ExportColumn::make('accountOwner.name'),\n            ExportColumn::make('name'),\n            ExportColumn::make('created_at'),\n            ExportColumn::make('updated_at'),\n            ExportColumn::make('deleted_at'),\n            ExportColumn::make('creation_source'),\n\n            // Add all custom fields automatically\n            ...CustomFields::exporter()->forModel(self::getModel())->columns(),\n        ];\n    }\n\n    public static function getCompletedNotificationBody(Export $export): string\n    {\n        $body = 'Your company export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';\n\n        if (($failedRowsCount = $export->getFailedRowsCount()) !== 0) {\n            $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';\n        }\n\n        return $body;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Pages/Dashboard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Pages;\n\nuse Filament\\Actions\\Action;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Pages\\Dashboard\\Actions\\FilterAction;\nuse Filament\\Pages\\Dashboard as BaseDashboard;\nuse Filament\\Pages\\Dashboard\\Concerns\\HasFiltersAction;\nuse Filament\\Widgets\\WidgetConfiguration;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\PlatformGrowthStatsWidget;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\RecordDistributionChartWidget;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\SignupTrendChartWidget;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\TopTeamsTableWidget;\n\nfinal class Dashboard extends BaseDashboard\n{\n    use HasFiltersAction;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-home';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Dashboards';\n\n    protected static ?string $navigationLabel = 'Growth';\n\n    protected ?string $heading = 'Relaticle Admin';\n\n    protected ?string $subheading = 'Platform growth and adoption metrics.';\n\n    /**\n     * @return array<class-string | WidgetConfiguration>\n     */\n    public function getWidgets(): array\n    {\n        return [\n            PlatformGrowthStatsWidget::class,\n            SignupTrendChartWidget::class,\n            RecordDistributionChartWidget::class,\n            TopTeamsTableWidget::class,\n        ];\n    }\n\n    public function getColumns(): array\n    {\n        return [\n            'default' => 1,\n            'lg' => 3,\n        ];\n    }\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            FilterAction::make()\n                ->schema([\n                    Select::make('period')\n                        ->label('Time Period')\n                        ->options([\n                            '7' => 'Last 7 days',\n                            '30' => 'Last 30 days',\n                            '90' => 'Last 90 days',\n                            '365' => 'Last 12 months',\n                        ])\n                        ->default('30'),\n                ])\n                ->slideOver(false),\n            Action::make('view-site')\n                ->label('View Website')\n                ->url(config('app.url'))\n                ->icon('heroicon-o-globe-alt')\n                ->color('gray')\n                ->openUrlInNewTab(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Pages/EngagementDashboard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Pages;\n\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Pages\\Dashboard\\Actions\\FilterAction;\nuse Filament\\Pages\\Dashboard as BaseDashboard;\nuse Filament\\Pages\\Dashboard\\Concerns\\HasFiltersAction;\nuse Filament\\Widgets\\WidgetConfiguration;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\ActivationRateWidget;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\UserRetentionChartWidget;\n\nfinal class EngagementDashboard extends BaseDashboard\n{\n    use HasFiltersAction;\n\n    protected static string $routePath = 'engagement';\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-chart-bar';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Dashboards';\n\n    protected ?string $heading = 'User Engagement';\n\n    protected ?string $subheading = 'Activation and retention metrics.';\n\n    protected static ?string $navigationLabel = 'Engagement';\n\n    protected static ?int $navigationSort = 1;\n\n    /**\n     * @return array<class-string | WidgetConfiguration>\n     */\n    public function getWidgets(): array\n    {\n        return [\n            ActivationRateWidget::class,\n            UserRetentionChartWidget::class,\n        ];\n    }\n\n    public function getColumns(): array\n    {\n        return [\n            'default' => 1,\n            'lg' => 3,\n        ];\n    }\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            FilterAction::make()\n                ->schema([\n                    Select::make('period')\n                        ->label('Time Period')\n                        ->options([\n                            '7' => 'Last 7 days',\n                            '30' => 'Last 30 days',\n                            '90' => 'Last 90 days',\n                            '365' => 'Last 12 months',\n                        ])\n                        ->default('30'),\n                ])\n                ->slideOver(false),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/CompanyResource/Pages/CreateCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource;\n\nfinal class CreateCompany extends CreateRecord\n{\n    protected static string $resource = CompanyResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/CompanyResource/Pages/EditCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource;\n\nfinal class EditCompany extends EditRecord\n{\n    protected static string $resource = CompanyResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/CompanyResource/Pages/ListCompanies.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource;\n\nfinal class ListCompanies extends ListRecords\n{\n    protected static string $resource = CompanyResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/CompanyResource/Pages/ViewCompany.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource;\n\nfinal class ViewCompany extends ViewRecord\n{\n    protected static string $resource = CompanyResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/CompanyResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages\\CreateCompany;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages\\EditCompany;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages\\ListCompanies;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages\\ViewCompany;\n\nfinal class CompanyResource extends Resource\n{\n    protected static ?string $model = Company::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-building-office';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'CRM';\n\n    protected static ?int $navigationSort = 1;\n\n    protected static ?string $modelLabel = 'Company';\n\n    protected static ?string $pluralModelLabel = 'Companies';\n\n    protected static ?string $slug = 'companies';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Select::make('team_id')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->required(),\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255),\n                Select::make('account_owner_id')\n                    ->relationship('accountOwner', 'name')\n                    ->searchable(),\n                Select::make('creation_source')\n                    ->options(CreationSource::class)\n                    ->default(CreationSource::WEB),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('accountOwner.name')\n                    ->label('Account Owner')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source')\n                    ->toggleable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->filters([\n                TrashedFilter::make(),\n                SelectFilter::make('team')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('creation_source')\n                    ->label('Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListCompanies::route('/'),\n            'create' => CreateCompany::route('/create'),\n            'view' => ViewCompany::route('/{record}'),\n            'edit' => EditCompany::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/ImportResource/Pages/ListImports.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\Pages;\n\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource;\n\nfinal class ListImports extends ListRecords\n{\n    protected static string $resource = ImportResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/ImportResource/Pages/ViewImport.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\Pages;\n\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource;\n\nfinal class ViewImport extends ViewRecord\n{\n    protected static string $resource = ImportResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/ImportResource/RelationManagers/FailedRowsRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class FailedRowsRelationManager extends RelationManager\n{\n    protected static string $relationship = 'failedRows';\n\n    protected static string|\\BackedEnum|null $icon = Heroicon::OutlinedExclamationTriangle;\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->failedRows()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('id')\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('data')\n                    ->label('Row Data')\n                    ->formatStateUsing(fn (array $state): string => json_encode($state, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR))\n                    ->wrap()\n                    ->limit(100),\n                TextColumn::make('validation_error')\n                    ->label('Validation Error')\n                    ->wrap(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ]);\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/ImportResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\Pages\\ListImports;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\Pages\\ViewImport;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\RelationManagers\\FailedRowsRelationManager;\n\nfinal class ImportResource extends Resource\n{\n    protected static ?string $model = Import::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = Heroicon::OutlinedArrowUpTray;\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'CRM';\n\n    protected static ?int $navigationSort = 5;\n\n    protected static ?string $modelLabel = 'Import';\n\n    protected static ?string $pluralModelLabel = 'Imports';\n\n    protected static ?string $slug = 'imports';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function infolist(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                TextEntry::make('file_name')\n                    ->label('File Name'),\n                TextEntry::make('entity_type')\n                    ->badge(),\n                TextEntry::make('status')\n                    ->badge()\n                    ->color(self::statusColor(...)),\n                TextEntry::make('team.name')\n                    ->label('Team'),\n                TextEntry::make('user.name')\n                    ->label('User'),\n                TextEntry::make('total_rows'),\n                TextEntry::make('created_rows'),\n                TextEntry::make('updated_rows'),\n                TextEntry::make('skipped_rows'),\n                TextEntry::make('failed_rows'),\n                TextEntry::make('created_at')\n                    ->dateTime(),\n                TextEntry::make('completed_at')\n                    ->dateTime(),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('file_name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('entity_type')\n                    ->badge()\n                    ->sortable(),\n                TextColumn::make('status')\n                    ->badge()\n                    ->color(self::statusColor(...))\n                    ->sortable(),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('user.name')\n                    ->label('User')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('total_rows')\n                    ->numeric()\n                    ->toggleable(),\n                TextColumn::make('created_rows')\n                    ->numeric()\n                    ->toggleable(),\n                TextColumn::make('failed_rows')\n                    ->numeric()\n                    ->toggleable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('completed_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->filters([\n                SelectFilter::make('entity_type')\n                    ->options(ImportEntityType::class)\n                    ->multiple(),\n                SelectFilter::make('status')\n                    ->options(ImportStatus::class)\n                    ->multiple(),\n                SelectFilter::make('team')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->preload(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [\n            FailedRowsRelationManager::class,\n        ];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListImports::route('/'),\n            'view' => ViewImport::route('/{record}'),\n        ];\n    }\n\n    private static function statusColor(ImportStatus $state): string\n    {\n        return match ($state) {\n            ImportStatus::Completed => 'success',\n            ImportStatus::Failed => 'danger',\n            ImportStatus::Importing => 'warning',\n            default => 'gray',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/NoteResource/Pages/CreateNote.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource;\n\nfinal class CreateNote extends CreateRecord\n{\n    protected static string $resource = NoteResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/NoteResource/Pages/EditNote.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource;\n\nfinal class EditNote extends EditRecord\n{\n    protected static string $resource = NoteResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/NoteResource/Pages/ListNotes.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource;\n\nfinal class ListNotes extends ListRecords\n{\n    protected static string $resource = NoteResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/NoteResource/Pages/ViewNote.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource;\n\nfinal class ViewNote extends ViewRecord\n{\n    protected static string $resource = NoteResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/NoteResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Note;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages\\CreateNote;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages\\EditNote;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages\\ListNotes;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages\\ViewNote;\n\nfinal class NoteResource extends Resource\n{\n    protected static ?string $model = Note::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-document-text';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Content';\n\n    protected static ?int $navigationSort = 1;\n\n    protected static ?string $modelLabel = 'Note';\n\n    protected static ?string $pluralModelLabel = 'Notes';\n\n    protected static ?string $slug = 'notes';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Select::make('team_id')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->required(),\n                TextInput::make('title')\n                    ->maxLength(255),\n                Select::make('creation_source')\n                    ->options(CreationSource::class)\n                    ->default(CreationSource::WEB),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('title')\n                    ->searchable()\n                    ->sortable()\n                    ->limit(50),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source')\n                    ->toggleable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->filters([\n                TrashedFilter::make(),\n                SelectFilter::make('team')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('creation_source')\n                    ->label('Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListNotes::route('/'),\n            'create' => CreateNote::route('/create'),\n            'view' => ViewNote::route('/{record}'),\n            'edit' => EditNote::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/OpportunityResource/Pages/CreateOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource;\n\nfinal class CreateOpportunity extends CreateRecord\n{\n    protected static string $resource = OpportunityResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/OpportunityResource/Pages/EditOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource;\n\nfinal class EditOpportunity extends EditRecord\n{\n    protected static string $resource = OpportunityResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/OpportunityResource/Pages/ListOpportunities.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource;\n\nfinal class ListOpportunities extends ListRecords\n{\n    protected static string $resource = OpportunityResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/OpportunityResource/Pages/ViewOpportunity.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource;\n\nfinal class ViewOpportunity extends ViewRecord\n{\n    protected static string $resource = OpportunityResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/OpportunityResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Opportunity;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages\\CreateOpportunity;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages\\EditOpportunity;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages\\ListOpportunities;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages\\ViewOpportunity;\n\nfinal class OpportunityResource extends Resource\n{\n    protected static ?string $model = Opportunity::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-currency-dollar';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'CRM';\n\n    protected static ?int $navigationSort = 3;\n\n    protected static ?string $modelLabel = 'Opportunity';\n\n    protected static ?string $pluralModelLabel = 'Opportunities';\n\n    protected static ?string $slug = 'opportunities';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Select::make('team_id')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->required(),\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255),\n                Select::make('company_id')\n                    ->relationship('company', 'name')\n                    ->searchable(),\n                Select::make('contact_id')\n                    ->relationship('contact', 'name')\n                    ->searchable(),\n                Select::make('creation_source')\n                    ->options(CreationSource::class)\n                    ->default(CreationSource::WEB),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('company.name')\n                    ->label('Company')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('contact.name')\n                    ->label('Contact')\n                    ->sortable(),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source')\n                    ->toggleable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->filters([\n                TrashedFilter::make(),\n                SelectFilter::make('team')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('company')\n                    ->relationship('company', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('creation_source')\n                    ->label('Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListOpportunities::route('/'),\n            'create' => CreateOpportunity::route('/create'),\n            'view' => ViewOpportunity::route('/{record}'),\n            'edit' => EditOpportunity::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/PeopleResource/Pages/CreatePeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource;\n\nfinal class CreatePeople extends CreateRecord\n{\n    protected static string $resource = PeopleResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/PeopleResource/Pages/EditPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource;\n\nfinal class EditPeople extends EditRecord\n{\n    protected static string $resource = PeopleResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/PeopleResource/Pages/ListPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource;\n\nfinal class ListPeople extends ListRecords\n{\n    protected static string $resource = PeopleResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/PeopleResource/Pages/ViewPeople.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource;\n\nfinal class ViewPeople extends ViewRecord\n{\n    protected static string $resource = PeopleResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/PeopleResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\People;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages\\CreatePeople;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages\\EditPeople;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages\\ListPeople;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages\\ViewPeople;\n\nfinal class PeopleResource extends Resource\n{\n    protected static ?string $model = People::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-users';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'CRM';\n\n    protected static ?int $navigationSort = 2;\n\n    protected static ?string $modelLabel = 'Person';\n\n    protected static ?string $pluralModelLabel = 'People';\n\n    protected static ?string $slug = 'people';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Select::make('team_id')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->required(),\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255),\n                Select::make('company_id')\n                    ->relationship('company', 'name')\n                    ->searchable(),\n                Select::make('creation_source')\n                    ->options(CreationSource::class)\n                    ->default(CreationSource::WEB),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('company.name')\n                    ->label('Company')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source')\n                    ->toggleable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->filters([\n                TrashedFilter::make(),\n                SelectFilter::make('team')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('company')\n                    ->relationship('company', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('creation_source')\n                    ->label('Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListPeople::route('/'),\n            'create' => CreatePeople::route('/create'),\n            'view' => ViewPeople::route('/{record}'),\n            'edit' => EditPeople::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Pages/CreateSystemAdministrator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages;\n\nuse Filament\\Actions\\Action;\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\SystemAdministratorResource;\n\nfinal class CreateSystemAdministrator extends CreateRecord\n{\n    protected static string $resource = SystemAdministratorResource::class;\n\n    protected function getFormActions(): array\n    {\n        return [\n            $this->getCreateAction(),\n            $this->getCancelAction(),\n        ];\n    }\n\n    private function getCancelAction(): Action\n    {\n        return Action::make('cancel')\n            ->label('Cancel')\n            ->url($this->getResource()::getUrl('index'))\n            ->color('gray');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Pages/EditSystemAdministrator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\SystemAdministratorResource;\n\nfinal class EditSystemAdministrator extends EditRecord\n{\n    protected static string $resource = SystemAdministratorResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Pages/ListSystemAdministrators.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\SystemAdministratorResource;\n\nfinal class ListSystemAdministrators extends ListRecords\n{\n    protected static string $resource = SystemAdministratorResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Pages/ViewSystemAdministrator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\SystemAdministratorResource;\n\nfinal class ViewSystemAdministrator extends ViewRecord\n{\n    protected static string $resource = SystemAdministratorResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Schemas/SystemAdministratorForm.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Schemas;\n\nuse Filament\\Forms\\Components\\DateTimePicker;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Components\\Utilities\\Get;\nuse Filament\\Schemas\\Schema;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\n\nfinal class SystemAdministratorForm\n{\n    public static function configure(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Section::make('Administrator Details')\n                    ->schema([\n                        TextInput::make('name')\n                            ->required()\n                            ->maxLength(255),\n\n                        TextInput::make('email')\n                            ->label('Email address')\n                            ->email()\n                            ->required()\n                            ->maxLength(255)\n                            ->unique(ignoreRecord: true),\n\n                        Select::make('role')\n                            ->options(\n                                collect(SystemAdministratorRole::cases())\n                                    ->mapWithKeys(fn (SystemAdministratorRole $role): array => [\n                                        $role->value => $role->getLabel(),\n                                    ])\n                            )\n                            ->default(SystemAdministratorRole::SuperAdministrator->value)\n                            ->required(),\n\n                        DateTimePicker::make('email_verified_at')\n                            ->label('Email Verified At')\n                            ->displayFormat('M j, Y \\a\\t g:i A')\n                            ->nullable(),\n\n                        TextInput::make('password')\n                            ->password()\n                            ->dehydrateStateUsing(fn (?string $state): ?string => in_array($state, [null, '', '0'], true) ? null : Hash::make($state))\n                            ->dehydrated(filled(...))\n                            ->required(fn (Get $get): bool => ! $get('id'))\n                            ->maxLength(255)\n                            ->confirmed()\n                            ->helperText(fn (Get $get): ?string => $get('id') ? 'Leave blank to keep current password' : null),\n\n                        TextInput::make('password_confirmation')\n                            ->password()\n                            ->dehydrated(false)\n                            ->required(fn (Get $get): bool => ! $get('id') && filled($get('password')))\n                            ->maxLength(255),\n                    ])\n                    ->columns(2),\n            ]);\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Schemas/SystemAdministratorInfolist.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Schemas;\n\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Schemas\\Schema;\n\nfinal class SystemAdministratorInfolist\n{\n    public static function configure(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                TextEntry::make('name'),\n                TextEntry::make('email')\n                    ->label('Email address'),\n                TextEntry::make('email_verified_at')\n                    ->dateTime(),\n                TextEntry::make('role'),\n                TextEntry::make('created_at')\n                    ->dateTime(),\n                TextEntry::make('updated_at')\n                    ->dateTime(),\n            ]);\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/SystemAdministratorResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators;\n\nuse BackedEnum;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Support\\Icons\\Heroicon;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages\\CreateSystemAdministrator;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages\\EditSystemAdministrator;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages\\ListSystemAdministrators;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Pages\\ViewSystemAdministrator;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Schemas\\SystemAdministratorForm;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Schemas\\SystemAdministratorInfolist;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Tables\\SystemAdministratorsTable;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\nuse UnitEnum;\n\nfinal class SystemAdministratorResource extends Resource\n{\n    protected static ?string $model = SystemAdministrator::class;\n\n    protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedShieldCheck;\n\n    protected static string|UnitEnum|null $navigationGroup = 'User Management';\n\n    protected static ?int $navigationSort = 1;\n\n    public static function form(Schema $schema): Schema\n    {\n        return SystemAdministratorForm::configure($schema);\n    }\n\n    public static function infolist(Schema $schema): Schema\n    {\n        return SystemAdministratorInfolist::configure($schema);\n    }\n\n    public static function table(Table $table): Table\n    {\n        return SystemAdministratorsTable::configure($table);\n    }\n\n    public static function getRelations(): array\n    {\n        return [\n            //\n        ];\n    }\n\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListSystemAdministrators::route('/'),\n            'create' => CreateSystemAdministrator::route('/create'),\n            'view' => ViewSystemAdministrator::route('/{record}'),\n            'edit' => EditSystemAdministrator::route('/{record}/edit'),\n        ];\n    }\n\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->withoutGlobalScopes();\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/SystemAdministrators/Tables/SystemAdministratorsTable.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\SystemAdministrators\\Tables;\n\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Tables\\Columns\\IconColumn;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TernaryFilter;\nuse Filament\\Tables\\Table;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\n\nfinal class SystemAdministratorsTable\n{\n    public static function configure(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n\n                TextColumn::make('email')\n                    ->label('Email address')\n                    ->searchable()\n                    ->sortable()\n                    ->copyable(),\n\n                TextColumn::make('role')\n                    ->badge()\n                    ->formatStateUsing(fn (SystemAdministratorRole $state): string => $state->getLabel())\n                    ->color(fn (SystemAdministratorRole $state): string => match ($state) {\n                        SystemAdministratorRole::SuperAdministrator => 'danger',\n                    }),\n\n                IconColumn::make('email_verified_at')\n                    ->label('Verified')\n                    ->boolean()\n                    ->trueIcon('heroicon-o-check-badge')\n                    ->falseIcon('heroicon-o-x-mark'),\n\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->filters([\n                SelectFilter::make('role')\n                    ->options(\n                        collect(SystemAdministratorRole::cases())\n                            ->mapWithKeys(fn (SystemAdministratorRole $role): array => [\n                                $role->value => $role->getLabel(),\n                            ])\n                    ),\n\n                TernaryFilter::make('email_verified_at')\n                    ->label('Email Verified')\n                    ->nullable(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TaskResource/Pages/CreateTask.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource;\n\nfinal class CreateTask extends CreateRecord\n{\n    protected static string $resource = TaskResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TaskResource/Pages/EditTask.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource;\n\nfinal class EditTask extends EditRecord\n{\n    protected static string $resource = TaskResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TaskResource/Pages/ListTasks.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource;\n\nfinal class ListTasks extends ListRecords\n{\n    protected static string $resource = TaskResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TaskResource/Pages/ViewTask.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource;\n\nfinal class ViewTask extends ViewRecord\n{\n    protected static string $resource = TaskResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TaskResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Task;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\SelectFilter;\nuse Filament\\Tables\\Filters\\TrashedFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages\\CreateTask;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages\\EditTask;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages\\ListTasks;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages\\ViewTask;\n\nfinal class TaskResource extends Resource\n{\n    protected static ?string $model = Task::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-clipboard-document-check';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'Task Management';\n\n    protected static ?int $navigationSort = 1;\n\n    protected static ?string $modelLabel = 'Task';\n\n    protected static ?string $pluralModelLabel = 'Tasks';\n\n    protected static ?string $slug = 'tasks';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Select::make('team_id')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->required(),\n                TextInput::make('title')\n                    ->required()\n                    ->maxLength(255),\n                Select::make('creation_source')\n                    ->options(CreationSource::class)\n                    ->default(CreationSource::WEB),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('title')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('team.name')\n                    ->label('Team')\n                    ->sortable()\n                    ->searchable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source')\n                    ->toggleable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('deleted_at')\n                    ->dateTime()\n                    ->sortable()\n                    ->toggleable(isToggledHiddenByDefault: true),\n            ])\n            ->filters([\n                TrashedFilter::make(),\n                SelectFilter::make('team')\n                    ->relationship('team', 'name')\n                    ->searchable()\n                    ->preload(),\n                SelectFilter::make('creation_source')\n                    ->label('Source')\n                    ->options(CreationSource::class)\n                    ->multiple(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListTasks::route('/'),\n            'create' => CreateTask::route('/create'),\n            'view' => ViewTask::route('/{record}'),\n            'edit' => EditTask::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/Pages/CreateTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\n\nfinal class CreateTeam extends CreateRecord\n{\n    protected static string $resource = TeamResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/Pages/EditTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\n\nfinal class EditTeam extends EditRecord\n{\n    protected static string $resource = TeamResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            DeleteAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/Pages/ListTeams.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\n\nfinal class ListTeams extends ListRecords\n{\n    protected static string $resource = TeamResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/Pages/ViewTeam.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\n\nfinal class ViewTeam extends ViewRecord\n{\n    protected static string $resource = TeamResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/RelationManagers/CompaniesRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class CompaniesRelationManager extends RelationManager\n{\n    protected static string $relationship = 'companies';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-building-office';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->companies()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source'),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('created_at', 'desc');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/RelationManagers/MembersRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class MembersRelationManager extends RelationManager\n{\n    protected static string $relationship = 'users';\n\n    protected static ?string $title = 'Members';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-users';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->users()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('email')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('membership.created_at')\n                    ->label('Joined')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('name');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/RelationManagers/NotesRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class NotesRelationManager extends RelationManager\n{\n    protected static string $relationship = 'notes';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-document-text';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->notes()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title')\n                    ->searchable()\n                    ->sortable()\n                    ->limit(50),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source'),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('created_at', 'desc');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/RelationManagers/OpportunitiesRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class OpportunitiesRelationManager extends RelationManager\n{\n    protected static string $relationship = 'opportunities';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-currency-dollar';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->opportunities()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('company.name')\n                    ->label('Company')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('contact.name')\n                    ->label('Contact')\n                    ->sortable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source'),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('created_at', 'desc');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/RelationManagers/PeopleRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class PeopleRelationManager extends RelationManager\n{\n    protected static string $relationship = 'people';\n\n    protected static ?string $modelLabel = 'person';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-user';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->people()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('company.name')\n                    ->label('Company')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source'),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('created_at', 'desc');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource/RelationManagers/TasksRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers;\n\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nfinal class TasksRelationManager extends RelationManager\n{\n    protected static string $relationship = 'tasks';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-check-circle';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->tasks()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('title')\n            ->columns([\n                TextColumn::make('title')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('creator.name')\n                    ->label('Created by')\n                    ->sortable(),\n                TextColumn::make('creation_source')\n                    ->badge()\n                    ->label('Source'),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('created_at', 'desc');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/TeamResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Models\\Team;\nuse App\\Rules\\ValidTeamSlug;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Forms\\Components\\Toggle;\nuse Filament\\Infolists\\Components\\IconEntry;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\IconColumn;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\TernaryFilter;\nuse Filament\\Tables\\Table;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages\\CreateTeam;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages\\EditTeam;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages\\ListTeams;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages\\ViewTeam;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers\\CompaniesRelationManager;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers\\MembersRelationManager;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers\\NotesRelationManager;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers\\OpportunitiesRelationManager;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers\\PeopleRelationManager;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\RelationManagers\\TasksRelationManager;\n\nfinal class TeamResource extends Resource\n{\n    protected static ?string $model = Team::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-user-group';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'User Management';\n\n    protected static ?int $navigationSort = 2;\n\n    protected static ?string $modelLabel = 'Team';\n\n    protected static ?string $pluralModelLabel = 'Teams';\n\n    protected static ?string $slug = 'teams';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Select::make('user_id')\n                    ->relationship('owner', 'name')\n                    ->label('Owner')\n                    ->searchable()\n                    ->required(),\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255),\n                TextInput::make('slug')\n                    ->required()\n                    ->rules([fn (?Team $record): ValidTeamSlug => new ValidTeamSlug(ignoreValue: $record?->slug)])\n                    ->unique(ignoreRecord: true)\n                    ->maxLength(255),\n                Toggle::make('personal_team')\n                    ->required(),\n            ]);\n    }\n\n    #[Override]\n    public static function infolist(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Section::make([\n                    TextEntry::make('name'),\n                    TextEntry::make('slug'),\n                    TextEntry::make('owner.name')\n                        ->label('Owner'),\n                    IconEntry::make('personal_team')\n                        ->label('Personal')\n                        ->boolean(),\n                    TextEntry::make('created_at')\n                        ->dateTime(),\n                    TextEntry::make('updated_at')\n                        ->dateTime(),\n                ])->columnSpanFull()->columns(),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('slug')\n                    ->searchable()\n                    ->sortable()\n                    ->toggleable(),\n                TextColumn::make('owner.name')\n                    ->label('Owner')\n                    ->searchable()\n                    ->sortable(),\n                IconColumn::make('personal_team')\n                    ->label('Personal')\n                    ->boolean(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->filters([\n                TernaryFilter::make('personal_team')\n                    ->label('Personal Team'),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [\n            MembersRelationManager::class,\n            CompaniesRelationManager::class,\n            PeopleRelationManager::class,\n            TasksRelationManager::class,\n            OpportunitiesRelationManager::class,\n            NotesRelationManager::class,\n        ];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListTeams::route('/'),\n            'create' => CreateTeam::route('/create'),\n            'view' => ViewTeam::route('/{record}'),\n            'edit' => EditTeam::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource/Pages/CreateUser.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages;\n\nuse Filament\\Resources\\Pages\\CreateRecord;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource;\n\nfinal class CreateUser extends CreateRecord\n{\n    protected static string $resource = UserResource::class;\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource/Pages/EditUser.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages;\n\nuse Filament\\Actions\\DeleteAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Resources\\Pages\\EditRecord;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource;\n\nfinal class EditUser extends EditRecord\n{\n    protected static string $resource = UserResource::class;\n\n    protected function getHeaderActions(): array\n    {\n        return [\n            ViewAction::make(),\n            DeleteAction::make(),\n        ];\n    }\n\n    protected function mutateFormDataBeforeSave(array $data): array\n    {\n        if (filled($data['password'])) {\n            $data['password'] = Hash::make($data['password']);\n        } else {\n            unset($data['password']);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource/Pages/ListUsers.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages;\n\nuse Filament\\Actions\\CreateAction;\nuse Filament\\Resources\\Pages\\ListRecords;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource;\n\nfinal class ListUsers extends ListRecords\n{\n    protected static string $resource = UserResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            CreateAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource/Pages/ViewUser.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages;\n\nuse Filament\\Actions\\EditAction;\nuse Filament\\Resources\\Pages\\ViewRecord;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource;\n\nfinal class ViewUser extends ViewRecord\n{\n    protected static string $resource = UserResource::class;\n\n    #[Override]\n    protected function getHeaderActions(): array\n    {\n        return [\n            EditAction::make(),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource/RelationManagers/OwnedTeamsRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\RelationManagers;\n\nuse App\\Models\\Team;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\IconColumn;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\n\nfinal class OwnedTeamsRelationManager extends RelationManager\n{\n    protected static string $relationship = 'ownedTeams';\n\n    protected static ?string $title = 'Owned Teams';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-building-office-2';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->ownedTeams()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable()\n                    ->url(fn (Team $record): string => TeamResource::getUrl('view', ['record' => $record])),\n                IconColumn::make('personal_team')\n                    ->label('Personal')\n                    ->boolean(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('name');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource/RelationManagers/TeamsRelationManager.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\RelationManagers;\n\nuse App\\Models\\Team;\nuse Filament\\Resources\\RelationManagers\\RelationManager;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\n\nfinal class TeamsRelationManager extends RelationManager\n{\n    protected static string $relationship = 'teams';\n\n    protected static ?string $title = 'Member Of';\n\n    protected static string|\\BackedEnum|null $icon = 'heroicon-o-user-group';\n\n    public static function getBadge(Model $ownerRecord, string $pageClass): ?string\n    {\n        $count = $ownerRecord->teams()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->recordTitleAttribute('name')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable()\n                    ->url(fn (Team $record): string => TeamResource::getUrl('view', ['record' => $record])),\n                TextColumn::make('membership.role')\n                    ->label('Role')\n                    ->badge()\n                    ->sortable(),\n                TextColumn::make('membership.created_at')\n                    ->label('Joined')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->defaultSort('name');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Resources/UserResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Resources;\n\nuse App\\Models\\User;\nuse Filament\\Actions\\BulkActionGroup;\nuse Filament\\Actions\\DeleteBulkAction;\nuse Filament\\Actions\\EditAction;\nuse Filament\\Actions\\ViewAction;\nuse Filament\\Forms\\Components\\DateTimePicker;\nuse Filament\\Forms\\Components\\Select;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Infolists\\Components\\IconEntry;\nuse Filament\\Infolists\\Components\\TextEntry;\nuse Filament\\Resources\\Resource;\nuse Filament\\Schemas\\Components\\Section;\nuse Filament\\Schemas\\Schema;\nuse Filament\\Tables\\Columns\\IconColumn;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Filters\\TernaryFilter;\nuse Filament\\Tables\\Table;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Override;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages\\CreateUser;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages\\EditUser;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages\\ListUsers;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages\\ViewUser;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\RelationManagers\\OwnedTeamsRelationManager;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\RelationManagers\\TeamsRelationManager;\n\nfinal class UserResource extends Resource\n{\n    protected static ?string $model = User::class;\n\n    protected static string|\\BackedEnum|null $navigationIcon = 'heroicon-o-user';\n\n    protected static string|\\UnitEnum|null $navigationGroup = 'User Management';\n\n    protected static ?int $navigationSort = 1;\n\n    protected static ?string $modelLabel = 'User';\n\n    protected static ?string $pluralModelLabel = 'Users';\n\n    protected static ?string $slug = 'users';\n\n    public static function getNavigationBadge(): ?string\n    {\n        $count = self::getModel()::query()->count();\n\n        return $count > 0 ? (string) $count : null;\n    }\n\n    #[Override]\n    public static function form(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                TextInput::make('name')\n                    ->required()\n                    ->maxLength(255),\n                TextInput::make('email')\n                    ->email()\n                    ->required()\n                    ->maxLength(255)\n                    ->unique(ignoreRecord: true),\n                DateTimePicker::make('email_verified_at'),\n                TextInput::make('password')\n                    ->password()\n                    ->maxLength(255)\n                    ->dehydrated(filled(...))\n                    ->required(fn (string $operation): bool => $operation === 'create'),\n                Select::make('current_team_id')\n                    ->searchable()\n                    ->relationship('currentTeam', 'name'),\n            ]);\n    }\n\n    #[Override]\n    public static function infolist(Schema $schema): Schema\n    {\n        return $schema\n            ->components([\n                Section::make([\n                    TextEntry::make('name'),\n                    TextEntry::make('email'),\n                    IconEntry::make('email_verified_at')\n                        ->label('Verified')\n                        ->boolean(),\n                    TextEntry::make('currentTeam.name')\n                        ->label('Current Team'),\n                    TextEntry::make('created_at')\n                        ->dateTime(),\n                    TextEntry::make('updated_at')\n                        ->dateTime(),\n                ])->columnSpanFull()->columns(),\n            ]);\n    }\n\n    #[Override]\n    public static function table(Table $table): Table\n    {\n        return $table\n            ->defaultSort('created_at', 'desc')\n            ->columns([\n                TextColumn::make('name')\n                    ->searchable()\n                    ->sortable(),\n                TextColumn::make('email')\n                    ->searchable()\n                    ->sortable()\n                    ->copyable(),\n                IconColumn::make('email_verified_at')\n                    ->label('Verified')\n                    ->boolean()\n                    ->trueIcon('heroicon-o-check-badge')\n                    ->falseIcon('heroicon-o-x-mark'),\n                TextColumn::make('currentTeam.name')\n                    ->label('Current Team')\n                    ->sortable(),\n                TextColumn::make('created_at')\n                    ->dateTime()\n                    ->sortable(),\n                TextColumn::make('updated_at')\n                    ->dateTime()\n                    ->sortable(),\n            ])\n            ->filters([\n                TernaryFilter::make('email_verified_at')\n                    ->label('Email Verified')\n                    ->nullable(),\n            ])\n            ->recordActions([\n                ViewAction::make(),\n                EditAction::make(),\n            ])\n            ->toolbarActions([\n                BulkActionGroup::make([\n                    DeleteBulkAction::make(),\n                ]),\n            ]);\n    }\n\n    /**\n     * @return Builder<User>\n     */\n    public static function getEloquentQuery(): Builder\n    {\n        return parent::getEloquentQuery()\n            ->with(['currentTeam', 'ownedTeams']);\n    }\n\n    #[Override]\n    public static function getRelations(): array\n    {\n        return [\n            OwnedTeamsRelationManager::class,\n            TeamsRelationManager::class,\n        ];\n    }\n\n    #[Override]\n    public static function getPages(): array\n    {\n        return [\n            'index' => ListUsers::route('/'),\n            'create' => CreateUser::route('/create'),\n            'view' => ViewUser::route('/{record}'),\n            'edit' => EditUser::route('/{record}/edit'),\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/ActivationRateWidget.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\User;\nuse Carbon\\CarbonImmutable;\nuse Filament\\Widgets\\Concerns\\InteractsWithPageFilters;\nuse Filament\\Widgets\\StatsOverviewWidget;\nuse Filament\\Widgets\\StatsOverviewWidget\\Stat;\nuse Illuminate\\Support\\Facades\\DB;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\Concerns\\HasPeriodComparison;\n\nfinal class ActivationRateWidget extends StatsOverviewWidget\n{\n    use HasPeriodComparison;\n    use InteractsWithPageFilters;\n\n    protected static ?int $sort = 5;\n\n    protected int|string|array $columnSpan = 'full';\n\n    protected ?string $pollingInterval = null;\n\n    protected function getStats(): array\n    {\n        [$currentStart, $currentEnd, $previousStart, $previousEnd] = $this->getPeriodDates();\n\n        $currentSignups = $this->countSignups($currentStart, $currentEnd);\n        $previousSignups = $this->countSignups($previousStart, $previousEnd);\n\n        $currentActivated = $this->countActivatedUsers($currentStart, $currentEnd);\n        $previousActivated = $this->countActivatedUsers($previousStart, $previousEnd);\n\n        $currentRate = $currentSignups > 0 ? round($currentActivated / $currentSignups * 100, 1) : 0.0;\n        $previousRate = $previousSignups > 0 ? round($previousActivated / $previousSignups * 100, 1) : 0.0;\n\n        return [\n            $this->buildCountStat('Sign-ups', 'this period', $currentSignups, $previousSignups, $this->buildSignupsSparkline($currentStart, $currentEnd)),\n            $this->buildCountStat('Activated Users', 'created a record', $currentActivated, $previousActivated, $this->buildActivatedSparkline($currentStart, $currentEnd)),\n            $this->buildActivationRateStat($currentRate, $previousRate),\n        ];\n    }\n\n    private function countSignups(CarbonImmutable $start, CarbonImmutable $end): int\n    {\n        return User::query()\n            ->whereBetween('created_at', [$start, $end])\n            ->count();\n    }\n\n    private function countActivatedUsers(CarbonImmutable $start, CarbonImmutable $end): int\n    {\n        $activeCreatorIds = $this->getActiveCreatorIds($start, $end);\n\n        if ($activeCreatorIds->isEmpty()) {\n            return 0;\n        }\n\n        return User::query()\n            ->whereIn('id', $activeCreatorIds)\n            ->whereBetween('created_at', [$start, $end])\n            ->count();\n    }\n\n    /** @param array<int, int>|null $chart */\n    private function buildCountStat(\n        string $label,\n        string $description,\n        int $current,\n        int $previous,\n        ?array $chart = null,\n    ): Stat {\n        $change = $this->calculateChange($current, $previous);\n\n        $stat = Stat::make($label, number_format($current))\n            ->description(\"{$description}{$this->formatChange($change)}\")\n            ->descriptionIcon($change >= 0 ? 'heroicon-o-arrow-trending-up' : 'heroicon-o-arrow-trending-down')\n            ->color($change >= 0 ? 'success' : 'danger');\n\n        if ($chart !== null) {\n            $stat->chart($chart);\n        }\n\n        return $stat;\n    }\n\n    private function buildActivationRateStat(float $currentRate, float $previousRate): Stat\n    {\n        $rateChange = round($currentRate - $previousRate, 1);\n\n        $changeText = $rateChange !== 0.0\n            ? ' ('.($rateChange > 0 ? '+' : '').\"{$rateChange}pp)\"\n            : '';\n\n        return Stat::make('Activation Rate', \"{$currentRate}%\")\n            ->description(\"vs {$previousRate}% previous{$changeText}\")\n            ->descriptionIcon($rateChange >= 0 ? 'heroicon-o-arrow-trending-up' : 'heroicon-o-arrow-trending-down')\n            ->color($rateChange >= 0 ? 'success' : 'danger');\n    }\n\n    /**\n     * @return array<int, int>\n     */\n    private function buildSignupsSparkline(CarbonImmutable $start, CarbonImmutable $end): array\n    {\n        $days = (int) $start->diffInDays($end);\n        $points = min($days, 7);\n\n        if ($points <= 0) {\n            return [0];\n        }\n\n        $segmentSeconds = ($days / $points) * 86400;\n        $bucketExpr = $this->bucketExpression();\n\n        $rows = User::query()\n            ->selectRaw(\"{$bucketExpr} AS bucket, COUNT(*) AS cnt\", [\n                $start->toDateTimeString(),\n                $segmentSeconds,\n            ])\n            ->whereBetween('created_at', [$start, $end])\n            ->groupByRaw('1')\n            ->orderByRaw('1')\n            ->get();\n\n        return $this->fillBuckets($rows, $points);\n    }\n\n    /**\n     * @return array<int, int>\n     */\n    private function buildActivatedSparkline(CarbonImmutable $start, CarbonImmutable $end): array\n    {\n        $days = (int) $start->diffInDays($end);\n        $points = min($days, 7);\n\n        if ($points <= 0) {\n            return [0];\n        }\n\n        $segmentSeconds = ($days / $points) * 86400;\n        $unionParts = [];\n        $bindings = [];\n\n        foreach (self::ENTITY_TABLES as $table) {\n            $unionParts[] = \"SELECT DISTINCT \\\"creator_id\\\", \\\"created_at\\\" FROM \\\"{$table}\\\" WHERE \\\"creator_id\\\" IS NOT NULL AND \\\"creation_source\\\" != ? AND \\\"created_at\\\" BETWEEN ? AND ? AND \\\"deleted_at\\\" IS NULL\";\n            $bindings[] = CreationSource::SYSTEM->value;\n            $bindings[] = $start->toDateTimeString();\n            $bindings[] = $end->toDateTimeString();\n        }\n\n        $unionSql = implode(' UNION ', $unionParts);\n        $bucketExpr = $this->bucketExpression();\n\n        $sql = \"SELECT {$bucketExpr} AS bucket, COUNT(DISTINCT creator_id) AS cnt FROM ({$unionSql}) AS all_creators GROUP BY 1 ORDER BY 1\";\n\n        $rows = DB::select($sql, [$start->toDateTimeString(), $segmentSeconds, ...$bindings]);\n\n        return $this->fillBuckets(collect($rows), $points);\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/Concerns/HasPeriodComparison.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets\\Concerns;\n\nuse App\\Enums\\CreationSource;\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\n\n/**\n * Shared logic for dashboard widgets that compare metrics across time periods.\n *\n * Provides period calculation, percentage change formatting, and PostgreSQL\n * bucket-based sparkline generation for StatsOverviewWidget subclasses.\n */\ntrait HasPeriodComparison\n{\n    private const array ENTITY_TABLES = ['companies', 'people', 'tasks', 'notes', 'opportunities'];\n\n    /**\n     * @return array{0: CarbonImmutable, 1: CarbonImmutable, 2: CarbonImmutable, 3: CarbonImmutable}\n     */\n    private function getPeriodDates(): array\n    {\n        $days = (int) ($this->pageFilters['period'] ?? 30);\n        $currentEnd = CarbonImmutable::now();\n        $currentStart = $currentEnd->subDays($days);\n        $previousEnd = $currentStart->subSecond();\n        $previousStart = $currentStart->subDays($days);\n\n        return [$currentStart, $currentEnd, $previousStart, $previousEnd];\n    }\n\n    private function calculateChange(int $current, int $previous): float\n    {\n        if ($previous === 0) {\n            return $current > 0 ? 100.0 : 0.0;\n        }\n\n        return round((($current - $previous) / $previous) * 100, 1);\n    }\n\n    private function formatChange(float $change): string\n    {\n        if ($change === 0.0) {\n            return '';\n        }\n\n        $sign = $change > 0 ? '+' : '';\n\n        return \" ({$sign}{$change}%)\";\n    }\n\n    /**\n     * PostgreSQL expression that assigns rows to time-based buckets.\n     *\n     * Expects two bindings: the period start timestamp and the segment duration in seconds.\n     */\n    private function bucketExpression(): string\n    {\n        return 'FLOOR(EXTRACT(EPOCH FROM (\"created_at\" - ?::timestamp)) / ?)';\n    }\n\n    /**\n     * @return array<int, int>\n     */\n    private function fillBuckets(Collection $rows, int $points): array\n    {\n        $buckets = array_fill(0, $points, 0);\n\n        foreach ($rows as $row) {\n            $idx = min((int) $row->bucket, $points - 1);\n\n            if ($idx >= 0) {\n                $buckets[$idx] += (int) $row->cnt;\n            }\n        }\n\n        return $buckets;\n    }\n\n    /**\n     * @return Collection<int, int|string>\n     */\n    private function getActiveCreatorIds(CarbonImmutable $start, CarbonImmutable $end): Collection\n    {\n        $unionParts = [];\n        $bindings = [];\n\n        foreach (self::ENTITY_TABLES as $table) {\n            $unionParts[] = \"SELECT DISTINCT \\\"creator_id\\\" FROM \\\"{$table}\\\" WHERE \\\"creator_id\\\" IS NOT NULL AND \\\"creation_source\\\" != ? AND \\\"created_at\\\" BETWEEN ? AND ? AND \\\"deleted_at\\\" IS NULL\";\n            $bindings[] = CreationSource::SYSTEM->value;\n            $bindings[] = $start->toDateTimeString();\n            $bindings[] = $end->toDateTimeString();\n        }\n\n        $sql = 'SELECT DISTINCT creator_id FROM ('.implode(' UNION ', $unionParts).') AS all_creators';\n\n        return collect(DB::select($sql, $bindings))->pluck('creator_id');\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/PlatformGrowthStatsWidget.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Carbon\\CarbonImmutable;\nuse Filament\\Widgets\\Concerns\\InteractsWithPageFilters;\nuse Filament\\Widgets\\StatsOverviewWidget;\nuse Filament\\Widgets\\StatsOverviewWidget\\Stat;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Facades\\DB;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\Concerns\\HasPeriodComparison;\n\nfinal class PlatformGrowthStatsWidget extends StatsOverviewWidget\n{\n    use HasPeriodComparison;\n    use InteractsWithPageFilters;\n\n    protected static ?int $sort = 1;\n\n    protected int|string|array $columnSpan = 'full';\n\n    protected ?string $pollingInterval = null;\n\n    /** @var array<int, class-string> */\n    private const array ENTITY_CLASSES = [Company::class, People::class, Task::class, Note::class, Opportunity::class];\n\n    protected function getStats(): array\n    {\n        [$currentStart, $currentEnd, $previousStart, $previousEnd] = $this->getPeriodDates();\n\n        return [\n            $this->buildUsersStat($currentStart, $currentEnd, $previousStart, $previousEnd),\n            $this->buildTeamsStat($currentStart, $currentEnd, $previousStart, $previousEnd),\n            $this->buildRecordsStat($currentStart, $currentEnd, $previousStart, $previousEnd),\n            $this->buildActiveUsersStat($currentStart, $currentEnd, $previousStart, $previousEnd),\n        ];\n    }\n\n    private function buildUsersStat(\n        CarbonImmutable $currentStart,\n        CarbonImmutable $currentEnd,\n        CarbonImmutable $previousStart,\n        CarbonImmutable $previousEnd,\n    ): Stat {\n        $total = User::query()->count();\n        $newCurrent = User::query()->whereBetween('created_at', [$currentStart, $currentEnd])->count();\n        $newPrevious = User::query()->whereBetween('created_at', [$previousStart, $previousEnd])->count();\n        $change = $this->calculateChange($newCurrent, $newPrevious);\n\n        return Stat::make('Total Users', number_format($total))\n            ->description(\"{$newCurrent} new this period\".$this->formatChange($change))\n            ->descriptionIcon($change >= 0 ? 'heroicon-o-arrow-trending-up' : 'heroicon-o-arrow-trending-down')\n            ->color($change >= 0 ? 'success' : 'danger')\n            ->chart($this->buildModelSparkline(User::class, $currentStart, $currentEnd));\n    }\n\n    private function buildTeamsStat(\n        CarbonImmutable $currentStart,\n        CarbonImmutable $currentEnd,\n        CarbonImmutable $previousStart,\n        CarbonImmutable $previousEnd,\n    ): Stat {\n        $nonPersonalScope = fn (Builder $query): Builder => $query->where('personal_team', false);\n\n        $total = Team::query()->where('personal_team', false)->count();\n        $newCurrent = Team::query()->where('personal_team', false)->whereBetween('created_at', [$currentStart, $currentEnd])->count();\n        $newPrevious = Team::query()->where('personal_team', false)->whereBetween('created_at', [$previousStart, $previousEnd])->count();\n        $change = $this->calculateChange($newCurrent, $newPrevious);\n\n        return Stat::make('Total Teams', number_format($total))\n            ->description(\"{$newCurrent} new this period\".$this->formatChange($change))\n            ->descriptionIcon($change >= 0 ? 'heroicon-o-arrow-trending-up' : 'heroicon-o-arrow-trending-down')\n            ->color($change >= 0 ? 'success' : 'danger')\n            ->chart($this->buildModelSparkline(Team::class, $currentStart, $currentEnd, $nonPersonalScope));\n    }\n\n    private function buildRecordsStat(\n        CarbonImmutable $currentStart,\n        CarbonImmutable $currentEnd,\n        CarbonImmutable $previousStart,\n        CarbonImmutable $previousEnd,\n    ): Stat {\n        $currentRecords = $this->countRecordsInPeriod($currentStart, $currentEnd);\n        $previousRecords = $this->countRecordsInPeriod($previousStart, $previousEnd);\n        $change = $this->calculateChange($currentRecords, $previousRecords);\n\n        return Stat::make('New Records', number_format($currentRecords))\n            ->description(\"{$currentRecords} this period\".$this->formatChange($change))\n            ->descriptionIcon($change >= 0 ? 'heroicon-o-arrow-trending-up' : 'heroicon-o-arrow-trending-down')\n            ->color($change >= 0 ? 'success' : 'danger')\n            ->chart($this->buildRecordsSparkline($currentStart, $currentEnd));\n    }\n\n    private function buildActiveUsersStat(\n        CarbonImmutable $currentStart,\n        CarbonImmutable $currentEnd,\n        CarbonImmutable $previousStart,\n        CarbonImmutable $previousEnd,\n    ): Stat {\n        $currentActive = $this->countActiveUsers($currentStart, $currentEnd);\n        $previousActive = $this->countActiveUsers($previousStart, $previousEnd);\n        $change = $this->calculateChange($currentActive, $previousActive);\n\n        return Stat::make('Active Users', number_format($currentActive))\n            ->description('sessions in this period'.$this->formatChange($change))\n            ->descriptionIcon($change >= 0 ? 'heroicon-o-arrow-trending-up' : 'heroicon-o-arrow-trending-down')\n            ->color($change >= 0 ? 'success' : 'danger');\n    }\n\n    private function countRecordsInPeriod(CarbonImmutable $start, CarbonImmutable $end): int\n    {\n        $unionParts = [];\n        $bindings = [];\n\n        foreach (self::ENTITY_CLASSES as $class) {\n            $table = (new $class)->getTable();\n            $unionParts[] = \"SELECT COUNT(*) as cnt FROM \\\"{$table}\\\" WHERE \\\"creation_source\\\" != ? AND \\\"created_at\\\" BETWEEN ? AND ? AND \\\"deleted_at\\\" IS NULL\";\n            $bindings[] = CreationSource::SYSTEM->value;\n            $bindings[] = $start->toDateTimeString();\n            $bindings[] = $end->toDateTimeString();\n        }\n\n        $sql = implode(' UNION ALL ', $unionParts);\n        $result = DB::selectOne(\"SELECT SUM(cnt) as total FROM ({$sql}) as counts\", $bindings);\n\n        return (int) ($result->total ?? 0);\n    }\n\n    private function countActiveUsers(CarbonImmutable $start, CarbonImmutable $end): int\n    {\n        return DB::table('sessions')\n            ->whereNotNull('user_id')\n            ->whereBetween('last_activity', [$start->timestamp, $end->timestamp])\n            ->distinct('user_id')\n            ->count('user_id');\n    }\n\n    /**\n     * @return array<int, int>\n     */\n    private function buildModelSparkline(string $modelClass, CarbonImmutable $start, CarbonImmutable $end, ?\\Closure $scope = null): array\n    {\n        $days = (int) $start->diffInDays($end);\n        $points = min($days, 7);\n\n        if ($points <= 0) {\n            return [0];\n        }\n\n        $segmentSeconds = ($days / $points) * 86400;\n        $bucketExpr = $this->bucketExpression();\n\n        $query = $modelClass::query()\n            ->selectRaw(\"{$bucketExpr} AS bucket, COUNT(*) AS cnt\", [\n                $start->toDateTimeString(),\n                $segmentSeconds,\n            ])\n            ->whereBetween('created_at', [$start, $end])\n            ->groupByRaw('1')\n            ->orderByRaw('1');\n\n        if ($scope instanceof \\Closure) {\n            $scope($query);\n        }\n\n        return $this->fillBuckets($query->get(), $points);\n    }\n\n    /**\n     * @return array<int, int>\n     */\n    private function buildRecordsSparkline(CarbonImmutable $start, CarbonImmutable $end): array\n    {\n        $days = (int) $start->diffInDays($end);\n        $points = min($days, 7);\n\n        if ($points <= 0) {\n            return [0];\n        }\n\n        $segmentSeconds = ($days / $points) * 86400;\n        $unionParts = [];\n        $bindings = [];\n\n        foreach (self::ENTITY_CLASSES as $class) {\n            $table = (new $class)->getTable();\n            $unionParts[] = \"SELECT \\\"created_at\\\" FROM \\\"{$table}\\\" WHERE \\\"creation_source\\\" != ? AND \\\"created_at\\\" BETWEEN ? AND ? AND \\\"deleted_at\\\" IS NULL\";\n            $bindings[] = CreationSource::SYSTEM->value;\n            $bindings[] = $start->toDateTimeString();\n            $bindings[] = $end->toDateTimeString();\n        }\n\n        $unionSql = implode(' UNION ALL ', $unionParts);\n        $bucketExpr = $this->bucketExpression();\n        $sql = \"SELECT {$bucketExpr} AS bucket, COUNT(*) AS cnt FROM ({$unionSql}) AS all_records GROUP BY 1 ORDER BY 1\";\n\n        $rows = DB::select($sql, [$start->toDateTimeString(), $segmentSeconds, ...$bindings]);\n\n        return $this->fillBuckets(collect($rows), $points);\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/RecordDistributionChartWidget.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse Carbon\\CarbonImmutable;\nuse Filament\\Widgets\\ChartWidget;\nuse Filament\\Widgets\\Concerns\\InteractsWithPageFilters;\n\nfinal class RecordDistributionChartWidget extends ChartWidget\n{\n    use InteractsWithPageFilters;\n\n    protected static ?int $sort = 3;\n\n    protected ?string $pollingInterval = null;\n\n    protected ?string $maxHeight = '300px';\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function getColumnSpan(): array\n    {\n        return [\n            'default' => 'full',\n            'lg' => 1,\n        ];\n    }\n\n    public function getHeading(): string\n    {\n        return 'Records by Type';\n    }\n\n    public function getDescription(): string\n    {\n        return 'Distribution of new records in this period.';\n    }\n\n    protected function getType(): string\n    {\n        return 'doughnut';\n    }\n\n    protected function getData(): array\n    {\n        $days = (int) ($this->pageFilters['period'] ?? 30);\n        $end = CarbonImmutable::now();\n        $start = $end->subDays($days);\n\n        $entities = [\n            'Companies' => Company::class,\n            'People' => People::class,\n            'Tasks' => Task::class,\n            'Notes' => Note::class,\n            'Opportunities' => Opportunity::class,\n        ];\n\n        $counts = [];\n        $labels = [];\n\n        foreach ($entities as $label => $class) {\n            $count = $class::query()\n                ->where('creation_source', '!=', CreationSource::SYSTEM)\n                ->whereBetween('created_at', [$start, $end])\n                ->count();\n\n            $labels[] = $label;\n            $counts[] = $count;\n        }\n\n        return [\n            'datasets' => [\n                [\n                    'data' => $counts,\n                    'backgroundColor' => [\n                        '#6366f1',\n                        '#8b5cf6',\n                        '#10b981',\n                        '#f59e0b',\n                        '#3b82f6',\n                    ],\n                    'borderWidth' => 0,\n                ],\n            ],\n            'labels' => $labels,\n        ];\n    }\n\n    protected function getOptions(): array\n    {\n        return [\n            'plugins' => [\n                'legend' => [\n                    'position' => 'bottom',\n                ],\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/SignupTrendChartWidget.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Carbon\\CarbonImmutable;\nuse Filament\\Widgets\\ChartWidget;\nuse Filament\\Widgets\\Concerns\\InteractsWithPageFilters;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Collection;\n\nfinal class SignupTrendChartWidget extends ChartWidget\n{\n    use InteractsWithPageFilters;\n\n    protected static ?int $sort = 2;\n\n    protected ?string $pollingInterval = null;\n\n    protected ?string $maxHeight = '300px';\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function getColumnSpan(): array\n    {\n        return [\n            'default' => 'full',\n            'lg' => 2,\n        ];\n    }\n\n    public function getHeading(): string\n    {\n        return 'Signup Trends';\n    }\n\n    public function getDescription(): string\n    {\n        return 'New users and teams over time.';\n    }\n\n    protected function getType(): string\n    {\n        return 'line';\n    }\n\n    protected function getData(): array\n    {\n        $days = (int) ($this->pageFilters['period'] ?? 30);\n        $end = CarbonImmutable::now();\n        $start = $end->subDays($days);\n\n        $intervals = $this->buildIntervals($start, $end, $days);\n        $labels = $intervals->pluck('label')->toArray();\n\n        $groupFormat = $this->getGroupFormat($days);\n\n        $userCountsByBucket = $this->getCountsByBucket(User::query(), $start, $end, $groupFormat);\n        $teamCountsByBucket = $this->getCountsByBucket(\n            Team::query()->where('personal_team', false),\n            $start,\n            $end,\n            $groupFormat,\n        );\n\n        $userCounts = $intervals->map(\n            fn (array $interval): int => $userCountsByBucket->get($interval['bucket'], 0)\n        )->all();\n\n        $teamCounts = $intervals->map(\n            fn (array $interval): int => $teamCountsByBucket->get($interval['bucket'], 0)\n        )->all();\n\n        return [\n            'datasets' => [\n                [\n                    'label' => 'New Users',\n                    'data' => $userCounts,\n                    'borderColor' => '#6366f1',\n                    'backgroundColor' => 'rgba(99, 102, 241, 0.1)',\n                    'borderWidth' => 2,\n                    'fill' => true,\n                    'tension' => 0.3,\n                    'pointRadius' => 3,\n                ],\n                [\n                    'label' => 'New Teams',\n                    'data' => $teamCounts,\n                    'borderColor' => '#10b981',\n                    'backgroundColor' => 'rgba(16, 185, 129, 0.1)',\n                    'borderWidth' => 2,\n                    'fill' => true,\n                    'tension' => 0.3,\n                    'pointRadius' => 3,\n                ],\n            ],\n            'labels' => $labels,\n        ];\n    }\n\n    /**\n     * @return Collection<string, int>\n     */\n    private function getCountsByBucket(\n        Builder $query,\n        CarbonImmutable $start,\n        CarbonImmutable $end,\n        string $groupFormat,\n    ): Collection {\n        $bucketExpression = \"to_char(created_at, '{$groupFormat}')\";\n\n        return $query\n            ->selectRaw(\"{$bucketExpression} as bucket, COUNT(*) as cnt\")\n            ->whereBetween('created_at', [$start->toDateTimeString(), $end->toDateTimeString()])\n            ->groupByRaw($bucketExpression)\n            ->pluck('cnt', 'bucket')\n            ->map(fn (mixed $value): int => (int) $value);\n    }\n\n    private function getGroupFormat(int $days): string\n    {\n        if ($days <= 30) {\n            return 'YYYY-MM-DD';\n        }\n\n        if ($days <= 90) {\n            return 'IYYY-IW';\n        }\n\n        return 'YYYY-MM';\n    }\n\n    /**\n     * @return Collection<int, array{label: string, start: CarbonImmutable, end: CarbonImmutable, bucket: string}>\n     */\n    private function buildIntervals(CarbonImmutable $start, CarbonImmutable $end, int $days): Collection\n    {\n        if ($days <= 30) {\n            return $this->buildDailyIntervals($start, $days);\n        }\n\n        if ($days <= 90) {\n            return $this->buildWeeklyIntervals($start, $end);\n        }\n\n        return $this->buildMonthlyIntervals($start, $end);\n    }\n\n    /**\n     * @return Collection<int, array{label: string, start: CarbonImmutable, end: CarbonImmutable, bucket: string}>\n     */\n    private function buildDailyIntervals(CarbonImmutable $start, int $days): Collection\n    {\n        return collect(range(0, $days - 1))->map(function (int $i) use ($start): array {\n            $day = $start->addDays($i);\n\n            return [\n                'label' => $day->format('M j'),\n                'start' => $day->startOfDay(),\n                'end' => $day->endOfDay(),\n                'bucket' => $day->format('Y-m-d'),\n            ];\n        });\n    }\n\n    /**\n     * @return Collection<int, array{label: string, start: CarbonImmutable, end: CarbonImmutable, bucket: string}>\n     */\n    private function buildWeeklyIntervals(CarbonImmutable $start, CarbonImmutable $end): Collection\n    {\n        $intervals = collect();\n        $current = $start->startOfWeek();\n\n        while ($current->lt($end)) {\n            $weekEnd = $current->endOfWeek()->min($end);\n            $intervals->push([\n                'label' => $current->format('M j'),\n                'start' => $current,\n                'end' => $weekEnd,\n                'bucket' => $current->format('o-W'),\n            ]);\n            $current = $current->addWeek();\n        }\n\n        return $intervals;\n    }\n\n    /**\n     * @return Collection<int, array{label: string, start: CarbonImmutable, end: CarbonImmutable, bucket: string}>\n     */\n    private function buildMonthlyIntervals(CarbonImmutable $start, CarbonImmutable $end): Collection\n    {\n        $intervals = collect();\n        $current = $start->startOfMonth();\n\n        while ($current->lt($end)) {\n            $monthEnd = $current->endOfMonth()->min($end);\n            $intervals->push([\n                'label' => $current->format('M Y'),\n                'start' => $current,\n                'end' => $monthEnd,\n                'bucket' => $current->format('Y-m'),\n            ]);\n            $current = $current->addMonth();\n        }\n\n        return $intervals;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/TopTeamsTableWidget.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets;\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Team;\nuse Carbon\\CarbonImmutable;\nuse Filament\\Tables\\Columns\\TextColumn;\nuse Filament\\Tables\\Table;\nuse Filament\\Widgets\\Concerns\\InteractsWithPageFilters;\nuse Filament\\Widgets\\TableWidget as BaseWidget;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Query\\Builder as QueryBuilder;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource;\n\nfinal class TopTeamsTableWidget extends BaseWidget\n{\n    use InteractsWithPageFilters;\n\n    protected static ?string $heading = 'Top Teams';\n\n    protected static ?int $sort = 4;\n\n    protected int|string|array $columnSpan = 'full';\n\n    /** @var array<int, string> */\n    private const array ENTITY_TABLES = ['companies', 'people', 'tasks', 'notes', 'opportunities'];\n\n    public function table(Table $table): Table\n    {\n        return $table\n            ->query(fn (): Builder => $this->buildQuery())\n            ->columns([\n                TextColumn::make('name')\n                    ->label('Team')\n                    ->searchable()\n                    ->sortable()\n                    ->weight('semibold')\n                    ->url(fn (Team $record): string => TeamResource::getUrl('view', ['record' => $record])),\n\n                TextColumn::make('owner.name')\n                    ->label('Owner')\n                    ->sortable()\n                    ->url(fn (Team $record): string => UserResource::getUrl('view', ['record' => $record->owner])),\n\n                TextColumn::make('members_count')\n                    ->label('Members')\n                    ->numeric()\n                    ->sortable()\n                    ->alignCenter()\n                    ->badge()\n                    ->color('gray'),\n\n                TextColumn::make('records_count')\n                    ->label('Records')\n                    ->numeric()\n                    ->sortable(query: fn (Builder $query, string $direction): Builder => $query->orderBy('records_count', $direction))\n                    ->alignCenter()\n                    ->badge()\n                    ->color('info'),\n\n                TextColumn::make('custom_fields_count')\n                    ->label('Custom Fields')\n                    ->numeric()\n                    ->sortable()\n                    ->alignCenter()\n                    ->badge()\n                    ->color('warning'),\n\n                TextColumn::make('last_activity')\n                    ->label('Last Activity')\n                    ->since()\n                    ->sortable(),\n\n                TextColumn::make('created_at')\n                    ->label('Created')\n                    ->date('M j, Y')\n                    ->sortable(),\n            ])\n            ->defaultSort('records_count', 'desc')\n            ->paginated([10, 25])\n            ->defaultPaginationPageOption(10)\n            ->striped()\n            ->emptyStateHeading('No Active Teams')\n            ->emptyStateDescription('Team activity will appear here once teams start creating records.')\n            ->emptyStateIcon('heroicon-o-user-group');\n    }\n\n    /**\n     * @return array{string, string}\n     */\n    private function getDateRange(): array\n    {\n        return once(function (): array {\n            $days = (int) ($this->pageFilters['period'] ?? 30);\n            $end = CarbonImmutable::now();\n            $start = $end->subDays($days);\n\n            return [$start->toDateTimeString(), $end->toDateTimeString()];\n        });\n    }\n\n    /**\n     * @return array{string, array<int, string>}\n     */\n    private function getRecordsCountExpression(): array\n    {\n        return once(function (): array {\n            [$startStr, $endStr] = $this->getDateRange();\n\n            return $this->buildRecordsCountExpression(CreationSource::SYSTEM->value, $startStr, $endStr);\n        });\n    }\n\n    private function buildQuery(): Builder\n    {\n        [$recordsCountSql, $recordsBindings] = $this->getRecordsCountExpression();\n        [$lastActivitySql, $lastActivityBindings] = $this->buildLastActivityExpression(CreationSource::SYSTEM->value);\n        [$startStr, $endStr] = $this->getDateRange();\n        $systemSource = CreationSource::SYSTEM->value;\n\n        return Team::query()\n            ->select(['teams.*'])\n            ->selectRaw(\"({$recordsCountSql}) as records_count\", $recordsBindings)\n            ->selectRaw('(SELECT COUNT(*) FROM team_user WHERE team_user.team_id = teams.id) as members_count')\n            ->selectRaw('(SELECT COUNT(*) FROM custom_fields WHERE custom_fields.tenant_id = teams.id) as custom_fields_count')\n            ->selectRaw(\"{$lastActivitySql} as last_activity\", $lastActivityBindings)\n            ->where(function (Builder $query) use ($startStr, $endStr, $systemSource): void {\n                foreach (self::ENTITY_TABLES as $table) {\n                    $query->orWhereExists(function (QueryBuilder $sub) use ($table, $startStr, $endStr, $systemSource): void {\n                        $sub->selectRaw('1')\n                            ->from($table)\n                            ->whereColumn(\"{$table}.team_id\", 'teams.id')\n                            ->whereNull(\"{$table}.deleted_at\")\n                            ->where(\"{$table}.creation_source\", '!=', $systemSource)\n                            ->whereBetween(\"{$table}.created_at\", [$startStr, $endStr]);\n                    });\n                }\n            });\n    }\n\n    /**\n     * @return array{string, array<int, string>}\n     */\n    private function buildRecordsCountExpression(string $systemSource, string $startStr, string $endStr): array\n    {\n        $subqueries = collect(self::ENTITY_TABLES)->map(\n            fn (string $table): string => \"(SELECT COUNT(*) FROM {$table} WHERE {$table}.team_id = teams.id AND {$table}.deleted_at IS NULL AND {$table}.creation_source != ? AND {$table}.created_at BETWEEN ? AND ?)\"\n        );\n\n        $bindings = collect(self::ENTITY_TABLES)\n            ->flatMap(fn (): array => [$systemSource, $startStr, $endStr])\n            ->all();\n\n        return [$subqueries->implode(' + '), $bindings];\n    }\n\n    /**\n     * @return array{string, array<int, string>}\n     */\n    private function buildLastActivityExpression(string $systemSource): array\n    {\n        $coalesces = collect(self::ENTITY_TABLES)->map(\n            fn (string $table): string => \"COALESCE((SELECT MAX(created_at) FROM {$table} WHERE {$table}.team_id = teams.id AND {$table}.deleted_at IS NULL AND {$table}.creation_source != ?), TIMESTAMP '1970-01-01')\"\n        );\n\n        $bindings = array_fill(0, count(self::ENTITY_TABLES), $systemSource);\n\n        return [\"GREATEST({$coalesces->implode(', ')})\", $bindings];\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Filament/Widgets/UserRetentionChartWidget.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Filament\\Widgets;\n\nuse Carbon\\CarbonImmutable;\nuse Filament\\Widgets\\ChartWidget;\nuse Filament\\Widgets\\Concerns\\InteractsWithPageFilters;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\Concerns\\HasPeriodComparison;\n\nfinal class UserRetentionChartWidget extends ChartWidget\n{\n    use HasPeriodComparison;\n    use InteractsWithPageFilters;\n\n    protected static ?int $sort = 6;\n\n    protected ?string $pollingInterval = null;\n\n    protected ?string $maxHeight = '300px';\n\n    protected int|string|array $columnSpan = 'full';\n\n    public function getHeading(): string\n    {\n        return 'User Retention';\n    }\n\n    public function getDescription(): string\n    {\n        return 'New active vs returning users per week.';\n    }\n\n    protected function getType(): string\n    {\n        return 'bar';\n    }\n\n    protected function getData(): array\n    {\n        $days = (int) ($this->pageFilters['period'] ?? 30);\n        $end = CarbonImmutable::now();\n        $start = $end->subDays($days);\n\n        $intervals = $this->buildWeeklyIntervals($start, $end);\n\n        $newActive = [];\n        $returning = [];\n        $labels = [];\n\n        foreach ($intervals as $interval) {\n            $labels[] = $interval['label'];\n\n            $activeCreatorIds = $this->getActiveCreatorIds($interval['start'], $interval['end']);\n\n            if ($activeCreatorIds->isEmpty()) {\n                $newActive[] = 0;\n                $returning[] = 0;\n\n                continue;\n            }\n\n            $counts = DB::table('users')\n                ->selectRaw('COUNT(*) FILTER (WHERE created_at >= ? AND created_at <= ?) AS new_count', [$interval['start'], $interval['end']])\n                ->selectRaw('COUNT(*) FILTER (WHERE created_at < ?) AS returning_count', [$interval['start']])\n                ->whereIn('id', $activeCreatorIds)\n                ->first();\n\n            $newActive[] = (int) $counts->new_count;\n            $returning[] = (int) $counts->returning_count;\n        }\n\n        return [\n            'datasets' => [\n                [\n                    'label' => 'New Active',\n                    'data' => $newActive,\n                    'backgroundColor' => 'rgba(99, 102, 241, 0.8)',\n                    'borderColor' => '#6366f1',\n                    'borderWidth' => 1,\n                ],\n                [\n                    'label' => 'Returning',\n                    'data' => $returning,\n                    'backgroundColor' => 'rgba(16, 185, 129, 0.8)',\n                    'borderColor' => '#10b981',\n                    'borderWidth' => 1,\n                ],\n            ],\n            'labels' => $labels,\n        ];\n    }\n\n    protected function getOptions(): array\n    {\n        return [\n            'scales' => [\n                'x' => ['stacked' => true],\n                'y' => ['stacked' => true],\n            ],\n            'plugins' => [\n                'legend' => ['position' => 'bottom'],\n            ],\n        ];\n    }\n\n    /**\n     * @return Collection<int, array{label: string, start: CarbonImmutable, end: CarbonImmutable}>\n     */\n    private function buildWeeklyIntervals(CarbonImmutable $start, CarbonImmutable $end): Collection\n    {\n        $intervals = collect();\n        $current = $start->startOfWeek();\n\n        while ($current->lt($end)) {\n            $weekEnd = $current->endOfWeek()->min($end);\n            $intervals->push([\n                'label' => $current->format('M j'),\n                'start' => $current,\n                'end' => $weekEnd,\n            ]);\n            $current = $current->addWeek();\n        }\n\n        return $intervals;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Models/SystemAdministrator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Models;\n\nuse Database\\Factories\\SystemAdministratorFactory;\nuse Exception;\nuse Filament\\Models\\Contracts\\FilamentUser;\nuse Filament\\Models\\Contracts\\HasAvatar;\nuse Filament\\Panel;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Concerns\\HasUlids;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Support\\Carbon;\nuse Laravel\\Sanctum\\HasApiTokens;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\n\n/**\n * @property string $id\n * @property string $name\n * @property string $email\n * @property string $password\n * @property SystemAdministratorRole $role\n * @property Carbon|null $email_verified_at\n * @property string|null $remember_token\n * @property Carbon|null $created_at\n * @property Carbon|null $updated_at\n */\nfinal class SystemAdministrator extends Authenticatable implements FilamentUser, HasAvatar, MustVerifyEmail\n{\n    use HasApiTokens;\n\n    /** @use HasFactory<SystemAdministratorFactory> */\n    use HasFactory;\n\n    use HasUlids;\n    use Notifiable;\n\n    protected $table = 'system_administrators';\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var list<string>\n     */\n    protected $fillable = [\n        'name',\n        'email',\n        'password',\n        'role',\n    ];\n\n    /**\n     * The attributes that should be hidden for serialization.\n     *\n     * @var list<string>\n     */\n    protected $hidden = [\n        'password',\n        'remember_token',\n    ];\n\n    /**\n     * Get the attributes that should be cast.\n     *\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'email_verified_at' => 'datetime',\n            'password' => 'hashed',\n            'role' => SystemAdministratorRole::class,\n        ];\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function canAccessPanel(Panel $panel): bool\n    {\n        return $panel->getId() === 'sysadmin' && $this->hasVerifiedEmail();\n    }\n\n    public function getFilamentAvatarUrl(): ?string\n    {\n        return null;\n    }\n\n    /**\n     * Create a new factory instance for the model.\n     */\n    protected static function newFactory(): SystemAdministratorFactory\n    {\n        return SystemAdministratorFactory::new();\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/CompanyPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class CompanyPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all companies across all tenants\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any specific company\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/FailedImportRowPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nfinal class FailedImportRowPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n    }\n\n    public function view(): bool\n    {\n        return true;\n    }\n\n    public function create(): bool\n    {\n        return false;\n    }\n\n    public function update(): bool\n    {\n        return false;\n    }\n\n    public function delete(): bool\n    {\n        return false;\n    }\n\n    public function deleteAny(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/ImportPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nfinal class ImportPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n    }\n\n    public function view(): bool\n    {\n        return true;\n    }\n\n    public function create(): bool\n    {\n        return false;\n    }\n\n    public function update(): bool\n    {\n        return false;\n    }\n\n    public function delete(): bool\n    {\n        return false;\n    }\n\n    public function deleteAny(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/NotePolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class NotePolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all notes across all tenants\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any specific note\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/OpportunityPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class OpportunityPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all opportunities across all tenants\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any specific opportunity\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function reorder(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/PeoplePolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class PeoplePolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all people across all tenants\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any specific person\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/SystemAdministratorPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Illuminate\\Auth\\Access\\Response;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class SystemAdministratorPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n    }\n\n    public function view(): bool\n    {\n        return true;\n    }\n\n    public function create(SystemAdministrator $admin): Response\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator\n            ? Response::allow()\n            : Response::deny('Only Super Administrators can create new system administrators.');\n    }\n\n    public function update(SystemAdministrator $admin, SystemAdministrator $systemAdmin): Response\n    {\n        if ($admin->role === SystemAdministratorRole::SuperAdministrator) {\n            return Response::allow();\n        }\n\n        if ($admin->id === $systemAdmin->id) {\n            return Response::allow();\n        }\n\n        return Response::deny('You can only edit your own account.');\n    }\n\n    public function delete(SystemAdministrator $admin, SystemAdministrator $systemAdmin): Response\n    {\n        if ($admin->id === $systemAdmin->id) {\n            return Response::deny('You cannot delete your own account.');\n        }\n\n        if ($admin->role === SystemAdministratorRole::SuperAdministrator) {\n            return Response::allow();\n        }\n\n        return Response::deny('Only Super Administrators can delete system administrators.');\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin, SystemAdministrator $systemAdmin): Response\n    {\n        if ($admin->id === $systemAdmin->id) {\n            return Response::deny('You cannot permanently delete your own account.');\n        }\n\n        return $admin->role === SystemAdministratorRole::SuperAdministrator\n            ? Response::allow()\n            : Response::deny('Only Super Administrators can permanently delete system administrators.');\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/TaskPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class TaskPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all tasks across all tenants\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any specific task\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function reorder(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/TeamPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class TeamPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all teams\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any team\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/Policies/UserPolicy.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin\\Policies;\n\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nfinal class UserPolicy\n{\n    public function viewAny(): bool\n    {\n        return true;\n        // System admins can view all users across all tenants\n    }\n\n    public function view(): bool\n    {\n        return true;\n        // System admins can view any user\n    }\n\n    public function create(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function update(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function delete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function deleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restore(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDelete(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function forceDeleteAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n\n    public function restoreAny(SystemAdministrator $admin): bool\n    {\n        return $admin->role === SystemAdministratorRole::SuperAdministrator;\n    }\n}\n"
  },
  {
    "path": "packages/SystemAdmin/src/SystemAdminPanelProvider.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Relaticle\\SystemAdmin;\n\nuse Exception;\nuse Filament\\Http\\Middleware\\Authenticate;\nuse Filament\\Http\\Middleware\\DisableBladeIconComponents;\nuse Filament\\Http\\Middleware\\DispatchServingFilamentEvent;\nuse Filament\\Navigation\\NavigationGroup;\nuse Filament\\Panel;\nuse Filament\\PanelProvider;\nuse Filament\\Support\\Colors\\Color;\nuse Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse;\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies;\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken;\nuse Illuminate\\Routing\\Middleware\\SubstituteBindings;\nuse Illuminate\\Session\\Middleware\\AuthenticateSession;\nuse Illuminate\\Session\\Middleware\\StartSession;\nuse Illuminate\\View\\Middleware\\ShareErrorsFromSession;\nuse Relaticle\\SystemAdmin\\Filament\\Pages\\Dashboard;\n\nfinal class SystemAdminPanelProvider extends PanelProvider\n{\n    /**\n     * @throws Exception\n     */\n    public function panel(Panel $panel): Panel\n    {\n        $panel = $panel->id('sysadmin');\n\n        // Configure domain or path based on environment\n        if ($domain = config('app.sysadmin_domain')) {\n            $panel->domain($domain);\n        } else {\n            $panel->path(config('app.sysadmin_path', 'sysadmin'));\n        }\n\n        return $panel\n            ->login()\n            ->emailVerification()\n            ->authGuard('sysadmin')\n            ->authPasswordBroker('system_administrators')\n            ->strictAuthorization()\n            ->spa()\n            ->colors([\n                'primary' => Color::Indigo,\n            ])\n            ->brandName('Relaticle System Admin')\n            ->discoverResources(in: base_path('packages/SystemAdmin/src/Filament/Resources'), for: 'Relaticle\\\\SystemAdmin\\\\Filament\\\\Resources')\n            ->discoverPages(in: base_path('packages/SystemAdmin/src/Filament/Pages'), for: 'Relaticle\\\\SystemAdmin\\\\Filament\\\\Pages')\n            ->discoverWidgets(in: base_path('packages/SystemAdmin/src/Filament/Widgets'), for: 'Relaticle\\\\SystemAdmin\\\\Filament\\\\Widgets')\n            ->navigationGroups([\n                NavigationGroup::make()\n                    ->label('Dashboards'),\n                NavigationGroup::make()\n                    ->label('User Management'),\n                NavigationGroup::make()\n                    ->label('CRM'),\n                NavigationGroup::make()\n                    ->label('Task Management'),\n                NavigationGroup::make()\n                    ->label('Content'),\n            ])\n            ->globalSearch()\n            ->darkMode()\n            ->maxContentWidth('full')\n            ->sidebarCollapsibleOnDesktop()\n            ->pages([\n                Dashboard::class,\n            ])\n            ->widgets([])\n            ->plugins([])\n            ->databaseNotifications()\n            ->middleware([\n                EncryptCookies::class,\n                AddQueuedCookiesToResponse::class,\n                StartSession::class,\n                AuthenticateSession::class,\n                ShareErrorsFromSession::class,\n                VerifyCsrfToken::class,\n                SubstituteBindings::class,\n                DisableBladeIconComponents::class,\n                DispatchServingFilamentEvent::class,\n            ])\n            ->authMiddleware([\n                Authenticate::class,\n            ])\n            ->viteTheme('resources/css/filament/admin/theme.css');\n    }\n}\n"
  },
  {
    "path": "phpstan.neon",
    "content": "includes:\n    - vendor/larastan/larastan/extension.neon\n\nparameters:\n    level: 7\n\n    ignoreErrors:\n        # Custom field model type covariance - App\\Models\\CustomField* extends Relaticle\\CustomFields\\Models\\CustomField*\n        # Runtime model swapping is configured in AppServiceProvider but PHPStan doesn't know about it\n        -\n            identifier: argument.type\n            message: '#(Closure\\(App\\\\Models\\\\CustomField|Relaticle\\\\CustomFields\\\\Models\\\\CustomField)(Option|Value|Section)?#'\n\n        # Base ValidateSignature has untyped variadic ...$args that PHPStan infers as array|null\n        -\n            identifier: argument.type\n            path: app/Http/Middleware/ValidateSignature.php\n\n\n    stubFiles:\n        - stubs/Mailcoach.stub\n\n    paths:\n        - app\n        - packages\n        - config\n        - bootstrap\n        - database/factories\n        - routes\n\n    excludePaths:\n        - packages/SystemAdmin\n\n    configDirectories:\n        - config\n        - packages/ImportWizard/config\n        - packages/Documentation/config\n"
  },
  {
    "path": "phpunit.ci.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"vendor/phpunit/phpunit/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n>\n    <testsuites>\n        <testsuite name=\"Arch\">\n            <directory>tests/Arch</directory>\n        </testsuite>\n        <testsuite name=\"Smoke\">\n            <directory>tests/Smoke</directory>\n        </testsuite>\n        <testsuite name=\"Feature\">\n            <directory>tests/Feature</directory>\n        </testsuite>\n        <testsuite name=\"Browser\">\n            <directory>tests/Browser</directory>\n        </testsuite>\n    </testsuites>\n    <source>\n        <include>\n            <directory>app</directory>\n            <directory>packages</directory>\n            <directory>config</directory>\n            <directory>routes</directory>\n        </include>\n        <exclude>\n            <directory>app/Http/Middleware</directory>\n            <file>app/Providers/AppServiceProvider.php</file>\n        </exclude>\n    </source>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"APP_MAINTENANCE_DRIVER\" value=\"file\"/>\n        <env name=\"BCRYPT_ROUNDS\" value=\"4\"/>\n        <env name=\"CACHE_STORE\" value=\"array\"/>\n        <env name=\"DB_CONNECTION\" value=\"pgsql\"/>\n        <env name=\"DB_DATABASE\" value=\"relaticle_testing\"/>\n        <env name=\"DB_HOST\" value=\"127.0.0.1\"/>\n        <env name=\"DB_PORT\" value=\"5432\"/>\n        <env name=\"DB_USERNAME\" value=\"postgres\"/>\n        <env name=\"DB_PASSWORD\" value=\"postgres\"/>\n        <env name=\"MAIL_MAILER\" value=\"array\"/>\n        <env name=\"PULSE_ENABLED\" value=\"false\"/>\n        <env name=\"QUEUE_CONNECTION\" value=\"sync\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"TELESCOPE_ENABLED\" value=\"false\"/>\n        <env name=\"BROADCAST_CONNECTION\" value=\"log\"/>\n        <env name=\"PUSHER_APP_KEY\" value=\"test-key\"/>\n        <env name=\"PUSHER_APP_SECRET\" value=\"test-secret\"/>\n        <env name=\"PUSHER_APP_ID\" value=\"test-id\"/>\n        <env name=\"PUSHER_APP_CLUSTER\" value=\"mt1\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"vendor/phpunit/phpunit/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n>\n    <testsuites>\n        <testsuite name=\"Arch\">\n            <directory>tests/Arch</directory>\n        </testsuite>\n        <testsuite name=\"Smoke\">\n            <directory>tests/Smoke</directory>\n        </testsuite>\n        <testsuite name=\"Feature\">\n            <directory>tests/Feature</directory>\n        </testsuite>\n        <testsuite name=\"Browser\">\n            <directory>tests/Browser</directory>\n        </testsuite>\n    </testsuites>\n    <source>\n        <include>\n            <directory>app</directory>\n            <directory>packages</directory>\n            <directory>config</directory>\n            <directory>routes</directory>\n        </include>\n        <exclude>\n            <directory>app/Http/Middleware</directory>\n            <file>app/Providers/AppServiceProvider.php</file>\n        </exclude>\n    </source>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"APP_MAINTENANCE_DRIVER\" value=\"file\"/>\n        <env name=\"BCRYPT_ROUNDS\" value=\"4\"/>\n        <env name=\"CACHE_STORE\" value=\"array\"/>\n        <env name=\"DB_CONNECTION\" value=\"pgsql\"/>\n        <env name=\"DB_DATABASE\" value=\"relaticle_testing\"/>\n        <env name=\"MAIL_MAILER\" value=\"array\"/>\n        <env name=\"PULSE_ENABLED\" value=\"false\"/>\n        <env name=\"QUEUE_CONNECTION\" value=\"sync\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"TELESCOPE_ENABLED\" value=\"false\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "pint.json",
    "content": "{\n    \"preset\": \"laravel\",\n    \"notPath\": [\n        \"app/Models/PersonalAccessToken.php\"\n    ],\n    \"rules\": {\n        \"declare_strict_types\": true,\n        \"final_class\": true,\n        \"final_internal_class\": true,\n        \"strict_comparison\": true\n    }\n}\n"
  },
  {
    "path": "public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    RewriteEngine On\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_URI} (.+)/$\n    RewriteRule ^ %1 [L,R=301]\n\n    # Send Requests To Front Controller...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n</IfModule>\n"
  },
  {
    "path": "public/css/asmit/resized-column/resized-column.css",
    "content": "/* Resized Column Styles */\n.column-resize-handle-bar {\n    position: absolute;\n    top: 50%;\n    height: 66.666667%;\n    transform: translateY(-50%);\n    width: 1rem;\n    cursor: col-resize;\n    user-select: none;\n    touch-action: none;\n    right: -0.5rem;\n    z-index: 10;\n    display: flex;\n    justify-content: center;\n}\n\n.column-resize-handle-bar::before {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    width: 1px;\n    background-color: rgb(209 213 219);\n    transform: translateX(1px);\n    transition-property: all;\n    transition-duration: 300ms;\n}\n\n.dark .column-resize-handle-bar::before {\n    background-color: rgba(255, 255, 255, 0.05);\n}\n\n.column-resize-handle-bar:hover::before,\n.column-resize-handle-bar.active::before {\n    width: 2px;\n    background-color: rgb(var(--primary-500));\n}\n\n/* Active resize handle */\n.column-resize-handle-bar.active::before {\n    width: 4px !important;\n}\n/* Table header cell styles */\n.fi-ta-header-cell {\n    position: relative;\n}\n"
  },
  {
    "path": "public/css/filament/filament/app.css",
    "content": "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-tracking:initial;--tw-duration:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-ease:initial;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-content:\"\";--tw-outline-style:solid;--tw-space-x-reverse:0}}}@layer theme{:root,:host{--font-mono:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-sky-400:oklch(74.6% .16 232.661);--color-gray-100:var(--gray-100);--color-gray-200:var(--gray-200);--color-gray-300:var(--gray-300);--color-gray-400:var(--gray-400);--color-gray-500:var(--gray-500);--color-gray-600:var(--gray-600);--color-gray-700:var(--gray-700);--color-gray-900:var(--gray-900);--color-gray-950:var(--gray-950);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--default-mono-font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-primary-400:var(--primary-400)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}}@layer components{.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{color:#fff;white-space:normal;background-color:#333;border-radius:4px;outline:0;font-size:14px;line-height:1.4;transition-property:transform,visibility,opacity;position:relative}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-width:8px 8px 0;border-top-color:initial;transform-origin:top;bottom:-7px;left:0}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-width:0 8px 8px;border-bottom-color:initial;transform-origin:bottom;top:-7px;left:0}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;transform-origin:0;right:-7px}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:100%;left:-7px}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;width:16px;height:16px}.tippy-arrow:before{content:\"\";border-style:solid;border-color:#0000;position:absolute}.tippy-content{z-index:1;padding:5px 9px;position:relative}.tippy-box[data-theme~=light]{color:#26323d;background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.fi-avatar{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8);border-radius:var(--radius-md);object-fit:cover;object-position:center}.fi-avatar.fi-circular{border-radius:3.40282e38px}.fi-avatar.fi-size-sm{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.fi-avatar.fi-size-lg{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.fi-badge{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*1);border-radius:var(--radius-md);background-color:var(--gray-50);min-width:1.5rem;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-600);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.fi-badge{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.fi-badge{--tw-ring-inset:inset}.fi-badge:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.fi-badge:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.fi-badge:not(.fi-wrapped){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-badge.fi-disabled:not(.fi-force-enabled),.fi-badge[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-badge.fi-disabled:not(.fi-force-enabled),.fi-badge[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-badge .fi-badge-label-ctn{display:grid}.fi-badge .fi-badge-label.fi-wrapped{text-wrap:wrap;word-break:break-word}.fi-badge .fi-badge-label:not(.fi-wrapped){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-badge .fi-icon{flex-shrink:0}.fi-badge.fi-size-xs{min-width:1rem;padding-inline:calc(var(--spacing)*.5);padding-block:calc(var(--spacing)*0);--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.fi-badge.fi-size-sm{min-width:1.25rem;padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.fi-badge.fi-color{background-color:var(--color-50);color:var(--text);--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)10%,transparent)}}.fi-badge.fi-color:where(.dark,.dark *){background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-badge.fi-color:where(.dark,.dark *){color:var(--dark-text);--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon{color:var(--color-700)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon{color:color-mix(in oklab,var(--color-700)50%,transparent)}}.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:var(--color-300)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:color-mix(in oklab,var(--color-300)50%,transparent)}}.fi-badge:not(.fi-color) .fi-icon{color:var(--gray-400)}.fi-badge:not(.fi-color) .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-badge .fi-icon.fi-color{color:var(--color-500)}.fi-badge .fi-badge-delete-btn{margin-block:calc(var(--spacing)*-1);padding:calc(var(--spacing)*1);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;justify-content:center;align-items:center;margin-inline-start:calc(var(--spacing)*-1);margin-inline-end:calc(var(--spacing)*-2);transition-duration:75ms;display:flex}.fi-badge .fi-badge-delete-btn>.fi-icon{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-badge .fi-badge-delete-btn>.fi-icon{color:color-mix(in oklab,var(--gray-700)50%,transparent)}}.fi-badge .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-badge .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)50%,transparent)}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:focus-visible{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:focus-visible{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}@media (hover:hover){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--gray-300)75%,transparent)}}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:color-mix(in oklab,var(--gray-300)75%,transparent)}}@media (hover:hover){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:hover{color:var(--color-700)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:hover{color:color-mix(in oklab,var(--color-700)75%,transparent)}}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:focus-visible{color:var(--color-700)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:focus-visible{color:color-mix(in oklab,var(--color-700)75%,transparent)}}@media (hover:hover){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:var(--color-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--color-300)75%,transparent)}}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:var(--color-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:color-mix(in oklab,var(--color-300)75%,transparent)}}.fi-breadcrumbs ol{align-items:center;column-gap:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}.fi-breadcrumbs ol li{align-items:center;column-gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);display:flex}.fi-breadcrumbs ol li:where(.dark,.dark *){color:var(--gray-400)}.fi-breadcrumbs ol li a{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-breadcrumbs ol li a:hover{color:var(--gray-700)}.fi-breadcrumbs ol li a:where(.dark,.dark *):hover{color:var(--gray-200)}}.fi-breadcrumbs ol li .fi-icon{color:var(--gray-400);display:flex}.fi-breadcrumbs ol li .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-breadcrumbs ol li .fi-icon.fi-ltr:where(:dir(rtl),[dir=rtl],[dir=rtl] *),.fi-breadcrumbs ol li .fi-icon.fi-rtl:where(:dir(ltr),[dir=ltr],[dir=ltr] *){display:none}.fi-btn{justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;grid-auto-flow:column;transition-duration:75ms;display:inline-grid;position:relative}:is(.fi-btn.fi-force-enabled,.fi-btn:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn.fi-disabled:not(.fi-force-enabled),.fi-btn[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-btn.fi-disabled:not(.fi-force-enabled),.fi-btn[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-btn>.fi-icon{color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-btn.fi-size-xs{gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-btn.fi-size-sm{gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-btn.fi-size-lg{gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3.5);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-btn.fi-size-xl{gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-btn.fi-outlined{color:var(--gray-950);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-300)}.fi-btn.fi-outlined:where(.dark,.dark *){color:var(--color-white);--tw-ring-color:var(--gray-700)}@media (hover:hover){:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):hover{background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}}:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--gray-400)40%,transparent)}}.fi-btn.fi-outlined.fi-color{color:var(--text);--tw-ring-color:var(--color-600)}.fi-btn.fi-outlined.fi-color:where(.dark,.dark *){color:var(--dark-text);--tw-ring-color:var(--color-500)}@media (hover:hover){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):hover{background-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):hover{background-color:color-mix(in oklab,var(--color-500)10%,transparent)}}}:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-500)40%,transparent)}}@media (hover:hover){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-600)10%,transparent)}}}:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-400)40%,transparent)}}.fi-btn.fi-outlined.fi-color>.fi-icon{color:var(--color-600)}.fi-btn.fi-outlined.fi-color>.fi-icon:where(.dark,.dark *){color:var(--color-400)}.fi-btn:not(.fi-outlined){background-color:var(--color-white);color:var(--gray-950)}.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-btn:not(.fi-outlined):where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){:is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-50)}:is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}}input:checked+label.fi-btn:not(.fi-outlined){background-color:var(--gray-400);color:var(--color-white);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:checked+label.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:var(--gray-600)}@media (hover:hover){:is(input:checked+label.fi-btn:not(.fi-outlined).fi-force-enabled,input:checked+label.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-300)}:is(input:checked+label.fi-btn:not(.fi-outlined).fi-force-enabled,input:checked+label.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--gray-500)}}.fi-btn:not(.fi-outlined).fi-color:not(label){background-color:var(--bg);color:var(--text)}.fi-btn:not(.fi-outlined).fi-color:not(label):where(.dark,.dark *){background-color:var(--dark-bg);color:var(--dark-text)}@media (hover:hover){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):hover{background-color:var(--hover-bg);color:var(--hover-text)}}:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-500)50%,transparent)}}@media (hover:hover){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--dark-hover-bg);color:var(--dark-hover-text)}}:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-400)50%,transparent)}}.fi-btn:not(.fi-outlined).fi-color:not(label)>.fi-icon{color:var(--text)}.fi-btn:not(.fi-outlined).fi-color:not(label)>.fi-icon:where(.dark,.dark *){color:var(--dark-text)}input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color){background-color:var(--bg);color:var(--text);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color):where(.dark,.dark *){background-color:var(--dark-bg);color:var(--dark-text)}@media (hover:hover){input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):hover{background-color:var(--hover-bg);color:var(--hover-text)}input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--dark-hover-bg);color:var(--dark-hover-text)}}input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){z-index:10;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:color-mix(in oklab,var(--color-500)50%,transparent)}}input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)50%,transparent)}}label.fi-btn{cursor:pointer}label.fi-btn>.fi-icon:is(:checked+label>.fi-icon){color:var(--text)}label.fi-btn>.fi-icon:is(:checked+label>.fi-icon):where(.dark,.dark *){color:var(--dark-text)}.fi-btn:not(.fi-color),label.fi-btn{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-btn:not(.fi-color),label.fi-btn{--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}:is(.fi-btn:not(.fi-color),label.fi-btn):where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-color),label.fi-btn):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-btn.fi-labeled-from-sm,.fi-btn.fi-labeled-from-md,.fi-btn.fi-labeled-from-lg,.fi-btn.fi-labeled-from-xl,.fi-btn.fi-labeled-from-2xl{display:none}@media (min-width:40rem){.fi-btn.fi-labeled-from-sm{display:inline-grid}}@media (min-width:48rem){.fi-btn.fi-labeled-from-md{display:inline-grid}}@media (min-width:64rem){.fi-btn.fi-labeled-from-lg{display:inline-grid}}@media (min-width:80rem){.fi-btn.fi-labeled-from-xl{display:inline-grid}}@media (min-width:96rem){.fi-btn.fi-labeled-from-2xl{display:inline-grid}}.fi-btn .fi-btn-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*0);z-index:1;--tw-translate-x:calc(calc(1/2*100%)*-1);--tw-translate-y:calc(calc(1/2*100%)*-1);width:max-content;translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-md);background-color:var(--color-white);display:flex;position:absolute}.fi-btn .fi-btn-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1/2*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-btn .fi-btn-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.fi-btn-group{border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);grid-auto-flow:column;display:grid}.fi-btn-group:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-btn-group:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-btn-group>.fi-btn{border-radius:0;flex:1}.fi-btn-group>.fi-btn:nth-child(1 of .fi-btn){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.fi-btn-group>.fi-btn:nth-last-child(1 of .fi-btn){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,var(--color-gray-200));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-shadow:1px 0 0 0 var(--tw-shadow-color,var(--color-gray-200));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(.dark,.dark *){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,#fff3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(:dir(rtl),[dir=rtl],[dir=rtl] *):where(.dark,.dark *){--tw-shadow:1px 0 0 0 var(--tw-shadow-color,#fff3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.fi-btn-group>.fi-btn.fi-processing:enabled{cursor:wait;opacity:.7}.fi-btn-group>.fi-btn:not(.fi-outlined){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(.fi-color),label:is(.fi-btn-group>.fi-btn){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-callout{gap:calc(var(--spacing)*3);border-radius:var(--radius-xl);background-color:var(--color-white);width:100%;padding:calc(var(--spacing)*4);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950);display:flex}@supports (color:color-mix(in lab, red, red)){.fi-callout{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-callout:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-callout:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-callout .fi-callout-icon{color:var(--gray-400)}.fi-callout .fi-callout-icon.fi-color{color:var(--color-400)}.fi-callout .fi-callout-main{margin-top:calc(var(--spacing)*.5);gap:calc(var(--spacing)*3);flex:1;display:grid}.fi-callout .fi-callout-text{gap:calc(var(--spacing)*1);display:grid}.fi-callout .fi-callout-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-callout .fi-callout-heading:where(.dark,.dark *){color:var(--color-white)}.fi-callout .fi-callout-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-wrap:pretty;overflow-wrap:break-word;color:var(--gray-500);overflow:hidden}.fi-callout .fi-callout-description:where(.dark,.dark *){color:var(--gray-400)}.fi-callout .fi-callout-description>p:not(:first-of-type){margin-top:calc(var(--spacing)*1)}.fi-callout .fi-callout-footer{gap:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}.fi-callout .fi-callout-controls{align-self:flex-start}.fi-callout.fi-color{--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)20%,transparent)}}.fi-callout.fi-color:where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.fi-callout.fi-color{background-color:#fff}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color{background-color:color-mix(in oklab,white 90%,var(--color-400))}}.fi-callout.fi-color:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)90%,var(--color-400))}}.fi-callout.fi-color .fi-callout-description{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color .fi-callout-description{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}.fi-callout.fi-color .fi-callout-description:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color .fi-callout-description:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)75%,transparent)}}.fi-dropdown-header{gap:calc(var(--spacing)*2);width:100%;padding:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);display:flex}.fi-dropdown-header .fi-icon{color:var(--gray-400)}.fi-dropdown-header .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-dropdown-header span{text-overflow:ellipsis;white-space:nowrap;text-align:start;color:var(--gray-700);flex:1;overflow:hidden}.fi-dropdown-header span:where(.dark,.dark *){color:var(--gray-200)}.fi-dropdown-header.fi-color .fi-icon{color:var(--color-500)}.fi-dropdown-header.fi-color .fi-icon:where(.dark,.dark *){color:var(--color-400)}.fi-dropdown-header.fi-color span{color:var(--text)}.fi-dropdown-header.fi-color span:where(.dark,.dark *){color:var(--dark-text)}:scope .fi-dropdown-trigger{cursor:pointer;display:flex}:scope .fi-dropdown-panel{z-index:20;border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100vw;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;max-width:14rem!important}:scope .fi-dropdown-panel:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:scope .fi-dropdown-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:where(:scope .fi-dropdown-panel:not(.fi-dropdown-list)>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-100)}:where(:scope .fi-dropdown-panel:not(.fi-dropdown-list):where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(:scope .fi-dropdown-panel:not(.fi-dropdown-list):where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:scope .fi-dropdown-panel.fi-opacity-0{opacity:0}:scope .fi-dropdown-panel.fi-width-xs{max-width:var(--container-xs)!important}:scope .fi-dropdown-panel.fi-width-sm{max-width:var(--container-sm)!important}:scope .fi-dropdown-panel.fi-width-md{max-width:var(--container-md)!important}:scope .fi-dropdown-panel.fi-width-lg{max-width:var(--container-lg)!important}:scope .fi-dropdown-panel.fi-width-xl{max-width:var(--container-xl)!important}:scope .fi-dropdown-panel.fi-width-2xl{max-width:var(--container-2xl)!important}:scope .fi-dropdown-panel.fi-width-3xl{max-width:var(--container-3xl)!important}:scope .fi-dropdown-panel.fi-width-4xl{max-width:var(--container-4xl)!important}:scope .fi-dropdown-panel.fi-width-5xl{max-width:var(--container-5xl)!important}:scope .fi-dropdown-panel.fi-width-6xl{max-width:var(--container-6xl)!important}:scope .fi-dropdown-panel.fi-width-7xl{max-width:var(--container-7xl)!important}:scope .fi-dropdown-panel.fi-scrollable{overflow-y:auto}.fi-dropdown-list{padding:calc(var(--spacing)*1);gap:1px;display:grid}.fi-dropdown-list>.fi-grid{overflow-x:hidden}.fi-dropdown-list-item{align-items:center;gap:calc(var(--spacing)*2);border-radius:var(--radius-md);width:100%;padding:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;transition-duration:75ms;display:flex;overflow:hidden}@media (hover:hover){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):hover{background-color:var(--gray-50)}}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected{background-color:var(--gray-50)}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-dropdown-list-item.fi-disabled,.fi-dropdown-list-item[disabled]{cursor:default;opacity:.7}:is(.fi-dropdown-list-item.fi-disabled,.fi-dropdown-list-item[disabled]):not([x-tooltip]){pointer-events:none}.fi-dropdown-list-item .fi-icon{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-dropdown-list-item .fi-dropdown-list-item-image{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);background-position:50%;background-size:cover;border-radius:3.40282e38px}.fi-dropdown-list-item>.fi-icon{color:var(--gray-400)}.fi-dropdown-list-item>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-dropdown-list-item>.fi-icon.fi-color{color:var(--color-500)}.fi-dropdown-list-item>.fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}@media (hover:hover){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):hover{background-color:var(--color-50)}}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):focus-visible{background-color:var(--color-50)}@media (hover:hover){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected{background-color:var(--color-50)}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label{color:var(--text)}@media (hover:hover){.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:hover{color:var(--hover-text)}}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:where(.dark,.dark *){color:var(--dark-text)}@media (hover:hover){.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:where(.dark,.dark *):hover{color:var(--dark-hover-text)}}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label.fi-selected{color:var(--hover-text)}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label.fi-selected:where(.dark,.dark *){color:var(--dark-hover-text)}.fi-dropdown-list-item .fi-badge{min-width:1.25rem;padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.fi-dropdown-list-item-label{text-overflow:ellipsis;white-space:nowrap;text-align:start;color:var(--gray-700);flex:1;overflow:hidden}.fi-dropdown-list-item-label:where(.dark,.dark *){color:var(--gray-200)}.fi-dropdown-list-item-badge-placeholder{color:var(--gray-400);align-items:center;display:flex}.fi-dropdown-list-item-badge-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-empty-state{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*12)}.fi-empty-state:not(.fi-empty-state-not-contained){border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-empty-state:not(.fi-empty-state-not-contained):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-empty-state:not(.fi-empty-state-not-contained):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-empty-state .fi-empty-state-content{max-width:var(--container-lg);text-align:center;justify-items:center;margin-inline:auto;display:grid}.fi-empty-state .fi-empty-state-text-ctn{text-align:center;justify-items:center;display:grid}.fi-empty-state .fi-empty-state-icon-bg{margin-bottom:calc(var(--spacing)*4);background-color:var(--gray-100);padding:calc(var(--spacing)*3);border-radius:3.40282e38px}.fi-empty-state .fi-empty-state-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab, red, red)){.fi-empty-state .fi-empty-state-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.fi-empty-state .fi-empty-state-icon-bg.fi-color{background-color:var(--color-100)}.fi-empty-state .fi-empty-state-icon-bg.fi-color:where(.dark,.dark *){background-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){.fi-empty-state .fi-empty-state-icon-bg.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-500)20%,transparent)}}.fi-empty-state .fi-empty-state-icon-bg .fi-icon{color:var(--gray-500)}.fi-empty-state .fi-empty-state-icon-bg .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-empty-state .fi-empty-state-icon-bg .fi-icon.fi-color{color:var(--color-500)}.fi-empty-state .fi-empty-state-icon-bg .fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.fi-empty-state .fi-empty-state-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-empty-state .fi-empty-state-heading:where(.dark,.dark *){color:var(--color-white)}.fi-empty-state .fi-empty-state-description{margin-top:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-empty-state .fi-empty-state-description:where(.dark,.dark *){color:var(--gray-400)}.fi-empty-state .fi-empty-state-footer{margin-top:calc(var(--spacing)*6)}.fi-empty-state.fi-compact{padding-block:calc(var(--spacing)*6)}.fi-empty-state.fi-compact .fi-empty-state-content{margin-inline:calc(var(--spacing)*0);align-items:flex-start;gap:calc(var(--spacing)*4);text-align:start;max-width:none;display:flex}.fi-empty-state.fi-compact .fi-empty-state-icon-bg{margin-bottom:calc(var(--spacing)*0);flex-shrink:0}.fi-empty-state.fi-compact .fi-empty-state-text-ctn{text-align:start;flex:1;justify-items:start}.fi-empty-state.fi-compact .fi-empty-state-description{margin-top:calc(var(--spacing)*1)}.fi-empty-state.fi-compact .fi-empty-state-footer{margin-top:calc(var(--spacing)*4)}.fi-fieldset>legend{padding-inline:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);margin-inline-start:calc(var(--spacing)*-2)}.fi-fieldset>legend:where(.dark,.dark *){color:var(--color-white)}.fi-fieldset>legend .fi-fieldset-label-required-mark{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-600)}.fi-fieldset>legend .fi-fieldset-label-required-mark:where(.dark,.dark *){color:var(--danger-400)}.fi-fieldset.fi-fieldset-label-hidden>legend{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fi-fieldset:not(.fi-fieldset-not-contained){border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);padding:calc(var(--spacing)*6)}.fi-fieldset:not(.fi-fieldset-not-contained):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fieldset:not(.fi-fieldset-not-contained):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fieldset.fi-fieldset-not-contained{padding-top:calc(var(--spacing)*6)}.fi-grid:not(.fi-grid-direction-col){grid-template-columns:var(--cols-default);display:grid}@media (min-width:40rem){.fi-grid:not(.fi-grid-direction-col).sm\\:fi-grid-cols{grid-template-columns:var(--cols-sm)}}@media (min-width:48rem){.fi-grid:not(.fi-grid-direction-col).md\\:fi-grid-cols{grid-template-columns:var(--cols-md)}}@media (min-width:64rem){.fi-grid:not(.fi-grid-direction-col).lg\\:fi-grid-cols{grid-template-columns:var(--cols-lg)}}@media (min-width:80rem){.fi-grid:not(.fi-grid-direction-col).xl\\:fi-grid-cols{grid-template-columns:var(--cols-xl)}}@media (min-width:96rem){.fi-grid:not(.fi-grid-direction-col).\\32 xl\\:fi-grid-cols{grid-template-columns:var(--cols-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid:not(.fi-grid-direction-col).\\@3xs\\:fi-grid-cols{grid-template-columns:var(--cols-c3xs)}}@container (min-width:18rem){.fi-grid:not(.fi-grid-direction-col).\\@2xs\\:fi-grid-cols{grid-template-columns:var(--cols-c2xs)}}@container (min-width:20rem){.fi-grid:not(.fi-grid-direction-col).\\@xs\\:fi-grid-cols{grid-template-columns:var(--cols-cxs)}}@container (min-width:24rem){.fi-grid:not(.fi-grid-direction-col).\\@sm\\:fi-grid-cols{grid-template-columns:var(--cols-csm)}}@container (min-width:28rem){.fi-grid:not(.fi-grid-direction-col).\\@md\\:fi-grid-cols{grid-template-columns:var(--cols-cmd)}}@container (min-width:32rem){.fi-grid:not(.fi-grid-direction-col).\\@lg\\:fi-grid-cols{grid-template-columns:var(--cols-clg)}}@container (min-width:36rem){.fi-grid:not(.fi-grid-direction-col).\\@xl\\:fi-grid-cols{grid-template-columns:var(--cols-cxl)}}@container (min-width:42rem){.fi-grid:not(.fi-grid-direction-col).\\@2xl\\:fi-grid-cols{grid-template-columns:var(--cols-c2xl)}}@container (min-width:48rem){.fi-grid:not(.fi-grid-direction-col).\\@3xl\\:fi-grid-cols{grid-template-columns:var(--cols-c3xl)}}@container (min-width:56rem){.fi-grid:not(.fi-grid-direction-col).\\@4xl\\:fi-grid-cols{grid-template-columns:var(--cols-c4xl)}}@container (min-width:64rem){.fi-grid:not(.fi-grid-direction-col).\\@5xl\\:fi-grid-cols{grid-template-columns:var(--cols-c5xl)}}@container (min-width:72rem){.fi-grid:not(.fi-grid-direction-col).\\@6xl\\:fi-grid-cols{grid-template-columns:var(--cols-c6xl)}}@container (min-width:80rem){.fi-grid:not(.fi-grid-direction-col).\\@7xl\\:fi-grid-cols{grid-template-columns:var(--cols-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid:not(.fi-grid-direction-col).\\!\\@sm\\:fi-grid-cols{grid-template-columns:var(--cols-ncsm)}}@media (min-width:48rem){.fi-grid:not(.fi-grid-direction-col).\\!\\@md\\:fi-grid-cols{grid-template-columns:var(--cols-ncmd)}}@media (min-width:64rem){.fi-grid:not(.fi-grid-direction-col).\\!\\@lg\\:fi-grid-cols{grid-template-columns:var(--cols-nclg)}}@media (min-width:80rem){.fi-grid:not(.fi-grid-direction-col).\\!\\@xl\\:fi-grid-cols{grid-template-columns:var(--cols-ncxl)}}@media (min-width:96rem){.fi-grid:not(.fi-grid-direction-col).\\!\\@2xl\\:fi-grid-cols{grid-template-columns:var(--cols-nc2xl)}}}.fi-grid.fi-grid-direction-col{columns:var(--cols-default)}@media (min-width:40rem){.fi-grid.fi-grid-direction-col.sm\\:fi-grid-cols{columns:var(--cols-sm)}}@media (min-width:48rem){.fi-grid.fi-grid-direction-col.md\\:fi-grid-cols{columns:var(--cols-md)}}@media (min-width:64rem){.fi-grid.fi-grid-direction-col.lg\\:fi-grid-cols{columns:var(--cols-lg)}}@media (min-width:80rem){.fi-grid.fi-grid-direction-col.xl\\:fi-grid-cols{columns:var(--cols-xl)}}@media (min-width:96rem){.fi-grid.fi-grid-direction-col.\\32 xl\\:fi-grid-cols{columns:var(--cols-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid.fi-grid-direction-col.\\@3xs\\:fi-grid-cols{columns:var(--cols-c3xs)}}@container (min-width:18rem){.fi-grid.fi-grid-direction-col.\\@2xs\\:fi-grid-cols{columns:var(--cols-c2xs)}}@container (min-width:20rem){.fi-grid.fi-grid-direction-col.\\@xs\\:fi-grid-cols{columns:var(--cols-cxs)}}@container (min-width:24rem){.fi-grid.fi-grid-direction-col.\\@sm\\:fi-grid-cols{columns:var(--cols-csm)}}@container (min-width:28rem){.fi-grid.fi-grid-direction-col.\\@md\\:fi-grid-cols{columns:var(--cols-cmd)}}@container (min-width:32rem){.fi-grid.fi-grid-direction-col.\\@lg\\:fi-grid-cols{columns:var(--cols-clg)}}@container (min-width:36rem){.fi-grid.fi-grid-direction-col.\\@xl\\:fi-grid-cols{columns:var(--cols-cxl)}}@container (min-width:42rem){.fi-grid.fi-grid-direction-col.\\@2xl\\:fi-grid-cols{columns:var(--cols-c2xl)}}@container (min-width:48rem){.fi-grid.fi-grid-direction-col.\\@3xl\\:fi-grid-cols{columns:var(--cols-c3xl)}}@container (min-width:56rem){.fi-grid.fi-grid-direction-col.\\@4xl\\:fi-grid-cols{columns:var(--cols-c4xl)}}@container (min-width:64rem){.fi-grid.fi-grid-direction-col.\\@5xl\\:fi-grid-cols{columns:var(--cols-c5xl)}}@container (min-width:72rem){.fi-grid.fi-grid-direction-col.\\@6xl\\:fi-grid-cols{columns:var(--cols-c6xl)}}@container (min-width:80rem){.fi-grid.fi-grid-direction-col.\\@7xl\\:fi-grid-cols{columns:var(--cols-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid.fi-grid-direction-col.\\!\\@sm\\:fi-grid-cols{columns:var(--cols-ncsm)}}@media (min-width:48rem){.fi-grid.fi-grid-direction-col.\\!\\@md\\:fi-grid-cols{columns:var(--cols-ncmd)}}@media (min-width:64rem){.fi-grid.fi-grid-direction-col.\\!\\@lg\\:fi-grid-cols{columns:var(--cols-nclg)}}@media (min-width:80rem){.fi-grid.fi-grid-direction-col.\\!\\@xl\\:fi-grid-cols{columns:var(--cols-ncxl)}}@media (min-width:96rem){.fi-grid.fi-grid-direction-col.\\!\\@2xl\\:fi-grid-cols{columns:var(--cols-nc2xl)}}}@supports (container-type:inline-size){.fi-grid-ctn{container-type:inline-size}}.fi-grid-col{grid-column:var(--col-span-default)}@media (min-width:40rem){.fi-grid-col.sm\\:fi-grid-col-span{grid-column:var(--col-span-sm)}}@media (min-width:48rem){.fi-grid-col.md\\:fi-grid-col-span{grid-column:var(--col-span-md)}}@media (min-width:64rem){.fi-grid-col.lg\\:fi-grid-col-span{grid-column:var(--col-span-lg)}}@media (min-width:80rem){.fi-grid-col.xl\\:fi-grid-col-span{grid-column:var(--col-span-xl)}}@media (min-width:96rem){.fi-grid-col.\\32 xl\\:fi-grid-col-span{grid-column:var(--col-span-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid-col.\\@3xs\\:fi-grid-col-span{grid-column:var(--col-span-c3xs)}}@container (min-width:18rem){.fi-grid-col.\\@2xs\\:fi-grid-col-span{grid-column:var(--col-span-c2xs)}}@container (min-width:20rem){.fi-grid-col.\\@xs\\:fi-grid-col-span{grid-column:var(--col-span-cxs)}}@container (min-width:24rem){.fi-grid-col.\\@sm\\:fi-grid-col-span{grid-column:var(--col-span-csm)}}@container (min-width:28rem){.fi-grid-col.\\@md\\:fi-grid-col-span{grid-column:var(--col-span-cmd)}}@container (min-width:32rem){.fi-grid-col.\\@lg\\:fi-grid-col-span{grid-column:var(--col-span-clg)}}@container (min-width:36rem){.fi-grid-col.\\@xl\\:fi-grid-col-span{grid-column:var(--col-span-cxl)}}@container (min-width:42rem){.fi-grid-col.\\@2xl\\:fi-grid-col-span{grid-column:var(--col-span-c2xl)}}@container (min-width:48rem){.fi-grid-col.\\@3xl\\:fi-grid-col-span{grid-column:var(--col-span-c3xl)}}@container (min-width:56rem){.fi-grid-col.\\@4xl\\:fi-grid-col-span{grid-column:var(--col-span-c4xl)}}@container (min-width:64rem){.fi-grid-col.\\@5xl\\:fi-grid-col-span{grid-column:var(--col-span-c5xl)}}@container (min-width:72rem){.fi-grid-col.\\@6xl\\:fi-grid-col-span{grid-column:var(--col-span-c6xl)}}@container (min-width:80rem){.fi-grid-col.\\@7xl\\:fi-grid-col-span{grid-column:var(--col-span-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid-col.\\!\\@sm\\:fi-grid-col-span{grid-column:var(--col-span-ncsm)}}@media (min-width:48rem){.fi-grid-col.\\!\\@md\\:fi-grid-col-span{grid-column:var(--col-span-ncmd)}}@media (min-width:64rem){.fi-grid-col.\\!\\@lg\\:fi-grid-col-span{grid-column:var(--col-span-nclg)}}@media (min-width:80rem){.fi-grid-col.\\!\\@xl\\:fi-grid-col-span{grid-column:var(--col-span-ncxl)}}@media (min-width:96rem){.fi-grid-col.\\!\\@2xl\\:fi-grid-col-span{grid-column:var(--col-span-nc2xl)}}}.fi-grid-col.fi-grid-col-start{grid-column-start:var(--col-start-default)}@media (min-width:40rem){.fi-grid-col.sm\\:fi-grid-col-start{grid-column-start:var(--col-start-sm)}}@media (min-width:48rem){.fi-grid-col.md\\:fi-grid-col-start{grid-column-start:var(--col-start-md)}}@media (min-width:64rem){.fi-grid-col.lg\\:fi-grid-col-start{grid-column-start:var(--col-start-lg)}}@media (min-width:80rem){.fi-grid-col.xl\\:fi-grid-col-start{grid-column-start:var(--col-start-xl)}}@media (min-width:96rem){.fi-grid-col.\\32 xl\\:fi-grid-col-start{grid-column-start:var(--col-start-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid-col.\\@3xs\\:fi-grid-col-start{grid-column-start:var(--col-start-c3xs)}}@container (min-width:18rem){.fi-grid-col.\\@2xs\\:fi-grid-col-start{grid-column-start:var(--col-start-c2xs)}}@container (min-width:20rem){.fi-grid-col.\\@xs\\:fi-grid-col-start{grid-column-start:var(--col-start-cxs)}}@container (min-width:24rem){.fi-grid-col.\\@sm\\:fi-grid-col-start{grid-column-start:var(--col-start-csm)}}@container (min-width:28rem){.fi-grid-col.\\@md\\:fi-grid-col-start{grid-column-start:var(--col-start-cmd)}}@container (min-width:32rem){.fi-grid-col.\\@lg\\:fi-grid-col-start{grid-column-start:var(--col-start-clg)}}@container (min-width:36rem){.fi-grid-col.\\@xl\\:fi-grid-col-start{grid-column-start:var(--col-start-cxl)}}@container (min-width:42rem){.fi-grid-col.\\@2xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c2xl)}}@container (min-width:48rem){.fi-grid-col.\\@3xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c3xl)}}@container (min-width:56rem){.fi-grid-col.\\@4xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c4xl)}}@container (min-width:64rem){.fi-grid-col.\\@5xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c5xl)}}@container (min-width:72rem){.fi-grid-col.\\@6xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c6xl)}}@container (min-width:80rem){.fi-grid-col.\\@7xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid-col.\\!\\@sm\\:fi-grid-col-start{grid-column-start:var(--col-start-ncsm)}}@media (min-width:48rem){.fi-grid-col.\\!\\@md\\:fi-grid-col-start{grid-column-start:var(--col-start-ncmd)}}@media (min-width:64rem){.fi-grid-col.\\!\\@lg\\:fi-grid-col-start{grid-column-start:var(--col-start-nclg)}}@media (min-width:80rem){.fi-grid-col.\\!\\@xl\\:fi-grid-col-start{grid-column-start:var(--col-start-ncxl)}}@media (min-width:96rem){.fi-grid-col.\\!\\@2xl\\:fi-grid-col-start{grid-column-start:var(--col-start-nc2xl)}}}.fi-grid-col.fi-grid-col-order{order:var(--col-order-default)}@media (min-width:40rem){.fi-grid-col.sm\\:fi-grid-col-order{order:var(--col-order-sm)}}@media (min-width:48rem){.fi-grid-col.md\\:fi-grid-col-order{order:var(--col-order-md)}}@media (min-width:64rem){.fi-grid-col.lg\\:fi-grid-col-order{order:var(--col-order-lg)}}@media (min-width:80rem){.fi-grid-col.xl\\:fi-grid-col-order{order:var(--col-order-xl)}}@media (min-width:96rem){.fi-grid-col.\\32 xl\\:fi-grid-col-order{order:var(--col-order-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid-col.\\@3xs\\:fi-grid-col-order{order:var(--col-order-c3xs)}}@container (min-width:18rem){.fi-grid-col.\\@2xs\\:fi-grid-col-order{order:var(--col-order-c2xs)}}@container (min-width:20rem){.fi-grid-col.\\@xs\\:fi-grid-col-order{order:var(--col-order-cxs)}}@container (min-width:24rem){.fi-grid-col.\\@sm\\:fi-grid-col-order{order:var(--col-order-csm)}}@container (min-width:28rem){.fi-grid-col.\\@md\\:fi-grid-col-order{order:var(--col-order-cmd)}}@container (min-width:32rem){.fi-grid-col.\\@lg\\:fi-grid-col-order{order:var(--col-order-clg)}}@container (min-width:36rem){.fi-grid-col.\\@xl\\:fi-grid-col-order{order:var(--col-order-cxl)}}@container (min-width:42rem){.fi-grid-col.\\@2xl\\:fi-grid-col-order{order:var(--col-order-c2xl)}}@container (min-width:48rem){.fi-grid-col.\\@3xl\\:fi-grid-col-order{order:var(--col-order-c3xl)}}@container (min-width:56rem){.fi-grid-col.\\@4xl\\:fi-grid-col-order{order:var(--col-order-c4xl)}}@container (min-width:64rem){.fi-grid-col.\\@5xl\\:fi-grid-col-order{order:var(--col-order-c5xl)}}@container (min-width:72rem){.fi-grid-col.\\@6xl\\:fi-grid-col-order{order:var(--col-order-c6xl)}}@container (min-width:80rem){.fi-grid-col.\\@7xl\\:fi-grid-col-order{order:var(--col-order-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid-col.\\!\\@sm\\:fi-grid-col-order{order:var(--col-order-ncsm)}}@media (min-width:48rem){.fi-grid-col.\\!\\@md\\:fi-grid-col-order{order:var(--col-order-ncmd)}}@media (min-width:64rem){.fi-grid-col.\\!\\@lg\\:fi-grid-col-order{order:var(--col-order-nclg)}}@media (min-width:80rem){.fi-grid-col.\\!\\@xl\\:fi-grid-col-order{order:var(--col-order-ncxl)}}@media (min-width:96rem){.fi-grid-col.\\!\\@2xl\\:fi-grid-col-order{order:var(--col-order-nc2xl)}}}.fi-grid-col.fi-hidden{display:none}.fi-icon{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.fi-icon.fi-size-xs{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.fi-icon.fi-size-sm{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.fi-icon.fi-size-md{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.fi-icon.fi-size-lg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.fi-icon.fi-size-xl{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.fi-icon.fi-size-2xl{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.fi-icon>svg{height:inherit;width:inherit}.fi-icon-btn{margin:calc(var(--spacing)*-2);width:calc(var(--spacing)*9);height:calc(var(--spacing)*9);border-radius:var(--radius-lg);color:var(--gray-500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;justify-content:center;align-items:center;transition-duration:75ms;display:flex;position:relative}.fi-icon-btn:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):hover{color:var(--gray-600)}}:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}@media (hover:hover){:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{color:var(--gray-400)}}:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500)}.fi-icon-btn.fi-disabled:not(.fi-force-enabled),.fi-icon-btn[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-icon-btn.fi-disabled:not(.fi-force-enabled),.fi-icon-btn[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-icon-btn.fi-size-xs{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-1.5)}.fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-1)}.fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-.5)}.fi-icon-btn.fi-size-sm{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-2)}.fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-1.5)}.fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-1)}.fi-icon-btn.fi-size-md:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-2.5)}.fi-icon-btn.fi-size-md:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-1.5)}.fi-icon-btn.fi-size-lg{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-3)}.fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-2.5)}.fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-2)}.fi-icon-btn.fi-size-xl{width:calc(var(--spacing)*11);height:calc(var(--spacing)*11)}.fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-3.5)}.fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-3)}.fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-2.5)}.fi-icon-btn.fi-color{color:var(--text)}.fi-icon-btn.fi-color:where(.dark,.dark *){color:var(--dark-text)}@media (hover:hover){:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):hover{color:var(--hover-text)}}:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-600)}@media (hover:hover){:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{color:var(--dark-hover-text)}}:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-500)}.fi-icon-btn>.fi-icon-btn-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*1);z-index:1;--tw-translate-x:calc(calc(1/2*100%)*-1);--tw-translate-y:calc(calc(1/2*100%)*-1);width:max-content;translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-md);background-color:var(--color-white);display:flex;position:absolute}.fi-icon-btn>.fi-icon-btn-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1/2*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-icon-btn>.fi-icon-btn-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}@media (min-width:40rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-sm){display:none}}@media (min-width:48rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-md){display:none}}@media (min-width:64rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-lg){display:none}}@media (min-width:80rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-xl){display:none}}@media (min-width:96rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-2xl){display:none}}input[type=checkbox].fi-checkbox-input{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;--tw-border-style:none;background-color:var(--color-white);vertical-align:middle;color:var(--primary-600);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-style:none;border-radius:.25rem}input[type=checkbox].fi-checkbox-input:checked{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input[type=checkbox].fi-checkbox-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}input[type=checkbox].fi-checkbox-input:checked:focus{--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input:disabled{pointer-events:none;background-color:var(--gray-50);color:var(--gray-50)}input[type=checkbox].fi-checkbox-input:disabled:checked{background-color:var(--gray-400);color:var(--gray-400)}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){color:var(--primary-500);--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked{background-color:var(--primary-500)}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):focus{--tw-ring-color:var(--primary-500)}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled{--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled:checked{background-color:var(--gray-600)}input[type=checkbox].fi-checkbox-input:checked{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E\")}input[type=checkbox].fi-checkbox-input:indeterminate{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input[type=checkbox].fi-checkbox-input:indeterminate:where(.dark,.dark *){background-color:var(--primary-500)}input[type=checkbox].fi-checkbox-input:indeterminate{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.5 6.75a1.25 1.25 0 0 0 0 2.5h7a1.25 1.25 0 0 0 0-2.5h-7z'/%3E%3C/svg%3E\")}input[type=checkbox].fi-checkbox-input:indeterminate:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:indeterminate:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}input[type=checkbox].fi-checkbox-input:indeterminate:disabled{background-color:var(--gray-400)}input[type=checkbox].fi-checkbox-input:indeterminate:disabled:where(.dark,.dark *){background-color:var(--gray-600)}input[type=checkbox].fi-checkbox-input.fi-invalid{color:var(--danger-600);--tw-ring-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:checked{background-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:focus{--tw-ring-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:checked:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *){color:var(--danger-500);--tw-ring-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked{background-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):focus{--tw-ring-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate{background-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:where(.dark,.dark *){background-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}input.fi-input{appearance:none;--tw-border-style:none;width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;background-color:#0000;border-style:none;transition-duration:75ms;display:block}input.fi-input::placeholder{color:var(--gray-400)}input.fi-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}input.fi-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}input.fi-input:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}input.fi-input:where(.dark,.dark *){color:var(--color-white)}input.fi-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}input.fi-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}input.fi-input:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}@supports (-webkit-touch-callout:none){input.fi-input{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}input.fi-input.fi-input-has-inline-prefix{padding-inline-start:calc(var(--spacing)*0)}input.fi-input.fi-input-has-inline-suffix{padding-inline-end:calc(var(--spacing)*0)}input.fi-input.fi-align-center{text-align:center}input.fi-input.fi-align-end{text-align:end}input.fi-input.fi-align-left{text-align:left}input.fi-input.fi-align-right{text-align:end}input.fi-input.fi-align-justify,input.fi-input.fi-align-between{text-align:justify}input[type=date].fi-input,input[type=datetime-local].fi-input,input[type=time].fi-input{background-color:#ffffff03}@supports (color:color-mix(in lab, red, red)){input[type=date].fi-input,input[type=datetime-local].fi-input,input[type=time].fi-input{background-color:color-mix(in oklab,var(--color-white)1%,transparent)}}input[type=range].fi-input{appearance:auto;width:calc(100% - 1.5rem);margin-inline:auto}input[type=text].fi-one-time-code-input{inset-block:calc(var(--spacing)*0);right:calc(var(--spacing)*-8);left:calc(var(--spacing)*0);--tw-border-style:none;padding-inline:calc(var(--spacing)*3);font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--tw-tracking:1.72rem;letter-spacing:1.72rem;color:var(--gray-950);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;background-color:#0000;border-style:none;transition-duration:75ms;display:block;position:absolute}input[type=text].fi-one-time-code-input::placeholder{color:var(--gray-400)}input[type=text].fi-one-time-code-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}input[type=text].fi-one-time-code-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}input[type=text].fi-one-time-code-input:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}input[type=text].fi-one-time-code-input:where(.dark,.dark *){color:var(--color-white)}input[type=text].fi-one-time-code-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}input[type=text].fi-one-time-code-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}input[type=text].fi-one-time-code-input:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}input[type=text].fi-one-time-code-input.fi-valid{caret-color:#0000}.fi-one-time-code-input-ctn{height:calc(var(--spacing)*12);position:relative}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{height:100%;width:calc(var(--spacing)*8);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950);display:inline-block}@supports (color:color-mix(in lab, red, red)){.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{background-color:var(--color-white)}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field.fi-active{border-style:var(--tw-border-style);border-width:2px;border-color:var(--primary-600)}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field.fi-active:where(.dark,.dark *){border-color:var(--primary-500)}input[type=radio].fi-radio-input{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;--tw-border-style:none;background-color:var(--color-white);color:var(--primary-600);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-style:none;border-radius:3.40282e38px}input[type=radio].fi-radio-input:checked{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input[type=radio].fi-radio-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}input[type=radio].fi-radio-input:checked:focus{--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}input[type=radio].fi-radio-input:disabled{background-color:var(--gray-50);color:var(--gray-50)}input[type=radio].fi-radio-input:disabled:checked{background-color:var(--gray-400);color:var(--gray-400)}input[type=radio].fi-radio-input:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *){color:var(--primary-500);--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *):checked{background-color:var(--primary-500)}input[type=radio].fi-radio-input:where(.dark,.dark *):focus{--tw-ring-color:var(--primary-500)}input[type=radio].fi-radio-input:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *):disabled{--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *):disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *):disabled:checked{background-color:var(--gray-600)}input[type=radio].fi-radio-input:checked{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E\")}input[type=radio].fi-radio-input.fi-invalid{color:var(--danger-600);--tw-ring-color:var(--danger-600)}input[type=radio].fi-radio-input.fi-invalid:checked{background-color:var(--danger-600)}input[type=radio].fi-radio-input.fi-invalid:focus{--tw-ring-color:var(--danger-600)}input[type=radio].fi-radio-input.fi-invalid:checked:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input.fi-invalid:checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *){color:var(--danger-500);--tw-ring-color:var(--danger-500)}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked{background-color:var(--danger-500)}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):focus{--tw-ring-color:var(--danger-500)}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}select.fi-select-input{appearance:none;--tw-border-style:none;width:100%;padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;background-color:#0000;border-style:none;padding-inline-start:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*8);transition-duration:75ms;display:block}select.fi-select-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}select.fi-select-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}select.fi-select-input:where(.dark,.dark *){color:var(--color-white)}select.fi-select-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}select.fi-select-input optgroup{background-color:var(--color-white)}select.fi-select-input optgroup:where(.dark,.dark *){background-color:var(--gray-900)}select.fi-select-input option{background-color:var(--color-white)}select.fi-select-input option:where(.dark,.dark *){background-color:var(--gray-900)}@supports (-webkit-touch-callout:none){select.fi-select-input{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}select.fi-select-input{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em}select.fi-select-input:where(:dir(rtl),[dir=rtl],[dir=rtl] *){background-position:.5rem}select.fi-select-input.fi-select-input-has-inline-prefix{padding-inline-start:calc(var(--spacing)*0)}.fi-select-input .fi-select-input-ctn{position:relative}.fi-select-input div[x-ref=select]{min-height:calc(var(--spacing)*9)}.fi-select-input .fi-select-input-btn{min-height:calc(var(--spacing)*9);border-radius:var(--radius-lg);width:100%;padding-block:calc(var(--spacing)*1.5);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);padding-inline-start:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*8);display:flex}.fi-select-input .fi-select-input-btn:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.fi-select-input .fi-select-input-btn:where(.dark,.dark *){color:var(--color-white)}.fi-select-input .fi-select-input-btn{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em}.fi-select-input .fi-select-input-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){background-position:.5rem}.fi-select-input .fi-select-input-value-ctn{text-wrap:wrap;word-break:break-word;align-items:center;width:100%;display:flex}.fi-select-input .fi-select-input-value-badges-ctn{gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.fi-select-input .fi-select-input-value-label{flex:1}.fi-select-input .fi-select-input-value-remove-btn{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--gray-500);inset-inline-end:calc(var(--spacing)*8);position:absolute;top:50%}@media (hover:hover){.fi-select-input .fi-select-input-value-remove-btn:hover{color:var(--gray-600)}}.fi-select-input .fi-select-input-value-remove-btn:focus-visible{color:var(--gray-600);--tw-outline-style:none;outline-style:none}@media (hover:hover){.fi-select-input .fi-select-input-value-remove-btn:where(.dark,.dark *):hover{color:var(--gray-300)}}.fi-select-input .fi-select-input-value-remove-btn:where(.dark,.dark *):focus-visible{color:var(--gray-300)}.fi-select-input .fi-select-input-ctn-clearable .fi-select-input-btn{padding-inline-end:calc(var(--spacing)*14)}.fi-select-input .fi-dropdown-panel{max-height:calc(var(--spacing)*60);max-width:100%!important}:where(.fi-select-input .fi-select-input-options-ctn>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-100)}:where(.fi-select-input .fi-select-input-options-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-select-input .fi-select-input-options-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.fi-select-input .fi-select-input-option-group>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-100)}:where(.fi-select-input .fi-select-input-option-group:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-select-input .fi-select-input-option-group:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-select-input .fi-select-input-option-group .fi-dropdown-header{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-select-input .fi-select-input-option-group .fi-dropdown-header:where(.dark,.dark *){color:var(--gray-400)}.fi-select-input .fi-select-input-search-ctn{top:calc(var(--spacing)*0);z-index:10;background-color:var(--color-white);position:sticky}.fi-select-input .fi-select-input-search-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.fi-select-input .fi-select-input-option{text-wrap:wrap;word-break:break-word;min-width:1px}.fi-select-input .fi-select-input-placeholder{color:var(--gray-400)}.fi-select-input .fi-select-input-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-select-input .fi-disabled{cursor:not-allowed;opacity:.7}.fi-select-input .fi-disabled .fi-select-input-placeholder{color:var(--gray-400)}.fi-select-input .fi-disabled .fi-select-input-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-select-input .fi-select-input-message{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-select-input .fi-select-input-message:where(.dark,.dark *){color:var(--gray-400)}.fi-select-input .fi-select-input-ctn.fi-select-input-ctn-option-labels-not-wrapped .fi-select-input-value-ctn>span{text-overflow:ellipsis;white-space:nowrap;text-wrap:nowrap;overflow-wrap:normal;word-break:normal;overflow:hidden}.fi-select-input .fi-select-input-ctn.fi-select-input-ctn-option-labels-not-wrapped .fi-select-input-option>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-input-wrp{border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms;display:flex}.fi-input-wrp:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-input-wrp:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):where(.dark,.dark *):focus-within{--tw-ring-color:var(--primary-500)}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:focus-within{--tw-ring-color:var(--danger-600)}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:where(.dark,.dark *):focus-within{--tw-ring-color:var(--danger-500)}.fi-input-wrp.fi-disabled{background-color:var(--gray-50)}.fi-input-wrp.fi-disabled:where(.dark,.dark *){background-color:#0000}.fi-input-wrp.fi-disabled:not(.fi-invalid):where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp.fi-disabled:not(.fi-invalid):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-input-wrp.fi-invalid{--tw-ring-color:var(--danger-600)}.fi-input-wrp.fi-invalid:where(.dark,.dark *){--tw-ring-color:var(--danger-500)}.fi-input-wrp .fi-input-wrp-prefix{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline-start:calc(var(--spacing)*3);display:none}.fi-input-wrp .fi-input-wrp-prefix.fi-input-wrp-prefix-has-content{display:flex}.fi-input-wrp .fi-input-wrp-prefix.fi-inline{padding-inline-end:calc(var(--spacing)*2)}.fi-input-wrp .fi-input-wrp-prefix.fi-inline.fi-input-wrp-prefix-has-label{padding-inline-end:calc(var(--spacing)*1)}.fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-color:var(--gray-200);padding-inline-start:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*3)}.fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-input-wrp .fi-input-wrp-content-ctn,.fi-input-wrp:not(:has(.fi-input-wrp-content-ctn))>*{min-width:calc(var(--spacing)*0);flex:1}:is(.fi-input-wrp .fi-input-wrp-content-ctn,.fi-input-wrp:not(:has(.fi-input-wrp-content-ctn))>*).fi-input-wrp-content-ctn-ps{padding-inline-start:calc(var(--spacing)*3)}.fi-input-wrp .fi-input-wrp-suffix{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*3);display:flex}.fi-input-wrp .fi-input-wrp-suffix.fi-inline{padding-inline-start:calc(var(--spacing)*2)}.fi-input-wrp .fi-input-wrp-suffix.fi-inline.fi-input-wrp-suffix-has-label{padding-inline-start:calc(var(--spacing)*1)}.fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-color:var(--gray-200);padding-inline-start:calc(var(--spacing)*3)}.fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-input-wrp .fi-input-wrp-actions{align-items:center;gap:calc(var(--spacing)*3);display:flex}.fi-input-wrp .fi-input-wrp-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:var(--gray-500)}.fi-input-wrp .fi-input-wrp-label:where(.dark,.dark *),:is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon{color:var(--gray-400)}:is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}:is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon.fi-color{color:var(--color-500)}.fi-link{justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);--tw-outline-style:none;outline-style:none;display:inline-flex;position:relative}.fi-link:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){:is(.fi-link.fi-force-enabled,.fi-link:not(.fi-disabled):not([disabled])):hover{text-decoration-line:underline}}:is(.fi-link.fi-force-enabled,.fi-link:not(.fi-disabled):not([disabled])):focus-visible{text-decoration-line:underline}.fi-link.fi-disabled:not(.fi-force-enabled),.fi-link[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-link.fi-disabled:not(.fi-force-enabled),.fi-link[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-link.fi-size-xs{gap:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-link.fi-size-sm{gap:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-link.fi-size-md,.fi-link.fi-size-lg,.fi-link.fi-size-xl{gap:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-link.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-link.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-link.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-link.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-link.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-link.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-link.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-link.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-link.fi-color{color:var(--text)}.fi-link.fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-link:not(.fi-color)>.fi-icon{color:var(--gray-400)}.fi-link:not(.fi-color)>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-link .fi-link-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*0);z-index:1;--tw-translate-x:calc(calc(1/4*100%)*-1);--tw-translate-y:calc(calc(3/4*100%)*-1);width:max-content;translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-md);background-color:var(--color-white);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);display:flex;position:absolute}@media (hover:hover){.fi-link .fi-link-badge-ctn:hover{text-decoration-line:none}}.fi-link .fi-link-badge-ctn:focus-visible{text-decoration-line:none}.fi-link .fi-link-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1/4*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-link .fi-link-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}p>.fi-link,span>.fi-link{vertical-align:middle;text-align:inherit;padding-bottom:2px}.fi-loading-indicator{animation:var(--animate-spin)}.fi-loading-section{animation:var(--animate-pulse)}:is(.fi-modal.fi-modal-slide-over,.fi-modal.fi-width-screen)>.fi-modal-window-ctn>.fi-modal-window{height:100dvh}:is(.fi-modal.fi-modal-slide-over,.fi-modal.fi-width-screen)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content{flex:1}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window{margin-inline-start:auto;overflow-y:auto}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-end,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-start{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header{column-gap:calc(var(--spacing)*3)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg{margin-block:calc(var(--spacing)*-2);padding:calc(var(--spacing)*2);margin-inline-start:calc(var(--spacing)*-2)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{inset-inline-end:calc(var(--spacing)*6);top:calc(var(--spacing)*6)}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen):not(.fi-modal-has-sticky-header):not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn{overflow-y:auto}:is(.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-header,.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window{max-height:calc(100dvh - 2rem);overflow-y:auto}.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0}.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-end,.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-start{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:1}.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{inset-inline-end:calc(var(--spacing)*4);top:calc(var(--spacing)*4)}.fi-modal.fi-align-start:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window-has-icon .fi-modal-content,.fi-modal.fi-align-start:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window-has-icon .fi-modal-footer:not(.fi-align-center){padding-inline-start:5.25rem;padding-inline-end:calc(var(--spacing)*6)}.fi-modal:not(.fi-align-start)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content,.fi-modal:not(.fi-align-start)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.fi-modal>.fi-modal-close-overlay{inset:calc(var(--spacing)*0);z-index:40;background-color:var(--gray-950);position:fixed}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-close-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.fi-modal>.fi-modal-close-overlay{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.fi-modal>.fi-modal-close-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-close-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}.fi-modal.fi-modal-open:has(~.fi-modal.fi-modal-open)>.fi-modal-close-overlay{opacity:0}.fi-modal.fi-modal-open~.fi-modal.fi-modal-open>.fi-modal-close-overlay,.fi-modal.fi-modal-open~.fi-modal.fi-modal-open>.fi-modal-window-ctn{z-index:50}.fi-modal>.fi-modal-window-ctn{inset:calc(var(--spacing)*0);z-index:40;grid-template-rows:1fr auto 1fr;justify-items:center;min-height:100%;display:grid;position:fixed}@media (min-width:40rem){.fi-modal>.fi-modal-window-ctn{grid-template-rows:1fr auto 3fr}}.fi-modal>.fi-modal-window-ctn.fi-clickable{cursor:pointer}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen)>.fi-modal-window-ctn{padding:calc(var(--spacing)*4)}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen)>.fi-modal-window-ctn .fi-modal-window{border-radius:var(--radius-xl);margin-inline:auto}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window{pointer-events:auto;cursor:default;background-color:var(--color-white);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);flex-direction:column;grid-row-start:2;display:flex;position:relative}.fi-modal>.fi-modal-window-ctn>.fi-modal-window:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-window-ctn>.fi-modal-window:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header{padding-inline:calc(var(--spacing)*6);padding-top:calc(var(--spacing)*6);display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header.fi-vertical-align-center{align-items:center}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-heading:where(.dark,.dark *){color:var(--color-white)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-description{margin-top:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-description:where(.dark,.dark *){color:var(--gray-400)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content{row-gap:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*6);flex-direction:column;display:flex}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-left) .fi-modal-header{column-gap:calc(var(--spacing)*5)}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-left) .fi-modal-icon-bg{padding:calc(var(--spacing)*2)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-header{text-align:center;flex-direction:column}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-icon-ctn{margin-bottom:calc(var(--spacing)*5);justify-content:center;align-items:center;display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-icon-bg{padding:calc(var(--spacing)*3)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-hidden{display:none}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-xs{max-width:var(--container-xs)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-sm{max-width:var(--container-sm)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-md{max-width:var(--container-md)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-lg{max-width:var(--container-lg)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-xl{max-width:var(--container-xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-2xl{max-width:var(--container-2xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-3xl{max-width:var(--container-3xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-4xl{max-width:var(--container-4xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-5xl{max-width:var(--container-5xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-6xl{max-width:var(--container-6xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-7xl{max-width:var(--container-7xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-full{max-width:100%}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-min{max-width:min-content}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-max{max-width:max-content}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-fit{max-width:fit-content}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-prose{max-width:65ch}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-sm{max-width:var(--breakpoint-sm)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-md{max-width:var(--breakpoint-md)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-lg{max-width:var(--breakpoint-lg)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-xl{max-width:var(--breakpoint-xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-2xl{max-width:var(--breakpoint-2xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen{inset:calc(var(--spacing)*0);position:fixed}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave{--tw-duration:.3s;transition-duration:.3s}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-center:not(.fi-modal-window-has-icon) .fi-modal-heading{margin-inline-start:calc(var(--spacing)*6)}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn:not(.fi-modal-window-has-icon),.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-left) .fi-modal-heading{margin-inline-end:calc(var(--spacing)*6)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{position:absolute}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{width:100%}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer .fi-modal-footer-actions{gap:calc(var(--spacing)*3)}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-left) .fi-modal-footer-actions{flex-wrap:wrap;align-items:center;display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center{padding-inline:calc(var(--spacing)*6)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{flex-direction:column-reverse;display:flex}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-end,.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-right) .fi-modal-footer-actions{flex-flow:row-reverse wrap;align-items:center;display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg{background-color:var(--gray-100);border-radius:3.40282e38px}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg>.fi-icon{color:var(--gray-500)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg>.fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color{background-color:var(--color-100)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color:where(.dark,.dark *){background-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-500)20%,transparent)}}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color>.fi-icon{color:var(--color-600)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color>.fi-icon:where(.dark,.dark *){color:var(--color-400)}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header{top:calc(var(--spacing)*0);z-index:10;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--color-white);padding-bottom:calc(var(--spacing)*6);position:sticky}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){background-color:var(--gray-900)}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content,.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{bottom:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);background-color:var(--color-white);padding-block:calc(var(--spacing)*5);position:sticky}.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){background-color:var(--gray-900)}.fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-content) .fi-modal-footer{margin-top:calc(var(--spacing)*6)}.fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-content):not(.fi-modal-window-has-footer) .fi-modal-header,.fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-bottom:calc(var(--spacing)*6)}.fi-modal:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-icon) .fi-modal-content,.fi-modal:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-icon) .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{margin-top:auto}@supports (container-type:inline-size){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center{container-type:inline-size}@container (min-width:24rem){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}}}:scope .fi-modal-trigger{display:flex}.fi-pagination{align-items:center;column-gap:calc(var(--spacing)*3);grid-template-columns:1fr auto 1fr;display:grid}.fi-pagination:empty{display:none}.fi-pagination .fi-pagination-previous-btn{justify-self:flex-start}.fi-pagination .fi-pagination-overview{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);display:none}.fi-pagination .fi-pagination-overview:where(.dark,.dark *){color:var(--gray-200)}.fi-pagination .fi-pagination-records-per-page-select-ctn{grid-column-start:2;justify-self:center}.fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:none}.fi-pagination .fi-pagination-next-btn{grid-column-start:3;justify-self:flex-end}.fi-pagination .fi-pagination-items{border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);justify-self:flex-end;display:none}.fi-pagination .fi-pagination-items:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-items:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-pagination .fi-pagination-items:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-items:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-pagination .fi-pagination-item{border-inline-style:var(--tw-border-style);border-inline-width:.5px;border-color:var(--gray-200)}.fi-pagination .fi-pagination-item:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.fi-pagination .fi-pagination-item:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.fi-pagination .fi-pagination-item:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-item:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn{background-color:var(--gray-50)}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-label{color:var(--primary-700)}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-label:where(.dark,.dark *){color:var(--primary-400)}.fi-pagination .fi-pagination-item:first-of-type .fi-pagination-item-btn{border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.fi-pagination .fi-pagination-item:last-of-type .fi-pagination-item-btn{border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.fi-pagination .fi-pagination-item.fi-disabled .fi-pagination-item-label{color:var(--gray-500)}.fi-pagination .fi-pagination-item.fi-disabled .fi-pagination-item-label:where(.dark,.dark *){color:var(--gray-400)}.fi-pagination .fi-pagination-item-btn{padding:calc(var(--spacing)*2);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;transition-duration:75ms;display:flex;position:relative;overflow:hidden}@media (hover:hover){.fi-pagination .fi-pagination-item-btn:enabled:hover{background-color:var(--gray-50)}}.fi-pagination .fi-pagination-item-btn:enabled:focus-visible{z-index:10;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}@media (hover:hover){.fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500)}.fi-pagination .fi-pagination-item-btn:hover .fi-icon{color:var(--gray-500)}.fi-pagination .fi-pagination-item-btn:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-pagination .fi-pagination-item-btn .fi-icon{color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-pagination .fi-pagination-item-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-pagination .fi-pagination-item-btn .fi-pagination-item-label{padding-inline:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-700)}.fi-pagination .fi-pagination-item-btn .fi-pagination-item-label:where(.dark,.dark *){color:var(--gray-200)}@supports (container-type:inline-size){.fi-pagination{container-type:inline-size}@container (min-width:28rem){.fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:inline}.fi-pagination .fi-pagination-records-per-page-select.fi-compact{display:none}}@container (min-width:56rem){.fi-pagination:not(.fi-simple) .fi-pagination-previous-btn,.fi-pagination:not(.fi-simple) .fi-pagination-next-btn{display:none}.fi-pagination .fi-pagination-overview{display:inline}.fi-pagination .fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:inline}.fi-pagination .fi-pagination-records-per-page-select.fi-compact{display:none}}@media (min-width:48rem){.fi-pagination:not(.fi-simple) .fi-pagination-previous-btn,.fi-pagination:not(.fi-simple) .fi-pagination-next-btn{display:none}.fi-pagination .fi-pagination-overview{display:inline}.fi-pagination .fi-pagination-items{display:flex}}}.fi-section:not(.fi-section-not-contained):not(.fi-divided)>.fi-section-content-ctn>.fi-section-content,.fi-section:not(.fi-section-not-contained).fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding:calc(var(--spacing)*6)}.fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*4)}.fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained):not(.fi-aside){border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-section:not(.fi-section-not-contained):not(.fi-aside):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained):not(.fi-aside):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-compact{border-radius:var(--radius-lg)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary{background-color:var(--gray-50)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-section:not(.fi-section-not-contained):not(.fi-aside)>.fi-section-header{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*4)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:48rem){.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn{grid-column:span 2/span 2}}.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained).fi-aside.fi-compact>.fi-section-content-ctn{border-radius:var(--radius-lg)}.fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn{background-color:var(--gray-50)}.fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-section:not(.fi-section-not-contained).fi-compact:not(.fi-aside)>.fi-section-header{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2.5)}.fi-section:not(.fi-section-not-contained).fi-compact:not(.fi-divided)>.fi-section-content-ctn>.fi-section-content,.fi-section:not(.fi-section-not-contained).fi-compact.fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding:calc(var(--spacing)*4)}.fi-section:not(.fi-section-not-contained).fi-compact>.fi-section-footer{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2.5)}@media (min-width:48rem){.fi-section.fi-section-not-contained.fi-aside>.fi-section-content-ctn{grid-column:span 2/span 2}}.fi-section.fi-section-not-contained:not(.fi-aside),.fi-section.fi-section-not-contained:not(.fi-aside)>.fi-section-content-ctn{row-gap:calc(var(--spacing)*4);display:grid}.fi-section.fi-section-not-contained:not(.fi-aside).fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding-block:calc(var(--spacing)*6)}.fi-section.fi-section-not-contained:not(.fi-aside).fi-compact,.fi-section.fi-section-not-contained:not(.fi-aside).fi-compact>.fi-section-content-ctn{row-gap:calc(var(--spacing)*2.5)}.fi-section.fi-section-not-contained:not(.fi-aside).fi-compact.fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding-block:calc(var(--spacing)*4)}.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content{gap:calc(var(--spacing)*0)}:where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section.fi-aside{align-items:flex-start;column-gap:calc(var(--spacing)*6);row-gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}@media (min-width:48rem){.fi-section.fi-aside{grid-template-columns:repeat(3,minmax(0,1fr))}}.fi-section.fi-collapsible>.fi-section-header{cursor:pointer}.fi-section.fi-collapsed>.fi-section-header>.fi-section-collapse-btn{rotate:180deg}.fi-section.fi-collapsed>.fi-section-content-ctn{visibility:hidden;height:calc(var(--spacing)*0);--tw-border-style:none;border-style:none;position:absolute;overflow:hidden}@media (min-width:48rem){.fi-section.fi-section-has-content-before>.fi-section-content-ctn{order:-9999}}.fi-section>.fi-section-header{align-items:flex-start;gap:calc(var(--spacing)*3);display:flex}.fi-section>.fi-section-header>.fi-icon{color:var(--gray-400);flex-shrink:0}.fi-section>.fi-section-header>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-section>.fi-section-header>.fi-icon.fi-color{color:var(--color-500)}.fi-section>.fi-section-header>.fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.fi-section>.fi-section-header>.fi-icon.fi-size-sm{margin-top:calc(var(--spacing)*1)}.fi-section>.fi-section-header>.fi-icon.fi-size-md{margin-top:calc(var(--spacing)*.5)}.fi-section>.fi-section-header>.fi-section-header-after-ctn{align-self:center}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-sc-text:not(.fi-section-header-after-ctn .fi-dropdown-panel *),.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-link:not(.fi-section-header-after-ctn .fi-dropdown-panel *){--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-xs{margin-block:calc(var(--spacing)*-.5)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-sm{margin-block:calc(var(--spacing)*-1)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-md{margin-block:calc(var(--spacing)*-1.5)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-lg{margin-block:calc(var(--spacing)*-2)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-xl{margin-block:calc(var(--spacing)*-2.5)}.fi-section>.fi-section-header>.fi-section-collapse-btn{margin-block:calc(var(--spacing)*-1.5);flex-shrink:0}.fi-section .fi-section-header-text-ctn{row-gap:calc(var(--spacing)*1);flex:1;display:grid}.fi-section .fi-section-header-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-section .fi-section-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-section .fi-section-header-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--gray-500);overflow:hidden}.fi-section .fi-section-header-description:where(.dark,.dark *){color:var(--gray-400)}.fi-tabs{column-gap:calc(var(--spacing)*1);max-width:100%;display:flex;overflow-x:auto}.fi-tabs.fi-contained{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5)}.fi-tabs.fi-contained:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-tabs.fi-contained:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-tabs:not(.fi-contained){border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing)*2);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);margin-inline:auto}.fi-tabs:not(.fi-contained):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-tabs:not(.fi-contained):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-tabs.fi-vertical{column-gap:calc(var(--spacing)*0);row-gap:calc(var(--spacing)*1);flex-direction:column;overflow:hidden auto}.fi-tabs.fi-vertical.fi-contained{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0}.fi-tabs.fi-vertical:not(.fi-contained){margin-inline:calc(var(--spacing)*0)}.fi-tabs.fi-vertical .fi-tabs-item{justify-content:flex-start}.fi-tabs-item{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*2);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;transition-duration:75ms;display:flex}@media (hover:hover){.fi-tabs-item:hover{background-color:var(--gray-50)}}.fi-tabs-item:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-tabs-item:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tabs-item:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-tabs-item:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tabs-item:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-tabs-item.fi-active{background-color:var(--gray-50)}.fi-tabs-item.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tabs-item.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-tabs-item.fi-active .fi-tabs-item-label,.fi-tabs-item.fi-active>.fi-icon{color:var(--primary-700)}:is(.fi-tabs-item.fi-active .fi-tabs-item-label,.fi-tabs-item.fi-active>.fi-icon):where(.dark,.dark *){color:var(--primary-400)}.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label,.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:is(:where(.group):focus-visible *){color:var(--gray-700)}.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:where(.dark,.dark *),.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-200)}.fi-tabs-item :not(.fi-active):focus-visible .fi-tabs-item-label{color:var(--gray-700)}.fi-tabs-item :not(.fi-active):focus-visible .fi-tabs-item-label:where(.dark,.dark *){color:var(--gray-200)}.fi-tabs-item .fi-tabs-item-label{color:var(--gray-500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-tabs-item .fi-tabs-item-label:where(.dark,.dark *){color:var(--gray-400)}.fi-tabs-item>.fi-icon{color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;transition-duration:75ms}.fi-tabs-item>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-tabs-item .fi-badge{width:max-content}.fi-tabs-item .fi-tabs-item-badge-placeholder{color:var(--gray-400);align-items:center;display:flex}.fi-tabs-item .fi-tabs-item-badge-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-toggle{height:calc(var(--spacing)*6);width:calc(var(--spacing)*11);cursor:pointer;border-style:var(--tw-border-style);background-color:var(--gray-200);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:var(--ease-in-out);transition-duration:.2s;transition-timing-function:var(--ease-in-out);--tw-outline-style:none;border-width:2px;border-color:#0000;border-radius:3.40282e38px;outline-style:none;flex-shrink:0;display:inline-flex;position:relative}.fi-toggle:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.fi-toggle:disabled{pointer-events:none;opacity:.7}.fi-toggle:where(.dark,.dark *){background-color:var(--gray-700)}.fi-toggle:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500);--tw-ring-offset-color:var(--gray-900)}.fi-toggle:disabled,.fi-toggle[disabled]{pointer-events:none;opacity:.7}.fi-toggle.fi-color{background-color:var(--bg)}.fi-toggle.fi-color:where(.dark,.dark *){background-color:var(--dark-bg)}.fi-toggle.fi-color .fi-icon{color:var(--text)}.fi-toggle.fi-hidden{display:none}.fi-toggle>:first-child{pointer-events:none;width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:var(--ease-in-out);transition-duration:.2s;transition-timing-function:var(--ease-in-out);border-radius:3.40282e38px;display:inline-block;position:relative}.fi-toggle>:first-child>*{inset:calc(var(--spacing)*0);width:100%;height:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;align-items:center;display:flex;position:absolute}.fi-toggle .fi-icon{color:var(--gray-400)}.fi-toggle .fi-icon:where(.dark,.dark *){color:var(--gray-700)}.fi-toggle.fi-toggle-on>:first-child{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-toggle.fi-toggle-on>:first-child:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-toggle.fi-toggle-on>:first-child>:first-child{opacity:0;--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.fi-toggle.fi-toggle-on>:first-child>:last-child{opacity:1;--tw-duration:.2s;--tw-ease:var(--ease-in);transition-duration:.2s;transition-timing-function:var(--ease-in)}.fi-toggle.fi-toggle-off>:first-child{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-toggle.fi-toggle-off>:first-child>:first-child{opacity:1;--tw-duration:.2s;--tw-ease:var(--ease-in);transition-duration:.2s;transition-timing-function:var(--ease-in)}.fi-toggle.fi-toggle-off>:first-child>:last-child{opacity:0;--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.fi-sortable-ghost{opacity:.3}.fi-ac{gap:calc(var(--spacing)*3)}.fi-ac:not(.fi-width-full){flex-wrap:wrap;align-items:center;display:flex}.fi-ac:not(.fi-width-full).fi-align-start,.fi-ac:not(.fi-width-full).fi-align-left{justify-content:flex-start}.fi-ac:not(.fi-width-full).fi-align-center{justify-content:center}.fi-ac:not(.fi-width-full).fi-align-end,.fi-ac:not(.fi-width-full).fi-align-right{flex-direction:row-reverse}.fi-ac:not(.fi-width-full).fi-align-between,.fi-ac:not(.fi-width-full).fi-align-justify{justify-content:space-between}.fi-ac.fi-width-full{grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}.CodeMirror{color:#000;direction:ltr;height:300px;font-family:monospace}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{white-space:nowrap;background-color:#f7f7f7;border-right:1px solid #ddd}.CodeMirror-linenumber{text-align:right;color:#999;white-space:nowrap;min-width:20px;padding:0 3px 0 5px}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;width:auto;border:0!important}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span::-moz-selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:#0000}@keyframes blink{50%{background-color:#0000}}.cm-tab{-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;display:inline-block}.CodeMirror-rulers{position:absolute;inset:-50px 0 0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute;top:0;bottom:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:#ff96004d}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;position:relative;overflow:hidden}.CodeMirror-scroll{z-index:0;outline:0;height:100%;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;position:relative;overflow:scroll!important}.CodeMirror-sizer{border-right:50px solid #0000;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{z-index:6;outline:0;display:none;position:absolute}.CodeMirror-vscrollbar{top:0;right:0;overflow:hidden scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow:scroll hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{z-index:3;min-height:100%;position:absolute;top:0;left:0}.CodeMirror-gutter{white-space:normal;vertical-align:top;height:100%;margin-bottom:-50px;display:inline-block}.CodeMirror-gutter-wrapper{z-index:4;position:absolute;background:0 0!important;border:none!important}.CodeMirror-gutter-background{z-index:4;position:absolute;top:0;bottom:0}.CodeMirror-gutter-elt{cursor:default;z-index:4;position:absolute}.CodeMirror-gutter-wrapper ::selection{background-color:#0000}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{font-family:inherit;font-size:inherit;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;background:0 0;border-width:0;border-radius:0;margin:0;position:relative;overflow:visible}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{z-index:0;position:absolute;inset:0}.CodeMirror-linewidget{z-index:2;padding:.1px;position:relative}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{visibility:hidden;width:100%;height:0;position:absolute;overflow:hidden}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;z-index:3;position:relative}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection{background:#d7d4f0}.CodeMirror-line>span::selection{background:#d7d4f0}.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection{background:#d7d4f0}.CodeMirror-line>span::-moz-selection{background:#d7d4f0}.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{flex-flow:wrap;display:flex}.EasyMDEContainer .CodeMirror{box-sizing:border-box;height:auto;font:inherit;z-index:0;word-wrap:break-word;border:1px solid #ced4da;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:10px}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{z-index:8;background:#fff;height:auto;inset:50px 0 0;border-right:none!important;border-bottom-right-radius:0!important;position:fixed!important}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;flex:auto;position:relative;border-right:none!important}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{-webkit-user-select:none;user-select:none;-o-user-select:none;border-top:1px solid #ced4da;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative}.editor-toolbar.fullscreen{box-sizing:border-box;opacity:1;z-index:9;background:#fff;border:0;width:100%;height:50px;padding-top:10px;padding-bottom:10px;position:fixed;top:0;left:0}.editor-toolbar.fullscreen:before{background:-o-linear-gradient(270deg,#fff 0,#fff0 100%);background:-ms-linear-gradient(left,#fff 0,#fff0 100%);background:linear-gradient(90deg,#fff 0,#fff0);width:20px;height:50px;margin:0;padding:0;position:fixed;top:0;left:0}.editor-toolbar.fullscreen:after{background:-o-linear-gradient(270deg,#fff0 0,#fff 100%);background:-ms-linear-gradient(left,#fff0 0,#fff 100%);background:linear-gradient(90deg,#fff0 0,#fff);width:20px;height:50px;margin:0;padding:0;position:fixed;top:0;right:0}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{text-align:center;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;height:30px;margin:0;padding:0;display:inline-block;text-decoration:none!important}.editor-toolbar button{white-space:nowrap;min-width:30px;padding:0 6px;font-weight:700}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{color:#0000;text-indent:-10px;border-left:1px solid #d9d9d9;border-right:1px solid #fff;width:0;margin:0 6px;display:inline-block}.editor-toolbar button:after{vertical-align:text-bottom;font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px}.editor-toolbar button.heading-1:after{content:\"1\"}.editor-toolbar button.heading-2:after{content:\"2\"}.editor-toolbar button.heading-3:after{content:\"3\"}.editor-toolbar button.heading-bigger:after{content:\"▲\"}.editor-toolbar button.heading-smaller:after{content:\"▼\"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;text-align:right;padding:8px 10px;font-size:12px}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{min-width:4em;margin-left:1em;display:inline-block}.editor-statusbar .lines:before{content:\"lines: \"}.editor-statusbar .words:before{content:\"words: \"}.editor-statusbar .characters:before{content:\"characters: \"}.editor-preview-full{z-index:7;box-sizing:border-box;width:100%;height:100%;display:none;position:absolute;top:0;left:0;overflow:auto}.editor-preview-side{z-index:9;box-sizing:border-box;word-wrap:break-word;border:1px solid #ddd;width:50%;display:none;position:fixed;top:50px;bottom:0;right:0;overflow:auto}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{margin-bottom:.5rem;line-height:1.2}.cm-s-easymde .cm-comment{background:#0000000d;border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%);border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%)}.easymde-dropdown-content{visibility:hidden;z-index:2;background-color:#f9f9f9;padding:8px;display:block;position:absolute;top:30px;box-shadow:0 8px 16px #0003}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{content:\"\";background-image:var(--bg-image);max-width:100%;height:0;max-height:100%;padding-top:var(--height);width:var(--width);background-repeat:no-repeat;background-size:contain;display:block}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:#ff000026}.cropper-container{-webkit-touch-callout:none;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;user-select:none;direction:ltr;font-size:0;line-height:0;position:relative}.cropper-container img{backface-visibility:hidden;image-orientation:0deg;width:100%;height:100%;display:block;min-width:0!important;max-width:none!important;min-height:0!important;max-height:none!important}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{position:absolute;inset:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{opacity:0;background-color:#fff}.cropper-modal{opacity:.5;background-color:#000}.cropper-view-box{outline:1px solid #3399ffbf;width:100%;height:100%;display:block;overflow:hidden}.cropper-dashed{opacity:.5;border:0 dashed #eee;display:block;position:absolute}.cropper-dashed.dashed-h{border-top-width:1px;border-bottom-width:1px;width:100%;height:33.3333%;top:33.3333%;left:0}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;width:33.3333%;height:100%;top:0;left:33.3333%}.cropper-center{opacity:.75;width:0;height:0;display:block;position:absolute;top:50%;left:50%}.cropper-center:after,.cropper-center:before{content:\" \";background-color:#eee;display:block;position:absolute}.cropper-center:before{width:7px;height:1px;top:0;left:-3px}.cropper-center:after{width:1px;height:7px;top:-3px;left:0}.cropper-face,.cropper-line,.cropper-point{opacity:.1;width:100%;height:100%;display:block;position:absolute}.cropper-face{background-color:#fff;top:0;left:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;width:5px;top:0;right:-3px}.cropper-line.line-n{cursor:ns-resize;height:5px;top:-3px;left:0}.cropper-line.line-w{cursor:ew-resize;width:5px;top:0;left:-3px}.cropper-line.line-s{cursor:ns-resize;height:5px;bottom:-3px;left:0}.cropper-point{opacity:.75;background-color:#39f;width:5px;height:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;top:50%;right:-3px}.cropper-point.point-n{cursor:ns-resize;margin-left:-3px;top:-3px;left:50%}.cropper-point.point-w{cursor:ew-resize;margin-top:-3px;top:50%;left:-3px}.cropper-point.point-s{cursor:s-resize;margin-left:-3px;bottom:-3px;left:50%}.cropper-point.point-ne{cursor:nesw-resize;top:-3px;right:-3px}.cropper-point.point-nw{cursor:nwse-resize;top:-3px;left:-3px}.cropper-point.point-sw{cursor:nesw-resize;bottom:-3px;left:-3px}.cropper-point.point-se{cursor:nwse-resize;opacity:1;width:20px;height:20px;bottom:-3px;right:-3px}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{opacity:.75;width:5px;height:5px}}.cropper-point.point-se:before{content:\" \";opacity:0;background-color:#39f;width:200%;height:200%;display:block;position:absolute;bottom:-50%;right:-50%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{width:0;height:0;display:block;position:absolute}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.filepond--browser.filepond--browser{opacity:0;width:calc(100% - 2em);margin:0;padding:0;font-size:0;position:absolute;top:1.75em;left:1em}.filepond--data{visibility:hidden;pointer-events:none;contain:strict;border:none;width:0;height:0;margin:0;padding:0;position:absolute}.filepond--drip{opacity:.1;pointer-events:none;background:#00000003;border-radius:.5em;position:absolute;inset:0;overflow:hidden}.filepond--drip-blob{transform-origin:50%;background:#292625;border-radius:50%;width:8em;height:8em;margin-top:-4em;margin-left:-4em}.filepond--drip-blob,.filepond--drop-label{will-change:transform,opacity;position:absolute;top:0;left:0}.filepond--drop-label{color:#4f4f4f;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;height:0;margin:0;display:flex;right:0}.filepond--drop-label.filepond--drop-label label{margin:0;padding:.5em;display:block}.filepond--drop-label label{cursor:default;text-align:center;font-size:.875em;font-weight:400;line-height:1.5}.filepond--label-action{-webkit-text-decoration-skip:ink;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto;cursor:pointer;-webkit-text-decoration:underline #a7a4a4;text-decoration:underline #a7a4a4}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{width:1.625em;height:1.625em;font-family:inherit;font-size:1em;line-height:inherit;will-change:transform,opacity;border:none;outline:none;margin:0;padding:0}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.filepond--file-action-button.filepond--file-action-button svg{width:100%;height:100%}.filepond--file-action-button.filepond--file-action-button:after{content:\"\";position:absolute;inset:-.75em}.filepond--file-action-button{cursor:auto;color:#fff;background-color:#00000080;background-image:none;border-radius:50%;transition:box-shadow .25s ease-in;box-shadow:0 0 #fff0}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{color:#ffffff80;background-color:#00000040}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{will-change:transform,opacity;pointer-events:none;-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;align-items:flex-start;min-width:0;margin:0 .5em 0 0;display:flex;position:static}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:.75em;line-height:1.2;overflow:hidden}.filepond--file-info .filepond--file-info-sub{opacity:.5;white-space:nowrap;font-size:.625em;transition:opacity .25s ease-in-out}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{text-align:right;will-change:transform,opacity;pointer-events:none;-webkit-user-select:none;user-select:none;flex-direction:column;flex-grow:0;flex-shrink:0;align-items:flex-end;min-width:2.25em;margin:0;display:flex;position:static}.filepond--file-status *{white-space:nowrap;margin:0}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{opacity:.5;font-size:.625em;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;min-width:0;height:100%;margin:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.filepond--file{color:#fff;border-radius:.5em;align-items:flex-start;height:100%;padding:.5625em;display:flex;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:.5s linear .125s both fall}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:.65s linear both shake}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:1s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{opacity:0;animation-timing-function:ease-out;transform:scale(.5)}70%{opacity:1;animation-timing-function:ease-in-out;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:\"\";z-index:100;position:absolute;inset:0}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{z-index:1;will-change:transform,opacity;touch-action:auto;margin:.25em;padding:0;position:absolute;top:0;left:0;right:0}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:-webkit-grab;cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{transition:box-shadow .125s ease-in-out;box-shadow:0 0 #0000}.filepond--item[data-drag-state=drag]{cursor:-webkit-grabbing;cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{will-change:transform;margin:0;position:absolute;top:0;left:0;right:0}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;overflow:hidden scroll;-webkit-mask:linear-gradient(#000 calc(100% - .5em),#0000);mask:linear-gradient(#000 calc(100% - .5em),#0000)}.filepond--list-scroller::-webkit-scrollbar{background:0 0}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-color:#0000004d;background-clip:content-box;border:.3125em solid #0000;border-radius:99999px}.filepond--list.filepond--list{will-change:transform;margin:0;padding:0;list-style-type:none;position:absolute;top:0}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{width:100%;max-width:none;height:100%;margin:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7;justify-content:center;align-items:center;height:auto;display:flex;bottom:0}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-top:0;margin-bottom:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*,.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status{display:none}@media not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{pointer-events:none;margin:0;position:absolute;top:0;left:0;right:0;height:100%!important}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{-webkit-transform-style:preserve-3d;transform-style:preserve-3d;background-color:#0000!important;border:none!important}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{margin:0;padding:0;position:absolute;top:0;left:0;right:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.filepond--panel-top:after{content:\"\";background-color:inherit;height:2px;position:absolute;bottom:-1px;left:0;right:0}.filepond--panel-bottom,.filepond--panel-center{will-change:transform;backface-visibility:hidden;transform-origin:0 0;transform:translateY(.5em)}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{content:\"\";background-color:inherit;height:2px;position:absolute;top:-1px;left:0;right:0}.filepond--panel-center{border-top:none!important;border-bottom:none!important;border-radius:0!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;pointer-events:none;will-change:transform,opacity;width:1.25em;height:1.25em;margin:0;position:static}.filepond--progress-indicator svg{vertical-align:top;transform-box:fill-box;width:100%;height:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;text-align:left;text-rendering:optimizeLegibility;contain:layout style size;direction:ltr;margin-bottom:1em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;position:relative}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-top:1em;margin-bottom:1em}.filepond--root .filepond--credits{opacity:.4;color:inherit;z-index:3;font-size:11px;line-height:.85;text-decoration:none;position:absolute;bottom:-14px;right:0}.filepond--root .filepond--credits[style]{margin-top:14px;top:0;bottom:auto}.filepond--action-edit-item.filepond--action-edit-item{width:2em;height:2em;padding:.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{line-height:inherit;color:inherit;pointer-events:all;background:0 0;border:none;outline:none;margin:0 0 0 .25em;padding:0;font-family:inherit;position:absolute}.filepond--action-edit-item-alt svg{width:1.3125em;height:1.3125em}.filepond--action-edit-item-alt span{opacity:0;font-size:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{position:absolute;top:0;left:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{opacity:0;z-index:2;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;min-height:5rem;max-height:7rem;margin:0;display:block;position:absolute;top:0;left:0}.filepond--image-preview-overlay svg{width:100%;height:auto;color:inherit;max-height:inherit}.filepond--image-preview-overlay-idle{mix-blend-mode:multiply;color:#282828d9}.filepond--image-preview-overlay-success{mix-blend-mode:normal;color:#369763}.filepond--image-preview-overlay-failure{mix-blend-mode:normal;color:#c44e47}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{-webkit-user-select:none;user-select:none;background:#00000003;border-radius:.45em;height:100%;margin:0;position:absolute;top:0;left:0;right:0;overflow:hidden}.filepond--image-preview{z-index:1;pointer-events:none;will-change:transform,opacity;background:#222;align-items:center;width:100%;height:100%;display:flex;position:absolute;top:0;left:0}.filepond--image-clip{margin:0 auto;position:relative;overflow:hidden}.filepond--image-clip[data-transparency-indicator=grid] img,.filepond--image-clip[data-transparency-indicator=grid] canvas{background-color:#fff;background-image:url(\"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0 H50 V50 H0'/%3E%3Cpath d='M50 50 H100 V100 H50'/%3E%3C/svg%3E\");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{will-change:transform;position:absolute;top:0;left:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{justify-content:center;align-items:center;height:100%;display:flex}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{top:auto;bottom:0;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-top:0;margin-bottom:.1875em;margin-left:.1875em}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{width:calc(100% - 1.4em);margin:2.3em auto auto}.filepond--media-preview .playpausebtn{float:left;cursor:pointer;background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;outline:none;width:25px;height:25px;margin-top:.3em;margin-right:.3em}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{float:left;background:#ffffff4d;border-radius:15px;width:calc(100% - 2.5em);height:3px;margin-top:1em}.filepond--media-preview .playhead{background:#fff;border-radius:50%;width:13px;height:13px;margin-top:-5px}.filepond--media-preview-wrapper{pointer-events:auto;background:#00000003;border-radius:.45em;height:100%;margin:0;position:absolute;top:0;left:0;right:0;overflow:hidden}.filepond--media-preview-wrapper:before{content:\" \";width:100%;height:2em;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#000000\",endColorstr=\"#00000000\",GradientType=0);z-index:3;background:linear-gradient(#000,#0000);position:absolute}.filepond--media-preview{z-index:1;transform-origin:50%;will-change:transform,opacity;width:100%;height:100%;display:block;position:relative}.filepond--media-preview video,.filepond--media-preview audio{will-change:transform;width:100%}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:#0000;-webkit-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{z-index:1;width:100%;height:100%;position:relative}.noUi-connects{z-index:0;overflow:hidden}.noUi-connect,.noUi-origin{will-change:transform;z-index:1;transform-origin:0 0;width:100%;height:100%;-webkit-transform-style:preserve-3d;transform-style:flat;position:absolute;top:0;right:0}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0;top:-100%}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{backface-visibility:hidden;position:absolute}.noUi-touch-area{width:100%;height:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;top:-6px;right:-17px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;bottom:-17px;right:-6px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#fafafa;border:1px solid #d3d3d3;border-radius:4px;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-connects{border-radius:3px}.noUi-connect{background:#3fb8af}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{cursor:default;background:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:before,.noUi-handle:after{content:\"\";background:#e8e7e6;width:1px;height:14px;display:block;position:absolute;top:6px;left:14px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:before,.noUi-vertical .noUi-handle:after{width:14px;height:1px;top:14px;left:6px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#b8b8b8}[disabled].noUi-target,[disabled].noUi-handle,[disabled] .noUi-handle{cursor:not-allowed}.noUi-pips,.noUi-pips *{box-sizing:border-box}.noUi-pips{color:#999;position:absolute}.noUi-value{white-space:nowrap;text-align:center;position:absolute}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{background:#ccc;position:absolute}.noUi-marker-sub,.noUi-marker-large{background:#aaa}.noUi-pips-horizontal{width:100%;height:80px;padding:10px 0;top:100%;left:0}.noUi-value-horizontal{transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{width:2px;height:5px;margin-left:-1px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{height:100%;padding:0 10px;top:0;left:100%}.noUi-value-vertical{padding-left:25px;transform:translateY(-50%)}.noUi-rtl .noUi-value-vertical{transform:translateY(50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{color:#000;text-align:center;white-space:nowrap;background:#fff;border:1px solid #d9d9d9;border-radius:3px;padding:5px;display:block;position:absolute}.noUi-horizontal .noUi-tooltip{bottom:120%;left:50%;transform:translate(-50%)}.noUi-vertical .noUi-tooltip{top:50%;right:120%;transform:translateY(-50%)}.noUi-horizontal .noUi-origin>.noUi-tooltip{bottom:10px;left:auto;transform:translate(50%)}.noUi-vertical .noUi-origin>.noUi-tooltip{top:auto;right:28px;transform:translateY(-18px)}.fi-fo-builder{row-gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.fi-fo-builder .fi-fo-builder-actions{column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-builder .fi-fo-builder-actions.fi-hidden{display:none}.fi-fo-builder .fi-fo-builder-items{grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.fi-fo-builder .fi-fo-builder-items>*+*{margin-top:calc(var(--spacing)*4)}.fi-fo-builder .fi-fo-builder-item{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-item.fi-collapsed .fi-fo-builder-item-header-collapsible-actions{rotate:-180deg}.fi-fo-builder .fi-fo-builder-item.fi-collapsed .fi-fo-builder-item-header-collapse-action,.fi-fo-builder .fi-fo-builder-item:not(.fi-collapsed) .fi-fo-builder-item-header-expand-action{pointer-events:none;opacity:0}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-item{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#0000;border-radius:0}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-item>.fi-fo-builder-item-content{padding:calc(var(--spacing)*0)}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-label-between-items-ctn>.fi-fo-builder-label-between-items-divider-before{width:calc(var(--spacing)*0)}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-label-between-items-ctn>.fi-fo-builder-label-between-items{padding-inline-start:calc(var(--spacing)*0)}.fi-fo-builder .fi-fo-builder-item-header{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex;overflow:hidden}.fi-fo-builder.fi-collapsible .fi-fo-builder-item-header{cursor:pointer;-webkit-user-select:none;user-select:none}.fi-fo-builder .fi-fo-builder-item-header-start-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-builder .fi-fo-builder-item-header-icon{color:var(--gray-400);flex-shrink:0}.fi-fo-builder .fi-fo-builder-item-header-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-builder .fi-fo-builder-item-header-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-fo-builder .fi-fo-builder-item-header-label:where(.dark,.dark *){color:var(--color-white)}.fi-fo-builder .fi-fo-builder-item-header-label.fi-truncated{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-fo-builder .fi-fo-builder-item-header-end-actions{align-items:center;column-gap:calc(var(--spacing)*3);margin-inline-start:auto;display:flex}.fi-fo-builder .fi-fo-builder-item-header-collapsible-actions{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}.fi-fo-builder .fi-fo-builder-item-header-collapse-action{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.fi-fo-builder .fi-fo-builder-item-header-expand-action{inset:calc(var(--spacing)*0);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;rotate:180deg}.fi-fo-builder .fi-fo-builder-item-content:not(.fi-fo-builder-item-content-has-preview){padding:calc(var(--spacing)*4)}.fi-fo-builder .fi-fo-builder-item-content.fi-fo-builder-item-content-has-preview{position:relative}.fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-100)}.fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-item-preview:not(.fi-interactive){pointer-events:none}.fi-fo-builder .fi-fo-builder-item-preview-edit-overlay{inset:calc(var(--spacing)*0);z-index:1;cursor:pointer;position:absolute}.fi-fo-builder .fi-fo-builder-block-picker-ctn{border-radius:var(--radius-lg);background-color:var(--color-white)}.fi-fo-builder .fi-fo-builder-block-picker-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.fi-fo-builder .fi-fo-builder-add-between-items-ctn{pointer-events:none;visibility:hidden;margin-top:calc(var(--spacing)*0);height:calc(var(--spacing)*0);opacity:0;width:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;display:flex;position:relative;overflow:visible}.fi-fo-builder .fi-fo-builder-item:hover+.fi-fo-builder-add-between-items-ctn,.fi-fo-builder .fi-fo-builder-add-between-items-ctn:has(+.fi-fo-builder-item:hover),.fi-fo-builder .fi-fo-builder-add-between-items-ctn:hover,.fi-fo-builder .fi-fo-builder-add-between-items-ctn:focus-within{pointer-events:auto;visibility:visible;opacity:1}.fi-fo-builder .fi-fo-builder-add-between-items{z-index:10;--tw-translate-y:calc(-50% + .5rem);translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-lg);background-color:var(--color-white);position:absolute;top:50%}.fi-fo-builder .fi-fo-builder-add-between-items:where(.dark,.dark *){background-color:var(--gray-900)}.fi-fo-builder .fi-fo-builder-label-between-items-ctn{margin-top:calc(var(--spacing)*1);margin-bottom:calc(var(--spacing)*-3);align-items:center;display:flex;position:relative}.fi-fo-builder .fi-fo-builder-label-between-items-divider-before{width:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex-shrink:0}.fi-fo-builder .fi-fo-builder-label-between-items-divider-before:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-label-between-items-divider-before:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-label-between-items{padding-inline:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);flex-shrink:0}.fi-fo-builder .fi-fo-builder-label-between-items:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-builder .fi-fo-builder-label-between-items-divider-after{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex:1}.fi-fo-builder .fi-fo-builder-label-between-items-divider-after:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-label-between-items-divider-after:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-block-picker{justify-content:center;display:flex}.fi-fo-builder .fi-fo-builder-block-picker.fi-align-start,.fi-fo-builder .fi-fo-builder-block-picker.fi-align-left{justify-content:flex-start}.fi-fo-builder .fi-fo-builder-block-picker.fi-align-end,.fi-fo-builder .fi-fo-builder-block-picker.fi-align-right{justify-content:flex-end}.fi-fo-checkbox-list .fi-fo-checkbox-list-search-input-wrp{margin-bottom:calc(var(--spacing)*4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-actions{margin-bottom:calc(var(--spacing)*2)}.fi-fo-checkbox-list .fi-fo-checkbox-list-options{gap:calc(var(--spacing)*4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-options.fi-grid-direction-col{margin-top:calc(var(--spacing)*-4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-options.fi-grid-direction-col .fi-fo-checkbox-list-option-ctn{break-inside:avoid;padding-top:calc(var(--spacing)*4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-option{column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-checkbox-input{margin-top:calc(var(--spacing)*1);flex-shrink:0}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);display:grid}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);overflow-wrap:break-word;color:var(--gray-950);overflow:hidden}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-label:where(.dark,.dark *){color:var(--color-white)}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-description{color:var(--gray-500)}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-description:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-checkbox-list .fi-fo-checkbox-list-no-search-results-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-fo-checkbox-list .fi-fo-checkbox-list-no-search-results-message:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-code-editor{overflow:hidden}.fi-fo-code-editor .cm-editor.cm-focused{--tw-outline-style:none!important;outline-style:none!important}.fi-fo-code-editor .cm-editor .cm-gutters{min-height:calc(var(--spacing)*48)!important;border-inline-end-color:var(--gray-300)!important;background-color:var(--gray-100)!important}.fi-fo-code-editor .cm-editor .cm-gutters:where(.dark,.dark *){border-inline-end-color:var(--gray-800)!important;background-color:var(--gray-950)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement{border-start-start-radius:var(--radius-md);border-end-start-radius:var(--radius-md);margin-inline-start:calc(var(--spacing)*1)}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter{background-color:var(--gray-200)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter:where(.dark,.dark *){background-color:var(--gray-800)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter{background-color:var(--gray-200)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter:where(.dark,.dark *){background-color:var(--gray-800)!important}.fi-fo-code-editor .cm-editor .cm-scroller{min-height:calc(var(--spacing)*48)!important}.fi-fo-code-editor .cm-editor .cm-line{border-start-end-radius:var(--radius-md);border-end-end-radius:var(--radius-md);margin-inline-end:calc(var(--spacing)*1)}.fi-fo-code-editor.fi-disabled .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter,.fi-fo-code-editor.fi-disabled .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter,.fi-fo-code-editor.fi-disabled .cm-editor .cm-line.cm-activeLine{background-color:#0000!important}.fi-fo-color-picker .fi-input-wrp-content{display:flex}.fi-fo-color-picker .fi-fo-color-picker-preview{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);-webkit-user-select:none;user-select:none;border-radius:3.40282e38px;flex-shrink:0;margin-block:auto;margin-inline-end:calc(var(--spacing)*3)}.fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-200);--tw-ring-inset:inset}.fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-color-picker .fi-fo-color-picker-panel{z-index:10;border-radius:var(--radius-lg);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:none;position:absolute}.fi-fo-date-time-picker input::-webkit-datetime-edit{padding:0;display:block}.fi-fo-date-time-picker .fi-fo-date-time-picker-trigger{width:100%}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{--tw-border-style:none;width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);--tw-outline-style:none;background-color:#0000;border-style:none;outline-style:none}@media (forced-colors:active){.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{outline-offset:2px;outline:2px solid #0000}}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input::placeholder{color:var(--gray-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel{z-index:10;position:absolute}:where(.fi-fo-date-time-picker .fi-fo-date-time-picker-panel>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel{border-radius:var(--radius-lg);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-date-time-picker .fi-fo-date-time-picker-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel .fi-fo-date-time-picker-panel-header{justify-content:space-between;align-items:center;display:flex}.fi-fo-date-time-picker .fi-fo-date-time-picker-month-select{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing)*0);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);background-color:#0000;border-style:none;flex-grow:1}.fi-fo-date-time-picker .fi-fo-date-time-picker-month-select:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-fo-date-time-picker .fi-fo-date-time-picker-month-select:where(.dark,.dark *){background-color:var(--gray-900);color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-year-input{width:calc(var(--spacing)*16);--tw-border-style:none;padding:calc(var(--spacing)*0);text-align:right;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-950);background-color:#0000;border-style:none}.fi-fo-date-time-picker .fi-fo-date-time-picker-year-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-fo-date-time-picker .fi-fo-date-time-picker-year-input:where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header{gap:calc(var(--spacing)*1);grid-template-columns:repeat(7,minmax(0,1fr));display:grid}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header .fi-fo-date-time-picker-calendar-header-day{text-align:center;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header .fi-fo-date-time-picker-calendar-header-day:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar{grid-template-columns:repeat(7,minmax(calc(var(--spacing)*7),1fr));gap:calc(var(--spacing)*1);display:grid}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day{text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-loose);line-height:var(--leading-loose);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;border-radius:3.40282e38px;transition-duration:75ms}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-disabled{pointer-events:none;opacity:.5}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-disabled){cursor:pointer}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected{background-color:var(--gray-50);color:var(--primary-600)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled){background-color:var(--gray-100)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-fo-date-time-picker-calendar-day-today:not(.fi-focused):not(.fi-selected):not(.fi-disabled){color:var(--primary-600)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-fo-date-time-picker-calendar-day-today:not(.fi-focused):not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){color:var(--primary-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-fo-date-time-picker-calendar-day-today):not(.fi-selected){color:var(--gray-950)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-fo-date-time-picker-calendar-day-today):not(.fi-selected):where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs{justify-content:center;align-items:center;display:flex}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input{width:calc(var(--spacing)*10);--tw-border-style:none;padding:calc(var(--spacing)*0);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-950);background-color:#0000;border-style:none;margin-inline-end:calc(var(--spacing)*1)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input:where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs .fi-fo-date-time-picker-time-input-separator{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs .fi-fo-date-time-picker-time-input-separator:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-field{row-gap:calc(var(--spacing)*2);display:grid}@media (min-width:40rem){.fi-fo-field.fi-fo-field-has-inline-label{align-items:flex-start;column-gap:calc(var(--spacing)*4);grid-template-columns:repeat(3,minmax(0,1fr))}.fi-fo-field.fi-fo-field-has-inline-label .fi-fo-field-content-col{grid-column:span 2/span 2}}.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label{align-items:flex-start;column-gap:calc(var(--spacing)*3);display:flex}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-checkbox-input{margin-top:calc(var(--spacing)*.5);flex-shrink:0}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-toggle{margin-block:calc(var(--spacing)*-.5)}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-sc:first-child{flex-grow:0}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label).fi-hidden{display:none}.fi-fo-field .fi-fo-field-label-content{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-fo-field .fi-fo-field-label-content:where(.dark,.dark *){color:var(--color-white)}.fi-fo-field .fi-fo-field-label-content .fi-fo-field-label-required-mark{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-600)}.fi-fo-field .fi-fo-field-label-content .fi-fo-field-label-required-mark:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-field .fi-fo-field-label-col{row-gap:calc(var(--spacing)*2);grid-auto-columns:minmax(0,1fr);height:100%;display:grid}@media (min-width:40rem){.fi-fo-field .fi-fo-field-label-col.fi-vertical-align-start{align-items:flex-start}.fi-fo-field .fi-fo-field-label-col.fi-vertical-align-center{align-items:center}.fi-fo-field .fi-fo-field-label-col.fi-vertical-align-end{align-items:flex-end}}.fi-fo-field .fi-fo-field-content-col{row-gap:calc(var(--spacing)*2);grid-auto-columns:minmax(0,1fr);display:grid}.fi-fo-field .fi-fo-field-content-ctn{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;display:flex}.fi-fo-field .fi-fo-field-content{width:100%}.fi-fo-field .fi-fo-field-wrp-error-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--danger-600)}.fi-fo-field .fi-fo-field-wrp-error-message:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-field .fi-fo-field-wrp-error-list{list-style-type:disc;list-style-position:inside}:where(.fi-fo-field .fi-fo-field-wrp-error-list>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}.fi-fo-file-upload{row-gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.fi-fo-file-upload.fi-align-start,.fi-fo-file-upload.fi-align-left{align-items:flex-start}.fi-fo-file-upload.fi-align-center{align-items:center}.fi-fo-file-upload.fi-align-end,.fi-fo-file-upload.fi-align-right{align-items:flex-end}.fi-fo-file-upload .fi-fo-file-upload-input-ctn{width:100%;height:100%}.fi-fo-file-upload.fi-fo-file-upload-avatar .fi-fo-file-upload-input-ctn{height:100%;width:calc(var(--spacing)*32)}.fi-fo-file-upload .fi-fo-file-upload-error-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--danger-600)}.fi-fo-file-upload .fi-fo-file-upload-error-message:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-file-upload .filepond--root{margin-bottom:calc(var(--spacing)*0);border-radius:var(--radius-lg);background-color:var(--color-white);font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow:hidden}.fi-fo-file-upload .filepond--root:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--root:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-file-upload .filepond--root:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--root:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-file-upload .filepond--root[data-disabled=disabled]{background-color:var(--gray-50)}.fi-fo-file-upload .filepond--root[data-disabled=disabled]:where(.dark,.dark *){--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--root[data-disabled=disabled]:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-file-upload .filepond--root[data-style-panel-layout=compact\\ circle]{border-radius:3.40282e38px}.fi-fo-file-upload .filepond--panel-root{background-color:#0000}.fi-fo-file-upload .filepond--drop-label label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600);padding:calc(var(--spacing)*3)!important}.fi-fo-file-upload .filepond--drop-label label:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-file-upload .filepond--label-action{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary-600);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;text-decoration-line:none;transition-duration:75ms}@media (hover:hover){.fi-fo-file-upload .filepond--label-action:hover{color:var(--primary-500)}}.fi-fo-file-upload .filepond--label-action:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.fi-fo-file-upload .filepond--label-action:where(.dark,.dark *):hover{color:var(--primary-500)}}.fi-fo-file-upload .filepond--drip-blob{background-color:var(--gray-400)}.fi-fo-file-upload .filepond--drip-blob:where(.dark,.dark *){background-color:var(--gray-500)}.fi-fo-file-upload .filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(50% - .5rem);display:inline}@media (min-width:64rem){.fi-fo-file-upload .filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.fi-fo-file-upload .filepond--download-icon{pointer-events:auto;width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);background-color:var(--color-white);vertical-align:bottom;margin-inline-end:calc(var(--spacing)*1);display:inline-block}@media (hover:hover){.fi-fo-file-upload .filepond--download-icon:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--download-icon:hover{background-color:color-mix(in oklab,var(--color-white)70%,transparent)}}}.fi-fo-file-upload .filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZG93bmxvYWQiPjxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00Ij48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz0iNyAxMCAxMiAxNSAxNyAxMCI+PC9wb2x5bGluZT48bGluZSB4MT0iMTIiIHkxPSIxNSIgeDI9IjEyIiB5Mj0iMyI+PC9saW5lPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZG93bmxvYWQiPjxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00Ij48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz0iNyAxMCAxMiAxNSAxNyAxMCI+PC9wb2x5bGluZT48bGluZSB4MT0iMTIiIHkxPSIxNSIgeDI9IjEyIiB5Mj0iMyI+PC9saW5lPjwvc3ZnPg==);-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fi-fo-file-upload .filepond--open-icon{pointer-events:auto;width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);background-color:var(--color-white);vertical-align:bottom;margin-inline-end:calc(var(--spacing)*1);display:inline-block}@media (hover:hover){.fi-fo-file-upload .filepond--open-icon:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--open-icon:hover{background-color:color-mix(in oklab,var(--color-white)70%,transparent)}}}.fi-fo-file-upload .filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNCIgLz4KPC9zdmc+Cg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNCIgLz4KPC9zdmc+Cg==);-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fi-fo-file-upload .filepond--file-action-button.filepond--action-edit-item{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--file-action-button.filepond--action-edit-item{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor{inset:calc(var(--spacing)*0);isolation:isolate;z-index:50;width:100vw;height:100dvh;padding:calc(var(--spacing)*2);position:fixed}@media (min-width:40rem){.fi-fo-file-upload .fi-fo-file-upload-editor{padding:calc(var(--spacing)*10)}}@media (min-width:48rem){.fi-fo-file-upload .fi-fo-file-upload-editor{padding:calc(var(--spacing)*20)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{inset:calc(var(--spacing)*0);cursor:pointer;background-color:var(--gray-950);width:100%;height:100%;position:fixed}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{will-change:transform}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{isolation:isolate;border-radius:var(--radius-xl);background-color:var(--color-white);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100%;height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-900);flex-direction:column;margin-inline:auto;display:flex;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{--tw-ring-color:color-mix(in oklab,var(--gray-900)10%,transparent)}}@media (min-width:64rem){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{flex-direction:row}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window:where(.dark,.dark *){background-color:var(--gray-800);--tw-ring-color:var(--gray-50)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-50)10%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-image-ctn{margin:calc(var(--spacing)*4);flex:1;max-width:100%;max-height:100%}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-image{width:auto;height:100%}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel{background-color:var(--gray-50);flex-direction:column;flex:1;width:100%;height:100%;display:flex;overflow-y:auto}@media (min-width:64rem){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel{max-width:var(--container-xs)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main{flex:1}:where(.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main{padding:calc(var(--spacing)*4);overflow:auto}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group{gap:calc(var(--spacing)*3);display:grid}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn-group{width:100%}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn.fi-active{background-color:var(--gray-50)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn.fi-active:where(.dark,.dark *){background-color:var(--gray-700)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-fo-file-upload-editor-control-panel-group-title{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-950)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-fo-file-upload-editor-control-panel-group-title:where(.dark,.dark *){color:var(--color-white)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-footer{align-items:center;gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-reset-action{margin-left:auto}.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{background-color:var(--gray-100)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{background-color:color-mix(in oklab,var(--gray-100)50%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{opacity:1}.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)80%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-circle-cropper .cropper-view-box,.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-circle-cropper .cropper-face{border-radius:50%}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-window{max-width:var(--container-3xl);flex-direction:column}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-image-ctn{min-height:calc(var(--spacing)*0);flex:1;overflow:hidden}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel{flex:none;height:auto}@media (min-width:64rem){.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel{max-width:none}}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel-footer{justify-content:flex-start}:where(.fi-fo-key-value .fi-fo-key-value-table-ctn>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-key-value .fi-fo-key-value-table{table-layout:auto;width:100%}:where(.fi-fo-key-value .fi-fo-key-value-table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-key-value .fi-fo-key-value-table>thead>tr>th{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-fo-key-value .fi-fo-key-value-table>thead>tr>th:where(.dark,.dark *){color:var(--gray-200)}.fi-fo-key-value .fi-fo-key-value-table>thead>tr>th.fi-has-action{width:calc(var(--spacing)*9);padding:calc(var(--spacing)*0)}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td{width:50%;padding:calc(var(--spacing)*0)}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td.fi-has-action{width:auto;padding:calc(var(--spacing)*.5)}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td.fi-has-action .fi-fo-key-value-table-row-sortable-handle{display:flex}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td .fi-input{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.fi-fo-key-value .fi-fo-key-value-add-action-ctn{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);justify-content:center;display:flex}@media (min-width:40rem){.fi-fo-key-value-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-markdown-editor{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.fi-fo-markdown-editor:not(.fi-disabled){max-width:100%;font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-950);overflow:hidden}.fi-fo-markdown-editor:not(.fi-disabled):where(.dark,.dark *){color:var(--color-white)}.fi-fo-markdown-editor.fi-disabled{border-radius:var(--radius-lg);background-color:var(--gray-50);width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);display:block}.fi-fo-markdown-editor.fi-disabled:where(.dark,.dark *){color:var(--gray-400);--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor.fi-disabled:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror{padding-inline:calc(var(--spacing)*4)!important;padding-block:calc(var(--spacing)*3)!important}.fi-fo-markdown-editor .cm-s-easymde .cm-comment{color:var(--color-cm-gray-muted);background-color:#0000}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-property,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-operator{color:var(--color-cm-gray)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-string,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-bracket,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-quote~.cm-quote{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list~.cm-variable-2,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list~.cm-variable-3,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list~.cm-keyword,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-variable-2,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-variable-3,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-keyword{color:var(--color-cm-gray)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-comment{color:inherit;background-color:#0000}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror{--tw-border-style:none;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);color:inherit;background-color:#0000;border-style:none}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror-scroll{height:auto}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar{gap:calc(var(--spacing)*1);border-style:var(--tw-border-style);border-width:0;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*2);border-radius:0;flex-wrap:wrap;display:flex}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8);border-radius:var(--radius-lg);--tw-border-style:none;padding:calc(var(--spacing)*0);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;border-style:none;place-content:center;transition-duration:75ms;display:grid}@media (hover:hover){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:hover{background-color:var(--gray-50)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active{background-color:var(--gray-50)}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:before{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);background-color:var(--gray-700);content:\"\";display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:before{background-color:var(--primary-600)}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .separator{width:calc(var(--spacing)*1);--tw-border-style:none;border-style:none;margin:calc(var(--spacing)*0)!important}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z' /%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z' /%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 5v14' /%3E%3Cpath d='M17 5v14' /%3E%3Cpath d='M15 19h4' /%3E%3Cpath d='M15 5h4' /%3E%3Cpath d='M5 19h4' /%3E%3Cpath d='M5 5h4' /%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 12h10' /%3E%3Cpath d='M7 5v14' /%3E%3Cpath d='M17 5v14' /%3E%3Cpath d='M15 19h4' /%3E%3Cpath d='M15 5h4' /%3E%3Cpath d='M5 19h4' /%3E%3Cpath d='M5 5h4' /%3E%3C/svg%3E\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06ZM11.377 2.011a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06ZM11.377 2.011a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 15.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 10a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 15.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 10a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3ZM2.97 8.654a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 9.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 15.5a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM2.625 13.875a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3ZM2.97 8.654a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 9.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 15.5a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM2.625 13.875a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A\")}.fi-fo-markdown-editor .EasyMDEContainer .editor-statusbar{display:none}.fi-fo-markdown-editor:where(.dark,.dark *){--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert()}.fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .editor-toolbar button:before{background-color:var(--gray-300)}.fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .editor-toolbar button.active:before{background-color:var(--primary-400)}[x-sortable]:has(.fi-sortable-ghost) .fi-fo-markdown-editor{pointer-events:none}.fi-fo-modal-table-select:not(.fi-fo-modal-table-select-multiple){align-items:flex-start;column-gap:calc(var(--spacing)*3);--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);display:flex}.fi-fo-modal-table-select.fi-fo-modal-table-select-multiple{gap:calc(var(--spacing)*2);display:grid}.fi-fo-modal-table-select.fi-fo-modal-table-select-multiple .fi-fo-modal-table-select-badges-ctn{gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.fi-fo-modal-table-select .fi-fo-modal-table-select-placeholder{color:var(--gray-400)}.fi-fo-modal-table-select .fi-fo-modal-table-select-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-radio{gap:calc(var(--spacing)*4)}.fi-fo-radio.fi-inline{flex-wrap:wrap;display:flex}.fi-fo-radio:not(.fi-inline).fi-grid-direction-col{margin-top:calc(var(--spacing)*-4)}.fi-fo-radio:not(.fi-inline).fi-grid-direction-col>.fi-fo-radio-label{break-inside:avoid;padding-top:calc(var(--spacing)*4)}.fi-fo-radio>.fi-fo-radio-label{column-gap:calc(var(--spacing)*3);align-self:flex-start;display:flex}.fi-fo-radio>.fi-fo-radio-label>.fi-radio-input{margin-top:calc(var(--spacing)*1);flex-shrink:0}.fi-fo-radio>.fi-fo-radio-label>.fi-fo-radio-label-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);display:grid}.fi-fo-radio>.fi-fo-radio-label>.fi-fo-radio-label-text:where(.dark,.dark *){color:var(--color-white)}.fi-fo-radio>.fi-fo-radio-label .fi-fo-radio-label-description{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--gray-500)}.fi-fo-radio>.fi-fo-radio-label .fi-fo-radio-label-description:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-repeater{row-gap:calc(var(--spacing)*4);display:grid}.fi-fo-repeater .fi-fo-repeater-actions{column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-repeater .fi-fo-repeater-actions.fi-hidden{display:none}.fi-fo-repeater .fi-fo-repeater-items{align-items:flex-start;gap:calc(var(--spacing)*4)}.fi-fo-repeater .fi-fo-repeater-item{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-item.fi-collapsed .fi-fo-repeater-item-header-collapsible-actions{rotate:-180deg}.fi-fo-repeater .fi-fo-repeater-item.fi-collapsed .fi-fo-repeater-item-header-collapse-action,.fi-fo-repeater .fi-fo-repeater-item:not(.fi-collapsed) .fi-fo-repeater-item-header-expand-action{pointer-events:none;opacity:0}.fi-fo-repeater .fi-fo-repeater-item-header{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex;overflow:hidden}.fi-fo-repeater.fi-collapsible .fi-fo-repeater-item-header{cursor:pointer;-webkit-user-select:none;user-select:none}.fi-fo-repeater .fi-fo-repeater-item-header-start-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-repeater .fi-fo-repeater-item-header-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-fo-repeater .fi-fo-repeater-item-header-label:where(.dark,.dark *){color:var(--color-white)}.fi-fo-repeater .fi-fo-repeater-item-header-label.fi-truncated{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-fo-repeater .fi-fo-repeater-item-header-end-actions{align-items:center;column-gap:calc(var(--spacing)*3);margin-inline-start:auto;display:flex}.fi-fo-repeater .fi-fo-repeater-item-header-collapsible-actions{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}.fi-fo-repeater .fi-fo-repeater-item-header-collapse-action{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.fi-fo-repeater .fi-fo-repeater-item-header-expand-action{inset:calc(var(--spacing)*0);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;rotate:180deg}.fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-100)}.fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-item-content{padding:calc(var(--spacing)*4)}.fi-fo-repeater .fi-fo-repeater-add-between-items-ctn{justify-content:center;width:100%;display:flex}.fi-fo-repeater .fi-fo-repeater-add-between-items{border-radius:var(--radius-lg);background-color:var(--color-white)}.fi-fo-repeater .fi-fo-repeater-add-between-items:where(.dark,.dark *){background-color:var(--gray-900)}.fi-fo-repeater .fi-fo-repeater-label-between-items-ctn{margin-block:calc(var(--spacing)*-2);align-items:center;display:flex;position:relative}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before{width:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex-shrink:0}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-label-between-items{padding-inline:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);flex-shrink:0}.fi-fo-repeater .fi-fo-repeater-label-between-items:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex:1}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-add{justify-content:center;width:100%;display:flex}.fi-fo-repeater .fi-fo-repeater-add.fi-align-start,.fi-fo-repeater .fi-fo-repeater-add.fi-align-left{justify-content:flex-start}.fi-fo-repeater .fi-fo-repeater-add.fi-align-end,.fi-fo-repeater .fi-fo-repeater-add.fi-align-right{justify-content:flex-end}.fi-fo-simple-repeater{row-gap:calc(var(--spacing)*4);display:grid}.fi-fo-simple-repeater .fi-fo-simple-repeater-items{gap:calc(var(--spacing)*4)}.fi-fo-simple-repeater .fi-fo-simple-repeater-item{justify-content:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-simple-repeater .fi-fo-simple-repeater-item-content{flex:1}.fi-fo-simple-repeater .fi-fo-simple-repeater-item-actions{align-items:center;column-gap:calc(var(--spacing)*1);display:flex}.fi-fo-simple-repeater .fi-fo-simple-repeater-add{justify-content:center;width:100%;display:flex}.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-start,.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-left{justify-content:flex-start}.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-end,.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-right{justify-content:flex-end}.fi-fo-table-repeater{gap:calc(var(--spacing)*3);display:grid}.fi-fo-table-repeater>table{width:100%;display:block}:where(.fi-fo-table-repeater>table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-fo-table-repeater>table{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}:where(.fi-fo-table-repeater>table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-table-repeater>table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-table-repeater>table:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater>table:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-table-repeater>table>thead{white-space:nowrap;display:none}.fi-fo-table-repeater>table>thead>tr>th{border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-fo-table-repeater>table>thead>tr>th:first-of-type{border-start-start-radius:var(--radius-xl)}.fi-fo-table-repeater>table>thead>tr>th:last-of-type{border-start-end-radius:var(--radius-xl)}.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){color:var(--color-white)}.fi-fo-table-repeater>table>thead>tr>th:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-fo-table-repeater>table>thead>tr>th:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-fo-table-repeater>table>thead>tr>th.fi-align-start,.fi-fo-table-repeater>table>thead>tr>th.fi-align-left{text-align:start}.fi-fo-table-repeater>table>thead>tr>th.fi-align-end,.fi-fo-table-repeater>table>thead>tr>th.fi-align-right{text-align:end}.fi-fo-table-repeater>table>thead>tr>th.fi-wrapped{white-space:normal}.fi-fo-table-repeater>table>thead>tr>th:not(.fi-wrapped){white-space:nowrap}.fi-fo-table-repeater>table>thead>tr>th.fi-fo-table-repeater-empty-header-cell{width:calc(var(--spacing)*1)}.fi-fo-table-repeater>table>tbody{display:block}:where(.fi-fo-table-repeater>table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-fo-table-repeater>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-table-repeater>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater>table>tbody>tr{gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6);display:grid}.fi-fo-table-repeater>table>tbody>tr>td{display:block}.fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:none}.fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-start{vertical-align:top}.fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-center{vertical-align:middle}.fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-end{vertical-align:bottom}.fi-fo-table-repeater>table .fi-fo-table-repeater-header-required-mark{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-600)}.fi-fo-table-repeater>table .fi-fo-table-repeater-header-required-mark:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-table-repeater>table .fi-fo-table-repeater-actions{align-items:center;column-gap:calc(var(--spacing)*3);height:100%;display:flex}@supports (container-type:inline-size){.fi-fo-table-repeater{container-type:inline-size}@container (min-width:36rem){.fi-fo-table-repeater>table{display:table}.fi-fo-table-repeater>table>thead{display:table-header-group}.fi-fo-table-repeater>table>tbody{display:table-row-group}.fi-fo-table-repeater>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-fo-table-repeater>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field-label-content,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry-label{display:none}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-toggle-buttons-wrp .fi-fo-field-content-col{grid-auto-columns:1fr}.fi-fo-table-repeater>table .fi-fo-table-repeater-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td{border-color:var(--gray-200);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*1)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-fo-table-repeater.fi-compact .fi-input-wrp{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;background-color:#0000!important}.fi-fo-table-repeater.fi-compact .fi-fo-field-wrp-error-message{padding-inline:calc(var(--spacing)*3);padding-bottom:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact .fi-in-entry-content,.fi-fo-table-repeater.fi-compact .fi-fo-radio{padding-inline:calc(var(--spacing)*3)}}}@supports not (container-type:inline-size){@media (min-width:64rem){.fi-fo-table-repeater>table{display:table}.fi-fo-table-repeater>table>thead{display:table-header-group}.fi-fo-table-repeater>table>tbody{display:table-row-group}.fi-fo-table-repeater>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-fo-table-repeater>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field-label-content,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry-label{display:none}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-toggle-buttons-wrp .fi-fo-field-content-col{grid-auto-columns:1fr}.fi-fo-table-repeater>table .fi-fo-table-repeater-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td{border-color:var(--gray-200);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*1)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-fo-table-repeater.fi-compact .fi-input-wrp{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;background-color:#0000!important}.fi-fo-table-repeater.fi-compact .fi-fo-field-wrp-error-message{padding-inline:calc(var(--spacing)*3);padding-bottom:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact .fi-in-entry-content,.fi-fo-table-repeater.fi-compact .fi-fo-radio{padding-inline:calc(var(--spacing)*3)}}}.fi-fo-table-repeater .fi-fo-table-repeater-add{justify-content:center;width:100%;display:flex}.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-start,.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-left{justify-content:flex-start}.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-end,.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-right{justify-content:flex-end}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file{pointer-events:none;cursor:wait;opacity:.5}.fi-fo-rich-editor .fi-fo-rich-editor-toolbar{column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*2);flex-wrap:wrap;display:flex;position:relative}.fi-fo-rich-editor .fi-fo-rich-editor-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-floating-toolbar{visibility:hidden;z-index:20;margin-top:calc(var(--spacing)*-1);column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300);background-color:var(--color-white);max-width:100%;padding:calc(var(--spacing)*1);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-wrap:wrap;display:flex;position:absolute}.fi-fo-rich-editor .fi-fo-rich-editor-floating-toolbar:where(.dark,.dark *){border-color:var(--gray-600);background-color:var(--gray-800)}.fi-fo-rich-editor .fi-fo-rich-editor-toolbar-group{column-gap:calc(var(--spacing)*1);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool{display:inline-flex;position:relative}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger{height:calc(var(--spacing)*8);cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing)*.5);border-radius:var(--radius-lg);--tw-border-style:none;padding-inline:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-700);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;background-color:#0000;border-style:none;outline-style:none;transition-duration:75ms;display:flex}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:hover{background-color:var(--gray-50)}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:focus-visible{background-color:var(--gray-50)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger.fi-active{background-color:var(--gray-50);color:var(--primary-600)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-trigger.fi-active:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-chevron{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3);color:var(--gray-400)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-chevron:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-menu{z-index:30;gap:calc(var(--spacing)*1);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300);background-color:var(--color-white);padding:calc(var(--spacing)*1);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);inset-inline-start:calc(var(--spacing)*0);display:flex;position:absolute;top:calc(100% + .25rem)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-menu:where(.dark,.dark *){border-color:var(--gray-600);background-color:var(--gray-800)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option{height:calc(var(--spacing)*8);min-width:calc(var(--spacing)*8);cursor:pointer;border-radius:var(--radius-lg);--tw-border-style:none;padding:calc(var(--spacing)*0);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-700);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;background-color:#0000;border-style:none;outline-style:none;justify-content:center;align-items:center;transition-duration:75ms;display:flex}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:hover{background-color:var(--gray-50)}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:focus-visible{background-color:var(--gray-50)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option.fi-active{background-color:var(--gray-50);color:var(--primary-600)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-option.fi-active:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-textual .fi-fo-rich-editor-dropdown-tool-menu{min-width:calc(var(--spacing)*32);flex-direction:column}.fi-fo-rich-editor .fi-fo-rich-editor-dropdown-tool-textual .fi-fo-rich-editor-dropdown-tool-option{min-width:calc(var(--spacing)*0);justify-content:flex-start;gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-normal);font-size:.8125rem;font-weight:var(--font-weight-normal);white-space:nowrap}.fi-fo-rich-editor .fi-fo-rich-editor-tool{height:calc(var(--spacing)*8);min-width:calc(var(--spacing)*8);border-radius:var(--radius-lg);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-700);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;justify-content:center;align-items:center;transition-duration:75ms;display:flex}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-tool:hover{background-color:var(--gray-50)}}.fi-fo-rich-editor .fi-fo-rich-editor-tool:focus-visible{background-color:var(--gray-50)}.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-tool[disabled]{pointer-events:none;cursor:default;opacity:.7}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active{background-color:var(--gray-50);color:var(--primary-600)}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-fo-rich-editor-tool-with-label{align-items:center;column-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*1.5)}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message{align-items:center;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){color:var(--gray-200)}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message .fi-loading-indicator{color:var(--gray-400)}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message{align-items:center;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--danger-200);background-color:var(--danger-50);padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-700);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){color:var(--danger-200)}.fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:column-reverse;display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-content{min-height:calc(var(--spacing)*12);width:100%;padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*3);flex:1;position:relative}.fi-fo-rich-editor span[data-type=mergeTag]{margin-block:calc(var(--spacing)*0);white-space:nowrap;display:inline-block}.fi-fo-rich-editor span[data-type=mergeTag]:before{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);opacity:.6;content:\"{{\";margin-inline-end:calc(var(--spacing)*1)}.fi-fo-rich-editor span[data-type=mergeTag]:after{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);opacity:.6;content:\"}}\";margin-inline-start:calc(var(--spacing)*1)}.fi-fo-rich-editor span[data-type=mention]{margin-block:calc(var(--spacing)*0);background-color:var(--primary-50);padding-inline:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--primary-600);border-radius:.25rem;display:inline-block}.fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){background-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){background-color:color-mix(in oklab,var(--primary-400)10%,transparent)}}.fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-rich-editor .fi-fo-rich-editor-panels{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);width:100%}.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-panel-header{align-items:flex-start;gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-panel-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1}.fi-fo-rich-editor .fi-fo-rich-editor-panel-heading:where(.dark,.dark *){color:var(--color-white)}.fi-fo-rich-editor .fi-fo-rich-editor-panel-close-btn-ctn{flex-shrink:0}.fi-fo-rich-editor .fi-fo-rich-editor-panel{display:grid}:where(.fi-fo-rich-editor .fi-fo-rich-editor-panel>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-fo-rich-editor .fi-fo-rich-editor-panel:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-rich-editor .fi-fo-rich-editor-panel:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tags-list{gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn{cursor:move;border-radius:var(--radius-lg);background-color:var(--color-white);padding:calc(var(--spacing)*1);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-600)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-blocks-list{gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn{cursor:move;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-lg);background-color:var(--color-white);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-600);display:flex}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.fi-fo-rich-editor .tiptap{height:100%}.fi-fo-rich-editor .tiptap:focus{--tw-outline-style:none;outline-style:none}div:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)[data-type=customBlock],img:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}:is(div:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)[data-type=customBlock],img:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)):where(.dark,.dark *){--tw-ring-color:var(--primary-500)}.fi-fo-rich-editor .tiptap p.is-editor-empty:first-child:before{pointer-events:none;float:inline-start;height:calc(var(--spacing)*0);color:var(--gray-400);content:attr(data-placeholder)}.fi-fo-rich-editor .tiptap p.is-editor-empty:first-child:where(.dark,.dark *):before{color:var(--gray-500)}.fi-fo-rich-editor .tiptap [data-type=details]{margin-block:calc(var(--spacing)*6);gap:calc(var(--spacing)*1);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950);display:flex}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]{border-color:color-mix(in oklab,var(--gray-950)20%,transparent)}}.fi-fo-rich-editor .tiptap [data-type=details]{padding:calc(var(--spacing)*4)}.fi-fo-rich-editor .tiptap [data-type=details]:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-rich-editor .tiptap [data-type=details]>div:first-of-type{margin-top:calc(var(--spacing)*0)!important}.fi-fo-rich-editor .tiptap [data-type=details] summary{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);list-style-type:none}.fi-fo-rich-editor .tiptap [data-type=details]>button{margin-top:1px;margin-right:calc(var(--spacing)*2);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);border-radius:var(--radius-md);padding:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;background-color:#0000;justify-content:center;align-items:center;line-height:1;display:flex}@media (hover:hover){.fi-fo-rich-editor .tiptap [data-type=details]>button:hover{background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]>button:hover{background-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-fo-rich-editor .tiptap [data-type=details]>button:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]>button:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-rich-editor .tiptap [data-type=details]>button:before{content:\"▶\"}.fi-fo-rich-editor .tiptap [data-type=details].is-open>button:before{transform:rotate(90deg)}.fi-fo-rich-editor .tiptap [data-type=details]>div{gap:calc(var(--spacing)*4);flex-direction:column;width:100%;display:flex}.fi-fo-rich-editor .tiptap [data-type=details]>div>[data-type=detailsContent]{margin-top:calc(var(--spacing)*0)!important}.fi-fo-rich-editor .tiptap [data-type=details]>div>[data-type=detailsContent]>:last-child{margin-bottom:calc(var(--spacing)*4)}.fi-fo-rich-editor .tiptap table{margin:calc(var(--spacing)*0);table-layout:fixed;border-collapse:collapse;width:100%;overflow:hidden}.fi-fo-rich-editor .tiptap table:first-child{margin-top:calc(var(--spacing)*0)}.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th{border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300);vertical-align:top;min-width:1em;position:relative;padding:calc(var(--spacing)*2)!important}:is(.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th):where(.dark,.dark *){border-color:var(--gray-600)}:is(.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th)>*{margin-bottom:calc(var(--spacing)*0)}.fi-fo-rich-editor .tiptap table th{background-color:var(--gray-100);text-align:start;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-fo-rich-editor .tiptap table th:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white)}.fi-fo-rich-editor .tiptap table .selectedCell:after{pointer-events:none;inset-inline-start:calc(var(--spacing)*0);inset-inline-end:calc(var(--spacing)*0);top:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);z-index:2;background-color:var(--gray-200);position:absolute}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap table .selectedCell:after{background-color:color-mix(in oklab,var(--gray-200)80%,transparent)}}.fi-fo-rich-editor .tiptap table .selectedCell:after{--tw-content:\"\";content:var(--tw-content)}.fi-fo-rich-editor .tiptap table .selectedCell:where(.dark,.dark *):after{background-color:var(--gray-800)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap table .selectedCell:where(.dark,.dark *):after{background-color:color-mix(in oklab,var(--gray-800)80%,transparent)}}.fi-fo-rich-editor .tiptap table .column-resize-handle{pointer-events:none;inset-inline-end:calc(var(--spacing)*0);top:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);width:calc(var(--spacing)*1);background-color:var(--primary-600);position:absolute;margin:calc(var(--spacing)*0)!important}.fi-fo-rich-editor .tiptap .tableWrapper{overflow-x:auto}.fi-fo-rich-editor .tiptap.resize-cursor{cursor:col-resize;cursor:ew-resize}.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{border-color:color-mix(in oklab,var(--gray-950)20%,transparent)}}.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{padding:calc(var(--spacing)*4)}.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-rich-editor .tiptap [data-resize-handle]{z-index:10;background:#00000080;border:1px solid #fffc;border-radius:2px;position:absolute}.fi-fo-rich-editor .tiptap [data-resize-handle]:hover{background:#000c}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle]{margin:0!important}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-left],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-right],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-left],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-right]{width:8px;height:8px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-left]{cursor:nwse-resize;top:-4px;left:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-right]{cursor:nesw-resize;top:-4px;right:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-left]{cursor:nesw-resize;bottom:-4px;left:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-right]{cursor:nwse-resize;bottom:-4px;right:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom]{height:6px;left:8px;right:8px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top]{cursor:ns-resize;top:-3px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom]{cursor:ns-resize;bottom:-3px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=left],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=right]{width:6px;top:8px;bottom:8px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=left]{cursor:ew-resize;left:-3px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=right]{cursor:ew-resize;right:-3px}.fi-fo-rich-editor .tiptap [data-resize-state=true] [data-resize-wrapper]{border-radius:.125rem;outline:1px solid #00000040;position:relative}.fi-fo-rich-editor .tiptap [data-resize-container]{display:inline-block!important}@supports (-webkit-touch-callout:none){.fi-fo-rich-editor .tiptap.ProseMirror{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.fi-fo-rich-editor img{display:inline-block}.fi-fo-rich-editor div[data-type=customBlock]{display:grid}:where(.fi-fo-rich-editor div[data-type=customBlock]>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-fo-rich-editor div[data-type=customBlock]{border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow:hidden}:where(.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header{align-items:flex-start;gap:calc(var(--spacing)*3);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-heading:where(.dark,.dark *){color:var(--color-white)}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-edit-btn-ctn,.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-delete-btn-ctn{flex-shrink:0}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-preview{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3)}@supports (container-type:inline-size){.fi-fo-rich-editor{container-type:inline-size}@container (min-width:42rem){.fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:row}.fi-fo-rich-editor .fi-fo-rich-editor-panels{max-width:var(--container-3xs);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-end-end-radius:var(--radius-lg)}}}@supports not (container-type:inline-size){@media (min-width:48rem){.fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:row}.fi-fo-rich-editor .fi-fo-rich-editor-panels{max-width:var(--container-3xs);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-end-end-radius:var(--radius-lg)}}}:scope .fi-fo-rich-editor-text-color-select-option{align-items:center;gap:calc(var(--spacing)*2);display:flex}:scope .fi-fo-rich-editor-text-color-select-option .fi-fo-rich-editor-text-color-select-option-preview{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5);background-color:var(--color);border-radius:3.40282e38px;flex-shrink:0}:scope .fi-fo-rich-editor-text-color-select-option .fi-fo-rich-editor-text-color-select-option-preview:where(.dark,.dark *){background-color:var(--dark-color)}[x-sortable]:has(.fi-sortable-ghost) .fi-fo-rich-editor{pointer-events:none}.fi-fo-select .fi-hidden{display:none}@media (min-width:40rem){.fi-fo-select-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-slider{gap:calc(var(--spacing)*4);border-radius:var(--radius-lg);border-style:var(--tw-border-style);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);background-color:#0000;border-width:0}.fi-fo-slider:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-slider .noUi-connect{background-color:var(--primary-500)}.fi-fo-slider .noUi-connect:where(.dark,.dark *){background-color:var(--primary-600)}.fi-fo-slider .noUi-connects{border-radius:var(--radius-lg);background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-connects{background-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-fo-slider .noUi-connects:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-connects:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-slider .noUi-handle{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950);position:absolute}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-handle{border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.fi-fo-slider .noUi-handle{background-color:var(--color-white);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);backface-visibility:hidden}.fi-fo-slider .noUi-handle:focus{outline-style:var(--tw-outline-style);outline-width:2px;outline-color:var(--primary-600)}.fi-fo-slider .noUi-handle:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-handle:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-slider .noUi-handle:where(.dark,.dark *){background-color:var(--gray-700)}.fi-fo-slider .noUi-handle:where(.dark,.dark *):focus{outline-color:var(--primary-500)}.fi-fo-slider .noUi-handle:before,.fi-fo-slider .noUi-handle:after{border-style:var(--tw-border-style);background-color:var(--gray-400);border-width:0}.fi-fo-slider .noUi-tooltip{border-radius:var(--radius-md);border-style:var(--tw-border-style);background-color:var(--color-white);color:var(--gray-950);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-width:0}.fi-fo-slider .noUi-tooltip:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white);--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-tooltip:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-slider .noUi-pips .noUi-value{color:var(--gray-950)}.fi-fo-slider .noUi-pips .noUi-value:where(.dark,.dark *){color:var(--color-white)}.fi-fo-slider.fi-fo-slider-vertical{margin-top:calc(var(--spacing)*4);height:calc(var(--spacing)*40)}.fi-fo-slider.fi-fo-slider-vertical.fi-fo-slider-has-tooltips{margin-inline-start:calc(var(--spacing)*10)}.fi-fo-slider:not(.fi-fo-slider-vertical).fi-fo-slider-has-pips{margin-bottom:calc(var(--spacing)*8)}.fi-fo-slider:not(.fi-fo-slider-vertical).fi-fo-slider-has-tooltips{margin-top:calc(var(--spacing)*10)}.fi-fo-slider:not(.fi-fo-slider-vertical) .noUi-pips .noUi-value{margin-top:calc(var(--spacing)*1)}.fi-fo-tags-input.fi-disabled .fi-badge-delete-btn{display:none}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn{gap:calc(var(--spacing)*1.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-top-color:var(--gray-200);width:100%;padding:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn:where(.dark,.dark *){border-top-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-tags-input .fi-fo-tags-input-tags-ctn:where(.dark,.dark *){border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn>template{display:none}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn>.fi-badge.fi-reorderable{cursor:move}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn>.fi-badge .fi-badge-label-ctn{text-align:start;-webkit-user-select:none;user-select:none}@media (min-width:40rem){.fi-fo-tags-input-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-text-input{overflow:hidden}.fi-fo-text-input input.fi-revealable::-ms-reveal{display:none}.fi-fo-textarea{overflow:hidden}.fi-fo-textarea textarea{--tw-border-style:none;width:100%;height:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);background-color:#0000;border-style:none;display:block}.fi-fo-textarea textarea::placeholder{color:var(--gray-400)}.fi-fo-textarea textarea:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.fi-fo-textarea textarea:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.fi-fo-textarea textarea:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}.fi-fo-textarea textarea:where(.dark,.dark *){color:var(--color-white)}.fi-fo-textarea textarea:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.fi-fo-textarea textarea:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.fi-fo-textarea textarea:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}@supports (-webkit-touch-callout:none){.fi-fo-textarea textarea{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.fi-fo-textarea.fi-autosizable textarea{resize:none}@media (min-width:40rem){.fi-fo-textarea-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-toggle-buttons.fi-btn-group{width:max-content}.fi-fo-toggle-buttons:not(.fi-btn-group){gap:calc(var(--spacing)*3)}.fi-fo-toggle-buttons:not(.fi-btn-group).fi-inline{flex-wrap:wrap;display:flex}.fi-fo-toggle-buttons:not(.fi-btn-group):not(.fi-inline).fi-grid-direction-col{margin-top:calc(var(--spacing)*-3)}.fi-fo-toggle-buttons:not(.fi-btn-group):not(.fi-inline).fi-grid-direction-col .fi-fo-toggle-buttons-btn-ctn{break-inside:avoid;padding-top:calc(var(--spacing)*3)}.fi-fo-toggle-buttons .fi-fo-toggle-buttons-input{pointer-events:none;opacity:0;position:absolute}@media (min-width:40rem){.fi-fo-toggle-buttons-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-in-code .phiki{border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow-x:auto}.fi-in-code .phiki:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-in-code .phiki:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-in-code:where(.dark,.dark *) .phiki,.fi-in-code:where(.dark,.dark *) .phiki span{color:var(--phiki-dark-color)!important;background-color:var(--phiki-dark-background-color)!important;font-style:var(--phiki-dark-font-style)!important;font-weight:var(--phiki-dark-font-weight)!important;-webkit-text-decoration:var(--phiki-dark-text-decoration)!important;-webkit-text-decoration:var(--phiki-dark-text-decoration)!important;text-decoration:var(--phiki-dark-text-decoration)!important}.fi-in-code.fi-copyable{cursor:pointer}.fi-in-color{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-in-color.fi-wrapped{flex-wrap:wrap}.fi-in-color.fi-align-start,.fi-in-color.fi-align-left{justify-content:flex-start}.fi-in-color.fi-align-center{justify-content:center}.fi-in-color.fi-align-end,.fi-in-color.fi-align-right{justify-content:flex-end}.fi-in-color.fi-align-justify,.fi-in-color.fi-align-between{justify-content:space-between}.fi-in-color>.fi-in-color-item{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6);border-radius:var(--radius-md)}.fi-in-color>.fi-in-color-item.fi-copyable{cursor:pointer}.fi-in-entry{row-gap:calc(var(--spacing)*2);display:grid}@media (min-width:40rem){.fi-in-entry.fi-in-entry-has-inline-label{align-items:flex-start;column-gap:calc(var(--spacing)*4);grid-template-columns:repeat(3,minmax(0,1fr))}.fi-in-entry.fi-in-entry-has-inline-label .fi-in-entry-content-col{grid-column:span 2/span 2}}.fi-in-entry .fi-in-entry-label-ctn{align-items:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.fi-in-entry .fi-in-entry-label-ctn>.fi-sc:first-child{flex-grow:0}.fi-in-entry .fi-in-entry-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-in-entry .fi-in-entry-label:where(.dark,.dark *){color:var(--color-white)}.fi-in-entry .fi-in-entry-label.fi-hidden{display:none}.fi-in-entry .fi-in-entry-label-col,.fi-in-entry .fi-in-entry-content-col{row-gap:calc(var(--spacing)*2);grid-auto-columns:minmax(0,1fr);display:grid}.fi-in-entry .fi-in-entry-content-ctn{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;display:flex}.fi-in-entry .fi-in-entry-content{text-align:start;width:100%;display:block}.fi-in-entry .fi-in-entry-content.fi-align-center{text-align:center}.fi-in-entry .fi-in-entry-content.fi-align-end{text-align:end}.fi-in-entry .fi-in-entry-content.fi-align-left{text-align:left}.fi-in-entry .fi-in-entry-content.fi-align-right{text-align:right}.fi-in-entry .fi-in-entry-content.fi-align-justify,.fi-in-entry .fi-in-entry-content.fi-align-between{text-align:justify}.fi-in-entry .fi-in-placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-400)}.fi-in-entry .fi-in-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-in-key-value{table-layout:auto;width:100%}:where(.fi-in-key-value>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-in-key-value{border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}:where(.fi-in-key-value:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-key-value:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-key-value:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-key-value:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-key-value:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-in-key-value:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-key-value th{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-in-key-value th:where(.dark,.dark *){color:var(--gray-200)}:where(.fi-in-key-value tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-in-key-value tbody{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media (min-width:40rem){.fi-in-key-value tbody{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}}:where(.fi-in-key-value tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-key-value tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.fi-in-key-value tr>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));border-color:var(--gray-200)}:where(.fi-in-key-value tr:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}:where(.fi-in-key-value tr:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-key-value tr:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-key-value td{width:50%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);overflow-wrap:anywhere}.fi-in-key-value td.fi-in-placeholder{width:100%;padding-block:calc(var(--spacing)*2);text-align:center;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.fi-in-icon{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-in-icon.fi-wrapped{flex-wrap:wrap}.fi-in-icon.fi-in-icon-has-line-breaks{flex-direction:column}.fi-in-icon.fi-align-start,.fi-in-icon.fi-align-left{justify-content:flex-start}.fi-in-icon.fi-align-center{justify-content:center}.fi-in-icon.fi-align-end,.fi-in-icon.fi-align-right{justify-content:flex-end}.fi-in-icon.fi-align-justify,.fi-in-icon.fi-align-between{justify-content:space-between}.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon{color:var(--gray-400)}:is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon).fi-color{color:var(--text)}:is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon).fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-in-image{align-items:center;gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-in-image img{object-fit:cover;object-position:center;max-width:none}.fi-in-image.fi-circular img{border-radius:3.40282e38px}.fi-in-image.fi-in-image-ring img,.fi-in-image.fi-in-image-ring .fi-in-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-white)}:is(.fi-in-image.fi-in-image-ring img,.fi-in-image.fi-in-image-ring .fi-in-image-limited-remaining-text):where(.dark,.dark *){--tw-ring-color:var(--gray-900)}.fi-in-image.fi-in-image-ring.fi-in-image-ring-1 img,.fi-in-image.fi-in-image-ring.fi-in-image-ring-1 .fi-in-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-in-image.fi-in-image-ring.fi-in-image-ring-2 img,.fi-in-image.fi-in-image-ring.fi-in-image-ring-2 .fi-in-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-in-image.fi-in-image-ring.fi-in-image-ring-4 img,.fi-in-image.fi-in-image-ring.fi-in-image-ring-4 .fi-in-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-in-image.fi-in-image-overlap-1{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-2{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-3{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-4{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-5{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-6{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-7{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-8{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-wrapped{flex-wrap:wrap}.fi-in-image.fi-align-start,.fi-in-image.fi-align-left{justify-content:flex-start}.fi-in-image.fi-align-center{justify-content:center}.fi-in-image.fi-align-end,.fi-in-image.fi-align-right{justify-content:flex-end}.fi-in-image.fi-align-justify,.fi-in-image.fi-align-between{justify-content:space-between}.fi-in-image.fi-stacked .fi-in-image-limited-remaining-text{background-color:var(--gray-100);border-radius:3.40282e38px}.fi-in-image.fi-stacked .fi-in-image-limited-remaining-text:where(.dark,.dark *){background-color:var(--gray-800)}.fi-in-image .fi-in-image-limited-remaining-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);justify-content:center;align-items:center;display:flex}.fi-in-image .fi-in-image-limited-remaining-text:where(.dark,.dark *){color:var(--gray-400)}.fi-in-image .fi-in-image-limited-remaining-text.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-in-image .fi-in-image-limited-remaining-text.fi-size-base,.fi-in-image .fi-in-image-limited-remaining-text.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-in-image .fi-in-image-limited-remaining-text.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}ul.fi-in-repeatable{gap:calc(var(--spacing)*4)}.fi-in-repeatable>.fi-in-repeatable-item{display:block}.fi-in-repeatable.fi-contained>.fi-in-repeatable-item{border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-table-repeatable{gap:calc(var(--spacing)*3);display:grid}.fi-in-table-repeatable>table{width:100%;display:block}:where(.fi-in-table-repeatable>table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-in-table-repeatable>table{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}:where(.fi-in-table-repeatable>table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-table-repeatable>table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-table-repeatable>table:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-in-table-repeatable>table:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-table-repeatable>table>thead{white-space:nowrap;display:none}.fi-in-table-repeatable>table>thead>tr>th{border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-in-table-repeatable>table>thead>tr>th:first-of-type{border-start-start-radius:var(--radius-xl)}.fi-in-table-repeatable>table>thead>tr>th:last-of-type{border-start-end-radius:var(--radius-xl)}.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){color:var(--color-white)}.fi-in-table-repeatable>table>thead>tr>th:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-in-table-repeatable>table>thead>tr>th:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-in-table-repeatable>table>thead>tr>th.fi-align-center{text-align:center}.fi-in-table-repeatable>table>thead>tr>th.fi-align-end,.fi-in-table-repeatable>table>thead>tr>th.fi-align-right{text-align:end}.fi-in-table-repeatable>table>thead>tr>th.fi-wrapped{white-space:normal}.fi-in-table-repeatable>table>thead>tr>th:not(.fi-wrapped){white-space:nowrap}.fi-in-table-repeatable>table>thead>tr>th.fi-in-table-repeatable-empty-header-cell{width:calc(var(--spacing)*1)}.fi-in-table-repeatable>table>tbody{display:block}:where(.fi-in-table-repeatable>table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-in-table-repeatable>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-table-repeatable>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-table-repeatable>table>tbody>tr{gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6);display:grid}.fi-in-table-repeatable>table>tbody>tr>td{display:block}.fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:none}@supports (container-type:inline-size){.fi-in-table-repeatable{container-type:inline-size}@container (min-width:36rem){.fi-in-table-repeatable>table{display:table}.fi-in-table-repeatable>table>thead{display:table-header-group}.fi-in-table-repeatable>table>tbody{display:table-row-group}.fi-in-table-repeatable>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-in-table-repeatable>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry-label{display:none}.fi-in-table-repeatable>table .fi-in-table-repeatable-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}}}@supports not (container-type:inline-size){@media (min-width:64rem){.fi-in-table-repeatable>table{display:table}.fi-in-table-repeatable>table>thead{display:table-header-group}.fi-in-table-repeatable>table>tbody{display:table-row-group}.fi-in-table-repeatable>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-in-table-repeatable>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry-label{display:none}}}.fi-in-text{width:100%}.fi-in-text.fi-in-text-affixed{gap:calc(var(--spacing)*3);display:flex}.fi-in-text .fi-in-text-affixed-content{min-width:calc(var(--spacing)*0);flex:1}.fi-in-text .fi-in-text-affix{align-items:center;gap:calc(var(--spacing)*3);align-self:stretch;display:flex}.fi-in-text.fi-in-text-list-limited{flex-direction:column;display:flex}.fi-in-text.fi-in-text-list-limited.fi-in-text-has-badges{row-gap:calc(var(--spacing)*2)}.fi-in-text.fi-in-text-list-limited:not(.fi-in-text-has-badges){row-gap:calc(var(--spacing)*1)}ul.fi-in-text.fi-bulleted,.fi-in-text.fi-bulleted ul{list-style-type:disc;list-style-position:inside}ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul{column-gap:calc(var(--spacing)*1.5);display:flex}:is(ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul).fi-wrapped,:is(ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul).fi-in-text-has-line-breaks,:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):is(.fi-in-text-has-line-breaks ul){row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul){column-gap:calc(var(--spacing)*1.5);display:flex}:is(:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul)).fi-wrapped,:is(:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul)):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}.fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks){white-space:normal;overflow-wrap:break-word}.fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks) .fi-badge,.fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks) .fi-in-text-list-limited-message{white-space:nowrap}.fi-in-text>.fi-in-text-list-limited-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-in-text>.fi-in-text-list-limited-message:where(.dark,.dark *){color:var(--gray-400)}.fi-in-text.fi-align-center{text-align:center}ul.fi-in-text.fi-align-center,.fi-in-text.fi-align-center ul{justify-content:center}.fi-in-text.fi-align-end,.fi-in-text.fi-align-right{text-align:end}ul:is(.fi-in-text.fi-align-end,.fi-in-text.fi-align-right),:is(.fi-in-text.fi-align-end,.fi-in-text.fi-align-right) ul{justify-content:flex-end}.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between{text-align:justify}ul:is(.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between),:is(.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between) ul{justify-content:space-between}.fi-in-text-item{color:var(--gray-950)}.fi-in-text-item:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.fi-in-text-item a:hover{text-decoration-line:underline}}.fi-in-text-item a:focus-visible{text-decoration-line:underline}.fi-in-text-item:not(.fi-bulleted li.fi-in-text-item){-webkit-line-clamp:var(--line-clamp,none);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.fi-in-text-item>.fi-copyable{cursor:pointer}.fi-in-text-item.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-in-text-item.fi-size-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-in-text-item.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-in-text-item.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-in-text-item.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-in-text-item.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-in-text-item.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-in-text-item.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-in-text-item.fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-in-text-item.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-in-text-item.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-in-text-item.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-in-text-item.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-in-text-item.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.fi-in-text-item.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif}.fi-in-text-item.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.fi-in-text-item.fi-color{color:var(--text)}.fi-in-text-item.fi-color:where(.dark,.dark *){color:var(--dark-text)}li.fi-in-text-item.fi-color::marker{color:var(--gray-950)}li.fi-in-text-item.fi-color:where(.dark,.dark *)::marker{color:var(--color-white)}.fi-in-text-item.fi-color-gray{color:var(--gray-500)}.fi-in-text-item.fi-color-gray:where(.dark,.dark *){color:var(--gray-400)}li.fi-in-text-item.fi-color-gray::marker{color:var(--gray-950)}.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon{color:var(--gray-400);flex-shrink:0;display:inline-block}:is(.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon).fi-color{color:var(--color-500)}.fi-no-database{display:flex}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-heading{display:inline-block;position:relative}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-heading .fi-badge{inset-inline-start:100%;top:calc(var(--spacing)*-1);width:max-content;margin-inline-start:calc(var(--spacing)*1);position:absolute}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-header .fi-ac{margin-top:calc(var(--spacing)*2)}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content{margin-inline:calc(var(--spacing)*-6);margin-top:calc(var(--spacing)*-6);row-gap:calc(var(--spacing)*0)}:where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-no-database .fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-footer) .fi-modal-content{margin-bottom:calc(var(--spacing)*-6)}.fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200)}.fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-no-database .fi-no-notification-unread-ctn{position:relative}.fi-no-database .fi-no-notification-unread-ctn:before{content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);height:100%;width:calc(var(--spacing)*.5);content:var(--tw-content);background-color:var(--primary-600);position:absolute;inset-inline-start:calc(var(--spacing)*0)}.fi-no-database .fi-no-notification-unread-ctn:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--primary-500)}.fi-no-notification{pointer-events:auto;visibility:hidden;gap:calc(var(--spacing)*3);width:100%;padding:calc(var(--spacing)*4);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;flex-shrink:0;transition-duration:.3s;display:flex;overflow:hidden}.fi-no-notification .fi-no-notification-icon{color:var(--gray-400)}.fi-no-notification .fi-no-notification-icon.fi-color{color:var(--color-400)}.fi-no-notification .fi-no-notification-main{margin-top:calc(var(--spacing)*.5);gap:calc(var(--spacing)*3);flex:1;display:grid}.fi-no-notification .fi-no-notification-text{gap:calc(var(--spacing)*1);display:grid}.fi-no-notification .fi-no-notification-title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-no-notification .fi-no-notification-title:where(.dark,.dark *){color:var(--color-white)}.fi-no-notification .fi-no-notification-date{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-no-notification .fi-no-notification-date:where(.dark,.dark *){color:var(--gray-400)}.fi-no-notification .fi-no-notification-body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-wrap:pretty;overflow-wrap:break-word;color:var(--gray-500);overflow:hidden}.fi-no-notification .fi-no-notification-body:where(.dark,.dark *){color:var(--gray-400)}.fi-no-notification .fi-no-notification-body>p:not(:first-of-type){margin-top:calc(var(--spacing)*1)}.fi-no-notification:not(.fi-inline){max-width:var(--container-sm);gap:calc(var(--spacing)*3);border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex}.fi-no-notification:not(.fi-inline):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-no-notification:not(.fi-inline):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-no-notification:not(.fi-inline).fi-color{--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification:not(.fi-inline).fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)20%,transparent)}}.fi-no-notification:not(.fi-inline).fi-color:where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification:not(.fi-inline).fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.fi-no-notification:not(.fi-inline).fi-transition-leave-end{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.fi-no-notification.fi-color{background-color:#fff}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color{background-color:color-mix(in oklab,white 90%,var(--color-400))}}.fi-no-notification.fi-color:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)90%,var(--color-400))}}.fi-no-notification.fi-color .fi-no-notification-body{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color .fi-no-notification-body{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}.fi-no-notification.fi-color .fi-no-notification-body:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color .fi-no-notification-body:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)75%,transparent)}}.fi-no-notification.fi-transition-enter-start,.fi-no-notification.fi-transition-leave-end{opacity:0}:is(.fi-no.fi-align-start,.fi-no.fi-align-left) .fi-no-notification.fi-transition-enter-start{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.fi-no.fi-align-end,.fi-no.fi-align-right) .fi-no-notification.fi-transition-enter-start{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-no.fi-align-center.fi-vertical-align-start .fi-no-notification.fi-transition-enter-start{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-no.fi-align-center.fi-vertical-align-end .fi-no-notification.fi-transition-enter-start{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-no{pointer-events:none;inset:calc(var(--spacing)*4);z-index:50;gap:calc(var(--spacing)*3);margin-inline:auto;display:flex;position:fixed}.fi-no.fi-align-start,.fi-no.fi-align-left{align-items:flex-start}.fi-no.fi-align-center{align-items:center}.fi-no.fi-align-end,.fi-no.fi-align-right{align-items:flex-end}.fi-no.fi-vertical-align-start{flex-direction:column-reverse;justify-content:flex-end}.fi-no.fi-vertical-align-center{flex-direction:column;justify-content:center}.fi-no.fi-vertical-align-end{flex-direction:column;justify-content:flex-end}.fi-sc-actions{gap:calc(var(--spacing)*2);flex-direction:column;height:100%;display:flex}.fi-sc-actions .fi-sc-actions-label-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-sc-actions .fi-sc-actions-label-ctn .fi-sc-actions-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-sc-actions .fi-sc-actions-label-ctn .fi-sc-actions-label:where(.dark,.dark *){color:var(--color-white)}.fi-sc-actions.fi-sticky .fi-ac{bottom:calc(var(--spacing)*0);margin-inline:calc(var(--spacing)*-4);width:100%;transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:fixed}@media (min-width:48rem){.fi-sc-actions.fi-sticky .fi-ac{bottom:calc(var(--spacing)*4);border-radius:var(--radius-xl)}}.fi-sc-actions.fi-sticky .fi-ac:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-actions.fi-sticky .fi-ac:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-actions.fi-vertical-align-start{justify-content:flex-start}.fi-sc-actions.fi-vertical-align-center{justify-content:center}.fi-sc-actions.fi-vertical-align-end{justify-content:flex-end}.fi-sc-flex{gap:calc(var(--spacing)*6);display:flex}.fi-sc-flex.fi-align-start,.fi-sc-flex.fi-align-left{justify-content:flex-start}.fi-sc-flex.fi-align-center{justify-content:center}.fi-sc-flex.fi-align-end,.fi-sc-flex.fi-align-right{justify-content:flex-end}.fi-sc-flex.fi-align-between,.fi-sc-flex.fi-align-justify{justify-content:space-between}.fi-sc-flex.fi-dense{gap:calc(var(--spacing)*3)}.fi-sc-flex>.fi-hidden{display:none}.fi-sc-flex>.fi-growable{flex:1;width:100%}.fi-sc-flex.fi-from-default{align-items:flex-start}.fi-sc-flex.fi-from-default.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-default.fi-vertical-align-end{align-items:flex-end}.fi-sc-flex.fi-from-sm{flex-direction:column}@media (min-width:40rem){.fi-sc-flex.fi-from-sm{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-sm.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-sm.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-md{flex-direction:column}@media (min-width:48rem){.fi-sc-flex.fi-from-md{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-md.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-md.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-lg{flex-direction:column}@media (min-width:64rem){.fi-sc-flex.fi-from-lg{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-lg.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-lg.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-xl{flex-direction:column}@media (min-width:80rem){.fi-sc-flex.fi-from-xl{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-xl.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-xl.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-2xl{flex-direction:column}@media (min-width:96rem){.fi-sc-flex.fi-from-2xl{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-2xl.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-2xl.fi-vertical-align-end{align-items:flex-end}}.fi-sc-form{gap:calc(var(--spacing)*6);flex-direction:column;display:flex}.fi-sc-form.fi-dense{gap:calc(var(--spacing)*3)}.fi-sc-fused-group>.fi-sc{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}.fi-sc-fused-group>.fi-sc:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}.fi-sc-fused-group>.fi-sc:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-sc-fused-group>.fi-sc:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-sc-fused-group>.fi-sc:where(.dark,.dark *):focus-within{--tw-ring-color:var(--primary-500)}:where(.fi-sc-fused-group .fi-sc>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){:where(.fi-sc-fused-group .fi-sc>:not(:last-child)){border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.fi-sc-fused-group .fi-sc{border-radius:var(--radius-lg)}:where(.fi-sc-fused-group .fi-sc:where(.dark,.dark *)>:not(:last-child)){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){:where(.fi-sc-fused-group .fi-sc:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-sc-fused-group .fi-sc .fi-sc-component,.fi-sc-fused-group .fi-sc .fi-sc-component .fi-fo-field,.fi-sc-fused-group .fi-sc .fi-sc-component .fi-input{min-height:100%}.fi-sc-fused-group .fi-sc .fi-sc-component .fi-sc-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-sc-fused-group .fi-sc>:first-child .fi-input-wrp{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc>:last-child .fi-input-wrp{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}:where(.fi-sc-fused-group .fi-sc.fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}@media (min-width:40rem){:where(.fi-sc-fused-group .fi-sc.sm\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.sm\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.sm\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:48rem){:where(.fi-sc-fused-group .fi-sc.md\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.md\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.md\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:64rem){:where(.fi-sc-fused-group .fi-sc.lg\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.lg\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.lg\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:80rem){:where(.fi-sc-fused-group .fi-sc.xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:96rem){:where(.fi-sc-fused-group .fi-sc.\\32 xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\32 xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\32 xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@supports (container-type:inline-size){@container (min-width:16rem){:where(.fi-sc-fused-group .fi-sc.\\@3xs\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@3xs\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@3xs\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:18rem){:where(.fi-sc-fused-group .fi-sc.\\@2xs\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@2xs\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@2xs\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:20rem){:where(.fi-sc-fused-group .fi-sc.\\@xs\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@xs\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@xs\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:24rem){:where(.fi-sc-fused-group .fi-sc.\\@sm\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@sm\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@sm\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:28rem){:where(.fi-sc-fused-group .fi-sc.\\@md\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@md\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@md\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:32rem){:where(.fi-sc-fused-group .fi-sc.\\@lg\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@lg\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@lg\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:36rem){:where(.fi-sc-fused-group .fi-sc.\\@xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:42rem){:where(.fi-sc-fused-group .fi-sc.\\@2xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@2xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@2xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:48rem){:where(.fi-sc-fused-group .fi-sc.\\@3xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@3xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@3xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:56rem){:where(.fi-sc-fused-group .fi-sc.\\@4xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@4xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@4xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:64rem){:where(.fi-sc-fused-group .fi-sc.\\@5xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@5xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@5xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:72rem){:where(.fi-sc-fused-group .fi-sc.\\@6xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@6xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@6xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:80rem){:where(.fi-sc-fused-group .fi-sc.\\@7xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\@7xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\@7xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}}@supports not (container-type:inline-size){@media (min-width:40rem){:where(.fi-sc-fused-group .fi-sc.\\!\\@sm\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\!\\@sm\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\!\\@sm\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:48rem){:where(.fi-sc-fused-group .fi-sc.\\!\\@md\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\!\\@md\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\!\\@md\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:64rem){:where(.fi-sc-fused-group .fi-sc.\\!\\@lg\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\!\\@lg\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\!\\@lg\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:80rem){:where(.fi-sc-fused-group .fi-sc.\\!\\@xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\!\\@xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\!\\@xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:96rem){:where(.fi-sc-fused-group .fi-sc.\\!\\@2xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\\!\\@2xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\\!\\@2xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}}.fi-sc-fused-group .fi-input-wrp{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:0}.fi-sc-fused-group .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):focus-within,.fi-sc-fused-group .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-sc-icon{color:var(--gray-400)}.fi-sc-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sc-icon.fi-color{color:var(--color-500)}.fi-sc-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.fi-sc-image{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300)}.fi-sc-image:where(.dark,.dark *){border-color:#0000}.fi-sc-image.fi-align-center{margin-inline:auto}.fi-sc-image.fi-align-end,.fi-sc-image.fi-align-right{margin-inline-start:auto}.fi-sc-section{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.fi-sc-section .fi-sc-section-label-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-sc-section .fi-sc-section-label-ctn .fi-sc-section-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-sc-section .fi-sc-section-label-ctn .fi-sc-section-label:where(.dark,.dark *){color:var(--color-white)}.fi-sc-tabs{flex-direction:column;display:flex}.fi-sc-tabs .fi-tabs.fi-invisible{visibility:hidden}.fi-sc-tabs .fi-sc-tabs-tab{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.fi-sc-tabs .fi-sc-tabs-tab{outline-offset:2px;outline:2px solid #0000}}.fi-sc-tabs .fi-sc-tabs-tab.fi-active{margin-top:calc(var(--spacing)*6)}.fi-sc-tabs .fi-sc-tabs-tab:not(.fi-active){visibility:hidden;height:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);position:absolute;overflow:hidden}.fi-sc-tabs.fi-contained{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-sc-tabs.fi-contained:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-tabs.fi-contained:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-tabs.fi-contained .fi-sc-tabs-tab.fi-active{margin-top:calc(var(--spacing)*0);padding:calc(var(--spacing)*6)}.fi-sc-tabs.fi-vertical{flex-direction:row}.fi-sc-tabs.fi-vertical .fi-sc-tabs-tab.fi-active{margin-inline-start:calc(var(--spacing)*6);margin-top:calc(var(--spacing)*0);flex:1}.fi-sc-text.fi-copyable{cursor:pointer}.fi-sc-text.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.fi-sc-text.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif}.fi-sc-text.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.fi-sc-text:not(.fi-badge){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--gray-600);display:inline-block}.fi-sc-text:not(.fi-badge):where(.dark,.dark *){color:var(--gray-400)}.fi-sc-text:not(.fi-badge).fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-sc-text:not(.fi-badge).fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-sc-text:not(.fi-badge).fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-sc-text:not(.fi-badge).fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-sc-text:not(.fi-badge).fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-sc-text:not(.fi-badge).fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-sc-text:not(.fi-badge).fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-sc-text:not(.fi-badge).fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-sc-text:not(.fi-badge).fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-sc-text:not(.fi-badge).fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-sc-text:not(.fi-badge).fi-color-neutral{color:var(--gray-950)}.fi-sc-text:not(.fi-badge).fi-color-neutral:where(.dark,.dark *){color:var(--color-white)}.fi-sc-text:not(.fi-badge).fi-color:not(.fi-color-neutral){color:var(--text)}.fi-sc-text:not(.fi-badge).fi-color:not(.fi-color-neutral):where(.dark,.dark *){color:var(--dark-text)}.fi-sc-text:not(.fi-badge).fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-sc-text:not(.fi-badge).fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-sc-unordered-list{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-inline-start:calc(var(--spacing)*3);list-style-type:disc}.fi-sc-unordered-list.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-sc-unordered-list.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-sc-unordered-list.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-sc-wizard{flex-direction:column;display:flex}.fi-sc-wizard .fi-sc-wizard-header{display:grid}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header{grid-auto-flow:column;overflow-x:auto}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step{display:flex;position:relative}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active){display:none}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active){display:flex}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn{align-items:center;column-gap:calc(var(--spacing)*4);height:100%;padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*4);text-align:start;display:flex}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10);border-radius:3.40282e38px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text{justify-items:start;display:grid}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text{width:max-content;max-width:calc(var(--spacing)*60)}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-description{text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-description:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator{height:100%;width:calc(var(--spacing)*5);color:var(--gray-200);display:none;position:absolute;inset-inline-end:calc(var(--spacing)*0)}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator{display:block}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(.dark,.dark *){color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{background-color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){background-color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--color-white)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--gray-950)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--color-white)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-style:var(--tw-border-style);border-width:2px}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed).fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed).fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon:where(.dark,.dark *){color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed):not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed):not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){border-color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number:where(.dark,.dark *){color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--primary-700)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--primary-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-color:var(--gray-300)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){border-color:var(--gray-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-step{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.fi-sc-wizard .fi-sc-wizard-step{outline-offset:2px;outline:2px solid #0000}}.fi-sc-wizard .fi-sc-wizard-step:not(.fi-active){visibility:hidden;height:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);position:absolute;overflow:hidden}.fi-sc-wizard:not(.fi-sc-wizard-header-hidden) .fi-sc-wizard-step.fi-active{margin-top:calc(var(--spacing)*6)}.fi-sc-wizard .fi-sc-wizard-footer{justify-content:space-between;align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-sc-wizard .fi-sc-wizard-footer>.fi-hidden{display:none}.fi-sc-wizard .fi-sc-wizard-footer>.fi-disabled{pointer-events:none;opacity:.7}.fi-sc-wizard.fi-contained{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-sc-wizard.fi-contained:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard.fi-contained:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-wizard.fi-contained .fi-sc-wizard-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200)}.fi-sc-wizard.fi-contained .fi-sc-wizard-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard.fi-contained .fi-sc-wizard-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-wizard.fi-contained .fi-sc-wizard-step.fi-active{margin-top:calc(var(--spacing)*0);padding:calc(var(--spacing)*6)}.fi-sc-wizard.fi-contained .fi-sc-wizard-footer{padding-inline:calc(var(--spacing)*6);padding-bottom:calc(var(--spacing)*6)}.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-footer{margin-top:calc(var(--spacing)*6)}.fi-sc{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-sc.fi-inline{flex-wrap:wrap;flex-grow:1;align-items:center;display:flex}.fi-sc.fi-inline>.fi-sc-action:not(.fi-hidden){display:contents}.fi-sc.fi-sc-has-gap{gap:calc(var(--spacing)*6)}.fi-sc.fi-sc-has-gap.fi-sc-dense{gap:calc(var(--spacing)*3)}.fi-sc.fi-align-start,.fi-sc.fi-align-left{justify-content:flex-start}.fi-sc.fi-align-center{justify-content:center}.fi-sc.fi-align-end,.fi-sc.fi-align-right{justify-content:flex-end}.fi-sc.fi-align-between,.fi-sc.fi-align-justify{justify-content:space-between}.fi-sc>.fi-hidden{display:none}.fi-sc>.fi-grid-col.fi-width-xs{max-width:var(--container-xs)}.fi-sc>.fi-grid-col.fi-width-sm{max-width:var(--container-sm)}.fi-sc>.fi-grid-col.fi-width-md{max-width:var(--container-md)}.fi-sc>.fi-grid-col.fi-width-lg{max-width:var(--container-lg)}.fi-sc>.fi-grid-col.fi-width-xl{max-width:var(--container-xl)}.fi-sc>.fi-grid-col.fi-width-2xl{max-width:var(--container-2xl)}.fi-sc>.fi-grid-col.fi-width-3xl{max-width:var(--container-3xl)}.fi-sc>.fi-grid-col.fi-width-4xl{max-width:var(--container-4xl)}.fi-sc>.fi-grid-col.fi-width-5xl{max-width:var(--container-5xl)}.fi-sc>.fi-grid-col.fi-width-6xl{max-width:var(--container-6xl)}.fi-sc>.fi-grid-col.fi-width-7xl{max-width:var(--container-7xl)}.fi-sc>.fi-grid-col>.fi-sc-component{height:100%}.fi-ta-actions{justify-content:flex-end;align-items:center;gap:calc(var(--spacing)*3);flex-shrink:0;max-width:100%;display:flex}.fi-ta-actions>*{flex-shrink:0}.fi-ta-actions.fi-wrapped{flex-wrap:wrap}@media (min-width:40rem){.fi-ta-actions.sm\\:fi-not-wrapped{flex-wrap:nowrap}}.fi-ta-actions.fi-align-center{justify-content:center}.fi-ta-actions.fi-align-start{justify-content:flex-start}.fi-ta-actions.fi-align-between{justify-content:space-between}@media (min-width:48rem){.fi-ta-actions.md\\:fi-align-end{justify-content:flex-end}}.fi-ta-cell{padding:calc(var(--spacing)*0)}.fi-ta-cell:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.fi-ta-cell:last-of-type{padding-inline-end:calc(var(--spacing)*1)}@media (min-width:40rem){.fi-ta-cell:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.fi-ta-cell:last-of-type{padding-inline-end:calc(var(--spacing)*3)}}.fi-ta-cell.fi-vertical-align-start{vertical-align:top}.fi-ta-cell.fi-vertical-align-end{vertical-align:bottom}@media (min-width:40rem){.fi-ta-cell.sm\\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-cell.md\\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-cell.lg\\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-cell.xl\\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-cell.\\32 xl\\:fi-hidden{display:none}}.fi-ta-cell.sm\\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-cell.sm\\:fi-visible{display:table-cell}}.fi-ta-cell.md\\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-cell.md\\:fi-visible{display:table-cell}}.fi-ta-cell.lg\\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-cell.lg\\:fi-visible{display:table-cell}}.fi-ta-cell.xl\\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-cell.xl\\:fi-visible{display:table-cell}}.fi-ta-cell.\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-cell.\\32 xl\\:fi-visible{display:table-cell}}.fi-ta-cell .fi-ta-col{text-align:start;justify-content:flex-start;width:100%;display:flex}.fi-ta-cell .fi-ta-col:disabled{pointer-events:none}.fi-ta-cell:has(.fi-ta-reorder-handle){width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3)}.fi-ta-cell:has(.fi-ta-reorder-handle):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-reorder-handle):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell:has(.fi-ta-reorder-handle):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell:has(.fi-ta-reorder-handle):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell:has(.fi-ta-actions){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);white-space:nowrap}.fi-ta-cell:has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell:has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell:has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell:has(.fi-ta-record-checkbox){width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-record-checkbox):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-record-checkbox):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell:has(.fi-ta-record-checkbox):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell:has(.fi-ta-record-checkbox):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell .fi-ta-placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-400)}.fi-ta-cell .fi-ta-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-cell.fi-ta-summary-row-heading-cell{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-cell.fi-ta-summary-row-heading-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell.fi-ta-summary-row-heading-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell.fi-ta-summary-row-heading-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-cell.fi-align-start{text-align:start}.fi-ta-cell.fi-align-center{text-align:center}.fi-ta-cell.fi-align-end{text-align:end}.fi-ta-cell.fi-align-left{text-align:left}.fi-ta-cell.fi-align-right{text-align:right}.fi-ta-cell.fi-align-justify,.fi-ta-cell.fi-align-between{text-align:justify}.fi-ta-cell.fi-ta-summary-header-cell{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-cell.fi-ta-summary-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}}.fi-ta-cell.fi-ta-summary-header-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-cell.fi-ta-summary-header-cell.fi-wrapped,.fi-ta-cell.fi-ta-summary-header-cell:not(.fi-wrapped){white-space:nowrap}.fi-ta-cell.fi-ta-individual-search-cell{min-width:calc(var(--spacing)*48);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-ta-cell .fi-ta-reorder-handle{cursor:move}.fi-ta-cell.fi-ta-selection-cell{width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-cell.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell.fi-ta-group-selection-cell{width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3)}.fi-ta-cell.fi-ta-group-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell.fi-ta-group-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell.fi-ta-group-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell.fi-ta-group-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-checkbox{width:100%}.fi-ta-checkbox:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-checkbox{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-checkbox{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-checkbox.fi-align-center{text-align:center}.fi-ta-checkbox.fi-align-end,.fi-ta-checkbox.fi-align-right{text-align:end}.fi-ta-color{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-ta-color.fi-wrapped{flex-wrap:wrap}.fi-ta-color:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-color{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-color{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-color.fi-align-start,.fi-ta-color.fi-align-left{justify-content:flex-start}.fi-ta-color.fi-align-center{justify-content:center}.fi-ta-color.fi-align-end,.fi-ta-color.fi-align-right{justify-content:flex-end}.fi-ta-color.fi-align-justify,.fi-ta-color.fi-align-between{justify-content:space-between}.fi-ta-color>.fi-ta-color-item{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6);border-radius:var(--radius-md)}.fi-ta-color>.fi-ta-color-item.fi-copyable{cursor:pointer}.fi-ta-icon{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-ta-icon.fi-wrapped{flex-wrap:wrap}.fi-ta-icon.fi-ta-icon-has-line-breaks{flex-direction:column}.fi-ta-icon:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-icon{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-icon{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-icon.fi-align-start,.fi-ta-icon.fi-align-left{justify-content:flex-start}.fi-ta-icon.fi-align-center{justify-content:center}.fi-ta-icon.fi-align-end,.fi-ta-icon.fi-align-right{justify-content:flex-end}.fi-ta-icon.fi-align-justify,.fi-ta-icon.fi-align-between{justify-content:space-between}.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon{color:var(--gray-400)}:is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon).fi-color{color:var(--text)}:is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon).fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-ta-image{align-items:center;gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-ta-image img{object-fit:cover;object-position:center;max-width:none}.fi-ta-image.fi-circular img{border-radius:3.40282e38px}.fi-ta-image.fi-ta-image-ring img,.fi-ta-image.fi-ta-image-ring .fi-ta-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-white)}:is(.fi-ta-image.fi-ta-image-ring img,.fi-ta-image.fi-ta-image-ring .fi-ta-image-limited-remaining-text):where(.dark,.dark *){--tw-ring-color:var(--gray-900)}.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-1 img,.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-1 .fi-ta-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-2 img,.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-2 .fi-ta-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-4 img,.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-4 .fi-ta-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-ta-image.fi-ta-image-overlap-1{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-2{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-3{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-4{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-5{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-6{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-7{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-8{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-wrapped{flex-wrap:wrap}.fi-ta-image:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-image{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-image{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-image.fi-align-start,.fi-ta-image.fi-align-left{justify-content:flex-start}.fi-ta-image.fi-align-center{justify-content:center}.fi-ta-image.fi-align-end,.fi-ta-image.fi-align-right{justify-content:flex-end}.fi-ta-image.fi-align-justify,.fi-ta-image.fi-align-between{justify-content:space-between}.fi-ta-image.fi-stacked .fi-ta-image-limited-remaining-text{background-color:var(--gray-100);border-radius:3.40282e38px}.fi-ta-image.fi-stacked .fi-ta-image-limited-remaining-text:where(.dark,.dark *){background-color:var(--gray-800)}.fi-ta-image .fi-ta-image-limited-remaining-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);justify-content:center;align-items:center;display:flex}.fi-ta-image .fi-ta-image-limited-remaining-text:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-base,.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-ta-select{width:100%;min-width:calc(var(--spacing)*48)}.fi-ta-select:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-select{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-select{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-text{width:100%}.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited{flex-direction:column;display:flex}:is(.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited).fi-ta-text-has-badges{row-gap:calc(var(--spacing)*2)}:is(.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited):not(.fi-ta-text-has-badges){row-gap:calc(var(--spacing)*1)}.fi-ta-text:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-text{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-text{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}ul.fi-ta-text.fi-bulleted,.fi-ta-text.fi-bulleted ul{list-style-type:disc;list-style-position:inside}ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul{column-gap:calc(var(--spacing)*1.5);display:flex}:is(ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul).fi-wrapped,:is(ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul).fi-ta-text-has-line-breaks,:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):is(.fi-ta-text-has-line-breaks ul){row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul){column-gap:calc(var(--spacing)*1.5);display:flex}:is(:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul)).fi-wrapped,:is(:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul)):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}.fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks){white-space:normal}.fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks) .fi-badge,.fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks) .fi-ta-text-list-limited-message{white-space:nowrap}.fi-ta-text>.fi-ta-text-description,.fi-ta-text>.fi-ta-text-list-limited-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}:is(.fi-ta-text>.fi-ta-text-description,.fi-ta-text>.fi-ta-text-list-limited-message):where(.dark,.dark *){color:var(--gray-400)}.fi-ta-text.fi-align-center{text-align:center}ul.fi-ta-text.fi-align-center,.fi-ta-text.fi-align-center ul{justify-content:center}.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right{text-align:end}ul:is(.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right),:is(.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right) ul{justify-content:flex-end}.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between{text-align:justify}ul:is(.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between),:is(.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between) ul{justify-content:space-between}.fi-ta-text-item{color:var(--gray-950)}.fi-ta-text-item:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.fi-ta-text-item a:hover{text-decoration-line:underline}}.fi-ta-text-item a:focus-visible{text-decoration-line:underline}.fi-ta-text-item:not(.fi-bulleted li.fi-ta-text-item){-webkit-line-clamp:var(--line-clamp,none);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.fi-ta-text-item>.fi-copyable{cursor:pointer}.fi-ta-text-item.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-ta-text-item.fi-size-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.fi-ta-text-item.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-ta-text-item.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-ta-text-item.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-ta-text-item.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-ta-text-item.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-ta-text-item.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-ta-text-item.fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-ta-text-item.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-ta-text-item.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-ta-text-item.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-ta-text-item.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-ta-text-item.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.fi-ta-text-item.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif}.fi-ta-text-item.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.fi-ta-text-item.fi-color{color:var(--text)}.fi-ta-text-item.fi-color:where(.dark,.dark *){color:var(--dark-text)}li.fi-ta-text-item.fi-color::marker{color:var(--gray-950)}li.fi-ta-text-item.fi-color:where(.dark,.dark *)::marker{color:var(--color-white)}.fi-ta-text-item.fi-color-gray{color:var(--gray-500)}.fi-ta-text-item.fi-color-gray:where(.dark,.dark *){color:var(--gray-400)}li.fi-ta-text-item.fi-color-gray::marker{color:var(--gray-950)}li.fi-ta-text-item.fi-color-gray:where(.dark,.dark *)::marker{color:var(--color-white)}.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon{color:var(--gray-400);flex-shrink:0;display:inline-block}:is(.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon).fi-color{color:var(--color-500)}.fi-ta-text-item.fi-ta-text-has-badges>.fi-badge{vertical-align:middle}@media (hover:hover){.fi-ta-col-has-column-url .fi-ta-text-item:hover{text-decoration-line:underline}}.fi-ta-col-has-column-url .fi-ta-text-item:focus-visible{text-decoration-line:underline}@media (hover:hover){.fi-ta-col-has-column-url .fi-ta-text-item .fi-icon:hover{text-decoration-line:none}}.fi-ta-col-has-column-url .fi-ta-text-item .fi-icon:focus-visible{text-decoration-line:none}@media (hover:hover){.fi-ta-col-has-column-url .fi-ta-text-item>.fi-badge:hover{text-decoration-line:none}}.fi-ta-col-has-column-url .fi-ta-text-item>.fi-badge:focus-visible{text-decoration-line:none}.fi-ta-text-input{width:100%;min-width:calc(var(--spacing)*48)}.fi-ta-text-input:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-text-input{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-text-input{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-toggle{width:100%}.fi-ta-toggle:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-toggle{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-toggle{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-toggle.fi-align-center{text-align:center}.fi-ta-toggle.fi-align-end,.fi-ta-toggle.fi-align-right{text-align:end}.fi-ta-grid.fi-gap-sm{gap:calc(var(--spacing)*1)}@media (min-width:40rem){.fi-ta-grid.sm\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:48rem){.fi-ta-grid.md\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:64rem){.fi-ta-grid.lg\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:80rem){.fi-ta-grid.xl\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:96rem){.fi-ta-grid.\\32 xl\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}.fi-ta-grid.fi-gap-lg{gap:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-grid.sm\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:48rem){.fi-ta-grid.md\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:64rem){.fi-ta-grid.lg\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:80rem){.fi-ta-grid.xl\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:96rem){.fi-ta-grid.\\32 xl\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}.fi-ta-panel{border-radius:var(--radius-lg);background-color:var(--gray-50);padding:calc(var(--spacing)*4);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-ta-panel{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-ta-panel{--tw-ring-inset:inset}.fi-ta-panel:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-panel:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-panel:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-split{display:flex}.fi-ta-split.default\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3)}.fi-ta-split.sm\\:fi-ta-split,.fi-ta-split.md\\:fi-ta-split,.fi-ta-split.lg\\:fi-ta-split,.fi-ta-split.xl\\:fi-ta-split,.fi-ta-split.\\32 xl\\:fi-ta-split{gap:calc(var(--spacing)*2);flex-direction:column}@media (min-width:40rem){.fi-ta-split.sm\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:48rem){.fi-ta-split.md\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:64rem){.fi-ta-split.lg\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:80rem){.fi-ta-split.xl\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:96rem){.fi-ta-split.\\32 xl\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}.fi-ta-stack{flex-direction:column;display:flex}.fi-ta-stack.fi-align-start,.fi-ta-stack.fi-align-left{align-items:flex-start}.fi-ta-stack.fi-align-center{align-items:center}.fi-ta-stack.fi-align-end,.fi-ta-stack.fi-align-right{align-items:flex-end}:where(.fi-ta-stack.fi-gap-sm>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.fi-ta-stack.fi-gap-md>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.fi-ta-stack.fi-gap-lg>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.fi-ta-icon-count-summary{row-gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-icon-count-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-icon-count-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-icon-count-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-icon-count-summary>.fi-ta-icon-count-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-icon-count-summary>.fi-ta-icon-count-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-icon-count-summary>ul{row-gap:calc(var(--spacing)*1.5);display:grid}.fi-ta-icon-count-summary>ul>li{justify-content:flex-end;align-items:center;column-gap:calc(var(--spacing)*1.5);display:flex}.fi-ta-icon-count-summary>ul>li>.fi-icon{color:var(--gray-400)}.fi-ta-icon-count-summary>ul>li>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-icon-count-summary>ul>li>.fi-icon.fi-color{color:var(--text)}.fi-ta-icon-count-summary>ul>li>.fi-icon.fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-ta-range-summary{row-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-range-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-range-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-range-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-range-summary>.fi-ta-range-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-range-summary>.fi-ta-range-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-text-summary{row-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-text-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-text-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-text-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-text-summary>.fi-ta-text-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-text-summary>.fi-ta-text-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-values-summary{row-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-values-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-values-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-values-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-values-summary>.fi-ta-values-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-values-summary>.fi-ta-values-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-values-summary>ul.fi-bulleted{list-style-type:disc;list-style-position:inside}.fi-ta-ctn{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex;position:relative}.fi-ta-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn:not(.fi-ta-ctn-with-header){overflow:hidden}.fi-ta-ctn.fi-loading{animation:var(--animate-pulse)}.fi-ta-ctn .fi-ta-header-ctn{margin-top:-1px}.fi-ta-ctn .fi-ta-header{gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding:calc(var(--spacing)*4);flex-direction:column;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position{flex-direction:row;align-items:center}.fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position .fi-ta-actions{margin-inline-start:auto}}.fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position:not(:has(.fi-ta-header-heading)):not(:has(.fi-ta-header-description)) .fi-ta-actions{margin-inline-start:auto}.fi-ta-ctn .fi-ta-header .fi-ta-header-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-ctn .fi-ta-header .fi-ta-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-ctn .fi-ta-header .fi-ta-header-description{margin-top:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600)}.fi-ta-ctn .fi-ta-header .fi-ta-header-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-ctn .fi-ta-header-toolbar{justify-content:space-between;align-items:center;gap:calc(var(--spacing)*4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header-toolbar{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-header-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-header-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-header-toolbar>*{align-items:center;column-gap:calc(var(--spacing)*4);display:flex}.fi-ta-ctn .fi-ta-header-toolbar>:first-child{flex-shrink:0}.fi-ta-ctn .fi-ta-header-toolbar>:nth-child(2){margin-inline-start:auto}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown.sm\\:fi-hidden{display:none}}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields{row-gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6);display:grid}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields label{row-gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);display:grid}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings>.fi-ta-grouping-settings-fields{align-items:center;column-gap:calc(var(--spacing)*3);display:none}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings>.fi-ta-grouping-settings-fields{display:flex}}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-filters-dropdown .fi-ta-filters,.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-col-manager-dropdown .fi-ta-col-manager{padding:calc(var(--spacing)*6)}.fi-ta-ctn .fi-ta-filters{row-gap:calc(var(--spacing)*4);display:grid}.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);padding:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header{justify-content:space-between;align-items:center;display:flex}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-ta-filters-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-ta-filters-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-loading-indicator{color:var(--gray-400)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-actions-ctn{gap:calc(var(--spacing)*3);display:flex}.fi-ta-ctn .fi-ta-filters-above-content-ctn{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*4);display:grid}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filters-above-content-ctn{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-filters-above-content-ctn:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filters-above-content-ctn:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-filters-above-content-ctn .fi-ta-filters-trigger-action-ctn{margin-inline-start:auto}.fi-ta-ctn .fi-ta-filters-above-content-ctn.fi-open .fi-ta-filters-trigger-action-ctn{margin-top:calc(var(--spacing)*3)}.fi-ta-ctn .fi-ta-filters-above-content-ctn.fi-open:has(.fi-ta-filters-actions-ctn) .fi-ta-filters-trigger-action-ctn{margin-top:calc(var(--spacing)*-7)}.fi-ta-ctn .fi-ta-reorder-indicator{align-items:center;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-reorder-indicator{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-ctn .fi-ta-reorder-indicator .fi-loading-indicator{color:var(--gray-400)}.fi-ta-ctn .fi-ta-reorder-indicator .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-ctn .fi-ta-selection-indicator{justify-content:space-between;row-gap:calc(var(--spacing)*1);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);flex-direction:column;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-selection-indicator{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*1.5);flex-direction:row;align-items:center}}.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-ctn .fi-ta-selection-indicator .fi-loading-indicator{color:var(--gray-400)}.fi-ta-ctn .fi-ta-selection-indicator .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-ctn .fi-ta-selection-indicator .fi-ta-selection-indicator-actions-ctn,.fi-ta-ctn .fi-ta-selection-indicator>*{column-gap:calc(var(--spacing)*3);display:flex}.fi-ta-ctn .fi-ta-selection-indicator>:first-child{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-ta-ctn .fi-ta-selection-indicator>:first-child:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-ctn .fi-ta-selection-indicator>:nth-child(2){margin-inline-start:auto}.fi-ta-ctn .fi-ta-filter-indicators{justify-content:space-between;align-items:flex-start;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filter-indicators{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-ctn .fi-ta-filter-indicators>:first-child{column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filter-indicators>:first-child{flex-direction:row}}.fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--gray-700)}.fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-label:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-badges-ctn{gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.fi-ta-ctn .fi-ta-filter-indicators>:nth-child(2).fi-icon-btn{margin-top:calc(var(--spacing)*-1)}.fi-ta-ctn .fi-pagination{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-ctn .fi-pagination{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-pagination:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-pagination:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-table-loading-ctn{height:calc(var(--spacing)*32);justify-content:center;align-items:center;display:flex}.fi-ta-ctn .fi-ta-main{min-width:calc(var(--spacing)*0);flex:1}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-trigger-action-ctn.lg\\:fi-hidden{display:none}}.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn{z-index:20;border-radius:var(--radius-lg);border-color:var(--gray-200);background-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100vw;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));flex-shrink:0;display:none;position:absolute;max-width:14rem!important}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn{z-index:auto;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:static}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn) .fi-ta-filters{padding:calc(var(--spacing)*6)}@media (min-width:64rem){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn) .fi-ta-filters{padding-block:calc(var(--spacing)*4)}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-open{display:block}@media (min-width:64rem){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).lg\\:fi-open{display:block}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-opacity-0{opacity:0}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-xs{max-width:var(--container-xs)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-sm{max-width:var(--container-sm)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-md{max-width:var(--container-md)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-lg{max-width:var(--container-lg)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-xl{max-width:var(--container-xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-2xl{max-width:var(--container-2xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-3xl{max-width:var(--container-3xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-4xl{max-width:var(--container-4xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-5xl{max-width:var(--container-5xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-6xl{max-width:var(--container-6xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-7xl{max-width:var(--container-7xl)!important}.fi-ta-ctn .fi-ta-filters-before-content-ctn{inset-inline-start:calc(var(--spacing)*0)}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-before-content-ctn{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-start-start-radius:var(--radius-xl);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-xl)}}.fi-ta-ctn .fi-ta-filters-after-content-ctn{inset-inline-end:calc(var(--spacing)*0)}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-after-content-ctn{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-start-start-radius:0;border-start-end-radius:var(--radius-xl);border-end-end-radius:var(--radius-xl);border-end-start-radius:0}}.fi-ta-content-ctn{position:relative}:where(.fi-ta-content-ctn>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-ta-content-ctn{overflow-x:auto}:where(.fi-ta-content-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-content-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn:where(.dark,.dark *){border-top-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn:where(.dark,.dark *){border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content-header{align-items:center;gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*6);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*4);display:flex}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content-header{padding-inline:calc(var(--spacing)*6)}}.fi-ta-content-ctn .fi-ta-content-header:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content-header .fi-ta-page-checkbox{margin-block:calc(var(--spacing)*4);flex-shrink:0}.fi-ta-content-ctn .fi-ta-content-header .fi-ta-sorting-settings{column-gap:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);display:flex}.fi-ta-content-ctn:not(.fi-ta-ctn-with-footer .fi-ta-content-ctn){border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.fi-ta-content-ctn:not(.fi-ta-ctn-with-header .fi-ta-content-ctn){border-top-style:var(--tw-border-style);border-top-width:0}.fi-ta-content-ctn .fi-ta-content{display:grid}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid{gap:calc(var(--spacing)*4);padding:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid{padding-inline:calc(var(--spacing)*6)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid.fi-ta-content-grouped{padding-top:calc(var(--spacing)*0)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{margin-inline:calc(var(--spacing)*-4);border-block-style:var(--tw-border-style);border-block-width:1px;border-color:var(--gray-200)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:first-child{border-top-style:var(--tw-border-style);border-top-width:0}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{margin-inline:calc(var(--spacing)*-6)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{width:calc(100% + 2rem)}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{width:calc(100% + 3rem)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record{border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (hover:hover){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected){background-color:var(--color-white)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-actions{padding-inline-start:calc(var(--spacing)*2)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-actions{padding-inline-end:calc(var(--spacing)*2)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid){background-color:var(--gray-200);row-gap:1px}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:before{content:var(--tw-content);content:var(--tw-content);inset-block:calc(var(--spacing)*0);content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*.5);content:var(--tw-content);background-color:var(--primary-600);position:absolute;inset-inline-start:calc(var(--spacing)*0)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--primary-500)}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record .fi-ta-record-content-ctn{flex-direction:row;align-items:center}}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-actions{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-actions{padding-inline-end:calc(var(--spacing)*6)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix{padding-inline-start:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-actions{padding-inline-start:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix{padding-inline-end:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-actions{padding-inline-end:calc(var(--spacing)*3)}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record .fi-ta-actions{padding-inline-start:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header{align-items:center;column-gap:calc(var(--spacing)*3);background-color:var(--gray-50);width:100%;padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*2);grid-column:1/-1;display:flex}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header{padding-inline:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header.fi-collapsible{cursor:pointer}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header.fi-collapsible.fi-collapsed .fi-icon-btn{rotate:-180deg}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-checkbox{margin-inline:calc(var(--spacing)*3)}.fi-ta-content-ctn .fi-ta-content .fi-ta-table{grid-column:1/-1}.fi-ta-content-ctn .fi-ta-content .fi-ta-record{background-color:var(--color-white);height:100%;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;align-items:center;transition-duration:75ms;display:flex;position:relative}.fi-ta-content-ctn .fi-ta-content .fi-ta-record:where(.dark,.dark *){background-color:var(--gray-900)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-with-content-prefix{padding-inline-start:calc(var(--spacing)*1)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-with-content-suffix{padding-inline-end:calc(var(--spacing)*1)}@media (hover:hover){.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-clickable:hover{background-color:var(--gray-50)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-collapsed{display:none}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-selected{background-color:var(--gray-50)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-reorder-handle{margin-inline:calc(var(--spacing)*1);margin-block:calc(var(--spacing)*2)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-checkbox{margin-inline:calc(var(--spacing)*3);margin-block:calc(var(--spacing)*4);flex-shrink:0}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn{row-gap:calc(var(--spacing)*3);width:100%;height:100%;padding-block:calc(var(--spacing)*4);flex-direction:column;display:flex}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn>:first-child{flex:1}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content{width:100%;display:block}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col{text-align:start;justify-content:flex-start;display:flex}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col:disabled{pointer-events:none}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-growable{width:100%}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-center{text-align:center;justify-content:center}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-end{text-align:end;justify-content:flex-end}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-left{text-align:left;justify-content:flex-start}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-right{text-align:right;justify-content:flex-end}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-justify,.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-between{text-align:justify;justify-content:space-between}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content.fi-collapsible{margin-top:calc(var(--spacing)*3)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-growable{flex:1;width:100%}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\\32 xl\\:fi-hidden{display:none}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\\32 xl\\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-collapse-btn{margin-inline:calc(var(--spacing)*1);margin-block:calc(var(--spacing)*2);flex-shrink:0}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-actions.fi-ta-actions-before-columns-position{order:-9999}.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-actions{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-actions{padding-inline-end:calc(var(--spacing)*4)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-collapsed .fi-ta-record-collapse-btn{rotate:180deg}.fi-ta-empty-state{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*12)}.fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state){border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200)}.fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-empty-state .fi-ta-empty-state-content{max-width:var(--container-lg);text-align:center;justify-items:center;margin-inline:auto;display:grid}.fi-ta-empty-state .fi-ta-empty-state-icon-bg{margin-bottom:calc(var(--spacing)*4);background-color:var(--gray-100);padding:calc(var(--spacing)*3);border-radius:3.40282e38px}.fi-ta-empty-state .fi-ta-empty-state-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab, red, red)){.fi-ta-empty-state .fi-ta-empty-state-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.fi-ta-empty-state .fi-ta-empty-state-icon-bg .fi-icon{color:var(--gray-500)}.fi-ta-empty-state .fi-ta-empty-state-icon-bg .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-empty-state .fi-ta-empty-state-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-empty-state .fi-ta-empty-state-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-empty-state .fi-ta-empty-state-description{margin-top:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-ta-empty-state .fi-ta-empty-state-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-empty-state .fi-ta-actions{margin-top:calc(var(--spacing)*6)}.fi-ta-header-cell{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3.5);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-header-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-header-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-header-cell.fi-growable{width:100%}.fi-ta-header-cell.fi-grouped{border-color:var(--gray-200)}.fi-ta-header-cell.fi-grouped:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-header-cell.fi-grouped:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-header-cell.fi-grouped:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-ta-header-cell.fi-grouped:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-ta-header-cell.fi-align-center{text-align:center}.fi-ta-header-cell.fi-align-center .fi-ta-header-cell-sort-btn{justify-content:center}.fi-ta-header-cell.fi-align-end{text-align:end}.fi-ta-header-cell.fi-align-end .fi-ta-header-cell-sort-btn{justify-content:flex-end}.fi-ta-header-cell.fi-align-left{text-align:left}.fi-ta-header-cell.fi-align-left .fi-ta-header-cell-sort-btn{justify-content:flex-start}.fi-ta-header-cell.fi-align-left .fi-ta-header-cell-sort-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.fi-ta-header-cell.fi-align-right{text-align:right}.fi-ta-header-cell.fi-align-right .fi-ta-header-cell-sort-btn{justify-content:flex-end}.fi-ta-header-cell.fi-align-right .fi-ta-header-cell-sort-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.fi-ta-header-cell.fi-align-justify,.fi-ta-header-cell.fi-align-between{text-align:justify}:is(.fi-ta-header-cell.fi-align-justify,.fi-ta-header-cell.fi-align-between) .fi-ta-header-cell-sort-btn{justify-content:space-between}.fi-ta-header-cell.fi-ta-header-cell-sorted .fi-icon{color:var(--gray-950)}.fi-ta-header-cell.fi-ta-header-cell-sorted .fi-icon:where(.dark,.dark *){color:var(--color-white)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-icon{color:var(--gray-400)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-icon:where(.dark,.dark *),.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:hover .fi-icon{color:var(--gray-500)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:focus-visible .fi-icon{color:var(--gray-500)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}@media (min-width:40rem){.fi-ta-header-cell.sm\\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-header-cell.md\\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-header-cell.lg\\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-header-cell.xl\\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-header-cell.\\32 xl\\:fi-hidden{display:none}}.fi-ta-header-cell.sm\\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-header-cell.sm\\:fi-visible{display:table-cell}}.fi-ta-header-cell.md\\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-header-cell.md\\:fi-visible{display:table-cell}}.fi-ta-header-cell.lg\\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-header-cell.lg\\:fi-visible{display:table-cell}}.fi-ta-header-cell.xl\\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-header-cell.xl\\:fi-visible{display:table-cell}}.fi-ta-header-cell.\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-header-cell.\\32 xl\\:fi-visible{display:table-cell}}.fi-ta-header-cell.fi-wrapped{white-space:normal}.fi-ta-header-cell:not(.fi-wrapped){white-space:nowrap}.fi-ta-header-cell .fi-ta-header-cell-sort-btn{cursor:pointer;justify-content:flex-start;align-items:center;column-gap:calc(var(--spacing)*1);width:100%;display:flex}.fi-ta-header-cell .fi-icon{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;transition-duration:75ms}.fi-ta-header-cell .fi-loading-indicator{color:var(--gray-400)}.fi-ta-header-cell .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-header-group-cell{border-color:var(--gray-200);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-header-group-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-header-group-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-header-group-cell:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-header-group-cell:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-header-group-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-header-group-cell:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-ta-header-group-cell:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-ta-header-group-cell.fi-align-start{text-align:start}.fi-ta-header-group-cell.fi-align-center{text-align:center}.fi-ta-header-group-cell.fi-align-end{text-align:end}.fi-ta-header-group-cell.fi-align-left{text-align:left}.fi-ta-header-group-cell.fi-align-right{text-align:right}.fi-ta-header-group-cell.fi-align-justify,.fi-ta-header-group-cell.fi-align-between{text-align:justify}@media (min-width:40rem){.fi-ta-header-group-cell.sm\\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-header-group-cell.md\\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-header-group-cell.lg\\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-header-group-cell.xl\\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-header-group-cell.\\32 xl\\:fi-hidden{display:none}}.fi-ta-header-group-cell.sm\\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-header-group-cell.sm\\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.md\\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-header-group-cell.md\\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.lg\\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-header-group-cell.lg\\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.xl\\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-header-group-cell.xl\\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-header-group-cell.\\32 xl\\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.fi-wrapped{white-space:normal}.fi-ta-header-group-cell:not(.fi-wrapped){white-space:nowrap}.fi-ta-empty-header-cell{width:calc(var(--spacing)*1)}@media (hover:hover){.fi-ta-row{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-ta-row.fi-clickable:hover{background-color:var(--gray-50)}.fi-ta-row.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-ta-row.fi-striped{background-color:var(--gray-50)}.fi-ta-row.fi-striped:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-striped:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-row.fi-collapsed{display:none}.fi-ta-row.fi-ta-group-header-row>td{background-color:var(--gray-50)}.fi-ta-row.fi-ta-group-header-row>td:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-ta-group-header-row>td:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-row .fi-ta-group-header-cell{padding-inline:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-row .fi-ta-group-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-row .fi-ta-group-header-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-row .fi-ta-group-header{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;padding-block:calc(var(--spacing)*2);display:flex}.fi-ta-row .fi-ta-group-header.fi-collapsible{cursor:pointer}.fi-ta-row .fi-ta-group-header.fi-collapsible.fi-collapsed .fi-icon-btn{rotate:-180deg}.fi-ta-row .fi-ta-group-header .fi-ta-group-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-row .fi-ta-group-header .fi-ta-group-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-row .fi-ta-group-header .fi-ta-group-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-ta-row .fi-ta-group-header .fi-ta-group-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-row.fi-selected:not(.fi-striped){background-color:var(--gray-50)}.fi-ta-row.fi-selected:not(.fi-striped):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-selected:not(.fi-striped):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-row.fi-selected>:first-child{position:relative}.fi-ta-row.fi-selected>:first-child:before{inset-block:calc(var(--spacing)*0);width:calc(var(--spacing)*.5);background-color:var(--primary-600);content:\"\";position:absolute;inset-inline-start:calc(var(--spacing)*0)}.fi-ta-row.fi-selected>:first-child:where(.dark,.dark *):before{background-color:var(--primary-500)}.fi-ta-reordering .fi-ta-row:not(.fi-ta-row-not-reorderable){cursor:move}.fi-ta-table{table-layout:auto;width:100%}:where(.fi-ta-table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-ta-table{text-align:start}:where(.fi-ta-table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table.fi-ta-table-stacked-on-mobile{display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile{table-layout:auto;display:table}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead{display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead{display:table-header-group}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead:not(:has(.fi-ta-table-stacked-header-row)){display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead:not(:has(.fi-ta-table-stacked-header-row)){display:table-header-group}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr:not(.fi-ta-table-stacked-header-row){display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr:not(.fi-ta-table-stacked-header-row){display:table-row}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-header-cell{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-header-cell{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-selection-cell{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-selection-cell{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody{white-space:normal;display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody{white-space:nowrap;display:table-row-group}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr{padding-block:calc(var(--spacing)*2);display:block;position:relative}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr{padding-block:calc(var(--spacing)*0);display:table-row;position:static}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-collapsed{display:none}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:before{inset-block:calc(var(--spacing)*0);width:calc(var(--spacing)*.5);background-color:var(--primary-600);position:absolute;inset-inline-start:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:before{display:none}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:before{content:\"\"}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:where(.dark,.dark *):before{background-color:var(--primary-500)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected>:first-child:before{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected>:first-child:before{display:block}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-group-header-row{padding-block:calc(var(--spacing)*0)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-group-header-row>td{width:100%;display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-group-header-row>td{width:auto;display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-summary-row{padding-block:calc(var(--spacing)*0)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell{inset-inline-end:calc(var(--spacing)*5);top:calc(var(--spacing)*0);position:absolute}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell{width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);display:table-cell;position:static}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell){padding-inline:calc(var(--spacing)*4);display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell){padding-inline:calc(var(--spacing)*0);display:table-cell}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):first-of-type{padding-inline-start:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):last-of-type{padding-inline-end:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-row-heading-cell{padding-inline:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-row-heading-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-row-heading-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-header-cell{padding-inline:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).sm\\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).md\\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).lg\\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).xl\\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).\\32 xl\\:fi-hidden{display:none}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).sm\\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).sm\\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).md\\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).md\\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).lg\\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).lg\\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).xl\\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).xl\\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).\\32 xl\\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-label{padding-top:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-500)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-label{display:none}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-label:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-content{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--gray-800)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-content{display:block}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-content:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions){padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions)>.fi-ta-actions{justify-content:flex-start;column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*2);flex-wrap:wrap;width:100%}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions)>.fi-ta-actions{justify-content:flex-end;gap:calc(var(--spacing)*3);flex-wrap:nowrap;width:auto}}:where(.fi-ta-table>thead>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-ta-table>thead:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-table>thead:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table>thead>tr{background-color:var(--gray-50)}.fi-ta-table>thead>tr:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-table>thead>tr:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table>thead>tr.fi-ta-table-head-groups-row{background-color:var(--gray-100)}.fi-ta-table>thead>tr.fi-ta-table-head-groups-row:where(.dark,.dark *){background-color:#0000}:where(.fi-ta-table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}.fi-ta-table>tbody{white-space:nowrap}:where(.fi-ta-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table>tfoot{background-color:var(--gray-50)}.fi-ta-table>tfoot:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-table>tfoot:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table-stacked-header-row{border-block-style:var(--tw-border-style);border-block-width:0;width:100%;display:block}@media (min-width:40rem){.fi-ta-table-stacked-header-row{display:none}}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell{align-items:center;gap:calc(var(--spacing)*4);background-color:var(--gray-50);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);display:flex}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell .fi-ta-page-checkbox{flex-shrink:0;margin-inline-start:auto}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell .fi-ta-table-stacked-sorting{column-gap:calc(var(--spacing)*3);flex:1;display:flex}.fi-ta-col-manager{gap:calc(var(--spacing)*4);display:grid}.fi-ta-col-manager .fi-ta-col-manager-header{justify-content:space-between;align-items:center;display:flex}.fi-ta-col-manager .fi-ta-col-manager-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-col-manager .fi-ta-col-manager-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-col-manager .fi-ta-col-manager-items{margin-top:calc(var(--spacing)*-6);column-gap:calc(var(--spacing)*6)}.fi-ta-col-manager .fi-ta-col-manager-item{break-inside:avoid;align-items:center;gap:calc(var(--spacing)*3);padding-top:calc(var(--spacing)*6);display:flex}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);flex:1;display:flex}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label .fi-checkbox-input{flex-shrink:0}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-reorder-handle{cursor:move}.fi-ta-col-manager .fi-ta-col-manager-group{break-inside:avoid}.fi-ta-col-manager .fi-ta-col-manager-group .fi-ta-col-manager-group-items{padding-inline-start:calc(var(--spacing)*8)}.fi-ta-col-manager .fi-ta-col-manager-actions-ctn{gap:calc(var(--spacing)*3);display:flex}.fi-wi-chart .fi-wi-chart-canvas-ctn{margin-inline:auto}.fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1}@supports (container-type:inline-size){.fi-wi-chart .fi-section-content{container-type:inline-size}@container (min-width:24rem){.fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1.5}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1.5}}}.fi-wi-chart .fi-wi-chart-filter.fi-input-wrp{width:max-content}@media (min-width:40rem){.fi-wi-chart .fi-wi-chart-filter.fi-input-wrp{margin-block:calc(var(--spacing)*-2)}}.fi-wi-chart .fi-wi-chart-filter.fi-dropdown .fi-wi-chart-filter-content{row-gap:calc(var(--spacing)*4);padding:calc(var(--spacing)*6);display:grid}.fi-wi-chart .fi-wi-chart-filter.fi-dropdown .fi-wi-chart-filter-content-actions-ctn{gap:calc(var(--spacing)*3);display:flex}.fi-wi-chart .fi-color .fi-wi-chart-bg-color{color:var(--color-50)}.fi-wi-chart .fi-color .fi-wi-chart-bg-color:where(.dark,.dark *){color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-wi-chart .fi-color .fi-wi-chart-bg-color:where(.dark,.dark *){color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-wi-chart .fi-color .fi-wi-chart-border-color{color:var(--color-500)}.fi-wi-chart .fi-color .fi-wi-chart-border-color:where(.dark,.dark *){color:var(--color-400)}.fi-wi-chart .fi-wi-chart-bg-color{color:var(--gray-100)}.fi-wi-chart .fi-wi-chart-bg-color:where(.dark,.dark *){color:var(--gray-800)}.fi-wi-chart .fi-wi-chart-border-color{color:var(--gray-400)}.fi-wi-chart .fi-wi-chart-grid-color{color:var(--gray-200)}.fi-wi-chart .fi-wi-chart-grid-color:where(.dark,.dark *){color:var(--gray-800)}.fi-wi-chart .fi-wi-chart-text-color{color:var(--gray-500)}.fi-wi-chart .fi-wi-chart-text-color:where(.dark,.dark *){color:var(--gray-400)}.fi-wi-stats-overview-stat{border-radius:var(--radius-xl);background-color:var(--color-white);height:100%;padding:calc(var(--spacing)*6);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:block;position:relative}.fi-wi-stats-overview-stat:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-wi-stats-overview-stat:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-wi-stats-overview-stat .fi-icon{color:var(--gray-400);flex-shrink:0}.fi-wi-stats-overview-stat .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-content{row-gap:calc(var(--spacing)*2);display:grid}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label-ctn{align-items:center;column-gap:calc(var(--spacing)*2);display:flex}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label:where(.dark,.dark *){color:var(--gray-400)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-value{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-value:where(.dark,.dark *){color:var(--color-white)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description{align-items:center;column-gap:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:flex}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description:where(.dark,.dark *){color:var(--gray-400)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color{color:var(--text)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color .fi-icon{color:var(--color-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart{inset-inline:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl);position:absolute;overflow:hidden}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart>canvas{height:calc(var(--spacing)*6)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-bg-color{color:var(--gray-100)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:var(--gray-800)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-border-color{color:var(--gray-400)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color{color:var(--color-50)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-border-color{color:var(--color-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-border-color:where(.dark,.dark *){color:var(--color-400)}.fi-wi{gap:calc(var(--spacing)*6)}.fi-global-search-ctn{align-items:center;display:flex}.fi-global-search{flex:1}@media (min-width:40rem){.fi-global-search{position:relative}}.fi-global-search-results-ctn{inset-inline:calc(var(--spacing)*4);z-index:10;margin-top:calc(var(--spacing)*2);max-height:calc(var(--spacing)*96);border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;overflow:auto}@media (min-width:40rem){.fi-global-search-results-ctn{inset-inline:auto}}.fi-global-search-results-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-global-search-results-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-results-ctn{transform:translateZ(0)}.fi-global-search-results-ctn.fi-transition-enter-start,.fi-global-search-results-ctn.fi-transition-leave-end{opacity:0}@media (min-width:40rem){.fi-topbar .fi-global-search-results-ctn{width:100vw;max-width:var(--container-sm);inset-inline-end:calc(var(--spacing)*0)}}.fi-sidebar .fi-global-search-ctn{margin-inline:calc(var(--spacing)*3);margin-top:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-sidebar .fi-global-search-results-ctn{inset-inline-start:calc(var(--spacing)*0)}}.fi-global-search-no-results-message{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-global-search-no-results-message:where(.dark,.dark *){color:var(--gray-400)}:where(.fi-global-search-results>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-global-search-results:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-global-search-results:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-result-group-header{top:calc(var(--spacing)*0);z-index:10;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);text-transform:capitalize;position:sticky}.fi-global-search-result-group-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-global-search-result-group-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-result-group-header:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white)}:where(.fi-global-search-result-group-results>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200)}:where(.fi-global-search-result-group-results:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-global-search-result-group-results:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-result{scroll-margin-top:calc(var(--spacing)*9);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-global-search-result:focus-within{background-color:var(--gray-50)}@media (hover:hover){.fi-global-search-result:hover{background-color:var(--gray-50)}}.fi-global-search-result:where(.dark,.dark *):focus-within{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-global-search-result:where(.dark,.dark *):focus-within{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.fi-global-search-result:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-global-search-result:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-global-search-result.fi-global-search-result-has-actions .fi-global-search-result-link{padding-bottom:calc(var(--spacing)*0)}.fi-global-search-result-link{padding:calc(var(--spacing)*4);--tw-outline-style:none;outline-style:none;display:block}@media (forced-colors:active){.fi-global-search-result-link{outline-offset:2px;outline:2px solid #0000}}.fi-global-search-result-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-global-search-result-heading:where(.dark,.dark *){color:var(--color-white)}.fi-global-search-result-details{margin-top:calc(var(--spacing)*1)}.fi-global-search-result-detail{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-global-search-result-detail:where(.dark,.dark *){color:var(--gray-400)}.fi-global-search-result-detail-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);display:inline}.fi-global-search-result-detail-value{display:inline}.fi-global-search-result-actions{margin-top:calc(var(--spacing)*3);column-gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-bottom:calc(var(--spacing)*4);display:flex}.fi-header{gap:calc(var(--spacing)*4);flex-direction:column;display:flex}@media (min-width:40rem){.fi-header{flex-direction:row;justify-content:space-between;align-items:center}}.fi-header .fi-breadcrumbs{margin-bottom:calc(var(--spacing)*2);display:none}@media (min-width:40rem){.fi-header .fi-breadcrumbs{display:block}.fi-header.fi-header-has-breadcrumbs .fi-header-actions-ctn{margin-top:calc(var(--spacing)*7)}}.fi-header-heading{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950)}@media (min-width:40rem){.fi-header-heading{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}.fi-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-header-subheading{margin-top:calc(var(--spacing)*2);max-width:var(--container-2xl);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));color:var(--gray-600)}.fi-header-subheading:where(.dark,.dark *){color:var(--gray-400)}.fi-header-actions-ctn{align-items:center;gap:calc(var(--spacing)*3);flex-shrink:0;display:flex}.fi-header-actions-ctn>.fi-ac{flex:1}.fi-header-actions-ctn>.fi-ac:not(.fi-width-full).fi-align-end,.fi-header-actions-ctn>.fi-ac:not(.fi-width-full).fi-align-right{flex-direction:row;justify-content:flex-end}.fi-simple-header{flex-direction:column;align-items:center;display:flex}.fi-simple-header .fi-logo{margin-bottom:calc(var(--spacing)*4)}.fi-simple-header-heading{text-align:center;font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950)}.fi-simple-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-simple-header-subheading{margin-top:calc(var(--spacing)*2);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-simple-header-subheading:where(.dark,.dark *){color:var(--gray-400)}html.fi{min-height:100dvh}.fi-body{background-color:var(--gray-50);--tw-font-weight:var(--font-weight-normal);min-height:100dvh;font-weight:var(--font-weight-normal);color:var(--gray-950);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fi-body:where(.dark,.dark *){background-color:var(--gray-950);color:var(--color-white)}:is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-main-ctn{opacity:0;min-height:calc(100dvh - 4rem);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.fi-body>.fi-layout-sidebar-toggle-btn-ctn{padding-inline-start:calc(var(--spacing)*5);padding-top:calc(var(--spacing)*5)}@media (min-width:64rem){.fi-body>.fi-layout-sidebar-toggle-btn-ctn.lg\\:fi-hidden{display:none}}.fi-body.fi-body-has-navigation:not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop):not(.fi-body-has-top-navigation) .fi-main-ctn{opacity:0}:is(.fi-body.fi-body-has-top-navigation,.fi-body:not(.fi-body-has-navigation)) .fi-main-ctn{min-height:calc(100dvh - 4rem);display:flex}.fi-body:not(.fi-body-has-topbar) .fi-main-ctn{min-height:100dvh;display:flex}.fi-layout{width:100%;height:100%;display:flex;overflow-x:clip}.fi-main-ctn{flex-direction:column;flex:1;width:100vw}.fi-main{width:100%;height:100%;padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:48rem){.fi-main{padding-inline:calc(var(--spacing)*6)}}@media (min-width:64rem){.fi-main{padding-inline:calc(var(--spacing)*8)}}:is(.fi-main,.fi-simple-main).fi-width-xs{max-width:var(--container-xs)}:is(.fi-main,.fi-simple-main).fi-width-sm{max-width:var(--container-sm)}:is(.fi-main,.fi-simple-main).fi-width-md{max-width:var(--container-md)}:is(.fi-main,.fi-simple-main).fi-width-lg{max-width:var(--container-lg)}:is(.fi-main,.fi-simple-main).fi-width-xl{max-width:var(--container-xl)}:is(.fi-main,.fi-simple-main).fi-width-2xl{max-width:var(--container-2xl)}:is(.fi-main,.fi-simple-main).fi-width-3xl{max-width:var(--container-3xl)}:is(.fi-main,.fi-simple-main).fi-width-4xl{max-width:var(--container-4xl)}:is(.fi-main,.fi-simple-main).fi-width-5xl{max-width:var(--container-5xl)}:is(.fi-main,.fi-simple-main).fi-width-6xl{max-width:var(--container-6xl)}:is(.fi-main,.fi-simple-main).fi-width-7xl{max-width:var(--container-7xl)}:is(.fi-main,.fi-simple-main).fi-width-full{max-width:100%}:is(.fi-main,.fi-simple-main).fi-width-min{max-width:min-content}:is(.fi-main,.fi-simple-main).fi-width-max{max-width:max-content}:is(.fi-main,.fi-simple-main).fi-width-fit{max-width:fit-content}:is(.fi-main,.fi-simple-main).fi-width-prose{max-width:65ch}:is(.fi-main,.fi-simple-main).fi-width-screen-sm{max-width:var(--breakpoint-sm)}:is(.fi-main,.fi-simple-main).fi-width-screen-md{max-width:var(--breakpoint-md)}:is(.fi-main,.fi-simple-main).fi-width-screen-lg{max-width:var(--breakpoint-lg)}:is(.fi-main,.fi-simple-main).fi-width-screen-xl{max-width:var(--breakpoint-xl)}:is(.fi-main,.fi-simple-main).fi-width-screen-2xl{max-width:var(--breakpoint-2xl)}:is(.fi-main,.fi-simple-main).fi-width-screen{inset:calc(var(--spacing)*0);position:fixed}.fi-simple-layout{flex-direction:column;align-items:center;min-height:100dvh;display:flex}.fi-simple-layout-header{inset-inline-end:calc(var(--spacing)*0);top:calc(var(--spacing)*0);height:calc(var(--spacing)*16);align-items:center;column-gap:calc(var(--spacing)*4);padding-inline-end:calc(var(--spacing)*4);display:flex;position:absolute}@media (min-width:48rem){.fi-simple-layout-header{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:64rem){.fi-simple-layout-header{padding-inline-end:calc(var(--spacing)*8)}}.fi-simple-main-ctn{flex-grow:1;justify-content:center;align-items:center;width:100%;display:flex}.fi-simple-main{margin-block:calc(var(--spacing)*16);background-color:var(--color-white);width:100%;padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*12);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:40rem){.fi-simple-main{border-radius:var(--radius-xl);padding-inline:calc(var(--spacing)*12)}}.fi-simple-main:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-simple-main:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-logo{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950);display:flex}.fi-logo:where(.dark,.dark *){color:var(--color-white)}.fi-logo.fi-logo-light:where(.dark,.dark *),.fi-logo.fi-logo-dark{display:none}.fi-logo.fi-logo-dark:where(.dark,.dark *){display:flex}@media (min-width:48rem){.fi-page-sub-navigation-dropdown{display:none}}.fi-page-sub-navigation-dropdown>.fi-dropdown-trigger>.fi-btn{justify-content:space-between;width:100%}.fi-page-sub-navigation-sidebar-ctn{width:calc(var(--spacing)*72);flex-direction:column;display:none}@media (min-width:48rem){.fi-page-sub-navigation-sidebar-ctn{display:flex}}.fi-page-sub-navigation-sidebar{row-gap:calc(var(--spacing)*7);flex-direction:column;display:flex}.fi-page-sub-navigation-tabs{display:none}@media (min-width:48rem){.fi-page-sub-navigation-tabs{display:flex}}.fi-page.fi-height-full,.fi-page.fi-height-full .fi-page-main,.fi-page.fi-height-full .fi-page-header-main-ctn,.fi-page.fi-height-full .fi-page-content{height:100%}.fi-page.fi-page-has-sub-navigation .fi-page-main{gap:calc(var(--spacing)*8);flex-direction:column;display:flex}@media (min-width:48rem){:is(.fi-page.fi-page-has-sub-navigation.fi-page-has-sub-navigation-start,.fi-page.fi-page-has-sub-navigation.fi-page-has-sub-navigation-end) .fi-page-main{flex-direction:row;align-items:flex-start}}.fi-page-header-main-ctn{row-gap:calc(var(--spacing)*8);padding-block:calc(var(--spacing)*8);flex-direction:column;display:flex}.fi-page-main-sub-navigation-mobile-menu-render-hook-ctn{display:contents}@media (min-width:48rem){.fi-page-main-sub-navigation-mobile-menu-render-hook-ctn{display:none}}.fi-page-content{row-gap:calc(var(--spacing)*8);flex:1;grid-auto-columns:minmax(0,1fr);display:grid}.fi-simple-page-content{row-gap:calc(var(--spacing)*6);grid-auto-columns:minmax(0,1fr);display:grid}.fi-sidebar-group{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.fi-sidebar-group.fi-collapsed .fi-sidebar-group-collapse-btn{rotate:-180deg}.fi-sidebar-group.fi-collapsible>.fi-sidebar-group-btn{cursor:pointer}.fi-sidebar-group.fi-active .fi-sidebar-group-dropdown-trigger-btn .fi-icon{color:var(--primary-600)}.fi-sidebar-group.fi-active .fi-sidebar-group-dropdown-trigger-btn .fi-icon:where(.dark,.dark *){color:var(--primary-400)}.fi-sidebar-group-btn{align-items:center;column-gap:calc(var(--spacing)*3);padding:calc(var(--spacing)*2);display:flex}.fi-sidebar-group-btn .fi-icon{color:var(--gray-400)}.fi-sidebar-group-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-group-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);flex:1}.fi-sidebar-group-label:where(.dark,.dark *){color:var(--gray-400)}.fi-sidebar-group-dropdown-trigger-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);padding:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;flex:1;display:flex;position:relative}@media (forced-colors:active){.fi-sidebar-group-dropdown-trigger-btn{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar-group-dropdown-trigger-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-sidebar-group-dropdown-trigger-btn:hover{background-color:var(--gray-100)}}.fi-sidebar-group-dropdown-trigger-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-group-dropdown-trigger-btn .fi-icon{color:var(--gray-400)}.fi-sidebar-group-dropdown-trigger-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-group-items{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter{transition-delay:.1s}@media (min-width:64rem){:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter-start{opacity:0}:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter-end{opacity:1}.fi-sidebar{inset-block:calc(var(--spacing)*0);z-index:30;background-color:var(--color-white);height:100dvh;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));flex-direction:column;align-content:flex-start;display:flex;position:fixed;inset-inline-start:calc(var(--spacing)*0)}@media (min-width:64rem){.fi-sidebar{z-index:20;background-color:#0000;transition-property:none}}.fi-sidebar:where(.dark,.dark *){background-color:var(--gray-900)}@media (min-width:64rem){.fi-sidebar:where(.dark,.dark *){background-color:#0000}}.fi-sidebar.fi-sidebar-open{width:var(--sidebar-width);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:64rem){.fi-sidebar.fi-sidebar-open{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.fi-sidebar.fi-sidebar-open:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-sidebar.fi-sidebar-open:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sidebar.fi-sidebar-open:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sidebar:not(.fi-sidebar-open){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-sidebar:not(.fi-sidebar-open):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:64rem){.fi-body-has-topbar .fi-sidebar{height:calc(100dvh - 4rem);top:4rem}}.fi-sidebar-close-overlay{inset:calc(var(--spacing)*0);z-index:30;background-color:var(--gray-950);position:fixed}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-close-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.fi-sidebar-close-overlay{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.5s;transition-duration:.5s}@media (min-width:64rem){.fi-sidebar-close-overlay{display:none}}.fi-sidebar-close-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-close-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}@media (min-width:64rem){.fi-body.fi-body-has-top-navigation .fi-sidebar{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-body.fi-body-has-top-navigation .fi-sidebar:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-body:not(.fi-body-has-top-navigation) .fi-sidebar.fi-sidebar-open,.fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open){position:sticky}.fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open),.fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open):where(:dir(rtl),[dir=rtl],[dir=rtl] *),.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar,.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:not(.fi-sidebar-open){width:var(--sidebar-width)}@media (min-width:64rem){.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:not(.fi-sidebar-open){position:sticky}}.fi-sidebar-header-ctn{overflow-x:clip}.fi-sidebar-header{height:calc(var(--spacing)*16);justify-content:center;align-items:center;display:flex}.fi-sidebar-header-logo-ctn{flex:1}.fi-body-has-topbar .fi-sidebar-header{background-color:var(--color-white);padding-inline:calc(var(--spacing)*6);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-body-has-topbar .fi-sidebar-header{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}@media (min-width:64rem){.fi-body-has-topbar .fi-sidebar-header{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:none}}.fi-body-has-topbar .fi-sidebar-header:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-body-has-topbar .fi-sidebar-header:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:not(.fi-body-has-topbar) .fi-sidebar-header{padding-inline:calc(var(--spacing)*4);--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#0000}:not(.fi-body-has-topbar) .fi-sidebar-header .fi-logo{margin-inline-start:calc(var(--spacing)*3)}.fi-sidebar-nav{row-gap:calc(var(--spacing)*7);padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*8);scrollbar-gutter:stable;flex-direction:column;flex-grow:1;display:flex;overflow:hidden auto}.fi-sidebar-nav-groups{margin-inline:calc(var(--spacing)*-2);row-gap:calc(var(--spacing)*7);flex-direction:column;display:flex}.fi-sidebar-item.fi-active,.fi-sidebar-item.fi-sidebar-item-has-active-child-items{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn{background-color:var(--gray-100)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-item.fi-active>.fi-sidebar-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-icon{color:var(--primary-700)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--primary-400)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-grouped-border>.fi-sidebar-item-grouped-border-part{background-color:var(--primary-700)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-grouped-border>.fi-sidebar-item-grouped-border-part:where(.dark,.dark *){background-color:var(--primary-400)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-label{color:var(--primary-700)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-label:where(.dark,.dark *){color:var(--primary-400)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn .fi-sidebar-item-grouped-border-part{height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5);border-radius:3.40282e38px;position:relative}@media (hover:hover){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:hover{background-color:var(--gray-100)}}.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-item-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);padding:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;display:flex;position:relative}@media (forced-colors:active){.fi-sidebar-item-btn{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar-item-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-sidebar-item-btn>.fi-icon{color:var(--gray-400)}.fi-sidebar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-item-grouped-border{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6);justify-content:center;align-items:center;display:flex;position:relative}.fi-sidebar-item-grouped-border-part-not-first{background-color:var(--gray-300);width:1px;position:absolute;top:-50%;bottom:50%}.fi-sidebar-item-grouped-border-part-not-first:where(.dark,.dark *){background-color:var(--gray-600)}.fi-sidebar-item-grouped-border-part-not-last{background-color:var(--gray-300);width:1px;position:absolute;top:50%;bottom:-50%}.fi-sidebar-item-grouped-border-part-not-last:where(.dark,.dark *){background-color:var(--gray-600)}.fi-sidebar-item-grouped-border-part{height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5);background-color:var(--gray-400);border-radius:3.40282e38px;position:relative}.fi-sidebar-item-grouped-border-part:where(.dark,.dark *){background-color:var(--gray-500)}.fi-sidebar-item-label{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);flex:1;overflow:hidden}.fi-sidebar-item-label:where(.dark,.dark *){color:var(--gray-200)}@media (min-width:64rem){:is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-delay:.1s}}:is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter-start{opacity:0}:is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter-end{opacity:1}.fi-sidebar-footer{margin-inline:calc(var(--spacing)*4);margin-block:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*3);display:grid}.fi-sidebar-footer>.fi-no-database{display:block}.fi-sidebar-sub-group-items{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.fi-sidebar-database-notifications-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);width:100%;padding:calc(var(--spacing)*2);text-align:start;--tw-outline-style:none;outline-style:none;display:flex;position:relative}@media (forced-colors:active){.fi-sidebar-database-notifications-btn{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar-database-notifications-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-sidebar-database-notifications-btn:hover{background-color:var(--gray-100)}}.fi-sidebar-database-notifications-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-sidebar-database-notifications-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-database-notifications-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-sidebar-database-notifications-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-database-notifications-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-database-notifications-btn>.fi-icon{color:var(--gray-400)}.fi-sidebar-database-notifications-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);flex:1;overflow:hidden}.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label:where(.dark,.dark *){color:var(--gray-200)}@media (min-width:64rem){:is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-delay:.1s}}:is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter-start{opacity:0}:is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter-end{opacity:1}.fi-sidebar-open-sidebar-btn,.fi-sidebar-open-collapse-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}.fi-sidebar-close-collapse-sidebar-btn{display:none;margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-sidebar-close-collapse-sidebar-btn{display:flex}:is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body:not(.fi-body-has-sidebar-fully-collapsible-on-desktop)) .fi-sidebar-open-sidebar-btn{display:none}}.fi-sidebar-close-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-sidebar-close-sidebar-btn{display:none}}.fi-tenant-menu-trigger{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);width:100%;padding:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;outline-style:none;display:flex}@media (forced-colors:active){.fi-tenant-menu-trigger{outline-offset:2px;outline:2px solid #0000}}.fi-tenant-menu-trigger{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-tenant-menu-trigger:hover{background-color:var(--gray-100)}}.fi-tenant-menu-trigger:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-tenant-menu-trigger:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tenant-menu-trigger:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-tenant-menu-trigger:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tenant-menu-trigger:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-tenant-menu-trigger .fi-tenant-avatar{flex-shrink:0}.fi-tenant-menu-trigger .fi-icon{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;margin-inline-start:auto;transition-duration:75ms}@media (hover:hover){.fi-tenant-menu-trigger .fi-icon:is(:where(.group):hover *){color:var(--gray-500)}}.fi-tenant-menu-trigger .fi-icon:is(:where(.group):focus-visible *),.fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):hover *){color:var(--gray-400)}}.fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-400)}.fi-tenant-menu-trigger:hover .fi-icon{color:var(--gray-500)}.fi-tenant-menu-trigger:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-tenant-menu-trigger:focus-visible .fi-icon{color:var(--gray-500)}.fi-tenant-menu-trigger:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-tenant-menu-trigger-text{text-align:start;justify-items:start;display:grid}.fi-tenant-menu-trigger-current-tenant-label{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-500)}.fi-tenant-menu-trigger-current-tenant-label:where(.dark,.dark *){color:var(--gray-400)}.fi-tenant-menu-trigger-tenant-name{color:var(--gray-950)}.fi-tenant-menu-trigger-tenant-name:where(.dark,.dark *){color:var(--color-white)}.fi-sidebar .fi-tenant-menu{margin-inline:calc(var(--spacing)*4);margin-top:calc(var(--spacing)*3)}.fi-theme-switcher{column-gap:calc(var(--spacing)*1);grid-auto-flow:column;display:grid}.fi-theme-switcher-btn{border-radius:var(--radius-md);padding:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;justify-content:center;display:flex}@media (forced-colors:active){.fi-theme-switcher-btn{outline-offset:2px;outline:2px solid #0000}}.fi-theme-switcher-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-theme-switcher-btn:hover{background-color:var(--gray-50)}}.fi-theme-switcher-btn:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-theme-switcher-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-theme-switcher-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-theme-switcher-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-theme-switcher-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-theme-switcher-btn.fi-active{background-color:var(--gray-50);color:var(--primary-500)}.fi-theme-switcher-btn.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-theme-switcher-btn.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-theme-switcher-btn.fi-active:where(.dark,.dark *){color:var(--primary-400)}.fi-theme-switcher-btn:not(.fi-active){color:var(--gray-400)}@media (hover:hover){.fi-theme-switcher-btn:not(.fi-active):hover{color:var(--gray-500)}}.fi-theme-switcher-btn:not(.fi-active):focus-visible,.fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *):hover{color:var(--gray-400)}}.fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *):focus-visible{color:var(--gray-400)}.fi-topbar-ctn{top:calc(var(--spacing)*0);z-index:30;position:sticky;overflow-x:clip}.fi-topbar{min-height:calc(var(--spacing)*16);background-color:var(--color-white);padding-inline:calc(var(--spacing)*4);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);align-items:center;display:flex}.fi-topbar:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-topbar:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-topbar .fi-tenant-menu{display:none}@media (min-width:64rem){.fi-topbar .fi-tenant-menu{display:block}}.fi-topbar-open-sidebar-btn,.fi-topbar-close-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-topbar-close-sidebar-btn{display:none}}.fi-topbar-open-collapse-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}.fi-topbar-close-collapse-sidebar-btn{display:none;margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-topbar-close-collapse-sidebar-btn{display:flex}}.fi-topbar-start{align-items:center;margin-inline-end:calc(var(--spacing)*6);display:none}@media (min-width:64rem){.fi-topbar-start{display:flex}}.fi-topbar-start .fi-logo{margin-inline-start:calc(var(--spacing)*3)}.fi-topbar-collapse-sidebar-btn-ctn{width:calc(var(--spacing)*9);flex-shrink:0}@media (min-width:64rem){:is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body:not(.fi-body-has-sidebar-fully-collapsible-on-desktop)) .fi-topbar-open-sidebar-btn{display:none}}.fi-topbar-nav-groups{align-items:center;column-gap:calc(var(--spacing)*4);margin-inline-start:calc(var(--spacing)*4);margin-inline-end:calc(var(--spacing)*4);display:none}@media (min-width:64rem){.fi-topbar-nav-groups{margin-block:calc(var(--spacing)*2);row-gap:calc(var(--spacing)*1);flex-wrap:wrap;display:flex}}.fi-topbar-end{align-items:center;column-gap:calc(var(--spacing)*4);margin-inline-start:auto;display:flex}.fi-topbar-item-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*2);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;display:flex}@media (forced-colors:active){.fi-topbar-item-btn{outline-offset:2px;outline:2px solid #0000}}.fi-topbar-item-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-topbar-item-btn:hover{background-color:var(--gray-50)}}.fi-topbar-item-btn:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-topbar-item-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-topbar-item-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-topbar-item-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-topbar-item-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-topbar-item-btn>.fi-icon{color:var(--gray-400)}.fi-topbar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-topbar-item-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-topbar-item-label:where(.dark,.dark *){color:var(--gray-200)}.fi-topbar-item.fi-active .fi-topbar-item-btn{background-color:var(--gray-50)}.fi-topbar-item.fi-active .fi-topbar-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-topbar-item.fi-active .fi-topbar-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-topbar-item.fi-active .fi-topbar-item-btn>.fi-icon{color:var(--primary-600)}.fi-topbar-item.fi-active .fi-topbar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--primary-400)}.fi-topbar-item.fi-active .fi-topbar-item-label{color:var(--primary-600)}.fi-topbar-item.fi-active .fi-topbar-item-label:where(.dark,.dark *){color:var(--primary-400)}.fi-simple-user-menu-ctn{align-items:center;column-gap:calc(var(--spacing)*4);display:flex}.fi-topbar .fi-user-menu-trigger{flex-shrink:0}.fi-sidebar .fi-user-menu-trigger{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);width:100%;padding:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;outline-style:none;display:flex}@media (forced-colors:active){.fi-sidebar .fi-user-menu-trigger{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar .fi-user-menu-trigger{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-sidebar .fi-user-menu-trigger .fi-user-avatar{flex-shrink:0}.fi-sidebar .fi-user-menu-trigger .fi-icon{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;margin-inline-start:auto;transition-duration:75ms}@media (hover:hover){.fi-sidebar .fi-user-menu-trigger .fi-icon:is(:where(.group):hover *){color:var(--gray-500)}}.fi-sidebar .fi-user-menu-trigger .fi-icon:is(:where(.group):focus-visible *),.fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):hover *){color:var(--gray-400)}}.fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-400)}.fi-sidebar .fi-user-menu-trigger:hover .fi-icon{color:var(--gray-500)}.fi-sidebar .fi-user-menu-trigger:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-sidebar .fi-user-menu-trigger:focus-visible .fi-icon{color:var(--gray-500)}.fi-sidebar .fi-user-menu-trigger:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-sidebar .fi-user-menu-trigger .fi-tenant-menu-trigger-text{text-align:start;color:var(--gray-950);justify-items:start;display:grid}.fi-sidebar .fi-user-menu-trigger .fi-tenant-menu-trigger-text:where(.dark,.dark *){color:var(--color-white)}.fi-sidebar .fi-user-menu .fi-dropdown-panel{max-width:max(14rem,100% - 1.5rem)!important}.fi-account-widget .fi-section-content{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-account-widget-logout-form{margin-block:auto}.fi-account-widget-main{flex:1}.fi-account-widget-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1;display:grid}.fi-account-widget-heading:where(.dark,.dark *){color:var(--color-white)}.fi-account-widget-user-name{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-account-widget-user-name:where(.dark,.dark *){color:var(--gray-400)}.fi-filament-info-widget .fi-section-content{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-filament-info-widget-main{flex:1}.fi-filament-info-widget-logo{height:calc(var(--spacing)*5);color:var(--gray-950)}.fi-filament-info-widget-logo:where(.dark,.dark *){color:var(--color-white)}.fi-filament-info-widget-version{margin-top:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-500)}.fi-filament-info-widget-version:where(.dark,.dark *){color:var(--gray-400)}.fi-filament-info-widget-links{align-items:flex-end;row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}}@layer utilities{.fi-color-danger{--color-50:var(--danger-50);--color-100:var(--danger-100);--color-200:var(--danger-200);--color-300:var(--danger-300);--color-400:var(--danger-400);--color-500:var(--danger-500);--color-600:var(--danger-600);--color-700:var(--danger-700);--color-800:var(--danger-800);--color-900:var(--danger-900);--color-950:var(--danger-950)}.fi-color-gray{--color-50:var(--gray-50);--color-100:var(--gray-100);--color-200:var(--gray-200);--color-300:var(--gray-300);--color-400:var(--gray-400);--color-500:var(--gray-500);--color-600:var(--gray-600);--color-700:var(--gray-700);--color-800:var(--gray-800);--color-900:var(--gray-900);--color-950:var(--gray-950)}.fi-color-info{--color-50:var(--info-50);--color-100:var(--info-100);--color-200:var(--info-200);--color-300:var(--info-300);--color-400:var(--info-400);--color-500:var(--info-500);--color-600:var(--info-600);--color-700:var(--info-700);--color-800:var(--info-800);--color-900:var(--info-900);--color-950:var(--info-950)}.fi-color-primary{--color-50:var(--primary-50);--color-100:var(--primary-100);--color-200:var(--primary-200);--color-300:var(--primary-300);--color-400:var(--primary-400);--color-500:var(--primary-500);--color-600:var(--primary-600);--color-700:var(--primary-700);--color-800:var(--primary-800);--color-900:var(--primary-900);--color-950:var(--primary-950)}.fi-color-success{--color-50:var(--success-50);--color-100:var(--success-100);--color-200:var(--success-200);--color-300:var(--success-300);--color-400:var(--success-400);--color-500:var(--success-500);--color-600:var(--success-600);--color-700:var(--success-700);--color-800:var(--success-800);--color-900:var(--success-900);--color-950:var(--success-950)}.fi-color-warning{--color-50:var(--warning-50);--color-100:var(--warning-100);--color-200:var(--warning-200);--color-300:var(--warning-300);--color-400:var(--warning-400);--color-500:var(--warning-500);--color-600:var(--warning-600);--color-700:var(--warning-700);--color-800:var(--warning-800);--color-900:var(--warning-900);--color-950:var(--warning-950)}.fi-bg-color-50{--bg:var(--color-50)}.fi-bg-color-100{--bg:var(--color-100)}.fi-bg-color-200{--bg:var(--color-200)}.fi-bg-color-300{--bg:var(--color-300)}.fi-bg-color-400{--bg:var(--color-400)}.fi-bg-color-500{--bg:var(--color-500)}.fi-bg-color-600{--bg:var(--color-600)}.fi-bg-color-700{--bg:var(--color-700)}.fi-bg-color-800{--bg:var(--color-800)}.fi-bg-color-900{--bg:var(--color-900)}.fi-bg-color-950{--bg:var(--color-950)}.hover\\:fi-bg-color-50{--hover-bg:var(--color-50)}.hover\\:fi-bg-color-100{--hover-bg:var(--color-100)}.hover\\:fi-bg-color-200{--hover-bg:var(--color-200)}.hover\\:fi-bg-color-300{--hover-bg:var(--color-300)}.hover\\:fi-bg-color-400{--hover-bg:var(--color-400)}.hover\\:fi-bg-color-500{--hover-bg:var(--color-500)}.hover\\:fi-bg-color-600{--hover-bg:var(--color-600)}.hover\\:fi-bg-color-700{--hover-bg:var(--color-700)}.hover\\:fi-bg-color-800{--hover-bg:var(--color-800)}.hover\\:fi-bg-color-900{--hover-bg:var(--color-900)}.hover\\:fi-bg-color-950{--hover-bg:var(--color-950)}.dark\\:fi-bg-color-50{--dark-bg:var(--color-50)}.dark\\:fi-bg-color-100{--dark-bg:var(--color-100)}.dark\\:fi-bg-color-200{--dark-bg:var(--color-200)}.dark\\:fi-bg-color-300{--dark-bg:var(--color-300)}.dark\\:fi-bg-color-400{--dark-bg:var(--color-400)}.dark\\:fi-bg-color-500{--dark-bg:var(--color-500)}.dark\\:fi-bg-color-600{--dark-bg:var(--color-600)}.dark\\:fi-bg-color-700{--dark-bg:var(--color-700)}.dark\\:fi-bg-color-800{--dark-bg:var(--color-800)}.dark\\:fi-bg-color-900{--dark-bg:var(--color-900)}.dark\\:fi-bg-color-950{--dark-bg:var(--color-950)}.dark\\:hover\\:fi-bg-color-50{--dark-hover-bg:var(--color-50)}.dark\\:hover\\:fi-bg-color-100{--dark-hover-bg:var(--color-100)}.dark\\:hover\\:fi-bg-color-200{--dark-hover-bg:var(--color-200)}.dark\\:hover\\:fi-bg-color-300{--dark-hover-bg:var(--color-300)}.dark\\:hover\\:fi-bg-color-400{--dark-hover-bg:var(--color-400)}.dark\\:hover\\:fi-bg-color-500{--dark-hover-bg:var(--color-500)}.dark\\:hover\\:fi-bg-color-600{--dark-hover-bg:var(--color-600)}.dark\\:hover\\:fi-bg-color-700{--dark-hover-bg:var(--color-700)}.dark\\:hover\\:fi-bg-color-800{--dark-hover-bg:var(--color-800)}.dark\\:hover\\:fi-bg-color-900{--dark-hover-bg:var(--color-900)}.dark\\:hover\\:fi-bg-color-950{--dark-hover-bg:var(--color-950)}.fi-text-color-0{--text:oklch(100% 0 0)}.fi-text-color-50{--text:var(--color-50)}.fi-text-color-100{--text:var(--color-100)}.fi-text-color-200{--text:var(--color-200)}.fi-text-color-300{--text:var(--color-300)}.fi-text-color-400{--text:var(--color-400)}.fi-text-color-500{--text:var(--color-500)}.fi-text-color-600{--text:var(--color-600)}.fi-text-color-700{--text:var(--color-700)}.fi-text-color-800{--text:var(--color-800)}.fi-text-color-900{--text:var(--color-900)}.fi-text-color-950{--text:var(--color-950)}.hover\\:fi-text-color-0{--hover-text:oklch(100% 0 0)}.hover\\:fi-text-color-50{--hover-text:var(--color-50)}.hover\\:fi-text-color-100{--hover-text:var(--color-100)}.hover\\:fi-text-color-200{--hover-text:var(--color-200)}.hover\\:fi-text-color-300{--hover-text:var(--color-300)}.hover\\:fi-text-color-400{--hover-text:var(--color-400)}.hover\\:fi-text-color-500{--hover-text:var(--color-500)}.hover\\:fi-text-color-600{--hover-text:var(--color-600)}.hover\\:fi-text-color-700{--hover-text:var(--color-700)}.hover\\:fi-text-color-800{--hover-text:var(--color-800)}.hover\\:fi-text-color-900{--hover-text:var(--color-900)}.hover\\:fi-text-color-950{--hover-text:var(--color-950)}.dark\\:fi-text-color-0{--dark-text:oklch(100% 0 0)}.dark\\:fi-text-color-50{--dark-text:var(--color-50)}.dark\\:fi-text-color-100{--dark-text:var(--color-100)}.dark\\:fi-text-color-200{--dark-text:var(--color-200)}.dark\\:fi-text-color-300{--dark-text:var(--color-300)}.dark\\:fi-text-color-400{--dark-text:var(--color-400)}.dark\\:fi-text-color-500{--dark-text:var(--color-500)}.dark\\:fi-text-color-600{--dark-text:var(--color-600)}.dark\\:fi-text-color-700{--dark-text:var(--color-700)}.dark\\:fi-text-color-800{--dark-text:var(--color-800)}.dark\\:fi-text-color-900{--dark-text:var(--color-900)}.dark\\:fi-text-color-950{--dark-text:var(--color-950)}.dark\\:hover\\:fi-text-color-0{--dark-hover-text:oklch(100% 0 0)}.dark\\:hover\\:fi-text-color-50{--dark-hover-text:var(--color-50)}.dark\\:hover\\:fi-text-color-100{--dark-hover-text:var(--color-100)}.dark\\:hover\\:fi-text-color-200{--dark-hover-text:var(--color-200)}.dark\\:hover\\:fi-text-color-300{--dark-hover-text:var(--color-300)}.dark\\:hover\\:fi-text-color-400{--dark-hover-text:var(--color-400)}.dark\\:hover\\:fi-text-color-500{--dark-hover-text:var(--color-500)}.dark\\:hover\\:fi-text-color-600{--dark-hover-text:var(--color-600)}.dark\\:hover\\:fi-text-color-700{--dark-hover-text:var(--color-700)}.dark\\:hover\\:fi-text-color-800{--dark-hover-text:var(--color-800)}.dark\\:hover\\:fi-text-color-900{--dark-hover-text:var(--color-900)}.dark\\:hover\\:fi-text-color-950{--dark-hover-text:var(--color-950)}.fi-sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fi-prose{--prose-color:var(--color-gray-700);--prose-heading-color:var(--color-gray-950);--prose-strong-color:var(--color-gray-950);--prose-link-color:var(--color-gray-950);--prose-code-color:var(--color-gray-950);--prose-marker-color:var(--color-gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-prose{--prose-marker-color:color-mix(in oklab,var(--color-gray-700)25%,transparent)}}.fi-prose{--prose-link-underline-color:var(--color-primary-400);--prose-th-borders:var(--color-gray-300);--prose-td-borders:var(--color-gray-200);--prose-hr-color:var(--color-gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-prose{--prose-hr-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.fi-prose{--prose-blockquote-border-color:var(--color-gray-300);--prose-pre-bg:var(--color-gray-100)}.fi-prose:where(.dark,.dark *){--prose-color:var(--color-gray-300);--prose-heading-color:var(--color-white);--prose-strong-color:var(--color-white);--prose-link-color:var(--color-white);--prose-code-color:var(--color-white);--prose-marker-color:var(--color-gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-prose:where(.dark,.dark *){--prose-marker-color:color-mix(in oklab,var(--color-gray-300)35%,transparent)}}.fi-prose:where(.dark,.dark *){--prose-link-underline-color:var(--color-sky-400);--prose-th-borders:var(--color-gray-600);--prose-td-borders:var(--color-gray-700);--prose-hr-color:oklab(100% 0 5.96046e-8/.1)}@supports (color:color-mix(in lab, red, red)){.fi-prose:where(.dark,.dark *){--prose-hr-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-prose:where(.dark,.dark *){--prose-blockquote-border-color:var(--color-gray-600);--prose-pre-bg:var(--color-gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-prose:where(.dark,.dark *){--prose-pre-bg:color-mix(in oklab,var(--color-gray-900)40%,transparent)}}.fi-prose{color:var(--prose-color);font-size:var(--text-sm);line-height:1.5}.fi-prose img+img{margin-top:0}.fi-prose :where(:not(.fi-not-prose,.fi-not-prose *,br))+:where(:not(.fi-not-prose,.fi-not-prose *,br)){margin-top:calc(var(--spacing)*4)}.fi-prose p br{margin:0}.fi-prose h1:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-xl);letter-spacing:-.025em;color:var(--prose-code-color);line-height:1.55556;font-weight:var(--font-weight-extrabold)}.fi-prose h2:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-lg);letter-spacing:-.025em;color:var(--prose-code-color);line-height:1.55556;font-weight:var(--font-weight-bold)}.fi-prose h3:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-base);color:var(--prose-heading-color);line-height:1.55556;font-weight:var(--font-weight-bold)}.fi-prose h4:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-sm);color:var(--prose-heading-color);line-height:2;font-weight:var(--font-weight-bold)}.fi-prose h5:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-sm);color:var(--prose-heading-color);line-height:2;font-weight:var(--font-weight-semibold)}.fi-prose h6:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-sm);color:var(--prose-heading-color);line-height:2;font-weight:var(--font-weight-medium)}.fi-prose :is(h2,h3,h4,h5,h6):where(:not(.fi-not-prose,.fi-not-prose *)){scroll-margin-top:calc(var(--spacing)*32)}@media (min-width:64rem){.fi-prose :is(h2,h3,h4,h5,h6):where(:not(.fi-not-prose,.fi-not-prose *)){scroll-margin-top:calc(var(--spacing)*18)}}.fi-prose ol:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*6);list-style-type:decimal}.fi-prose ul:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*6);list-style-type:disc}.fi-prose ol li:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose ul li:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*3)}.fi-prose ol li+li:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose ul li+li:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*4)}.fi-prose ol li:where(:not(.fi-not-prose,.fi-not-prose *))::marker{color:var(--prose-marker-color)}.fi-prose ul li:where(:not(.fi-not-prose,.fi-not-prose *))::marker{color:var(--prose-marker-color)}.fi-prose a:not(:where(:is(h2,h3,h4,h5,h6) *)):where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-link-color);font-weight:var(--font-weight-semibold);text-underline-offset:3px;text-decoration:underline;-webkit-text-decoration-color:var(--prose-link-underline-color);-webkit-text-decoration-color:var(--prose-link-underline-color);text-decoration-color:var(--prose-link-underline-color);text-decoration-thickness:1px}.fi-prose a:not(:where(:is(h2,h3,h4,h5,h6) *)):where(:not(.fi-not-prose,.fi-not-prose *)) code{font-weight:var(--font-weight-semibold)}.fi-prose a:hover:where(:not(.fi-not-prose,.fi-not-prose *)){text-decoration-thickness:2px}.fi-prose strong:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-strong-color);font-weight:var(--font-weight-semibold)}.fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)){font-variant-ligatures:none;font-family:var(--font-mono);font-weight:var(--font-weight-medium);color:var(--prose-code-color)}.fi-prose :where(h2,h3,h4,h5,h6) code:where(:not(.fi-not-prose,.fi-not-prose *)){font-weight:var(--font-weight-semibold)}.fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)):before,.fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)):after{content:\"`\";display:inline}.fi-prose pre:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*4);margin-bottom:calc(var(--spacing)*10);border-radius:var(--radius-lg);padding-top:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*4);padding-bottom:calc(var(--spacing)*3);background-color:var(--prose-pre-bg);padding-inline-start:calc(var(--spacing)*4)}.fi-prose pre code *+:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:0}.fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)):before,.fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)):after{content:none}.fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)){font-variant-ligatures:none;font-family:var(--font-mono);font-size:var(--text-sm);line-height:2}.fi-prose table:where(:not(.fi-not-prose,.fi-not-prose *)){table-layout:auto;width:100%;font-size:var(--text-sm);margin-top:2em;margin-bottom:2em;line-height:1.4}.fi-prose thead:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:1px;border-bottom-color:var(--prose-th-borders)}.fi-prose thead th:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-heading-color);vertical-align:bottom;padding-inline-end:.6em;padding-bottom:.8em;padding-inline-start:.6em;font-weight:600}.fi-prose thead th:first-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:0}.fi-prose thead th:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:0}.fi-prose tbody tr:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:1px;border-bottom-color:var(--prose-td-borders)}.fi-prose tbody tr:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:0}.fi-prose tbody td:where(:not(.fi-not-prose,.fi-not-prose *)){vertical-align:baseline}.fi-prose tfoot:where(:not(.fi-not-prose,.fi-not-prose *)){border-top-width:1px;border-top-color:var(--prose-th-borders)}.fi-prose tfoot td:where(:not(.fi-not-prose,.fi-not-prose *)){vertical-align:top}.fi-prose tbody td:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose tfoot td:where(:not(.fi-not-prose,.fi-not-prose *)){padding-top:.8em;padding-inline-end:.6em;padding-bottom:.8em;padding-inline-start:.6em}.fi-prose tbody td:first-child:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose tfoot td:first-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:0}.fi-prose tbody td:last-child:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose tfoot td:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:0}.fi-prose th:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose td:where(:not(.fi-not-prose,.fi-not-prose *)){text-align:start}.fi-prose td code:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:.8125rem}.fi-prose hr:where(:not(.fi-not-prose,.fi-not-prose *)){border-color:var(--prose-hr-color);margin-block:calc(var(--spacing)*8)}.fi-prose hr:where(:not(.fi-not-prose,.fi-not-prose *))+h2{margin-top:calc(var(--spacing)*8)}.fi-prose blockquote{border-inline-start-width:.25rem;border-inline-start-color:var(--prose-blockquote-border-color);padding-inline-start:calc(var(--spacing)*4);font-style:italic}.fi-prose blockquote p:first-of-type:before{content:open-quote}.fi-prose blockquote p:last-of-type:after{content:close-quote}.fi-prose figure:where(:not(.fi-not-prose,.fi-not-prose *)) figcaption:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*3);text-align:center;font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--prose-color);font-style:italic}@supports (color:color-mix(in lab, red, red)){.fi-prose figure:where(:not(.fi-not-prose,.fi-not-prose *)) figcaption:where(:not(.fi-not-prose,.fi-not-prose *)){color:color-mix(in oklab,var(--prose-color)75%,transparent)}}.fi-prose :first-child:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:0}.fi-prose :last-child:where(:not(.fi-not-prose,.fi-not-prose *)){margin-bottom:0}.fi-prose .color:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--color)}.fi-prose .color:where(:not(.fi-not-prose,.fi-not-prose *)):where(.dark,.dark *){color:var(--dark-color)}.fi-prose .lead:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-base)}.fi-prose span[data-type=mention]:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose a[data-type=mention]:where(:not(.fi-not-prose,.fi-not-prose *)){font-weight:var(--font-weight-semibold);white-space:nowrap;margin-block:0;display:inline-block}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *)){gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=default]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=default]>.grid-layout-col{grid-column:var(--col-span)}@media (min-width:40rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=sm]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=sm]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:48rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=md]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=md]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:64rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=lg]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=lg]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:80rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=xl]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=xl]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:96rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=\"2xl\"]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=\"2xl\"]>.grid-layout-col{grid-column:var(--col-span)}}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))>.grid-layout-col{min-width:0;margin-top:0}}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}"
  },
  {
    "path": "public/css/filament/forms/forms.css",
    "content": "input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:\" \";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:\" \";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:#00000003;border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:\"\";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:\"\";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:auto;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:\"\";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:\"\";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.4;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:#00000003;border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E\");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:#ffffff4d;border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:#00000003;border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000,#0000);content:\" \";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#000000\",endColorstr=\"#00000000\",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity,1));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity,1));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity,1));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity,1))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity,1))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity,1))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity,1))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:#ff96004d}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,#fff0);height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,#fff0 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:\"1\"}.editor-toolbar button.heading-2:after{content:\"2\"}.editor-toolbar button.heading-3:after{content:\"3\"}.editor-toolbar button.heading-bigger:after{content:\"\\25b2\"}.editor-toolbar button.heading-smaller:after{content:\"\\25bc\"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:\"lines: \"}.editor-statusbar .words:before{content:\"words: \"}.editor-statusbar .characters:before{content:\"characters: \"}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:#0000000d;border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:\"\";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:#ff000026}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity,1));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1));display:block;height:1.25rem;width:1.25rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button:before{content:\"\";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity,1))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity,1));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity,1));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1));color:rgb(255 255 255/var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity,1))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity,1));background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity,1));background-color:rgba(var(--gray-700),var(--tw-bg-opacity,1))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");background-position:right .5rem center;background-size:1.5em 1.5em;&:has(.choices__button){padding-inline-end:3.5rem}}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity,1))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity,1));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity,1));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity,1))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity,1));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity,1))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity,1))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity,1))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=\"\"] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity,1));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity,1))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity,1));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity,1))}.webkit-calendar-picker-indicator\\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information:\n\ncropperjs/dist/cropper.min.css:\n  (*!\n   * Cropper.js v1.6.2\n   * https://fengyuanchen.github.io/cropperjs\n   *\n   * Copyright 2015-present Chen Fengyuan\n   * Released under the MIT license\n   *\n   * Date: 2024-04-21T07:43:02.731Z\n   *)\n\nfilepond/dist/filepond.min.css:\n  (*!\n   * FilePond 4.32.8\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-edit/dist/filepond-plugin-image-edit.css:\n  (*!\n   * FilePondPluginImageEdit 1.6.3\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-preview/dist/filepond-plugin-image-preview.css:\n  (*!\n   * FilePondPluginImagePreview 4.6.12\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-media-preview/dist/filepond-plugin-media-preview.css:\n  (*!\n   * FilePondPluginmediaPreview 1.0.11\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit undefined for details.\n   *)\n\neasymde/dist/easymde.min.css:\n  (**\n   * easymde v2.20.0\n   * Copyright Jeroen Akkerman\n   * @link https://github.com/ionaru/easy-markdown-editor\n   * @license MIT\n   *)\n*/"
  },
  {
    "path": "public/css/filament/support/support.css",
    "content": ".fi-pagination-items,.fi-pagination-overview,.fi-pagination-records-per-page-select:not(.fi-compact){display:none}@supports (container-type:inline-size){.fi-pagination{container-type:inline-size}@container (min-width: 28rem){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@container (min-width: 56rem){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:640px){.fi-pagination-records-per-page-select.fi-compact{display:none}.fi-pagination-records-per-page-select:not(.fi-compact){display:inline}}@media (min-width:768px){.fi-pagination:not(.fi-simple)>.fi-pagination-previous-btn{display:none}.fi-pagination-overview{display:inline}.fi-pagination:not(.fi-simple)>.fi-pagination-next-btn{display:none}.fi-pagination-items{display:flex}}}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;height:16px;width:16px}.tippy-arrow:before{border-color:transparent;border-style:solid;content:\"\";position:absolute}.tippy-content{padding:5px 9px;position:relative;z-index:1}.tippy-box[data-theme~=light]{background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;color:#26323d}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.fi-sortable-ghost{opacity:.3}"
  },
  {
    "path": "public/css/relaticle/custom-fields/custom-fields.css",
    "content": "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){.custom-fields-component *,.custom-fields-component ::backdrop,.custom-fields-component :after,.custom-fields-component :before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-tracking:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-ease:initial;--tw-divide-x-reverse:0;--tw-content:\"\";--tw-outline-style:solid;--tw-space-x-reverse:0}}}@layer theme{.custom-fields-component :host,.custom-fields-component :root{--font-mono:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-green-500:oklch(72.3% .219 149.579);--color-sky-400:oklch(74.6% .16 232.661);--color-gray-100:var(--gray-100);--color-gray-200:var(--gray-200);--color-gray-300:var(--gray-300);--color-gray-400:var(--gray-400);--color-gray-500:var(--gray-500);--color-gray-600:var(--gray-600);--color-gray-700:var(--gray-700);--color-gray-900:var(--gray-900);--color-gray-950:var(--gray-950);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--leading-relaxed:1.625;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--default-mono-font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-primary-400:var(--primary-400)}}@layer base{.custom-fields-component *,.custom-fields-component ::backdrop,.custom-fields-component :after,.custom-fields-component :before{border:0 solid;box-sizing:border-box;margin:0;padding:0}.custom-fields-component ::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}.custom-fields-component :host,.custom-fields-component html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}.custom-fields-component hr{border-top-width:1px;color:inherit;height:0}.custom-fields-component abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.custom-fields-component h1,.custom-fields-component h2,.custom-fields-component h3,.custom-fields-component h4,.custom-fields-component h5,.custom-fields-component h6{font-size:inherit;font-weight:inherit}.custom-fields-component a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.custom-fields-component b,.custom-fields-component strong{font-weight:bolder}.custom-fields-component code,.custom-fields-component kbd,.custom-fields-component pre,.custom-fields-component samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}.custom-fields-component small{font-size:80%}.custom-fields-component sub,.custom-fields-component sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.custom-fields-component sub{bottom:-.25em}.custom-fields-component sup{top:-.5em}.custom-fields-component table{border-collapse:collapse;border-color:inherit;text-indent:0}.custom-fields-component :-moz-focusring{outline:auto}.custom-fields-component progress{vertical-align:baseline}.custom-fields-component summary{display:list-item}.custom-fields-component menu,.custom-fields-component ol,.custom-fields-component ul{list-style:none}.custom-fields-component audio,.custom-fields-component canvas,.custom-fields-component embed,.custom-fields-component iframe,.custom-fields-component img,.custom-fields-component object,.custom-fields-component svg,.custom-fields-component video{display:block;vertical-align:middle}.custom-fields-component img,.custom-fields-component video{height:auto;max-width:100%}.custom-fields-component button,.custom-fields-component input,.custom-fields-component optgroup,.custom-fields-component select,.custom-fields-component textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}.custom-fields-component ::file-selector-button{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}.custom-fields-component :where(select:is([multiple],[size])) optgroup{font-weight:bolder}.custom-fields-component :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}.custom-fields-component ::file-selector-button{margin-inline-end:4px}.custom-fields-component ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){.custom-fields-component ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){.custom-fields-component ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}.custom-fields-component textarea{resize:vertical}.custom-fields-component ::-webkit-search-decoration{-webkit-appearance:none}.custom-fields-component ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}.custom-fields-component ::-webkit-datetime-edit{display:inline-flex}.custom-fields-component ::-webkit-datetime-edit-fields-wrapper{padding:0}.custom-fields-component ::-webkit-datetime-edit,.custom-fields-component ::-webkit-datetime-edit-year-field{padding-block:0}.custom-fields-component ::-webkit-datetime-edit-day-field,.custom-fields-component ::-webkit-datetime-edit-month-field{padding-block:0}.custom-fields-component ::-webkit-datetime-edit-hour-field,.custom-fields-component ::-webkit-datetime-edit-minute-field{padding-block:0}.custom-fields-component ::-webkit-datetime-edit-millisecond-field,.custom-fields-component ::-webkit-datetime-edit-second-field{padding-block:0}.custom-fields-component ::-webkit-datetime-edit-meridiem-field{padding-block:0}.custom-fields-component ::-webkit-calendar-picker-indicator{line-height:1}.custom-fields-component :-moz-ui-invalid{box-shadow:none}.custom-fields-component button,.custom-fields-component input:where([type=button],[type=reset],[type=submit]){appearance:button}.custom-fields-component ::file-selector-button{appearance:button}.custom-fields-component ::-webkit-inner-spin-button,.custom-fields-component ::-webkit-outer-spin-button{height:auto}.custom-fields-component [hidden]:where(:not([hidden=until-found])){display:none!important}.custom-fields-component [role=button]:not(:disabled),.custom-fields-component button:not(:disabled){cursor:pointer}.custom-fields-component :root.dark{color-scheme:dark}.custom-fields-component [data-field-wrapper]{scroll-margin-top:8rem}}@layer components{.custom-fields-component .tippy-box[data-animation=fade][data-state=hidden]{opacity:0}.custom-fields-component [data-tippy-root]{max-width:calc(100vw - 10px)}.custom-fields-component .tippy-box{background-color:#333;border-radius:4px;color:#fff;font-size:14px;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.custom-fields-component .tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.custom-fields-component .tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:top}.custom-fields-component .tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.custom-fields-component .tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:bottom}.custom-fields-component .tippy-box[data-placement^=left]>.tippy-arrow{right:0}.custom-fields-component .tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:0}.custom-fields-component .tippy-box[data-placement^=right]>.tippy-arrow{left:0}.custom-fields-component .tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:100%}.custom-fields-component .tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.custom-fields-component .tippy-arrow{color:#333;height:16px;width:16px}.custom-fields-component .tippy-arrow:before{border-color:#0000;border-style:solid;content:\"\";position:absolute}.custom-fields-component .tippy-content{padding:5px 9px;position:relative;z-index:1}.custom-fields-component .tippy-box[data-theme~=light]{background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;color:#26323d}.custom-fields-component .tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.custom-fields-component .tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.custom-fields-component .tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.custom-fields-component .tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.custom-fields-component .tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.custom-fields-component .tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.custom-fields-component .fi-avatar{border-radius:var(--radius-md);height:calc(var(--spacing)*8);object-fit:cover;object-position:center;width:calc(var(--spacing)*8)}.custom-fields-component .fi-avatar.fi-circular{border-radius:3.40282e+38px}.custom-fields-component .fi-avatar.fi-size-sm{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.custom-fields-component .fi-avatar.fi-size-lg{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10)}.custom-fields-component .fi-badge{align-items:center;background-color:var(--gray-50);border-radius:var(--radius-md);column-gap:calc(var(--spacing)*1);font-size:var(--text-xs);justify-content:center;line-height:var(--tw-leading,var(--text-xs--line-height));min-width:1.5rem;padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);--tw-font-weight:var(--font-weight-medium);color:var(--gray-600);font-weight:var(--font-weight-medium);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-600);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.custom-fields-component .fi-badge{--tw-ring-inset:inset}.custom-fields-component .fi-badge:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.custom-fields-component .fi-badge:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.custom-fields-component .fi-badge:not(.fi-wrapped){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-badge.fi-disabled:not(.fi-force-enabled),.custom-fields-component .fi-badge[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}.custom-fields-component :is(.fi-badge.fi-disabled:not(.fi-force-enabled),.fi-badge[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.custom-fields-component .fi-badge .fi-badge-label-ctn{display:grid}.custom-fields-component .fi-badge .fi-badge-label.fi-wrapped{text-wrap:wrap;word-break:break-word}.custom-fields-component .fi-badge .fi-badge-label:not(.fi-wrapped){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-badge .fi-icon{flex-shrink:0}.custom-fields-component .fi-badge.fi-size-xs{min-width:1rem;padding-block:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.custom-fields-component .fi-badge.fi-size-sm{min-width:1.25rem;padding-block:calc(var(--spacing)*.5);padding-inline:calc(var(--spacing)*1.5);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.custom-fields-component .fi-badge.fi-color{background-color:var(--color-50);color:var(--text);--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge.fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)10%,transparent)}}.custom-fields-component .fi-badge.fi-color:where(.dark,.dark *){background-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.custom-fields-component .fi-badge.fi-color:where(.dark,.dark *){color:var(--dark-text);--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge.fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.custom-fields-component .fi-badge.fi-color .fi-badge-delete-btn>.fi-icon{color:var(--color-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge.fi-color .fi-badge-delete-btn>.fi-icon{color:color-mix(in oklab,var(--color-700)50%,transparent)}}.custom-fields-component .fi-badge.fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:var(--color-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge.fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:color-mix(in oklab,var(--color-300)50%,transparent)}}.custom-fields-component .fi-badge:not(.fi-color) .fi-icon{color:var(--gray-400)}.custom-fields-component .fi-badge:not(.fi-color) .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-badge .fi-badge-delete-btn{margin-block:calc(var(--spacing)*-1);padding:calc(var(--spacing)*1);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;--tw-outline-style:none;align-items:center;display:flex;justify-content:center;margin-inline-end:calc(var(--spacing)*-2);margin-inline-start:calc(var(--spacing)*-1);outline-style:none;transition-duration:75ms}.custom-fields-component .fi-badge .fi-badge-delete-btn>.fi-icon{color:var(--gray-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge .fi-badge-delete-btn>.fi-icon{color:color-mix(in oklab,var(--gray-700)50%,transparent)}}.custom-fields-component .fi-badge .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-badge .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)50%,transparent)}}.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:focus-visible{color:var(--gray-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:focus-visible{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}@media (hover:hover){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:var(--gray-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--gray-300)75%,transparent)}}}.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:var(--gray-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:color-mix(in oklab,var(--gray-300)75%,transparent)}}@media (hover:hover){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:hover{color:var(--color-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:hover{color:color-mix(in oklab,var(--color-700)75%,transparent)}}}.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:focus-visible{color:var(--color-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:focus-visible{color:color-mix(in oklab,var(--color-700)75%,transparent)}}@media (hover:hover){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:var(--color-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--color-300)75%,transparent)}}}.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:var(--color-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:color-mix(in oklab,var(--color-300)75%,transparent)}}.custom-fields-component .fi-breadcrumbs ol{align-items:center;column-gap:calc(var(--spacing)*2);display:flex;flex-wrap:wrap}.custom-fields-component .fi-breadcrumbs ol li{align-items:center;column-gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);display:flex;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-breadcrumbs ol li:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-breadcrumbs ol li a{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-breadcrumbs ol li a:hover{color:var(--gray-700)}.custom-fields-component .fi-breadcrumbs ol li a:where(.dark,.dark *):hover{color:var(--gray-200)}}.custom-fields-component .fi-breadcrumbs ol li .fi-icon{color:var(--gray-400);display:flex}.custom-fields-component .fi-breadcrumbs ol li .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-breadcrumbs ol li .fi-icon.fi-ltr:where(:dir(rtl),[dir=rtl],[dir=rtl] *),.custom-fields-component .fi-breadcrumbs ol li .fi-icon.fi-rtl:where(:dir(ltr),[dir=ltr],[dir=ltr] *){display:none}.custom-fields-component .fi-btn{align-items:center;border-radius:var(--radius-lg);font-size:var(--text-sm);gap:calc(var(--spacing)*1.5);justify-content:center;line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;--tw-outline-style:none;display:inline-grid;grid-auto-flow:column;outline-style:none;position:relative;transition-duration:75ms}.custom-fields-component :is(.fi-btn.fi-force-enabled,.fi-btn:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-btn.fi-disabled:not(.fi-force-enabled),.custom-fields-component .fi-btn[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}.custom-fields-component :is(.fi-btn.fi-disabled:not(.fi-force-enabled),.fi-btn[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.custom-fields-component .fi-btn>.fi-icon{color:var(--gray-400);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-btn.fi-size-xs{font-size:var(--text-xs);gap:calc(var(--spacing)*1);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*2)}.custom-fields-component .fi-btn.fi-size-sm{font-size:var(--text-sm);gap:calc(var(--spacing)*1);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*2.5)}.custom-fields-component .fi-btn.fi-size-lg{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*3.5)}.custom-fields-component .fi-btn.fi-size-lg,.custom-fields-component .fi-btn.fi-size-xl{font-size:var(--text-sm);gap:calc(var(--spacing)*1.5);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-btn.fi-size-xl{padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-btn.fi-outlined{color:var(--gray-950);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-300)}.custom-fields-component .fi-btn.fi-outlined:where(.dark,.dark *){color:var(--color-white);--tw-ring-color:var(--gray-700)}@media (hover:hover){.custom-fields-component :is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):hover{background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}}.custom-fields-component :is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--gray-400)40%,transparent)}}.custom-fields-component .fi-btn.fi-outlined.fi-color{color:var(--text);--tw-ring-color:var(--color-600)}.custom-fields-component .fi-btn.fi-outlined.fi-color:where(.dark,.dark *){color:var(--dark-text);--tw-ring-color:var(--color-500)}@media (hover:hover){.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):hover{background-color:var(--color-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):hover{background-color:color-mix(in oklab,var(--color-500)10%,transparent)}}}.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-500)40%,transparent)}}@media (hover:hover){.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--color-600)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-600)10%,transparent)}}}.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-400)40%,transparent)}}.custom-fields-component .fi-btn.fi-outlined.fi-color>.fi-icon{color:var(--color-600)}.custom-fields-component .fi-btn.fi-outlined.fi-color>.fi-icon:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-btn:not(.fi-outlined){background-color:var(--color-white);color:var(--gray-950)}.custom-fields-component .fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-btn:not(.fi-outlined):where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-50)}.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}}.custom-fields-component input:checked+label.fi-btn:not(.fi-outlined){background-color:var(--gray-400);color:var(--color-white);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component input:checked+label.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:var(--gray-600)}@media (hover:hover){.custom-fields-component :is(input:checked+label.fi-btn:not(.fi-outlined).fi-force-enabled,input:checked+label.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-300)}.custom-fields-component :is(input:checked+label.fi-btn:not(.fi-outlined).fi-force-enabled,input:checked+label.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--gray-500)}}.custom-fields-component .fi-btn:not(.fi-outlined).fi-color:not(label){background-color:var(--bg);color:var(--text)}.custom-fields-component .fi-btn:not(.fi-outlined).fi-color:not(label):where(.dark,.dark *){background-color:var(--dark-bg);color:var(--dark-text)}@media (hover:hover){.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):hover{background-color:var(--hover-bg);color:var(--hover-text)}}.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-500)50%,transparent)}}@media (hover:hover){.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--dark-hover-bg);color:var(--dark-hover-text)}}.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-400)50%,transparent)}}.custom-fields-component .fi-btn:not(.fi-outlined).fi-color:not(label)>.fi-icon{color:var(--text)}.custom-fields-component .fi-btn:not(.fi-outlined).fi-color:not(label)>.fi-icon:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color){background-color:var(--bg);color:var(--text);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color):where(.dark,.dark *){background-color:var(--dark-bg);color:var(--dark-text)}@media (hover:hover){.custom-fields-component input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):hover{background-color:var(--hover-bg);color:var(--hover-text)}.custom-fields-component input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--dark-hover-bg);color:var(--dark-hover-text)}}.custom-fields-component input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){z-index:10;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.custom-fields-component input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:color-mix(in oklab,var(--color-500)50%,transparent)}}.custom-fields-component input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)50%,transparent)}}.custom-fields-component label.fi-btn{cursor:pointer}.custom-fields-component label.fi-btn>.fi-icon:is(:checked+label>.fi-icon){color:var(--text)}.custom-fields-component label.fi-btn>.fi-icon:is(:checked+label>.fi-icon):where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-btn:not(.fi-color),.custom-fields-component label.fi-btn{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-btn:not(.fi-color),.custom-fields-component label.fi-btn{--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.custom-fields-component :is(.fi-btn:not(.fi-color),label.fi-btn):where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-btn:not(.fi-color),label.fi-btn):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-btn.fi-labeled-from-2xl,.custom-fields-component .fi-btn.fi-labeled-from-lg,.custom-fields-component .fi-btn.fi-labeled-from-md,.custom-fields-component .fi-btn.fi-labeled-from-sm,.custom-fields-component .fi-btn.fi-labeled-from-xl{display:none}@media (min-width:40rem){.custom-fields-component .fi-btn.fi-labeled-from-sm{display:inline-grid}}@media (min-width:48rem){.custom-fields-component .fi-btn.fi-labeled-from-md{display:inline-grid}}@media (min-width:64rem){.custom-fields-component .fi-btn.fi-labeled-from-lg{display:inline-grid}}@media (min-width:80rem){.custom-fields-component .fi-btn.fi-labeled-from-xl{display:inline-grid}}@media (min-width:96rem){.custom-fields-component .fi-btn.fi-labeled-from-2xl{display:inline-grid}}.custom-fields-component .fi-btn .fi-btn-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*0);z-index:1;--tw-translate-x:-50%;--tw-translate-y:-50%;background-color:var(--color-white);border-radius:var(--radius-md);display:flex;position:absolute;translate:var(--tw-translate-x)var(--tw-translate-y);width:max-content}.custom-fields-component .fi-btn .fi-btn-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-btn .fi-btn-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-btn-group{border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);display:grid;grid-auto-flow:column}.custom-fields-component .fi-btn-group:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-btn-group:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-btn-group>.fi-btn{border-radius:0;flex:1}.custom-fields-component .fi-btn-group>.fi-btn:nth-child(1 of .fi-btn){border-end-start-radius:var(--radius-lg);border-start-start-radius:var(--radius-lg)}.custom-fields-component .fi-btn-group>.fi-btn:nth-last-child(1 of .fi-btn){border-end-end-radius:var(--radius-lg);border-start-end-radius:var(--radius-lg)}.custom-fields-component .fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,var(--color-gray-200));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(.dark,.dark *){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,#fff3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-btn-group>.fi-btn:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.custom-fields-component .fi-btn-group>.fi-btn.fi-processing:enabled{cursor:wait;opacity:.7}.custom-fields-component .fi-btn-group>.fi-btn:not(.fi-outlined){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-btn-group>.fi-btn:not(.fi-color),.custom-fields-component label:is(.fi-btn-group>.fi-btn){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-dropdown-header{font-size:var(--text-sm);gap:calc(var(--spacing)*2);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*3);width:100%;--tw-font-weight:var(--font-weight-medium);display:flex;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-dropdown-header .fi-icon{color:var(--gray-400)}.custom-fields-component .fi-dropdown-header .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-dropdown-header span{color:var(--gray-700);flex:1;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-dropdown-header span:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-dropdown-header.fi-color .fi-icon{color:var(--color-500)}.custom-fields-component .fi-dropdown-header.fi-color .fi-icon:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-dropdown-header.fi-color span{color:var(--text)}.custom-fields-component .fi-dropdown-header.fi-color span:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component :scope .fi-dropdown-trigger{cursor:pointer;display:flex}.custom-fields-component :scope .fi-dropdown-panel{background-color:var(--color-white);border-radius:var(--radius-lg);z-index:20;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);width:100vw;--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);max-width:14rem!important;position:absolute;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component :scope .fi-dropdown-panel:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :scope .fi-dropdown-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component :where(:scope .fi-dropdown-panel:not(.fi-dropdown-list)>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-100);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(:scope .fi-dropdown-panel:not(.fi-dropdown-list):where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(:scope .fi-dropdown-panel:not(.fi-dropdown-list):where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component :scope .fi-dropdown-panel.fi-opacity-0{opacity:0}.custom-fields-component :scope .fi-dropdown-panel.fi-width-xs{max-width:var(--container-xs)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-sm{max-width:var(--container-sm)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-md{max-width:var(--container-md)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-lg{max-width:var(--container-lg)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-xl{max-width:var(--container-xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-2xl{max-width:var(--container-2xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-3xl{max-width:var(--container-3xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-4xl{max-width:var(--container-4xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-5xl{max-width:var(--container-5xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-6xl{max-width:var(--container-6xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-width-7xl{max-width:var(--container-7xl)!important}.custom-fields-component :scope .fi-dropdown-panel.fi-scrollable{overflow-y:auto}.custom-fields-component .fi-dropdown-list{display:grid;gap:1px;padding:calc(var(--spacing)*1)}.custom-fields-component .fi-dropdown-list>.fi-grid{overflow-x:hidden}.custom-fields-component .fi-dropdown-list-item{align-items:center;border-radius:var(--radius-md);font-size:var(--text-sm);gap:calc(var(--spacing)*2);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*2);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));white-space:nowrap;width:100%;--tw-duration:75ms;--tw-outline-style:none;display:flex;outline-style:none;overflow:hidden;transition-duration:75ms;-webkit-user-select:none;user-select:none}@media (hover:hover){.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]):hover{background-color:var(--gray-50)}}.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]):focus-visible{background-color:var(--gray-50)}@media (hover:hover){.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected{background-color:var(--gray-50)}.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-dropdown-list-item.fi-disabled,.custom-fields-component .fi-dropdown-list-item[disabled]{cursor:default;opacity:.7}.custom-fields-component :is(.fi-dropdown-list-item.fi-disabled,.fi-dropdown-list-item[disabled]):not([x-tooltip]){pointer-events:none}.custom-fields-component .fi-dropdown-list-item .fi-icon{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-dropdown-list-item .fi-dropdown-list-item-image{background-position:50%;background-size:cover;border-radius:3.40282e+38px;height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.custom-fields-component .fi-dropdown-list-item>.fi-icon{color:var(--gray-400)}.custom-fields-component .fi-dropdown-list-item>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-dropdown-list-item>.fi-icon.fi-color{color:var(--color-500)}.custom-fields-component .fi-dropdown-list-item>.fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}@media (hover:hover){.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):hover{background-color:var(--color-50)}}.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):focus-visible{background-color:var(--color-50)}@media (hover:hover){.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}}.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected{background-color:var(--color-50)}.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.custom-fields-component .fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label{color:var(--text)}@media (hover:hover){.custom-fields-component .fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:hover{color:var(--hover-text)}}.custom-fields-component .fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:where(.dark,.dark *){color:var(--dark-text)}@media (hover:hover){.custom-fields-component .fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:where(.dark,.dark *):hover{color:var(--dark-hover-text)}}.custom-fields-component .fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label.fi-selected{color:var(--hover-text)}.custom-fields-component .fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label.fi-selected:where(.dark,.dark *){color:var(--dark-hover-text)}.custom-fields-component .fi-dropdown-list-item .fi-badge{min-width:1.25rem;padding-block:calc(var(--spacing)*.5);padding-inline:calc(var(--spacing)*1.5);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.custom-fields-component .fi-dropdown-list-item-label{color:var(--gray-700);flex:1;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-dropdown-list-item-label:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-empty-state{padding-block:calc(var(--spacing)*12);padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-empty-state:not(.fi-empty-state-not-contained){background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-empty-state:not(.fi-empty-state-not-contained):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-empty-state:not(.fi-empty-state-not-contained):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-empty-state .fi-empty-state-content{display:grid;justify-items:center;margin-inline:auto;max-width:var(--container-lg);text-align:center}.custom-fields-component .fi-empty-state .fi-empty-state-text-ctn{display:grid;justify-items:center;text-align:center}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg{background-color:var(--gray-100);border-radius:3.40282e+38px;margin-bottom:calc(var(--spacing)*4);padding:calc(var(--spacing)*3)}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg.fi-color{background-color:var(--color-100)}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg.fi-color:where(.dark,.dark *){background-color:var(--color-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-500)20%,transparent)}}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg .fi-icon.fi-color{color:var(--color-500)}.custom-fields-component .fi-empty-state .fi-empty-state-icon-bg .fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-empty-state .fi-empty-state-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-empty-state .fi-empty-state-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-empty-state .fi-empty-state-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-empty-state .fi-empty-state-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-empty-state .fi-empty-state-footer{margin-top:calc(var(--spacing)*6)}.custom-fields-component .fi-empty-state.fi-compact{padding-block:calc(var(--spacing)*6)}.custom-fields-component .fi-empty-state.fi-compact .fi-empty-state-content{align-items:flex-start;display:flex;gap:calc(var(--spacing)*4);margin-inline:calc(var(--spacing)*0);max-width:none;text-align:start}.custom-fields-component .fi-empty-state.fi-compact .fi-empty-state-icon-bg{flex-shrink:0;margin-bottom:calc(var(--spacing)*0)}.custom-fields-component .fi-empty-state.fi-compact .fi-empty-state-text-ctn{flex:1;justify-items:start;text-align:start}.custom-fields-component .fi-empty-state.fi-compact .fi-empty-state-description{margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-empty-state.fi-compact .fi-empty-state-footer{margin-top:calc(var(--spacing)*4)}.custom-fields-component .fi-fieldset>legend{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-inline:calc(var(--spacing)*2);--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium);margin-inline-start:calc(var(--spacing)*-2)}.custom-fields-component .fi-fieldset>legend:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fieldset>legend .fi-fieldset-label-required-mark{--tw-font-weight:var(--font-weight-medium);color:var(--danger-600);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fieldset>legend .fi-fieldset-label-required-mark:where(.dark,.dark *){color:var(--danger-400)}.custom-fields-component .fi-fieldset.fi-fieldset-label-hidden>legend{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.custom-fields-component .fi-fieldset:not(.fi-fieldset-not-contained){border-color:var(--gray-200);border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;padding:calc(var(--spacing)*6)}.custom-fields-component .fi-fieldset:not(.fi-fieldset-not-contained):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fieldset:not(.fi-fieldset-not-contained):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fieldset.fi-fieldset-not-contained{padding-top:calc(var(--spacing)*6)}.custom-fields-component .fi-grid:not(.fi-grid-direction-col){display:grid;grid-template-columns:var(--cols-default)}@media (min-width:40rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).sm\\:fi-grid-cols{grid-template-columns:var(--cols-sm)}}@media (min-width:48rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).md\\:fi-grid-cols{grid-template-columns:var(--cols-md)}}@media (min-width:64rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).lg\\:fi-grid-cols{grid-template-columns:var(--cols-lg)}}@media (min-width:80rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).xl\\:fi-grid-cols{grid-template-columns:var(--cols-xl)}}@media (min-width:96rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\32 xl\\:fi-grid-cols{grid-template-columns:var(--cols-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@3xs\\:fi-grid-cols{grid-template-columns:var(--cols-c3xs)}}@container (min-width:18rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@2xs\\:fi-grid-cols{grid-template-columns:var(--cols-c2xs)}}@container (min-width:20rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@xs\\:fi-grid-cols{grid-template-columns:var(--cols-cxs)}}@container (min-width:24rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@sm\\:fi-grid-cols{grid-template-columns:var(--cols-csm)}}@container (min-width:28rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@md\\:fi-grid-cols{grid-template-columns:var(--cols-cmd)}}@container (min-width:32rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@lg\\:fi-grid-cols{grid-template-columns:var(--cols-clg)}}@container (min-width:36rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@xl\\:fi-grid-cols{grid-template-columns:var(--cols-cxl)}}@container (min-width:42rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@2xl\\:fi-grid-cols{grid-template-columns:var(--cols-c2xl)}}@container (min-width:48rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@3xl\\:fi-grid-cols{grid-template-columns:var(--cols-c3xl)}}@container (min-width:56rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@4xl\\:fi-grid-cols{grid-template-columns:var(--cols-c4xl)}}@container (min-width:64rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@5xl\\:fi-grid-cols{grid-template-columns:var(--cols-c5xl)}}@container (min-width:72rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@6xl\\:fi-grid-cols{grid-template-columns:var(--cols-c6xl)}}@container (min-width:80rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\@7xl\\:fi-grid-cols{grid-template-columns:var(--cols-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\!\\@sm\\:fi-grid-cols{grid-template-columns:var(--cols-ncsm)}}@media (min-width:48rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\!\\@md\\:fi-grid-cols{grid-template-columns:var(--cols-ncmd)}}@media (min-width:64rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\!\\@lg\\:fi-grid-cols{grid-template-columns:var(--cols-nclg)}}@media (min-width:80rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\!\\@xl\\:fi-grid-cols{grid-template-columns:var(--cols-ncxl)}}@media (min-width:96rem){.custom-fields-component .fi-grid:not(.fi-grid-direction-col).\\!\\@2xl\\:fi-grid-cols{grid-template-columns:var(--cols-nc2xl)}}}.custom-fields-component .fi-grid.fi-grid-direction-col{columns:var(--cols-default)}@media (min-width:40rem){.custom-fields-component .fi-grid.fi-grid-direction-col.sm\\:fi-grid-cols{columns:var(--cols-sm)}}@media (min-width:48rem){.custom-fields-component .fi-grid.fi-grid-direction-col.md\\:fi-grid-cols{columns:var(--cols-md)}}@media (min-width:64rem){.custom-fields-component .fi-grid.fi-grid-direction-col.lg\\:fi-grid-cols{columns:var(--cols-lg)}}@media (min-width:80rem){.custom-fields-component .fi-grid.fi-grid-direction-col.xl\\:fi-grid-cols{columns:var(--cols-xl)}}@media (min-width:96rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\32 xl\\:fi-grid-cols{columns:var(--cols-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@3xs\\:fi-grid-cols{columns:var(--cols-c3xs)}}@container (min-width:18rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@2xs\\:fi-grid-cols{columns:var(--cols-c2xs)}}@container (min-width:20rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@xs\\:fi-grid-cols{columns:var(--cols-cxs)}}@container (min-width:24rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@sm\\:fi-grid-cols{columns:var(--cols-csm)}}@container (min-width:28rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@md\\:fi-grid-cols{columns:var(--cols-cmd)}}@container (min-width:32rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@lg\\:fi-grid-cols{columns:var(--cols-clg)}}@container (min-width:36rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@xl\\:fi-grid-cols{columns:var(--cols-cxl)}}@container (min-width:42rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@2xl\\:fi-grid-cols{columns:var(--cols-c2xl)}}@container (min-width:48rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@3xl\\:fi-grid-cols{columns:var(--cols-c3xl)}}@container (min-width:56rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@4xl\\:fi-grid-cols{columns:var(--cols-c4xl)}}@container (min-width:64rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@5xl\\:fi-grid-cols{columns:var(--cols-c5xl)}}@container (min-width:72rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@6xl\\:fi-grid-cols{columns:var(--cols-c6xl)}}@container (min-width:80rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\@7xl\\:fi-grid-cols{columns:var(--cols-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\!\\@sm\\:fi-grid-cols{columns:var(--cols-ncsm)}}@media (min-width:48rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\!\\@md\\:fi-grid-cols{columns:var(--cols-ncmd)}}@media (min-width:64rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\!\\@lg\\:fi-grid-cols{columns:var(--cols-nclg)}}@media (min-width:80rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\!\\@xl\\:fi-grid-cols{columns:var(--cols-ncxl)}}@media (min-width:96rem){.custom-fields-component .fi-grid.fi-grid-direction-col.\\!\\@2xl\\:fi-grid-cols{columns:var(--cols-nc2xl)}}}@supports (container-type:inline-size){.custom-fields-component .fi-grid-ctn{container-type:inline-size}}.custom-fields-component .fi-grid-col{grid-column:var(--col-span-default)}@media (min-width:40rem){.custom-fields-component .fi-grid-col.sm\\:fi-grid-col-span{grid-column:var(--col-span-sm)}}@media (min-width:48rem){.custom-fields-component .fi-grid-col.md\\:fi-grid-col-span{grid-column:var(--col-span-md)}}@media (min-width:64rem){.custom-fields-component .fi-grid-col.lg\\:fi-grid-col-span{grid-column:var(--col-span-lg)}}@media (min-width:80rem){.custom-fields-component .fi-grid-col.xl\\:fi-grid-col-span{grid-column:var(--col-span-xl)}}@media (min-width:96rem){.custom-fields-component .fi-grid-col.\\32 xl\\:fi-grid-col-span{grid-column:var(--col-span-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.custom-fields-component .fi-grid-col.\\@3xs\\:fi-grid-col-span{grid-column:var(--col-span-c3xs)}}@container (min-width:18rem){.custom-fields-component .fi-grid-col.\\@2xs\\:fi-grid-col-span{grid-column:var(--col-span-c2xs)}}@container (min-width:20rem){.custom-fields-component .fi-grid-col.\\@xs\\:fi-grid-col-span{grid-column:var(--col-span-cxs)}}@container (min-width:24rem){.custom-fields-component .fi-grid-col.\\@sm\\:fi-grid-col-span{grid-column:var(--col-span-csm)}}@container (min-width:28rem){.custom-fields-component .fi-grid-col.\\@md\\:fi-grid-col-span{grid-column:var(--col-span-cmd)}}@container (min-width:32rem){.custom-fields-component .fi-grid-col.\\@lg\\:fi-grid-col-span{grid-column:var(--col-span-clg)}}@container (min-width:36rem){.custom-fields-component .fi-grid-col.\\@xl\\:fi-grid-col-span{grid-column:var(--col-span-cxl)}}@container (min-width:42rem){.custom-fields-component .fi-grid-col.\\@2xl\\:fi-grid-col-span{grid-column:var(--col-span-c2xl)}}@container (min-width:48rem){.custom-fields-component .fi-grid-col.\\@3xl\\:fi-grid-col-span{grid-column:var(--col-span-c3xl)}}@container (min-width:56rem){.custom-fields-component .fi-grid-col.\\@4xl\\:fi-grid-col-span{grid-column:var(--col-span-c4xl)}}@container (min-width:64rem){.custom-fields-component .fi-grid-col.\\@5xl\\:fi-grid-col-span{grid-column:var(--col-span-c5xl)}}@container (min-width:72rem){.custom-fields-component .fi-grid-col.\\@6xl\\:fi-grid-col-span{grid-column:var(--col-span-c6xl)}}@container (min-width:80rem){.custom-fields-component .fi-grid-col.\\@7xl\\:fi-grid-col-span{grid-column:var(--col-span-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-grid-col.\\!\\@sm\\:fi-grid-col-span{grid-column:var(--col-span-ncsm)}}@media (min-width:48rem){.custom-fields-component .fi-grid-col.\\!\\@md\\:fi-grid-col-span{grid-column:var(--col-span-ncmd)}}@media (min-width:64rem){.custom-fields-component .fi-grid-col.\\!\\@lg\\:fi-grid-col-span{grid-column:var(--col-span-nclg)}}@media (min-width:80rem){.custom-fields-component .fi-grid-col.\\!\\@xl\\:fi-grid-col-span{grid-column:var(--col-span-ncxl)}}@media (min-width:96rem){.custom-fields-component .fi-grid-col.\\!\\@2xl\\:fi-grid-col-span{grid-column:var(--col-span-nc2xl)}}}.custom-fields-component .fi-grid-col.fi-grid-col-start{grid-column-start:var(--col-start-default)}@media (min-width:40rem){.custom-fields-component .fi-grid-col.sm\\:fi-grid-col-start{grid-column-start:var(--col-start-sm)}}@media (min-width:48rem){.custom-fields-component .fi-grid-col.md\\:fi-grid-col-start{grid-column-start:var(--col-start-md)}}@media (min-width:64rem){.custom-fields-component .fi-grid-col.lg\\:fi-grid-col-start{grid-column-start:var(--col-start-lg)}}@media (min-width:80rem){.custom-fields-component .fi-grid-col.xl\\:fi-grid-col-start{grid-column-start:var(--col-start-xl)}}@media (min-width:96rem){.custom-fields-component .fi-grid-col.\\32 xl\\:fi-grid-col-start{grid-column-start:var(--col-start-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.custom-fields-component .fi-grid-col.\\@3xs\\:fi-grid-col-start{grid-column-start:var(--col-start-c3xs)}}@container (min-width:18rem){.custom-fields-component .fi-grid-col.\\@2xs\\:fi-grid-col-start{grid-column-start:var(--col-start-c2xs)}}@container (min-width:20rem){.custom-fields-component .fi-grid-col.\\@xs\\:fi-grid-col-start{grid-column-start:var(--col-start-cxs)}}@container (min-width:24rem){.custom-fields-component .fi-grid-col.\\@sm\\:fi-grid-col-start{grid-column-start:var(--col-start-csm)}}@container (min-width:28rem){.custom-fields-component .fi-grid-col.\\@md\\:fi-grid-col-start{grid-column-start:var(--col-start-cmd)}}@container (min-width:32rem){.custom-fields-component .fi-grid-col.\\@lg\\:fi-grid-col-start{grid-column-start:var(--col-start-clg)}}@container (min-width:36rem){.custom-fields-component .fi-grid-col.\\@xl\\:fi-grid-col-start{grid-column-start:var(--col-start-cxl)}}@container (min-width:42rem){.custom-fields-component .fi-grid-col.\\@2xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c2xl)}}@container (min-width:48rem){.custom-fields-component .fi-grid-col.\\@3xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c3xl)}}@container (min-width:56rem){.custom-fields-component .fi-grid-col.\\@4xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c4xl)}}@container (min-width:64rem){.custom-fields-component .fi-grid-col.\\@5xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c5xl)}}@container (min-width:72rem){.custom-fields-component .fi-grid-col.\\@6xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c6xl)}}@container (min-width:80rem){.custom-fields-component .fi-grid-col.\\@7xl\\:fi-grid-col-start{grid-column-start:var(--col-start-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-grid-col.\\!\\@sm\\:fi-grid-col-start{grid-column-start:var(--col-start-ncsm)}}@media (min-width:48rem){.custom-fields-component .fi-grid-col.\\!\\@md\\:fi-grid-col-start{grid-column-start:var(--col-start-ncmd)}}@media (min-width:64rem){.custom-fields-component .fi-grid-col.\\!\\@lg\\:fi-grid-col-start{grid-column-start:var(--col-start-nclg)}}@media (min-width:80rem){.custom-fields-component .fi-grid-col.\\!\\@xl\\:fi-grid-col-start{grid-column-start:var(--col-start-ncxl)}}@media (min-width:96rem){.custom-fields-component .fi-grid-col.\\!\\@2xl\\:fi-grid-col-start{grid-column-start:var(--col-start-nc2xl)}}}.custom-fields-component .fi-grid-col.fi-grid-col-order{order:var(--col-order-default)}@media (min-width:40rem){.custom-fields-component .fi-grid-col.sm\\:fi-grid-col-order{order:var(--col-order-sm)}}@media (min-width:48rem){.custom-fields-component .fi-grid-col.md\\:fi-grid-col-order{order:var(--col-order-md)}}@media (min-width:64rem){.custom-fields-component .fi-grid-col.lg\\:fi-grid-col-order{order:var(--col-order-lg)}}@media (min-width:80rem){.custom-fields-component .fi-grid-col.xl\\:fi-grid-col-order{order:var(--col-order-xl)}}@media (min-width:96rem){.custom-fields-component .fi-grid-col.\\32 xl\\:fi-grid-col-order{order:var(--col-order-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.custom-fields-component .fi-grid-col.\\@3xs\\:fi-grid-col-order{order:var(--col-order-c3xs)}}@container (min-width:18rem){.custom-fields-component .fi-grid-col.\\@2xs\\:fi-grid-col-order{order:var(--col-order-c2xs)}}@container (min-width:20rem){.custom-fields-component .fi-grid-col.\\@xs\\:fi-grid-col-order{order:var(--col-order-cxs)}}@container (min-width:24rem){.custom-fields-component .fi-grid-col.\\@sm\\:fi-grid-col-order{order:var(--col-order-csm)}}@container (min-width:28rem){.custom-fields-component .fi-grid-col.\\@md\\:fi-grid-col-order{order:var(--col-order-cmd)}}@container (min-width:32rem){.custom-fields-component .fi-grid-col.\\@lg\\:fi-grid-col-order{order:var(--col-order-clg)}}@container (min-width:36rem){.custom-fields-component .fi-grid-col.\\@xl\\:fi-grid-col-order{order:var(--col-order-cxl)}}@container (min-width:42rem){.custom-fields-component .fi-grid-col.\\@2xl\\:fi-grid-col-order{order:var(--col-order-c2xl)}}@container (min-width:48rem){.custom-fields-component .fi-grid-col.\\@3xl\\:fi-grid-col-order{order:var(--col-order-c3xl)}}@container (min-width:56rem){.custom-fields-component .fi-grid-col.\\@4xl\\:fi-grid-col-order{order:var(--col-order-c4xl)}}@container (min-width:64rem){.custom-fields-component .fi-grid-col.\\@5xl\\:fi-grid-col-order{order:var(--col-order-c5xl)}}@container (min-width:72rem){.custom-fields-component .fi-grid-col.\\@6xl\\:fi-grid-col-order{order:var(--col-order-c6xl)}}@container (min-width:80rem){.custom-fields-component .fi-grid-col.\\@7xl\\:fi-grid-col-order{order:var(--col-order-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-grid-col.\\!\\@sm\\:fi-grid-col-order{order:var(--col-order-ncsm)}}@media (min-width:48rem){.custom-fields-component .fi-grid-col.\\!\\@md\\:fi-grid-col-order{order:var(--col-order-ncmd)}}@media (min-width:64rem){.custom-fields-component .fi-grid-col.\\!\\@lg\\:fi-grid-col-order{order:var(--col-order-nclg)}}@media (min-width:80rem){.custom-fields-component .fi-grid-col.\\!\\@xl\\:fi-grid-col-order{order:var(--col-order-ncxl)}}@media (min-width:96rem){.custom-fields-component .fi-grid-col.\\!\\@2xl\\:fi-grid-col-order{order:var(--col-order-nc2xl)}}}.custom-fields-component .fi-grid-col.fi-hidden{display:none}.custom-fields-component .fi-icon{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.custom-fields-component .fi-icon.fi-size-xs{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.custom-fields-component .fi-icon.fi-size-sm{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.custom-fields-component .fi-icon.fi-size-md{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.custom-fields-component .fi-icon.fi-size-lg{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.custom-fields-component .fi-icon.fi-size-xl{height:calc(var(--spacing)*7);width:calc(var(--spacing)*7)}.custom-fields-component .fi-icon.fi-size-2xl{height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.custom-fields-component .fi-icon>svg{height:inherit;width:inherit}.custom-fields-component .fi-icon-btn{border-radius:var(--radius-lg);color:var(--gray-500);height:calc(var(--spacing)*9);margin:calc(var(--spacing)*-2);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));width:calc(var(--spacing)*9);--tw-duration:75ms;--tw-outline-style:none;align-items:center;display:flex;justify-content:center;outline-style:none;position:relative;transition-duration:75ms}.custom-fields-component .fi-icon-btn:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.custom-fields-component :is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):hover{color:var(--gray-600)}}.custom-fields-component :is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}@media (hover:hover){.custom-fields-component :is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{color:var(--gray-400)}}.custom-fields-component :is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500)}.custom-fields-component .fi-icon-btn.fi-disabled:not(.fi-force-enabled),.custom-fields-component .fi-icon-btn[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}.custom-fields-component :is(.fi-icon-btn.fi-disabled:not(.fi-force-enabled),.fi-icon-btn[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.custom-fields-component .fi-icon-btn.fi-size-xs{height:calc(var(--spacing)*7);width:calc(var(--spacing)*7)}.custom-fields-component .fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-1.5)}.custom-fields-component .fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-1)}.custom-fields-component .fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-.5)}.custom-fields-component .fi-icon-btn.fi-size-sm{height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.custom-fields-component .fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-2)}.custom-fields-component .fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-1.5)}.custom-fields-component .fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-1)}.custom-fields-component .fi-icon-btn.fi-size-md:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-2.5)}.custom-fields-component .fi-icon-btn.fi-size-md:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-1.5)}.custom-fields-component .fi-icon-btn.fi-size-lg{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10)}.custom-fields-component .fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-3)}.custom-fields-component .fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-2.5)}.custom-fields-component .fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-2)}.custom-fields-component .fi-icon-btn.fi-size-xl{height:calc(var(--spacing)*11);width:calc(var(--spacing)*11)}.custom-fields-component .fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-3.5)}.custom-fields-component .fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-3)}.custom-fields-component .fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-2.5)}.custom-fields-component .fi-icon-btn.fi-color{color:var(--text)}.custom-fields-component .fi-icon-btn.fi-color:where(.dark,.dark *){color:var(--dark-text)}@media (hover:hover){.custom-fields-component :is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):hover{color:var(--hover-text)}}.custom-fields-component :is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-600)}@media (hover:hover){.custom-fields-component :is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{color:var(--dark-hover-text)}}.custom-fields-component :is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-500)}.custom-fields-component .fi-icon-btn>.fi-icon-btn-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*1);z-index:1;--tw-translate-x:-50%;--tw-translate-y:-50%;background-color:var(--color-white);border-radius:var(--radius-md);display:flex;position:absolute;translate:var(--tw-translate-x)var(--tw-translate-y);width:max-content}.custom-fields-component .fi-icon-btn>.fi-icon-btn-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-icon-btn>.fi-icon-btn-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}@media (min-width:40rem){.custom-fields-component .fi-icon-btn:has(+.fi-btn.fi-labeled-from-sm){display:none}}@media (min-width:48rem){.custom-fields-component .fi-icon-btn:has(+.fi-btn.fi-labeled-from-md){display:none}}@media (min-width:64rem){.custom-fields-component .fi-icon-btn:has(+.fi-btn.fi-labeled-from-lg){display:none}}@media (min-width:80rem){.custom-fields-component .fi-icon-btn:has(+.fi-btn.fi-labeled-from-xl){display:none}}@media (min-width:96rem){.custom-fields-component .fi-icon-btn:has(+.fi-btn.fi-labeled-from-2xl){display:none}}.custom-fields-component input[type=checkbox].fi-checkbox-input{appearance:none;height:calc(var(--spacing)*4);width:calc(var(--spacing)*4);--tw-border-style:none;background-color:var(--color-white);color:var(--primary-600);vertical-align:middle;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-radius:.25rem;border-style:none}.custom-fields-component input[type=checkbox].fi-checkbox-input:checked{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component input[type=checkbox].fi-checkbox-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.custom-fields-component input[type=checkbox].fi-checkbox-input:checked:focus{--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:disabled{background-color:var(--gray-50);color:var(--gray-50);pointer-events:none}.custom-fields-component input[type=checkbox].fi-checkbox-input:disabled:checked{background-color:var(--gray-400);color:var(--gray-400)}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){color:var(--primary-500);--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked{background-color:var(--primary-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):focus{--tw-ring-color:var(--primary-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled{--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled:checked{background-color:var(--gray-600)}.custom-fields-component input[type=checkbox].fi-checkbox-input:checked{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E\")}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:where(.dark,.dark *){background-color:var(--primary-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 6.75a1.25 1.25 0 0 0 0 2.5h7a1.25 1.25 0 0 0 0-2.5z'/%3E%3C/svg%3E\")}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:disabled{background-color:var(--gray-400)}.custom-fields-component input[type=checkbox].fi-checkbox-input:indeterminate:disabled:where(.dark,.dark *){background-color:var(--gray-600)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid{color:var(--danger-600);--tw-ring-color:var(--danger-600)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:checked{background-color:var(--danger-600)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:focus{--tw-ring-color:var(--danger-600)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:checked:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *){color:var(--danger-500);--tw-ring-color:var(--danger-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked{background-color:var(--danger-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):focus{--tw-ring-color:var(--danger-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate{background-color:var(--danger-600)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:where(.dark,.dark *){background-color:var(--danger-500)}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}.custom-fields-component input.fi-input{appearance:none;--tw-border-style:none;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);text-align:start;width:100%;--tw-leading:calc(var(--spacing)*6);color:var(--gray-950);line-height:calc(var(--spacing)*6);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;background-color:#0000;border-style:none;display:block;transition-duration:75ms}.custom-fields-component input.fi-input::placeholder{color:var(--gray-400)}.custom-fields-component input.fi-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.custom-fields-component input.fi-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.custom-fields-component input.fi-input:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component input.fi-input:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component input.fi-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.custom-fields-component input.fi-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component input.fi-input:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}@supports (-webkit-touch-callout:none){.custom-fields-component input.fi-input{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.custom-fields-component input.fi-input.fi-input-has-inline-prefix{padding-inline-start:calc(var(--spacing)*0)}.custom-fields-component input.fi-input.fi-input-has-inline-suffix{padding-inline-end:calc(var(--spacing)*0)}.custom-fields-component input.fi-input.fi-align-center{text-align:center}.custom-fields-component input.fi-input.fi-align-end{text-align:end}.custom-fields-component input.fi-input.fi-align-left{text-align:left}.custom-fields-component input.fi-input.fi-align-right{text-align:end}.custom-fields-component input.fi-input.fi-align-between,.custom-fields-component input.fi-input.fi-align-justify{text-align:justify}.custom-fields-component input[type=date].fi-input,.custom-fields-component input[type=datetime-local].fi-input,.custom-fields-component input[type=time].fi-input{background-color:#ffffff03}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=date].fi-input,.custom-fields-component input[type=datetime-local].fi-input,.custom-fields-component input[type=time].fi-input{background-color:color-mix(in oklab,var(--color-white)1%,transparent)}}.custom-fields-component input[type=range].fi-input{appearance:auto;margin-inline:auto;width:calc(100% - 1.5rem)}.custom-fields-component input[type=text].fi-one-time-code-input{inset-block:calc(var(--spacing)*0);left:calc(var(--spacing)*0);right:calc(var(--spacing)*-8);--tw-border-style:none;font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;padding-inline:calc(var(--spacing)*3);--tw-tracking:1.72rem;color:var(--gray-950);letter-spacing:1.72rem;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;background-color:#0000;border-style:none;display:block;position:absolute;transition-duration:75ms}.custom-fields-component input[type=text].fi-one-time-code-input::placeholder{color:var(--gray-400)}.custom-fields-component input[type=text].fi-one-time-code-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.custom-fields-component input[type=text].fi-one-time-code-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.custom-fields-component input[type=text].fi-one-time-code-input:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component input[type=text].fi-one-time-code-input:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component input[type=text].fi-one-time-code-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.custom-fields-component input[type=text].fi-one-time-code-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component input[type=text].fi-one-time-code-input:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}.custom-fields-component input[type=text].fi-one-time-code-input.fi-valid{caret-color:#0000}.custom-fields-component .fi-one-time-code-input-ctn{height:calc(var(--spacing)*12);position:relative}.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{border-color:var(--gray-950);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;display:inline-block;height:100%;width:calc(var(--spacing)*8)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{background-color:var(--color-white)}.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field.fi-active{border-color:var(--primary-600);border-style:var(--tw-border-style);border-width:2px}.custom-fields-component .fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field.fi-active:where(.dark,.dark *){border-color:var(--primary-500)}.custom-fields-component input[type=radio].fi-radio-input{appearance:none;height:calc(var(--spacing)*4);width:calc(var(--spacing)*4);--tw-border-style:none;background-color:var(--color-white);color:var(--primary-600);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-radius:3.40282e+38px;border-style:none}.custom-fields-component input[type=radio].fi-radio-input,.custom-fields-component input[type=radio].fi-radio-input:checked{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component input[type=radio].fi-radio-input:checked{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.custom-fields-component input[type=radio].fi-radio-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.custom-fields-component input[type=radio].fi-radio-input:checked:focus{--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input:checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}.custom-fields-component input[type=radio].fi-radio-input:disabled{background-color:var(--gray-50);color:var(--gray-50)}.custom-fields-component input[type=radio].fi-radio-input:disabled:checked{background-color:var(--gray-400);color:var(--gray-400)}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *){color:var(--primary-500);--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):checked{background-color:var(--primary-500)}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):focus{--tw-ring-color:var(--primary-500)}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):disabled{--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component input[type=radio].fi-radio-input:where(.dark,.dark *):disabled:checked{background-color:var(--gray-600)}.custom-fields-component input[type=radio].fi-radio-input:checked{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E\")}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid{color:var(--danger-600);--tw-ring-color:var(--danger-600)}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:checked{background-color:var(--danger-600)}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:focus{--tw-ring-color:var(--danger-600)}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:checked:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *){color:var(--danger-500);--tw-ring-color:var(--danger-500)}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked{background-color:var(--danger-500)}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):focus{--tw-ring-color:var(--danger-500)}.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}.custom-fields-component select.fi-select-input{appearance:none;--tw-border-style:none;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);width:100%;--tw-leading:calc(var(--spacing)*6);color:var(--gray-950);line-height:calc(var(--spacing)*6);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;background-color:#0000;border-style:none;display:block;padding-inline-end:calc(var(--spacing)*8);padding-inline-start:calc(var(--spacing)*3);transition-duration:75ms}.custom-fields-component select.fi-select-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.custom-fields-component select.fi-select-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.custom-fields-component select.fi-select-input:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component select.fi-select-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component select.fi-select-input optgroup{background-color:var(--color-white)}.custom-fields-component select.fi-select-input optgroup:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component select.fi-select-input option{background-color:var(--color-white)}.custom-fields-component select.fi-select-input option:where(.dark,.dark *){background-color:var(--gray-900)}@supports (-webkit-touch-callout:none){.custom-fields-component select.fi-select-input{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.custom-fields-component select.fi-select-input{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em}.custom-fields-component select.fi-select-input:where(:dir(rtl),[dir=rtl],[dir=rtl] *){background-position:.5rem}.custom-fields-component select.fi-select-input.fi-select-input-has-inline-prefix{padding-inline-start:calc(var(--spacing)*0)}.custom-fields-component .fi-select-input .fi-select-input-ctn{position:relative}.custom-fields-component .fi-select-input div[x-ref=select]{min-height:calc(var(--spacing)*9)}.custom-fields-component .fi-select-input .fi-select-input-btn{border-radius:var(--radius-lg);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));min-height:calc(var(--spacing)*9);padding-block:calc(var(--spacing)*1.5);text-align:start;width:100%;--tw-leading:calc(var(--spacing)*6);color:var(--gray-950);display:flex;line-height:calc(var(--spacing)*6);padding-inline-end:calc(var(--spacing)*8);padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-select-input .fi-select-input-btn:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.custom-fields-component .fi-select-input .fi-select-input-btn:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-select-input .fi-select-input-btn{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em}.custom-fields-component .fi-select-input .fi-select-input-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){background-position:.5rem}.custom-fields-component .fi-select-input .fi-select-input-value-ctn{align-items:center;display:flex;text-wrap:wrap;width:100%;word-break:break-word}.custom-fields-component .fi-select-input .fi-select-input-value-badges-ctn{display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*1.5)}.custom-fields-component .fi-select-input .fi-select-input-value-label{flex:1}.custom-fields-component .fi-select-input .fi-select-input-value-remove-btn{--tw-translate-y:-50%;color:var(--gray-500);inset-inline-end:calc(var(--spacing)*8);position:absolute;top:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (hover:hover){.custom-fields-component .fi-select-input .fi-select-input-value-remove-btn:hover{color:var(--gray-600)}}.custom-fields-component .fi-select-input .fi-select-input-value-remove-btn:focus-visible{color:var(--gray-600);--tw-outline-style:none;outline-style:none}@media (hover:hover){.custom-fields-component .fi-select-input .fi-select-input-value-remove-btn:where(.dark,.dark *):hover{color:var(--gray-300)}}.custom-fields-component .fi-select-input .fi-select-input-value-remove-btn:where(.dark,.dark *):focus-visible{color:var(--gray-300)}.custom-fields-component .fi-select-input .fi-select-input-ctn-clearable .fi-select-input-btn{padding-inline-end:calc(var(--spacing)*14)}.custom-fields-component .fi-select-input .fi-dropdown-panel{max-height:calc(var(--spacing)*60);max-width:100%!important}.custom-fields-component :where(.fi-select-input .fi-select-input-options-ctn>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-100);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-select-input .fi-select-input-options-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-select-input .fi-select-input-options-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component :where(.fi-select-input .fi-select-input-option-group>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-100);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-select-input .fi-select-input-option-group:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-select-input .fi-select-input-option-group:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-select-input .fi-select-input-option-group .fi-dropdown-header{--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-select-input .fi-select-input-option-group .fi-dropdown-header:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-select-input .fi-select-input-search-ctn{background-color:var(--color-white);position:sticky;top:calc(var(--spacing)*0);z-index:10}.custom-fields-component .fi-select-input .fi-select-input-search-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-select-input .fi-select-input-option{min-width:1px;text-wrap:wrap;word-break:break-word}.custom-fields-component .fi-select-input .fi-select-input-placeholder{color:var(--gray-400)}.custom-fields-component .fi-select-input .fi-select-input-placeholder:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-select-input .fi-disabled{cursor:not-allowed;opacity:.7}.custom-fields-component .fi-select-input .fi-disabled .fi-select-input-placeholder{color:var(--gray-400)}.custom-fields-component .fi-select-input .fi-disabled .fi-select-input-placeholder:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-select-input .fi-select-input-message{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-select-input .fi-select-input-message:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-select-input .fi-select-input-ctn.fi-select-input-ctn-option-labels-not-wrapped .fi-select-input-value-ctn>span{overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;word-break:normal}.custom-fields-component .fi-select-input .fi-select-input-ctn.fi-select-input-ctn-option-labels-not-wrapped .fi-select-input-option>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-input-wrp{background-color:var(--color-white);border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;display:flex;transition-duration:75ms}.custom-fields-component .fi-input-wrp:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-input-wrp:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-input-wrp:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-input-wrp:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}.custom-fields-component .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):where(.dark,.dark *):focus-within{--tw-ring-color:var(--primary-500)}.custom-fields-component .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:focus-within{--tw-ring-color:var(--danger-600)}.custom-fields-component .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:where(.dark,.dark *):focus-within{--tw-ring-color:var(--danger-500)}.custom-fields-component .fi-input-wrp.fi-disabled{background-color:var(--gray-50)}.custom-fields-component .fi-input-wrp.fi-disabled:where(.dark,.dark *){background-color:#0000}.custom-fields-component .fi-input-wrp.fi-disabled:not(.fi-invalid):where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-input-wrp.fi-disabled:not(.fi-invalid):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-input-wrp.fi-invalid{--tw-ring-color:var(--danger-600)}.custom-fields-component .fi-input-wrp.fi-invalid:where(.dark,.dark *){--tw-ring-color:var(--danger-500)}.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix{align-items:center;column-gap:calc(var(--spacing)*3);display:none;padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix.fi-input-wrp-prefix-has-content{display:flex}.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix.fi-inline{padding-inline-end:calc(var(--spacing)*2)}.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix.fi-inline.fi-input-wrp-prefix-has-label{padding-inline-end:calc(var(--spacing)*1)}.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline){border-color:var(--gray-200);border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;padding-inline-end:calc(var(--spacing)*3);padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-input-wrp .fi-input-wrp-content-ctn,.custom-fields-component .fi-input-wrp:not(:has(.fi-input-wrp-content-ctn))>*{flex:1;min-width:calc(var(--spacing)*0)}.custom-fields-component :is(.fi-input-wrp .fi-input-wrp-content-ctn,.fi-input-wrp:not(:has(.fi-input-wrp-content-ctn))>*).fi-input-wrp-content-ctn-ps{padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-input-wrp .fi-input-wrp-suffix{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;padding-inline-end:calc(var(--spacing)*3)}.custom-fields-component .fi-input-wrp .fi-input-wrp-suffix.fi-inline{padding-inline-start:calc(var(--spacing)*2)}.custom-fields-component .fi-input-wrp .fi-input-wrp-suffix.fi-inline.fi-input-wrp-suffix-has-label{padding-inline-start:calc(var(--spacing)*1)}.custom-fields-component .fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline){border-color:var(--gray-200);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-input-wrp .fi-input-wrp-actions{align-items:center;display:flex;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-input-wrp .fi-input-wrp-label{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap}.custom-fields-component .fi-input-wrp .fi-input-wrp-label:where(.dark,.dark *),.custom-fields-component :is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon{color:var(--gray-400)}.custom-fields-component :is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component :is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon.fi-color{color:var(--color-500)}.custom-fields-component .fi-link{align-items:center;gap:calc(var(--spacing)*1.5);justify-content:center;--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);font-weight:var(--font-weight-medium);--tw-outline-style:none;display:inline-flex;outline-style:none;position:relative}.custom-fields-component .fi-link:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){.custom-fields-component :is(.fi-link.fi-force-enabled,.fi-link:not(.fi-disabled):not([disabled])):hover{text-decoration-line:underline}}.custom-fields-component :is(.fi-link.fi-force-enabled,.fi-link:not(.fi-disabled):not([disabled])):focus-visible{text-decoration-line:underline}.custom-fields-component .fi-link.fi-disabled:not(.fi-force-enabled),.custom-fields-component .fi-link[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}.custom-fields-component :is(.fi-link.fi-disabled:not(.fi-force-enabled),.fi-link[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.custom-fields-component .fi-link.fi-size-xs{font-size:var(--text-xs);gap:calc(var(--spacing)*1);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-link.fi-size-sm{font-size:var(--text-sm);gap:calc(var(--spacing)*1);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-link.fi-size-lg,.custom-fields-component .fi-link.fi-size-md,.custom-fields-component .fi-link.fi-size-xl{font-size:var(--text-sm);gap:calc(var(--spacing)*1.5);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-link.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.custom-fields-component .fi-link.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.custom-fields-component .fi-link.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.custom-fields-component .fi-link.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.custom-fields-component .fi-link.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-link.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.custom-fields-component .fi-link.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.custom-fields-component .fi-link.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.custom-fields-component .fi-link.fi-color{color:var(--text)}.custom-fields-component .fi-link.fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-link:not(.fi-color)>.fi-icon{color:var(--gray-400)}.custom-fields-component .fi-link:not(.fi-color)>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-link .fi-link-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*0);z-index:1;--tw-translate-x:-25%;--tw-translate-y:-75%;background-color:var(--color-white);border-radius:var(--radius-md);translate:var(--tw-translate-x)var(--tw-translate-y);width:max-content;--tw-font-weight:var(--font-weight-normal);display:flex;font-weight:var(--font-weight-normal);position:absolute}@media (hover:hover){.custom-fields-component .fi-link .fi-link-badge-ctn:hover{text-decoration-line:none}}.custom-fields-component .fi-link .fi-link-badge-ctn:focus-visible{text-decoration-line:none}.custom-fields-component .fi-link .fi-link-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:25%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-link .fi-link-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component p>.fi-link,.custom-fields-component span>.fi-link{padding-bottom:2px;text-align:inherit;vertical-align:middle}.custom-fields-component .fi-loading-indicator{animation:var(--animate-spin)}.custom-fields-component .fi-loading-section{animation:var(--animate-pulse)}.custom-fields-component :is(.fi-modal.fi-modal-slide-over,.fi-modal.fi-width-screen)>.fi-modal-window-ctn>.fi-modal-window{height:100dvh}.custom-fields-component :is(.fi-modal.fi-modal-slide-over,.fi-modal.fi-width-screen)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content{flex:1}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window{margin-inline-start:auto;overflow-y:auto}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component :is(.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-end,.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-start{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header{column-gap:calc(var(--spacing)*3)}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg{margin-block:calc(var(--spacing)*-2);margin-inline-start:calc(var(--spacing)*-2);padding:calc(var(--spacing)*2)}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{inset-inline-end:calc(var(--spacing)*6);top:calc(var(--spacing)*6)}.custom-fields-component .fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen):not(.fi-modal-has-sticky-header):not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn{overflow-y:auto}.custom-fields-component :is(.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-header,.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window{max-height:calc(100dvh - 2rem);overflow-y:auto}.custom-fields-component .fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.custom-fields-component .fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;opacity:0;scale:var(--tw-scale-x)var(--tw-scale-y)}.custom-fields-component .fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-end,.custom-fields-component .fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-start{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;opacity:1;scale:var(--tw-scale-x)var(--tw-scale-y)}.custom-fields-component .fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{inset-inline-end:calc(var(--spacing)*4);top:calc(var(--spacing)*4)}.custom-fields-component .fi-modal.fi-align-start:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window-has-icon .fi-modal-content,.custom-fields-component .fi-modal.fi-align-start:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window-has-icon .fi-modal-footer:not(.fi-align-center){padding-inline-end:calc(var(--spacing)*6);padding-inline-start:5.25rem}.custom-fields-component .fi-modal:not(.fi-align-start)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content,.custom-fields-component .fi-modal:not(.fi-align-start)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-modal>.fi-modal-close-overlay{background-color:var(--gray-950);inset:calc(var(--spacing)*0);position:fixed;z-index:40}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal>.fi-modal-close-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.custom-fields-component .fi-modal>.fi-modal-close-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal>.fi-modal-close-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}.custom-fields-component .fi-modal>.fi-modal-window-ctn{display:grid;grid-template-rows:1fr auto 1fr;inset:calc(var(--spacing)*0);justify-items:center;min-height:100%;position:fixed;z-index:40}@media (min-width:40rem){.custom-fields-component .fi-modal>.fi-modal-window-ctn{grid-template-rows:1fr auto 3fr}}.custom-fields-component .fi-modal>.fi-modal-window-ctn.fi-clickable{cursor:pointer}.custom-fields-component .fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen)>.fi-modal-window-ctn{padding:calc(var(--spacing)*4)}.custom-fields-component .fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen)>.fi-modal-window-ctn .fi-modal-window{border-radius:var(--radius-xl);margin-inline:auto}.custom-fields-component .fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.custom-fields-component .fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{border-bottom-left-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window{background-color:var(--color-white);cursor:default;pointer-events:auto;--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);width:100%;--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex;flex-direction:column;grid-row-start:2;position:relative}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header{display:flex;padding-inline:calc(var(--spacing)*6);padding-top:calc(var(--spacing)*6)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-top:calc(var(--spacing)*2)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content{display:flex;flex-direction:column;padding-block:calc(var(--spacing)*6);row-gap:calc(var(--spacing)*4)}.custom-fields-component :is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-left) .fi-modal-header{column-gap:calc(var(--spacing)*5)}.custom-fields-component :is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-left) .fi-modal-icon-bg{padding:calc(var(--spacing)*2)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-header{flex-direction:column;text-align:center}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-icon-ctn{align-items:center;display:flex;justify-content:center;margin-bottom:calc(var(--spacing)*5)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-icon-bg{padding:calc(var(--spacing)*3)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-hidden{display:none}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-xs{max-width:var(--container-xs)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-sm{max-width:var(--container-sm)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-md{max-width:var(--container-md)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-lg{max-width:var(--container-lg)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-xl{max-width:var(--container-xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-2xl{max-width:var(--container-2xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-3xl{max-width:var(--container-3xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-4xl{max-width:var(--container-4xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-5xl{max-width:var(--container-5xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-6xl{max-width:var(--container-6xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-7xl{max-width:var(--container-7xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-full{max-width:100%}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-min{max-width:min-content}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-max{max-width:max-content}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-fit{max-width:fit-content}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-prose{max-width:65ch}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-sm{max-width:var(--breakpoint-sm)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-md{max-width:var(--breakpoint-md)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-lg{max-width:var(--breakpoint-lg)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-xl{max-width:var(--breakpoint-xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-2xl{max-width:var(--breakpoint-2xl)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen{inset:calc(var(--spacing)*0);position:fixed}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter,.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave{--tw-duration:.3s;transition-duration:.3s}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-center:not(.fi-modal-window-has-icon) .fi-modal-heading{margin-inline-start:calc(var(--spacing)*6)}.custom-fields-component :is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn:not(.fi-modal-window-has-icon),.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-left) .fi-modal-heading{margin-inline-end:calc(var(--spacing)*6)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{position:absolute}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{width:100%}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer .fi-modal-footer-actions{gap:calc(var(--spacing)*3)}.custom-fields-component :is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-left) .fi-modal-footer-actions{align-items:center;display:flex;flex-wrap:wrap}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center{padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{display:flex;flex-direction:column-reverse}.custom-fields-component :is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-end,.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-right) .fi-modal-footer-actions{align-items:center;display:flex;flex-flow:row-reverse wrap}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg{background-color:var(--gray-100);border-radius:3.40282e+38px}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg>.fi-icon{color:var(--gray-500)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg>.fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color{background-color:var(--color-100)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color:where(.dark,.dark *){background-color:var(--color-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-500)20%,transparent)}}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color>.fi-icon{color:var(--color-600)}.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color>.fi-icon:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header{background-color:var(--color-white);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-bottom:calc(var(--spacing)*6);position:sticky;top:calc(var(--spacing)*0);z-index:10}.custom-fields-component .fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content,.custom-fields-component .fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{background-color:var(--color-white);border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;bottom:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*5);position:sticky}.custom-fields-component .fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-content) .fi-modal-footer{margin-top:calc(var(--spacing)*6)}.custom-fields-component .fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer,.custom-fields-component .fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-content):not(.fi-modal-window-has-footer) .fi-modal-header{padding-bottom:calc(var(--spacing)*6)}.custom-fields-component .fi-modal:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-icon) .fi-modal-content,.custom-fields-component .fi-modal:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-icon) .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{margin-top:auto}@supports (container-type:inline-size){.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center{container-type:inline-size}@container (min-width:24rem){.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}}}.custom-fields-component :scope .fi-modal-trigger{display:flex}.custom-fields-component .fi-pagination{align-items:center;column-gap:calc(var(--spacing)*3);display:grid;grid-template-columns:1fr auto 1fr}.custom-fields-component .fi-pagination:empty{display:none}.custom-fields-component .fi-pagination .fi-pagination-previous-btn{justify-self:flex-start}.custom-fields-component .fi-pagination .fi-pagination-overview{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);display:none;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-pagination .fi-pagination-overview:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-pagination .fi-pagination-records-per-page-select-ctn{grid-column-start:2;justify-self:center}.custom-fields-component .fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:none}.custom-fields-component .fi-pagination .fi-pagination-next-btn{grid-column-start:3;justify-self:flex-end}.custom-fields-component .fi-pagination .fi-pagination-items{background-color:var(--color-white);border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);display:none;justify-self:flex-end}.custom-fields-component .fi-pagination .fi-pagination-items:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-pagination .fi-pagination-items:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-pagination .fi-pagination-items:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-pagination .fi-pagination-items:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-pagination .fi-pagination-item{border-color:var(--gray-200);border-inline-style:var(--tw-border-style);border-inline-width:.5px}.custom-fields-component .fi-pagination .fi-pagination-item:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.custom-fields-component .fi-pagination .fi-pagination-item:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.custom-fields-component .fi-pagination .fi-pagination-item:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-pagination .fi-pagination-item:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn{background-color:var(--gray-50)}.custom-fields-component .fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-label{color:var(--primary-700)}.custom-fields-component .fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-label:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-pagination .fi-pagination-item:first-of-type .fi-pagination-item-btn{border-end-start-radius:var(--radius-lg);border-start-start-radius:var(--radius-lg)}.custom-fields-component .fi-pagination .fi-pagination-item:last-of-type .fi-pagination-item-btn{border-end-end-radius:var(--radius-lg);border-start-end-radius:var(--radius-lg)}.custom-fields-component .fi-pagination .fi-pagination-item.fi-disabled .fi-pagination-item-label{color:var(--gray-500)}.custom-fields-component .fi-pagination .fi-pagination-item.fi-disabled .fi-pagination-item-label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-pagination .fi-pagination-item-btn{padding:calc(var(--spacing)*2);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;--tw-outline-style:none;display:flex;outline-style:none;overflow:hidden;position:relative;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-pagination .fi-pagination-item-btn:enabled:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-pagination .fi-pagination-item-btn:enabled:focus-visible{z-index:10;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}@media (hover:hover){.custom-fields-component .fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500)}.custom-fields-component .fi-pagination .fi-pagination-item-btn:hover .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-pagination .fi-pagination-item-btn:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-pagination .fi-pagination-item-btn .fi-icon{color:var(--gray-400);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-pagination .fi-pagination-item-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-pagination .fi-pagination-item-btn .fi-pagination-item-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-inline:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-700);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-pagination .fi-pagination-item-btn .fi-pagination-item-label:where(.dark,.dark *){color:var(--gray-200)}@supports (container-type:inline-size){.custom-fields-component .fi-pagination{container-type:inline-size}@container (min-width:28rem){.custom-fields-component .fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:inline}.custom-fields-component .fi-pagination .fi-pagination-records-per-page-select.fi-compact{display:none}}@container (min-width:56rem){.custom-fields-component .fi-pagination:not(.fi-simple) .fi-pagination-next-btn,.custom-fields-component .fi-pagination:not(.fi-simple) .fi-pagination-previous-btn{display:none}.custom-fields-component .fi-pagination .fi-pagination-overview{display:inline}.custom-fields-component .fi-pagination .fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:inline}.custom-fields-component .fi-pagination .fi-pagination-records-per-page-select.fi-compact{display:none}}@media (min-width:48rem){.custom-fields-component .fi-pagination:not(.fi-simple) .fi-pagination-next-btn,.custom-fields-component .fi-pagination:not(.fi-simple) .fi-pagination-previous-btn{display:none}.custom-fields-component .fi-pagination .fi-pagination-overview{display:inline}.custom-fields-component .fi-pagination .fi-pagination-items{display:flex}}}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-divided>.fi-section-content-ctn>.fi-section-content>*,.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-divided)>.fi-section-content-ctn>.fi-section-content{padding:calc(var(--spacing)*6)}.custom-fields-component .fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside){background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-compact{border-radius:var(--radius-lg)}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary{background-color:var(--gray-50)}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside)>.fi-section-header{padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px}.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:48rem){.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn{grid-column:span 2/span 2}}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside.fi-compact>.fi-section-content-ctn{border-radius:var(--radius-lg)}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn{background-color:var(--gray-50)}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-compact:not(.fi-aside)>.fi-section-header{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-compact.fi-divided>.fi-section-content-ctn>.fi-section-content>*,.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-compact:not(.fi-divided)>.fi-section-content-ctn>.fi-section-content{padding:calc(var(--spacing)*4)}.custom-fields-component .fi-section:not(.fi-section-not-contained).fi-compact>.fi-section-footer{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*4)}@media (min-width:48rem){.custom-fields-component .fi-section.fi-section-not-contained.fi-aside>.fi-section-content-ctn{grid-column:span 2/span 2}}.custom-fields-component .fi-section.fi-section-not-contained:not(.fi-aside),.custom-fields-component .fi-section.fi-section-not-contained:not(.fi-aside)>.fi-section-content-ctn{display:grid;row-gap:calc(var(--spacing)*4)}.custom-fields-component .fi-section.fi-section-not-contained:not(.fi-aside).fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding-block:calc(var(--spacing)*6)}.custom-fields-component .fi-section.fi-section-not-contained:not(.fi-aside).fi-compact,.custom-fields-component .fi-section.fi-section-not-contained:not(.fi-aside).fi-compact>.fi-section-content-ctn{row-gap:calc(var(--spacing)*2.5)}.custom-fields-component .fi-section.fi-section-not-contained:not(.fi-aside).fi-compact.fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding-block:calc(var(--spacing)*4)}.custom-fields-component :where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-section.fi-aside{align-items:flex-start;column-gap:calc(var(--spacing)*6);display:grid;grid-template-columns:repeat(1,minmax(0,1fr));row-gap:calc(var(--spacing)*4)}@media (min-width:48rem){.custom-fields-component .fi-section.fi-aside{grid-template-columns:repeat(3,minmax(0,1fr))}}.custom-fields-component .fi-section.fi-collapsible>.fi-section-header{cursor:pointer}.custom-fields-component .fi-section.fi-collapsed>.fi-section-header>.fi-section-collapse-btn{rotate:180deg}.custom-fields-component .fi-section.fi-collapsed>.fi-section-content-ctn{height:calc(var(--spacing)*0);visibility:hidden;--tw-border-style:none;border-style:none;overflow:hidden;position:absolute}@media (min-width:48rem){.custom-fields-component .fi-section.fi-section-has-content-before>.fi-section-content-ctn{order:-9999}}.custom-fields-component .fi-section>.fi-section-header{align-items:center;display:flex;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-section>.fi-section-header>.fi-icon{color:var(--gray-400);flex-shrink:0}.custom-fields-component .fi-section>.fi-section-header>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-section>.fi-section-header>.fi-icon.fi-color{color:var(--color-500)}.custom-fields-component .fi-section>.fi-section-header>.fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-section>.fi-section-header>.fi-icon.fi-size-sm{margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-section>.fi-section-header>.fi-icon.fi-size-md{margin-top:calc(var(--spacing)*.5)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-link,.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-sc-text{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn.fi-size-xs{margin-block:calc(var(--spacing)*-.5)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn.fi-size-sm{margin-block:calc(var(--spacing)*-1)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn.fi-size-md{margin-block:calc(var(--spacing)*-1.5)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn.fi-size-lg{margin-block:calc(var(--spacing)*-2)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn.fi-size-xl{margin-block:calc(var(--spacing)*-2.5)}.custom-fields-component .fi-section>.fi-section-header>.fi-section-collapse-btn{flex-shrink:0;margin-block:calc(var(--spacing)*-1.5)}.custom-fields-component .fi-section .fi-section-header-text-ctn{display:grid;flex:1;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-section .fi-section-header-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-section .fi-section-header-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-section .fi-section-header-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow:hidden;overflow-wrap:break-word}.custom-fields-component .fi-section .fi-section-header-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-tabs{column-gap:calc(var(--spacing)*1);display:flex;max-width:100%;overflow-x:auto}.custom-fields-component .fi-tabs.fi-contained{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-tabs.fi-contained:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tabs.fi-contained:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-tabs:not(.fi-contained){background-color:var(--color-white);border-radius:var(--radius-xl);padding:calc(var(--spacing)*2);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);margin-inline:auto}.custom-fields-component .fi-tabs:not(.fi-contained):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tabs:not(.fi-contained):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-tabs.fi-vertical{column-gap:calc(var(--spacing)*0);flex-direction:column;overflow:hidden auto;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-tabs.fi-vertical.fi-contained{border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-tabs.fi-vertical:not(.fi-contained){margin-inline:calc(var(--spacing)*0)}.custom-fields-component .fi-tabs.fi-vertical .fi-tabs-item{justify-content:flex-start}.custom-fields-component .fi-tabs-item{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*2);font-size:var(--text-sm);justify-content:center;line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));white-space:nowrap;--tw-duration:75ms;--tw-outline-style:none;display:flex;outline-style:none;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-tabs-item:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-tabs-item:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.custom-fields-component .fi-tabs-item:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tabs-item:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-tabs-item:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tabs-item:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-tabs-item.fi-active{background-color:var(--gray-50)}.custom-fields-component .fi-tabs-item.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tabs-item.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-tabs-item.fi-active .fi-icon,.custom-fields-component .fi-tabs-item.fi-active .fi-tabs-item-label{color:var(--primary-700)}.custom-fields-component :is(.fi-tabs-item.fi-active .fi-tabs-item-label,.fi-tabs-item.fi-active .fi-icon):where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label,.custom-fields-component .fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:is(:where(.group):focus-visible *){color:var(--gray-700)}.custom-fields-component .fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:where(.dark,.dark *),.custom-fields-component .fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-200)}.custom-fields-component .fi-tabs-item :not(.fi-active):focus-visible .fi-tabs-item-label{color:var(--gray-700)}.custom-fields-component .fi-tabs-item :not(.fi-active):focus-visible .fi-tabs-item-label:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-tabs-item .fi-tabs-item-label{color:var(--gray-500);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-tabs-item .fi-tabs-item-label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-tabs-item .fi-icon{color:var(--gray-400);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;flex-shrink:0;transition-duration:75ms}.custom-fields-component .fi-tabs-item .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-tabs-item .fi-badge{width:max-content}.custom-fields-component .fi-toggle{background-color:var(--gray-200);border-style:var(--tw-border-style);cursor:pointer;height:calc(var(--spacing)*6);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));width:calc(var(--spacing)*11);--tw-duration:.2s;--tw-ease:var(--ease-in-out);transition-duration:.2s;transition-timing-function:var(--ease-in-out);--tw-outline-style:none;border-color:#0000;border-radius:3.40282e+38px;border-width:2px;display:inline-flex;flex-shrink:0;outline-style:none;position:relative}.custom-fields-component .fi-toggle:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.custom-fields-component .fi-toggle:disabled{opacity:.7;pointer-events:none}.custom-fields-component .fi-toggle:where(.dark,.dark *){background-color:var(--gray-700)}.custom-fields-component .fi-toggle:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500);--tw-ring-offset-color:var(--gray-900)}.custom-fields-component .fi-toggle:disabled,.custom-fields-component .fi-toggle[disabled]{opacity:.7;pointer-events:none}.custom-fields-component .fi-toggle.fi-color{background-color:var(--bg)}.custom-fields-component .fi-toggle.fi-color:where(.dark,.dark *){background-color:var(--dark-bg)}.custom-fields-component .fi-toggle.fi-color .fi-icon{color:var(--text)}.custom-fields-component .fi-toggle.fi-hidden{display:none}.custom-fields-component .fi-toggle>:first-child{background-color:var(--color-white);height:calc(var(--spacing)*5);pointer-events:none;transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);width:calc(var(--spacing)*5);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:.2s;--tw-ease:var(--ease-in-out);border-radius:3.40282e+38px;display:inline-block;position:relative;transition-duration:.2s;transition-timing-function:var(--ease-in-out)}.custom-fields-component .fi-toggle>:first-child>*{align-items:center;display:flex;height:100%;inset:calc(var(--spacing)*0);justify-content:center;position:absolute;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));width:100%}.custom-fields-component .fi-toggle .fi-icon{color:var(--gray-400)}.custom-fields-component .fi-toggle .fi-icon:where(.dark,.dark *){color:var(--gray-700)}.custom-fields-component .fi-toggle.fi-toggle-on>:first-child{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-toggle.fi-toggle-on>:first-child:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-toggle.fi-toggle-on>:first-child>:first-child{opacity:0;--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.custom-fields-component .fi-toggle.fi-toggle-on>:first-child>:last-child{opacity:1;--tw-duration:.2s;--tw-ease:var(--ease-in);transition-duration:.2s;transition-timing-function:var(--ease-in)}.custom-fields-component .fi-toggle.fi-toggle-off>:first-child{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-toggle.fi-toggle-off>:first-child>:first-child{opacity:1;--tw-duration:.2s;--tw-ease:var(--ease-in);transition-duration:.2s;transition-timing-function:var(--ease-in)}.custom-fields-component .fi-toggle.fi-toggle-off>:first-child>:last-child{opacity:0;--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.custom-fields-component .fi-sortable-ghost{opacity:.3}.custom-fields-component .fi-ac{gap:calc(var(--spacing)*3)}.custom-fields-component .fi-ac:not(.fi-width-full){align-items:center;display:flex;flex-wrap:wrap}.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-left,.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-start{justify-content:flex-start}.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-center{justify-content:center}.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-end,.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-right{flex-direction:row-reverse}.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-between,.custom-fields-component .fi-ac:not(.fi-width-full).fi-align-justify{justify-content:space-between}.custom-fields-component .fi-ac.fi-width-full{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.custom-fields-component .CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.custom-fields-component .CodeMirror-lines{padding:4px 0}.custom-fields-component .CodeMirror pre.CodeMirror-line,.custom-fields-component .CodeMirror pre.CodeMirror-line-like{padding:0 4px}.custom-fields-component .CodeMirror-gutter-filler,.custom-fields-component .CodeMirror-scrollbar-filler{background-color:#fff}.custom-fields-component .CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.custom-fields-component .CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.custom-fields-component .CodeMirror-guttermarker{color:#000}.custom-fields-component .CodeMirror-guttermarker-subtle{color:#999}.custom-fields-component .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.custom-fields-component .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.custom-fields-component .cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.custom-fields-component .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.custom-fields-component .cm-fat-cursor .CodeMirror-line::selection{background:0 0}.custom-fields-component .cm-fat-cursor .CodeMirror-line>span::selection{background:0 0}.custom-fields-component .cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.custom-fields-component .cm-fat-cursor .CodeMirror-line::-moz-selection,.custom-fields-component .cm-fat-cursor .CodeMirror-line>span::-moz-selection{background:0 0}.custom-fields-component .cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.custom-fields-component .cm-fat-cursor{caret-color:#0000}@keyframes blink{50%{background-color:#0000}}.custom-fields-component .cm-tab{display:inline-block;-webkit-text-decoration:inherit;text-decoration:inherit}.custom-fields-component .CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.custom-fields-component .CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.custom-fields-component .cm-s-default .cm-header{color:#00f}.custom-fields-component .cm-s-default .cm-quote{color:#090}.custom-fields-component .cm-negative{color:#d44}.custom-fields-component .cm-positive{color:#292}.custom-fields-component .cm-header,.custom-fields-component .cm-strong{font-weight:700}.custom-fields-component .cm-em{font-style:italic}.custom-fields-component .cm-link{text-decoration:underline}.custom-fields-component .cm-strikethrough{text-decoration:line-through}.custom-fields-component .cm-s-default .cm-keyword{color:#708}.custom-fields-component .cm-s-default .cm-atom{color:#219}.custom-fields-component .cm-s-default .cm-number{color:#164}.custom-fields-component .cm-s-default .cm-def{color:#00f}.custom-fields-component .cm-s-default .cm-variable-2{color:#05a}.custom-fields-component .cm-s-default .cm-type,.custom-fields-component .cm-s-default .cm-variable-3{color:#085}.custom-fields-component .cm-s-default .cm-comment{color:#a50}.custom-fields-component .cm-s-default .cm-string{color:#a11}.custom-fields-component .cm-s-default .cm-string-2{color:#f50}.custom-fields-component .cm-s-default .cm-meta,.custom-fields-component .cm-s-default .cm-qualifier{color:#555}.custom-fields-component .cm-s-default .cm-builtin{color:#30a}.custom-fields-component .cm-s-default .cm-bracket{color:#997}.custom-fields-component .cm-s-default .cm-tag{color:#170}.custom-fields-component .cm-s-default .cm-attribute{color:#00c}.custom-fields-component .cm-s-default .cm-hr{color:#999}.custom-fields-component .cm-s-default .cm-link{color:#00c}.custom-fields-component .cm-invalidchar,.custom-fields-component .cm-s-default .cm-error{color:red}.custom-fields-component .CodeMirror-composing{border-bottom:2px solid}.custom-fields-component div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}.custom-fields-component div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.custom-fields-component .CodeMirror-matchingtag{background:#ff96004d}.custom-fields-component .CodeMirror-activeline-background{background:#e8f2ff}.custom-fields-component .CodeMirror{background:#fff;overflow:hidden;position:relative}.custom-fields-component .CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.custom-fields-component .CodeMirror-sizer{border-right:50px solid #0000;position:relative}.custom-fields-component .CodeMirror-gutter-filler,.custom-fields-component .CodeMirror-hscrollbar,.custom-fields-component .CodeMirror-scrollbar-filler,.custom-fields-component .CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.custom-fields-component .CodeMirror-vscrollbar{overflow:hidden scroll;right:0;top:0}.custom-fields-component .CodeMirror-hscrollbar{bottom:0;left:0;overflow:scroll hidden}.custom-fields-component .CodeMirror-scrollbar-filler{bottom:0;right:0}.custom-fields-component .CodeMirror-gutter-filler{bottom:0;left:0}.custom-fields-component .CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.custom-fields-component .CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.custom-fields-component .CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.custom-fields-component .CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.custom-fields-component .CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.custom-fields-component .CodeMirror-gutter-wrapper ::selection{background-color:#0000}.custom-fields-component .CodeMirror-lines{cursor:text;min-height:1px}.custom-fields-component .CodeMirror pre.CodeMirror-line,.custom-fields-component .CodeMirror pre.CodeMirror-line-like{font-family:inherit;font-size:inherit;white-space:pre;word-wrap:normal;color:inherit;line-height:inherit;z-index:2;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;margin:0;overflow:visible;position:relative}.custom-fields-component .CodeMirror-wrap pre.CodeMirror-line,.custom-fields-component .CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.custom-fields-component .CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.custom-fields-component .CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.custom-fields-component .CodeMirror-code{outline:0}.custom-fields-component .CodeMirror-gutter,.custom-fields-component .CodeMirror-gutters,.custom-fields-component .CodeMirror-linenumber,.custom-fields-component .CodeMirror-scroll,.custom-fields-component .CodeMirror-sizer{box-sizing:content-box}.custom-fields-component .CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.custom-fields-component .CodeMirror-cursor{pointer-events:none;position:absolute}.custom-fields-component .CodeMirror-measure pre{position:static}.custom-fields-component div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.custom-fields-component .CodeMirror-focused div.CodeMirror-cursors,.custom-fields-component div.CodeMirror-dragcursors{visibility:visible}.custom-fields-component .CodeMirror-selected{background:#d9d9d9}.custom-fields-component .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.custom-fields-component .CodeMirror-crosshair{cursor:crosshair}.custom-fields-component .CodeMirror-line::selection{background:#d7d4f0}.custom-fields-component .CodeMirror-line>span::selection{background:#d7d4f0}.custom-fields-component .CodeMirror-line>span>span::selection{background:#d7d4f0}.custom-fields-component .CodeMirror-line::-moz-selection,.custom-fields-component .CodeMirror-line>span::-moz-selection{background:#d7d4f0}.custom-fields-component .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.custom-fields-component .cm-searching{background-color:#ff06}.custom-fields-component .cm-force-border{padding-right:.1px}@media print{.custom-fields-component .CodeMirror div.CodeMirror-cursors{visibility:hidden}}.custom-fields-component .cm-tab-wrap-hack:after{content:\"\"}.custom-fields-component span.CodeMirror-selectedtext{background:0 0}.custom-fields-component .EasyMDEContainer{display:block}.custom-fields-component .CodeMirror-rtl pre{direction:rtl}.custom-fields-component .EasyMDEContainer.sided--no-fullscreen{display:flex;flex-flow:wrap}.custom-fields-component .EasyMDEContainer .CodeMirror{box-sizing:border-box;font:inherit;height:auto;z-index:0;word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px}.custom-fields-component .EasyMDEContainer .CodeMirror-scroll{cursor:text}.custom-fields-component .EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.custom-fields-component .EasyMDEContainer .CodeMirror-sided{width:50%!important}.custom-fields-component .EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:auto;position:relative}.custom-fields-component .EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.custom-fields-component .EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.custom-fields-component .editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;user-select:none;-o-user-select:none}.custom-fields-component .editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.custom-fields-component .editor-toolbar.fullscreen:before{background:-o-linear-gradient(270deg,#fff 0,#fff0 100%);background:-ms-linear-gradient(left,#fff 0,#fff0 100%);background:linear-gradient(90deg,#fff,#fff0);height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.custom-fields-component .editor-toolbar.fullscreen:after{background:-o-linear-gradient(270deg,#fff0 0,#fff 100%);background:-ms-linear-gradient(left,#fff0 0,#fff 100%);background:linear-gradient(90deg,#fff0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.custom-fields-component .EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.custom-fields-component .editor-toolbar .easymde-dropdown,.custom-fields-component .editor-toolbar button{background:0 0;border:1px solid #0000;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.custom-fields-component .editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.custom-fields-component .editor-toolbar button.active,.custom-fields-component .editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.custom-fields-component .editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:#0000;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.custom-fields-component .editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.custom-fields-component .editor-toolbar button.heading-1:after{content:\"1\"}.custom-fields-component .editor-toolbar button.heading-2:after{content:\"2\"}.custom-fields-component .editor-toolbar button.heading-3:after{content:\"3\"}.custom-fields-component .editor-toolbar button.heading-bigger:after{content:\"▲\"}.custom-fields-component .editor-toolbar button.heading-smaller:after{content:\"▼\"}.custom-fields-component .editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.custom-fields-component .editor-toolbar i.no-mobile{display:none}}.custom-fields-component .editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.custom-fields-component .EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.custom-fields-component .editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.custom-fields-component .editor-statusbar .lines:before{content:\"lines: \"}.custom-fields-component .editor-statusbar .words:before{content:\"words: \"}.custom-fields-component .editor-statusbar .characters:before{content:\"characters: \"}.custom-fields-component .editor-preview-full{box-sizing:border-box;display:none;height:100%;left:0;overflow:auto;position:absolute;top:0;width:100%;z-index:7}.custom-fields-component .editor-preview-side{box-sizing:border-box;z-index:9;word-wrap:break-word;border:1px solid #ddd;bottom:0;display:none;overflow:auto;position:fixed;right:0;top:50px;width:50%}.custom-fields-component .editor-preview-active-side{display:block}.custom-fields-component .EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:auto;height:auto;position:static}.custom-fields-component .editor-preview-active{display:block}.custom-fields-component .editor-preview{background:#fafafa;padding:10px}.custom-fields-component .editor-preview>p{margin-top:0}.custom-fields-component .editor-preview pre{background:#eee;margin-bottom:10px}.custom-fields-component .editor-preview table td,.custom-fields-component .editor-preview table th{border:1px solid #ddd;padding:5px}.custom-fields-component .cm-s-easymde .cm-tag{color:#63a35c}.custom-fields-component .cm-s-easymde .cm-attribute{color:#795da3}.custom-fields-component .cm-s-easymde .cm-string{color:#183691}.custom-fields-component .cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.custom-fields-component .cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.custom-fields-component .cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.custom-fields-component .cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.custom-fields-component .cm-s-easymde .cm-header-5{font-size:1.25rem}.custom-fields-component .cm-s-easymde .cm-header-6{font-size:1rem}.custom-fields-component .cm-s-easymde .cm-header-1,.custom-fields-component .cm-s-easymde .cm-header-2,.custom-fields-component .cm-s-easymde .cm-header-3,.custom-fields-component .cm-s-easymde .cm-header-4,.custom-fields-component .cm-s-easymde .cm-header-5,.custom-fields-component .cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.custom-fields-component .cm-s-easymde .cm-comment{background:#0000000d;border-radius:2px}.custom-fields-component .cm-s-easymde .cm-link{color:#7f8c8d}.custom-fields-component .cm-s-easymde .cm-url{color:#aab2b3}.custom-fields-component .cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.custom-fields-component .editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.custom-fields-component .editor-toolbar .easymde-dropdown,.custom-fields-component .editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%)}.custom-fields-component .easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.custom-fields-component .easymde-dropdown:active .easymde-dropdown-content,.custom-fields-component .easymde-dropdown:focus .easymde-dropdown-content,.custom-fields-component .easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.custom-fields-component .easymde-dropdown-content button{display:block}.custom-fields-component span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:\"\";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.custom-fields-component .CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:#ff000026}.custom-fields-component .cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;user-select:none}.custom-fields-component .cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.custom-fields-component .cropper-canvas,.custom-fields-component .cropper-crop-box,.custom-fields-component .cropper-drag-box,.custom-fields-component .cropper-modal,.custom-fields-component .cropper-wrap-box{inset:0;position:absolute}.custom-fields-component .cropper-canvas,.custom-fields-component .cropper-wrap-box{overflow:hidden}.custom-fields-component .cropper-drag-box{background-color:#fff;opacity:0}.custom-fields-component .cropper-modal{background-color:#000;opacity:.5}.custom-fields-component .cropper-view-box{display:block;height:100%;outline:1px solid #3399ffbf;overflow:hidden;width:100%}.custom-fields-component .cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.custom-fields-component .cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.3333%;left:0;top:33.3333%;width:100%}.custom-fields-component .cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.3333%;top:0;width:33.3333%}.custom-fields-component .cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.custom-fields-component .cropper-center:after,.custom-fields-component .cropper-center:before{background-color:#eee;content:\" \";display:block;position:absolute}.custom-fields-component .cropper-center:before{height:1px;left:-3px;top:0;width:7px}.custom-fields-component .cropper-center:after{height:7px;left:0;top:-3px;width:1px}.custom-fields-component .cropper-face,.custom-fields-component .cropper-line,.custom-fields-component .cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.custom-fields-component .cropper-face{background-color:#fff;left:0;top:0}.custom-fields-component .cropper-line{background-color:#39f}.custom-fields-component .cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.custom-fields-component .cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.custom-fields-component .cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.custom-fields-component .cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.custom-fields-component .cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.custom-fields-component .cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.custom-fields-component .cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.custom-fields-component .cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.custom-fields-component .cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.custom-fields-component .cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.custom-fields-component .cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.custom-fields-component .cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.custom-fields-component .cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.custom-fields-component .cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.custom-fields-component .cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.custom-fields-component .cropper-point.point-se{height:5px;opacity:.75;width:5px}}.custom-fields-component .cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:\" \";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.custom-fields-component .cropper-invisible{opacity:0}.custom-fields-component .cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.custom-fields-component .cropper-hide{display:block;height:0;position:absolute;width:0}.custom-fields-component .cropper-hidden{display:none!important}.custom-fields-component .cropper-move{cursor:move}.custom-fields-component .cropper-crop{cursor:crosshair}.custom-fields-component .cropper-disabled .cropper-drag-box,.custom-fields-component .cropper-disabled .cropper-face,.custom-fields-component .cropper-disabled .cropper-line,.custom-fields-component .cropper-disabled .cropper-point{cursor:not-allowed}.custom-fields-component .filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.custom-fields-component .filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.custom-fields-component .filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;pointer-events:none;position:absolute;visibility:hidden;width:0}.custom-fields-component .filepond--drip{background:#00000003;border-radius:.5em;inset:0;opacity:.1;overflow:hidden;pointer-events:none;position:absolute}.custom-fields-component .filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:50%;width:8em}.custom-fields-component .filepond--drip-blob,.custom-fields-component .filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.custom-fields-component .filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;user-select:none}.custom-fields-component .filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.custom-fields-component .filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.custom-fields-component .filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;-webkit-text-decoration:underline #a7a4a4;text-decoration:underline #a7a4a4;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto}.custom-fields-component .filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.custom-fields-component .filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.custom-fields-component .filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.custom-fields-component .filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.custom-fields-component .filepond--file-action-button.filepond--file-action-button:after{content:\"\";inset:-.75em;position:absolute}.custom-fields-component .filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.custom-fields-component .filepond--file-action-button:focus,.custom-fields-component .filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.custom-fields-component .filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.custom-fields-component .filepond--file-action-button[hidden]{display:none}.custom-fields-component .filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;user-select:none;will-change:transform,opacity}.custom-fields-component .filepond--file-info *{margin:0}.custom-fields-component .filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.custom-fields-component .filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.custom-fields-component .filepond--file-info .filepond--file-info-sub:empty{display:none}.custom-fields-component .filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;user-select:none;will-change:transform,opacity}.custom-fields-component .filepond--file-status *{margin:0;white-space:nowrap}.custom-fields-component .filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.custom-fields-component .filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.custom-fields-component .filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.custom-fields-component .filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.custom-fields-component .filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.custom-fields-component .filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.custom-fields-component .filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;user-select:none;z-index:3}.custom-fields-component .filepond--file .filepond--file-action-button,.custom-fields-component .filepond--file .filepond--processing-complete-indicator,.custom-fields-component .filepond--file .filepond--progress-indicator{position:absolute}.custom-fields-component .filepond--file [data-align*=left]{left:.5625em}.custom-fields-component .filepond--file [data-align*=right]{right:.5625em}.custom-fields-component .filepond--file [data-align*=center]{left:calc(50% - .8125em)}.custom-fields-component .filepond--file [data-align*=bottom]{bottom:1.125em}.custom-fields-component .filepond--file [data-align=center]{top:calc(50% - .8125em)}.custom-fields-component .filepond--file .filepond--progress-indicator{margin-top:.1875em}.custom-fields-component .filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.custom-fields-component .filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}.custom-fields-component [data-filepond-item-state*=error] .filepond--file-info,.custom-fields-component [data-filepond-item-state*=invalid] .filepond--file-info,.custom-fields-component [data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}.custom-fields-component [data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}.custom-fields-component [data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}.custom-fields-component [data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}.custom-fields-component [data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}.custom-fields-component [data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}.custom-fields-component [data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}.custom-fields-component [data-filepond-item-state=processing-complete] .filepond--file-info-sub,.custom-fields-component [data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}.custom-fields-component [data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}.custom-fields-component [data-filepond-item-state*=error] .filepond--file-wrapper,.custom-fields-component [data-filepond-item-state*=error] .filepond--panel,.custom-fields-component [data-filepond-item-state*=invalid] .filepond--file-wrapper,.custom-fields-component [data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}.custom-fields-component [data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.custom-fields-component .filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.custom-fields-component .filepond--hopper[data-hopper-state=drag-over]:after{content:\"\";inset:0;position:absolute;z-index:100}.custom-fields-component .filepond--progress-indicator{z-index:103}.custom-fields-component .filepond--file-action-button{z-index:102}.custom-fields-component .filepond--file-status{z-index:101}.custom-fields-component .filepond--file-info{z-index:100}.custom-fields-component .filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:auto;will-change:transform,opacity;z-index:1}.custom-fields-component .filepond--item>.filepond--panel{z-index:-1}.custom-fields-component .filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.custom-fields-component .filepond--item>.filepond--file-wrapper,.custom-fields-component .filepond--item>.filepond--panel{transition:opacity .15s ease-out}.custom-fields-component .filepond--item[data-drag-state]{cursor:-webkit-grab;cursor:grab}.custom-fields-component .filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 #0000;transition:box-shadow .125s ease-in-out}.custom-fields-component .filepond--item[data-drag-state=drag]{cursor:-webkit-grabbing;cursor:grabbing}.custom-fields-component .filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.custom-fields-component .filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.custom-fields-component .filepond--item-panel{background-color:#64605e}.custom-fields-component [data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}.custom-fields-component [data-filepond-item-state*=error] .filepond--item-panel,.custom-fields-component [data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.custom-fields-component .filepond--item-panel{border-radius:.5em;transition:background-color .25s}.custom-fields-component .filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.custom-fields-component .filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.custom-fields-component .filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(#000 calc(100% - .5em),#0000);mask:linear-gradient(#000 calc(100% - .5em),#0000);overflow:hidden scroll}.custom-fields-component .filepond--list-scroller::-webkit-scrollbar{background:0 0}.custom-fields-component .filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.custom-fields-component .filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.custom-fields-component .filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid #0000;border-radius:99999px}.custom-fields-component .filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.custom-fields-component .filepond--list{left:.75em;right:.75em}.custom-fields-component .filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.custom-fields-component .filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.custom-fields-component .filepond--root[data-style-panel-layout~=compact] .filepond--list,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.custom-fields-component .filepond--root[data-style-panel-layout~=compact] .filepond--item,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.custom-fields-component .filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.custom-fields-component .filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.custom-fields-component .filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.custom-fields-component .filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.custom-fields-component .filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)) and (stroke-color:transparent){.custom-fields-component .filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.custom-fields-component .filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.custom-fields-component .filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.custom-fields-component .filepond-panel:not([data-scalable=false]){height:auto!important}.custom-fields-component .filepond--panel[data-scalable=false]>div{display:none}.custom-fields-component .filepond--panel[data-scalable=true]{background-color:#0000!important;border:none!important;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.custom-fields-component .filepond--panel-bottom,.custom-fields-component .filepond--panel-center,.custom-fields-component .filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.custom-fields-component .filepond--panel-bottom,.custom-fields-component .filepond--panel-top{height:.5em}.custom-fields-component .filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.custom-fields-component .filepond--panel-top:after{background-color:inherit;bottom:-1px;content:\"\";height:2px;left:0;position:absolute;right:0}.custom-fields-component .filepond--panel-bottom,.custom-fields-component .filepond--panel-center{backface-visibility:hidden;transform:translateY(.5em);transform-origin:0 0;will-change:transform}.custom-fields-component .filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.custom-fields-component .filepond--panel-bottom:before{background-color:inherit;content:\"\";height:2px;left:0;position:absolute;right:0;top:-1px}.custom-fields-component .filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.custom-fields-component .filepond--panel-center:not([style]){visibility:hidden}.custom-fields-component .filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.custom-fields-component .filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.custom-fields-component .filepond--progress-indicator path{fill:none;stroke:currentColor}.custom-fields-component .filepond--list-scroller{z-index:6}.custom-fields-component .filepond--drop-label{z-index:5}.custom-fields-component .filepond--drip{z-index:3}.custom-fields-component .filepond--root>.filepond--panel{z-index:2}.custom-fields-component .filepond--browser{z-index:1}.custom-fields-component .filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.custom-fields-component .filepond--root *{box-sizing:inherit;line-height:inherit}.custom-fields-component .filepond--root :not(text){font-size:inherit}.custom-fields-component .filepond--root[data-disabled]{pointer-events:none}.custom-fields-component .filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.custom-fields-component .filepond--root[data-disabled] .filepond--list{pointer-events:none}.custom-fields-component .filepond--root .filepond--drop-label{min-height:4.75em}.custom-fields-component .filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.custom-fields-component .filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.4;position:absolute;right:0;text-decoration:none;z-index:3}.custom-fields-component .filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.custom-fields-component .filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.custom-fields-component .filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.custom-fields-component .filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.custom-fields-component .filepond--action-edit-item-alt{background:0 0;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.custom-fields-component .filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.custom-fields-component .filepond--action-edit-item-alt span{font-size:0;opacity:0}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.custom-fields-component .filepond--image-preview-markup{left:0;position:absolute;top:0}.custom-fields-component .filepond--image-preview-wrapper{z-index:2}.custom-fields-component .filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;user-select:none;width:100%;z-index:2}.custom-fields-component .filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.custom-fields-component .filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.custom-fields-component .filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.custom-fields-component .filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.custom-fields-component .filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.custom-fields-component .filepond--image-preview-wrapper{background:#00000003;border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;user-select:none}.custom-fields-component .filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.custom-fields-component .filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.custom-fields-component .filepond--image-clip[data-transparency-indicator=grid] canvas,.custom-fields-component .filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23eee' viewBox='0 0 100 100'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E\");background-size:1.25em 1.25em}.custom-fields-component .filepond--image-bitmap,.custom-fields-component .filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.custom-fields-component .filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.custom-fields-component .filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.custom-fields-component .filepond--media-preview audio{display:none}.custom-fields-component .filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.custom-fields-component .filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.custom-fields-component .filepond--media-preview .playpausebtn:hover{background-color:#00000080}.custom-fields-component .filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.custom-fields-component .filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.custom-fields-component .filepond--media-preview .timeline{background:#ffffff4d;border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.custom-fields-component .filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.custom-fields-component .filepond--media-preview-wrapper{background:#00000003;border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.custom-fields-component .filepond--media-preview-wrapper:before{background:linear-gradient(#000,#0000);content:\" \";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#000000\",endColorstr=\"#00000000\",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.custom-fields-component .filepond--media-preview{display:block;height:100%;position:relative;transform-origin:50%;width:100%;will-change:transform,opacity;z-index:1}.custom-fields-component .filepond--media-preview audio,.custom-fields-component .filepond--media-preview video{width:100%;will-change:transform}.custom-fields-component .noUi-target,.custom-fields-component .noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:#0000;box-sizing:border-box;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;user-select:none}.custom-fields-component .noUi-target{position:relative}.custom-fields-component .noUi-base,.custom-fields-component .noUi-connects{height:100%;position:relative;width:100%;z-index:1}.custom-fields-component .noUi-connects{overflow:hidden;z-index:0}.custom-fields-component .noUi-connect,.custom-fields-component .noUi-origin{height:100%;position:absolute;right:0;top:0;transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-style:flat;width:100%;will-change:transform;z-index:1}.custom-fields-component .noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.custom-fields-component .noUi-vertical .noUi-origin{top:-100%;width:0}.custom-fields-component .noUi-horizontal .noUi-origin{height:0}.custom-fields-component .noUi-handle{backface-visibility:hidden;position:absolute}.custom-fields-component .noUi-touch-area{height:100%;width:100%}.custom-fields-component .noUi-state-tap .noUi-connect,.custom-fields-component .noUi-state-tap .noUi-origin{transition:transform .3s}.custom-fields-component .noUi-state-drag *{cursor:inherit!important}.custom-fields-component .noUi-horizontal{height:18px}.custom-fields-component .noUi-horizontal .noUi-handle{height:28px;right:-17px;top:-6px;width:34px}.custom-fields-component .noUi-vertical{width:18px}.custom-fields-component .noUi-vertical .noUi-handle{bottom:-17px;height:34px;right:-6px;width:28px}.custom-fields-component .noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.custom-fields-component .noUi-target{background:#fafafa;border:1px solid #d3d3d3;border-radius:4px;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.custom-fields-component .noUi-connects{border-radius:3px}.custom-fields-component .noUi-connect{background:#3fb8af}.custom-fields-component .noUi-draggable{cursor:ew-resize}.custom-fields-component .noUi-vertical .noUi-draggable{cursor:ns-resize}.custom-fields-component .noUi-handle{background:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb;cursor:default}.custom-fields-component .noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.custom-fields-component .noUi-handle:after,.custom-fields-component .noUi-handle:before{background:#e8e7e6;content:\"\";display:block;height:14px;left:14px;position:absolute;top:6px;width:1px}.custom-fields-component .noUi-handle:after{left:17px}.custom-fields-component .noUi-vertical .noUi-handle:after,.custom-fields-component .noUi-vertical .noUi-handle:before{height:1px;left:6px;top:14px;width:14px}.custom-fields-component .noUi-vertical .noUi-handle:after{top:17px}.custom-fields-component [disabled] .noUi-connect{background:#b8b8b8}.custom-fields-component [disabled] .noUi-handle,.custom-fields-component [disabled].noUi-handle,.custom-fields-component [disabled].noUi-target{cursor:not-allowed}.custom-fields-component .noUi-pips,.custom-fields-component .noUi-pips *{box-sizing:border-box}.custom-fields-component .noUi-pips{color:#999;position:absolute}.custom-fields-component .noUi-value{position:absolute;text-align:center;white-space:nowrap}.custom-fields-component .noUi-value-sub{color:#ccc;font-size:10px}.custom-fields-component .noUi-marker{background:#ccc;position:absolute}.custom-fields-component .noUi-marker-large,.custom-fields-component .noUi-marker-sub{background:#aaa}.custom-fields-component .noUi-pips-horizontal{height:80px;left:0;padding:10px 0;top:100%;width:100%}.custom-fields-component .noUi-value-horizontal{transform:translate(-50%,50%)}.custom-fields-component .noUi-rtl .noUi-value-horizontal{transform:translate(50%,50%)}.custom-fields-component .noUi-marker-horizontal.noUi-marker{height:5px;margin-left:-1px;width:2px}.custom-fields-component .noUi-marker-horizontal.noUi-marker-sub{height:10px}.custom-fields-component .noUi-marker-horizontal.noUi-marker-large{height:15px}.custom-fields-component .noUi-pips-vertical{height:100%;left:100%;padding:0 10px;top:0}.custom-fields-component .noUi-value-vertical{padding-left:25px;transform:translateY(-50%)}.custom-fields-component .noUi-rtl .noUi-value-vertical{transform:translateY(50%)}.custom-fields-component .noUi-marker-vertical.noUi-marker{height:2px;margin-top:-1px;width:5px}.custom-fields-component .noUi-marker-vertical.noUi-marker-sub{width:10px}.custom-fields-component .noUi-marker-vertical.noUi-marker-large{width:15px}.custom-fields-component .noUi-tooltip{background:#fff;border:1px solid #d9d9d9;border-radius:3px;color:#000;display:block;padding:5px;position:absolute;text-align:center;white-space:nowrap}.custom-fields-component .noUi-horizontal .noUi-tooltip{bottom:120%;left:50%;transform:translate(-50%)}.custom-fields-component .noUi-vertical .noUi-tooltip{right:120%;top:50%;transform:translateY(-50%)}.custom-fields-component .noUi-horizontal .noUi-origin>.noUi-tooltip{bottom:10px;left:auto;transform:translate(50%)}.custom-fields-component .noUi-vertical .noUi-origin>.noUi-tooltip{right:28px;top:auto;transform:translateY(-18px)}.custom-fields-component .fi-fo-builder{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));row-gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-builder .fi-fo-builder-actions{column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-fo-builder .fi-fo-builder-actions.fi-hidden{display:none}.custom-fields-component .fi-fo-builder .fi-fo-builder-items{display:grid;grid-template-columns:repeat(1,minmax(0,1fr))}.custom-fields-component .fi-fo-builder .fi-fo-builder-items>*+*{margin-top:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-builder .fi-fo-builder-item.fi-collapsed .fi-fo-builder-item-header-collapsible-actions{rotate:-180deg}.custom-fields-component .fi-fo-builder .fi-fo-builder-item.fi-collapsed .fi-fo-builder-item-header-collapse-action,.custom-fields-component .fi-fo-builder .fi-fo-builder-item:not(.fi-collapsed) .fi-fo-builder-item-header-expand-action{opacity:0;pointer-events:none}.custom-fields-component .fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-item{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);background-color:#0000;border-radius:0;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-item>.fi-fo-builder-item-content{padding:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-label-between-items-ctn>.fi-fo-builder-label-between-items-divider-before{width:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-label-between-items-ctn>.fi-fo-builder-label-between-items{padding-inline-start:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;overflow:hidden;padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-builder.fi-collapsible .fi-fo-builder-item-header{cursor:pointer;-webkit-user-select:none;user-select:none}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-start-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-icon{color:var(--gray-400)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-label.fi-truncated{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-end-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;margin-inline-start:auto}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-collapsible-actions{position:relative}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-collapse-action,.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-collapsible-actions,.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-expand-action{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-header-expand-action{inset:calc(var(--spacing)*0);position:absolute;rotate:180deg}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-content:not(.fi-fo-builder-item-content-has-preview){padding:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-content.fi-fo-builder-item-content-has-preview{position:relative}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content{border-color:var(--gray-100);border-top-style:var(--tw-border-style);border-top-width:1px}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-preview:not(.fi-interactive){pointer-events:none}.custom-fields-component .fi-fo-builder .fi-fo-builder-item-preview-edit-overlay{cursor:pointer;inset:calc(var(--spacing)*0);position:absolute;z-index:1}.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker-ctn{background-color:var(--color-white);border-radius:var(--radius-lg)}.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-fo-builder .fi-fo-builder-add-between-items-ctn{display:flex;height:calc(var(--spacing)*0);justify-content:center;margin-top:calc(var(--spacing)*0);opacity:0;overflow:visible;pointer-events:none;position:relative;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));visibility:hidden;width:100%}.custom-fields-component .fi-fo-builder .fi-fo-builder-add-between-items-ctn:focus-within,.custom-fields-component .fi-fo-builder .fi-fo-builder-add-between-items-ctn:has(+.fi-fo-builder-item:hover),.custom-fields-component .fi-fo-builder .fi-fo-builder-add-between-items-ctn:hover,.custom-fields-component .fi-fo-builder .fi-fo-builder-item:hover+.fi-fo-builder-add-between-items-ctn{opacity:1;pointer-events:auto;visibility:visible}.custom-fields-component .fi-fo-builder .fi-fo-builder-add-between-items{z-index:10;--tw-translate-y:calc(-50% + 0.5rem);background-color:var(--color-white);border-radius:var(--radius-lg);position:absolute;top:50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-fo-builder .fi-fo-builder-add-between-items:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-ctn{align-items:center;display:flex;margin-bottom:calc(var(--spacing)*-3);margin-top:calc(var(--spacing)*1);position:relative}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-divider-before{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;flex-shrink:0;width:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-divider-before:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-divider-before:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-inline:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);flex-shrink:0;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-divider-after{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;flex:1}.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-divider-after:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-builder .fi-fo-builder-label-between-items-divider-after:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker{display:flex;justify-content:center}.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker.fi-align-left,.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker.fi-align-end,.custom-fields-component .fi-fo-builder .fi-fo-builder-block-picker.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-search-input-wrp{margin-bottom:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-actions{margin-bottom:calc(var(--spacing)*2)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-options{gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-options.fi-grid-direction-col{margin-top:calc(var(--spacing)*-4)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-options.fi-grid-direction-col .fi-fo-checkbox-list-option-ctn{break-inside:avoid;padding-top:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option{column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-checkbox-input{flex-shrink:0;margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);display:grid;line-height:calc(var(--spacing)*6)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-label{--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium);overflow:hidden;overflow-wrap:break-word}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-description{color:var(--gray-500)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-no-search-results-message{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-fo-checkbox-list .fi-fo-checkbox-list-no-search-results-message:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-code-editor{overflow:hidden}.custom-fields-component .fi-fo-code-editor .cm-editor.cm-focused{--tw-outline-style:none!important;outline-style:none!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters{background-color:var(--gray-100)!important;border-inline-end-color:var(--gray-300)!important;min-height:calc(var(--spacing)*48)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters:where(.dark,.dark *){background-color:var(--gray-950)!important;border-inline-end-color:var(--gray-800)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement{border-end-start-radius:var(--radius-md);border-start-start-radius:var(--radius-md);margin-inline-start:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter{background-color:var(--gray-200)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter:where(.dark,.dark *){background-color:var(--gray-800)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter{background-color:var(--gray-200)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter:where(.dark,.dark *){background-color:var(--gray-800)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-scroller{min-height:calc(var(--spacing)*48)!important}.custom-fields-component .fi-fo-code-editor .cm-editor .cm-line{border-end-end-radius:var(--radius-md);border-start-end-radius:var(--radius-md);margin-inline-end:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-code-editor.fi-disabled .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter,.custom-fields-component .fi-fo-code-editor.fi-disabled .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter,.custom-fields-component .fi-fo-code-editor.fi-disabled .cm-editor .cm-line.cm-activeLine{background-color:#0000!important}.custom-fields-component .fi-fo-color-picker .fi-input-wrp-content{display:flex}.custom-fields-component .fi-fo-color-picker .fi-fo-color-picker-preview{border-radius:3.40282e+38px;flex-shrink:0;height:calc(var(--spacing)*5);margin-block:auto;margin-inline-end:calc(var(--spacing)*3);-webkit-user-select:none;user-select:none;width:calc(var(--spacing)*5)}.custom-fields-component .fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-200);--tw-ring-inset:inset}.custom-fields-component .fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-color-picker .fi-fo-color-picker-panel{border-radius:var(--radius-lg);z-index:10;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:none;position:absolute}.custom-fields-component .fi-fo-date-time-picker input::-webkit-datetime-edit{display:block;padding:0}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-trigger{width:100%}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{--tw-border-style:none;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);width:100%;--tw-leading:calc(var(--spacing)*6);color:var(--gray-950);line-height:calc(var(--spacing)*6);--tw-outline-style:none;background-color:#0000;border-style:none;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input::placeholder{color:var(--gray-400)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-panel{position:absolute;z-index:10}.custom-fields-component :where(.fi-fo-date-time-picker .fi-fo-date-time-picker-panel>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-panel{background-color:var(--color-white);border-radius:var(--radius-lg);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-panel:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-panel .fi-fo-date-time-picker-panel-header{align-items:center;display:flex;justify-content:space-between}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-month-select{cursor:pointer;--tw-border-style:none;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*0);--tw-font-weight:var(--font-weight-medium);background-color:#0000;border-style:none;color:var(--gray-950);flex-grow:1;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-month-select:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-month-select:where(.dark,.dark *){background-color:var(--gray-900);color:var(--color-white)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-year-input{width:calc(var(--spacing)*16);--tw-border-style:none;background-color:#0000;border-style:none;color:var(--gray-950);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*0);text-align:right}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-year-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-year-input:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header{display:grid;gap:calc(var(--spacing)*1);grid-template-columns:repeat(7,minmax(0,1fr))}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header .fi-fo-date-time-picker-calendar-header-day{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));text-align:center;--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header .fi-fo-date-time-picker-calendar-header-day:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar{display:grid;gap:calc(var(--spacing)*1);grid-template-columns:repeat(7,minmax(calc(var(--spacing)*7),1fr))}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-align:center;--tw-leading:var(--leading-loose);line-height:var(--leading-loose);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;border-radius:3.40282e+38px;transition-duration:75ms}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-disabled{opacity:.5;pointer-events:none}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-disabled){cursor:pointer}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected{background-color:var(--gray-50);color:var(--primary-600)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled){background-color:var(--gray-100)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-fo-date-time-picker-calendar-day-today:not(.fi-focused):not(.fi-selected):not(.fi-disabled){color:var(--primary-600)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-fo-date-time-picker-calendar-day-today:not(.fi-focused):not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-fo-date-time-picker-calendar-day-today):not(.fi-selected){color:var(--gray-950)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-fo-date-time-picker-calendar-day-today):not(.fi-selected):where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs{align-items:center;display:flex;justify-content:center}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input{width:calc(var(--spacing)*10);--tw-border-style:none;background-color:#0000;border-style:none;color:var(--gray-950);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-inline-end:calc(var(--spacing)*1);padding:calc(var(--spacing)*0);text-align:center}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs .fi-fo-date-time-picker-time-input-separator{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs .fi-fo-date-time-picker-time-input-separator:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-field{display:grid;row-gap:calc(var(--spacing)*2)}@media (min-width:40rem){.custom-fields-component .fi-fo-field.fi-fo-field-has-inline-label{align-items:flex-start;column-gap:calc(var(--spacing)*4);grid-template-columns:repeat(3,minmax(0,1fr))}.custom-fields-component .fi-fo-field.fi-fo-field-has-inline-label .fi-fo-field-content-col{grid-column:span 2/span 2}}.custom-fields-component .fi-fo-field .fi-fo-field-label,.custom-fields-component .fi-fo-field .fi-fo-field-label-ctn{align-items:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component :is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-checkbox-input{flex-shrink:0;margin-top:calc(var(--spacing)*.5)}.custom-fields-component :is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-toggle{margin-block:calc(var(--spacing)*-.5)}.custom-fields-component :is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-sc:first-child{flex-grow:0}.custom-fields-component :is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label).fi-hidden{display:none}.custom-fields-component .fi-fo-field .fi-fo-field-label-content{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-field .fi-fo-field-label-content:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-field .fi-fo-field-label-content .fi-fo-field-label-required-mark{--tw-font-weight:var(--font-weight-medium);color:var(--danger-600);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-field .fi-fo-field-label-content .fi-fo-field-label-required-mark:where(.dark,.dark *){color:var(--danger-400)}.custom-fields-component .fi-fo-field .fi-fo-field-label-col{display:grid;grid-auto-columns:minmax(0,1fr);height:100%;row-gap:calc(var(--spacing)*2)}@media (min-width:40rem){.custom-fields-component .fi-fo-field .fi-fo-field-label-col.fi-vertical-align-start{align-items:flex-start}.custom-fields-component .fi-fo-field .fi-fo-field-label-col.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-fo-field .fi-fo-field-label-col.fi-vertical-align-end{align-items:flex-end}}.custom-fields-component .fi-fo-field .fi-fo-field-content-col{display:grid;grid-auto-columns:minmax(0,1fr);row-gap:calc(var(--spacing)*2)}.custom-fields-component .fi-fo-field .fi-fo-field-content-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;width:100%}.custom-fields-component .fi-fo-field .fi-fo-field-content{width:100%}.custom-fields-component .fi-fo-field .fi-fo-field-wrp-error-message{color:var(--danger-600);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-fo-field .fi-fo-field-wrp-error-message:where(.dark,.dark *){color:var(--danger-400)}.custom-fields-component .fi-fo-field .fi-fo-field-wrp-error-list{list-style-position:inside;list-style-type:disc}.custom-fields-component :where(.fi-fo-field .fi-fo-field-wrp-error-list>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*.5*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*.5*var(--tw-space-y-reverse))}.custom-fields-component .fi-fo-file-upload{display:flex;flex-direction:column;row-gap:calc(var(--spacing)*2)}.custom-fields-component .fi-fo-file-upload.fi-align-left,.custom-fields-component .fi-fo-file-upload.fi-align-start{align-items:flex-start}.custom-fields-component .fi-fo-file-upload.fi-align-center{align-items:center}.custom-fields-component .fi-fo-file-upload.fi-align-end,.custom-fields-component .fi-fo-file-upload.fi-align-right{align-items:flex-end}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-input-ctn{height:100%;width:100%}.custom-fields-component .fi-fo-file-upload.fi-fo-file-upload-avatar .fi-fo-file-upload-input-ctn{height:100%;width:calc(var(--spacing)*32)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-error-message{color:var(--danger-600);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-error-message:where(.dark,.dark *){color:var(--danger-400)}.custom-fields-component .fi-fo-file-upload .filepond--root{background-color:var(--color-white);border-radius:var(--radius-lg);font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";margin-bottom:calc(var(--spacing)*0);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow:hidden}.custom-fields-component .fi-fo-file-upload .filepond--root:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .filepond--root:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-file-upload .filepond--root:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .filepond--root:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-file-upload .filepond--root[data-disabled=disabled]{background-color:var(--gray-50)}.custom-fields-component .fi-fo-file-upload .filepond--root[data-disabled=disabled]:where(.dark,.dark *){--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .filepond--root[data-disabled=disabled]:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-file-upload .filepond--root[data-style-panel-layout=compact\\ circle]{border-radius:3.40282e+38px}.custom-fields-component .fi-fo-file-upload .filepond--panel-root{background-color:#0000}.custom-fields-component .fi-fo-file-upload .filepond--drop-label label{color:var(--gray-600);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*3)!important}.custom-fields-component .fi-fo-file-upload .filepond--drop-label label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-file-upload .filepond--label-action{--tw-font-weight:var(--font-weight-medium);color:var(--primary-600);font-weight:var(--font-weight-medium);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;text-decoration-line:none;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-fo-file-upload .filepond--label-action:hover{color:var(--primary-500)}}.custom-fields-component .fi-fo-file-upload .filepond--label-action:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.custom-fields-component .fi-fo-file-upload .filepond--label-action:where(.dark,.dark *):hover{color:var(--primary-500)}}.custom-fields-component .fi-fo-file-upload .filepond--drip-blob{background-color:var(--gray-400)}.custom-fields-component .fi-fo-file-upload .filepond--drip-blob:where(.dark,.dark *){background-color:var(--gray-500)}.custom-fields-component .fi-fo-file-upload .filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:64rem){.custom-fields-component .fi-fo-file-upload .filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.custom-fields-component .fi-fo-file-upload .filepond--download-icon{background-color:var(--color-white);display:inline-block;height:calc(var(--spacing)*4);margin-inline-end:calc(var(--spacing)*1);pointer-events:auto;vertical-align:bottom;width:calc(var(--spacing)*4)}@media (hover:hover){.custom-fields-component .fi-fo-file-upload .filepond--download-icon:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .filepond--download-icon:hover{background-color:color-mix(in oklab,var(--color-white)70%,transparent)}}}.custom-fields-component .fi-fo-file-upload .filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.custom-fields-component .fi-fo-file-upload .filepond--open-icon{background-color:var(--color-white);display:inline-block;height:calc(var(--spacing)*4);margin-inline-end:calc(var(--spacing)*1);pointer-events:auto;vertical-align:bottom;width:calc(var(--spacing)*4)}@media (hover:hover){.custom-fields-component .fi-fo-file-upload .filepond--open-icon:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .filepond--open-icon:hover{background-color:color-mix(in oklab,var(--color-white)70%,transparent)}}}.custom-fields-component .fi-fo-file-upload .filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJoLTYgdy02IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJoLTYgdy02IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.custom-fields-component .fi-fo-file-upload .filepond--file-action-button.filepond--action-edit-item{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .filepond--file-action-button.filepond--action-edit-item{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor{height:100dvh;inset:calc(var(--spacing)*0);isolation:isolate;padding:calc(var(--spacing)*2);position:fixed;width:100vw;z-index:50}@media (min-width:40rem){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor{padding:calc(var(--spacing)*10)}}@media (min-width:48rem){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor{padding:calc(var(--spacing)*20)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{background-color:var(--gray-950);cursor:pointer;height:100%;inset:calc(var(--spacing)*0);position:fixed;width:100%}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{will-change:transform}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{background-color:var(--color-white);border-radius:var(--radius-xl);isolation:isolate;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);height:100%;width:100%;--tw-ring-color:var(--gray-900);display:flex;flex-direction:column;margin-inline:auto;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{--tw-ring-color:color-mix(in oklab,var(--gray-900)10%,transparent)}}@media (min-width:64rem){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{flex-direction:row}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window:where(.dark,.dark *){background-color:var(--gray-800);--tw-ring-color:var(--gray-50)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-50)10%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-image-ctn{flex:1;margin:calc(var(--spacing)*4);max-height:100%;max-width:100%}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-image{height:100%;width:auto}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel{background-color:var(--gray-50);display:flex;flex:1;flex-direction:column;height:100%;overflow-y:auto;width:100%}@media (min-width:64rem){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel{max-width:var(--container-xs)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main{flex:1}.custom-fields-component :where(.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main{overflow:auto;padding:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group{display:grid;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn-group{width:100%}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn.fi-active{background-color:var(--gray-50)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn.fi-active:where(.dark,.dark *){background-color:var(--gray-700)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-fo-file-upload-editor-control-panel-group-title{color:var(--gray-950);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-fo-file-upload-editor-control-panel-group-title:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-footer{align-items:center;display:flex;gap:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-reset-action{margin-left:auto}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{background-color:var(--gray-100)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{background-color:color-mix(in oklab,var(--gray-100)50%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{opacity:1}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)80%,transparent)}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-circle-cropper .cropper-face,.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-circle-cropper .cropper-view-box{border-radius:50%}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-window{flex-direction:column;max-width:var(--container-3xl)}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-image-ctn{flex:1;min-height:calc(var(--spacing)*0);overflow:hidden}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel{flex:none;height:auto}@media (min-width:64rem){.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel{max-width:none}}.custom-fields-component .fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel-footer{justify-content:flex-start}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table-ctn>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table{table-layout:auto;width:100%}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>thead>tr>th{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);text-align:start;--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>thead>tr>th:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>thead>tr>th.fi-has-action{padding:calc(var(--spacing)*0);width:calc(var(--spacing)*9)}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>:not(:last-child)){--tw-divide-x-reverse:0;border-color:var(--gray-200);border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style)}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td{padding:calc(var(--spacing)*0);width:50%}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td.fi-has-action{padding:calc(var(--spacing)*.5);width:auto}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td.fi-has-action .fi-fo-key-value-table-row-sortable-handle{display:flex}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td .fi-input{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.custom-fields-component .fi-fo-key-value .fi-fo-key-value-add-action-ctn{display:flex;justify-content:center;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-fo-key-value-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.custom-fields-component .fi-fo-markdown-editor{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.custom-fields-component .fi-fo-markdown-editor:not(.fi-disabled){color:var(--gray-950);font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));max-width:100%;overflow:hidden}.custom-fields-component .fi-fo-markdown-editor:not(.fi-disabled):where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-markdown-editor.fi-disabled{background-color:var(--gray-50);border-radius:var(--radius-lg);color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*3);width:100%;--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);display:block}.custom-fields-component .fi-fo-markdown-editor.fi-disabled:where(.dark,.dark *){color:var(--gray-400);--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-markdown-editor.fi-disabled:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .CodeMirror{padding-block:calc(var(--spacing)*3)!important;padding-inline:calc(var(--spacing)*4)!important}.custom-fields-component .fi-fo-markdown-editor .cm-s-easymde .cm-comment{background-color:#0000;color:var(--color-cm-gray-muted)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-operator,.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-string,.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-bracket,.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list,.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:#0000;color:inherit}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .CodeMirror{--tw-border-style:none;background-color:#0000;border-style:none;color:inherit;padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .CodeMirror-scroll{height:auto}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar{border-style:var(--tw-border-style);border-bottom-style:var(--tw-border-style);border-color:var(--gray-200);border-radius:0;border-width:0 0 1px;display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*2.5)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button{border-radius:var(--radius-lg);height:calc(var(--spacing)*8);width:calc(var(--spacing)*8);--tw-border-style:none;padding:calc(var(--spacing)*0);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;border-style:none;display:grid;place-content:center;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active{background-color:var(--gray-50)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:before{background-color:var(--gray-700);content:\"\";display:block;height:calc(var(--spacing)*5);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;width:calc(var(--spacing)*5)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:before{background-color:var(--primary-600)}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .separator{width:calc(var(--spacing)*1);--tw-border-style:none;border-style:none;margin:calc(var(--spacing)*0)!important}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1zm2.5 5.5v-4H11a2 2 0 1 1 0 4zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1zm2.5 5.5v-4H11a2 2 0 1 1 0 4zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476s-.007 1.313.684 2.1c.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a6 6 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.7 6.7 0 0 0-1.968-.875m1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043s-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476s-.007 1.313.684 2.1c.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a6 6 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.7 6.7 0 0 0-1.968-.875m1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043s-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4M13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4M13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902q1.753.283 3.55.414c.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.78.78 0 0 1 .642-.413 41 41 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41 41 0 0 0 10 2M6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902q1.753.283 3.55.414c.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.78.78 0 0 1 .642-.413 41 41 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41 41 0 0 0 10 2M6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0m7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06m-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0m7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06m-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75M6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10m0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75M1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75M6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10m0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75M1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.03.03 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5 5 0 0 0-2.277.155.75.75 0 0 0 .44 1.434M7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.03.03 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5 5 0 0 0-2.277.155.75.75 0 0 0 .44 1.434M7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5z'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74m1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75m-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75M17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75m-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74m1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75m-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75M17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75m-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0zM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0zM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' class='size-5' viewBox='0 0 20 20'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E\")}.custom-fields-component .fi-fo-markdown-editor .EasyMDEContainer .editor-statusbar{display:none}.custom-fields-component .fi-fo-markdown-editor:where(.dark,.dark *){--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.custom-fields-component .fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert()}.custom-fields-component .fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .editor-toolbar button:before{background-color:var(--gray-300)}.custom-fields-component .fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .editor-toolbar button.active:before{background-color:var(--primary-400)}.custom-fields-component [x-sortable]:has(.fi-sortable-ghost) .fi-fo-markdown-editor{pointer-events:none}.custom-fields-component .fi-fo-modal-table-select:not(.fi-fo-modal-table-select-multiple){align-items:flex-start;column-gap:calc(var(--spacing)*3);--tw-leading:calc(var(--spacing)*5);display:flex;line-height:calc(var(--spacing)*5)}.custom-fields-component .fi-fo-modal-table-select.fi-fo-modal-table-select-multiple{display:grid;gap:calc(var(--spacing)*2)}.custom-fields-component .fi-fo-modal-table-select.fi-fo-modal-table-select-multiple .fi-fo-modal-table-select-badges-ctn{display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*1.5)}.custom-fields-component .fi-fo-modal-table-select .fi-fo-modal-table-select-placeholder{color:var(--gray-400)}.custom-fields-component .fi-fo-modal-table-select .fi-fo-modal-table-select-placeholder:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-fo-radio{gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-radio.fi-inline{display:flex;flex-wrap:wrap}.custom-fields-component .fi-fo-radio:not(.fi-inline).fi-grid-direction-col{margin-top:calc(var(--spacing)*-4)}.custom-fields-component .fi-fo-radio:not(.fi-inline).fi-grid-direction-col>.fi-fo-radio-label{break-inside:avoid;padding-top:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-radio>.fi-fo-radio-label{align-self:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-fo-radio>.fi-fo-radio-label>.fi-radio-input{flex-shrink:0;margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-radio>.fi-fo-radio-label>.fi-fo-radio-label-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);display:grid;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-radio>.fi-fo-radio-label>.fi-fo-radio-label-text:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-radio>.fi-fo-radio-label .fi-fo-radio-label-description{--tw-font-weight:var(--font-weight-normal);color:var(--gray-500);font-weight:var(--font-weight-normal)}.custom-fields-component .fi-fo-radio>.fi-fo-radio-label .fi-fo-radio-label-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-repeater{display:grid;row-gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-actions{column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-actions.fi-hidden{display:none}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-items{align-items:flex-start;gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item.fi-collapsed .fi-fo-repeater-item-header-collapsible-actions{rotate:-180deg}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item.fi-collapsed .fi-fo-repeater-item-header-collapse-action,.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item:not(.fi-collapsed) .fi-fo-repeater-item-header-expand-action{opacity:0;pointer-events:none}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;overflow:hidden;padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-repeater.fi-collapsible .fi-fo-repeater-item-header{cursor:pointer;-webkit-user-select:none;user-select:none}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-start-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-icon{color:var(--gray-400)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-label.fi-truncated{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-end-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;margin-inline-start:auto}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-collapsible-actions{position:relative}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-collapse-action,.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-collapsible-actions,.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-expand-action{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-header-expand-action{inset:calc(var(--spacing)*0);position:absolute;rotate:180deg}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content{border-color:var(--gray-100);border-top-style:var(--tw-border-style);border-top-width:1px}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-item-content{padding:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add-between-items-ctn{display:flex;justify-content:center;width:100%}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add-between-items{background-color:var(--color-white);border-radius:var(--radius-lg)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add-between-items:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-ctn{align-items:center;display:flex;margin-block:calc(var(--spacing)*-2);position:relative}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;flex-shrink:0;width:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-inline:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);flex-shrink:0;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;flex:1}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add{display:flex;justify-content:center;width:100%}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add.fi-align-left,.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add.fi-align-end,.custom-fields-component .fi-fo-repeater .fi-fo-repeater-add.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-fo-simple-repeater{display:grid;row-gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-items{gap:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-item{column-gap:calc(var(--spacing)*3);display:flex;justify-content:flex-start}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-item-content{flex:1}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-item-actions{align-items:center;column-gap:calc(var(--spacing)*1);display:flex}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-add{display:flex;justify-content:center;width:100%}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-left,.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-end,.custom-fields-component .fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-fo-table-repeater{display:grid;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-table-repeater>table{display:block;width:100%}.custom-fields-component :where(.fi-fo-table-repeater>table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-fo-table-repeater>table{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component :where(.fi-fo-table-repeater>table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-table-repeater>table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-table-repeater>table:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-table-repeater>table:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-table-repeater>table>thead{display:none;white-space:nowrap}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th{background-color:var(--gray-50);border-color:var(--gray-200);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:first-of-type{border-top-left-radius:var(--radius-xl)}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:last-of-type{border-top-right-radius:var(--radius-xl)}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th.fi-align-left,.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th.fi-align-start{text-align:start}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th.fi-align-end,.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th.fi-align-right{text-align:end}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th.fi-wrapped{white-space:normal}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th:not(.fi-wrapped){white-space:nowrap}.custom-fields-component .fi-fo-table-repeater>table>thead>tr>th.fi-fo-table-repeater-empty-header-cell{width:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-table-repeater>table>tbody{display:block}.custom-fields-component :where(.fi-fo-table-repeater>table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-fo-table-repeater>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-table-repeater>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr{display:grid;gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td{display:block}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:none}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-start{vertical-align:top}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-center{vertical-align:middle}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-end{vertical-align:bottom}.custom-fields-component .fi-fo-table-repeater>table .fi-fo-table-repeater-header-required-mark{--tw-font-weight:var(--font-weight-medium);color:var(--danger-600);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-table-repeater>table .fi-fo-table-repeater-header-required-mark:where(.dark,.dark *){color:var(--danger-400)}.custom-fields-component .fi-fo-table-repeater>table .fi-fo-table-repeater-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;height:100%}@supports (container-type:inline-size){.custom-fields-component .fi-fo-table-repeater{container-type:inline-size}@container (min-width:36rem){.custom-fields-component .fi-fo-table-repeater>table{display:table}.custom-fields-component .fi-fo-table-repeater>table>thead{display:table-header-group}.custom-fields-component .fi-fo-table-repeater>table>tbody{display:table-row-group}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr{display:table-row;padding:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td{display:table-cell;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:table-cell}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field,.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field-label-content,.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry-label{display:none}.custom-fields-component .fi-fo-table-repeater>table .fi-fo-table-repeater-actions{padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td{border-color:var(--gray-200);padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-input-wrp{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;background-color:#0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-fo-field-wrp-error-message{padding-inline:calc(var(--spacing)*3);padding-bottom:calc(var(--spacing)*2)}.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-fo-radio,.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-in-entry-content{padding-inline:calc(var(--spacing)*3)}}}@supports not (container-type:inline-size){@media (min-width:64rem){.custom-fields-component .fi-fo-table-repeater>table{display:table}.custom-fields-component .fi-fo-table-repeater>table>thead{display:table-header-group}.custom-fields-component .fi-fo-table-repeater>table>tbody{display:table-row-group}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr{display:table-row;padding:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td{display:table-cell;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:table-cell}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field,.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field-label-content,.custom-fields-component .fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry-label{display:none}.custom-fields-component .fi-fo-table-repeater>table .fi-fo-table-repeater-actions{padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td{border-color:var(--gray-200);padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-input-wrp{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;background-color:#0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-fo-field-wrp-error-message{padding-inline:calc(var(--spacing)*3);padding-bottom:calc(var(--spacing)*2)}.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-fo-radio,.custom-fields-component .fi-fo-table-repeater.fi-compact .fi-in-entry-content{padding-inline:calc(var(--spacing)*3)}}}.custom-fields-component .fi-fo-table-repeater .fi-fo-table-repeater-add{display:flex;justify-content:center;width:100%}.custom-fields-component .fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-left,.custom-fields-component .fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-end,.custom-fields-component .fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file{cursor:wait;opacity:.5;pointer-events:none}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-toolbar{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);column-gap:calc(var(--spacing)*3);display:flex;flex-wrap:wrap;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*2.5);position:relative;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-floating-toolbar{background-color:var(--color-white);border-color:var(--gray-300);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;column-gap:calc(var(--spacing)*3);margin-top:calc(var(--spacing)*-1);max-width:100%;padding:calc(var(--spacing)*1);row-gap:calc(var(--spacing)*1);visibility:hidden;z-index:20;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:flex;flex-wrap:wrap;position:absolute}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-floating-toolbar:where(.dark,.dark *){background-color:var(--gray-800);border-color:var(--gray-600)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-toolbar-group{column-gap:calc(var(--spacing)*1);display:flex}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool{border-radius:var(--radius-lg);font-size:var(--text-sm);height:calc(var(--spacing)*8);line-height:var(--tw-leading,var(--text-sm--line-height));min-width:calc(var(--spacing)*8);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-700);font-weight:var(--font-weight-semibold);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;align-items:center;display:flex;justify-content:center;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:focus-visible{background-color:var(--gray-50)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool[disabled]{cursor:default;opacity:.7;pointer-events:none}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active{background-color:var(--gray-50);color:var(--primary-600)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-fo-rich-editor-tool-with-label{align-items:center;column-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*1.5)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message{align-items:center;background-color:var(--gray-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);column-gap:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*5);--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);display:flex;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message .fi-loading-indicator{color:var(--gray-400)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message{align-items:center;background-color:var(--danger-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--danger-200);column-gap:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*5);--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--danger-700);display:flex;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){color:var(--danger-200)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-main{display:flex;flex-direction:column-reverse}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-content{flex:1;min-height:calc(var(--spacing)*12);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*5);position:relative;width:100%}.custom-fields-component .fi-fo-rich-editor span[data-type=mergeTag]{display:inline-block;margin-block:calc(var(--spacing)*0);white-space:nowrap}.custom-fields-component .fi-fo-rich-editor span[data-type=mergeTag]:before{--tw-font-weight:var(--font-weight-normal);content:\"{{\";font-weight:var(--font-weight-normal);margin-inline-end:calc(var(--spacing)*1);opacity:.6}.custom-fields-component .fi-fo-rich-editor span[data-type=mergeTag]:after{--tw-font-weight:var(--font-weight-normal);content:\"}}\";font-weight:var(--font-weight-normal);margin-inline-start:calc(var(--spacing)*1);opacity:.6}.custom-fields-component .fi-fo-rich-editor span[data-type=mention]{background-color:var(--primary-50);margin-block:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);border-radius:.25rem;color:var(--primary-600);display:inline-block;font-weight:var(--font-weight-medium);white-space:nowrap}.custom-fields-component .fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){background-color:var(--primary-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){background-color:color-mix(in oklab,var(--primary-400)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels{background-color:var(--gray-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);width:100%}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panel-header{align-items:flex-start;display:flex;gap:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panel-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1;font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panel-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panel-close-btn-ctn{flex-shrink:0}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panel{display:grid}.custom-fields-component :where(.fi-fo-rich-editor .fi-fo-rich-editor-panel>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-fo-rich-editor .fi-fo-rich-editor-panel:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-rich-editor .fi-fo-rich-editor-panel:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tags-list{display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn{background-color:var(--color-white);border-radius:var(--radius-lg);color:var(--gray-600);cursor:move;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*1);text-align:start;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-600)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-blocks-list{display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn{background-color:var(--color-white);border-radius:var(--radius-lg);color:var(--gray-600);cursor:move;font-size:var(--text-sm);gap:calc(var(--spacing)*1.5);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);text-align:start;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-600);display:flex}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap{height:100%}.custom-fields-component .fi-fo-rich-editor .tiptap:focus{--tw-outline-style:none;outline-style:none}.custom-fields-component div:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)[data-type=customBlock],.custom-fields-component img:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}.custom-fields-component :is(div:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)[data-type=customBlock],img:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)):where(.dark,.dark *){--tw-ring-color:var(--primary-500)}.custom-fields-component .fi-fo-rich-editor .tiptap p.is-editor-empty:first-child:before{color:var(--gray-400);content:attr(data-placeholder);float:inline-start;height:calc(var(--spacing)*0);pointer-events:none}.custom-fields-component .fi-fo-rich-editor .tiptap p.is-editor-empty:first-child:where(.dark,.dark *):before{color:var(--gray-500)}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]{border-color:var(--gray-950);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;display:flex;gap:calc(var(--spacing)*1);margin-block:calc(var(--spacing)*6)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]{border-color:color-mix(in oklab,var(--gray-950)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]{padding:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>div:first-of-type{margin-top:calc(var(--spacing)*0)!important}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details] summary{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);list-style-type:none}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>button{border-radius:var(--radius-md);font-size:var(--text-xs);height:calc(var(--spacing)*5);line-height:var(--tw-leading,var(--text-xs--line-height));margin-right:calc(var(--spacing)*2);margin-top:1px;padding:calc(var(--spacing)*1);width:calc(var(--spacing)*5);--tw-leading:1;align-items:center;background-color:#0000;display:flex;justify-content:center;line-height:1}@media (hover:hover){.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>button:hover{background-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>button:hover{background-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>button:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>button:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>button:before{content:\"▶\"}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details].is-open>button:before{transform:rotate(90deg)}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>div{display:flex;flex-direction:column;gap:calc(var(--spacing)*4);width:100%}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>div>[data-type=detailsContent]{margin-top:calc(var(--spacing)*0)!important}.custom-fields-component .fi-fo-rich-editor .tiptap [data-type=details]>div>[data-type=detailsContent]>:last-child{margin-bottom:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .tiptap table{border-collapse:collapse;margin:calc(var(--spacing)*0);overflow:hidden;table-layout:fixed;width:100%}.custom-fields-component .fi-fo-rich-editor .tiptap table:first-child{margin-top:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-rich-editor .tiptap table td,.custom-fields-component .fi-fo-rich-editor .tiptap table th{border-color:var(--gray-300);border-style:var(--tw-border-style);border-width:1px;min-width:1em;padding:calc(var(--spacing)*2)!important;position:relative;vertical-align:top}.custom-fields-component :is(.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th):where(.dark,.dark *){border-color:var(--gray-600)}.custom-fields-component :is(.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th)>*{margin-bottom:calc(var(--spacing)*0)}.custom-fields-component .fi-fo-rich-editor .tiptap table th{background-color:var(--gray-100);text-align:start;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.custom-fields-component .fi-fo-rich-editor .tiptap table th:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white)}.custom-fields-component .fi-fo-rich-editor .tiptap table .selectedCell:after{background-color:var(--gray-200);bottom:calc(var(--spacing)*0);inset-inline-end:calc(var(--spacing)*0);inset-inline-start:calc(var(--spacing)*0);pointer-events:none;position:absolute;top:calc(var(--spacing)*0);z-index:2}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap table .selectedCell:after{background-color:color-mix(in oklab,var(--gray-200)80%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap table .selectedCell:after{--tw-content:\"\";content:var(--tw-content)}.custom-fields-component .fi-fo-rich-editor .tiptap table .selectedCell:where(.dark,.dark *):after{background-color:var(--gray-800)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap table .selectedCell:where(.dark,.dark *):after{background-color:color-mix(in oklab,var(--gray-800)80%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap table .column-resize-handle{background-color:var(--primary-600);bottom:calc(var(--spacing)*0);inset-inline-end:calc(var(--spacing)*0);margin:calc(var(--spacing)*0)!important;pointer-events:none;position:absolute;top:calc(var(--spacing)*0);width:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-rich-editor .tiptap .tableWrapper{overflow-x:auto}.custom-fields-component .fi-fo-rich-editor .tiptap.resize-cursor{cursor:col-resize;cursor:ew-resize}.custom-fields-component .fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{border-color:var(--gray-950);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{border-color:color-mix(in oklab,var(--gray-950)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{padding:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle]{background:#00000080;border:1px solid #fffc;border-radius:2px;position:absolute;z-index:10}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle]:hover{background:#000c}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle]{margin:0!important}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-left],.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-right],.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-left],.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-right]{height:8px;width:8px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-left]{cursor:nwse-resize;left:-4px;top:-4px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-right]{cursor:nesw-resize;right:-4px;top:-4px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-left]{bottom:-4px;cursor:nesw-resize;left:-4px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-right]{bottom:-4px;cursor:nwse-resize;right:-4px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom],.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top]{height:6px;left:8px;right:8px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top]{cursor:ns-resize;top:-3px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom]{bottom:-3px;cursor:ns-resize}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=left],.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=right]{bottom:8px;top:8px;width:6px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=left]{cursor:ew-resize;left:-3px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=right]{cursor:ew-resize;right:-3px}.custom-fields-component .fi-fo-rich-editor .tiptap [data-resize-state=true] [data-resize-wrapper]{border-radius:.125rem;outline:1px solid #00000040;position:relative}@supports (-webkit-touch-callout:none){.custom-fields-component .fi-fo-rich-editor .tiptap.ProseMirror{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.custom-fields-component .fi-fo-rich-editor img{display:inline-block}.custom-fields-component .fi-fo-rich-editor div[data-type=customBlock]{display:grid}.custom-fields-component :where(.fi-fo-rich-editor div[data-type=customBlock]>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-fo-rich-editor div[data-type=customBlock]{border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow:hidden}.custom-fields-component :where(.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header{align-items:flex-start;background-color:var(--gray-50);display:flex;gap:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1;font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-delete-btn-ctn,.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-edit-btn-ctn{flex-shrink:0}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-custom-block-preview{padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}@supports (container-type:inline-size){.custom-fields-component .fi-fo-rich-editor{container-type:inline-size}@container (min-width:42rem){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:row}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels{border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-end-end-radius:var(--radius-lg);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;max-width:var(--container-3xs)}}}@supports not (container-type:inline-size){@media (min-width:48rem){.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:row}.custom-fields-component .fi-fo-rich-editor .fi-fo-rich-editor-panels{border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-end-end-radius:var(--radius-lg);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;max-width:var(--container-3xs)}}}.custom-fields-component :scope .fi-fo-rich-editor-text-color-select-option{align-items:center;display:flex;gap:calc(var(--spacing)*2)}.custom-fields-component :scope .fi-fo-rich-editor-text-color-select-option .fi-fo-rich-editor-text-color-select-option-preview{background-color:var(--color);border-radius:3.40282e+38px;flex-shrink:0;height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.custom-fields-component :scope .fi-fo-rich-editor-text-color-select-option .fi-fo-rich-editor-text-color-select-option-preview:where(.dark,.dark *){background-color:var(--dark-color)}.custom-fields-component [x-sortable]:has(.fi-sortable-ghost) .fi-fo-rich-editor{pointer-events:none}.custom-fields-component .fi-fo-select .fi-hidden{display:none}@media (min-width:40rem){.custom-fields-component .fi-fo-select-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.custom-fields-component .fi-fo-slider{border-radius:var(--radius-lg);border-style:var(--tw-border-style);gap:calc(var(--spacing)*4);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);background-color:#0000;border-width:0}.custom-fields-component .fi-fo-slider:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-slider:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-slider .noUi-connect{background-color:var(--primary-500)}.custom-fields-component .fi-fo-slider .noUi-connect:where(.dark,.dark *){background-color:var(--primary-600)}.custom-fields-component .fi-fo-slider .noUi-connects{background-color:var(--gray-950);border-radius:var(--radius-lg)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-slider .noUi-connects{background-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.custom-fields-component .fi-fo-slider .noUi-connects:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-slider .noUi-connects:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-fo-slider .noUi-handle{border-color:var(--gray-950);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;position:absolute}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-slider .noUi-handle{border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.custom-fields-component .fi-fo-slider .noUi-handle{background-color:var(--color-white);--tw-shadow:0 0 #0000;backface-visibility:hidden;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-fo-slider .noUi-handle:focus{outline-color:var(--primary-600);outline-style:var(--tw-outline-style);outline-width:2px}.custom-fields-component .fi-fo-slider .noUi-handle:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-slider .noUi-handle:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-slider .noUi-handle:where(.dark,.dark *){background-color:var(--gray-700)}.custom-fields-component .fi-fo-slider .noUi-handle:where(.dark,.dark *):focus{outline-color:var(--primary-500)}.custom-fields-component .fi-fo-slider .noUi-handle:after,.custom-fields-component .fi-fo-slider .noUi-handle:before{background-color:var(--gray-400);border-style:var(--tw-border-style);border-width:0}.custom-fields-component .fi-fo-slider .noUi-tooltip{background-color:var(--color-white);border-radius:var(--radius-md);border-style:var(--tw-border-style);color:var(--gray-950);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-width:0}.custom-fields-component .fi-fo-slider .noUi-tooltip:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white);--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-slider .noUi-tooltip:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-fo-slider .noUi-pips .noUi-value{color:var(--gray-950)}.custom-fields-component .fi-fo-slider .noUi-pips .noUi-value:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-slider.fi-fo-slider-vertical{height:calc(var(--spacing)*40);margin-top:calc(var(--spacing)*4)}.custom-fields-component .fi-fo-slider.fi-fo-slider-vertical.fi-fo-slider-has-tooltips{margin-inline-start:calc(var(--spacing)*10)}.custom-fields-component .fi-fo-slider:not(.fi-fo-slider-vertical).fi-fo-slider-has-pips{margin-bottom:calc(var(--spacing)*8)}.custom-fields-component .fi-fo-slider:not(.fi-fo-slider-vertical).fi-fo-slider-has-tooltips{margin-top:calc(var(--spacing)*10)}.custom-fields-component .fi-fo-slider:not(.fi-fo-slider-vertical) .noUi-pips .noUi-value{margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-fo-tags-input.fi-disabled .fi-badge-delete-btn{display:none}.custom-fields-component .fi-fo-tags-input .fi-fo-tags-input-tags-ctn{border-top:1px var(--tw-border-style) var(--gray-200);display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*1.5);padding:calc(var(--spacing)*2);width:100%}.custom-fields-component .fi-fo-tags-input .fi-fo-tags-input-tags-ctn:where(.dark,.dark *){border-top-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-fo-tags-input .fi-fo-tags-input-tags-ctn:where(.dark,.dark *){border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-fo-tags-input .fi-fo-tags-input-tags-ctn>template{display:none}.custom-fields-component .fi-fo-tags-input .fi-fo-tags-input-tags-ctn>.fi-badge.fi-reorderable{cursor:move}.custom-fields-component .fi-fo-tags-input .fi-fo-tags-input-tags-ctn>.fi-badge .fi-badge-label-ctn{text-align:start;-webkit-user-select:none;user-select:none}@media (min-width:40rem){.custom-fields-component .fi-fo-tags-input-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.custom-fields-component .fi-fo-text-input{overflow:hidden}.custom-fields-component .fi-fo-text-input input.fi-revealable::-ms-reveal{display:none}.custom-fields-component .fi-fo-textarea{overflow:hidden}.custom-fields-component .fi-fo-textarea textarea{--tw-border-style:none;font-size:var(--text-sm);height:100%;line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);width:100%;--tw-leading:calc(var(--spacing)*6);background-color:#0000;border-style:none;color:var(--gray-950);display:block;line-height:calc(var(--spacing)*6)}.custom-fields-component .fi-fo-textarea textarea::placeholder{color:var(--gray-400)}.custom-fields-component .fi-fo-textarea textarea:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;outline-style:none}.custom-fields-component .fi-fo-textarea textarea:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.custom-fields-component .fi-fo-textarea textarea:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component .fi-fo-textarea textarea:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-fo-textarea textarea:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.custom-fields-component .fi-fo-textarea textarea:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.custom-fields-component .fi-fo-textarea textarea:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}@supports (-webkit-touch-callout:none){.custom-fields-component .fi-fo-textarea textarea{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.custom-fields-component .fi-fo-textarea.fi-autosizable textarea{resize:none}@media (min-width:40rem){.custom-fields-component .fi-fo-textarea-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.custom-fields-component .fi-fo-toggle-buttons.fi-btn-group{width:max-content}.custom-fields-component .fi-fo-toggle-buttons:not(.fi-btn-group){gap:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-toggle-buttons:not(.fi-btn-group).fi-inline{display:flex;flex-wrap:wrap}.custom-fields-component .fi-fo-toggle-buttons:not(.fi-btn-group):not(.fi-inline).fi-grid-direction-col{margin-top:calc(var(--spacing)*-3)}.custom-fields-component .fi-fo-toggle-buttons:not(.fi-btn-group):not(.fi-inline).fi-grid-direction-col .fi-fo-toggle-buttons-btn-ctn{break-inside:avoid;padding-top:calc(var(--spacing)*3)}.custom-fields-component .fi-fo-toggle-buttons .fi-fo-toggle-buttons-input{opacity:0;pointer-events:none;position:absolute}@media (min-width:40rem){.custom-fields-component .fi-fo-toggle-buttons-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.custom-fields-component .fi-in-code .phiki{border-radius:var(--radius-lg);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow-x:auto}.custom-fields-component .fi-in-code .phiki:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-code .phiki:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-in-code:where(.dark,.dark *) .phiki,.custom-fields-component .fi-in-code:where(.dark,.dark *) .phiki span{background-color:var(--phiki-dark-background-color)!important;color:var(--phiki-dark-color)!important;font-style:var(--phiki-dark-font-style)!important;font-weight:var(--phiki-dark-font-weight)!important;-webkit-text-decoration:var(--phiki-dark-text-decoration)!important;text-decoration:var(--phiki-dark-text-decoration)!important}.custom-fields-component .fi-in-code.fi-copyable{cursor:pointer}.custom-fields-component .fi-in-color{display:flex;gap:calc(var(--spacing)*1.5);width:100%}.custom-fields-component .fi-in-color.fi-wrapped{flex-wrap:wrap}.custom-fields-component .fi-in-color.fi-align-left,.custom-fields-component .fi-in-color.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-in-color.fi-align-center{justify-content:center}.custom-fields-component .fi-in-color.fi-align-end,.custom-fields-component .fi-in-color.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-in-color.fi-align-between,.custom-fields-component .fi-in-color.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-in-color>.fi-in-color-item{border-radius:var(--radius-md);height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.custom-fields-component .fi-in-color>.fi-in-color-item.fi-copyable{cursor:pointer}.custom-fields-component .fi-in-entry{display:grid;row-gap:calc(var(--spacing)*2)}@media (min-width:40rem){.custom-fields-component .fi-in-entry.fi-in-entry-has-inline-label{align-items:flex-start;column-gap:calc(var(--spacing)*4);grid-template-columns:repeat(3,minmax(0,1fr))}.custom-fields-component .fi-in-entry.fi-in-entry-has-inline-label .fi-in-entry-content-col{grid-column:span 2/span 2}}.custom-fields-component .fi-in-entry .fi-in-entry-label-ctn{align-items:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-in-entry .fi-in-entry-label-ctn>.fi-sc:first-child{flex-grow:0}.custom-fields-component .fi-in-entry .fi-in-entry-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-in-entry .fi-in-entry-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-in-entry .fi-in-entry-label.fi-hidden{display:none}.custom-fields-component .fi-in-entry .fi-in-entry-content-col,.custom-fields-component .fi-in-entry .fi-in-entry-label-col{display:grid;grid-auto-columns:minmax(0,1fr);row-gap:calc(var(--spacing)*2)}.custom-fields-component .fi-in-entry .fi-in-entry-content-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;width:100%}.custom-fields-component .fi-in-entry .fi-in-entry-content{display:block;text-align:start;width:100%}.custom-fields-component .fi-in-entry .fi-in-entry-content.fi-align-center{text-align:center}.custom-fields-component .fi-in-entry .fi-in-entry-content.fi-align-end{text-align:end}.custom-fields-component .fi-in-entry .fi-in-entry-content.fi-align-left{text-align:left}.custom-fields-component .fi-in-entry .fi-in-entry-content.fi-align-right{text-align:right}.custom-fields-component .fi-in-entry .fi-in-entry-content.fi-align-between,.custom-fields-component .fi-in-entry .fi-in-entry-content.fi-align-justify{text-align:justify}.custom-fields-component .fi-in-entry .fi-in-placeholder{color:var(--gray-400);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-in-entry .fi-in-placeholder:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-in-key-value{table-layout:auto;width:100%}.custom-fields-component :where(.fi-in-key-value>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-in-key-value{background-color:var(--color-white);border-radius:var(--radius-lg);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component :where(.fi-in-key-value:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-in-key-value:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-key-value:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-key-value:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-key-value:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-key-value:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-in-key-value th{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);text-align:start;--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-in-key-value th:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component :where(.fi-in-key-value tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-in-key-value tbody{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media (min-width:40rem){.custom-fields-component .fi-in-key-value tbody{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}}.custom-fields-component :where(.fi-in-key-value tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-in-key-value tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component :where(.fi-in-key-value tr>:not(:last-child)){--tw-divide-x-reverse:0;border-color:var(--gray-200);border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style)}.custom-fields-component :where(.fi-in-key-value tr:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}.custom-fields-component :where(.fi-in-key-value tr:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-in-key-value tr:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-key-value td{overflow-wrap:anywhere;padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);width:50%}.custom-fields-component .fi-in-key-value td.fi-in-placeholder{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";padding-block:calc(var(--spacing)*2);text-align:center;width:100%}.custom-fields-component .fi-in-icon{display:flex;gap:calc(var(--spacing)*1.5);width:100%}.custom-fields-component .fi-in-icon.fi-wrapped{flex-wrap:wrap}.custom-fields-component .fi-in-icon.fi-in-icon-has-line-breaks{flex-direction:column}.custom-fields-component .fi-in-icon.fi-align-left,.custom-fields-component .fi-in-icon.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-in-icon.fi-align-center{justify-content:center}.custom-fields-component .fi-in-icon.fi-align-end,.custom-fields-component .fi-in-icon.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-in-icon.fi-align-between,.custom-fields-component .fi-in-icon.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-in-icon>.fi-icon,.custom-fields-component .fi-in-icon>a>.fi-icon{color:var(--gray-400)}.custom-fields-component :is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component :is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon).fi-color{color:var(--text)}.custom-fields-component :is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon).fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-in-image{align-items:center;display:flex;gap:calc(var(--spacing)*1.5);width:100%}.custom-fields-component .fi-in-image img{max-width:none;object-fit:cover;object-position:center}.custom-fields-component .fi-in-image.fi-circular img{border-radius:3.40282e+38px}.custom-fields-component .fi-in-image.fi-in-image-ring .fi-in-image-limited-remaining-text,.custom-fields-component .fi-in-image.fi-in-image-ring img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-white)}.custom-fields-component :is(.fi-in-image.fi-in-image-ring img,.fi-in-image.fi-in-image-ring .fi-in-image-limited-remaining-text):where(.dark,.dark *){--tw-ring-color:var(--gray-900)}.custom-fields-component .fi-in-image.fi-in-image-ring.fi-in-image-ring-1 .fi-in-image-limited-remaining-text,.custom-fields-component .fi-in-image.fi-in-image-ring.fi-in-image-ring-1 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-in-image.fi-in-image-ring.fi-in-image-ring-2 .fi-in-image-limited-remaining-text,.custom-fields-component .fi-in-image.fi-in-image-ring.fi-in-image-ring-2 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-in-image.fi-in-image-ring.fi-in-image-ring-4 .fi-in-image-limited-remaining-text,.custom-fields-component .fi-in-image.fi-in-image-ring.fi-in-image-ring-4 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-in-image.fi-in-image-overlap-1{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-1*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-2{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-2*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-3{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-3*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-4{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-4*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-5{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-5*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-5*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-6{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-6*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-6*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-7{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-7*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-7*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-in-image-overlap-8{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-in-image.fi-in-image-overlap-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-8*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-8*var(--tw-space-x-reverse))}.custom-fields-component .fi-in-image.fi-wrapped{flex-wrap:wrap}.custom-fields-component .fi-in-image.fi-align-left,.custom-fields-component .fi-in-image.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-in-image.fi-align-center{justify-content:center}.custom-fields-component .fi-in-image.fi-align-end,.custom-fields-component .fi-in-image.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-in-image.fi-align-between,.custom-fields-component .fi-in-image.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-in-image.fi-stacked .fi-in-image-limited-remaining-text{background-color:var(--gray-100);border-radius:3.40282e+38px}.custom-fields-component .fi-in-image.fi-stacked .fi-in-image-limited-remaining-text:where(.dark,.dark *){background-color:var(--gray-800)}.custom-fields-component .fi-in-image .fi-in-image-limited-remaining-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);align-items:center;color:var(--gray-500);display:flex;font-weight:var(--font-weight-medium);justify-content:center}.custom-fields-component .fi-in-image .fi-in-image-limited-remaining-text:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-in-image .fi-in-image-limited-remaining-text.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-in-image .fi-in-image-limited-remaining-text.fi-size-base,.custom-fields-component .fi-in-image .fi-in-image-limited-remaining-text.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-in-image .fi-in-image-limited-remaining-text.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component ul.fi-in-repeatable{gap:calc(var(--spacing)*4)}.custom-fields-component .fi-in-repeatable .fi-in-repeatable-item{display:block}.custom-fields-component .fi-in-repeatable.fi-contained .fi-in-repeatable-item{background-color:var(--color-white);border-radius:var(--radius-xl);padding:calc(var(--spacing)*4);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-in-repeatable.fi-contained .fi-in-repeatable-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-repeatable.fi-contained .fi-in-repeatable-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-repeatable.fi-contained .fi-in-repeatable-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-repeatable.fi-contained .fi-in-repeatable-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-in-table-repeatable{display:grid;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-in-table-repeatable>table{display:block;width:100%}.custom-fields-component :where(.fi-in-table-repeatable>table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-in-table-repeatable>table{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component :where(.fi-in-table-repeatable>table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-in-table-repeatable>table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-in-table-repeatable>table:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-table-repeatable>table:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-in-table-repeatable>table>thead{display:none;white-space:nowrap}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th{background-color:var(--gray-50);border-color:var(--gray-200);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);text-align:start;--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:first-of-type{border-top-left-radius:var(--radius-xl)}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:last-of-type{border-top-right-radius:var(--radius-xl)}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th.fi-align-center{text-align:center}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th.fi-align-end,.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th.fi-align-right{text-align:end}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th.fi-wrapped{white-space:normal}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th:not(.fi-wrapped){white-space:nowrap}.custom-fields-component .fi-in-table-repeatable>table>thead>tr>th.fi-in-table-repeatable-empty-header-cell{width:calc(var(--spacing)*1)}.custom-fields-component .fi-in-table-repeatable>table>tbody{display:block}.custom-fields-component :where(.fi-in-table-repeatable>table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-in-table-repeatable>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-in-table-repeatable>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr{display:grid;gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td{display:block}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:none}@supports (container-type:inline-size){.custom-fields-component .fi-in-table-repeatable{container-type:inline-size}@container (min-width:36rem){.custom-fields-component .fi-in-table-repeatable>table{display:table}.custom-fields-component .fi-in-table-repeatable>table>thead{display:table-header-group}.custom-fields-component .fi-in-table-repeatable>table>tbody{display:table-row-group}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr{display:table-row;padding:calc(var(--spacing)*0)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td{display:table-cell;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:table-cell}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry-label{display:none}.custom-fields-component .fi-in-table-repeatable>table .fi-in-table-repeatable-actions{padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}}}@supports not (container-type:inline-size){@media (min-width:64rem){.custom-fields-component .fi-in-table-repeatable>table{display:table}.custom-fields-component .fi-in-table-repeatable>table>thead{display:table-header-group}.custom-fields-component .fi-in-table-repeatable>table>tbody{display:table-row-group}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr{display:table-row;padding:calc(var(--spacing)*0)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td{display:table-cell;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:table-cell}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.custom-fields-component .fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry-label{display:none}}}.custom-fields-component .fi-in-text{width:100%}.custom-fields-component .fi-in-text.fi-in-text-affixed{display:flex;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-in-text .fi-in-text-affixed-content{flex:1;min-width:calc(var(--spacing)*0)}.custom-fields-component .fi-in-text .fi-in-text-affix{align-items:center;align-self:stretch;display:flex;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-in-text.fi-in-text-list-limited{display:flex;flex-direction:column}.custom-fields-component .fi-in-text.fi-in-text-list-limited.fi-in-text-has-badges{row-gap:calc(var(--spacing)*2)}.custom-fields-component .fi-in-text.fi-in-text-list-limited:not(.fi-in-text-has-badges){row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-in-text.fi-bulleted ul,.custom-fields-component ul.fi-in-text.fi-bulleted{list-style-position:inside;list-style-type:disc}.custom-fields-component .fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul,.custom-fields-component ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges{column-gap:calc(var(--spacing)*1.5);display:flex}.custom-fields-component :is(ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul).fi-wrapped,.custom-fields-component :is(ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul):is(.fi-wrapped ul){flex-wrap:wrap;row-gap:calc(var(--spacing)*1)}.custom-fields-component :is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul).fi-in-text-has-line-breaks,.custom-fields-component :is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):is(.fi-in-text-has-line-breaks ul){display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}.custom-fields-component :is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul),.custom-fields-component :is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks){column-gap:calc(var(--spacing)*1.5);display:flex}.custom-fields-component :is(:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul)).fi-wrapped,.custom-fields-component :is(:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul)):is(.fi-wrapped ul){flex-wrap:wrap;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks){overflow-wrap:break-word;white-space:normal}.custom-fields-component .fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks) .fi-badge,.custom-fields-component .fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks) .fi-in-text-list-limited-message{white-space:nowrap}.custom-fields-component .fi-in-text>.fi-in-text-list-limited-message{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-in-text>.fi-in-text-list-limited-message:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-in-text.fi-align-center{text-align:center}.custom-fields-component .fi-in-text.fi-align-center ul,.custom-fields-component ul.fi-in-text.fi-align-center{justify-content:center}.custom-fields-component .fi-in-text.fi-align-end,.custom-fields-component .fi-in-text.fi-align-right{text-align:end}.custom-fields-component :is(.fi-in-text.fi-align-end,.fi-in-text.fi-align-right) ul,.custom-fields-component ul:is(.fi-in-text.fi-align-end,.fi-in-text.fi-align-right){justify-content:flex-end}.custom-fields-component .fi-in-text.fi-align-between,.custom-fields-component .fi-in-text.fi-align-justify{text-align:justify}.custom-fields-component :is(.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between) ul,.custom-fields-component ul:is(.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between){justify-content:space-between}.custom-fields-component .fi-in-text-item{color:var(--gray-950)}.custom-fields-component .fi-in-text-item:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.custom-fields-component .fi-in-text-item a:hover{text-decoration-line:underline}}.custom-fields-component .fi-in-text-item a:focus-visible{text-decoration-line:underline}.custom-fields-component .fi-in-text-item:not(.fi-bulleted li.fi-in-text-item){-webkit-line-clamp:var(--line-clamp,none);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.custom-fields-component .fi-in-text-item>.fi-copyable{cursor:pointer}.custom-fields-component .fi-in-text-item.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-in-text-item.fi-size-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-in-text-item.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-in-text-item.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .fi-in-text-item.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.custom-fields-component .fi-in-text-item.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.custom-fields-component .fi-in-text-item.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.custom-fields-component .fi-in-text-item.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.custom-fields-component .fi-in-text-item.fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-in-text-item.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-in-text-item.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.custom-fields-component .fi-in-text-item.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.custom-fields-component .fi-in-text-item.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.custom-fields-component .fi-in-text-item.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.custom-fields-component .fi-in-text-item.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif}.custom-fields-component .fi-in-text-item.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.custom-fields-component .fi-in-text-item.fi-color{color:var(--text)}.custom-fields-component .fi-in-text-item.fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component li.fi-in-text-item.fi-color::marker{color:var(--gray-950)}.custom-fields-component li.fi-in-text-item.fi-color:where(.dark,.dark *)::marker{color:var(--color-white)}.custom-fields-component .fi-in-text-item.fi-color-gray{color:var(--gray-500)}.custom-fields-component .fi-in-text-item.fi-color-gray:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component li.fi-in-text-item.fi-color-gray::marker{color:var(--gray-950)}.custom-fields-component .fi-in-text-item>.fi-icon,.custom-fields-component .fi-in-text-item>span:not(.fi-badge)>.fi-icon{color:var(--gray-400);display:inline-block;flex-shrink:0}.custom-fields-component :is(.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component :is(.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon).fi-color{color:var(--color-500)}.custom-fields-component .fi-no-database{display:flex}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-heading{display:inline-block;position:relative}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-heading .fi-badge{inset-inline-start:100%;margin-inline-start:calc(var(--spacing)*1);position:absolute;top:calc(var(--spacing)*-1);width:max-content}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-header .fi-ac{margin-top:calc(var(--spacing)*2)}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content{margin-inline:calc(var(--spacing)*-6);margin-top:calc(var(--spacing)*-6);row-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-footer) .fi-modal-content{margin-bottom:calc(var(--spacing)*-6)}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200)}.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-no-database .fi-no-notification-unread-ctn{position:relative}.custom-fields-component .fi-no-database .fi-no-notification-unread-ctn:before{background-color:var(--primary-600);content:var(--tw-content);height:100%;inset-inline-start:calc(var(--spacing)*0);position:absolute;width:calc(var(--spacing)*.5)}.custom-fields-component .fi-no-database .fi-no-notification-unread-ctn:where(.dark,.dark *):before{background-color:var(--primary-500);content:var(--tw-content)}.custom-fields-component .fi-no-notification{gap:calc(var(--spacing)*3);padding:calc(var(--spacing)*4);pointer-events:auto;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));visibility:hidden;width:100%;--tw-duration:.3s;display:flex;flex-shrink:0;overflow:hidden;transition-duration:.3s}.custom-fields-component .fi-no-notification .fi-no-notification-icon{color:var(--gray-400)}.custom-fields-component .fi-no-notification .fi-no-notification-icon.fi-color{color:var(--color-400)}.custom-fields-component .fi-no-notification .fi-no-notification-main{display:grid;flex:1;gap:calc(var(--spacing)*3);margin-top:calc(var(--spacing)*.5)}.custom-fields-component .fi-no-notification .fi-no-notification-text{display:grid;gap:calc(var(--spacing)*1)}.custom-fields-component .fi-no-notification .fi-no-notification-title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-no-notification .fi-no-notification-title:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-no-notification .fi-no-notification-date{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-no-notification .fi-no-notification-date:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-no-notification .fi-no-notification-body{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow:hidden;overflow-wrap:break-word;text-wrap:pretty}.custom-fields-component .fi-no-notification .fi-no-notification-body:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-no-notification .fi-no-notification-body>p:not(:first-of-type){margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-no-notification:not(.fi-inline){background-color:var(--color-white);border-radius:var(--radius-xl);gap:calc(var(--spacing)*3);max-width:var(--container-sm);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex}.custom-fields-component .fi-no-notification:not(.fi-inline):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-no-notification:not(.fi-inline):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-no-notification:not(.fi-inline).fi-color{--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-no-notification:not(.fi-inline).fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)20%,transparent)}}.custom-fields-component .fi-no-notification:not(.fi-inline).fi-color:where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-no-notification:not(.fi-inline).fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.custom-fields-component .fi-no-notification:not(.fi-inline).fi-transition-leave-end{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.custom-fields-component .fi-no-notification.fi-color{background-color:#fff}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-no-notification.fi-color{background-color:color-mix(in oklab,#fff 90%,var(--color-400))}}.custom-fields-component .fi-no-notification.fi-color:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-no-notification.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)90%,var(--color-400))}}.custom-fields-component .fi-no-notification.fi-transition-enter-start,.custom-fields-component .fi-no-notification.fi-transition-leave-end{opacity:0}.custom-fields-component :is(.fi-no.fi-align-start,.fi-no.fi-align-left) .fi-no-notification.fi-transition-enter-start{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component :is(.fi-no.fi-align-end,.fi-no.fi-align-right) .fi-no-notification.fi-transition-enter-start{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-no.fi-align-center.fi-vertical-align-start .fi-no-notification.fi-transition-enter-start{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-no.fi-align-center.fi-vertical-align-end .fi-no-notification.fi-transition-enter-start{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-no{display:flex;gap:calc(var(--spacing)*3);inset:calc(var(--spacing)*4);margin-inline:auto;pointer-events:none;position:fixed;z-index:50}.custom-fields-component .fi-no.fi-align-left,.custom-fields-component .fi-no.fi-align-start{align-items:flex-start}.custom-fields-component .fi-no.fi-align-center{align-items:center}.custom-fields-component .fi-no.fi-align-end,.custom-fields-component .fi-no.fi-align-right{align-items:flex-end}.custom-fields-component .fi-no.fi-vertical-align-start{flex-direction:column-reverse;justify-content:flex-end}.custom-fields-component .fi-no.fi-vertical-align-center{flex-direction:column;justify-content:center}.custom-fields-component .fi-no.fi-vertical-align-end{flex-direction:column;justify-content:flex-end}.custom-fields-component .fi-sc-actions{display:flex;flex-direction:column;gap:calc(var(--spacing)*2);height:100%}.custom-fields-component .fi-sc-actions .fi-sc-actions-label-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-sc-actions .fi-sc-actions-label-ctn .fi-sc-actions-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-sc-actions .fi-sc-actions-label-ctn .fi-sc-actions-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-sc-actions.fi-sticky .fi-ac{background-color:var(--color-white);bottom:calc(var(--spacing)*0);margin-inline:calc(var(--spacing)*-4);padding:calc(var(--spacing)*4);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);width:100%;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);position:fixed;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}@media (min-width:48rem){.custom-fields-component .fi-sc-actions.fi-sticky .fi-ac{border-radius:var(--radius-xl);bottom:calc(var(--spacing)*4)}}.custom-fields-component .fi-sc-actions.fi-sticky .fi-ac:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-actions.fi-sticky .fi-ac:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-sc-actions.fi-vertical-align-start{justify-content:flex-start}.custom-fields-component .fi-sc-actions.fi-vertical-align-center{justify-content:center}.custom-fields-component .fi-sc-actions.fi-vertical-align-end{justify-content:flex-end}.custom-fields-component .fi-sc-flex{display:flex;gap:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-flex.fi-dense{gap:calc(var(--spacing)*3)}.custom-fields-component .fi-sc-flex>.fi-hidden{display:none}.custom-fields-component .fi-sc-flex>.fi-growable{flex:1;width:100%}.custom-fields-component .fi-sc-flex.fi-from-default{align-items:flex-start}.custom-fields-component .fi-sc-flex.fi-from-default.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-sc-flex.fi-from-default.fi-vertical-align-end{align-items:flex-end}.custom-fields-component .fi-sc-flex.fi-from-sm{flex-direction:column}@media (min-width:40rem){.custom-fields-component .fi-sc-flex.fi-from-sm{align-items:flex-start;flex-direction:row}.custom-fields-component .fi-sc-flex.fi-from-sm.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-sc-flex.fi-from-sm.fi-vertical-align-end{align-items:flex-end}}.custom-fields-component .fi-sc-flex.fi-from-md{flex-direction:column}@media (min-width:48rem){.custom-fields-component .fi-sc-flex.fi-from-md{align-items:flex-start;flex-direction:row}.custom-fields-component .fi-sc-flex.fi-from-md.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-sc-flex.fi-from-md.fi-vertical-align-end{align-items:flex-end}}.custom-fields-component .fi-sc-flex.fi-from-lg{flex-direction:column}@media (min-width:64rem){.custom-fields-component .fi-sc-flex.fi-from-lg{align-items:flex-start;flex-direction:row}.custom-fields-component .fi-sc-flex.fi-from-lg.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-sc-flex.fi-from-lg.fi-vertical-align-end{align-items:flex-end}}.custom-fields-component .fi-sc-flex.fi-from-xl{flex-direction:column}@media (min-width:80rem){.custom-fields-component .fi-sc-flex.fi-from-xl{align-items:flex-start;flex-direction:row}.custom-fields-component .fi-sc-flex.fi-from-xl.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-sc-flex.fi-from-xl.fi-vertical-align-end{align-items:flex-end}}.custom-fields-component .fi-sc-flex.fi-from-2xl{flex-direction:column}@media (min-width:96rem){.custom-fields-component .fi-sc-flex.fi-from-2xl{align-items:flex-start;flex-direction:row}.custom-fields-component .fi-sc-flex.fi-from-2xl.fi-vertical-align-center{align-items:center}.custom-fields-component .fi-sc-flex.fi-from-2xl.fi-vertical-align-end{align-items:flex-end}}.custom-fields-component .fi-sc-form{display:flex;flex-direction:column;gap:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-form.fi-dense{gap:calc(var(--spacing)*3)}.custom-fields-component .fi-sc-fused-group>.fi-sc{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}.custom-fields-component .fi-sc-fused-group>.fi-sc:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}.custom-fields-component .fi-sc-fused-group>.fi-sc:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-fused-group>.fi-sc:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-sc-fused-group>.fi-sc:where(.dark,.dark *):focus-within{--tw-ring-color:var(--primary-500)}.custom-fields-component :where(.fi-sc-fused-group .fi-sc>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-950);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-sc-fused-group .fi-sc>:not(:last-child)){border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.custom-fields-component .fi-sc-fused-group .fi-sc{border-radius:var(--radius-lg)}.custom-fields-component :where(.fi-sc-fused-group .fi-sc:where(.dark,.dark *)>:not(:last-child)){border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-sc-fused-group .fi-sc:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-sc-fused-group .fi-sc .fi-sc-component,.custom-fields-component .fi-sc-fused-group .fi-sc .fi-sc-component .fi-fo-field,.custom-fields-component .fi-sc-fused-group .fi-sc .fi-sc-component .fi-input{min-height:100%}.custom-fields-component .fi-sc-fused-group .fi-sc .fi-sc-component .fi-sc-actions{padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-sc-fused-group .fi-sc>:first-child .fi-input-wrp{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.custom-fields-component .fi-sc-fused-group .fi-sc>:last-child .fi-input-wrp{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.custom-fields-component :where(.fi-sc-fused-group .fi-sc.fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}@media (min-width:40rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.sm\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.sm\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.sm\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:48rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.md\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.md\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.md\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:64rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.lg\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.lg\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.lg\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:80rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:96rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\32 xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\32 xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\32 xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@supports (container-type:inline-size){@container (min-width:16rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@3xs\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@3xs\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@3xs\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:18rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@2xs\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@2xs\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@2xs\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:20rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@xs\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@xs\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@xs\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:24rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@sm\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@sm\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@sm\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:28rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@md\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@md\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@md\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:32rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@lg\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@lg\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@lg\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:36rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:42rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@2xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@2xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@2xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:48rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@3xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@3xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@3xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:56rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@4xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@4xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@4xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:64rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@5xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@5xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@5xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:72rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@6xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@6xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@6xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@container (min-width:80rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\@7xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@7xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\@7xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\!\\@sm\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@sm\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@sm\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:48rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\!\\@md\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@md\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@md\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:64rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\!\\@lg\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@lg\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@lg\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:80rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\!\\@xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}@media (min-width:96rem){.custom-fields-component :where(.fi-sc-fused-group .fi-sc.\\!\\@2xl\\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style);--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@2xl\\:fi-grid-cols>:first-child .fi-input-wrp{border-end-start-radius:var(--radius-lg);border-start-end-radius:0}.custom-fields-component .fi-sc-fused-group .fi-sc.\\!\\@2xl\\:fi-grid-cols>:last-child .fi-input-wrp{border-end-start-radius:0;border-start-end-radius:var(--radius-lg)}}}.custom-fields-component .fi-sc-fused-group .fi-input-wrp{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);border-radius:0;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-sc-fused-group .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:focus-within,.custom-fields-component .fi-sc-fused-group .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-sc-icon{color:var(--gray-400)}.custom-fields-component .fi-sc-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-sc-icon.fi-color{color:var(--color-500)}.custom-fields-component .fi-sc-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-sc-image{border-color:var(--gray-300);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px}.custom-fields-component .fi-sc-image:where(.dark,.dark *){border-color:#0000}.custom-fields-component .fi-sc-image.fi-align-center{margin-inline:auto}.custom-fields-component .fi-sc-image.fi-align-end,.custom-fields-component .fi-sc-image.fi-align-right{margin-inline-start:auto}.custom-fields-component .fi-sc-section{display:flex;flex-direction:column;gap:calc(var(--spacing)*2)}.custom-fields-component .fi-sc-section .fi-sc-section-label-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-sc-section .fi-sc-section-label-ctn .fi-sc-section-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-sc-section .fi-sc-section-label-ctn .fi-sc-section-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-sc-tabs{display:flex;flex-direction:column}.custom-fields-component .fi-sc-tabs .fi-tabs.fi-invisible{visibility:hidden}.custom-fields-component .fi-sc-tabs .fi-sc-tabs-tab{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-sc-tabs .fi-sc-tabs-tab{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-sc-tabs .fi-sc-tabs-tab.fi-active{margin-top:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-tabs .fi-sc-tabs-tab:not(.fi-active){height:calc(var(--spacing)*0);overflow:hidden;padding:calc(var(--spacing)*0);position:absolute;visibility:hidden}.custom-fields-component .fi-sc-tabs.fi-contained{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-sc-tabs.fi-contained:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-tabs.fi-contained:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-sc-tabs.fi-contained .fi-sc-tabs-tab.fi-active{margin-top:calc(var(--spacing)*0);padding:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-tabs.fi-vertical{flex-direction:row}.custom-fields-component .fi-sc-tabs.fi-vertical .fi-sc-tabs-tab.fi-active{flex:1;margin-inline-start:calc(var(--spacing)*6);margin-top:calc(var(--spacing)*0)}.custom-fields-component .fi-sc-text.fi-copyable{cursor:pointer}.custom-fields-component .fi-sc-text.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.custom-fields-component .fi-sc-text.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif}.custom-fields-component .fi-sc-text.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.custom-fields-component .fi-sc-text:not(.fi-badge){color:var(--gray-600);display:inline-block;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word}.custom-fields-component .fi-sc-text:not(.fi-badge):where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-color-neutral{color:var(--gray-950)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-color-neutral:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-color:not(.fi-color-neutral){color:var(--text)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-color:not(.fi-color-neutral):where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-sc-text:not(.fi-badge).fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-sc-unordered-list{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));list-style-type:disc;margin-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-sc-unordered-list.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-sc-unordered-list.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-sc-unordered-list.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .fi-sc-wizard{display:flex;flex-direction:column}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header{display:grid}@media (min-width:48rem){.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header{grid-auto-flow:column;overflow-x:auto}}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step{display:flex;position:relative}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active){display:none}@media (min-width:48rem){.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active){display:flex}}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn{align-items:center;column-gap:calc(var(--spacing)*4);display:flex;height:100%;padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*6);text-align:start}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{align-items:center;border-radius:3.40282e+38px;display:flex;flex-shrink:0;height:calc(var(--spacing)*10);justify-content:center;width:calc(var(--spacing)*10)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text{display:grid;justify-items:start}@media (min-width:48rem){.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text{max-width:calc(var(--spacing)*60);width:max-content}}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-align:start}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator{color:var(--gray-200);display:none;height:100%;inset-inline-end:calc(var(--spacing)*0);position:absolute;width:calc(var(--spacing)*5)}@media (min-width:48rem){.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator{display:block}}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(.dark,.dark *){color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{background-color:var(--primary-600)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){background-color:var(--primary-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--color-white)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--gray-950)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-style:var(--tw-border-style);border-width:2px}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed).fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--primary-600)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed).fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon:where(.dark,.dark *){color:var(--primary-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed):not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed):not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-color:var(--primary-600)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){border-color:var(--primary-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{color:var(--primary-600)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number:where(.dark,.dark *){color:var(--primary-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--primary-700)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-color:var(--gray-300)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){border-color:var(--gray-600)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{color:var(--gray-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--gray-500)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-step{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-sc-wizard .fi-sc-wizard-step{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-step:not(.fi-active){height:calc(var(--spacing)*0);overflow:hidden;padding:calc(var(--spacing)*0);position:absolute;visibility:hidden}.custom-fields-component .fi-sc-wizard:not(.fi-sc-wizard-header-hidden) .fi-sc-wizard-step.fi-active{margin-top:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-footer{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;justify-content:space-between}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-footer>.fi-hidden{display:none}.custom-fields-component .fi-sc-wizard .fi-sc-wizard-footer>.fi-disabled{opacity:.7;pointer-events:none}.custom-fields-component .fi-sc-wizard.fi-contained{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-sc-wizard.fi-contained:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-wizard.fi-contained:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-sc-wizard.fi-contained .fi-sc-wizard-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200)}.custom-fields-component .fi-sc-wizard.fi-contained .fi-sc-wizard-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-wizard.fi-contained .fi-sc-wizard-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-sc-wizard.fi-contained .fi-sc-wizard-step.fi-active{margin-top:calc(var(--spacing)*0);padding:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-wizard.fi-contained .fi-sc-wizard-footer{padding-inline:calc(var(--spacing)*6);padding-bottom:calc(var(--spacing)*6)}.custom-fields-component .fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-footer{margin-top:calc(var(--spacing)*6)}.custom-fields-component .fi-sc{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-sc.fi-inline{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap}.custom-fields-component .fi-sc.fi-sc-has-gap{gap:calc(var(--spacing)*6)}.custom-fields-component .fi-sc.fi-sc-has-gap.fi-sc-dense{gap:calc(var(--spacing)*3)}.custom-fields-component .fi-sc.fi-align-left,.custom-fields-component .fi-sc.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-sc.fi-align-center{justify-content:center}.custom-fields-component .fi-sc.fi-align-end,.custom-fields-component .fi-sc.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-sc.fi-align-between,.custom-fields-component .fi-sc.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-sc>.fi-hidden{display:none}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-xs{max-width:var(--container-xs)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-sm{max-width:var(--container-sm)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-md{max-width:var(--container-md)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-lg{max-width:var(--container-lg)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-xl{max-width:var(--container-xl)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-2xl{max-width:var(--container-2xl)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-3xl{max-width:var(--container-3xl)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-4xl{max-width:var(--container-4xl)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-5xl{max-width:var(--container-5xl)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-6xl{max-width:var(--container-6xl)}.custom-fields-component .fi-sc>.fi-grid-col.fi-width-7xl{max-width:var(--container-7xl)}.custom-fields-component .fi-sc>.fi-grid-col>.fi-sc-component{height:100%}.custom-fields-component .fi-ta-actions{align-items:center;display:flex;flex-shrink:0;gap:calc(var(--spacing)*3);justify-content:flex-end;max-width:100%}.custom-fields-component .fi-ta-actions>*{flex-shrink:0}.custom-fields-component .fi-ta-actions.fi-wrapped{flex-wrap:wrap}@media (min-width:40rem){.custom-fields-component .fi-ta-actions.sm\\:fi-not-wrapped{flex-wrap:nowrap}}.custom-fields-component .fi-ta-actions.fi-align-center{justify-content:center}.custom-fields-component .fi-ta-actions.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-ta-actions.fi-align-between{justify-content:space-between}@media (min-width:48rem){.custom-fields-component .fi-ta-actions.md\\:fi-align-end{justify-content:flex-end}}.custom-fields-component .fi-ta-cell{padding:calc(var(--spacing)*0)}.custom-fields-component .fi-ta-cell:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-cell:last-of-type{padding-inline-end:calc(var(--spacing)*1)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-cell:last-of-type{padding-inline-end:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-cell.fi-vertical-align-start{vertical-align:top}.custom-fields-component .fi-ta-cell.fi-vertical-align-end{vertical-align:bottom}@media (min-width:40rem){.custom-fields-component .fi-ta-cell.sm\\:fi-hidden{display:none}}@media (min-width:48rem){.custom-fields-component .fi-ta-cell.md\\:fi-hidden{display:none}}@media (min-width:64rem){.custom-fields-component .fi-ta-cell.lg\\:fi-hidden{display:none}}@media (min-width:80rem){.custom-fields-component .fi-ta-cell.xl\\:fi-hidden{display:none}}@media (min-width:96rem){.custom-fields-component .fi-ta-cell.\\32 xl\\:fi-hidden{display:none}}.custom-fields-component .fi-ta-cell.sm\\:fi-visible{display:none}@media (min-width:40rem){.custom-fields-component .fi-ta-cell.sm\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-cell.md\\:fi-visible{display:none}@media (min-width:48rem){.custom-fields-component .fi-ta-cell.md\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-cell.lg\\:fi-visible{display:none}@media (min-width:64rem){.custom-fields-component .fi-ta-cell.lg\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-cell.xl\\:fi-visible{display:none}@media (min-width:80rem){.custom-fields-component .fi-ta-cell.xl\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-cell.\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.custom-fields-component .fi-ta-cell.\\32 xl\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-cell>.fi-ta-col{display:flex;justify-content:flex-start;text-align:start;width:100%}.custom-fields-component .fi-ta-cell>.fi-ta-col:disabled{pointer-events:none}.custom-fields-component .fi-ta-cell:has(.fi-ta-reorder-handle){padding-inline:calc(var(--spacing)*3);width:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-cell:has(.fi-ta-reorder-handle):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-cell:has(.fi-ta-reorder-handle):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell:has(.fi-ta-reorder-handle):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell:has(.fi-ta-reorder-handle):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-cell:has(.fi-ta-actions){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);white-space:nowrap}.custom-fields-component .fi-ta-cell:has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-cell:has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell:has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell:has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-cell:has(.fi-ta-record-checkbox){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);width:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-cell:has(.fi-ta-record-checkbox):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-cell:has(.fi-ta-record-checkbox):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell:has(.fi-ta-record-checkbox):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell:has(.fi-ta-record-checkbox):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-cell .fi-ta-placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);color:var(--gray-400);line-height:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell .fi-ta-placeholder:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-ta-cell.fi-ta-summary-row-heading-cell{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell.fi-ta-summary-row-heading-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell.fi-ta-summary-row-heading-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-cell.fi-ta-summary-row-heading-cell:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-cell.fi-align-start{text-align:start}.custom-fields-component .fi-ta-cell.fi-align-center{text-align:center}.custom-fields-component .fi-ta-cell.fi-align-end{text-align:end}.custom-fields-component .fi-ta-cell.fi-align-left{text-align:left}.custom-fields-component .fi-ta-cell.fi-align-right{text-align:right}.custom-fields-component .fi-ta-cell.fi-align-between,.custom-fields-component .fi-ta-cell.fi-align-justify{text-align:justify}.custom-fields-component .fi-ta-cell.fi-ta-summary-header-cell{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell.fi-ta-summary-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-cell.fi-ta-summary-header-cell:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-cell.fi-ta-summary-header-cell.fi-wrapped,.custom-fields-component .fi-ta-cell.fi-ta-summary-header-cell:not(.fi-wrapped){white-space:nowrap}.custom-fields-component .fi-ta-cell.fi-ta-individual-search-cell{min-width:calc(var(--spacing)*48);padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-cell .fi-ta-reorder-handle{cursor:move}.custom-fields-component .fi-ta-cell.fi-ta-selection-cell{padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);width:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-cell.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-cell.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-cell.fi-ta-group-selection-cell{padding-inline:calc(var(--spacing)*3);width:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-cell.fi-ta-group-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-cell.fi-ta-group-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-cell.fi-ta-group-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-cell.fi-ta-group-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-checkbox{width:100%}.custom-fields-component .fi-ta-checkbox:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-checkbox.fi-align-center{text-align:center}.custom-fields-component .fi-ta-checkbox.fi-align-end,.custom-fields-component .fi-ta-checkbox.fi-align-right{text-align:end}.custom-fields-component .fi-ta-color{display:flex;gap:calc(var(--spacing)*1.5);width:100%}.custom-fields-component .fi-ta-color.fi-wrapped{flex-wrap:wrap}.custom-fields-component .fi-ta-color:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-color.fi-align-left,.custom-fields-component .fi-ta-color.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-ta-color.fi-align-center{justify-content:center}.custom-fields-component .fi-ta-color.fi-align-end,.custom-fields-component .fi-ta-color.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-ta-color.fi-align-between,.custom-fields-component .fi-ta-color.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-ta-color>.fi-ta-color-item{border-radius:var(--radius-md);height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-color>.fi-ta-color-item.fi-copyable{cursor:pointer}.custom-fields-component .fi-ta-icon{display:flex;gap:calc(var(--spacing)*1.5);width:100%}.custom-fields-component .fi-ta-icon.fi-wrapped{flex-wrap:wrap}.custom-fields-component .fi-ta-icon.fi-ta-icon-has-line-breaks{flex-direction:column}.custom-fields-component .fi-ta-icon:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-icon.fi-align-left,.custom-fields-component .fi-ta-icon.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-ta-icon.fi-align-center{justify-content:center}.custom-fields-component .fi-ta-icon.fi-align-end,.custom-fields-component .fi-ta-icon.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-ta-icon.fi-align-between,.custom-fields-component .fi-ta-icon.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-ta-icon>.fi-icon,.custom-fields-component .fi-ta-icon>a>.fi-icon{color:var(--gray-400)}.custom-fields-component :is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component :is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon).fi-color{color:var(--text)}.custom-fields-component :is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon).fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-ta-image{align-items:center;display:flex;gap:calc(var(--spacing)*1.5);width:100%}.custom-fields-component .fi-ta-image img{max-width:none;object-fit:cover;object-position:center}.custom-fields-component .fi-ta-image.fi-circular img{border-radius:3.40282e+38px}.custom-fields-component .fi-ta-image.fi-ta-image-ring .fi-ta-image-limited-remaining-text,.custom-fields-component .fi-ta-image.fi-ta-image-ring img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-white)}.custom-fields-component :is(.fi-ta-image.fi-ta-image-ring img,.fi-ta-image.fi-ta-image-ring .fi-ta-image-limited-remaining-text):where(.dark,.dark *){--tw-ring-color:var(--gray-900)}.custom-fields-component .fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-1 .fi-ta-image-limited-remaining-text,.custom-fields-component .fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-1 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-2 .fi-ta-image-limited-remaining-text,.custom-fields-component .fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-2 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-4 .fi-ta-image-limited-remaining-text,.custom-fields-component .fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-4 img{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-1{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-1*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-2{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-2*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-3{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-3*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-4{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-4*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-5{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-5*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-5*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-6{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-6*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-6*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-7{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-7*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-7*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-ta-image-overlap-8{column-gap:calc(var(--spacing)*0)}.custom-fields-component :where(.fi-ta-image.fi-ta-image-overlap-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*-8*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*-8*var(--tw-space-x-reverse))}.custom-fields-component .fi-ta-image.fi-wrapped{flex-wrap:wrap}.custom-fields-component .fi-ta-image:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-image.fi-align-left,.custom-fields-component .fi-ta-image.fi-align-start{justify-content:flex-start}.custom-fields-component .fi-ta-image.fi-align-center{justify-content:center}.custom-fields-component .fi-ta-image.fi-align-end,.custom-fields-component .fi-ta-image.fi-align-right{justify-content:flex-end}.custom-fields-component .fi-ta-image.fi-align-between,.custom-fields-component .fi-ta-image.fi-align-justify{justify-content:space-between}.custom-fields-component .fi-ta-image.fi-stacked .fi-ta-image-limited-remaining-text{background-color:var(--gray-100);border-radius:3.40282e+38px}.custom-fields-component .fi-ta-image.fi-stacked .fi-ta-image-limited-remaining-text:where(.dark,.dark *){background-color:var(--gray-800)}.custom-fields-component .fi-ta-image .fi-ta-image-limited-remaining-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);align-items:center;color:var(--gray-500);display:flex;font-weight:var(--font-weight-medium);justify-content:center}.custom-fields-component .fi-ta-image .fi-ta-image-limited-remaining-text:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-base,.custom-fields-component .fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .fi-ta-select{min-width:calc(var(--spacing)*48);width:100%}.custom-fields-component .fi-ta-select:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-text{width:100%}.custom-fields-component .fi-ta-text.fi-ta-text-has-descriptions,.custom-fields-component .fi-ta-text.fi-ta-text-list-limited{display:flex;flex-direction:column}.custom-fields-component :is(.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited).fi-ta-text-has-badges{row-gap:calc(var(--spacing)*2)}.custom-fields-component :is(.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited):not(.fi-ta-text-has-badges){row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-text:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-text.fi-bulleted ul,.custom-fields-component ul.fi-ta-text.fi-bulleted{list-style-position:inside;list-style-type:disc}.custom-fields-component .fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul,.custom-fields-component ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges{column-gap:calc(var(--spacing)*1.5);display:flex}.custom-fields-component :is(ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul).fi-wrapped,.custom-fields-component :is(ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul):is(.fi-wrapped ul){flex-wrap:wrap;row-gap:calc(var(--spacing)*1)}.custom-fields-component :is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul).fi-ta-text-has-line-breaks,.custom-fields-component :is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):is(.fi-ta-text-has-line-breaks ul){display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}.custom-fields-component :is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul),.custom-fields-component :is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks){column-gap:calc(var(--spacing)*1.5);display:flex}.custom-fields-component :is(:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul)).fi-wrapped,.custom-fields-component :is(:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul)):is(.fi-wrapped ul){flex-wrap:wrap;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks){white-space:normal}.custom-fields-component .fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks) .fi-badge,.custom-fields-component .fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks) .fi-ta-text-list-limited-message{white-space:nowrap}.custom-fields-component .fi-ta-text>.fi-ta-text-description,.custom-fields-component .fi-ta-text>.fi-ta-text-list-limited-message{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component :is(.fi-ta-text>.fi-ta-text-description,.fi-ta-text>.fi-ta-text-list-limited-message):where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-text.fi-align-center{text-align:center}.custom-fields-component .fi-ta-text.fi-align-center ul,.custom-fields-component ul.fi-ta-text.fi-align-center{justify-content:center}.custom-fields-component .fi-ta-text.fi-align-end,.custom-fields-component .fi-ta-text.fi-align-right{text-align:end}.custom-fields-component :is(.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right) ul,.custom-fields-component ul:is(.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right){justify-content:flex-end}.custom-fields-component .fi-ta-text.fi-align-between,.custom-fields-component .fi-ta-text.fi-align-justify{text-align:justify}.custom-fields-component :is(.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between) ul,.custom-fields-component ul:is(.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between){justify-content:space-between}.custom-fields-component .fi-ta-text-item{color:var(--gray-950)}.custom-fields-component .fi-ta-text-item:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.custom-fields-component .fi-ta-text-item a:hover{text-decoration-line:underline}}.custom-fields-component .fi-ta-text-item a:focus-visible{text-decoration-line:underline}.custom-fields-component .fi-ta-text-item:not(.fi-bulleted li.fi-ta-text-item){-webkit-line-clamp:var(--line-clamp,none);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.custom-fields-component .fi-ta-text-item>.fi-copyable{cursor:pointer}.custom-fields-component .fi-ta-text-item.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-ta-text-item.fi-size-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-text-item.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .fi-ta-text-item.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .fi-ta-text-item.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.custom-fields-component .fi-ta-text-item.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.custom-fields-component .fi-ta-text-item.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.custom-fields-component .fi-ta-text-item.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.custom-fields-component .fi-ta-text-item.fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-text-item.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-ta-text-item.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.custom-fields-component .fi-ta-text-item.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.custom-fields-component .fi-ta-text-item.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.custom-fields-component .fi-ta-text-item.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"}.custom-fields-component .fi-ta-text-item.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif}.custom-fields-component .fi-ta-text-item.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.custom-fields-component .fi-ta-text-item.fi-color{color:var(--text)}.custom-fields-component .fi-ta-text-item.fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component li.fi-ta-text-item.fi-color::marker{color:var(--gray-950)}.custom-fields-component li.fi-ta-text-item.fi-color:where(.dark,.dark *)::marker{color:var(--color-white)}.custom-fields-component .fi-ta-text-item.fi-color-gray{color:var(--gray-500)}.custom-fields-component .fi-ta-text-item.fi-color-gray:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component li.fi-ta-text-item.fi-color-gray::marker{color:var(--gray-950)}.custom-fields-component li.fi-ta-text-item.fi-color-gray:where(.dark,.dark *)::marker{color:var(--color-white)}.custom-fields-component .fi-ta-text-item>.fi-icon,.custom-fields-component .fi-ta-text-item>span:not(.fi-badge)>.fi-icon{color:var(--gray-400);display:inline-block;flex-shrink:0}.custom-fields-component :is(.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component :is(.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon).fi-color{color:var(--color-500)}.custom-fields-component .fi-ta-text-item.fi-ta-text-has-badges>.fi-badge{vertical-align:middle}@media (hover:hover){.custom-fields-component .fi-ta-col-has-column-url .fi-ta-text-item:hover{text-decoration-line:underline}}.custom-fields-component .fi-ta-col-has-column-url .fi-ta-text-item:focus-visible{text-decoration-line:underline}@media (hover:hover){.custom-fields-component .fi-ta-col-has-column-url .fi-ta-text-item .fi-icon:hover{text-decoration-line:none}}.custom-fields-component .fi-ta-col-has-column-url .fi-ta-text-item .fi-icon:focus-visible{text-decoration-line:none}@media (hover:hover){.custom-fields-component .fi-ta-col-has-column-url .fi-ta-text-item>.fi-badge:hover{text-decoration-line:none}}.custom-fields-component .fi-ta-col-has-column-url .fi-ta-text-item>.fi-badge:focus-visible{text-decoration-line:none}.custom-fields-component .fi-ta-text-input{min-width:calc(var(--spacing)*48);width:100%}.custom-fields-component .fi-ta-text-input:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-toggle{width:100%}.custom-fields-component .fi-ta-toggle:not(.fi-inline){padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-toggle.fi-align-center{text-align:center}.custom-fields-component .fi-ta-toggle.fi-align-end,.custom-fields-component .fi-ta-toggle.fi-align-right{text-align:end}.custom-fields-component .fi-ta-grid.fi-gap-sm{gap:calc(var(--spacing)*1)}@media (min-width:40rem){.custom-fields-component .fi-ta-grid.sm\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:48rem){.custom-fields-component .fi-ta-grid.md\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:64rem){.custom-fields-component .fi-ta-grid.lg\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:80rem){.custom-fields-component .fi-ta-grid.xl\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:96rem){.custom-fields-component .fi-ta-grid.\\32 xl\\:fi-gap-sm{gap:calc(var(--spacing)*1)}}.custom-fields-component .fi-ta-grid.fi-gap-lg{gap:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-ta-grid.sm\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:48rem){.custom-fields-component .fi-ta-grid.md\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:64rem){.custom-fields-component .fi-ta-grid.lg\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:80rem){.custom-fields-component .fi-ta-grid.xl\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:96rem){.custom-fields-component .fi-ta-grid.\\32 xl\\:fi-gap-lg{gap:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-panel{background-color:var(--gray-50);border-radius:var(--radius-lg);padding:calc(var(--spacing)*4);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-panel{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.custom-fields-component .fi-ta-panel{--tw-ring-inset:inset}.custom-fields-component .fi-ta-panel:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-panel:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-panel:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-split{display:flex}.custom-fields-component .fi-ta-split.default\\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-split.\\32 xl\\:fi-ta-split,.custom-fields-component .fi-ta-split.lg\\:fi-ta-split,.custom-fields-component .fi-ta-split.md\\:fi-ta-split,.custom-fields-component .fi-ta-split.sm\\:fi-ta-split,.custom-fields-component .fi-ta-split.xl\\:fi-ta-split{flex-direction:column;gap:calc(var(--spacing)*2)}@media (min-width:40rem){.custom-fields-component .fi-ta-split.sm\\:fi-ta-split{align-items:center;flex-direction:row;gap:calc(var(--spacing)*3)}}@media (min-width:48rem){.custom-fields-component .fi-ta-split.md\\:fi-ta-split{align-items:center;flex-direction:row;gap:calc(var(--spacing)*3)}}@media (min-width:64rem){.custom-fields-component .fi-ta-split.lg\\:fi-ta-split{align-items:center;flex-direction:row;gap:calc(var(--spacing)*3)}}@media (min-width:80rem){.custom-fields-component .fi-ta-split.xl\\:fi-ta-split{align-items:center;flex-direction:row;gap:calc(var(--spacing)*3)}}@media (min-width:96rem){.custom-fields-component .fi-ta-split.\\32 xl\\:fi-ta-split{align-items:center;flex-direction:row;gap:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-stack{display:flex;flex-direction:column}.custom-fields-component .fi-ta-stack.fi-align-left,.custom-fields-component .fi-ta-stack.fi-align-start{align-items:flex-start}.custom-fields-component .fi-ta-stack.fi-align-center{align-items:center}.custom-fields-component .fi-ta-stack.fi-align-end,.custom-fields-component .fi-ta-stack.fi-align-right{align-items:flex-end}.custom-fields-component :where(.fi-ta-stack.fi-gap-sm>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}.custom-fields-component :where(.fi-ta-stack.fi-gap-md>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}.custom-fields-component :where(.fi-ta-stack.fi-gap-lg>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}.custom-fields-component .fi-ta-icon-count-summary{color:var(--gray-500);display:grid;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1.5)}.custom-fields-component .fi-ta-icon-count-summary:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-icon-count-summary>.fi-ta-icon-count-summary-label{--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-icon-count-summary>.fi-ta-icon-count-summary-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-icon-count-summary>ul{display:grid;row-gap:calc(var(--spacing)*1.5)}.custom-fields-component .fi-ta-icon-count-summary>ul>li{align-items:center;column-gap:calc(var(--spacing)*1.5);display:flex;justify-content:flex-end}.custom-fields-component .fi-ta-icon-count-summary>ul>li>.fi-icon{color:var(--gray-400)}.custom-fields-component .fi-ta-icon-count-summary>ul>li>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-ta-icon-count-summary>ul>li>.fi-icon.fi-color{color:var(--text)}.custom-fields-component .fi-ta-icon-count-summary>ul>li>.fi-icon.fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-ta-range-summary{color:var(--gray-500);display:grid;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-range-summary:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-range-summary>.fi-ta-range-summary-label{--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-range-summary>.fi-ta-range-summary-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-text-summary{color:var(--gray-500);display:grid;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-text-summary:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-text-summary>.fi-ta-text-summary-label{--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-text-summary>.fi-ta-text-summary-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-values-summary{color:var(--gray-500);display:grid;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-values-summary:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-values-summary>.fi-ta-values-summary-label{--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-values-summary>.fi-ta-values-summary-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-values-summary>ul.fi-bulleted{list-style-position:inside;list-style-type:disc}.custom-fields-component .fi-ta-ctn{background-color:var(--color-white);border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex;position:relative}.custom-fields-component .fi-ta-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn:not(.fi-ta-ctn-with-header){overflow:hidden}.custom-fields-component .fi-ta-ctn.fi-loading{animation:var(--animate-pulse)}.custom-fields-component .fi-ta-ctn .fi-ta-header-ctn{margin-top:-1px}.custom-fields-component .fi-ta-ctn .fi-ta-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);display:flex;flex-direction:column;gap:calc(var(--spacing)*3);padding:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-header{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position{align-items:center;flex-direction:row}.custom-fields-component .fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position .fi-ta-actions{margin-inline-start:auto}}.custom-fields-component .fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position:not(:has(.fi-ta-header-heading)):not(:has(.fi-ta-header-description)) .fi-ta-actions{margin-inline-start:auto}.custom-fields-component .fi-ta-ctn .fi-ta-header .fi-ta-header-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-ta-ctn .fi-ta-header .fi-ta-header-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-ctn .fi-ta-header .fi-ta-header-description{color:var(--gray-600);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-ctn .fi-ta-header .fi-ta-header-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar{align-items:center;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*4);justify-content:space-between;padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar>*{align-items:center;column-gap:calc(var(--spacing)*4);display:flex}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar>:first-child{flex-shrink:0}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar>:nth-child(2){margin-inline-start:auto}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown.sm\\:fi-hidden{display:none}}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields{display:grid;padding:calc(var(--spacing)*6);row-gap:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));row-gap:calc(var(--spacing)*2);--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);display:grid;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings>.fi-ta-grouping-settings-fields{align-items:center;column-gap:calc(var(--spacing)*3);display:none}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings>.fi-ta-grouping-settings-fields{display:flex}}.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-col-manager-dropdown .fi-ta-col-manager,.custom-fields-component .fi-ta-ctn .fi-ta-header-toolbar .fi-ta-filters-dropdown .fi-ta-filters{padding:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-ctn .fi-ta-filters{display:grid;row-gap:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;padding:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-filters .fi-ta-filters-header{align-items:center;display:flex;justify-content:space-between}.custom-fields-component .fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-ta-filters-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-ta-filters-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-loading-indicator{color:var(--gray-400)}.custom-fields-component .fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-ta-ctn .fi-ta-filters .fi-ta-filters-actions-ctn{display:flex;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);display:grid;padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn .fi-ta-filters-trigger-action-ctn{margin-inline-start:auto}.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn.fi-open .fi-ta-filters-trigger-action-ctn{margin-top:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-ctn .fi-ta-filters-above-content-ctn.fi-open:has(.fi-ta-filters-actions-ctn) .fi-ta-filters-trigger-action-ctn{margin-top:calc(var(--spacing)*-7)}.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator{align-items:center;background-color:var(--gray-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);column-gap:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);display:flex;font-weight:var(--font-weight-medium)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator .fi-loading-indicator{color:var(--gray-400)}.custom-fields-component .fi-ta-ctn .fi-ta-reorder-indicator .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator{background-color:var(--gray-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);display:flex;flex-direction:column;justify-content:space-between;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator{align-items:center;flex-direction:row;padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator .fi-loading-indicator{color:var(--gray-400)}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator .fi-ta-selection-indicator-actions-ctn,.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator>*{column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator>:first-child{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator>:first-child:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-ta-ctn .fi-ta-selection-indicator>:nth-child(2){margin-inline-start:auto}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators{align-items:flex-start;background-color:var(--gray-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);column-gap:calc(var(--spacing)*3);display:flex;justify-content:space-between;padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators>:first-child{column-gap:calc(var(--spacing)*3);display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators>:first-child{flex-direction:row}}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);font-weight:var(--font-weight-medium);white-space:nowrap}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-label:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-badges-ctn{display:flex;flex-wrap:wrap;gap:calc(var(--spacing)*1.5)}.custom-fields-component .fi-ta-ctn .fi-ta-filter-indicators>:nth-child(2).fi-icon-btn{margin-top:calc(var(--spacing)*-1)}.custom-fields-component .fi-ta-ctn .fi-pagination{border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px;padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-ta-ctn .fi-pagination{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-ctn .fi-pagination:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-ctn .fi-pagination:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-ctn .fi-ta-table-loading-ctn{align-items:center;display:flex;height:calc(var(--spacing)*32);justify-content:center}.custom-fields-component .fi-ta-ctn .fi-ta-main{flex:1;min-width:calc(var(--spacing)*0)}@media (min-width:64rem){.custom-fields-component .fi-ta-ctn .fi-ta-filters-trigger-action-ctn.lg\\:fi-hidden{display:none}}.custom-fields-component .fi-ta-ctn .fi-ta-filters-after-content-ctn,.custom-fields-component .fi-ta-ctn .fi-ta-filters-before-content-ctn{background-color:var(--color-white);border-color:var(--gray-200);border-radius:var(--radius-lg);z-index:20;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);width:100vw;--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:none;flex-shrink:0;max-width:14rem!important;position:absolute;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}@media (min-width:64rem){.custom-fields-component .fi-ta-ctn .fi-ta-filters-after-content-ctn,.custom-fields-component .fi-ta-ctn .fi-ta-filters-before-content-ctn{z-index:auto;--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:static}}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn) .fi-ta-filters{padding:calc(var(--spacing)*6)}@media (min-width:64rem){.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn) .fi-ta-filters{padding-block:calc(var(--spacing)*4)}}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-open{display:block}@media (min-width:64rem){.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).lg\\:fi-open{display:block}}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-opacity-0{opacity:0}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-xs{max-width:var(--container-xs)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-sm{max-width:var(--container-sm)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-md{max-width:var(--container-md)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-lg{max-width:var(--container-lg)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-xl{max-width:var(--container-xl)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-2xl{max-width:var(--container-2xl)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-3xl{max-width:var(--container-3xl)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-4xl{max-width:var(--container-4xl)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-5xl{max-width:var(--container-5xl)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-6xl{max-width:var(--container-6xl)!important}.custom-fields-component :is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-7xl{max-width:var(--container-7xl)!important}.custom-fields-component .fi-ta-ctn .fi-ta-filters-before-content-ctn{inset-inline-start:calc(var(--spacing)*0)}@media (min-width:64rem){.custom-fields-component .fi-ta-ctn .fi-ta-filters-before-content-ctn{border-end-end-radius:0;border-end-start-radius:var(--radius-xl);border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-start-end-radius:0;border-start-start-radius:var(--radius-xl)}}.custom-fields-component .fi-ta-ctn .fi-ta-filters-after-content-ctn{inset-inline-end:calc(var(--spacing)*0)}@media (min-width:64rem){.custom-fields-component .fi-ta-ctn .fi-ta-filters-after-content-ctn{border-end-end-radius:var(--radius-xl);border-end-start-radius:0;border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-start-end-radius:var(--radius-xl);border-start-start-radius:0}}.custom-fields-component .fi-ta-content-ctn{position:relative}.custom-fields-component :where(.fi-ta-content-ctn>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-ta-content-ctn{overflow-x:auto}.custom-fields-component :where(.fi-ta-content-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-ta-content-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-content-ctn:where(.dark,.dark *){border-top-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn:where(.dark,.dark *){border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content-header{align-items:center;background-color:var(--gray-50);gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*6);display:flex;padding-inline:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content-header{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content-header:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content-header .fi-ta-page-checkbox{flex-shrink:0;margin-block:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content-header .fi-ta-sorting-settings{column-gap:calc(var(--spacing)*3);display:flex;padding-block:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-content-ctn:not(.fi-ta-ctn-with-footer .fi-ta-content-ctn){border-bottom-left-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.custom-fields-component .fi-ta-content-ctn:not(.fi-ta-ctn-with-header .fi-ta-content-ctn){border-top-style:var(--tw-border-style);border-top-width:0}.custom-fields-component .fi-ta-content-ctn .fi-ta-content{display:grid}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid{gap:calc(var(--spacing)*4);padding:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid{padding-inline:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid.fi-ta-content-grouped{padding-top:calc(var(--spacing)*0)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{border-block-style:var(--tw-border-style);border-block-width:1px;border-color:var(--gray-200);margin-inline:calc(var(--spacing)*-4)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:first-child{border-top-style:var(--tw-border-style);border-top-width:0}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{margin-inline:calc(var(--spacing)*-6)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{width:calc(100% + 2rem)}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{width:calc(100% + 3rem)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record{border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (hover:hover){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected){background-color:var(--color-white)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-record-content{padding-inline-start:calc(var(--spacing)*2)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-record-content{padding-inline-end:calc(var(--spacing)*2)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid){background-color:var(--gray-200);row-gap:1px}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:before{background-color:var(--primary-600);content:var(--tw-content);inset-block:calc(var(--spacing)*0);inset-inline-start:calc(var(--spacing)*0);position:absolute;width:calc(var(--spacing)*.5)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *):before{background-color:var(--primary-500);content:var(--tw-content)}@media (min-width:48rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record .fi-ta-record-content-ctn{align-items:center;flex-direction:row}}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-record-content{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-record-content{padding-inline-end:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix{padding-inline-start:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-record-content{padding-inline-start:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix{padding-inline-end:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-record-content{padding-inline-end:calc(var(--spacing)*3)}@media (min-width:48rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record .fi-ta-actions{padding-inline-start:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header{align-items:center;background-color:var(--gray-50);column-gap:calc(var(--spacing)*3);display:flex;grid-column:1/-1;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*1);width:100%}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header{padding-inline:calc(var(--spacing)*3)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header.fi-collapsible{cursor:pointer}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header.fi-collapsible.fi-collapsed .fi-icon-btn{rotate:-180deg}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-checkbox{margin-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-table{grid-column:1/-1}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record{background-color:var(--color-white);height:100%;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;align-items:center;display:flex;position:relative;transition-duration:75ms}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-with-content-prefix{padding-inline-start:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-with-content-suffix{padding-inline-end:calc(var(--spacing)*1)}@media (hover:hover){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-clickable:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-collapsed{display:none}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-selected{background-color:var(--gray-50)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-reorder-handle{margin-block:calc(var(--spacing)*2);margin-inline:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-checkbox{flex-shrink:0;margin-block:calc(var(--spacing)*4);margin-inline:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn{display:flex;flex-direction:column;height:100%;padding-block:calc(var(--spacing)*4);row-gap:calc(var(--spacing)*3);width:100%}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn>:first-child{flex:1}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content{display:block;width:100%}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col{display:flex;justify-content:flex-start;text-align:start}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col:disabled{pointer-events:none}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-growable{width:100%}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-center{justify-content:center;text-align:center}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-end{justify-content:flex-end;text-align:end}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-left{justify-content:flex-start;text-align:left}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-right{justify-content:flex-end;text-align:right}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-between,.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-justify{justify-content:space-between;text-align:justify}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content.fi-collapsible{margin-top:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-growable{flex:1;width:100%}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\\:fi-hidden{display:none}}@media (min-width:48rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\\:fi-hidden{display:none}}@media (min-width:64rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\\:fi-hidden{display:none}}@media (min-width:80rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\\:fi-hidden{display:none}}@media (min-width:96rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\\32 xl\\:fi-hidden{display:none}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\\:fi-visible{display:none}@media (min-width:40rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\\:fi-visible{display:block}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\\:fi-visible{display:none}@media (min-width:48rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\\:fi-visible{display:block}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\\:fi-visible{display:none}@media (min-width:64rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\\:fi-visible{display:block}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\\:fi-visible{display:none}@media (min-width:80rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\\:fi-visible{display:block}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\\32 xl\\:fi-visible{display:block}}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-collapse-btn{flex-shrink:0;margin-block:calc(var(--spacing)*2);margin-inline:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-actions.fi-ta-actions-before-columns-position{order:-9999}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-record-content{padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-actions,.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-record-content{padding-inline-end:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-collapsed .fi-ta-record-collapse-btn{rotate:180deg}.custom-fields-component .fi-ta-empty-state{padding-block:calc(var(--spacing)*12);padding-inline:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state){border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:1px}.custom-fields-component .fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-content{display:grid;justify-items:center;margin-inline:auto;max-width:var(--container-lg);text-align:center}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-icon-bg{background-color:var(--gray-100);border-radius:3.40282e+38px;margin-bottom:calc(var(--spacing)*4);padding:calc(var(--spacing)*3)}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-icon-bg .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-icon-bg .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-ta-empty-state .fi-ta-empty-state-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-empty-state .fi-ta-actions{margin-top:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-header-cell{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*3.5);padding-inline:calc(var(--spacing)*3);text-align:start;--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}@media (min-width:40rem){.custom-fields-component .fi-ta-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-header-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-header-cell:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-header-cell.fi-growable{width:100%}.custom-fields-component .fi-ta-header-cell.fi-grouped{border-color:var(--gray-200)}.custom-fields-component .fi-ta-header-cell.fi-grouped:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-header-cell.fi-grouped:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-header-cell.fi-grouped:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .fi-ta-header-cell.fi-grouped:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-ta-header-cell.fi-align-center{text-align:center}.custom-fields-component .fi-ta-header-cell.fi-align-center .fi-ta-header-cell-sort-btn{justify-content:center}.custom-fields-component .fi-ta-header-cell.fi-align-end{text-align:end}.custom-fields-component .fi-ta-header-cell.fi-align-end .fi-ta-header-cell-sort-btn{justify-content:flex-end}.custom-fields-component .fi-ta-header-cell.fi-align-left{text-align:left}.custom-fields-component .fi-ta-header-cell.fi-align-left .fi-ta-header-cell-sort-btn{justify-content:flex-start}.custom-fields-component .fi-ta-header-cell.fi-align-left .fi-ta-header-cell-sort-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.custom-fields-component .fi-ta-header-cell.fi-align-right{text-align:right}.custom-fields-component .fi-ta-header-cell.fi-align-right .fi-ta-header-cell-sort-btn{justify-content:flex-end}.custom-fields-component .fi-ta-header-cell.fi-align-right .fi-ta-header-cell-sort-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.custom-fields-component .fi-ta-header-cell.fi-align-between,.custom-fields-component .fi-ta-header-cell.fi-align-justify{text-align:justify}.custom-fields-component :is(.fi-ta-header-cell.fi-align-justify,.fi-ta-header-cell.fi-align-between) .fi-ta-header-cell-sort-btn{justify-content:space-between}.custom-fields-component .fi-ta-header-cell.fi-ta-header-cell-sorted .fi-icon{color:var(--gray-950)}.custom-fields-component .fi-ta-header-cell.fi-ta-header-cell-sorted .fi-icon:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-icon{color:var(--gray-400)}.custom-fields-component .fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-icon:where(.dark,.dark *),.custom-fields-component .fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:hover .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:focus-visible .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}@media (min-width:40rem){.custom-fields-component .fi-ta-header-cell.sm\\:fi-hidden{display:none}}@media (min-width:48rem){.custom-fields-component .fi-ta-header-cell.md\\:fi-hidden{display:none}}@media (min-width:64rem){.custom-fields-component .fi-ta-header-cell.lg\\:fi-hidden{display:none}}@media (min-width:80rem){.custom-fields-component .fi-ta-header-cell.xl\\:fi-hidden{display:none}}@media (min-width:96rem){.custom-fields-component .fi-ta-header-cell.\\32 xl\\:fi-hidden{display:none}}.custom-fields-component .fi-ta-header-cell.sm\\:fi-visible{display:none}@media (min-width:40rem){.custom-fields-component .fi-ta-header-cell.sm\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-cell.md\\:fi-visible{display:none}@media (min-width:48rem){.custom-fields-component .fi-ta-header-cell.md\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-cell.lg\\:fi-visible{display:none}@media (min-width:64rem){.custom-fields-component .fi-ta-header-cell.lg\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-cell.xl\\:fi-visible{display:none}@media (min-width:80rem){.custom-fields-component .fi-ta-header-cell.xl\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-cell.\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.custom-fields-component .fi-ta-header-cell.\\32 xl\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-cell.fi-wrapped{white-space:normal}.custom-fields-component .fi-ta-header-cell:not(.fi-wrapped){white-space:nowrap}.custom-fields-component .fi-ta-header-cell .fi-ta-header-cell-sort-btn{align-items:center;column-gap:calc(var(--spacing)*1);cursor:pointer;display:flex;justify-content:flex-start;width:100%}.custom-fields-component .fi-ta-header-cell .fi-icon{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;flex-shrink:0;transition-duration:75ms}.custom-fields-component .fi-ta-header-group-cell{border-color:var(--gray-200);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}@media (min-width:40rem){.custom-fields-component .fi-ta-header-group-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-header-group-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-header-group-cell:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-header-group-cell:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-header-group-cell:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-header-group-cell:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .fi-ta-header-group-cell:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.custom-fields-component .fi-ta-header-group-cell.fi-align-start{text-align:start}.custom-fields-component .fi-ta-header-group-cell.fi-align-center{text-align:center}.custom-fields-component .fi-ta-header-group-cell.fi-align-end{text-align:end}.custom-fields-component .fi-ta-header-group-cell.fi-align-left{text-align:left}.custom-fields-component .fi-ta-header-group-cell.fi-align-right{text-align:right}.custom-fields-component .fi-ta-header-group-cell.fi-align-between,.custom-fields-component .fi-ta-header-group-cell.fi-align-justify{text-align:justify}@media (min-width:40rem){.custom-fields-component .fi-ta-header-group-cell.sm\\:fi-hidden{display:none}}@media (min-width:48rem){.custom-fields-component .fi-ta-header-group-cell.md\\:fi-hidden{display:none}}@media (min-width:64rem){.custom-fields-component .fi-ta-header-group-cell.lg\\:fi-hidden{display:none}}@media (min-width:80rem){.custom-fields-component .fi-ta-header-group-cell.xl\\:fi-hidden{display:none}}@media (min-width:96rem){.custom-fields-component .fi-ta-header-group-cell.\\32 xl\\:fi-hidden{display:none}}.custom-fields-component .fi-ta-header-group-cell.sm\\:fi-visible{display:none}@media (min-width:40rem){.custom-fields-component .fi-ta-header-group-cell.sm\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-group-cell.md\\:fi-visible{display:none}@media (min-width:48rem){.custom-fields-component .fi-ta-header-group-cell.md\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-group-cell.lg\\:fi-visible{display:none}@media (min-width:64rem){.custom-fields-component .fi-ta-header-group-cell.lg\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-group-cell.xl\\:fi-visible{display:none}@media (min-width:80rem){.custom-fields-component .fi-ta-header-group-cell.xl\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-group-cell.\\32 xl\\:fi-visible{display:none}@media (min-width:96rem){.custom-fields-component .fi-ta-header-group-cell.\\32 xl\\:fi-visible{display:table-cell}}.custom-fields-component .fi-ta-header-group-cell.fi-wrapped{white-space:normal}.custom-fields-component .fi-ta-header-group-cell:not(.fi-wrapped){white-space:nowrap}.custom-fields-component .fi-ta-empty-header-cell{width:calc(var(--spacing)*1)}@media (hover:hover){.custom-fields-component .fi-ta-row{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-ta-row.fi-clickable:hover{background-color:var(--gray-50)}.custom-fields-component .fi-ta-row.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-row.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-ta-row.fi-striped{background-color:var(--gray-50)}.custom-fields-component .fi-ta-row.fi-striped:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-row.fi-striped:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-row.fi-collapsed{display:none}.custom-fields-component .fi-ta-row.fi-ta-group-header-row>td{background-color:var(--gray-50)}.custom-fields-component .fi-ta-row.fi-ta-group-header-row>td:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-row.fi-ta-group-header-row>td:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-row .fi-ta-group-header-cell{padding-inline:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-ta-row .fi-ta-group-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-row .fi-ta-group-header-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.custom-fields-component .fi-ta-row .fi-ta-group-header{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;padding-block:calc(var(--spacing)*2);width:100%}.custom-fields-component .fi-ta-row .fi-ta-group-header.fi-collapsible{cursor:pointer}.custom-fields-component .fi-ta-row .fi-ta-group-header.fi-collapsible.fi-collapsed .fi-icon-btn{rotate:-180deg}.custom-fields-component .fi-ta-row .fi-ta-group-header .fi-ta-group-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-row .fi-ta-group-header .fi-ta-group-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-row .fi-ta-group-header .fi-ta-group-description{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-ta-row .fi-ta-group-header .fi-ta-group-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-ta-row.fi-selected:not(.fi-striped){background-color:var(--gray-50)}.custom-fields-component .fi-ta-row.fi-selected:not(.fi-striped):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-row.fi-selected:not(.fi-striped):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-row.fi-selected>:first-child{position:relative}.custom-fields-component .fi-ta-row.fi-selected>:first-child:before{background-color:var(--primary-600);content:\"\";inset-block:calc(var(--spacing)*0);inset-inline-start:calc(var(--spacing)*0);position:absolute;width:calc(var(--spacing)*.5)}.custom-fields-component .fi-ta-row.fi-selected>:first-child:where(.dark,.dark *):before{background-color:var(--primary-500)}.custom-fields-component .fi-ta-reordering .fi-ta-row:not(.fi-ta-row-not-reorderable){cursor:move}.custom-fields-component .fi-ta-table{table-layout:auto;width:100%}.custom-fields-component :where(.fi-ta-table>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-ta-table{text-align:start}.custom-fields-component :where(.fi-ta-table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-ta-table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component :where(.fi-ta-table>thead>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-ta-table>thead:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-ta-table>thead:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-table>thead>tr{background-color:var(--gray-50)}.custom-fields-component .fi-ta-table>thead>tr:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-table>thead>tr:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-table>thead>tr.fi-ta-table-head-groups-row{background-color:var(--gray-100)}.custom-fields-component .fi-ta-table>thead>tr.fi-ta-table-head-groups-row:where(.dark,.dark *){background-color:#0000}.custom-fields-component :where(.fi-ta-table>tbody>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component .fi-ta-table>tbody{white-space:nowrap}.custom-fields-component :where(.fi-ta-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-ta-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-table>tfoot{background-color:var(--gray-50)}.custom-fields-component .fi-ta-table>tfoot:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-ta-table>tfoot:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-ta-col-manager{display:grid;row-gap:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-ctn{display:grid;gap:calc(var(--spacing)*4)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-header{align-items:center;display:flex;justify-content:space-between}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-items{column-gap:calc(var(--spacing)*6);margin-top:calc(var(--spacing)*-6)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-item{align-items:center;break-inside:avoid;display:flex;gap:calc(var(--spacing)*3);padding-top:calc(var(--spacing)*6)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label{align-items:center;column-gap:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);display:flex;flex:1;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label .fi-checkbox-input{flex-shrink:0}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-reorder-handle{cursor:move}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-group{break-inside:avoid}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-group .fi-ta-col-manager-group-items{padding-inline-start:calc(var(--spacing)*8)}.custom-fields-component .fi-ta-col-manager .fi-ta-col-manager-actions-ctn{display:flex;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-wi-chart .fi-wi-chart-canvas-ctn{margin-inline:auto}.custom-fields-component .fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1}@supports (container-type:inline-size){.custom-fields-component .fi-wi-chart .fi-section-content{container-type:inline-size}@container (min-width:24rem){.custom-fields-component .fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1.5}}}@supports not (container-type:inline-size){@media (min-width:40rem){.custom-fields-component .fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1.5}}}.custom-fields-component .fi-wi-chart .fi-wi-chart-filter.fi-input-wrp{width:max-content}@media (min-width:40rem){.custom-fields-component .fi-wi-chart .fi-wi-chart-filter.fi-input-wrp{margin-block:calc(var(--spacing)*-2)}}.custom-fields-component .fi-wi-chart .fi-wi-chart-filter.fi-dropdown .fi-wi-chart-filter-content{padding:calc(var(--spacing)*6)}.custom-fields-component .fi-wi-chart .fi-color .fi-wi-chart-bg-color{color:var(--color-50)}.custom-fields-component .fi-wi-chart .fi-color .fi-wi-chart-bg-color:where(.dark,.dark *){color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-wi-chart .fi-color .fi-wi-chart-bg-color:where(.dark,.dark *){color:color-mix(in oklab,var(--color-400)10%,transparent)}}.custom-fields-component .fi-wi-chart .fi-color .fi-wi-chart-border-color{color:var(--color-500)}.custom-fields-component .fi-wi-chart .fi-color .fi-wi-chart-border-color:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-wi-chart .fi-wi-chart-bg-color{color:var(--gray-100)}.custom-fields-component .fi-wi-chart .fi-wi-chart-bg-color:where(.dark,.dark *){color:var(--gray-800)}.custom-fields-component .fi-wi-chart .fi-wi-chart-border-color{color:var(--gray-400)}.custom-fields-component .fi-wi-chart .fi-wi-chart-grid-color{color:var(--gray-200)}.custom-fields-component .fi-wi-chart .fi-wi-chart-grid-color:where(.dark,.dark *){color:var(--gray-800)}.custom-fields-component .fi-wi-chart .fi-wi-chart-text-color{color:var(--gray-500)}.custom-fields-component .fi-wi-chart .fi-wi-chart-text-color:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-wi-stats-overview-stat{background-color:var(--color-white);border-radius:var(--radius-xl);height:100%;padding:calc(var(--spacing)*6);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:block;position:relative}.custom-fields-component .fi-wi-stats-overview-stat:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-wi-stats-overview-stat:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-wi-stats-overview-stat .fi-icon{color:var(--gray-400);flex-shrink:0}.custom-fields-component .fi-wi-stats-overview-stat .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-content{display:grid;row-gap:calc(var(--spacing)*2)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label-ctn{align-items:center;column-gap:calc(var(--spacing)*2);display:flex}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-value{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);color:var(--gray-950);letter-spacing:var(--tracking-tight)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-value:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description{align-items:center;color:var(--gray-500);column-gap:calc(var(--spacing)*1);display:flex;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color{color:var(--text)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color:where(.dark,.dark *){color:var(--dark-text)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color .fi-icon{color:var(--color-500)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart{border-bottom-left-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl);inset-inline:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);overflow:hidden;position:absolute}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart>canvas{height:calc(var(--spacing)*6)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-bg-color{color:var(--gray-100)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:var(--gray-800)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-border-color{color:var(--gray-400)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color{color:var(--color-50)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:var(--color-400)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:color-mix(in oklab,var(--color-400)10%,transparent)}}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-border-color{color:var(--color-500)}.custom-fields-component .fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-border-color:where(.dark,.dark *){color:var(--color-400)}.custom-fields-component .fi-wi{gap:calc(var(--spacing)*6)}.custom-fields-component .fi-global-search-ctn{align-items:center;display:flex}.custom-fields-component .fi-global-search{flex:1}@media (min-width:40rem){.custom-fields-component .fi-global-search{position:relative}}.custom-fields-component .fi-global-search-results-ctn{background-color:var(--color-white);border-radius:var(--radius-lg);inset-inline:calc(var(--spacing)*4);margin-top:calc(var(--spacing)*2);max-height:calc(var(--spacing)*96);z-index:10;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);overflow:auto;position:absolute;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}@media (min-width:40rem){.custom-fields-component .fi-global-search-results-ctn{inset-inline:auto}}.custom-fields-component .fi-global-search-results-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-global-search-results-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-global-search-results-ctn{transform:translateZ(0)}.custom-fields-component .fi-global-search-results-ctn.fi-transition-enter-start,.custom-fields-component .fi-global-search-results-ctn.fi-transition-leave-end{opacity:0}@media (min-width:40rem){.custom-fields-component .fi-topbar .fi-global-search-results-ctn{inset-inline-end:calc(var(--spacing)*0);max-width:var(--container-sm);width:100vw}}.custom-fields-component .fi-sidebar .fi-global-search-ctn{margin-inline:calc(var(--spacing)*3);margin-top:calc(var(--spacing)*3)}@media (min-width:40rem){.custom-fields-component .fi-sidebar .fi-global-search-results-ctn{inset-inline-start:calc(var(--spacing)*0)}}.custom-fields-component .fi-global-search-no-results-message{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*4)}.custom-fields-component .fi-global-search-no-results-message:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component :where(.fi-global-search-results>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-global-search-results:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-global-search-results:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-global-search-result-group-header{background-color:var(--gray-50);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);top:calc(var(--spacing)*0);z-index:10;--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);font-weight:var(--font-weight-semibold);position:sticky;text-transform:capitalize}.custom-fields-component .fi-global-search-result-group-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-global-search-result-group-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-global-search-result-group-header:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white)}.custom-fields-component :where(.fi-global-search-result-group-results>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-color:var(--gray-200);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.fi-global-search-result-group-results:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.fi-global-search-result-group-results:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-global-search-result{scroll-margin-top:calc(var(--spacing)*9);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-global-search-result:focus-within{background-color:var(--gray-50)}@media (hover:hover){.custom-fields-component .fi-global-search-result:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-global-search-result:where(.dark,.dark *):focus-within{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-global-search-result:where(.dark,.dark *):focus-within{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.custom-fields-component .fi-global-search-result:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-global-search-result:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-global-search-result.fi-global-search-result-has-actions .fi-global-search-result-link{padding-bottom:calc(var(--spacing)*0)}.custom-fields-component .fi-global-search-result-link{padding:calc(var(--spacing)*4);--tw-outline-style:none;display:block;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-global-search-result-link{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-global-search-result-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-950);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-global-search-result-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-global-search-result-details{margin-top:calc(var(--spacing)*1)}.custom-fields-component .fi-global-search-result-detail{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-global-search-result-detail:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-global-search-result-detail-label{--tw-font-weight:var(--font-weight-medium);display:inline;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-global-search-result-detail-value{display:inline}.custom-fields-component .fi-global-search-result-actions{column-gap:calc(var(--spacing)*3);display:flex;margin-top:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-bottom:calc(var(--spacing)*4)}.custom-fields-component .fi-header{display:flex;flex-direction:column;gap:calc(var(--spacing)*4)}@media (min-width:40rem){.custom-fields-component .fi-header{align-items:center;flex-direction:row;justify-content:space-between}}.custom-fields-component .fi-header .fi-breadcrumbs{display:none;margin-bottom:calc(var(--spacing)*2)}@media (min-width:40rem){.custom-fields-component .fi-header .fi-breadcrumbs{display:block}.custom-fields-component .fi-header.fi-header-has-breadcrumbs .fi-header-actions-ctn{margin-top:calc(var(--spacing)*7)}}.custom-fields-component .fi-header-heading{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);color:var(--gray-950);letter-spacing:var(--tracking-tight)}@media (min-width:40rem){.custom-fields-component .fi-header-heading{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}.custom-fields-component .fi-header-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-header-subheading{color:var(--gray-600);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));margin-top:calc(var(--spacing)*2);max-width:var(--container-2xl)}.custom-fields-component .fi-header-subheading:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-header-actions-ctn{align-items:center;display:flex;flex-shrink:0;gap:calc(var(--spacing)*3)}.custom-fields-component .fi-header-actions-ctn>.fi-ac{flex:1}.custom-fields-component .fi-header-actions-ctn>.fi-ac:not(.fi-width-full).fi-align-end,.custom-fields-component .fi-header-actions-ctn>.fi-ac:not(.fi-width-full).fi-align-right{flex-direction:row;justify-content:flex-end}.custom-fields-component .fi-simple-header{align-items:center;display:flex;flex-direction:column}.custom-fields-component .fi-simple-header .fi-logo{margin-bottom:calc(var(--spacing)*4)}.custom-fields-component .fi-simple-header-heading{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));text-align:center;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);color:var(--gray-950);letter-spacing:var(--tracking-tight)}.custom-fields-component .fi-simple-header-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-simple-header-subheading{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-top:calc(var(--spacing)*2);text-align:center}.custom-fields-component .fi-simple-header-subheading:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component html.fi{min-height:100dvh}.custom-fields-component .fi-body{background-color:var(--gray-50);--tw-font-weight:var(--font-weight-normal);color:var(--gray-950);font-weight:var(--font-weight-normal);min-height:100dvh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.custom-fields-component .fi-body:where(.dark,.dark *){background-color:var(--gray-950);color:var(--color-white)}.custom-fields-component :is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-main-ctn{min-height:calc(100dvh - 4rem);opacity:0;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .fi-body>.fi-layout-sidebar-toggle-btn-ctn{padding-inline-start:calc(var(--spacing)*5);padding-top:calc(var(--spacing)*5)}@media (min-width:64rem){.custom-fields-component .fi-body>.fi-layout-sidebar-toggle-btn-ctn.lg\\:fi-hidden{display:none}}.custom-fields-component .fi-body.fi-body-has-navigation:not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop):not(.fi-body-has-top-navigation) .fi-main-ctn{opacity:0}.custom-fields-component :is(.fi-body.fi-body-has-top-navigation,.fi-body:not(.fi-body-has-navigation)) .fi-main-ctn{display:flex;min-height:calc(100dvh - 4rem)}.custom-fields-component .fi-body:not(.fi-body-has-topbar) .fi-main-ctn{display:flex;min-height:100dvh}.custom-fields-component .fi-layout{display:flex;height:100%;overflow-x:clip;width:100%}.custom-fields-component .fi-main-ctn{flex:1;flex-direction:column;width:100vw}.custom-fields-component .fi-main{height:100%;margin-inline:auto;padding-inline:calc(var(--spacing)*4);width:100%}@media (min-width:48rem){.custom-fields-component .fi-main{padding-inline:calc(var(--spacing)*6)}}@media (min-width:64rem){.custom-fields-component .fi-main{padding-inline:calc(var(--spacing)*8)}}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-xs{max-width:var(--container-xs)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-sm{max-width:var(--container-sm)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-md{max-width:var(--container-md)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-lg{max-width:var(--container-lg)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-xl{max-width:var(--container-xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-2xl{max-width:var(--container-2xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-3xl{max-width:var(--container-3xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-4xl{max-width:var(--container-4xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-5xl{max-width:var(--container-5xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-6xl{max-width:var(--container-6xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-7xl{max-width:var(--container-7xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-full{max-width:100%}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-min{max-width:min-content}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-max{max-width:max-content}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-fit{max-width:fit-content}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-prose{max-width:65ch}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-screen-sm{max-width:var(--breakpoint-sm)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-screen-md{max-width:var(--breakpoint-md)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-screen-lg{max-width:var(--breakpoint-lg)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-screen-xl{max-width:var(--breakpoint-xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-screen-2xl{max-width:var(--breakpoint-2xl)}.custom-fields-component :is(.fi-main,.fi-simple-main).fi-width-screen{inset:calc(var(--spacing)*0);position:fixed}.custom-fields-component .fi-simple-layout{align-items:center;display:flex;flex-direction:column;min-height:100dvh}.custom-fields-component .fi-simple-layout-header{align-items:center;column-gap:calc(var(--spacing)*4);display:flex;height:calc(var(--spacing)*16);inset-inline-end:calc(var(--spacing)*0);padding-inline-end:calc(var(--spacing)*4);position:absolute;top:calc(var(--spacing)*0)}@media (min-width:48rem){.custom-fields-component .fi-simple-layout-header{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:64rem){.custom-fields-component .fi-simple-layout-header{padding-inline-end:calc(var(--spacing)*8)}}.custom-fields-component .fi-simple-main-ctn{align-items:center;display:flex;flex-grow:1;justify-content:center;width:100%}.custom-fields-component .fi-simple-main{background-color:var(--color-white);margin-block:calc(var(--spacing)*16);padding-block:calc(var(--spacing)*12);padding-inline:calc(var(--spacing)*6);width:100%;--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:40rem){.custom-fields-component .fi-simple-main{border-radius:var(--radius-xl);padding-inline:calc(var(--spacing)*12)}}.custom-fields-component .fi-simple-main:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-simple-main:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-logo{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);color:var(--gray-950);display:flex;letter-spacing:var(--tracking-tight)}.custom-fields-component .fi-logo:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-logo.fi-logo-dark,.custom-fields-component .fi-logo.fi-logo-light:where(.dark,.dark *){display:none}.custom-fields-component .fi-logo.fi-logo-dark:where(.dark,.dark *){display:flex}@media (min-width:48rem){.custom-fields-component .fi-page-sub-navigation-dropdown{display:none}}.custom-fields-component .fi-page-sub-navigation-dropdown>.fi-dropdown-trigger>.fi-btn{justify-content:space-between;width:100%}.custom-fields-component .fi-page-sub-navigation-sidebar-ctn{display:none;flex-direction:column;width:calc(var(--spacing)*72)}@media (min-width:48rem){.custom-fields-component .fi-page-sub-navigation-sidebar-ctn{display:flex}}.custom-fields-component .fi-page-sub-navigation-sidebar{display:flex;flex-direction:column;row-gap:calc(var(--spacing)*7)}.custom-fields-component .fi-page-sub-navigation-tabs{display:none}@media (min-width:48rem){.custom-fields-component .fi-page-sub-navigation-tabs{display:flex}}.custom-fields-component .fi-page.fi-height-full,.custom-fields-component .fi-page.fi-height-full .fi-page-content,.custom-fields-component .fi-page.fi-height-full .fi-page-header-main-ctn,.custom-fields-component .fi-page.fi-height-full .fi-page-main{height:100%}.custom-fields-component .fi-page.fi-page-has-sub-navigation .fi-page-main{display:flex;flex-direction:column;gap:calc(var(--spacing)*8)}@media (min-width:48rem){.custom-fields-component :is(.fi-page.fi-page-has-sub-navigation.fi-page-has-sub-navigation-start,.fi-page.fi-page-has-sub-navigation.fi-page-has-sub-navigation-end) .fi-page-main{align-items:flex-start;flex-direction:row}}.custom-fields-component .fi-page-header-main-ctn{display:flex;flex-direction:column;padding-block:calc(var(--spacing)*8);row-gap:calc(var(--spacing)*8)}.custom-fields-component .fi-page-main-sub-navigation-mobile-menu-render-hook-ctn{display:contents}@media (min-width:48rem){.custom-fields-component .fi-page-main-sub-navigation-mobile-menu-render-hook-ctn{display:none}}.custom-fields-component .fi-page-content{display:grid;flex:1;grid-auto-columns:minmax(0,1fr);row-gap:calc(var(--spacing)*8)}.custom-fields-component .fi-simple-page-content{display:grid;grid-auto-columns:minmax(0,1fr);row-gap:calc(var(--spacing)*6)}.custom-fields-component .fi-sidebar-group{display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-sidebar-group.fi-collapsed .fi-sidebar-group-collapse-btn{rotate:-180deg}.custom-fields-component .fi-sidebar-group.fi-collapsible>.fi-sidebar-group-btn{cursor:pointer}.custom-fields-component .fi-sidebar-group.fi-active .fi-sidebar-group-dropdown-trigger-btn .fi-icon{color:var(--primary-600)}.custom-fields-component .fi-sidebar-group.fi-active .fi-sidebar-group-dropdown-trigger-btn .fi-icon:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-sidebar-group-btn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex;padding:calc(var(--spacing)*2)}.custom-fields-component .fi-sidebar-group-btn .fi-icon{color:var(--gray-400)}.custom-fields-component .fi-sidebar-group-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-sidebar-group-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);color:var(--gray-500);flex:1;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-sidebar-group-label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*3);justify-content:center;padding:calc(var(--spacing)*2);--tw-outline-style:none;display:flex;flex:1;outline-style:none;position:relative}@media (forced-colors:active){.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn:hover{background-color:var(--gray-100)}}.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn .fi-icon{color:var(--gray-400)}.custom-fields-component .fi-sidebar-group-dropdown-trigger-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-sidebar-group-items{display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}.custom-fields-component :is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter{transition-delay:.1s}@media (min-width:64rem){.custom-fields-component :is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}}.custom-fields-component :is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter-start{opacity:0}.custom-fields-component :is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter-end{opacity:1}.custom-fields-component .fi-sidebar{align-content:flex-start;background-color:var(--color-white);display:flex;flex-direction:column;height:100dvh;inset-block:calc(var(--spacing)*0);inset-inline-start:calc(var(--spacing)*0);position:fixed;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));z-index:30}@media (min-width:64rem){.custom-fields-component .fi-sidebar{background-color:#0000;transition-property:none;z-index:20}}.custom-fields-component .fi-sidebar:where(.dark,.dark *){background-color:var(--gray-900)}@media (min-width:64rem){.custom-fields-component .fi-sidebar:where(.dark,.dark *){background-color:#0000}}.custom-fields-component .fi-sidebar.fi-sidebar-open{width:var(--sidebar-width);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:64rem){.custom-fields-component .fi-sidebar.fi-sidebar-open{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.custom-fields-component .fi-sidebar.fi-sidebar-open:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-sidebar.fi-sidebar-open:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar.fi-sidebar-open:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-sidebar:not(.fi-sidebar-open){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-sidebar:not(.fi-sidebar-open):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:64rem){.custom-fields-component .fi-body-has-topbar .fi-sidebar{height:calc(100dvh - 4rem);top:4rem}}.custom-fields-component .fi-sidebar-close-overlay{background-color:var(--gray-950);inset:calc(var(--spacing)*0);position:fixed;z-index:30}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-close-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.custom-fields-component .fi-sidebar-close-overlay{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:.5s;transition-duration:.5s}@media (min-width:64rem){.custom-fields-component .fi-sidebar-close-overlay{display:none}}.custom-fields-component .fi-sidebar-close-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-close-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}@media (min-width:64rem){.custom-fields-component .fi-body.fi-body-has-top-navigation .fi-sidebar{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-body.fi-body-has-top-navigation .fi-sidebar:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .fi-body:not(.fi-body-has-top-navigation) .fi-sidebar.fi-sidebar-open,.custom-fields-component .fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open){position:sticky}.custom-fields-component .fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open),.custom-fields-component .fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open):where(:dir(rtl),[dir=rtl],[dir=rtl] *),.custom-fields-component .fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar,.custom-fields-component .fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}.custom-fields-component .fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:not(.fi-sidebar-open){width:var(--sidebar-width)}@media (min-width:64rem){.custom-fields-component .fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:not(.fi-sidebar-open){position:sticky}}.custom-fields-component .fi-sidebar-header-ctn{overflow-x:clip}.custom-fields-component .fi-sidebar-header{align-items:center;display:flex;height:calc(var(--spacing)*16);justify-content:center}.custom-fields-component .fi-sidebar-header-logo-ctn{flex:1}.custom-fields-component .fi-body-has-topbar .fi-sidebar-header{background-color:var(--color-white);padding-inline:calc(var(--spacing)*6);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-body-has-topbar .fi-sidebar-header{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}@media (min-width:64rem){.custom-fields-component .fi-body-has-topbar .fi-sidebar-header{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:none}}.custom-fields-component .fi-body-has-topbar .fi-sidebar-header:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-body-has-topbar .fi-sidebar-header:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component :not(.fi-body-has-topbar) .fi-sidebar-header{padding-inline:calc(var(--spacing)*4);--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);background-color:#0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component :not(.fi-body-has-topbar) .fi-sidebar-header .fi-logo{margin-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-sidebar-nav{display:flex;flex-direction:column;flex-grow:1;overflow:hidden auto;padding-block:calc(var(--spacing)*8);padding-inline:calc(var(--spacing)*6);row-gap:calc(var(--spacing)*7);scrollbar-gutter:stable}.custom-fields-component .fi-sidebar-nav-groups{display:flex;flex-direction:column;margin-inline:calc(var(--spacing)*-2);row-gap:calc(var(--spacing)*7)}.custom-fields-component .fi-sidebar-item.fi-active,.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-active-child-items{display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn{background-color:var(--gray-100)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-icon{color:var(--primary-700)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-grouped-border>.fi-sidebar-item-grouped-border-part{background-color:var(--primary-700)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-grouped-border>.fi-sidebar-item-grouped-border-part:where(.dark,.dark *){background-color:var(--primary-400)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-label{color:var(--primary-700)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-label:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-sidebar-item.fi-active>.fi-sidebar-item-btn .fi-sidebar-item-grouped-border-part{border-radius:3.40282e+38px;height:calc(var(--spacing)*1.5);position:relative;width:calc(var(--spacing)*1.5)}@media (hover:hover){.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:hover{background-color:var(--gray-100)}}.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-sidebar-item-btn{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*3);justify-content:center;padding:calc(var(--spacing)*2);--tw-outline-style:none;display:flex;outline-style:none;position:relative}@media (forced-colors:active){.custom-fields-component .fi-sidebar-item-btn{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-sidebar-item-btn{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-sidebar-item-btn>.fi-icon{color:var(--gray-400)}.custom-fields-component .fi-sidebar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-sidebar-item-grouped-border{align-items:center;display:flex;height:calc(var(--spacing)*6);justify-content:center;position:relative;width:calc(var(--spacing)*6)}.custom-fields-component .fi-sidebar-item-grouped-border-part-not-first{background-color:var(--gray-300);bottom:50%;position:absolute;top:-50%;width:1px}.custom-fields-component .fi-sidebar-item-grouped-border-part-not-first:where(.dark,.dark *){background-color:var(--gray-600)}.custom-fields-component .fi-sidebar-item-grouped-border-part-not-last{background-color:var(--gray-300);bottom:-50%;position:absolute;top:50%;width:1px}.custom-fields-component .fi-sidebar-item-grouped-border-part-not-last:where(.dark,.dark *){background-color:var(--gray-600)}.custom-fields-component .fi-sidebar-item-grouped-border-part{background-color:var(--gray-400);border-radius:3.40282e+38px;height:calc(var(--spacing)*1.5);position:relative;width:calc(var(--spacing)*1.5)}.custom-fields-component .fi-sidebar-item-grouped-border-part:where(.dark,.dark *){background-color:var(--gray-500)}.custom-fields-component .fi-sidebar-item-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-overflow:ellipsis;white-space:nowrap;--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);flex:1;font-weight:var(--font-weight-medium);overflow:hidden}.custom-fields-component .fi-sidebar-item-label:where(.dark,.dark *){color:var(--gray-200)}@media (min-width:64rem){.custom-fields-component :is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter{transition-delay:.1s;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}}.custom-fields-component :is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter-start{opacity:0}.custom-fields-component :is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter-end{opacity:1}.custom-fields-component .fi-sidebar-footer{display:grid;margin-block:calc(var(--spacing)*3);margin-inline:calc(var(--spacing)*4);row-gap:calc(var(--spacing)*3)}.custom-fields-component .fi-sidebar-footer>.fi-no-database{display:block}.custom-fields-component .fi-sidebar-sub-group-items{display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}.custom-fields-component .fi-sidebar-database-notifications-btn{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*3);justify-content:center;padding:calc(var(--spacing)*2);text-align:start;width:100%;--tw-outline-style:none;display:flex;outline-style:none;position:relative}@media (forced-colors:active){.custom-fields-component .fi-sidebar-database-notifications-btn{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-sidebar-database-notifications-btn{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-sidebar-database-notifications-btn:hover{background-color:var(--gray-100)}}.custom-fields-component .fi-sidebar-database-notifications-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.custom-fields-component .fi-sidebar-database-notifications-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-database-notifications-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-sidebar-database-notifications-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-sidebar-database-notifications-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-sidebar-database-notifications-btn>.fi-icon{color:var(--gray-400)}.custom-fields-component .fi-sidebar-database-notifications-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-overflow:ellipsis;white-space:nowrap;--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);flex:1;font-weight:var(--font-weight-medium);overflow:hidden}.custom-fields-component .fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label:where(.dark,.dark *){color:var(--gray-200)}@media (min-width:64rem){.custom-fields-component :is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter{transition-delay:.1s;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}}.custom-fields-component :is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter-start{opacity:0}.custom-fields-component :is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter-end{opacity:1}.custom-fields-component .fi-sidebar-open-collapse-sidebar-btn,.custom-fields-component .fi-sidebar-open-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}.custom-fields-component .fi-sidebar-close-collapse-sidebar-btn{display:none;margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.custom-fields-component .fi-sidebar-close-collapse-sidebar-btn{display:flex}.custom-fields-component :is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body:not(.fi-body-has-sidebar-fully-collapsible-on-desktop)) .fi-sidebar-open-sidebar-btn{display:none}}.custom-fields-component .fi-sidebar-close-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.custom-fields-component .fi-sidebar-close-sidebar-btn{display:none}}.custom-fields-component .fi-tenant-menu-trigger{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*3);font-size:var(--text-sm);justify-content:center;line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*2);width:100%;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;display:flex;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-tenant-menu-trigger{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-tenant-menu-trigger{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-tenant-menu-trigger:hover{background-color:var(--gray-100)}}.custom-fields-component .fi-tenant-menu-trigger:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.custom-fields-component .fi-tenant-menu-trigger:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tenant-menu-trigger:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-tenant-menu-trigger:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-tenant-menu-trigger:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-tenant-menu-trigger .fi-tenant-avatar{flex-shrink:0}.custom-fields-component .fi-tenant-menu-trigger .fi-icon{color:var(--gray-400);height:calc(var(--spacing)*5);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));width:calc(var(--spacing)*5);--tw-duration:75ms;flex-shrink:0;margin-inline-start:auto;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-tenant-menu-trigger .fi-icon:is(:where(.group):hover *){color:var(--gray-500)}}.custom-fields-component .fi-tenant-menu-trigger .fi-icon:is(:where(.group):focus-visible *),.custom-fields-component .fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.custom-fields-component .fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):hover *){color:var(--gray-400)}}.custom-fields-component .fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-400)}.custom-fields-component .fi-tenant-menu-trigger:hover .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-tenant-menu-trigger:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-tenant-menu-trigger:focus-visible .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-tenant-menu-trigger:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-tenant-menu-trigger-text{display:grid;justify-items:start;text-align:start}.custom-fields-component .fi-tenant-menu-trigger-current-tenant-label{color:var(--gray-500);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .fi-tenant-menu-trigger-current-tenant-label:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-tenant-menu-trigger-tenant-name{color:var(--gray-950)}.custom-fields-component .fi-tenant-menu-trigger-tenant-name:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-sidebar .fi-tenant-menu{margin-inline:calc(var(--spacing)*4);margin-top:calc(var(--spacing)*3)}.custom-fields-component .fi-theme-switcher{column-gap:calc(var(--spacing)*1);display:grid;grid-auto-flow:column}.custom-fields-component .fi-theme-switcher-btn{border-radius:var(--radius-md);padding:calc(var(--spacing)*2);--tw-outline-style:none;display:flex;justify-content:center;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-theme-switcher-btn{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-theme-switcher-btn{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-theme-switcher-btn:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-theme-switcher-btn:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.custom-fields-component .fi-theme-switcher-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-theme-switcher-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-theme-switcher-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-theme-switcher-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-theme-switcher-btn.fi-active{background-color:var(--gray-50);color:var(--primary-500)}.custom-fields-component .fi-theme-switcher-btn.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-theme-switcher-btn.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-theme-switcher-btn.fi-active:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-theme-switcher-btn:not(.fi-active){color:var(--gray-400)}@media (hover:hover){.custom-fields-component .fi-theme-switcher-btn:not(.fi-active):hover{color:var(--gray-500)}}.custom-fields-component .fi-theme-switcher-btn:not(.fi-active):focus-visible,.custom-fields-component .fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.custom-fields-component .fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *):hover{color:var(--gray-400)}}.custom-fields-component .fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *):focus-visible{color:var(--gray-400)}.custom-fields-component .fi-topbar-ctn{overflow-x:clip;position:sticky;top:calc(var(--spacing)*0);z-index:30}.custom-fields-component .fi-topbar{background-color:var(--color-white);min-height:calc(var(--spacing)*16);padding-inline:calc(var(--spacing)*4);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);align-items:center;display:flex}.custom-fields-component .fi-topbar:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-topbar:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-topbar .fi-tenant-menu{display:none}@media (min-width:64rem){.custom-fields-component .fi-topbar .fi-tenant-menu{display:block}}.custom-fields-component .fi-topbar-close-sidebar-btn,.custom-fields-component .fi-topbar-open-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.custom-fields-component .fi-topbar-close-sidebar-btn{display:none}}.custom-fields-component .fi-topbar-open-collapse-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}.custom-fields-component .fi-topbar-close-collapse-sidebar-btn{display:none;margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.custom-fields-component .fi-topbar-close-collapse-sidebar-btn{display:flex}}.custom-fields-component .fi-topbar-start{align-items:center;display:none;margin-inline-end:calc(var(--spacing)*6)}@media (min-width:64rem){.custom-fields-component .fi-topbar-start{display:flex}}.custom-fields-component .fi-topbar-start .fi-logo{margin-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-topbar-collapse-sidebar-btn-ctn{flex-shrink:0;width:calc(var(--spacing)*9)}@media (min-width:64rem){.custom-fields-component :is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body:not(.fi-body-has-sidebar-fully-collapsible-on-desktop)) .fi-topbar-open-sidebar-btn{display:none}}.custom-fields-component .fi-topbar-nav-groups{align-items:center;column-gap:calc(var(--spacing)*4);display:none;margin-inline-end:calc(var(--spacing)*4);margin-inline-start:calc(var(--spacing)*4)}@media (min-width:64rem){.custom-fields-component .fi-topbar-nav-groups{display:flex;flex-wrap:wrap;margin-block:calc(var(--spacing)*2);row-gap:calc(var(--spacing)*1)}}.custom-fields-component .fi-topbar-end{align-items:center;column-gap:calc(var(--spacing)*4);display:flex;margin-inline-start:auto}.custom-fields-component .fi-topbar-item-btn{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*2);justify-content:center;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3);--tw-outline-style:none;display:flex;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-topbar-item-btn{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-topbar-item-btn{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-topbar-item-btn:hover{background-color:var(--gray-50)}}.custom-fields-component .fi-topbar-item-btn:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.custom-fields-component .fi-topbar-item-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-topbar-item-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.custom-fields-component .fi-topbar-item-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-topbar-item-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-topbar-item-btn>.fi-icon{color:var(--gray-400)}.custom-fields-component .fi-topbar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .fi-topbar-item-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);color:var(--gray-700);font-weight:var(--font-weight-medium)}.custom-fields-component .fi-topbar-item-label:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-btn{background-color:var(--gray-50)}.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-btn>.fi-icon{color:var(--primary-600)}.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-label{color:var(--primary-600)}.custom-fields-component .fi-topbar-item.fi-active .fi-topbar-item-label:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .fi-simple-user-menu-ctn{align-items:center;column-gap:calc(var(--spacing)*4);display:flex}.custom-fields-component .fi-topbar .fi-user-menu-trigger{flex-shrink:0}.custom-fields-component .fi-sidebar .fi-user-menu-trigger{align-items:center;border-radius:var(--radius-lg);column-gap:calc(var(--spacing)*3);font-size:var(--text-sm);justify-content:center;line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*2);width:100%;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;display:flex;outline-style:none}@media (forced-colors:active){.custom-fields-component .fi-sidebar .fi-user-menu-trigger{outline:2px solid #0000;outline-offset:2px}}.custom-fields-component .fi-sidebar .fi-user-menu-trigger{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-user-avatar{flex-shrink:0}.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-icon{color:var(--gray-400);height:calc(var(--spacing)*5);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));width:calc(var(--spacing)*5);--tw-duration:75ms;flex-shrink:0;margin-inline-start:auto;transition-duration:75ms}@media (hover:hover){.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-icon:is(:where(.group):hover *){color:var(--gray-500)}}.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-icon:is(:where(.group):focus-visible *),.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):hover *){color:var(--gray-400)}}.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-400)}.custom-fields-component .fi-sidebar .fi-user-menu-trigger:hover .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-sidebar .fi-user-menu-trigger:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sidebar .fi-user-menu-trigger:focus-visible .fi-icon{color:var(--gray-500)}.custom-fields-component .fi-sidebar .fi-user-menu-trigger:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-tenant-menu-trigger-text{color:var(--gray-950);display:grid;justify-items:start;text-align:start}.custom-fields-component .fi-sidebar .fi-user-menu-trigger .fi-tenant-menu-trigger-text:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-sidebar .fi-user-menu .fi-dropdown-panel{max-width:max(14rem,100% - 1.5rem)!important}.custom-fields-component .fi-account-widget .fi-section-content{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-account-widget-logout-form{margin-block:auto}.custom-fields-component .fi-account-widget-main{flex:1}.custom-fields-component .fi-account-widget-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);color:var(--gray-950);display:grid;flex:1;font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-account-widget-heading:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-account-widget-user-name{color:var(--gray-500);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .fi-account-widget-user-name:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-filament-info-widget .fi-section-content{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.custom-fields-component .fi-filament-info-widget-main{flex:1}.custom-fields-component .fi-filament-info-widget-logo{color:var(--gray-950);height:calc(var(--spacing)*5)}.custom-fields-component .fi-filament-info-widget-logo:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .fi-filament-info-widget-version{color:var(--gray-500);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-top:calc(var(--spacing)*2)}.custom-fields-component .fi-filament-info-widget-version:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .fi-filament-info-widget-links{align-items:flex-end;display:flex;flex-direction:column;row-gap:calc(var(--spacing)*1)}}@layer utilities{.custom-fields-component .pointer-events-none{pointer-events:none}.custom-fields-component .visible{visibility:visible}.custom-fields-component .sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.custom-fields-component .absolute{position:absolute}.custom-fields-component .relative{position:relative}.custom-fields-component .static{position:static}.custom-fields-component .top-1\\/2{top:50%}.custom-fields-component .right-0{right:calc(var(--spacing)*0)}.custom-fields-component .left-3{left:calc(var(--spacing)*3)}.custom-fields-component .z-50{z-index:50}.custom-fields-component .col-span-3{grid-column:span 3/span 3}.custom-fields-component .col-span-4{grid-column:span 4/span 4}.custom-fields-component .col-span-6{grid-column:span 6/span 6}.custom-fields-component .col-span-8{grid-column:span 8/span 8}.custom-fields-component .col-span-9{grid-column:span 9/span 9}.custom-fields-component .col-span-12{grid-column:span 12/span 12}.custom-fields-component .container{width:100%}@media (min-width:40rem){.custom-fields-component .container{max-width:40rem}}@media (min-width:48rem){.custom-fields-component .container{max-width:48rem}}@media (min-width:64rem){.custom-fields-component .container{max-width:64rem}}@media (min-width:80rem){.custom-fields-component .container{max-width:80rem}}@media (min-width:96rem){.custom-fields-component .container{max-width:96rem}}.custom-fields-component .-mx-1{margin-inline:calc(var(--spacing)*-1)}.custom-fields-component .mx-auto{margin-inline:auto}.custom-fields-component .mt-1{margin-top:calc(var(--spacing)*1)}.custom-fields-component .mt-6{margin-top:calc(var(--spacing)*6)}.custom-fields-component .mb-1{margin-bottom:calc(var(--spacing)*1)}.custom-fields-component .mb-2{margin-bottom:calc(var(--spacing)*2)}.custom-fields-component .mb-4{margin-bottom:calc(var(--spacing)*4)}.custom-fields-component .mb-6{margin-bottom:calc(var(--spacing)*6)}.custom-fields-component .ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.custom-fields-component .ml-2{margin-left:calc(var(--spacing)*2)}.custom-fields-component .ml-auto{margin-left:auto}.custom-fields-component .block{display:block}.custom-fields-component .flex{display:flex}.custom-fields-component .grid{display:grid}.custom-fields-component .hidden{display:none}.custom-fields-component .inline{display:inline}.custom-fields-component .inline-flex{display:inline-flex}.custom-fields-component .table{display:table}.custom-fields-component .size-3{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.custom-fields-component .size-3\\.5{height:calc(var(--spacing)*3.5);width:calc(var(--spacing)*3.5)}.custom-fields-component .size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.custom-fields-component .h-2\\.5{height:calc(var(--spacing)*2.5)}.custom-fields-component .h-3{height:calc(var(--spacing)*3)}.custom-fields-component .h-3\\.5{height:calc(var(--spacing)*3.5)}.custom-fields-component .h-4{height:calc(var(--spacing)*4)}.custom-fields-component .h-4\\.5{height:calc(var(--spacing)*4.5)}.custom-fields-component .h-5{height:calc(var(--spacing)*5)}.custom-fields-component .h-6{height:calc(var(--spacing)*6)}.custom-fields-component .h-8{height:calc(var(--spacing)*8)}.custom-fields-component .h-full{height:100%}.custom-fields-component .max-h-48{max-height:calc(var(--spacing)*48)}.custom-fields-component .max-h-60{max-height:calc(var(--spacing)*60)}.custom-fields-component .max-h-\\[280px\\]{max-height:280px}.custom-fields-component .min-h-\\[2\\.25rem\\]{min-height:2.25rem}.custom-fields-component .min-h-\\[28px\\]{min-height:28px}.custom-fields-component .min-h-\\[50px\\]{min-height:50px}.custom-fields-component .w-2\\.5{width:calc(var(--spacing)*2.5)}.custom-fields-component .w-3{width:calc(var(--spacing)*3)}.custom-fields-component .w-3\\.5{width:calc(var(--spacing)*3.5)}.custom-fields-component .w-4{width:calc(var(--spacing)*4)}.custom-fields-component .w-4\\.5{width:calc(var(--spacing)*4.5)}.custom-fields-component .w-5{width:calc(var(--spacing)*5)}.custom-fields-component .w-6{width:calc(var(--spacing)*6)}.custom-fields-component .w-8{width:calc(var(--spacing)*8)}.custom-fields-component .w-20{width:calc(var(--spacing)*20)}.custom-fields-component .w-23{width:calc(var(--spacing)*23)}.custom-fields-component .w-64{width:calc(var(--spacing)*64)}.custom-fields-component .w-\\[180px\\]{width:180px}.custom-fields-component .w-\\[220px\\]{width:220px}.custom-fields-component .w-full{width:100%}.custom-fields-component .w-px{width:1px}.custom-fields-component .max-w-\\[100px\\]{max-width:100px}.custom-fields-component .max-w-\\[120px\\]{max-width:120px}.custom-fields-component .max-w-\\[150px\\]{max-width:150px}.custom-fields-component .max-w-\\[250px\\]{max-width:250px}.custom-fields-component .max-w-full{max-width:100%}.custom-fields-component .max-w-md{max-width:var(--container-md)}.custom-fields-component .max-w-sm{max-width:var(--container-sm)}.custom-fields-component .max-w-xs{max-width:var(--container-xs)}.custom-fields-component .min-w-0{min-width:calc(var(--spacing)*0)}.custom-fields-component .min-w-48{min-width:calc(var(--spacing)*48)}.custom-fields-component .min-w-\\[600px\\]{min-width:600px}.custom-fields-component .flex-1{flex:1}.custom-fields-component .shrink-0{flex-shrink:0}.custom-fields-component .-translate-y-1\\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.custom-fields-component .rotate-180{rotate:180deg}.custom-fields-component .transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.custom-fields-component .cursor-grab{cursor:grab}.custom-fields-component .cursor-pointer{cursor:pointer}.custom-fields-component .grid-cols-\\[40px_1fr\\]{grid-template-columns:40px 1fr}.custom-fields-component .grid-cols-\\[40px_1fr_minmax\\(120px\\,160px\\)_minmax\\(100px\\,140px\\)_minmax\\(80px\\,120px\\)_50px\\]{grid-template-columns:40px 1fr minmax(120px,160px) minmax(100px,140px) minmax(80px,120px) 50px}.custom-fields-component .flex-col{flex-direction:column}.custom-fields-component .flex-wrap{flex-wrap:wrap}.custom-fields-component .items-center{align-items:center}.custom-fields-component .justify-between{justify-content:space-between}.custom-fields-component .justify-center{justify-content:center}.custom-fields-component .justify-items-center{justify-items:center}.custom-fields-component .gap-1{gap:calc(var(--spacing)*1)}.custom-fields-component .gap-1\\.5{gap:calc(var(--spacing)*1.5)}.custom-fields-component .gap-2{gap:calc(var(--spacing)*2)}.custom-fields-component .gap-4{gap:calc(var(--spacing)*4)}.custom-fields-component .gap-6{gap:calc(var(--spacing)*6)}.custom-fields-component :where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}.custom-fields-component .gap-x-1{column-gap:calc(var(--spacing)*1)}.custom-fields-component .gap-x-2{column-gap:calc(var(--spacing)*2)}.custom-fields-component .gap-x-3{column-gap:calc(var(--spacing)*3)}.custom-fields-component .gap-x-4{column-gap:calc(var(--spacing)*4)}.custom-fields-component .gap-y-1{row-gap:calc(var(--spacing)*1)}.custom-fields-component .gap-y-2{row-gap:calc(var(--spacing)*2)}.custom-fields-component .gap-y-6{row-gap:calc(var(--spacing)*6)}.custom-fields-component :where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}.custom-fields-component :where(.divide-gray-200>:not(:last-child)){border-color:var(--gray-200)}.custom-fields-component .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-fields-component .overflow-hidden{overflow:hidden}.custom-fields-component .overflow-x-auto{overflow-x:auto}.custom-fields-component .overflow-y-auto{overflow-y:auto}.custom-fields-component .rounded{border-radius:.25rem}.custom-fields-component .rounded-full{border-radius:3.40282e+38px}.custom-fields-component .rounded-lg{border-radius:var(--radius-lg)}.custom-fields-component .rounded-md{border-radius:var(--radius-md)}.custom-fields-component .rounded-xl{border-radius:var(--radius-xl)}.custom-fields-component .rounded-s-md{border-end-start-radius:var(--radius-md);border-start-start-radius:var(--radius-md)}.custom-fields-component .rounded-e-md{border-end-end-radius:var(--radius-md);border-start-end-radius:var(--radius-md)}.custom-fields-component .rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.custom-fields-component .rounded-l-lg{border-bottom-left-radius:var(--radius-lg);border-top-left-radius:var(--radius-lg)}.custom-fields-component .rounded-r{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.custom-fields-component .border{border-style:var(--tw-border-style);border-width:1px}.custom-fields-component .border-0{border-style:var(--tw-border-style);border-width:0}.custom-fields-component .border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.custom-fields-component .border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.custom-fields-component .border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.custom-fields-component .border-dashed{--tw-border-style:dashed;border-style:dashed}.custom-fields-component .border-none{--tw-border-style:none;border-style:none}.custom-fields-component .border-gray-100{border-color:var(--gray-100)}.custom-fields-component .border-gray-200{border-color:var(--gray-200)}.custom-fields-component .border-gray-300{border-color:var(--gray-300)}.custom-fields-component .border-primary-600{border-color:var(--primary-600)}.custom-fields-component .bg-gray-50{background-color:var(--gray-50)}.custom-fields-component .bg-gray-100{background-color:var(--gray-100)}.custom-fields-component .bg-gray-200{background-color:var(--gray-200)}.custom-fields-component .bg-primary-50{background-color:var(--primary-50)}.custom-fields-component .bg-primary-600{background-color:var(--primary-600)}.custom-fields-component .bg-transparent{background-color:#0000}.custom-fields-component .bg-white{background-color:var(--color-white)}.custom-fields-component .bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.custom-fields-component .from-gray-100\\/90{--tw-gradient-from:var(--gray-100)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .from-gray-100\\/90{--tw-gradient-from:color-mix(in oklab,var(--gray-100)90%,transparent)}}.custom-fields-component .from-gray-100\\/90{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.custom-fields-component .via-gray-100\\/100{--tw-gradient-via:var(--gray-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.custom-fields-component .to-gray-100{--tw-gradient-to:var(--gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.custom-fields-component .object-cover{object-fit:cover}.custom-fields-component .p-0{padding:calc(var(--spacing)*0)}.custom-fields-component .p-0\\.5{padding:calc(var(--spacing)*.5)}.custom-fields-component .p-1{padding:calc(var(--spacing)*1)}.custom-fields-component .p-3{padding:calc(var(--spacing)*3)}.custom-fields-component .p-4{padding:calc(var(--spacing)*4)}.custom-fields-component .\\!px-2{padding-inline:calc(var(--spacing)*2)!important}.custom-fields-component .px-1{padding-inline:calc(var(--spacing)*1)}.custom-fields-component .px-2{padding-inline:calc(var(--spacing)*2)}.custom-fields-component .px-3{padding-inline:calc(var(--spacing)*3)}.custom-fields-component .px-6{padding-inline:calc(var(--spacing)*6)}.custom-fields-component .\\!py-2{padding-block:calc(var(--spacing)*2)!important}.custom-fields-component .py-0\\.5{padding-block:calc(var(--spacing)*.5)}.custom-fields-component .py-1{padding-block:calc(var(--spacing)*1)}.custom-fields-component .py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.custom-fields-component .py-2{padding-block:calc(var(--spacing)*2)}.custom-fields-component .py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.custom-fields-component .py-3{padding-block:calc(var(--spacing)*3)}.custom-fields-component .py-6{padding-block:calc(var(--spacing)*6)}.custom-fields-component .py-12{padding-block:calc(var(--spacing)*12)}.custom-fields-component .py-16{padding-block:calc(var(--spacing)*16)}.custom-fields-component .pt-4{padding-top:calc(var(--spacing)*4)}.custom-fields-component .pr-1{padding-right:calc(var(--spacing)*1)}.custom-fields-component .pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.custom-fields-component .pr-3{padding-right:calc(var(--spacing)*3)}.custom-fields-component .pl-2{padding-left:calc(var(--spacing)*2)}.custom-fields-component .pl-3{padding-left:calc(var(--spacing)*3)}.custom-fields-component .pl-9{padding-left:calc(var(--spacing)*9)}.custom-fields-component .text-center{text-align:center}.custom-fields-component .text-left{text-align:left}.custom-fields-component .text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.custom-fields-component .text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.custom-fields-component .text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.custom-fields-component .text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.custom-fields-component .leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.custom-fields-component .leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.custom-fields-component .leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.custom-fields-component .font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.custom-fields-component .font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.custom-fields-component .whitespace-nowrap{white-space:nowrap}.custom-fields-component .text-gray-400{color:var(--gray-400)}.custom-fields-component .text-gray-500{color:var(--gray-500)}.custom-fields-component .text-gray-600{color:var(--gray-600)}.custom-fields-component .text-gray-700{color:var(--gray-700)}.custom-fields-component .text-gray-900{color:var(--gray-900)}.custom-fields-component .text-gray-950{color:var(--gray-950)}.custom-fields-component .text-green-500{color:var(--color-green-500)}.custom-fields-component .text-neutral-700{color:var(--color-neutral-700)}.custom-fields-component .text-primary-500{color:var(--primary-500)}.custom-fields-component .text-primary-600{color:var(--primary-600)}.custom-fields-component .text-primary-700{color:var(--primary-700)}.custom-fields-component .text-white{color:var(--color-white)}.custom-fields-component .uppercase{text-transform:uppercase}.custom-fields-component .underline{text-decoration-line:underline}.custom-fields-component .decoration-gray-300{-webkit-text-decoration-color:var(--gray-300);text-decoration-color:var(--gray-300)}.custom-fields-component .decoration-1{text-decoration-thickness:1px}.custom-fields-component .underline-offset-2{text-underline-offset:2px}.custom-fields-component .opacity-0{opacity:0}.custom-fields-component .opacity-60{opacity:.6}.custom-fields-component .opacity-70{opacity:.7}.custom-fields-component .shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.custom-fields-component .shadow-lg,.custom-fields-component .shadow-none{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .shadow-none{--tw-shadow:0 0 #0000}.custom-fields-component .shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.custom-fields-component .ring-1,.custom-fields-component .shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.custom-fields-component .ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .ring-gray-950\\/5{--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .ring-gray-950\\/5{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.custom-fields-component .ring-primary-600{--tw-ring-color:var(--primary-600)}.custom-fields-component .filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.custom-fields-component .transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.custom-fields-component .duration-75{--tw-duration:75ms;transition-duration:75ms}.custom-fields-component .duration-200{--tw-duration:.2s;transition-duration:.2s}.custom-fields-component .duration-300{--tw-duration:.3s;transition-duration:.3s}.custom-fields-component .outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.custom-fields-component .group-hover\\/item\\:opacity-100:is(:where(.group\\/item):hover *),.custom-fields-component .group-hover\\/value\\:opacity-100:is(:where(.group\\/value):hover *),.custom-fields-component .group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.custom-fields-component .placeholder\\:text-gray-400::placeholder{color:var(--gray-400)}.custom-fields-component .first\\:rounded-t-lg:first-child{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.custom-fields-component .last\\:rounded-b-lg:last-child{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.custom-fields-component .last\\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.custom-fields-component .hover\\:border-gray-400:hover{border-color:var(--gray-400)}.custom-fields-component .hover\\:bg-danger-50:hover{background-color:var(--danger-50)}.custom-fields-component .hover\\:bg-gray-50:hover{background-color:var(--gray-50)}.custom-fields-component .hover\\:bg-gray-100:hover{background-color:var(--gray-100)}.custom-fields-component .hover\\:bg-gray-300:hover{background-color:var(--gray-300)}.custom-fields-component .hover\\:bg-primary-50:hover{background-color:var(--primary-50)}.custom-fields-component .hover\\:bg-primary-600\\/80:hover{background-color:var(--primary-600)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .hover\\:bg-primary-600\\/80:hover{background-color:color-mix(in oklab,var(--primary-600)80%,transparent)}}.custom-fields-component .hover\\:text-danger-500:hover{color:var(--danger-500)}.custom-fields-component .hover\\:text-gray-500:hover{color:var(--gray-500)}.custom-fields-component .hover\\:text-gray-600:hover{color:var(--gray-600)}.custom-fields-component .hover\\:text-primary-600:hover{color:var(--primary-600)}}.custom-fields-component .focus\\:opacity-100:focus{opacity:1}.custom-fields-component .focus\\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.custom-fields-component .focus\\:ring-0:focus,.custom-fields-component .focus\\:ring-2:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.custom-fields-component .focus\\:ring-primary-500:focus{--tw-ring-color:var(--primary-500)}.custom-fields-component .focus\\:ring-offset-1:focus{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.custom-fields-component .focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.custom-fields-component .focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.custom-fields-component .focus-visible\\:ring-primary-500:focus-visible{--tw-ring-color:var(--primary-500)}.custom-fields-component .focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.custom-fields-component .active\\:cursor-grabbing:active{cursor:grabbing}.custom-fields-component .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.custom-fields-component .disabled\\:text-gray-500:disabled{color:var(--gray-500)}.custom-fields-component .disabled\\:opacity-50:disabled{opacity:.5}@media (hover:hover){.custom-fields-component .disabled\\:hover\\:bg-transparent:disabled:hover{background-color:#0000}}@media (min-width:40rem){.custom-fields-component .sm\\:flex-row{flex-direction:row}.custom-fields-component .sm\\:items-center{align-items:center}.custom-fields-component .sm\\:justify-between{justify-content:space-between}}.custom-fields-component :where(.dark\\:divide-white\\/10:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component :where(.dark\\:divide-white\\/10:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .dark\\:border-gray-600:where(.dark,.dark *){border-color:var(--gray-600)}.custom-fields-component .dark\\:border-gray-800:where(.dark,.dark *){border-color:var(--gray-800)}.custom-fields-component .dark\\:border-primary-500:where(.dark,.dark *){border-color:var(--primary-500)}.custom-fields-component .dark\\:border-white\\/10:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:border-white\\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .dark\\:bg-gray-700:where(.dark,.dark *){background-color:var(--gray-700)}.custom-fields-component .dark\\:bg-gray-800:where(.dark,.dark *),.custom-fields-component .dark\\:bg-gray-800\\/50:where(.dark,.dark *){background-color:var(--gray-800)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:bg-gray-800\\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-800)50%,transparent)}}.custom-fields-component .dark\\:bg-gray-900:where(.dark,.dark *){background-color:var(--gray-900)}.custom-fields-component .dark\\:bg-primary-500:where(.dark,.dark *),.custom-fields-component .dark\\:bg-primary-500\\/10:where(.dark,.dark *){background-color:var(--primary-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:bg-primary-500\\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--primary-500)10%,transparent)}}.custom-fields-component .dark\\:bg-primary-950\\/50:where(.dark,.dark *){background-color:var(--primary-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:bg-primary-950\\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--primary-950)50%,transparent)}}.custom-fields-component .dark\\:bg-white\\/5:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:bg-white\\/5:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .dark\\:from-gray-700\\/0:where(.dark,.dark *){--tw-gradient-from:var(--gray-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:from-gray-700\\/0:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--gray-700)0%,transparent)}}.custom-fields-component .dark\\:from-gray-700\\/0:where(.dark,.dark *){--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.custom-fields-component .dark\\:from-gray-800\\/0:where(.dark,.dark *){--tw-gradient-from:var(--gray-800)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:from-gray-800\\/0:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--gray-800)0%,transparent)}}.custom-fields-component .dark\\:from-gray-800\\/0:where(.dark,.dark *){--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.custom-fields-component .dark\\:via-gray-700\\/70:where(.dark,.dark *){--tw-gradient-via:var(--gray-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:via-gray-700\\/70:where(.dark,.dark *){--tw-gradient-via:color-mix(in oklab,var(--gray-700)70%,transparent)}}.custom-fields-component .dark\\:via-gray-700\\/70:where(.dark,.dark *){--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.custom-fields-component .dark\\:via-gray-800\\/70:where(.dark,.dark *){--tw-gradient-via:var(--gray-800)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:via-gray-800\\/70:where(.dark,.dark *){--tw-gradient-via:color-mix(in oklab,var(--gray-800)70%,transparent)}}.custom-fields-component .dark\\:via-gray-800\\/70:where(.dark,.dark *){--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.custom-fields-component .dark\\:to-gray-700:where(.dark,.dark *){--tw-gradient-to:var(--gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.custom-fields-component .dark\\:to-gray-800:where(.dark,.dark *){--tw-gradient-to:var(--gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.custom-fields-component .dark\\:text-gray-100:where(.dark,.dark *){color:var(--gray-100)}.custom-fields-component .dark\\:text-gray-200:where(.dark,.dark *){color:var(--gray-200)}.custom-fields-component .dark\\:text-gray-300:where(.dark,.dark *){color:var(--gray-300)}.custom-fields-component .dark\\:text-gray-400:where(.dark,.dark *){color:var(--gray-400)}.custom-fields-component .dark\\:text-gray-500:where(.dark,.dark *){color:var(--gray-500)}.custom-fields-component .dark\\:text-neutral-400:where(.dark,.dark *){color:var(--color-neutral-400)}.custom-fields-component .dark\\:text-primary-400:where(.dark,.dark *){color:var(--primary-400)}.custom-fields-component .dark\\:text-white:where(.dark,.dark *){color:var(--color-white)}.custom-fields-component .dark\\:decoration-gray-600:where(.dark,.dark *){-webkit-text-decoration-color:var(--gray-600);text-decoration-color:var(--gray-600)}.custom-fields-component .dark\\:ring-primary-500:where(.dark,.dark *){--tw-ring-color:var(--primary-500)}.custom-fields-component .dark\\:ring-white\\/10:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:ring-white\\/10:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .dark\\:placeholder\\:text-gray-500:where(.dark,.dark *)::placeholder{color:var(--gray-500)}@media (hover:hover){.custom-fields-component .dark\\:hover\\:bg-danger-500\\/10:where(.dark,.dark *):hover{background-color:var(--danger-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:hover\\:bg-danger-500\\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--danger-500)10%,transparent)}}.custom-fields-component .dark\\:hover\\:bg-gray-600:where(.dark,.dark *):hover{background-color:var(--gray-600)}.custom-fields-component .dark\\:hover\\:bg-gray-700:where(.dark,.dark *):hover{background-color:var(--gray-700)}.custom-fields-component .dark\\:hover\\:bg-gray-800:where(.dark,.dark *):hover,.custom-fields-component .dark\\:hover\\:bg-gray-800\\/50:where(.dark,.dark *):hover{background-color:var(--gray-800)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:hover\\:bg-gray-800\\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--gray-800)50%,transparent)}}.custom-fields-component .dark\\:hover\\:bg-primary-500\\/10:where(.dark,.dark *):hover{background-color:var(--primary-500)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:hover\\:bg-primary-500\\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--primary-500)10%,transparent)}}.custom-fields-component .dark\\:hover\\:bg-white\\/5:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .dark\\:hover\\:bg-white\\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.custom-fields-component .dark\\:hover\\:text-gray-300:where(.dark,.dark *):hover{color:var(--gray-300)}}.custom-fields-component .dark\\:disabled\\:text-gray-400:where(.dark,.dark *):disabled{color:var(--gray-400)}.custom-fields-component .\\[\\&_\\.fi-badge\\]\\:ml-auto .fi-badge{margin-left:auto}.custom-fields-component .\\[\\&\\:\\:-webkit-scrollbar\\]\\:w-1\\.5::-webkit-scrollbar{width:calc(var(--spacing)*1.5)}.custom-fields-component .\\[\\&\\:\\:-webkit-scrollbar-thumb\\]\\:rounded-full::-webkit-scrollbar-thumb{border-radius:3.40282e+38px}.custom-fields-component .\\[\\&\\:\\:-webkit-scrollbar-thumb\\]\\:bg-gray-300::-webkit-scrollbar-thumb{background-color:var(--gray-300)}.custom-fields-component .dark\\:\\[\\&\\:\\:-webkit-scrollbar-thumb\\]\\:bg-gray-600:where(.dark,.dark *)::-webkit-scrollbar-thumb{background-color:var(--gray-600)}.custom-fields-component .fi-color-danger{--color-50:var(--danger-50);--color-100:var(--danger-100);--color-200:var(--danger-200);--color-300:var(--danger-300);--color-400:var(--danger-400);--color-500:var(--danger-500);--color-600:var(--danger-600);--color-700:var(--danger-700);--color-800:var(--danger-800);--color-900:var(--danger-900);--color-950:var(--danger-950)}.custom-fields-component .fi-color-gray{--color-50:var(--gray-50);--color-100:var(--gray-100);--color-200:var(--gray-200);--color-300:var(--gray-300);--color-400:var(--gray-400);--color-500:var(--gray-500);--color-600:var(--gray-600);--color-700:var(--gray-700);--color-800:var(--gray-800);--color-900:var(--gray-900);--color-950:var(--gray-950)}.custom-fields-component .fi-color-info{--color-50:var(--info-50);--color-100:var(--info-100);--color-200:var(--info-200);--color-300:var(--info-300);--color-400:var(--info-400);--color-500:var(--info-500);--color-600:var(--info-600);--color-700:var(--info-700);--color-800:var(--info-800);--color-900:var(--info-900);--color-950:var(--info-950)}.custom-fields-component .fi-color-primary{--color-50:var(--primary-50);--color-100:var(--primary-100);--color-200:var(--primary-200);--color-300:var(--primary-300);--color-400:var(--primary-400);--color-500:var(--primary-500);--color-600:var(--primary-600);--color-700:var(--primary-700);--color-800:var(--primary-800);--color-900:var(--primary-900);--color-950:var(--primary-950)}.custom-fields-component .fi-color-success{--color-50:var(--success-50);--color-100:var(--success-100);--color-200:var(--success-200);--color-300:var(--success-300);--color-400:var(--success-400);--color-500:var(--success-500);--color-600:var(--success-600);--color-700:var(--success-700);--color-800:var(--success-800);--color-900:var(--success-900);--color-950:var(--success-950)}.custom-fields-component .fi-color-warning{--color-50:var(--warning-50);--color-100:var(--warning-100);--color-200:var(--warning-200);--color-300:var(--warning-300);--color-400:var(--warning-400);--color-500:var(--warning-500);--color-600:var(--warning-600);--color-700:var(--warning-700);--color-800:var(--warning-800);--color-900:var(--warning-900);--color-950:var(--warning-950)}.custom-fields-component .fi-bg-color-50{--bg:var(--color-50)}.custom-fields-component .fi-bg-color-100{--bg:var(--color-100)}.custom-fields-component .fi-bg-color-200{--bg:var(--color-200)}.custom-fields-component .fi-bg-color-300{--bg:var(--color-300)}.custom-fields-component .fi-bg-color-400{--bg:var(--color-400)}.custom-fields-component .fi-bg-color-500{--bg:var(--color-500)}.custom-fields-component .fi-bg-color-600{--bg:var(--color-600)}.custom-fields-component .fi-bg-color-700{--bg:var(--color-700)}.custom-fields-component .fi-bg-color-800{--bg:var(--color-800)}.custom-fields-component .fi-bg-color-900{--bg:var(--color-900)}.custom-fields-component .fi-bg-color-950{--bg:var(--color-950)}.custom-fields-component .hover\\:fi-bg-color-50{--hover-bg:var(--color-50)}.custom-fields-component .hover\\:fi-bg-color-100{--hover-bg:var(--color-100)}.custom-fields-component .hover\\:fi-bg-color-200{--hover-bg:var(--color-200)}.custom-fields-component .hover\\:fi-bg-color-300{--hover-bg:var(--color-300)}.custom-fields-component .hover\\:fi-bg-color-400{--hover-bg:var(--color-400)}.custom-fields-component .hover\\:fi-bg-color-500{--hover-bg:var(--color-500)}.custom-fields-component .hover\\:fi-bg-color-600{--hover-bg:var(--color-600)}.custom-fields-component .hover\\:fi-bg-color-700{--hover-bg:var(--color-700)}.custom-fields-component .hover\\:fi-bg-color-800{--hover-bg:var(--color-800)}.custom-fields-component .hover\\:fi-bg-color-900{--hover-bg:var(--color-900)}.custom-fields-component .hover\\:fi-bg-color-950{--hover-bg:var(--color-950)}.custom-fields-component .dark\\:fi-bg-color-50{--dark-bg:var(--color-50)}.custom-fields-component .dark\\:fi-bg-color-100{--dark-bg:var(--color-100)}.custom-fields-component .dark\\:fi-bg-color-200{--dark-bg:var(--color-200)}.custom-fields-component .dark\\:fi-bg-color-300{--dark-bg:var(--color-300)}.custom-fields-component .dark\\:fi-bg-color-400{--dark-bg:var(--color-400)}.custom-fields-component .dark\\:fi-bg-color-500{--dark-bg:var(--color-500)}.custom-fields-component .dark\\:fi-bg-color-600{--dark-bg:var(--color-600)}.custom-fields-component .dark\\:fi-bg-color-700{--dark-bg:var(--color-700)}.custom-fields-component .dark\\:fi-bg-color-800{--dark-bg:var(--color-800)}.custom-fields-component .dark\\:fi-bg-color-900{--dark-bg:var(--color-900)}.custom-fields-component .dark\\:fi-bg-color-950{--dark-bg:var(--color-950)}.custom-fields-component .dark\\:hover\\:fi-bg-color-50{--dark-hover-bg:var(--color-50)}.custom-fields-component .dark\\:hover\\:fi-bg-color-100{--dark-hover-bg:var(--color-100)}.custom-fields-component .dark\\:hover\\:fi-bg-color-200{--dark-hover-bg:var(--color-200)}.custom-fields-component .dark\\:hover\\:fi-bg-color-300{--dark-hover-bg:var(--color-300)}.custom-fields-component .dark\\:hover\\:fi-bg-color-400{--dark-hover-bg:var(--color-400)}.custom-fields-component .dark\\:hover\\:fi-bg-color-500{--dark-hover-bg:var(--color-500)}.custom-fields-component .dark\\:hover\\:fi-bg-color-600{--dark-hover-bg:var(--color-600)}.custom-fields-component .dark\\:hover\\:fi-bg-color-700{--dark-hover-bg:var(--color-700)}.custom-fields-component .dark\\:hover\\:fi-bg-color-800{--dark-hover-bg:var(--color-800)}.custom-fields-component .dark\\:hover\\:fi-bg-color-900{--dark-hover-bg:var(--color-900)}.custom-fields-component .dark\\:hover\\:fi-bg-color-950{--dark-hover-bg:var(--color-950)}.custom-fields-component .fi-text-color-0{--text:oklch(100% 0 0)}.custom-fields-component .fi-text-color-50{--text:var(--color-50)}.custom-fields-component .fi-text-color-100{--text:var(--color-100)}.custom-fields-component .fi-text-color-200{--text:var(--color-200)}.custom-fields-component .fi-text-color-300{--text:var(--color-300)}.custom-fields-component .fi-text-color-400{--text:var(--color-400)}.custom-fields-component .fi-text-color-500{--text:var(--color-500)}.custom-fields-component .fi-text-color-600{--text:var(--color-600)}.custom-fields-component .fi-text-color-700{--text:var(--color-700)}.custom-fields-component .fi-text-color-800{--text:var(--color-800)}.custom-fields-component .fi-text-color-900{--text:var(--color-900)}.custom-fields-component .fi-text-color-950{--text:var(--color-950)}.custom-fields-component .hover\\:fi-text-color-0{--hover-text:oklch(100% 0 0)}.custom-fields-component .hover\\:fi-text-color-50{--hover-text:var(--color-50)}.custom-fields-component .hover\\:fi-text-color-100{--hover-text:var(--color-100)}.custom-fields-component .hover\\:fi-text-color-200{--hover-text:var(--color-200)}.custom-fields-component .hover\\:fi-text-color-300{--hover-text:var(--color-300)}.custom-fields-component .hover\\:fi-text-color-400{--hover-text:var(--color-400)}.custom-fields-component .hover\\:fi-text-color-500{--hover-text:var(--color-500)}.custom-fields-component .hover\\:fi-text-color-600{--hover-text:var(--color-600)}.custom-fields-component .hover\\:fi-text-color-700{--hover-text:var(--color-700)}.custom-fields-component .hover\\:fi-text-color-800{--hover-text:var(--color-800)}.custom-fields-component .hover\\:fi-text-color-900{--hover-text:var(--color-900)}.custom-fields-component .hover\\:fi-text-color-950{--hover-text:var(--color-950)}.custom-fields-component .dark\\:fi-text-color-0{--dark-text:oklch(100% 0 0)}.custom-fields-component .dark\\:fi-text-color-50{--dark-text:var(--color-50)}.custom-fields-component .dark\\:fi-text-color-100{--dark-text:var(--color-100)}.custom-fields-component .dark\\:fi-text-color-200{--dark-text:var(--color-200)}.custom-fields-component .dark\\:fi-text-color-300{--dark-text:var(--color-300)}.custom-fields-component .dark\\:fi-text-color-400{--dark-text:var(--color-400)}.custom-fields-component .dark\\:fi-text-color-500{--dark-text:var(--color-500)}.custom-fields-component .dark\\:fi-text-color-600{--dark-text:var(--color-600)}.custom-fields-component .dark\\:fi-text-color-700{--dark-text:var(--color-700)}.custom-fields-component .dark\\:fi-text-color-800{--dark-text:var(--color-800)}.custom-fields-component .dark\\:fi-text-color-900{--dark-text:var(--color-900)}.custom-fields-component .dark\\:fi-text-color-950{--dark-text:var(--color-950)}.custom-fields-component .dark\\:hover\\:fi-text-color-0{--dark-hover-text:oklch(100% 0 0)}.custom-fields-component .dark\\:hover\\:fi-text-color-50{--dark-hover-text:var(--color-50)}.custom-fields-component .dark\\:hover\\:fi-text-color-100{--dark-hover-text:var(--color-100)}.custom-fields-component .dark\\:hover\\:fi-text-color-200{--dark-hover-text:var(--color-200)}.custom-fields-component .dark\\:hover\\:fi-text-color-300{--dark-hover-text:var(--color-300)}.custom-fields-component .dark\\:hover\\:fi-text-color-400{--dark-hover-text:var(--color-400)}.custom-fields-component .dark\\:hover\\:fi-text-color-500{--dark-hover-text:var(--color-500)}.custom-fields-component .dark\\:hover\\:fi-text-color-600{--dark-hover-text:var(--color-600)}.custom-fields-component .dark\\:hover\\:fi-text-color-700{--dark-hover-text:var(--color-700)}.custom-fields-component .dark\\:hover\\:fi-text-color-800{--dark-hover-text:var(--color-800)}.custom-fields-component .dark\\:hover\\:fi-text-color-900{--dark-hover-text:var(--color-900)}.custom-fields-component .dark\\:hover\\:fi-text-color-950{--dark-hover-text:var(--color-950)}.custom-fields-component .fi-sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.custom-fields-component .fi-prose{--prose-color:var(--color-gray-700);--prose-heading-color:var(--color-gray-950);--prose-strong-color:var(--color-gray-950);--prose-link-color:var(--color-gray-950);--prose-code-color:var(--color-gray-950);--prose-marker-color:var(--color-gray-700)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-prose{--prose-marker-color:color-mix(in oklab,var(--color-gray-700)25%,transparent)}}.custom-fields-component .fi-prose{--prose-link-underline-color:var(--color-primary-400);--prose-th-borders:var(--color-gray-300);--prose-td-borders:var(--color-gray-200);--prose-hr-color:var(--color-gray-950)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-prose{--prose-hr-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.custom-fields-component .fi-prose{--prose-blockquote-border-color:var(--color-gray-300);--prose-pre-bg:var(--color-gray-100)}.custom-fields-component .fi-prose:where(.dark,.dark *){--prose-color:var(--color-gray-300);--prose-heading-color:var(--color-white);--prose-strong-color:var(--color-white);--prose-link-color:var(--color-white);--prose-code-color:var(--color-white);--prose-marker-color:var(--color-gray-300)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-prose:where(.dark,.dark *){--prose-marker-color:color-mix(in oklab,var(--color-gray-300)35%,transparent)}}.custom-fields-component .fi-prose:where(.dark,.dark *){--prose-link-underline-color:var(--color-sky-400);--prose-th-borders:var(--color-gray-600);--prose-td-borders:var(--color-gray-700);--prose-hr-color:oklab(100% 0 5.96046e-8/.1)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-prose:where(.dark,.dark *){--prose-hr-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.custom-fields-component .fi-prose:where(.dark,.dark *){--prose-blockquote-border-color:var(--color-gray-600);--prose-pre-bg:var(--color-gray-900)}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-prose:where(.dark,.dark *){--prose-pre-bg:color-mix(in oklab,var(--color-gray-900)40%,transparent)}}.custom-fields-component .fi-prose{color:var(--prose-color);font-size:var(--text-sm);line-height:1.5}.custom-fields-component .fi-prose img+img{margin-top:0}.custom-fields-component .fi-prose :where(:not(.fi-not-prose,.fi-not-prose *,br))+:where(:not(.fi-not-prose,.fi-not-prose *,br)){margin-top:calc(var(--spacing)*4)}.custom-fields-component .fi-prose p br{margin:0}.custom-fields-component .fi-prose h1:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-code-color);font-size:var(--text-xl);font-weight:var(--font-weight-bold);letter-spacing:-.025em;line-height:1.55556}.custom-fields-component .fi-prose h2:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-code-color);font-size:var(--text-lg);font-weight:var(--font-weight-semibold);letter-spacing:-.025em;line-height:1.55556}.custom-fields-component .fi-prose h3:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-heading-color);font-size:var(--text-base);font-weight:var(--font-weight-semibold);line-height:1.55556}.custom-fields-component .fi-prose h4:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose h5:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose h6:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-heading-color);font-size:var(--text-sm);font-weight:var(--font-weight-semibold);line-height:2}.custom-fields-component .fi-prose :is(h2,h3,h4,h5,h6):where(:not(.fi-not-prose,.fi-not-prose *)){scroll-margin-top:calc(var(--spacing)*32)}@media (min-width:64rem){.custom-fields-component .fi-prose :is(h2,h3,h4,h5,h6):where(:not(.fi-not-prose,.fi-not-prose *)){scroll-margin-top:calc(var(--spacing)*18)}}.custom-fields-component .fi-prose ol:where(:not(.fi-not-prose,.fi-not-prose *)){list-style-type:decimal;padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-prose ul:where(:not(.fi-not-prose,.fi-not-prose *)){list-style-type:disc;padding-inline-start:calc(var(--spacing)*6)}.custom-fields-component .fi-prose ol li:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose ul li:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*3)}.custom-fields-component .fi-prose ol li+li:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose ul li+li:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*4)}.custom-fields-component .fi-prose ol li:where(:not(.fi-not-prose,.fi-not-prose *))::marker{color:var(--prose-marker-color)}.custom-fields-component .fi-prose ul li:where(:not(.fi-not-prose,.fi-not-prose *))::marker{color:var(--prose-marker-color)}.custom-fields-component .fi-prose a:not(:where(:is(h2,h3,h4,h5,h6) *)):where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-link-color);font-weight:var(--font-weight-semibold);text-decoration:underline;-webkit-text-decoration-color:var(--prose-link-underline-color);text-decoration-color:var(--prose-link-underline-color);text-decoration-thickness:1px;text-underline-offset:3px}.custom-fields-component .fi-prose a:not(:where(:is(h2,h3,h4,h5,h6) *)):where(:not(.fi-not-prose,.fi-not-prose *)) code{font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-prose a:hover:where(:not(.fi-not-prose,.fi-not-prose *)){text-decoration-thickness:2px}.custom-fields-component .fi-prose strong:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-strong-color);font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-code-color);font-family:var(--font-mono);font-variant-ligatures:none;font-weight:var(--font-weight-medium)}.custom-fields-component .fi-prose :where(h2,h3,h4,h5,h6) code:where(:not(.fi-not-prose,.fi-not-prose *)){font-weight:var(--font-weight-semibold)}.custom-fields-component .fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)):after,.custom-fields-component .fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)):before{content:\"`\";display:inline}.custom-fields-component .fi-prose pre:where(:not(.fi-not-prose,.fi-not-prose *)){background-color:var(--prose-pre-bg);border-radius:var(--radius-lg);margin-bottom:calc(var(--spacing)*10);margin-top:calc(var(--spacing)*4);padding-inline-end:calc(var(--spacing)*4);padding-bottom:calc(var(--spacing)*3);padding-top:calc(var(--spacing)*3);padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-prose pre code *+:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:0}.custom-fields-component .fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)):after,.custom-fields-component .fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)):before{content:none}.custom-fields-component .fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)){font-family:var(--font-mono);font-size:var(--text-sm);font-variant-ligatures:none;line-height:2}.custom-fields-component .fi-prose table:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-sm);line-height:1.4;margin-bottom:2em;margin-top:2em;table-layout:auto;width:100%}.custom-fields-component .fi-prose thead:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-color:var(--prose-th-borders);border-bottom-width:1px}.custom-fields-component .fi-prose thead th:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-heading-color);font-weight:600;padding-inline-end:.6em;padding-bottom:.8em;padding-inline-start:.6em;vertical-align:bottom}.custom-fields-component .fi-prose thead th:first-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:0}.custom-fields-component .fi-prose thead th:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:0}.custom-fields-component .fi-prose tbody tr:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-color:var(--prose-td-borders);border-bottom-width:1px}.custom-fields-component .fi-prose tbody tr:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:0}.custom-fields-component .fi-prose tbody td:where(:not(.fi-not-prose,.fi-not-prose *)){vertical-align:baseline}.custom-fields-component .fi-prose tfoot:where(:not(.fi-not-prose,.fi-not-prose *)){border-top-color:var(--prose-th-borders);border-top-width:1px}.custom-fields-component .fi-prose tfoot td:where(:not(.fi-not-prose,.fi-not-prose *)){vertical-align:top}.custom-fields-component .fi-prose tbody td:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose tfoot td:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:.6em;padding-bottom:.8em;padding-top:.8em;padding-inline-start:.6em}.custom-fields-component .fi-prose tbody td:first-child:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose tfoot td:first-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:0}.custom-fields-component .fi-prose tbody td:last-child:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose tfoot td:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:0}.custom-fields-component .fi-prose td:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose th:where(:not(.fi-not-prose,.fi-not-prose *)){text-align:start}.custom-fields-component .fi-prose td code:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:.8125rem}.custom-fields-component .fi-prose hr:where(:not(.fi-not-prose,.fi-not-prose *)){border-color:var(--prose-hr-color);margin-block:calc(var(--spacing)*8)}.custom-fields-component .fi-prose hr:where(:not(.fi-not-prose,.fi-not-prose *))+h2{margin-top:calc(var(--spacing)*8)}.custom-fields-component .fi-prose blockquote{border-inline-start-color:var(--prose-blockquote-border-color);border-inline-start-width:.25rem;font-style:italic;padding-inline-start:calc(var(--spacing)*4)}.custom-fields-component .fi-prose blockquote p:first-of-type:before{content:open-quote}.custom-fields-component .fi-prose blockquote p:last-of-type:after{content:close-quote}.custom-fields-component .fi-prose figure:where(:not(.fi-not-prose,.fi-not-prose *)) figcaption:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-color);font-size:var(--text-sm);font-style:italic;line-height:var(--text-sm--line-height);margin-top:calc(var(--spacing)*3);text-align:center}@supports (color:color-mix(in lab,red,red)){.custom-fields-component .fi-prose figure:where(:not(.fi-not-prose,.fi-not-prose *)) figcaption:where(:not(.fi-not-prose,.fi-not-prose *)){color:color-mix(in oklab,var(--prose-color)75%,transparent)}}.custom-fields-component .fi-prose :first-child:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:0}.custom-fields-component .fi-prose :last-child:where(:not(.fi-not-prose,.fi-not-prose *)){margin-bottom:0}.custom-fields-component .fi-prose .color:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--color)}.custom-fields-component .fi-prose .color:where(:not(.fi-not-prose,.fi-not-prose *)):where(.dark,.dark *){color:var(--dark-color)}.custom-fields-component .fi-prose .lead:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-base)}.custom-fields-component .fi-prose a[data-type=mention]:where(:not(.fi-not-prose,.fi-not-prose *)),.custom-fields-component .fi-prose span[data-type=mention]:where(:not(.fi-not-prose,.fi-not-prose *)){display:inline-block;font-weight:var(--font-weight-semibold);margin-block:0;white-space:nowrap}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *)){display:grid;gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr))}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=default]{grid-template-columns:var(--cols)}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=default]>.grid-layout-col{grid-column:var(--col-span)}@media (min-width:40rem){.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=sm]{grid-template-columns:var(--cols)}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=sm]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:48rem){.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=md]{grid-template-columns:var(--cols)}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=md]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:64rem){.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=lg]{grid-template-columns:var(--cols)}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=lg]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:80rem){.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=xl]{grid-template-columns:var(--cols)}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=xl]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:96rem){.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=\"2xl\"]{grid-template-columns:var(--cols)}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=\"2xl\"]>.grid-layout-col{grid-column:var(--col-span)}}.custom-fields-component .fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))>.grid-layout-col{margin-top:0;min-width:0}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-divide-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}"
  },
  {
    "path": "public/css/relaticle/flowforge/flowforge.css",
    "content": "/*! tailwindcss v4.1.10 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-font-weight:initial;--tw-leading:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-200:oklch(93.8% .127 124.321);--color-lime-800:oklch(45.3% .124 130.933);--color-lime-900:oklch(40.5% .101 131.063);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-800:oklch(45% .085 224.283);--color-cyan-900:oklch(39.8% .07 227.392);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-800:oklch(39.8% .195 277.366);--color-indigo-900:oklch(35.9% .144 278.697);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-800:oklch(45.2% .211 324.591);--color-fuchsia-900:oklch(40.1% .17 325.612);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-200:oklch(89.9% .061 343.231);--color-pink-800:oklch(45.9% .187 3.815);--color-pink-900:oklch(40.8% .153 2.432);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-200:var(--gray-200);--color-gray-300:var(--gray-300);--color-gray-400:var(--gray-400);--color-gray-500:var(--gray-500);--color-gray-600:var(--gray-600);--color-gray-700:var(--gray-700);--color-gray-950:var(--gray-950);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-400:var(--primary-400)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.contents{display:contents}.h-\\[calc\\(100vh-12rem\\)\\]{height:calc(100vh - 12rem)}.opacity-75{opacity:.75}@media (prefers-color-scheme:dark){.dark\\:text-primary-400{color:var(--primary-400)}}}.ff-card{margin-bottom:calc(var(--spacing)*3);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s;overflow:hidden}@media (hover:hover){.ff-card:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media (prefers-color-scheme:dark){.ff-card{border-color:var(--gray-800);background-color:var(--gray-900)}}.ff-card .ff-card__content{padding:calc(var(--spacing)*3)}.ff-card .ff-card__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-900)}@media (prefers-color-scheme:dark){.ff-card .ff-card__title{color:var(--color-white)}}.ff-card .ff-card__description{margin-top:calc(var(--spacing)*1);-webkit-line-clamp:2;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-500);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}@media (prefers-color-scheme:dark){.ff-card .ff-card__description{color:var(--gray-400)}}.ff-card .ff-card__attributes{margin-top:calc(var(--spacing)*3);gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.ff-card.ff-card--interactive{cursor:pointer}.ff-card.ff-card--non-interactive{cursor:default}.ff-badge{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;align-items:center;transition-duration:.15s;display:inline-flex}.ff-badge.ff-badge--sm{padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*0);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.ff-badge.ff-badge--md{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.ff-badge.ff-badge--lg{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.ff-badge.ff-badge--rounded-md{border-radius:var(--radius-md)}.ff-badge.ff-badge--rounded-full{border-radius:3.40282e38px}.ff-badge .ff-badge__label{margin-right:calc(var(--spacing)*.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.ff-badge .ff-badge__count{margin-left:calc(var(--spacing)*1.5);height:calc(var(--spacing)*4);width:calc(var(--spacing)*4);background-color:#ffffff4d;border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.ff-badge .ff-badge__count{background-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.ff-badge .ff-badge__count{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;line-height:1}.ff-badge .ff-badge__icon{flex-shrink:0}.ff-badge .ff-badge__icon.ff-badge__icon--sm{margin-right:calc(var(--spacing)*1);height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.ff-badge .ff-badge__icon.ff-badge__icon--md{margin-right:calc(var(--spacing)*1.5);height:calc(var(--spacing)*3.5);width:calc(var(--spacing)*3.5)}.ff-badge .ff-badge__icon.ff-badge__icon--lg{margin-right:calc(var(--spacing)*1.5);height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.ff-column{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);width:300px;min-width:300px;max-height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}@media (prefers-color-scheme:dark){.ff-column{border-color:var(--gray-700);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.ff-column .ff-column__header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);justify-content:space-between;align-items:center;display:flex}@media (prefers-color-scheme:dark){.ff-column .ff-column__header{border-color:var(--gray-700)}}.ff-column .ff-column__title-container{align-items:center;display:flex}.ff-column .ff-column__title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}@media (prefers-color-scheme:dark){.ff-column .ff-column__title{color:var(--gray-200)}}.ff-column .ff-column__count{margin-left:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-radius:3.40282e38px;align-items:center;display:inline-flex}.ff-column .ff-column__content{padding:calc(var(--spacing)*3);flex:1;max-height:calc(100vh - 13rem);overflow:hidden auto}.ff-column .ff-column__loader{padding-block:calc(var(--spacing)*3);text-align:center}.ff-column .ff-column__loading-text{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--primary-600)}@media (prefers-color-scheme:dark){.ff-column .ff-column__loading-text{color:var(--primary-400)}}.ff-column .ff-column__count-text{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-400)}.ff-empty-column{border-radius:var(--radius-lg);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--gray-200);height:100%;min-height:150px;padding:calc(var(--spacing)*3);flex-direction:column;justify-content:center;align-items:center;display:flex}@media (prefers-color-scheme:dark){.ff-empty-column{border-color:var(--gray-800)}}.ff-empty-column .ff-empty-column__icon{margin-bottom:calc(var(--spacing)*2);height:calc(var(--spacing)*10);width:calc(var(--spacing)*10);color:var(--gray-400)}@media (prefers-color-scheme:dark){.ff-empty-column .ff-empty-column__icon{color:var(--gray-600)}}.ff-empty-column .ff-empty-column__text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}@media (prefers-color-scheme:dark){.ff-empty-column .ff-empty-column__text{color:var(--gray-400)}}.ff-board{flex-direction:column;width:100%;height:100%;display:flex;position:relative}.ff-board .ff-board__content{flex:1;overflow:hidden}.ff-board .ff-board__columns{gap:calc(var(--spacing)*5);height:100%;padding-inline:calc(var(--spacing)*2);padding-bottom:calc(var(--spacing)*4);flex-direction:row;display:flex;overflow:auto hidden}.kanban-color-default{border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);background-color:var(--gray-100);color:var(--gray-800)}@media (hover:hover){.kanban-color-default:hover{background-color:var(--gray-200)}}@media (prefers-color-scheme:dark){.kanban-color-default{border-color:var(--gray-600);background-color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.kanban-color-default{background-color:color-mix(in oklab,var(--gray-700) 60%,transparent)}}.kanban-color-default{color:var(--gray-200)}@media (hover:hover){.kanban-color-default:hover{background-color:var(--gray-700)}}}.kanban-color-white{border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);background-color:var(--color-white);color:var(--gray-800)}@media (hover:hover){.kanban-color-white:hover{background-color:var(--gray-100)}}@media (prefers-color-scheme:dark){.kanban-color-white{border-color:var(--gray-600);background-color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.kanban-color-white{background-color:color-mix(in oklab,var(--gray-700) 60%,transparent)}}.kanban-color-white{color:var(--gray-200)}@media (hover:hover){.kanban-color-white:hover{background-color:var(--gray-700)}}}.kanban-color-slate{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-slate-200);background-color:var(--color-slate-100);color:var(--color-slate-800)}@media (hover:hover){.kanban-color-slate:hover{background-color:var(--color-slate-200)}}@media (prefers-color-scheme:dark){.kanban-color-slate{border-color:var(--color-slate-600);background-color:#31415899}@supports (color:color-mix(in lab, red, red)){.kanban-color-slate{background-color:color-mix(in oklab,var(--color-slate-700) 60%,transparent)}}.kanban-color-slate{color:var(--color-slate-200)}@media (hover:hover){.kanban-color-slate:hover{background-color:var(--color-slate-700)}}}.kanban-color-gray{border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);background-color:var(--gray-100);color:var(--gray-800)}@media (hover:hover){.kanban-color-gray:hover{background-color:var(--gray-200)}}@media (prefers-color-scheme:dark){.kanban-color-gray{border-color:var(--gray-600);background-color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.kanban-color-gray{background-color:color-mix(in oklab,var(--gray-700) 60%,transparent)}}.kanban-color-gray{color:var(--gray-200)}@media (hover:hover){.kanban-color-gray:hover{background-color:var(--gray-700)}}}.kanban-color-zinc{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-zinc-200);background-color:var(--color-zinc-100);color:var(--color-zinc-800)}@media (hover:hover){.kanban-color-zinc:hover{background-color:var(--color-zinc-200)}}@media (prefers-color-scheme:dark){.kanban-color-zinc{border-color:var(--color-zinc-600);background-color:#3f3f4699}@supports (color:color-mix(in lab, red, red)){.kanban-color-zinc{background-color:color-mix(in oklab,var(--color-zinc-700) 60%,transparent)}}.kanban-color-zinc{color:var(--color-zinc-200)}@media (hover:hover){.kanban-color-zinc:hover{background-color:var(--color-zinc-700)}}}.kanban-color-neutral{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-200);background-color:var(--color-neutral-100);color:var(--color-neutral-800)}@media (hover:hover){.kanban-color-neutral:hover{background-color:var(--color-neutral-200)}}@media (prefers-color-scheme:dark){.kanban-color-neutral{border-color:var(--color-neutral-600);background-color:#40404099}@supports (color:color-mix(in lab, red, red)){.kanban-color-neutral{background-color:color-mix(in oklab,var(--color-neutral-700) 60%,transparent)}}.kanban-color-neutral{color:var(--color-neutral-200)}@media (hover:hover){.kanban-color-neutral:hover{background-color:var(--color-neutral-700)}}}.kanban-color-stone{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-stone-200);background-color:var(--color-stone-100);color:var(--color-stone-800)}@media (hover:hover){.kanban-color-stone:hover{background-color:var(--color-stone-200)}}@media (prefers-color-scheme:dark){.kanban-color-stone{border-color:var(--color-stone-600);background-color:#44403b99}@supports (color:color-mix(in lab, red, red)){.kanban-color-stone{background-color:color-mix(in oklab,var(--color-stone-700) 60%,transparent)}}.kanban-color-stone{color:var(--color-stone-200)}@media (hover:hover){.kanban-color-stone:hover{background-color:var(--color-stone-700)}}}.kanban-color-red{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-red-200);background-color:var(--color-red-50);color:var(--color-red-800)}@media (hover:hover){.kanban-color-red:hover{background-color:var(--color-red-100)}}@media (prefers-color-scheme:dark){.kanban-color-red{border-color:#9f071299}@supports (color:color-mix(in lab, red, red)){.kanban-color-red{border-color:color-mix(in oklab,var(--color-red-800) 60%,transparent)}}.kanban-color-red{background-color:#82181a66}@supports (color:color-mix(in lab, red, red)){.kanban-color-red{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.kanban-color-red{color:var(--color-red-200)}@media (hover:hover){.kanban-color-red:hover{background-color:#82181a99}@supports (color:color-mix(in lab, red, red)){.kanban-color-red:hover{background-color:color-mix(in oklab,var(--color-red-900) 60%,transparent)}}}}.kanban-color-orange{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-orange-200);background-color:var(--color-orange-50);color:var(--color-orange-800)}@media (hover:hover){.kanban-color-orange:hover{background-color:var(--color-orange-100)}}@media (prefers-color-scheme:dark){.kanban-color-orange{border-color:#9f2d0099}@supports (color:color-mix(in lab, red, red)){.kanban-color-orange{border-color:color-mix(in oklab,var(--color-orange-800) 60%,transparent)}}.kanban-color-orange{background-color:#7e2a0c66}@supports (color:color-mix(in lab, red, red)){.kanban-color-orange{background-color:color-mix(in oklab,var(--color-orange-900) 40%,transparent)}}.kanban-color-orange{color:var(--color-orange-200)}@media (hover:hover){.kanban-color-orange:hover{background-color:#7e2a0c99}@supports (color:color-mix(in lab, red, red)){.kanban-color-orange:hover{background-color:color-mix(in oklab,var(--color-orange-900) 60%,transparent)}}}}.kanban-color-amber{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-amber-200);background-color:var(--color-amber-50);color:var(--color-amber-800)}@media (hover:hover){.kanban-color-amber:hover{background-color:var(--color-amber-100)}}@media (prefers-color-scheme:dark){.kanban-color-amber{border-color:#953d0099}@supports (color:color-mix(in lab, red, red)){.kanban-color-amber{border-color:color-mix(in oklab,var(--color-amber-800) 60%,transparent)}}.kanban-color-amber{background-color:#7b330666}@supports (color:color-mix(in lab, red, red)){.kanban-color-amber{background-color:color-mix(in oklab,var(--color-amber-900) 40%,transparent)}}.kanban-color-amber{color:var(--color-amber-200)}@media (hover:hover){.kanban-color-amber:hover{background-color:#7b330699}@supports (color:color-mix(in lab, red, red)){.kanban-color-amber:hover{background-color:color-mix(in oklab,var(--color-amber-900) 60%,transparent)}}}}.kanban-color-yellow{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-yellow-200);background-color:var(--color-yellow-50);color:var(--color-yellow-800)}@media (hover:hover){.kanban-color-yellow:hover{background-color:var(--color-yellow-100)}}@media (prefers-color-scheme:dark){.kanban-color-yellow{border-color:#874b0099}@supports (color:color-mix(in lab, red, red)){.kanban-color-yellow{border-color:color-mix(in oklab,var(--color-yellow-800) 60%,transparent)}}.kanban-color-yellow{background-color:#733e0a66}@supports (color:color-mix(in lab, red, red)){.kanban-color-yellow{background-color:color-mix(in oklab,var(--color-yellow-900) 40%,transparent)}}.kanban-color-yellow{color:var(--color-yellow-200)}@media (hover:hover){.kanban-color-yellow:hover{background-color:#733e0a99}@supports (color:color-mix(in lab, red, red)){.kanban-color-yellow:hover{background-color:color-mix(in oklab,var(--color-yellow-900) 60%,transparent)}}}}.kanban-color-lime{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-lime-200);background-color:var(--color-lime-50);color:var(--color-lime-800)}@media (hover:hover){.kanban-color-lime:hover{background-color:var(--color-lime-100)}}@media (prefers-color-scheme:dark){.kanban-color-lime{border-color:#3d630099}@supports (color:color-mix(in lab, red, red)){.kanban-color-lime{border-color:color-mix(in oklab,var(--color-lime-800) 60%,transparent)}}.kanban-color-lime{background-color:#35530e66}@supports (color:color-mix(in lab, red, red)){.kanban-color-lime{background-color:color-mix(in oklab,var(--color-lime-900) 40%,transparent)}}.kanban-color-lime{color:var(--color-lime-200)}@media (hover:hover){.kanban-color-lime:hover{background-color:#35530e99}@supports (color:color-mix(in lab, red, red)){.kanban-color-lime:hover{background-color:color-mix(in oklab,var(--color-lime-900) 60%,transparent)}}}}.kanban-color-green{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-green-200);background-color:var(--color-green-50);color:var(--color-green-800)}@media (hover:hover){.kanban-color-green:hover{background-color:var(--color-green-100)}}@media (prefers-color-scheme:dark){.kanban-color-green{border-color:#01663099}@supports (color:color-mix(in lab, red, red)){.kanban-color-green{border-color:color-mix(in oklab,var(--color-green-800) 60%,transparent)}}.kanban-color-green{background-color:#0d542b66}@supports (color:color-mix(in lab, red, red)){.kanban-color-green{background-color:color-mix(in oklab,var(--color-green-900) 40%,transparent)}}.kanban-color-green{color:var(--color-green-200)}@media (hover:hover){.kanban-color-green:hover{background-color:#0d542b99}@supports (color:color-mix(in lab, red, red)){.kanban-color-green:hover{background-color:color-mix(in oklab,var(--color-green-900) 60%,transparent)}}}}.kanban-color-emerald{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-emerald-200);background-color:var(--color-emerald-50);color:var(--color-emerald-800)}@media (hover:hover){.kanban-color-emerald:hover{background-color:var(--color-emerald-100)}}@media (prefers-color-scheme:dark){.kanban-color-emerald{border-color:#005f4699}@supports (color:color-mix(in lab, red, red)){.kanban-color-emerald{border-color:color-mix(in oklab,var(--color-emerald-800) 60%,transparent)}}.kanban-color-emerald{background-color:#004e3b66}@supports (color:color-mix(in lab, red, red)){.kanban-color-emerald{background-color:color-mix(in oklab,var(--color-emerald-900) 40%,transparent)}}.kanban-color-emerald{color:var(--color-emerald-200)}@media (hover:hover){.kanban-color-emerald:hover{background-color:#004e3b99}@supports (color:color-mix(in lab, red, red)){.kanban-color-emerald:hover{background-color:color-mix(in oklab,var(--color-emerald-900) 60%,transparent)}}}}.kanban-color-teal{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-teal-200);background-color:var(--color-teal-50);color:var(--color-teal-800)}@media (hover:hover){.kanban-color-teal:hover{background-color:var(--color-teal-100)}}@media (prefers-color-scheme:dark){.kanban-color-teal{border-color:#005f5a99}@supports (color:color-mix(in lab, red, red)){.kanban-color-teal{border-color:color-mix(in oklab,var(--color-teal-800) 60%,transparent)}}.kanban-color-teal{background-color:#0b4f4a66}@supports (color:color-mix(in lab, red, red)){.kanban-color-teal{background-color:color-mix(in oklab,var(--color-teal-900) 40%,transparent)}}.kanban-color-teal{color:var(--color-teal-200)}@media (hover:hover){.kanban-color-teal:hover{background-color:#0b4f4a99}@supports (color:color-mix(in lab, red, red)){.kanban-color-teal:hover{background-color:color-mix(in oklab,var(--color-teal-900) 60%,transparent)}}}}.kanban-color-cyan{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-cyan-200);background-color:var(--color-cyan-50);color:var(--color-cyan-800)}@media (hover:hover){.kanban-color-cyan:hover{background-color:var(--color-cyan-100)}}@media (prefers-color-scheme:dark){.kanban-color-cyan{border-color:#005f7899}@supports (color:color-mix(in lab, red, red)){.kanban-color-cyan{border-color:color-mix(in oklab,var(--color-cyan-800) 60%,transparent)}}.kanban-color-cyan{background-color:#104e6466}@supports (color:color-mix(in lab, red, red)){.kanban-color-cyan{background-color:color-mix(in oklab,var(--color-cyan-900) 40%,transparent)}}.kanban-color-cyan{color:var(--color-cyan-200)}@media (hover:hover){.kanban-color-cyan:hover{background-color:#104e6499}@supports (color:color-mix(in lab, red, red)){.kanban-color-cyan:hover{background-color:color-mix(in oklab,var(--color-cyan-900) 60%,transparent)}}}}.kanban-color-sky{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-sky-200);background-color:var(--color-sky-50);color:var(--color-sky-800)}@media (hover:hover){.kanban-color-sky:hover{background-color:var(--color-sky-100)}}@media (prefers-color-scheme:dark){.kanban-color-sky{border-color:#00598699}@supports (color:color-mix(in lab, red, red)){.kanban-color-sky{border-color:color-mix(in oklab,var(--color-sky-800) 60%,transparent)}}.kanban-color-sky{background-color:#024a7066}@supports (color:color-mix(in lab, red, red)){.kanban-color-sky{background-color:color-mix(in oklab,var(--color-sky-900) 40%,transparent)}}.kanban-color-sky{color:var(--color-sky-200)}@media (hover:hover){.kanban-color-sky:hover{background-color:#024a7099}@supports (color:color-mix(in lab, red, red)){.kanban-color-sky:hover{background-color:color-mix(in oklab,var(--color-sky-900) 60%,transparent)}}}}.kanban-color-blue{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-blue-200);background-color:var(--color-blue-50);color:var(--color-blue-800)}@media (hover:hover){.kanban-color-blue:hover{background-color:var(--color-blue-100)}}@media (prefers-color-scheme:dark){.kanban-color-blue{border-color:#193cb899}@supports (color:color-mix(in lab, red, red)){.kanban-color-blue{border-color:color-mix(in oklab,var(--color-blue-800) 60%,transparent)}}.kanban-color-blue{background-color:#1c398e66}@supports (color:color-mix(in lab, red, red)){.kanban-color-blue{background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.kanban-color-blue{color:var(--color-blue-200)}@media (hover:hover){.kanban-color-blue:hover{background-color:#1c398e99}@supports (color:color-mix(in lab, red, red)){.kanban-color-blue:hover{background-color:color-mix(in oklab,var(--color-blue-900) 60%,transparent)}}}}.kanban-color-indigo{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-indigo-200);background-color:var(--color-indigo-50);color:var(--color-indigo-800)}@media (hover:hover){.kanban-color-indigo:hover{background-color:var(--color-indigo-100)}}@media (prefers-color-scheme:dark){.kanban-color-indigo{border-color:#372aac99}@supports (color:color-mix(in lab, red, red)){.kanban-color-indigo{border-color:color-mix(in oklab,var(--color-indigo-800) 60%,transparent)}}.kanban-color-indigo{background-color:#312c8566}@supports (color:color-mix(in lab, red, red)){.kanban-color-indigo{background-color:color-mix(in oklab,var(--color-indigo-900) 40%,transparent)}}.kanban-color-indigo{color:var(--color-indigo-200)}@media (hover:hover){.kanban-color-indigo:hover{background-color:#312c8599}@supports (color:color-mix(in lab, red, red)){.kanban-color-indigo:hover{background-color:color-mix(in oklab,var(--color-indigo-900) 60%,transparent)}}}}.kanban-color-violet{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-violet-200);background-color:var(--color-violet-50);color:var(--color-violet-800)}@media (hover:hover){.kanban-color-violet:hover{background-color:var(--color-violet-100)}}@media (prefers-color-scheme:dark){.kanban-color-violet{border-color:#5d0ec099}@supports (color:color-mix(in lab, red, red)){.kanban-color-violet{border-color:color-mix(in oklab,var(--color-violet-800) 60%,transparent)}}.kanban-color-violet{background-color:#4d179a66}@supports (color:color-mix(in lab, red, red)){.kanban-color-violet{background-color:color-mix(in oklab,var(--color-violet-900) 40%,transparent)}}.kanban-color-violet{color:var(--color-violet-200)}@media (hover:hover){.kanban-color-violet:hover{background-color:#4d179a99}@supports (color:color-mix(in lab, red, red)){.kanban-color-violet:hover{background-color:color-mix(in oklab,var(--color-violet-900) 60%,transparent)}}}}.kanban-color-purple{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-purple-200);background-color:var(--color-purple-50);color:var(--color-purple-800)}@media (hover:hover){.kanban-color-purple:hover{background-color:var(--color-purple-100)}}@media (prefers-color-scheme:dark){.kanban-color-purple{border-color:#6e11b099}@supports (color:color-mix(in lab, red, red)){.kanban-color-purple{border-color:color-mix(in oklab,var(--color-purple-800) 60%,transparent)}}.kanban-color-purple{background-color:#59168b66}@supports (color:color-mix(in lab, red, red)){.kanban-color-purple{background-color:color-mix(in oklab,var(--color-purple-900) 40%,transparent)}}.kanban-color-purple{color:var(--color-purple-200)}@media (hover:hover){.kanban-color-purple:hover{background-color:#59168b99}@supports (color:color-mix(in lab, red, red)){.kanban-color-purple:hover{background-color:color-mix(in oklab,var(--color-purple-900) 60%,transparent)}}}}.kanban-color-fuchsia{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-fuchsia-200);background-color:var(--color-fuchsia-50);color:var(--color-fuchsia-800)}@media (hover:hover){.kanban-color-fuchsia:hover{background-color:var(--color-fuchsia-100)}}@media (prefers-color-scheme:dark){.kanban-color-fuchsia{border-color:#8a019499}@supports (color:color-mix(in lab, red, red)){.kanban-color-fuchsia{border-color:color-mix(in oklab,var(--color-fuchsia-800) 60%,transparent)}}.kanban-color-fuchsia{background-color:#72137866}@supports (color:color-mix(in lab, red, red)){.kanban-color-fuchsia{background-color:color-mix(in oklab,var(--color-fuchsia-900) 40%,transparent)}}.kanban-color-fuchsia{color:var(--color-fuchsia-200)}@media (hover:hover){.kanban-color-fuchsia:hover{background-color:#72137899}@supports (color:color-mix(in lab, red, red)){.kanban-color-fuchsia:hover{background-color:color-mix(in oklab,var(--color-fuchsia-900) 60%,transparent)}}}}.kanban-color-pink{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-pink-200);background-color:var(--color-pink-50);color:var(--color-pink-800)}@media (hover:hover){.kanban-color-pink:hover{background-color:var(--color-pink-100)}}@media (prefers-color-scheme:dark){.kanban-color-pink{border-color:#a2004c99}@supports (color:color-mix(in lab, red, red)){.kanban-color-pink{border-color:color-mix(in oklab,var(--color-pink-800) 60%,transparent)}}.kanban-color-pink{background-color:#86104366}@supports (color:color-mix(in lab, red, red)){.kanban-color-pink{background-color:color-mix(in oklab,var(--color-pink-900) 40%,transparent)}}.kanban-color-pink{color:var(--color-pink-200)}@media (hover:hover){.kanban-color-pink:hover{background-color:#86104399}@supports (color:color-mix(in lab, red, red)){.kanban-color-pink:hover{background-color:color-mix(in oklab,var(--color-pink-900) 60%,transparent)}}}}.kanban-color-rose{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-rose-200);background-color:var(--color-rose-50);color:var(--color-rose-800)}@media (hover:hover){.kanban-color-rose:hover{background-color:var(--color-rose-100)}}@media (prefers-color-scheme:dark){.kanban-color-rose{border-color:#a3003799}@supports (color:color-mix(in lab, red, red)){.kanban-color-rose{border-color:color-mix(in oklab,var(--color-rose-800) 60%,transparent)}}.kanban-color-rose{background-color:#8b083666}@supports (color:color-mix(in lab, red, red)){.kanban-color-rose{background-color:color-mix(in oklab,var(--color-rose-900) 40%,transparent)}}.kanban-color-rose{color:var(--color-rose-200)}@media (hover:hover){.kanban-color-rose:hover{background-color:#8b083699}@supports (color:color-mix(in lab, red, red)){.kanban-color-rose:hover{background-color:color-mix(in oklab,var(--color-rose-900) 60%,transparent)}}}}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-leading{syntax:\"*\";inherits:false}"
  },
  {
    "path": "public/fonts/filament/filament/inter/index.css",
    "content": "@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-cyrillic-ext-wght-normal-IYF56FF6.woff2\") format(\"woff2-variations\");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-cyrillic-wght-normal-JEOLYBOO.woff2\") format(\"woff2-variations\");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-greek-ext-wght-normal-EOVOK2B5.woff2\") format(\"woff2-variations\");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-greek-wght-normal-IRE366VL.woff2\") format(\"woff2-variations\");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-vietnamese-wght-normal-CE5GGD3W.woff2\") format(\"woff2-variations\");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-latin-ext-wght-normal-HA22NDSG.woff2\") format(\"woff2-variations\");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(\"./inter-latin-wght-normal-NRMW37G5.woff2\") format(\"woff2-variations\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}\n"
  },
  {
    "path": "public/index.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Http\\Request;\n\ndefine('LARAVEL_START', microtime(true));\n\n// Determine if the application is in maintenance mode...\nif (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {\n    require $maintenance;\n}\n\n// Register the Composer autoloader...\nrequire __DIR__.'/../vendor/autoload.php';\n\n// Bootstrap Laravel and handle the request...\n(require_once __DIR__.'/../bootstrap/app.php')\n    ->handleRequest(Request::capture());\n"
  },
  {
    "path": "public/js/asmit/resized-column/resized-column.js",
    "content": "document.addEventListener(\"alpine:init\", () => {\n  Alpine.data(\"resizedColumn\", function (u, c) {\n    return {\n      tableWrapper: null,\n      table: null,\n      column: null,\n      minColumnWidth: 100,\n      maxColumnWidth: 1e3,\n      handleBar: null,\n      tableWrapperContentSelector: \".fi-ta-content-ctn\",\n      tableSelector: \".fi-ta-table\",\n      tableBodyCellPrefix: \"fi-ta-cell-\",\n      debounceTime: 500,\n      init() {\n        if (\n          ((this.column = this.$el),\n          (this.table = this.$el.closest(this.tableSelector)),\n          (this.tableWrapper = this.$el.closest(\n            this.tableWrapperContentSelector\n          )),\n          !this.column || !this.table || !this.tableWrapper)\n        )\n          return null;\n        this.initializeColumnLayout(), this.onLivewireUpdate();\n      },\n      initializeColumnLayout() {\n        this.column.classList.add(\"relative\", \"group/column-resize\"),\n          this.createHandleBar();\n      },\n      createHandleBar() {\n        (this.handleBar = document.createElement(\"button\")),\n          (this.handleBar.type = \"button\"),\n          this.handleBar.classList.add(\"column-resize-handle-bar\");\n        let e = this.column.querySelector(\".column-resize-handle-bar\");\n        e && e.remove(),\n          this.column.appendChild(this.handleBar),\n          this.handleBar.addEventListener(\n            \"mousedown\",\n            this.startResize(this.column)\n          );\n      },\n      startResize(e) {\n        return (t) => {\n          t.preventDefault(), this.handleBar.classList.add(\"active\");\n          let i = t.pageX,\n            l = Math.round(e.offsetWidth),\n            n = Math.round(this.table.offsetWidth),\n            o = Math.round(this.tableWrapper.offsetWidth),\n            a = 0,\n            s = (d) => {\n              if (d.pageX === i) return;\n              a = Math.round(\n                Math.min(\n                  this.maxColumnWidth,\n                  Math.max(this.minColumnWidth, l + (d.pageX - i) - 16)\n                )\n              );\n              let h = n - l + a;\n              (this.table.style.width = `${h > o ? h : \"auto\"}px`),\n                this.applyColumnWidth(e, a),\n                this.$dispatch(\"column-resized\");\n            },\n            r = () => {\n              this.handleBar.classList.remove(\"active\"),\n                this.debounce(() => {\n                  this.$wire.updateColumnWidth(u, a);\n                }, this.debounceTime)(),\n                document.removeEventListener(\"mousemove\", s),\n                document.removeEventListener(\"mouseup\", r);\n            };\n          document.addEventListener(\"mousemove\", s),\n            document.addEventListener(\"mouseup\", r);\n        };\n      },\n      applyColumnWidth(e, t) {\n        this.setColumnWidthAttribute(e, t);\n        let i = this.tableBodyCellPrefix + c;\n        this.table\n          .querySelectorAll(`.${this.getEscapedSelectorFromClass(i)}`)\n          .forEach((n) => {\n            this.setColumnWidthAttribute(n, t), (n.style.overflow = \"hidden\");\n          });\n      },\n      setColumnWidthAttribute(e, t) {\n        (e.style.maxWidth = `${t}px`),\n          (e.style.width = `${t}px`),\n          (e.style.minWidth = `${t}px`);\n      },\n      getEscapedSelectorFromClass(e) {\n        return !e || typeof e != \"string\" ? \"\" : e.replace(/\\./g, \"\\\\.\");\n      },\n      debounce(e, t) {\n        let i;\n        return function (...n) {\n          clearTimeout(i),\n            (i = setTimeout(() => {\n              clearTimeout(i), e(...n);\n            }, t));\n        };\n      },\n      onLivewireUpdate() {\n        window.Livewire.hook(\"morph.updated\", () => {\n          this.initializeColumnLayout();\n        });\n      },\n    };\n  });\n});\n"
  },
  {
    "path": "public/js/filament/actions/actions.js",
    "content": "(()=>{var n=({livewireId:e})=>({actionNestingIndex:null,init(){window.addEventListener(\"sync-action-modals\",t=>{t.detail.id===e&&this.syncActionModals(t.detail.newActionNestingIndex,t.detail.shouldOverlayParentActions??!1)})},syncActionModals(t,i=!1){if(this.actionNestingIndex===t){this.actionNestingIndex!==null&&this.$nextTick(()=>this.openModal());return}let s=this.actionNestingIndex!==null&&t!==null&&t>this.actionNestingIndex;if(this.actionNestingIndex!==null&&!(i&&s)&&this.closeModal(),this.actionNestingIndex=t,this.actionNestingIndex!==null){if(!this.$el.querySelector(`#${this.generateModalId(t)}`)){this.$nextTick(()=>this.openModal());return}this.openModal()}},generateModalId(t){return`fi-${e}-action-`+t},openModal(){let t=this.generateModalId(this.actionNestingIndex);document.dispatchEvent(new CustomEvent(\"open-modal\",{bubbles:!0,composed:!0,detail:{id:t}}))},closeModal(){let t=this.generateModalId(this.actionNestingIndex);document.dispatchEvent(new CustomEvent(\"close-modal-quietly\",{bubbles:!0,composed:!0,detail:{id:t}}))}});document.addEventListener(\"alpine:init\",()=>{window.Alpine.data(\"filamentActionModals\",n)});})();\n"
  },
  {
    "path": "public/js/filament/filament/app.js",
    "content": "(()=>{var re=Object.create,K=Object.defineProperty,ne=Object.getPrototypeOf,ie=Object.prototype.hasOwnProperty,oe=Object.getOwnPropertyNames,ae=Object.getOwnPropertyDescriptor,se=t=>K(t,\"__esModule\",{value:!0}),le=(t,n)=>()=>(n||(n={exports:{}},t(n.exports,n)),n.exports),fe=(t,n,i)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let a of oe(n))!ie.call(t,a)&&a!==\"default\"&&K(t,a,{get:()=>n[a],enumerable:!(i=ae(n,a))||i.enumerable});return t},ce=t=>fe(se(K(t!=null?re(ne(t)):{},\"default\",t&&t.__esModule&&\"default\"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t),ue=le((t,n)=>{(function(i,a,w){if(!i)return;for(var c={8:\"backspace\",9:\"tab\",13:\"enter\",16:\"shift\",17:\"ctrl\",18:\"alt\",20:\"capslock\",27:\"esc\",32:\"space\",33:\"pageup\",34:\"pagedown\",35:\"end\",36:\"home\",37:\"left\",38:\"up\",39:\"right\",40:\"down\",45:\"ins\",46:\"del\",91:\"meta\",93:\"meta\",224:\"meta\"},y={106:\"*\",107:\"+\",109:\"-\",110:\".\",111:\"/\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"},v={\"~\":\"`\",\"!\":\"1\",\"@\":\"2\",\"#\":\"3\",$:\"4\",\"%\":\"5\",\"^\":\"6\",\"&\":\"7\",\"*\":\"8\",\"(\":\"9\",\")\":\"0\",_:\"-\",\"+\":\"=\",\":\":\";\",'\"':\"'\",\"<\":\",\",\">\":\".\",\"?\":\"/\",\"|\":\"\\\\\"},S={option:\"alt\",command:\"meta\",return:\"enter\",escape:\"esc\",plus:\"+\",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?\"meta\":\"ctrl\"},A,m=1;m<20;++m)c[111+m]=\"f\"+m;for(m=0;m<=9;++m)c[m+96]=m.toString();function P(e,r,s){if(e.addEventListener){e.addEventListener(r,s,!1);return}e.attachEvent(\"on\"+r,s)}function U(e){if(e.type==\"keypress\"){var r=String.fromCharCode(e.which);return e.shiftKey||(r=r.toLowerCase()),r}return c[e.which]?c[e.which]:y[e.which]?y[e.which]:String.fromCharCode(e.which).toLowerCase()}function F(e,r){return e.sort().join(\",\")===r.sort().join(\",\")}function V(e){var r=[];return e.shiftKey&&r.push(\"shift\"),e.altKey&&r.push(\"alt\"),e.ctrlKey&&r.push(\"ctrl\"),e.metaKey&&r.push(\"meta\"),r}function H(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=!1}function B(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=!0}function E(e){return e==\"shift\"||e==\"ctrl\"||e==\"alt\"||e==\"meta\"}function X(){if(!A){A={};for(var e in c)e>95&&e<112||c.hasOwnProperty(e)&&(A[c[e]]=e)}return A}function Y(e,r,s){return s||(s=X()[e]?\"keydown\":\"keypress\"),s==\"keypress\"&&r.length&&(s=\"keydown\"),s}function Q(e){return e===\"+\"?[\"+\"]:(e=e.replace(/\\+{2}/g,\"+plus\"),e.split(\"+\"))}function G(e,r){var s,h,k,M=[];for(s=Q(e),k=0;k<s.length;++k)h=s[k],S[h]&&(h=S[h]),r&&r!=\"keypress\"&&v[h]&&(h=v[h],M.push(\"shift\")),E(h)&&M.push(h);return r=Y(h,M,r),{key:h,modifiers:M,action:r}}function R(e,r){return e===null||e===a?!1:e===r?!0:R(e.parentNode,r)}function g(e){var r=this;if(e=e||a,!(r instanceof g))return new g(e);r.target=e,r._callbacks={},r._directMap={};var s={},h,k=!1,M=!1,D=!1;function L(o){o=o||{};var f=!1,p;for(p in s){if(o[p]){f=!0;continue}s[p]=0}f||(D=!1)}function I(o,f,p,l,d,b){var u,_,C=[],O=p.type;if(!r._callbacks[o])return[];for(O==\"keyup\"&&E(o)&&(f=[o]),u=0;u<r._callbacks[o].length;++u)if(_=r._callbacks[o][u],!(!l&&_.seq&&s[_.seq]!=_.level)&&O==_.action&&(O==\"keypress\"&&!p.metaKey&&!p.ctrlKey||F(f,_.modifiers))){var ee=!l&&_.combo==d,te=l&&_.seq==l&&_.level==b;(ee||te)&&r._callbacks[o].splice(u,1),C.push(_)}return C}function N(o,f,p,l){r.stopCallback(f,f.target||f.srcElement,p,l)||o(f,p)===!1&&(H(f),B(f))}r._handleKey=function(o,f,p){var l=I(o,f,p),d,b={},u=0,_=!1;for(d=0;d<l.length;++d)l[d].seq&&(u=Math.max(u,l[d].level));for(d=0;d<l.length;++d){if(l[d].seq){if(l[d].level!=u)continue;_=!0,b[l[d].seq]=1,N(l[d].callback,p,l[d].combo,l[d].seq);continue}_||N(l[d].callback,p,l[d].combo)}var C=p.type==\"keypress\"&&M;p.type==D&&!E(o)&&!C&&L(b),M=_&&p.type==\"keydown\"};function q(o){typeof o.which!=\"number\"&&(o.which=o.keyCode);var f=U(o);if(f){if(o.type==\"keyup\"&&k===f){k=!1;return}r.handleKey(f,V(o),o)}}function Z(){clearTimeout(h),h=setTimeout(L,1e3)}function $(o,f,p,l){s[o]=0;function d(O){return function(){D=O,++s[o],Z()}}function b(O){N(p,O,o),l!==\"keyup\"&&(k=U(O)),setTimeout(L,10)}for(var u=0;u<f.length;++u){var _=u+1===f.length,C=_?b:d(l||G(f[u+1]).action);z(f[u],C,l,o,u)}}function z(o,f,p,l,d){r._directMap[o+\":\"+p]=f,o=o.replace(/\\s+/g,\" \");var b=o.split(\" \"),u;if(b.length>1){$(o,b,f,p);return}u=G(o,p),r._callbacks[u.key]=r._callbacks[u.key]||[],I(u.key,u.modifiers,{type:u.action},l,o,d),r._callbacks[u.key][l?\"unshift\":\"push\"]({callback:f,modifiers:u.modifiers,action:u.action,seq:l,level:d,combo:o})}r._bindMultiple=function(o,f,p){for(var l=0;l<o.length;++l)z(o[l],f,p)},P(e,\"keypress\",q),P(e,\"keydown\",q),P(e,\"keyup\",q)}g.prototype.bind=function(e,r,s){var h=this;return e=e instanceof Array?e:[e],h._bindMultiple.call(h,e,r,s),h},g.prototype.unbind=function(e,r){var s=this;return s.bind.call(s,e,function(){},r)},g.prototype.trigger=function(e,r){var s=this;return s._directMap[e+\":\"+r]&&s._directMap[e+\":\"+r]({},e),s},g.prototype.reset=function(){var e=this;return e._callbacks={},e._directMap={},e},g.prototype.stopCallback=function(e,r){var s=this;if((\" \"+r.className+\" \").indexOf(\" mousetrap \")>-1||R(r,s.target))return!1;if(\"composedPath\"in e&&typeof e.composedPath==\"function\"){var h=e.composedPath()[0];h!==e.target&&(r=h)}return r.tagName==\"INPUT\"||r.tagName==\"SELECT\"||r.tagName==\"TEXTAREA\"||r.isContentEditable},g.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},g.addKeycodes=function(e){for(var r in e)e.hasOwnProperty(r)&&(c[r]=e[r]);A=null},g.init=function(){var e=g(a);for(var r in e)r.charAt(0)!==\"_\"&&(g[r]=(function(s){return function(){return e[s].apply(e,arguments)}})(r))},g.init(),i.Mousetrap=g,typeof n<\"u\"&&n.exports&&(n.exports=g),typeof define==\"function\"&&define.amd&&define(function(){return g})})(typeof window<\"u\"?window:null,typeof window<\"u\"?document:null)}),T=ce(ue());(function(t){if(t){var n={},i=t.prototype.stopCallback;t.prototype.stopCallback=function(a,w,c,y){var v=this;return v.paused?!0:n[c]||n[y]?!1:i.call(v,a,w,c)},t.prototype.bindGlobal=function(a,w,c){var y=this;if(y.bind(a,w,c),a instanceof Array){for(var v=0;v<a.length;v++)n[a[v]]=!0;return}n[a]=!0},t.init()}})(typeof Mousetrap<\"u\"?Mousetrap:void 0);var J=()=>Array.from(document.querySelectorAll('[aria-modal=\"true\"]')).find(t=>window.getComputedStyle(t).display!==\"none\"),pe=t=>{t.directive(\"mousetrap\",(n,{modifiers:i,expression:a},{evaluate:w})=>{let c=()=>a?w(a):n.click();i=i.map(y=>y.replace(/--/g,\" \").replace(/-/g,\"+\").replace(/\\bslash\\b/g,\"/\")),i.includes(\"global\")&&(i=i.filter(y=>y!==\"global\"),T.default.bindGlobal(i,y=>{let v=J();v&&!v.contains(n)||(y.preventDefault(),c())})),T.default.bind(i,y=>{let v=J();v&&!v.contains(n)||(y.preventDefault(),c())}),document.addEventListener(\"livewire:navigating\",()=>{T.default.unbind(i)},{once:!0})})},W=pe;var j=()=>({isOpen:window.Alpine.$persist(!0).as(\"isOpen\"),isOpenDesktop:window.Alpine.$persist(!0).as(\"isOpenDesktop\"),collapsedGroups:window.Alpine.$persist(null).as(\"collapsedGroups\"),scrollTop:0,init(){this.resizeObserver=null,this.setUpResizeObserver(),document.addEventListener(\"livewire:navigate\",()=>{let t=document.querySelector(\".fi-main-sidebar .fi-sidebar-nav\");t&&(this.scrollTop=t.scrollTop)}),document.addEventListener(\"livewire:navigated\",()=>{this.setUpResizeObserver(),requestAnimationFrame(()=>{let t=document.querySelector(\".fi-main-sidebar .fi-sidebar-nav\");t&&this.scrollTop&&(t.scrollTop=this.scrollTop)})})},setUpResizeObserver(){this.resizeObserver&&this.resizeObserver.disconnect();let t=window.innerWidth;this.resizeObserver=new ResizeObserver(()=>{let n=window.innerWidth,i=t>=1024,a=n<1024,w=n>=1024;i&&a?(this.isOpenDesktop=this.isOpen,this.isOpen&&this.close()):!i&&w&&(this.isOpen=this.isOpenDesktop),t=n}),this.resizeObserver.observe(document.body),window.innerWidth<1024?this.isOpen&&(this.isOpenDesktop=!0,this.close()):this.isOpen=this.isOpenDesktop},groupIsCollapsed(t){return this.collapsedGroups.includes(t)},collapseGroup(t){this.collapsedGroups.includes(t)||(this.collapsedGroups=this.collapsedGroups.concat(t))},toggleCollapsedGroup(t){this.collapsedGroups=this.collapsedGroups.includes(t)?this.collapsedGroups.filter(n=>n!==t):this.collapsedGroups.concat(t)},close(){this.isOpen=!1,window.innerWidth>=1024&&(this.isOpenDesktop=!1)},open(){this.isOpen=!0,window.innerWidth>=1024&&(this.isOpenDesktop=!0)}});document.addEventListener(\"alpine:init\",()=>{let t=localStorage.getItem(\"theme\")??getComputedStyle(document.documentElement).getPropertyValue(\"--default-theme-mode\");window.Alpine.store(\"theme\",t===\"dark\"||t===\"system\"&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"),window.addEventListener(\"theme-changed\",n=>{let i=n.detail;localStorage.setItem(\"theme\",i),i===\"system\"&&(i=window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"),window.Alpine.store(\"theme\",i)}),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",n=>{localStorage.getItem(\"theme\")===\"system\"&&window.Alpine.store(\"theme\",n.matches?\"dark\":\"light\")}),window.Alpine.effect(()=>{window.Alpine.store(\"theme\")===\"dark\"?document.documentElement.classList.add(\"dark\"):document.documentElement.classList.remove(\"dark\")})});document.addEventListener(\"livewire:init\",()=>{Livewire.interceptRequest(({request:t,onError:n,onFailure:i})=>{n(({response:a,preventDefault:w})=>{let c=window.filamentErrorNotifications;if(!c)return;try{let S=t?.payload;if(S&&JSON.parse(S).components.length===1){for(let A of JSON.parse(S).components)if(JSON.parse(A.snapshot).data.isFilamentNotificationsComponent)return}}catch{}let y=a?.status??\"\",v=c[y]??c[\"\"];v.isDisabled!==!0&&(w(),v.isHidden!==!0&&new FilamentNotification().title(v.title).body(v.body).danger().send())}),i(()=>{let a=window.filamentErrorNotifications;if(!a)return;let w=a[\"\"];new FilamentNotification().title(w.title).body(w.body).danger().send()})})});var x=window.history.replaceState,de=window.history.pushState;window.history.replaceState=function(t,n,i){t?.url instanceof URL&&(t.url=t.url.toString());let a=i||t?.url||window.location.href,w=window.location.href;if(a!==w){x.call(window.history,t,n,i);return}try{let c=window.history.state;JSON.stringify(t)!==JSON.stringify(c)&&x.call(window.history,t,n,i)}catch{x.call(window.history,t,n,i)}};window.history.pushState=function(t,n,i){t?.url instanceof URL&&(t.url=t.url.toString()),de.call(window.history,t,n,i)};document.addEventListener(\"DOMContentLoaded\",()=>{setTimeout(()=>{let t=document.querySelector(\".fi-main-sidebar .fi-sidebar-item.fi-active\");if((!t||t.offsetParent===null)&&(t=document.querySelector(\".fi-main-sidebar .fi-sidebar-group.fi-active\")),!t||t.offsetParent===null)return;let n=document.querySelector(\".fi-main-sidebar .fi-sidebar-nav\");n&&n.scrollTo(0,t.offsetTop-window.innerHeight/2)},10)});window.setUpUnsavedDataChangesAlert=({body:t,livewireComponent:n,$wire:i})=>{window.addEventListener(\"beforeunload\",a=>{window.jsMd5(JSON.stringify(i.data).replace(/\\\\/g,\"\"))===i.savedDataHash||i?.__instance?.effects?.redirect||(a.preventDefault(),a.returnValue=!0)})};window.setUpSpaModeUnsavedDataChangesAlert=({body:t,resolveLivewireComponentUsing:n,$wire:i})=>{let a=()=>i?.__instance?.effects?.redirect?!1:window.jsMd5(JSON.stringify(i.data).replace(/\\\\/g,\"\"))!==i.savedDataHash,w=()=>confirm(t);document.addEventListener(\"livewire:navigate\",c=>{if(typeof n()<\"u\"){if(!a()||w())return;c.preventDefault()}}),window.addEventListener(\"beforeunload\",c=>{a()&&(c.preventDefault(),c.returnValue=!0)})};window.setUpUnsavedActionChangesAlert=({resolveLivewireComponentUsing:t,$wire:n})=>{window.addEventListener(\"beforeunload\",i=>{if(!(typeof t()>\"u\")&&(n.mountedActions?.length??0)&&!n?.__instance?.effects?.redirect){i.preventDefault(),i.returnValue=!0;return}})};document.addEventListener(\"alpine:init\",()=>{window.Alpine.plugin(W),window.Alpine.store(\"sidebar\",j())});})();\n"
  },
  {
    "path": "public/js/filament/filament/echo.js",
    "content": "(()=>{var Ci=Object.create;var he=Object.defineProperty;var Ti=Object.getOwnPropertyDescriptor;var Pi=Object.getOwnPropertyNames;var xi=Object.getPrototypeOf,Oi=Object.prototype.hasOwnProperty;var Ai=(l,h)=>()=>(h||l((h={exports:{}}).exports,h),h.exports);var Ei=(l,h,a,c)=>{if(h&&typeof h==\"object\"||typeof h==\"function\")for(let s of Pi(h))!Oi.call(l,s)&&s!==a&&he(l,s,{get:()=>h[s],enumerable:!(c=Ti(h,s))||c.enumerable});return l};var Li=(l,h,a)=>(a=l!=null?Ci(xi(l)):{},Ei(h||!l||!l.__esModule?he(a,\"default\",{value:l,enumerable:!0}):a,l));var me=Ai((vt,It)=>{(function(h,a){typeof vt==\"object\"&&typeof It==\"object\"?It.exports=a():typeof define==\"function\"&&define.amd?define([],a):typeof vt==\"object\"?vt.Pusher=a():h.Pusher=a()})(window,function(){return(function(l){var h={};function a(c){if(h[c])return h[c].exports;var s=h[c]={i:c,l:!1,exports:{}};return l[c].call(s.exports,s,s.exports,a),s.l=!0,s.exports}return a.m=l,a.c=h,a.d=function(c,s,f){a.o(c,s)||Object.defineProperty(c,s,{enumerable:!0,get:f})},a.r=function(c){typeof Symbol<\"u\"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(c,\"__esModule\",{value:!0})},a.t=function(c,s){if(s&1&&(c=a(c)),s&8||s&4&&typeof c==\"object\"&&c&&c.__esModule)return c;var f=Object.create(null);if(a.r(f),Object.defineProperty(f,\"default\",{enumerable:!0,value:c}),s&2&&typeof c!=\"string\")for(var d in c)a.d(f,d,function(N){return c[N]}.bind(null,d));return f},a.n=function(c){var s=c&&c.__esModule?function(){return c.default}:function(){return c};return a.d(s,\"a\",s),s},a.o=function(c,s){return Object.prototype.hasOwnProperty.call(c,s)},a.p=\"\",a(a.s=2)})([(function(l,h,a){\"use strict\";var c=this&&this.__extends||(function(){var b=function(v,y){return b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(w,O){w.__proto__=O}||function(w,O){for(var I in O)O.hasOwnProperty(I)&&(w[I]=O[I])},b(v,y)};return function(v,y){b(v,y);function w(){this.constructor=v}v.prototype=y===null?Object.create(y):(w.prototype=y.prototype,new w)}})();Object.defineProperty(h,\"__esModule\",{value:!0});var s=256,f=(function(){function b(v){v===void 0&&(v=\"=\"),this._paddingCharacter=v}return b.prototype.encodedLength=function(v){return this._paddingCharacter?(v+2)/3*4|0:(v*8+5)/6|0},b.prototype.encode=function(v){for(var y=\"\",w=0;w<v.length-2;w+=3){var O=v[w]<<16|v[w+1]<<8|v[w+2];y+=this._encodeByte(O>>>18&63),y+=this._encodeByte(O>>>12&63),y+=this._encodeByte(O>>>6&63),y+=this._encodeByte(O>>>0&63)}var I=v.length-w;if(I>0){var O=v[w]<<16|(I===2?v[w+1]<<8:0);y+=this._encodeByte(O>>>18&63),y+=this._encodeByte(O>>>12&63),I===2?y+=this._encodeByte(O>>>6&63):y+=this._paddingCharacter||\"\",y+=this._paddingCharacter||\"\"}return y},b.prototype.maxDecodedLength=function(v){return this._paddingCharacter?v/4*3|0:(v*6+7)/8|0},b.prototype.decodedLength=function(v){return this.maxDecodedLength(v.length-this._getPaddingLength(v))},b.prototype.decode=function(v){if(v.length===0)return new Uint8Array(0);for(var y=this._getPaddingLength(v),w=v.length-y,O=new Uint8Array(this.maxDecodedLength(w)),I=0,q=0,M=0,J=0,F=0,z=0,B=0;q<w-4;q+=4)J=this._decodeChar(v.charCodeAt(q+0)),F=this._decodeChar(v.charCodeAt(q+1)),z=this._decodeChar(v.charCodeAt(q+2)),B=this._decodeChar(v.charCodeAt(q+3)),O[I++]=J<<2|F>>>4,O[I++]=F<<4|z>>>2,O[I++]=z<<6|B,M|=J&s,M|=F&s,M|=z&s,M|=B&s;if(q<w-1&&(J=this._decodeChar(v.charCodeAt(q)),F=this._decodeChar(v.charCodeAt(q+1)),O[I++]=J<<2|F>>>4,M|=J&s,M|=F&s),q<w-2&&(z=this._decodeChar(v.charCodeAt(q+2)),O[I++]=F<<4|z>>>2,M|=z&s),q<w-3&&(B=this._decodeChar(v.charCodeAt(q+3)),O[I++]=z<<6|B,M|=B&s),M!==0)throw new Error(\"Base64Coder: incorrect characters for decoding\");return O},b.prototype._encodeByte=function(v){var y=v;return y+=65,y+=25-v>>>8&6,y+=51-v>>>8&-75,y+=61-v>>>8&-15,y+=62-v>>>8&3,String.fromCharCode(y)},b.prototype._decodeChar=function(v){var y=s;return y+=(42-v&v-44)>>>8&-s+v-43+62,y+=(46-v&v-48)>>>8&-s+v-47+63,y+=(47-v&v-58)>>>8&-s+v-48+52,y+=(64-v&v-91)>>>8&-s+v-65+0,y+=(96-v&v-123)>>>8&-s+v-97+26,y},b.prototype._getPaddingLength=function(v){var y=0;if(this._paddingCharacter){for(var w=v.length-1;w>=0&&v[w]===this._paddingCharacter;w--)y++;if(v.length<4||y>2)throw new Error(\"Base64Coder: incorrect padding\")}return y},b})();h.Coder=f;var d=new f;function N(b){return d.encode(b)}h.encode=N;function P(b){return d.decode(b)}h.decode=P;var T=(function(b){c(v,b);function v(){return b!==null&&b.apply(this,arguments)||this}return v.prototype._encodeByte=function(y){var w=y;return w+=65,w+=25-y>>>8&6,w+=51-y>>>8&-75,w+=61-y>>>8&-13,w+=62-y>>>8&49,String.fromCharCode(w)},v.prototype._decodeChar=function(y){var w=s;return w+=(44-y&y-46)>>>8&-s+y-45+62,w+=(94-y&y-96)>>>8&-s+y-95+63,w+=(47-y&y-58)>>>8&-s+y-48+52,w+=(64-y&y-91)>>>8&-s+y-65+0,w+=(96-y&y-123)>>>8&-s+y-97+26,w},v})(f);h.URLSafeCoder=T;var S=new T;function C(b){return S.encode(b)}h.encodeURLSafe=C;function x(b){return S.decode(b)}h.decodeURLSafe=x,h.encodedLength=function(b){return d.encodedLength(b)},h.maxDecodedLength=function(b){return d.maxDecodedLength(b)},h.decodedLength=function(b){return d.decodedLength(b)}}),(function(l,h,a){\"use strict\";Object.defineProperty(h,\"__esModule\",{value:!0});var c=\"utf8: invalid string\",s=\"utf8: invalid source encoding\";function f(P){for(var T=new Uint8Array(d(P)),S=0,C=0;C<P.length;C++){var x=P.charCodeAt(C);x<128?T[S++]=x:x<2048?(T[S++]=192|x>>6,T[S++]=128|x&63):x<55296?(T[S++]=224|x>>12,T[S++]=128|x>>6&63,T[S++]=128|x&63):(C++,x=(x&1023)<<10,x|=P.charCodeAt(C)&1023,x+=65536,T[S++]=240|x>>18,T[S++]=128|x>>12&63,T[S++]=128|x>>6&63,T[S++]=128|x&63)}return T}h.encode=f;function d(P){for(var T=0,S=0;S<P.length;S++){var C=P.charCodeAt(S);if(C<128)T+=1;else if(C<2048)T+=2;else if(C<55296)T+=3;else if(C<=57343){if(S>=P.length-1)throw new Error(c);S++,T+=4}else throw new Error(c)}return T}h.encodedLength=d;function N(P){for(var T=[],S=0;S<P.length;S++){var C=P[S];if(C&128){var x=void 0;if(C<224){if(S>=P.length)throw new Error(s);var b=P[++S];if((b&192)!==128)throw new Error(s);C=(C&31)<<6|b&63,x=128}else if(C<240){if(S>=P.length-1)throw new Error(s);var b=P[++S],v=P[++S];if((b&192)!==128||(v&192)!==128)throw new Error(s);C=(C&15)<<12|(b&63)<<6|v&63,x=2048}else if(C<248){if(S>=P.length-2)throw new Error(s);var b=P[++S],v=P[++S],y=P[++S];if((b&192)!==128||(v&192)!==128||(y&192)!==128)throw new Error(s);C=(C&15)<<18|(b&63)<<12|(v&63)<<6|y&63,x=65536}else throw new Error(s);if(C<x||C>=55296&&C<=57343)throw new Error(s);if(C>=65536){if(C>1114111)throw new Error(s);C-=65536,T.push(String.fromCharCode(55296|C>>10)),C=56320|C&1023}}T.push(String.fromCharCode(C))}return T.join(\"\")}h.decode=N}),(function(l,h,a){l.exports=a(3).default}),(function(l,h,a){\"use strict\";a.r(h);var c=(function(){function e(t,n){this.lastId=0,this.prefix=t,this.name=n}return e.prototype.create=function(t){this.lastId++;var n=this.lastId,r=this.prefix+n,i=this.name+\"[\"+n+\"]\",o=!1,u=function(){o||(t.apply(null,arguments),o=!0)};return this[n]=u,{number:n,id:r,name:i,callback:u}},e.prototype.remove=function(t){delete this[t.number]},e})(),s=new c(\"_pusher_script_\",\"Pusher.ScriptReceivers\"),f={VERSION:\"7.6.0\",PROTOCOL:7,wsPort:80,wssPort:443,wsPath:\"\",httpHost:\"sockjs.pusher.com\",httpPort:80,httpsPort:443,httpPath:\"/pusher\",stats_host:\"stats.pusher.com\",authEndpoint:\"/pusher/auth\",authTransport:\"ajax\",activityTimeout:12e4,pongTimeout:3e4,unavailableTimeout:1e4,cluster:\"mt1\",userAuthentication:{endpoint:\"/pusher/user-auth\",transport:\"ajax\"},channelAuthorization:{endpoint:\"/pusher/auth\",transport:\"ajax\"},cdn_http:\"http://js.pusher.com\",cdn_https:\"https://js.pusher.com\",dependency_suffix:\"\"},d=f,N=(function(){function e(t){this.options=t,this.receivers=t.receivers||s,this.loading={}}return e.prototype.load=function(t,n,r){var i=this;if(i.loading[t]&&i.loading[t].length>0)i.loading[t].push(r);else{i.loading[t]=[r];var o=m.createScriptRequest(i.getPath(t,n)),u=i.receivers.create(function(p){if(i.receivers.remove(u),i.loading[t]){var _=i.loading[t];delete i.loading[t];for(var g=function(E){E||o.cleanup()},k=0;k<_.length;k++)_[k](p,g)}});o.send(u)}},e.prototype.getRoot=function(t){var n,r=m.getDocument().location.protocol;return t&&t.useTLS||r===\"https:\"?n=this.options.cdn_https:n=this.options.cdn_http,n.replace(/\\/*$/,\"\")+\"/\"+this.options.version},e.prototype.getPath=function(t,n){return this.getRoot(n)+\"/\"+t+this.options.suffix+\".js\"},e})(),P=N,T=new c(\"_pusher_dependencies\",\"Pusher.DependenciesReceivers\"),S=new P({cdn_http:d.cdn_http,cdn_https:d.cdn_https,version:d.VERSION,suffix:d.dependency_suffix,receivers:T}),C={baseUrl:\"https://pusher.com\",urls:{authenticationEndpoint:{path:\"/docs/channels/server_api/authenticating_users\"},authorizationEndpoint:{path:\"/docs/channels/server_api/authorizing-users/\"},javascriptQuickStart:{path:\"/docs/javascript_quick_start\"},triggeringClientEvents:{path:\"/docs/client_api_guide/client_events#trigger-events\"},encryptedChannelSupport:{fullUrl:\"https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support\"}}},x=function(e){var t=\"See:\",n=C.urls[e];if(!n)return\"\";var r;return n.fullUrl?r=n.fullUrl:n.path&&(r=C.baseUrl+n.path),r?t+\" \"+r:\"\"},b={buildLogSuffix:x},v;(function(e){e.UserAuthentication=\"user-authentication\",e.ChannelAuthorization=\"channel-authorization\"})(v||(v={}));var y=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),w=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),O=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),I=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),q=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),M=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),J=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),F=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),z=(function(e){y(t,e);function t(n){var r=this.constructor,i=e.call(this,n)||this;return Object.setPrototypeOf(i,r.prototype),i}return t})(Error),B=(function(e){y(t,e);function t(n,r){var i=this.constructor,o=e.call(this,r)||this;return o.status=n,Object.setPrototypeOf(o,i.prototype),o}return t})(Error),ke=function(e,t,n,r,i){var o=m.createXHR();o.open(\"POST\",n.endpoint,!0),o.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\");for(var u in n.headers)o.setRequestHeader(u,n.headers[u]);if(n.headersProvider!=null){var p=n.headersProvider();for(var u in p)o.setRequestHeader(u,p[u])}return o.onreadystatechange=function(){if(o.readyState===4)if(o.status===200){var _=void 0,g=!1;try{_=JSON.parse(o.responseText),g=!0}catch{i(new B(200,\"JSON returned from \"+r.toString()+\" endpoint was invalid, yet status code was 200. Data was: \"+o.responseText),null)}g&&i(null,_)}else{var k=\"\";switch(r){case v.UserAuthentication:k=b.buildLogSuffix(\"authenticationEndpoint\");break;case v.ChannelAuthorization:k=\"Clients must be authorized to join private or presence channels. \"+b.buildLogSuffix(\"authorizationEndpoint\");break}i(new B(o.status,\"Unable to retrieve auth string from \"+r.toString()+\" endpoint - \"+(\"received status: \"+o.status+\" from \"+n.endpoint+\". \"+k)),null)}},o.send(t),o},Se=ke;function Ce(e){return Ee(Oe(e))}for(var nt=String.fromCharCode,Z=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",Te={},ct=0,Pe=Z.length;ct<Pe;ct++)Te[Z.charAt(ct)]=ct;var xe=function(e){var t=e.charCodeAt(0);return t<128?e:t<2048?nt(192|t>>>6)+nt(128|t&63):nt(224|t>>>12&15)+nt(128|t>>>6&63)+nt(128|t&63)},Oe=function(e){return e.replace(/[^\\x00-\\x7F]/g,xe)},Ae=function(e){var t=[0,2,1][e.length%3],n=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0),r=[Z.charAt(n>>>18),Z.charAt(n>>>12&63),t>=2?\"=\":Z.charAt(n>>>6&63),t>=1?\"=\":Z.charAt(n&63)];return r.join(\"\")},Ee=window.btoa||function(e){return e.replace(/[\\s\\S]{1,3}/g,Ae)},Le=(function(){function e(t,n,r,i){var o=this;this.clear=n,this.timer=t(function(){o.timer&&(o.timer=i(o.timer))},r)}return e.prototype.isRunning=function(){return this.timer!==null},e.prototype.ensureAborted=function(){this.timer&&(this.clear(this.timer),this.timer=null)},e})(),jt=Le,Nt=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})();function Re(e){window.clearTimeout(e)}function Ie(e){window.clearInterval(e)}var Q=(function(e){Nt(t,e);function t(n,r){return e.call(this,setTimeout,Re,n,function(i){return r(),null})||this}return t})(jt),je=(function(e){Nt(t,e);function t(n,r){return e.call(this,setInterval,Ie,n,function(i){return r(),i})||this}return t})(jt),Ne={now:function(){return Date.now?Date.now():new Date().valueOf()},defer:function(e){return new Q(0,e)},method:function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Array.prototype.slice.call(arguments,1);return function(i){return i[e].apply(i,r.concat(arguments))}}},j=Ne;function U(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var r=0;r<t.length;r++){var i=t[r];for(var o in i)i[o]&&i[o].constructor&&i[o].constructor===Object?e[o]=U(e[o]||{},i[o]):e[o]=i[o]}return e}function qe(){for(var e=[\"Pusher\"],t=0;t<arguments.length;t++)typeof arguments[t]==\"string\"?e.push(arguments[t]):e.push(ut(arguments[t]));return e.join(\" : \")}function qt(e,t){var n=Array.prototype.indexOf;if(e===null)return-1;if(n&&e.indexOf===n)return e.indexOf(t);for(var r=0,i=e.length;r<i;r++)if(e[r]===t)return r;return-1}function W(e,t){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t(e[n],n,e)}function Ut(e){var t=[];return W(e,function(n,r){t.push(r)}),t}function Ue(e){var t=[];return W(e,function(n){t.push(n)}),t}function rt(e,t,n){for(var r=0;r<e.length;r++)t.call(n||window,e[r],r,e)}function Dt(e,t){for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r,e,n));return n}function De(e,t){var n={};return W(e,function(r,i){n[i]=t(r)}),n}function Ht(e,t){t=t||function(i){return!!i};for(var n=[],r=0;r<e.length;r++)t(e[r],r,e,n)&&n.push(e[r]);return n}function Mt(e,t){var n={};return W(e,function(r,i){(t&&t(r,i,e,n)||r)&&(n[i]=r)}),n}function He(e){var t=[];return W(e,function(n,r){t.push([r,n])}),t}function zt(e,t){for(var n=0;n<e.length;n++)if(t(e[n],n,e))return!0;return!1}function Me(e,t){for(var n=0;n<e.length;n++)if(!t(e[n],n,e))return!1;return!0}function ze(e){return De(e,function(t){return typeof t==\"object\"&&(t=ut(t)),encodeURIComponent(Ce(t.toString()))})}function Fe(e){var t=Mt(e,function(r){return r!==void 0}),n=Dt(He(ze(t)),j.method(\"join\",\"=\")).join(\"&\");return n}function Be(e){var t=[],n=[];return(function r(i,o){var u,p,_;switch(typeof i){case\"object\":if(!i)return null;for(u=0;u<t.length;u+=1)if(t[u]===i)return{$ref:n[u]};if(t.push(i),n.push(o),Object.prototype.toString.apply(i)===\"[object Array]\")for(_=[],u=0;u<i.length;u+=1)_[u]=r(i[u],o+\"[\"+u+\"]\");else{_={};for(p in i)Object.prototype.hasOwnProperty.call(i,p)&&(_[p]=r(i[p],o+\"[\"+JSON.stringify(p)+\"]\"))}return _;case\"number\":case\"string\":case\"boolean\":return i}})(e,\"$\")}function ut(e){try{return JSON.stringify(e)}catch{return JSON.stringify(Be(e))}}var Xe=(function(){function e(){this.globalLog=function(t){window.console&&window.console.log&&window.console.log(t)}}return e.prototype.debug=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.log(this.globalLog,t)},e.prototype.warn=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.log(this.globalLogWarn,t)},e.prototype.error=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.log(this.globalLogError,t)},e.prototype.globalLogWarn=function(t){window.console&&window.console.warn?window.console.warn(t):this.globalLog(t)},e.prototype.globalLogError=function(t){window.console&&window.console.error?window.console.error(t):this.globalLogWarn(t)},e.prototype.log=function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];var i=qe.apply(this,arguments);if(Pt.log)Pt.log(i);else if(Pt.logToConsole){var o=t.bind(this);o(i)}},e})(),A=new Xe,Je=function(e,t,n,r,i){(n.headers!==void 0||n.headersProvider!=null)&&A.warn(\"To send headers with the \"+r.toString()+\" request, you must use AJAX, rather than JSONP.\");var o=e.nextAuthCallbackID.toString();e.nextAuthCallbackID++;var u=e.getDocument(),p=u.createElement(\"script\");e.auth_callbacks[o]=function(k){i(null,k)};var _=\"Pusher.auth_callbacks['\"+o+\"']\";p.src=n.endpoint+\"?callback=\"+encodeURIComponent(_)+\"&\"+t;var g=u.getElementsByTagName(\"head\")[0]||u.documentElement;g.insertBefore(p,g.firstChild)},We=Je,Ve=(function(){function e(t){this.src=t}return e.prototype.send=function(t){var n=this,r=\"Error loading \"+n.src;n.script=document.createElement(\"script\"),n.script.id=t.id,n.script.src=n.src,n.script.type=\"text/javascript\",n.script.charset=\"UTF-8\",n.script.addEventListener?(n.script.onerror=function(){t.callback(r)},n.script.onload=function(){t.callback(null)}):n.script.onreadystatechange=function(){(n.script.readyState===\"loaded\"||n.script.readyState===\"complete\")&&t.callback(null)},n.script.async===void 0&&document.attachEvent&&/opera/i.test(navigator.userAgent)?(n.errorScript=document.createElement(\"script\"),n.errorScript.id=t.id+\"_error\",n.errorScript.text=t.name+\"('\"+r+\"');\",n.script.async=n.errorScript.async=!1):n.script.async=!0;var i=document.getElementsByTagName(\"head\")[0];i.insertBefore(n.script,i.firstChild),n.errorScript&&i.insertBefore(n.errorScript,n.script.nextSibling)},e.prototype.cleanup=function(){this.script&&(this.script.onload=this.script.onerror=null,this.script.onreadystatechange=null),this.script&&this.script.parentNode&&this.script.parentNode.removeChild(this.script),this.errorScript&&this.errorScript.parentNode&&this.errorScript.parentNode.removeChild(this.errorScript),this.script=null,this.errorScript=null},e})(),Ge=Ve,Qe=(function(){function e(t,n){this.url=t,this.data=n}return e.prototype.send=function(t){if(!this.request){var n=Fe(this.data),r=this.url+\"/\"+t.number+\"?\"+n;this.request=m.createScriptRequest(r),this.request.send(t)}},e.prototype.cleanup=function(){this.request&&this.request.cleanup()},e})(),Ke=Qe,Ye=function(e,t){return function(n,r){var i=\"http\"+(t?\"s\":\"\")+\"://\",o=i+(e.host||e.options.host)+e.options.path,u=m.createJSONPRequest(o,n),p=m.ScriptReceivers.create(function(_,g){s.remove(p),u.cleanup(),g&&g.host&&(e.host=g.host),r&&r(_,g)});u.send(p)}},$e={name:\"jsonp\",getAgent:Ye},Ze=$e;function yt(e,t,n){var r=e+(t.useTLS?\"s\":\"\"),i=t.useTLS?t.hostTLS:t.hostNonTLS;return r+\"://\"+i+n}function gt(e,t){var n=\"/app/\"+e,r=\"?protocol=\"+d.PROTOCOL+\"&client=js&version=\"+d.VERSION+(t?\"&\"+t:\"\");return n+r}var tn={getInitial:function(e,t){var n=(t.httpPath||\"\")+gt(e,\"flash=false\");return yt(\"ws\",t,n)}},en={getInitial:function(e,t){var n=(t.httpPath||\"/pusher\")+gt(e);return yt(\"http\",t,n)}},nn={getInitial:function(e,t){return yt(\"http\",t,t.httpPath||\"/pusher\")},getPath:function(e,t){return gt(e)}},rn=(function(){function e(){this._callbacks={}}return e.prototype.get=function(t){return this._callbacks[_t(t)]},e.prototype.add=function(t,n,r){var i=_t(t);this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push({fn:n,context:r})},e.prototype.remove=function(t,n,r){if(!t&&!n&&!r){this._callbacks={};return}var i=t?[_t(t)]:Ut(this._callbacks);n||r?this.removeCallback(i,n,r):this.removeAllCallbacks(i)},e.prototype.removeCallback=function(t,n,r){rt(t,function(i){this._callbacks[i]=Ht(this._callbacks[i]||[],function(o){return n&&n!==o.fn||r&&r!==o.context}),this._callbacks[i].length===0&&delete this._callbacks[i]},this)},e.prototype.removeAllCallbacks=function(t){rt(t,function(n){delete this._callbacks[n]},this)},e})(),on=rn;function _t(e){return\"_\"+e}var sn=(function(){function e(t){this.callbacks=new on,this.global_callbacks=[],this.failThrough=t}return e.prototype.bind=function(t,n,r){return this.callbacks.add(t,n,r),this},e.prototype.bind_global=function(t){return this.global_callbacks.push(t),this},e.prototype.unbind=function(t,n,r){return this.callbacks.remove(t,n,r),this},e.prototype.unbind_global=function(t){return t?(this.global_callbacks=Ht(this.global_callbacks||[],function(n){return n!==t}),this):(this.global_callbacks=[],this)},e.prototype.unbind_all=function(){return this.unbind(),this.unbind_global(),this},e.prototype.emit=function(t,n,r){for(var i=0;i<this.global_callbacks.length;i++)this.global_callbacks[i](t,n);var o=this.callbacks.get(t),u=[];if(r?u.push(n,r):n&&u.push(n),o&&o.length>0)for(var i=0;i<o.length;i++)o[i].fn.apply(o[i].context||window,u);else this.failThrough&&this.failThrough(t,n);return this},e})(),V=sn,an=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),cn=(function(e){an(t,e);function t(n,r,i,o,u){var p=e.call(this)||this;return p.initialize=m.transportConnectionInitializer,p.hooks=n,p.name=r,p.priority=i,p.key=o,p.options=u,p.state=\"new\",p.timeline=u.timeline,p.activityTimeout=u.activityTimeout,p.id=p.timeline.generateUniqueID(),p}return t.prototype.handlesActivityChecks=function(){return!!this.hooks.handlesActivityChecks},t.prototype.supportsPing=function(){return!!this.hooks.supportsPing},t.prototype.connect=function(){var n=this;if(this.socket||this.state!==\"initialized\")return!1;var r=this.hooks.urls.getInitial(this.key,this.options);try{this.socket=this.hooks.getSocket(r,this.options)}catch(i){return j.defer(function(){n.onError(i),n.changeState(\"closed\")}),!1}return this.bindListeners(),A.debug(\"Connecting\",{transport:this.name,url:r}),this.changeState(\"connecting\"),!0},t.prototype.close=function(){return this.socket?(this.socket.close(),!0):!1},t.prototype.send=function(n){var r=this;return this.state===\"open\"?(j.defer(function(){r.socket&&r.socket.send(n)}),!0):!1},t.prototype.ping=function(){this.state===\"open\"&&this.supportsPing()&&this.socket.ping()},t.prototype.onOpen=function(){this.hooks.beforeOpen&&this.hooks.beforeOpen(this.socket,this.hooks.urls.getPath(this.key,this.options)),this.changeState(\"open\"),this.socket.onopen=void 0},t.prototype.onError=function(n){this.emit(\"error\",{type:\"WebSocketError\",error:n}),this.timeline.error(this.buildTimelineMessage({error:n.toString()}))},t.prototype.onClose=function(n){n?this.changeState(\"closed\",{code:n.code,reason:n.reason,wasClean:n.wasClean}):this.changeState(\"closed\"),this.unbindListeners(),this.socket=void 0},t.prototype.onMessage=function(n){this.emit(\"message\",n)},t.prototype.onActivity=function(){this.emit(\"activity\")},t.prototype.bindListeners=function(){var n=this;this.socket.onopen=function(){n.onOpen()},this.socket.onerror=function(r){n.onError(r)},this.socket.onclose=function(r){n.onClose(r)},this.socket.onmessage=function(r){n.onMessage(r)},this.supportsPing()&&(this.socket.onactivity=function(){n.onActivity()})},t.prototype.unbindListeners=function(){this.socket&&(this.socket.onopen=void 0,this.socket.onerror=void 0,this.socket.onclose=void 0,this.socket.onmessage=void 0,this.supportsPing()&&(this.socket.onactivity=void 0))},t.prototype.changeState=function(n,r){this.state=n,this.timeline.info(this.buildTimelineMessage({state:n,params:r})),this.emit(n,r)},t.prototype.buildTimelineMessage=function(n){return U({cid:this.id},n)},t})(V),un=cn,hn=(function(){function e(t){this.hooks=t}return e.prototype.isSupported=function(t){return this.hooks.isSupported(t)},e.prototype.createConnection=function(t,n,r,i){return new un(this.hooks,t,n,r,i)},e})(),tt=hn,ln=new tt({urls:tn,handlesActivityChecks:!1,supportsPing:!1,isInitialized:function(){return!!m.getWebSocketAPI()},isSupported:function(){return!!m.getWebSocketAPI()},getSocket:function(e){return m.createWebSocket(e)}}),Ft={urls:en,handlesActivityChecks:!1,supportsPing:!0,isInitialized:function(){return!0}},Bt=U({getSocket:function(e){return m.HTTPFactory.createStreamingSocket(e)}},Ft),Xt=U({getSocket:function(e){return m.HTTPFactory.createPollingSocket(e)}},Ft),Jt={isSupported:function(){return m.isXHRSupported()}},fn=new tt(U({},Bt,Jt)),pn=new tt(U({},Xt,Jt)),dn={ws:ln,xhr_streaming:fn,xhr_polling:pn},ht=dn,vn=new tt({file:\"sockjs\",urls:nn,handlesActivityChecks:!0,supportsPing:!1,isSupported:function(){return!0},isInitialized:function(){return window.SockJS!==void 0},getSocket:function(e,t){return new window.SockJS(e,null,{js_path:S.getPath(\"sockjs\",{useTLS:t.useTLS}),ignore_null_origin:t.ignoreNullOrigin})},beforeOpen:function(e,t){e.send(JSON.stringify({path:t}))}}),Wt={isSupported:function(e){var t=m.isXDRSupported(e.useTLS);return t}},yn=new tt(U({},Bt,Wt)),gn=new tt(U({},Xt,Wt));ht.xdr_streaming=yn,ht.xdr_polling=gn,ht.sockjs=vn;var _n=ht,bn=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),mn=(function(e){bn(t,e);function t(){var n=e.call(this)||this,r=n;return window.addEventListener!==void 0&&(window.addEventListener(\"online\",function(){r.emit(\"online\")},!1),window.addEventListener(\"offline\",function(){r.emit(\"offline\")},!1)),n}return t.prototype.isOnline=function(){return window.navigator.onLine===void 0?!0:window.navigator.onLine},t})(V),wn=new mn,kn=(function(){function e(t,n,r){this.manager=t,this.transport=n,this.minPingDelay=r.minPingDelay,this.maxPingDelay=r.maxPingDelay,this.pingDelay=void 0}return e.prototype.createConnection=function(t,n,r,i){var o=this;i=U({},i,{activityTimeout:this.pingDelay});var u=this.transport.createConnection(t,n,r,i),p=null,_=function(){u.unbind(\"open\",_),u.bind(\"closed\",g),p=j.now()},g=function(k){if(u.unbind(\"closed\",g),k.code===1002||k.code===1003)o.manager.reportDeath();else if(!k.wasClean&&p){var E=j.now()-p;E<2*o.maxPingDelay&&(o.manager.reportDeath(),o.pingDelay=Math.max(E/2,o.minPingDelay))}};return u.bind(\"open\",_),u},e.prototype.isSupported=function(t){return this.manager.isAlive()&&this.transport.isSupported(t)},e})(),Sn=kn,Vt={decodeMessage:function(e){try{var t=JSON.parse(e.data),n=t.data;if(typeof n==\"string\")try{n=JSON.parse(t.data)}catch{}var r={event:t.event,channel:t.channel,data:n};return t.user_id&&(r.user_id=t.user_id),r}catch(i){throw{type:\"MessageParseError\",error:i,data:e.data}}},encodeMessage:function(e){return JSON.stringify(e)},processHandshake:function(e){var t=Vt.decodeMessage(e);if(t.event===\"pusher:connection_established\"){if(!t.data.activity_timeout)throw\"No activity timeout specified in handshake\";return{action:\"connected\",id:t.data.socket_id,activityTimeout:t.data.activity_timeout*1e3}}else{if(t.event===\"pusher:error\")return{action:this.getCloseAction(t.data),error:this.getCloseError(t.data)};throw\"Invalid handshake\"}},getCloseAction:function(e){return e.code<4e3?e.code>=1002&&e.code<=1004?\"backoff\":null:e.code===4e3?\"tls_only\":e.code<4100?\"refused\":e.code<4200?\"backoff\":e.code<4300?\"retry\":\"refused\"},getCloseError:function(e){return e.code!==1e3&&e.code!==1001?{type:\"PusherError\",data:{code:e.code,message:e.reason||e.message}}:null}},K=Vt,Cn=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),Tn=(function(e){Cn(t,e);function t(n,r){var i=e.call(this)||this;return i.id=n,i.transport=r,i.activityTimeout=r.activityTimeout,i.bindListeners(),i}return t.prototype.handlesActivityChecks=function(){return this.transport.handlesActivityChecks()},t.prototype.send=function(n){return this.transport.send(n)},t.prototype.send_event=function(n,r,i){var o={event:n,data:r};return i&&(o.channel=i),A.debug(\"Event sent\",o),this.send(K.encodeMessage(o))},t.prototype.ping=function(){this.transport.supportsPing()?this.transport.ping():this.send_event(\"pusher:ping\",{})},t.prototype.close=function(){this.transport.close()},t.prototype.bindListeners=function(){var n=this,r={message:function(o){var u;try{u=K.decodeMessage(o)}catch(p){n.emit(\"error\",{type:\"MessageParseError\",error:p,data:o.data})}if(u!==void 0){switch(A.debug(\"Event recd\",u),u.event){case\"pusher:error\":n.emit(\"error\",{type:\"PusherError\",data:u.data});break;case\"pusher:ping\":n.emit(\"ping\");break;case\"pusher:pong\":n.emit(\"pong\");break}n.emit(\"message\",u)}},activity:function(){n.emit(\"activity\")},error:function(o){n.emit(\"error\",o)},closed:function(o){i(),o&&o.code&&n.handleCloseEvent(o),n.transport=null,n.emit(\"closed\")}},i=function(){W(r,function(o,u){n.transport.unbind(u,o)})};W(r,function(o,u){n.transport.bind(u,o)})},t.prototype.handleCloseEvent=function(n){var r=K.getCloseAction(n),i=K.getCloseError(n);i&&this.emit(\"error\",i),r&&this.emit(r,{action:r,error:i})},t})(V),Pn=Tn,xn=(function(){function e(t,n){this.transport=t,this.callback=n,this.bindListeners()}return e.prototype.close=function(){this.unbindListeners(),this.transport.close()},e.prototype.bindListeners=function(){var t=this;this.onMessage=function(n){t.unbindListeners();var r;try{r=K.processHandshake(n)}catch(i){t.finish(\"error\",{error:i}),t.transport.close();return}r.action===\"connected\"?t.finish(\"connected\",{connection:new Pn(r.id,t.transport),activityTimeout:r.activityTimeout}):(t.finish(r.action,{error:r.error}),t.transport.close())},this.onClosed=function(n){t.unbindListeners();var r=K.getCloseAction(n)||\"backoff\",i=K.getCloseError(n);t.finish(r,{error:i})},this.transport.bind(\"message\",this.onMessage),this.transport.bind(\"closed\",this.onClosed)},e.prototype.unbindListeners=function(){this.transport.unbind(\"message\",this.onMessage),this.transport.unbind(\"closed\",this.onClosed)},e.prototype.finish=function(t,n){this.callback(U({transport:this.transport,action:t},n))},e})(),On=xn,An=(function(){function e(t,n){this.timeline=t,this.options=n||{}}return e.prototype.send=function(t,n){this.timeline.isEmpty()||this.timeline.send(m.TimelineTransport.getAgent(this,t),n)},e})(),En=An,Ln=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),Rn=(function(e){Ln(t,e);function t(n,r){var i=e.call(this,function(o,u){A.debug(\"No callbacks on \"+n+\" for \"+o)})||this;return i.name=n,i.pusher=r,i.subscribed=!1,i.subscriptionPending=!1,i.subscriptionCancelled=!1,i}return t.prototype.authorize=function(n,r){return r(null,{auth:\"\"})},t.prototype.trigger=function(n,r){if(n.indexOf(\"client-\")!==0)throw new w(\"Event '\"+n+\"' does not start with 'client-'\");if(!this.subscribed){var i=b.buildLogSuffix(\"triggeringClientEvents\");A.warn(\"Client event triggered before channel 'subscription_succeeded' event . \"+i)}return this.pusher.send_event(n,r,this.name)},t.prototype.disconnect=function(){this.subscribed=!1,this.subscriptionPending=!1},t.prototype.handleEvent=function(n){var r=n.event,i=n.data;if(r===\"pusher_internal:subscription_succeeded\")this.handleSubscriptionSucceededEvent(n);else if(r===\"pusher_internal:subscription_count\")this.handleSubscriptionCountEvent(n);else if(r.indexOf(\"pusher_internal:\")!==0){var o={};this.emit(r,i,o)}},t.prototype.handleSubscriptionSucceededEvent=function(n){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):this.emit(\"pusher:subscription_succeeded\",n.data)},t.prototype.handleSubscriptionCountEvent=function(n){n.data.subscription_count&&(this.subscriptionCount=n.data.subscription_count),this.emit(\"pusher:subscription_count\",n.data)},t.prototype.subscribe=function(){var n=this;this.subscribed||(this.subscriptionPending=!0,this.subscriptionCancelled=!1,this.authorize(this.pusher.connection.socket_id,function(r,i){r?(n.subscriptionPending=!1,A.error(r.toString()),n.emit(\"pusher:subscription_error\",Object.assign({},{type:\"AuthError\",error:r.message},r instanceof B?{status:r.status}:{}))):n.pusher.send_event(\"pusher:subscribe\",{auth:i.auth,channel_data:i.channel_data,channel:n.name})}))},t.prototype.unsubscribe=function(){this.subscribed=!1,this.pusher.send_event(\"pusher:unsubscribe\",{channel:this.name})},t.prototype.cancelSubscription=function(){this.subscriptionCancelled=!0},t.prototype.reinstateSubscription=function(){this.subscriptionCancelled=!1},t})(V),bt=Rn,In=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),jn=(function(e){In(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.authorize=function(n,r){return this.pusher.config.channelAuthorizer({channelName:this.name,socketId:n},r)},t})(bt),mt=jn,Nn=(function(){function e(){this.reset()}return e.prototype.get=function(t){return Object.prototype.hasOwnProperty.call(this.members,t)?{id:t,info:this.members[t]}:null},e.prototype.each=function(t){var n=this;W(this.members,function(r,i){t(n.get(i))})},e.prototype.setMyID=function(t){this.myID=t},e.prototype.onSubscription=function(t){this.members=t.presence.hash,this.count=t.presence.count,this.me=this.get(this.myID)},e.prototype.addMember=function(t){return this.get(t.user_id)===null&&this.count++,this.members[t.user_id]=t.user_info,this.get(t.user_id)},e.prototype.removeMember=function(t){var n=this.get(t.user_id);return n&&(delete this.members[t.user_id],this.count--),n},e.prototype.reset=function(){this.members={},this.count=0,this.myID=null,this.me=null},e})(),qn=Nn,Un=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),Dn=function(e,t,n,r){function i(o){return o instanceof n?o:new n(function(u){u(o)})}return new(n||(n=Promise))(function(o,u){function p(k){try{g(r.next(k))}catch(E){u(E)}}function _(k){try{g(r.throw(k))}catch(E){u(E)}}function g(k){k.done?o(k.value):i(k.value).then(p,_)}g((r=r.apply(e,t||[])).next())})},Hn=function(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,u;return u={next:p(0),throw:p(1),return:p(2)},typeof Symbol==\"function\"&&(u[Symbol.iterator]=function(){return this}),u;function p(g){return function(k){return _([g,k])}}function _(g){if(r)throw new TypeError(\"Generator is already executing.\");for(;n;)try{if(r=1,i&&(o=g[0]&2?i.return:g[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,g[1])).done)return o;switch(i=0,o&&(g=[g[0]&2,o.value]),g[0]){case 0:case 1:o=g;break;case 4:return n.label++,{value:g[1],done:!1};case 5:n.label++,i=g[1],g=[0];continue;case 7:g=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(g[0]===6||g[0]===2)){n=0;continue}if(g[0]===3&&(!o||g[1]>o[0]&&g[1]<o[3])){n.label=g[1];break}if(g[0]===6&&n.label<o[1]){n.label=o[1],o=g;break}if(o&&n.label<o[2]){n.label=o[2],n.ops.push(g);break}o[2]&&n.ops.pop(),n.trys.pop();continue}g=t.call(e,n)}catch(k){g=[6,k],i=0}finally{r=o=0}if(g[0]&5)throw g[1];return{value:g[0]?g[1]:void 0,done:!0}}},Mn=(function(e){Un(t,e);function t(n,r){var i=e.call(this,n,r)||this;return i.members=new qn,i}return t.prototype.authorize=function(n,r){var i=this;e.prototype.authorize.call(this,n,function(o,u){return Dn(i,void 0,void 0,function(){var p,_;return Hn(this,function(g){switch(g.label){case 0:return o?[3,3]:(u=u,u.channel_data==null?[3,1]:(p=JSON.parse(u.channel_data),this.members.setMyID(p.user_id),[3,3]));case 1:return[4,this.pusher.user.signinDonePromise];case 2:if(g.sent(),this.pusher.user.user_data!=null)this.members.setMyID(this.pusher.user.user_data.id);else return _=b.buildLogSuffix(\"authorizationEndpoint\"),A.error(\"Invalid auth response for channel '\"+this.name+\"', \"+(\"expected 'channel_data' field. \"+_+\", \")+\"or the user should be signed in.\"),r(\"Invalid auth response\"),[2];g.label=3;case 3:return r(o,u),[2]}})})})},t.prototype.handleEvent=function(n){var r=n.event;if(r.indexOf(\"pusher_internal:\")===0)this.handleInternalEvent(n);else{var i=n.data,o={};n.user_id&&(o.user_id=n.user_id),this.emit(r,i,o)}},t.prototype.handleInternalEvent=function(n){var r=n.event,i=n.data;switch(r){case\"pusher_internal:subscription_succeeded\":this.handleSubscriptionSucceededEvent(n);break;case\"pusher_internal:subscription_count\":this.handleSubscriptionCountEvent(n);break;case\"pusher_internal:member_added\":var o=this.members.addMember(i);this.emit(\"pusher:member_added\",o);break;case\"pusher_internal:member_removed\":var u=this.members.removeMember(i);u&&this.emit(\"pusher:member_removed\",u);break}},t.prototype.handleSubscriptionSucceededEvent=function(n){this.subscriptionPending=!1,this.subscribed=!0,this.subscriptionCancelled?this.pusher.unsubscribe(this.name):(this.members.onSubscription(n.data),this.emit(\"pusher:subscription_succeeded\",this.members))},t.prototype.disconnect=function(){this.members.reset(),e.prototype.disconnect.call(this)},t})(mt),zn=Mn,Fn=a(1),wt=a(0),Bn=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),Xn=(function(e){Bn(t,e);function t(n,r,i){var o=e.call(this,n,r)||this;return o.key=null,o.nacl=i,o}return t.prototype.authorize=function(n,r){var i=this;e.prototype.authorize.call(this,n,function(o,u){if(o){r(o,u);return}var p=u.shared_secret;if(!p){r(new Error(\"No shared_secret key in auth payload for encrypted channel: \"+i.name),null);return}i.key=Object(wt.decode)(p),delete u.shared_secret,r(null,u)})},t.prototype.trigger=function(n,r){throw new J(\"Client events are not currently supported for encrypted channels\")},t.prototype.handleEvent=function(n){var r=n.event,i=n.data;if(r.indexOf(\"pusher_internal:\")===0||r.indexOf(\"pusher:\")===0){e.prototype.handleEvent.call(this,n);return}this.handleEncryptedEvent(r,i)},t.prototype.handleEncryptedEvent=function(n,r){var i=this;if(!this.key){A.debug(\"Received encrypted event before key has been retrieved from the authEndpoint\");return}if(!r.ciphertext||!r.nonce){A.error(\"Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: \"+r);return}var o=Object(wt.decode)(r.ciphertext);if(o.length<this.nacl.secretbox.overheadLength){A.error(\"Expected encrypted event ciphertext length to be \"+this.nacl.secretbox.overheadLength+\", got: \"+o.length);return}var u=Object(wt.decode)(r.nonce);if(u.length<this.nacl.secretbox.nonceLength){A.error(\"Expected encrypted event nonce length to be \"+this.nacl.secretbox.nonceLength+\", got: \"+u.length);return}var p=this.nacl.secretbox.open(o,u,this.key);if(p===null){A.debug(\"Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...\"),this.authorize(this.pusher.connection.socket_id,function(_,g){if(_){A.error(\"Failed to make a request to the authEndpoint: \"+g+\". Unable to fetch new key, so dropping encrypted event\");return}if(p=i.nacl.secretbox.open(o,u,i.key),p===null){A.error(\"Failed to decrypt event with new key. Dropping encrypted event\");return}i.emit(n,i.getDataToEmit(p))});return}this.emit(n,this.getDataToEmit(p))},t.prototype.getDataToEmit=function(n){var r=Object(Fn.decode)(n);try{return JSON.parse(r)}catch{return r}},t})(mt),Jn=Xn,Wn=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),Vn=(function(e){Wn(t,e);function t(n,r){var i=e.call(this)||this;i.state=\"initialized\",i.connection=null,i.key=n,i.options=r,i.timeline=i.options.timeline,i.usingTLS=i.options.useTLS,i.errorCallbacks=i.buildErrorCallbacks(),i.connectionCallbacks=i.buildConnectionCallbacks(i.errorCallbacks),i.handshakeCallbacks=i.buildHandshakeCallbacks(i.errorCallbacks);var o=m.getNetwork();return o.bind(\"online\",function(){i.timeline.info({netinfo:\"online\"}),(i.state===\"connecting\"||i.state===\"unavailable\")&&i.retryIn(0)}),o.bind(\"offline\",function(){i.timeline.info({netinfo:\"offline\"}),i.connection&&i.sendActivityCheck()}),i.updateStrategy(),i}return t.prototype.connect=function(){if(!(this.connection||this.runner)){if(!this.strategy.isSupported()){this.updateState(\"failed\");return}this.updateState(\"connecting\"),this.startConnecting(),this.setUnavailableTimer()}},t.prototype.send=function(n){return this.connection?this.connection.send(n):!1},t.prototype.send_event=function(n,r,i){return this.connection?this.connection.send_event(n,r,i):!1},t.prototype.disconnect=function(){this.disconnectInternally(),this.updateState(\"disconnected\")},t.prototype.isUsingTLS=function(){return this.usingTLS},t.prototype.startConnecting=function(){var n=this,r=function(i,o){i?n.runner=n.strategy.connect(0,r):o.action===\"error\"?(n.emit(\"error\",{type:\"HandshakeError\",error:o.error}),n.timeline.error({handshakeError:o.error})):(n.abortConnecting(),n.handshakeCallbacks[o.action](o))};this.runner=this.strategy.connect(0,r)},t.prototype.abortConnecting=function(){this.runner&&(this.runner.abort(),this.runner=null)},t.prototype.disconnectInternally=function(){if(this.abortConnecting(),this.clearRetryTimer(),this.clearUnavailableTimer(),this.connection){var n=this.abandonConnection();n.close()}},t.prototype.updateStrategy=function(){this.strategy=this.options.getStrategy({key:this.key,timeline:this.timeline,useTLS:this.usingTLS})},t.prototype.retryIn=function(n){var r=this;this.timeline.info({action:\"retry\",delay:n}),n>0&&this.emit(\"connecting_in\",Math.round(n/1e3)),this.retryTimer=new Q(n||0,function(){r.disconnectInternally(),r.connect()})},t.prototype.clearRetryTimer=function(){this.retryTimer&&(this.retryTimer.ensureAborted(),this.retryTimer=null)},t.prototype.setUnavailableTimer=function(){var n=this;this.unavailableTimer=new Q(this.options.unavailableTimeout,function(){n.updateState(\"unavailable\")})},t.prototype.clearUnavailableTimer=function(){this.unavailableTimer&&this.unavailableTimer.ensureAborted()},t.prototype.sendActivityCheck=function(){var n=this;this.stopActivityCheck(),this.connection.ping(),this.activityTimer=new Q(this.options.pongTimeout,function(){n.timeline.error({pong_timed_out:n.options.pongTimeout}),n.retryIn(0)})},t.prototype.resetActivityCheck=function(){var n=this;this.stopActivityCheck(),this.connection&&!this.connection.handlesActivityChecks()&&(this.activityTimer=new Q(this.activityTimeout,function(){n.sendActivityCheck()}))},t.prototype.stopActivityCheck=function(){this.activityTimer&&this.activityTimer.ensureAborted()},t.prototype.buildConnectionCallbacks=function(n){var r=this;return U({},n,{message:function(i){r.resetActivityCheck(),r.emit(\"message\",i)},ping:function(){r.send_event(\"pusher:pong\",{})},activity:function(){r.resetActivityCheck()},error:function(i){r.emit(\"error\",i)},closed:function(){r.abandonConnection(),r.shouldRetry()&&r.retryIn(1e3)}})},t.prototype.buildHandshakeCallbacks=function(n){var r=this;return U({},n,{connected:function(i){r.activityTimeout=Math.min(r.options.activityTimeout,i.activityTimeout,i.connection.activityTimeout||1/0),r.clearUnavailableTimer(),r.setConnection(i.connection),r.socket_id=r.connection.id,r.updateState(\"connected\",{socket_id:r.socket_id})}})},t.prototype.buildErrorCallbacks=function(){var n=this,r=function(i){return function(o){o.error&&n.emit(\"error\",{type:\"WebSocketError\",error:o.error}),i(o)}};return{tls_only:r(function(){n.usingTLS=!0,n.updateStrategy(),n.retryIn(0)}),refused:r(function(){n.disconnect()}),backoff:r(function(){n.retryIn(1e3)}),retry:r(function(){n.retryIn(0)})}},t.prototype.setConnection=function(n){this.connection=n;for(var r in this.connectionCallbacks)this.connection.bind(r,this.connectionCallbacks[r]);this.resetActivityCheck()},t.prototype.abandonConnection=function(){if(this.connection){this.stopActivityCheck();for(var n in this.connectionCallbacks)this.connection.unbind(n,this.connectionCallbacks[n]);var r=this.connection;return this.connection=null,r}},t.prototype.updateState=function(n,r){var i=this.state;if(this.state=n,i!==n){var o=n;o===\"connected\"&&(o+=\" with new socket ID \"+r.socket_id),A.debug(\"State changed\",i+\" -> \"+o),this.timeline.info({state:n,params:r}),this.emit(\"state_change\",{previous:i,current:n}),this.emit(n,r)}},t.prototype.shouldRetry=function(){return this.state===\"connecting\"||this.state===\"connected\"},t})(V),Gn=Vn,Qn=(function(){function e(){this.channels={}}return e.prototype.add=function(t,n){return this.channels[t]||(this.channels[t]=Yn(t,n)),this.channels[t]},e.prototype.all=function(){return Ue(this.channels)},e.prototype.find=function(t){return this.channels[t]},e.prototype.remove=function(t){var n=this.channels[t];return delete this.channels[t],n},e.prototype.disconnect=function(){W(this.channels,function(t){t.disconnect()})},e})(),Kn=Qn;function Yn(e,t){if(e.indexOf(\"private-encrypted-\")===0){if(t.config.nacl)return G.createEncryptedChannel(e,t,t.config.nacl);var n=\"Tried to subscribe to a private-encrypted- channel but no nacl implementation available\",r=b.buildLogSuffix(\"encryptedChannelSupport\");throw new J(n+\". \"+r)}else{if(e.indexOf(\"private-\")===0)return G.createPrivateChannel(e,t);if(e.indexOf(\"presence-\")===0)return G.createPresenceChannel(e,t);if(e.indexOf(\"#\")===0)throw new O('Cannot create a channel with name \"'+e+'\".');return G.createChannel(e,t)}}var $n={createChannels:function(){return new Kn},createConnectionManager:function(e,t){return new Gn(e,t)},createChannel:function(e,t){return new bt(e,t)},createPrivateChannel:function(e,t){return new mt(e,t)},createPresenceChannel:function(e,t){return new zn(e,t)},createEncryptedChannel:function(e,t,n){return new Jn(e,t,n)},createTimelineSender:function(e,t){return new En(e,t)},createHandshake:function(e,t){return new On(e,t)},createAssistantToTheTransportManager:function(e,t,n){return new Sn(e,t,n)}},G=$n,Zn=(function(){function e(t){this.options=t||{},this.livesLeft=this.options.lives||1/0}return e.prototype.getAssistant=function(t){return G.createAssistantToTheTransportManager(this,t,{minPingDelay:this.options.minPingDelay,maxPingDelay:this.options.maxPingDelay})},e.prototype.isAlive=function(){return this.livesLeft>0},e.prototype.reportDeath=function(){this.livesLeft-=1},e})(),Gt=Zn,tr=(function(){function e(t,n){this.strategies=t,this.loop=!!n.loop,this.failFast=!!n.failFast,this.timeout=n.timeout,this.timeoutLimit=n.timeoutLimit}return e.prototype.isSupported=function(){return zt(this.strategies,j.method(\"isSupported\"))},e.prototype.connect=function(t,n){var r=this,i=this.strategies,o=0,u=this.timeout,p=null,_=function(g,k){k?n(null,k):(o=o+1,r.loop&&(o=o%i.length),o<i.length?(u&&(u=u*2,r.timeoutLimit&&(u=Math.min(u,r.timeoutLimit))),p=r.tryStrategy(i[o],t,{timeout:u,failFast:r.failFast},_)):n(!0))};return p=this.tryStrategy(i[o],t,{timeout:u,failFast:this.failFast},_),{abort:function(){p.abort()},forceMinPriority:function(g){t=g,p&&p.forceMinPriority(g)}}},e.prototype.tryStrategy=function(t,n,r,i){var o=null,u=null;return r.timeout>0&&(o=new Q(r.timeout,function(){u.abort(),i(!0)})),u=t.connect(n,function(p,_){p&&o&&o.isRunning()&&!r.failFast||(o&&o.ensureAborted(),i(p,_))}),{abort:function(){o&&o.ensureAborted(),u.abort()},forceMinPriority:function(p){u.forceMinPriority(p)}}},e})(),Y=tr,er=(function(){function e(t){this.strategies=t}return e.prototype.isSupported=function(){return zt(this.strategies,j.method(\"isSupported\"))},e.prototype.connect=function(t,n){return nr(this.strategies,t,function(r,i){return function(o,u){if(i[r].error=o,o){rr(i)&&n(!0);return}rt(i,function(p){p.forceMinPriority(u.transport.priority)}),n(null,u)}})},e})(),kt=er;function nr(e,t,n){var r=Dt(e,function(i,o,u,p){return i.connect(t,n(o,p))});return{abort:function(){rt(r,ir)},forceMinPriority:function(i){rt(r,function(o){o.forceMinPriority(i)})}}}function rr(e){return Me(e,function(t){return!!t.error})}function ir(e){!e.error&&!e.aborted&&(e.abort(),e.aborted=!0)}var or=(function(){function e(t,n,r){this.strategy=t,this.transports=n,this.ttl=r.ttl||1800*1e3,this.usingTLS=r.useTLS,this.timeline=r.timeline}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.usingTLS,i=ar(r),o=[this.strategy];if(i&&i.timestamp+this.ttl>=j.now()){var u=this.transports[i.transport];u&&(this.timeline.info({cached:!0,transport:i.transport,latency:i.latency}),o.push(new Y([u],{timeout:i.latency*2+1e3,failFast:!0})))}var p=j.now(),_=o.pop().connect(t,function g(k,E){k?(Qt(r),o.length>0?(p=j.now(),_=o.pop().connect(t,g)):n(k)):(cr(r,E.transport.name,j.now()-p),n(null,E))});return{abort:function(){_.abort()},forceMinPriority:function(g){t=g,_&&_.forceMinPriority(g)}}},e})(),sr=or;function St(e){return\"pusherTransport\"+(e?\"TLS\":\"NonTLS\")}function ar(e){var t=m.getLocalStorage();if(t)try{var n=t[St(e)];if(n)return JSON.parse(n)}catch{Qt(e)}return null}function cr(e,t,n){var r=m.getLocalStorage();if(r)try{r[St(e)]=ut({timestamp:j.now(),transport:t,latency:n})}catch{}}function Qt(e){var t=m.getLocalStorage();if(t)try{delete t[St(e)]}catch{}}var ur=(function(){function e(t,n){var r=n.delay;this.strategy=t,this.options={delay:r}}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.strategy,i,o=new Q(this.options.delay,function(){i=r.connect(t,n)});return{abort:function(){o.ensureAborted(),i&&i.abort()},forceMinPriority:function(u){t=u,i&&i.forceMinPriority(u)}}},e})(),lt=ur,hr=(function(){function e(t,n,r){this.test=t,this.trueBranch=n,this.falseBranch=r}return e.prototype.isSupported=function(){var t=this.test()?this.trueBranch:this.falseBranch;return t.isSupported()},e.prototype.connect=function(t,n){var r=this.test()?this.trueBranch:this.falseBranch;return r.connect(t,n)},e})(),it=hr,lr=(function(){function e(t){this.strategy=t}return e.prototype.isSupported=function(){return this.strategy.isSupported()},e.prototype.connect=function(t,n){var r=this.strategy.connect(t,function(i,o){o&&r.abort(),n(i,o)});return r},e})(),fr=lr;function ot(e){return function(){return e.isSupported()}}var pr=function(e,t,n){var r={};function i(ce,mi,wi,ki,Si){var ue=n(e,ce,mi,wi,ki,Si);return r[ce]=ue,ue}var o=Object.assign({},t,{hostNonTLS:e.wsHost+\":\"+e.wsPort,hostTLS:e.wsHost+\":\"+e.wssPort,httpPath:e.wsPath}),u=Object.assign({},o,{useTLS:!0}),p=Object.assign({},t,{hostNonTLS:e.httpHost+\":\"+e.httpPort,hostTLS:e.httpHost+\":\"+e.httpsPort,httpPath:e.httpPath}),_={loop:!0,timeout:15e3,timeoutLimit:6e4},g=new Gt({lives:2,minPingDelay:1e4,maxPingDelay:e.activityTimeout}),k=new Gt({lives:2,minPingDelay:1e4,maxPingDelay:e.activityTimeout}),E=i(\"ws\",\"ws\",3,o,g),X=i(\"wss\",\"ws\",3,u,g),vi=i(\"sockjs\",\"sockjs\",1,p),ne=i(\"xhr_streaming\",\"xhr_streaming\",1,p,k),yi=i(\"xdr_streaming\",\"xdr_streaming\",1,p,k),re=i(\"xhr_polling\",\"xhr_polling\",1,p),gi=i(\"xdr_polling\",\"xdr_polling\",1,p),ie=new Y([E],_),_i=new Y([X],_),bi=new Y([vi],_),oe=new Y([new it(ot(ne),ne,yi)],_),se=new Y([new it(ot(re),re,gi)],_),ae=new Y([new it(ot(oe),new kt([oe,new lt(se,{delay:4e3})]),se)],_),xt=new it(ot(ae),ae,bi),Ot;return t.useTLS?Ot=new kt([ie,new lt(xt,{delay:2e3})]):Ot=new kt([ie,new lt(_i,{delay:2e3}),new lt(xt,{delay:5e3})]),new sr(new fr(new it(ot(E),Ot,xt)),r,{ttl:18e5,timeline:t.timeline,useTLS:t.useTLS})},dr=pr,vr=(function(){var e=this;e.timeline.info(e.buildTimelineMessage({transport:e.name+(e.options.useTLS?\"s\":\"\")})),e.hooks.isInitialized()?e.changeState(\"initialized\"):e.hooks.file?(e.changeState(\"initializing\"),S.load(e.hooks.file,{useTLS:e.options.useTLS},function(t,n){e.hooks.isInitialized()?(e.changeState(\"initialized\"),n(!0)):(t&&e.onError(t),e.onClose(),n(!1))})):e.onClose()}),yr={getRequest:function(e){var t=new window.XDomainRequest;return t.ontimeout=function(){e.emit(\"error\",new I),e.close()},t.onerror=function(n){e.emit(\"error\",n),e.close()},t.onprogress=function(){t.responseText&&t.responseText.length>0&&e.onChunk(200,t.responseText)},t.onload=function(){t.responseText&&t.responseText.length>0&&e.onChunk(200,t.responseText),e.emit(\"finished\",200),e.close()},t},abortRequest:function(e){e.ontimeout=e.onerror=e.onprogress=e.onload=null,e.abort()}},gr=yr,_r=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),br=256*1024,mr=(function(e){_r(t,e);function t(n,r,i){var o=e.call(this)||this;return o.hooks=n,o.method=r,o.url=i,o}return t.prototype.start=function(n){var r=this;this.position=0,this.xhr=this.hooks.getRequest(this),this.unloader=function(){r.close()},m.addUnloadListener(this.unloader),this.xhr.open(this.method,this.url,!0),this.xhr.setRequestHeader&&this.xhr.setRequestHeader(\"Content-Type\",\"application/json\"),this.xhr.send(n)},t.prototype.close=function(){this.unloader&&(m.removeUnloadListener(this.unloader),this.unloader=null),this.xhr&&(this.hooks.abortRequest(this.xhr),this.xhr=null)},t.prototype.onChunk=function(n,r){for(;;){var i=this.advanceBuffer(r);if(i)this.emit(\"chunk\",{status:n,data:i});else break}this.isBufferTooLong(r)&&this.emit(\"buffer_too_long\")},t.prototype.advanceBuffer=function(n){var r=n.slice(this.position),i=r.indexOf(`\n`);return i!==-1?(this.position+=i+1,r.slice(0,i)):null},t.prototype.isBufferTooLong=function(n){return this.position===n.length&&n.length>br},t})(V),wr=mr,Ct;(function(e){e[e.CONNECTING=0]=\"CONNECTING\",e[e.OPEN=1]=\"OPEN\",e[e.CLOSED=3]=\"CLOSED\"})(Ct||(Ct={}));var $=Ct,kr=1,Sr=(function(){function e(t,n){this.hooks=t,this.session=Yt(1e3)+\"/\"+xr(8),this.location=Cr(n),this.readyState=$.CONNECTING,this.openStream()}return e.prototype.send=function(t){return this.sendRaw(JSON.stringify([t]))},e.prototype.ping=function(){this.hooks.sendHeartbeat(this)},e.prototype.close=function(t,n){this.onClose(t,n,!0)},e.prototype.sendRaw=function(t){if(this.readyState===$.OPEN)try{return m.createSocketRequest(\"POST\",Kt(Tr(this.location,this.session))).start(t),!0}catch{return!1}else return!1},e.prototype.reconnect=function(){this.closeStream(),this.openStream()},e.prototype.onClose=function(t,n,r){this.closeStream(),this.readyState=$.CLOSED,this.onclose&&this.onclose({code:t,reason:n,wasClean:r})},e.prototype.onChunk=function(t){if(t.status===200){this.readyState===$.OPEN&&this.onActivity();var n,r=t.data.slice(0,1);switch(r){case\"o\":n=JSON.parse(t.data.slice(1)||\"{}\"),this.onOpen(n);break;case\"a\":n=JSON.parse(t.data.slice(1)||\"[]\");for(var i=0;i<n.length;i++)this.onEvent(n[i]);break;case\"m\":n=JSON.parse(t.data.slice(1)||\"null\"),this.onEvent(n);break;case\"h\":this.hooks.onHeartbeat(this);break;case\"c\":n=JSON.parse(t.data.slice(1)||\"[]\"),this.onClose(n[0],n[1],!0);break}}},e.prototype.onOpen=function(t){this.readyState===$.CONNECTING?(t&&t.hostname&&(this.location.base=Pr(this.location.base,t.hostname)),this.readyState=$.OPEN,this.onopen&&this.onopen()):this.onClose(1006,\"Server lost session\",!0)},e.prototype.onEvent=function(t){this.readyState===$.OPEN&&this.onmessage&&this.onmessage({data:t})},e.prototype.onActivity=function(){this.onactivity&&this.onactivity()},e.prototype.onError=function(t){this.onerror&&this.onerror(t)},e.prototype.openStream=function(){var t=this;this.stream=m.createSocketRequest(\"POST\",Kt(this.hooks.getReceiveURL(this.location,this.session))),this.stream.bind(\"chunk\",function(n){t.onChunk(n)}),this.stream.bind(\"finished\",function(n){t.hooks.onFinished(t,n)}),this.stream.bind(\"buffer_too_long\",function(){t.reconnect()});try{this.stream.start()}catch(n){j.defer(function(){t.onError(n),t.onClose(1006,\"Could not start streaming\",!1)})}},e.prototype.closeStream=function(){this.stream&&(this.stream.unbind_all(),this.stream.close(),this.stream=null)},e})();function Cr(e){var t=/([^\\?]*)\\/*(\\??.*)/.exec(e);return{base:t[1],queryString:t[2]}}function Tr(e,t){return e.base+\"/\"+t+\"/xhr_send\"}function Kt(e){var t=e.indexOf(\"?\")===-1?\"?\":\"&\";return e+t+\"t=\"+ +new Date+\"&n=\"+kr++}function Pr(e,t){var n=/(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(e);return n[1]+t+n[3]}function Yt(e){return m.randomInt(e)}function xr(e){for(var t=[],n=0;n<e;n++)t.push(Yt(32).toString(32));return t.join(\"\")}var Or=Sr,Ar={getReceiveURL:function(e,t){return e.base+\"/\"+t+\"/xhr_streaming\"+e.queryString},onHeartbeat:function(e){e.sendRaw(\"[]\")},sendHeartbeat:function(e){e.sendRaw(\"[]\")},onFinished:function(e,t){e.onClose(1006,\"Connection interrupted (\"+t+\")\",!1)}},Er=Ar,Lr={getReceiveURL:function(e,t){return e.base+\"/\"+t+\"/xhr\"+e.queryString},onHeartbeat:function(){},sendHeartbeat:function(e){e.sendRaw(\"[]\")},onFinished:function(e,t){t===200?e.reconnect():e.onClose(1006,\"Connection interrupted (\"+t+\")\",!1)}},Rr=Lr,Ir={getRequest:function(e){var t=m.getXHRAPI(),n=new t;return n.onreadystatechange=n.onprogress=function(){switch(n.readyState){case 3:n.responseText&&n.responseText.length>0&&e.onChunk(n.status,n.responseText);break;case 4:n.responseText&&n.responseText.length>0&&e.onChunk(n.status,n.responseText),e.emit(\"finished\",n.status),e.close();break}},n},abortRequest:function(e){e.onreadystatechange=null,e.abort()}},jr=Ir,Nr={createStreamingSocket:function(e){return this.createSocket(Er,e)},createPollingSocket:function(e){return this.createSocket(Rr,e)},createSocket:function(e,t){return new Or(e,t)},createXHR:function(e,t){return this.createRequest(jr,e,t)},createRequest:function(e,t,n){return new wr(e,t,n)}},$t=Nr;$t.createXDR=function(e,t){return this.createRequest(gr,e,t)};var qr=$t,Ur={nextAuthCallbackID:1,auth_callbacks:{},ScriptReceivers:s,DependenciesReceivers:T,getDefaultStrategy:dr,Transports:_n,transportConnectionInitializer:vr,HTTPFactory:qr,TimelineTransport:Ze,getXHRAPI:function(){return window.XMLHttpRequest},getWebSocketAPI:function(){return window.WebSocket||window.MozWebSocket},setup:function(e){var t=this;window.Pusher=e;var n=function(){t.onDocumentBody(e.ready)};window.JSON?n():S.load(\"json2\",{},n)},getDocument:function(){return document},getProtocol:function(){return this.getDocument().location.protocol},getAuthorizers:function(){return{ajax:Se,jsonp:We}},onDocumentBody:function(e){var t=this;document.body?e():setTimeout(function(){t.onDocumentBody(e)},0)},createJSONPRequest:function(e,t){return new Ke(e,t)},createScriptRequest:function(e){return new Ge(e)},getLocalStorage:function(){try{return window.localStorage}catch{return}},createXHR:function(){return this.getXHRAPI()?this.createXMLHttpRequest():this.createMicrosoftXHR()},createXMLHttpRequest:function(){var e=this.getXHRAPI();return new e},createMicrosoftXHR:function(){return new ActiveXObject(\"Microsoft.XMLHTTP\")},getNetwork:function(){return wn},createWebSocket:function(e){var t=this.getWebSocketAPI();return new t(e)},createSocketRequest:function(e,t){if(this.isXHRSupported())return this.HTTPFactory.createXHR(e,t);if(this.isXDRSupported(t.indexOf(\"https:\")===0))return this.HTTPFactory.createXDR(e,t);throw\"Cross-origin HTTP requests are not supported\"},isXHRSupported:function(){var e=this.getXHRAPI();return!!e&&new e().withCredentials!==void 0},isXDRSupported:function(e){var t=e?\"https:\":\"http:\",n=this.getProtocol();return!!window.XDomainRequest&&n===t},addUnloadListener:function(e){window.addEventListener!==void 0?window.addEventListener(\"unload\",e,!1):window.attachEvent!==void 0&&window.attachEvent(\"onunload\",e)},removeUnloadListener:function(e){window.addEventListener!==void 0?window.removeEventListener(\"unload\",e,!1):window.detachEvent!==void 0&&window.detachEvent(\"onunload\",e)},randomInt:function(e){var t=function(){var n=window.crypto||window.msCrypto,r=n.getRandomValues(new Uint32Array(1))[0];return r/Math.pow(2,32)};return Math.floor(t()*e)}},m=Ur,Tt;(function(e){e[e.ERROR=3]=\"ERROR\",e[e.INFO=6]=\"INFO\",e[e.DEBUG=7]=\"DEBUG\"})(Tt||(Tt={}));var ft=Tt,Dr=(function(){function e(t,n,r){this.key=t,this.session=n,this.events=[],this.options=r||{},this.sent=0,this.uniqueID=0}return e.prototype.log=function(t,n){t<=this.options.level&&(this.events.push(U({},n,{timestamp:j.now()})),this.options.limit&&this.events.length>this.options.limit&&this.events.shift())},e.prototype.error=function(t){this.log(ft.ERROR,t)},e.prototype.info=function(t){this.log(ft.INFO,t)},e.prototype.debug=function(t){this.log(ft.DEBUG,t)},e.prototype.isEmpty=function(){return this.events.length===0},e.prototype.send=function(t,n){var r=this,i=U({session:this.session,bundle:this.sent+1,key:this.key,lib:\"js\",version:this.options.version,cluster:this.options.cluster,features:this.options.features,timeline:this.events},this.options.params);return this.events=[],t(i,function(o,u){o||r.sent++,n&&n(o,u)}),!0},e.prototype.generateUniqueID=function(){return this.uniqueID++,this.uniqueID},e})(),Hr=Dr,Mr=(function(){function e(t,n,r,i){this.name=t,this.priority=n,this.transport=r,this.options=i||{}}return e.prototype.isSupported=function(){return this.transport.isSupported({useTLS:this.options.useTLS})},e.prototype.connect=function(t,n){var r=this;if(this.isSupported()){if(this.priority<t)return Zt(new q,n)}else return Zt(new z,n);var i=!1,o=this.transport.createConnection(this.name,this.priority,this.options.key,this.options),u=null,p=function(){o.unbind(\"initialized\",p),o.connect()},_=function(){u=G.createHandshake(o,function(X){i=!0,E(),n(null,X)})},g=function(X){E(),n(X)},k=function(){E();var X;X=ut(o),n(new M(X))},E=function(){o.unbind(\"initialized\",p),o.unbind(\"open\",_),o.unbind(\"error\",g),o.unbind(\"closed\",k)};return o.bind(\"initialized\",p),o.bind(\"open\",_),o.bind(\"error\",g),o.bind(\"closed\",k),o.initialize(),{abort:function(){i||(E(),u?u.close():o.close())},forceMinPriority:function(X){i||r.priority<X&&(u?u.close():o.close())}}},e})(),zr=Mr;function Zt(e,t){return j.defer(function(){t(e)}),{abort:function(){},forceMinPriority:function(){}}}var Fr=m.Transports,Br=function(e,t,n,r,i,o){var u=Fr[n];if(!u)throw new F(n);var p=(!e.enabledTransports||qt(e.enabledTransports,t)!==-1)&&(!e.disabledTransports||qt(e.disabledTransports,t)===-1),_;return p?(i=Object.assign({ignoreNullOrigin:e.ignoreNullOrigin},i),_=new zr(t,r,o?o.getAssistant(u):u,i)):_=Xr,_},Xr={isSupported:function(){return!1},connect:function(e,t){var n=j.defer(function(){t(new z)});return{abort:function(){n.ensureAborted()},forceMinPriority:function(){}}}},Jr=function(e,t){var n=\"socket_id=\"+encodeURIComponent(e.socketId);for(var r in t.params)n+=\"&\"+encodeURIComponent(r)+\"=\"+encodeURIComponent(t.params[r]);if(t.paramsProvider!=null){var i=t.paramsProvider();for(var r in i)n+=\"&\"+encodeURIComponent(r)+\"=\"+encodeURIComponent(i[r])}return n},Wr=function(e){if(typeof m.getAuthorizers()[e.transport]>\"u\")throw\"'\"+e.transport+\"' is not a recognized auth transport\";return function(t,n){var r=Jr(t,e);m.getAuthorizers()[e.transport](m,r,e,v.UserAuthentication,n)}},Vr=Wr,Gr=function(e,t){var n=\"socket_id=\"+encodeURIComponent(e.socketId);n+=\"&channel_name=\"+encodeURIComponent(e.channelName);for(var r in t.params)n+=\"&\"+encodeURIComponent(r)+\"=\"+encodeURIComponent(t.params[r]);if(t.paramsProvider!=null){var i=t.paramsProvider();for(var r in i)n+=\"&\"+encodeURIComponent(r)+\"=\"+encodeURIComponent(i[r])}return n},Qr=function(e){if(typeof m.getAuthorizers()[e.transport]>\"u\")throw\"'\"+e.transport+\"' is not a recognized auth transport\";return function(t,n){var r=Gr(t,e);m.getAuthorizers()[e.transport](m,r,e,v.ChannelAuthorization,n)}},Kr=Qr,Yr=function(e,t,n){var r={authTransport:t.transport,authEndpoint:t.endpoint,auth:{params:t.params,headers:t.headers}};return function(i,o){var u=e.channel(i.channelName),p=n(u,r);p.authorize(i.socketId,o)}},et=function(){return et=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},et.apply(this,arguments)};function $r(e,t){var n={activityTimeout:e.activityTimeout||d.activityTimeout,cluster:e.cluster||d.cluster,httpPath:e.httpPath||d.httpPath,httpPort:e.httpPort||d.httpPort,httpsPort:e.httpsPort||d.httpsPort,pongTimeout:e.pongTimeout||d.pongTimeout,statsHost:e.statsHost||d.stats_host,unavailableTimeout:e.unavailableTimeout||d.unavailableTimeout,wsPath:e.wsPath||d.wsPath,wsPort:e.wsPort||d.wsPort,wssPort:e.wssPort||d.wssPort,enableStats:ni(e),httpHost:Zr(e),useTLS:ei(e),wsHost:ti(e),userAuthenticator:ri(e),channelAuthorizer:oi(e,t)};return\"disabledTransports\"in e&&(n.disabledTransports=e.disabledTransports),\"enabledTransports\"in e&&(n.enabledTransports=e.enabledTransports),\"ignoreNullOrigin\"in e&&(n.ignoreNullOrigin=e.ignoreNullOrigin),\"timelineParams\"in e&&(n.timelineParams=e.timelineParams),\"nacl\"in e&&(n.nacl=e.nacl),n}function Zr(e){return e.httpHost?e.httpHost:e.cluster?\"sockjs-\"+e.cluster+\".pusher.com\":d.httpHost}function ti(e){return e.wsHost?e.wsHost:e.cluster?te(e.cluster):te(d.cluster)}function te(e){return\"ws-\"+e+\".pusher.com\"}function ei(e){return m.getProtocol()===\"https:\"?!0:e.forceTLS!==!1}function ni(e){return\"enableStats\"in e?e.enableStats:\"disableStats\"in e?!e.disableStats:!1}function ri(e){var t=et(et({},d.userAuthentication),e.userAuthentication);return\"customHandler\"in t&&t.customHandler!=null?t.customHandler:Vr(t)}function ii(e,t){var n;return\"channelAuthorization\"in e?n=et(et({},d.channelAuthorization),e.channelAuthorization):(n={transport:e.authTransport||d.authTransport,endpoint:e.authEndpoint||d.authEndpoint},\"auth\"in e&&(\"params\"in e.auth&&(n.params=e.auth.params),\"headers\"in e.auth&&(n.headers=e.auth.headers)),\"authorizer\"in e&&(n.customHandler=Yr(t,n,e.authorizer))),n}function oi(e,t){var n=ii(e,t);return\"customHandler\"in n&&n.customHandler!=null?n.customHandler:Kr(n)}var si=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),ai=(function(e){si(t,e);function t(n){var r=e.call(this,function(i,o){A.debug(\"No callbacks on watchlist events for \"+i)})||this;return r.pusher=n,r.bindWatchlistInternalEvent(),r}return t.prototype.handleEvent=function(n){var r=this;n.data.events.forEach(function(i){r.emit(i.name,i)})},t.prototype.bindWatchlistInternalEvent=function(){var n=this;this.pusher.connection.bind(\"message\",function(r){var i=r.event;i===\"pusher_internal:watchlist_events\"&&n.handleEvent(r)})},t})(V),ci=ai;function ui(){var e,t,n=new Promise(function(r,i){e=r,t=i});return{promise:n,resolve:e,reject:t}}var hi=ui,li=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),fi=(function(e){li(t,e);function t(n){var r=e.call(this,function(i,o){A.debug(\"No callbacks on user for \"+i)})||this;return r.signin_requested=!1,r.user_data=null,r.serverToUserChannel=null,r.signinDonePromise=null,r._signinDoneResolve=null,r._onAuthorize=function(i,o){if(i){A.warn(\"Error during signin: \"+i),r._cleanup();return}r.pusher.send_event(\"pusher:signin\",{auth:o.auth,user_data:o.user_data})},r.pusher=n,r.pusher.connection.bind(\"state_change\",function(i){var o=i.previous,u=i.current;o!==\"connected\"&&u===\"connected\"&&r._signin(),o===\"connected\"&&u!==\"connected\"&&(r._cleanup(),r._newSigninPromiseIfNeeded())}),r.watchlist=new ci(n),r.pusher.connection.bind(\"message\",function(i){var o=i.event;o===\"pusher:signin_success\"&&r._onSigninSuccess(i.data),r.serverToUserChannel&&r.serverToUserChannel.name===i.channel&&r.serverToUserChannel.handleEvent(i)}),r}return t.prototype.signin=function(){this.signin_requested||(this.signin_requested=!0,this._signin())},t.prototype._signin=function(){this.signin_requested&&(this._newSigninPromiseIfNeeded(),this.pusher.connection.state===\"connected\"&&this.pusher.config.userAuthenticator({socketId:this.pusher.connection.socket_id},this._onAuthorize))},t.prototype._onSigninSuccess=function(n){try{this.user_data=JSON.parse(n.user_data)}catch{A.error(\"Failed parsing user data after signin: \"+n.user_data),this._cleanup();return}if(typeof this.user_data.id!=\"string\"||this.user_data.id===\"\"){A.error(\"user_data doesn't contain an id. user_data: \"+this.user_data),this._cleanup();return}this._signinDoneResolve(),this._subscribeChannels()},t.prototype._subscribeChannels=function(){var n=this,r=function(i){i.subscriptionPending&&i.subscriptionCancelled?i.reinstateSubscription():!i.subscriptionPending&&n.pusher.connection.state===\"connected\"&&i.subscribe()};this.serverToUserChannel=new bt(\"#server-to-user-\"+this.user_data.id,this.pusher),this.serverToUserChannel.bind_global(function(i,o){i.indexOf(\"pusher_internal:\")===0||i.indexOf(\"pusher:\")===0||n.emit(i,o)}),r(this.serverToUserChannel)},t.prototype._cleanup=function(){this.user_data=null,this.serverToUserChannel&&(this.serverToUserChannel.unbind_all(),this.serverToUserChannel.disconnect(),this.serverToUserChannel=null),this.signin_requested&&this._signinDoneResolve()},t.prototype._newSigninPromiseIfNeeded=function(){if(this.signin_requested&&!(this.signinDonePromise&&!this.signinDonePromise.done)){var n=hi(),r=n.promise,i=n.resolve,o=n.reject;r.done=!1;var u=function(){r.done=!0};r.then(u).catch(u),this.signinDonePromise=r,this._signinDoneResolve=i}},t})(V),pi=fi,ee=(function(){function e(t,n){var r=this;if(di(t),n=n||{},!n.cluster&&!(n.wsHost||n.httpHost)){var i=b.buildLogSuffix(\"javascriptQuickStart\");A.warn(\"You should always specify a cluster when connecting. \"+i)}\"disableStats\"in n&&A.warn(\"The disableStats option is deprecated in favor of enableStats\"),this.key=t,this.config=$r(n,this),this.channels=G.createChannels(),this.global_emitter=new V,this.sessionID=m.randomInt(1e9),this.timeline=new Hr(this.key,this.sessionID,{cluster:this.config.cluster,features:e.getClientFeatures(),params:this.config.timelineParams||{},limit:50,level:ft.INFO,version:d.VERSION}),this.config.enableStats&&(this.timelineSender=G.createTimelineSender(this.timeline,{host:this.config.statsHost,path:\"/timeline/v2/\"+m.TimelineTransport.name}));var o=function(u){return m.getDefaultStrategy(r.config,u,Br)};this.connection=G.createConnectionManager(this.key,{getStrategy:o,timeline:this.timeline,activityTimeout:this.config.activityTimeout,pongTimeout:this.config.pongTimeout,unavailableTimeout:this.config.unavailableTimeout,useTLS:!!this.config.useTLS}),this.connection.bind(\"connected\",function(){r.subscribeAll(),r.timelineSender&&r.timelineSender.send(r.connection.isUsingTLS())}),this.connection.bind(\"message\",function(u){var p=u.event,_=p.indexOf(\"pusher_internal:\")===0;if(u.channel){var g=r.channel(u.channel);g&&g.handleEvent(u)}_||r.global_emitter.emit(u.event,u.data)}),this.connection.bind(\"connecting\",function(){r.channels.disconnect()}),this.connection.bind(\"disconnected\",function(){r.channels.disconnect()}),this.connection.bind(\"error\",function(u){A.warn(u)}),e.instances.push(this),this.timeline.info({instances:e.instances.length}),this.user=new pi(this),e.isReady&&this.connect()}return e.ready=function(){e.isReady=!0;for(var t=0,n=e.instances.length;t<n;t++)e.instances[t].connect()},e.getClientFeatures=function(){return Ut(Mt({ws:m.Transports.ws},function(t){return t.isSupported({})}))},e.prototype.channel=function(t){return this.channels.find(t)},e.prototype.allChannels=function(){return this.channels.all()},e.prototype.connect=function(){if(this.connection.connect(),this.timelineSender&&!this.timelineSenderTimer){var t=this.connection.isUsingTLS(),n=this.timelineSender;this.timelineSenderTimer=new je(6e4,function(){n.send(t)})}},e.prototype.disconnect=function(){this.connection.disconnect(),this.timelineSenderTimer&&(this.timelineSenderTimer.ensureAborted(),this.timelineSenderTimer=null)},e.prototype.bind=function(t,n,r){return this.global_emitter.bind(t,n,r),this},e.prototype.unbind=function(t,n,r){return this.global_emitter.unbind(t,n,r),this},e.prototype.bind_global=function(t){return this.global_emitter.bind_global(t),this},e.prototype.unbind_global=function(t){return this.global_emitter.unbind_global(t),this},e.prototype.unbind_all=function(t){return this.global_emitter.unbind_all(),this},e.prototype.subscribeAll=function(){var t;for(t in this.channels.channels)this.channels.channels.hasOwnProperty(t)&&this.subscribe(t)},e.prototype.subscribe=function(t){var n=this.channels.add(t,this);return n.subscriptionPending&&n.subscriptionCancelled?n.reinstateSubscription():!n.subscriptionPending&&this.connection.state===\"connected\"&&n.subscribe(),n},e.prototype.unsubscribe=function(t){var n=this.channels.find(t);n&&n.subscriptionPending?n.cancelSubscription():(n=this.channels.remove(t),n&&n.subscribed&&n.unsubscribe())},e.prototype.send_event=function(t,n,r){return this.connection.send_event(t,n,r)},e.prototype.shouldUseTLS=function(){return this.config.useTLS},e.prototype.signin=function(){this.user.signin()},e.instances=[],e.isReady=!1,e.logToConsole=!1,e.Runtime=m,e.ScriptReceivers=m.ScriptReceivers,e.DependenciesReceivers=m.DependenciesReceivers,e.auth_callbacks=m.auth_callbacks,e})(),Pt=h.default=ee;function di(e){if(e==null)throw\"You must pass your app key when you instantiate Pusher.\"}m.setup(ee)})])})});function st(l){\"@babel/helpers - typeof\";return st=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(h){return typeof h}:function(h){return h&&typeof Symbol==\"function\"&&h.constructor===Symbol&&h!==Symbol.prototype?\"symbol\":typeof h},st(l)}function L(l,h){if(!(l instanceof h))throw new TypeError(\"Cannot call a class as a function\")}function le(l,h){for(var a=0;a<h.length;a++){var c=h[a];c.enumerable=c.enumerable||!1,c.configurable=!0,\"value\"in c&&(c.writable=!0),Object.defineProperty(l,c.key,c)}}function R(l,h,a){return h&&le(l.prototype,h),a&&le(l,a),Object.defineProperty(l,\"prototype\",{writable:!1}),l}function at(){return at=Object.assign||function(l){for(var h=1;h<arguments.length;h++){var a=arguments[h];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(l[c]=a[c])}return l},at.apply(this,arguments)}function D(l,h){if(typeof h!=\"function\"&&h!==null)throw new TypeError(\"Super expression must either be null or a function\");l.prototype=Object.create(h&&h.prototype,{constructor:{value:l,writable:!0,configurable:!0}}),Object.defineProperty(l,\"prototype\",{writable:!1}),h&&At(l,h)}function pt(l){return pt=Object.setPrototypeOf?Object.getPrototypeOf:function(a){return a.__proto__||Object.getPrototypeOf(a)},pt(l)}function At(l,h){return At=Object.setPrototypeOf||function(c,s){return c.__proto__=s,c},At(l,h)}function Ri(){if(typeof Reflect>\"u\"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==\"function\")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ii(l){if(l===void 0)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return l}function ji(l,h){if(h&&(typeof h==\"object\"||typeof h==\"function\"))return h;if(h!==void 0)throw new TypeError(\"Derived constructors may only return object or undefined\");return Ii(l)}function H(l){var h=Ri();return function(){var c=pt(l),s;if(h){var f=pt(this).constructor;s=Reflect.construct(c,arguments,f)}else s=c.apply(this,arguments);return ji(this,s)}}var Et=(function(){function l(){L(this,l)}return R(l,[{key:\"listenForWhisper\",value:function(a,c){return this.listen(\".client-\"+a,c)}},{key:\"notification\",value:function(a){return this.listen(\".Illuminate\\\\Notifications\\\\Events\\\\BroadcastNotificationCreated\",a)}},{key:\"stopListeningForWhisper\",value:function(a,c){return this.stopListening(\".client-\"+a,c)}}]),l})(),de=(function(){function l(h){L(this,l),this.namespace=h}return R(l,[{key:\"format\",value:function(a){return[\".\",\"\\\\\"].includes(a.charAt(0))?a.substring(1):(this.namespace&&(a=this.namespace+\".\"+a),a.replace(/\\./g,\"\\\\\"))}},{key:\"setNamespace\",value:function(a){this.namespace=a}}]),l})();function Ni(l){try{new l}catch(h){if(h.message.includes(\"is not a constructor\"))return!1}return!0}var Lt=(function(l){D(a,l);var h=H(a);function a(c,s,f){var d;return L(this,a),d=h.call(this),d.name=s,d.pusher=c,d.options=f,d.eventFormatter=new de(d.options.namespace),d.subscribe(),d}return R(a,[{key:\"subscribe\",value:function(){this.subscription=this.pusher.subscribe(this.name)}},{key:\"unsubscribe\",value:function(){this.pusher.unsubscribe(this.name)}},{key:\"listen\",value:function(s,f){return this.on(this.eventFormatter.format(s),f),this}},{key:\"listenToAll\",value:function(s){var f=this;return this.subscription.bind_global(function(d,N){if(!d.startsWith(\"pusher:\")){var P=f.options.namespace.replace(/\\./g,\"\\\\\"),T=d.startsWith(P)?d.substring(P.length+1):\".\"+d;s(T,N)}}),this}},{key:\"stopListening\",value:function(s,f){return f?this.subscription.unbind(this.eventFormatter.format(s),f):this.subscription.unbind(this.eventFormatter.format(s)),this}},{key:\"stopListeningToAll\",value:function(s){return s?this.subscription.unbind_global(s):this.subscription.unbind_global(),this}},{key:\"subscribed\",value:function(s){return this.on(\"pusher:subscription_succeeded\",function(){s()}),this}},{key:\"error\",value:function(s){return this.on(\"pusher:subscription_error\",function(f){s(f)}),this}},{key:\"on\",value:function(s,f){return this.subscription.bind(s,f),this}}]),a})(Et),ve=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"whisper\",value:function(s,f){return this.pusher.channels.channels[this.name].trigger(\"client-\".concat(s),f),this}}]),a})(Lt),qi=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"whisper\",value:function(s,f){return this.pusher.channels.channels[this.name].trigger(\"client-\".concat(s),f),this}}]),a})(Lt),Ui=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"here\",value:function(s){return this.on(\"pusher:subscription_succeeded\",function(f){s(Object.keys(f.members).map(function(d){return f.members[d]}))}),this}},{key:\"joining\",value:function(s){return this.on(\"pusher:member_added\",function(f){s(f.info)}),this}},{key:\"whisper\",value:function(s,f){return this.pusher.channels.channels[this.name].trigger(\"client-\".concat(s),f),this}},{key:\"leaving\",value:function(s){return this.on(\"pusher:member_removed\",function(f){s(f.info)}),this}}]),a})(ve),ye=(function(l){D(a,l);var h=H(a);function a(c,s,f){var d;return L(this,a),d=h.call(this),d.events={},d.listeners={},d.name=s,d.socket=c,d.options=f,d.eventFormatter=new de(d.options.namespace),d.subscribe(),d}return R(a,[{key:\"subscribe\",value:function(){this.socket.emit(\"subscribe\",{channel:this.name,auth:this.options.auth||{}})}},{key:\"unsubscribe\",value:function(){this.unbind(),this.socket.emit(\"unsubscribe\",{channel:this.name,auth:this.options.auth||{}})}},{key:\"listen\",value:function(s,f){return this.on(this.eventFormatter.format(s),f),this}},{key:\"stopListening\",value:function(s,f){return this.unbindEvent(this.eventFormatter.format(s),f),this}},{key:\"subscribed\",value:function(s){return this.on(\"connect\",function(f){s(f)}),this}},{key:\"error\",value:function(s){return this}},{key:\"on\",value:function(s,f){var d=this;return this.listeners[s]=this.listeners[s]||[],this.events[s]||(this.events[s]=function(N,P){d.name===N&&d.listeners[s]&&d.listeners[s].forEach(function(T){return T(P)})},this.socket.on(s,this.events[s])),this.listeners[s].push(f),this}},{key:\"unbind\",value:function(){var s=this;Object.keys(this.events).forEach(function(f){s.unbindEvent(f)})}},{key:\"unbindEvent\",value:function(s,f){this.listeners[s]=this.listeners[s]||[],f&&(this.listeners[s]=this.listeners[s].filter(function(d){return d!==f})),(!f||this.listeners[s].length===0)&&(this.events[s]&&(this.socket.removeListener(s,this.events[s]),delete this.events[s]),delete this.listeners[s])}}]),a})(Et),ge=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"whisper\",value:function(s,f){return this.socket.emit(\"client event\",{channel:this.name,event:\"client-\".concat(s),data:f}),this}}]),a})(ye),Di=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"here\",value:function(s){return this.on(\"presence:subscribed\",function(f){s(f.map(function(d){return d.user_info}))}),this}},{key:\"joining\",value:function(s){return this.on(\"presence:joining\",function(f){return s(f.user_info)}),this}},{key:\"whisper\",value:function(s,f){return this.socket.emit(\"client event\",{channel:this.name,event:\"client-\".concat(s),data:f}),this}},{key:\"leaving\",value:function(s){return this.on(\"presence:leaving\",function(f){return s(f.user_info)}),this}}]),a})(ge),dt=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"subscribe\",value:function(){}},{key:\"unsubscribe\",value:function(){}},{key:\"listen\",value:function(s,f){return this}},{key:\"listenToAll\",value:function(s){return this}},{key:\"stopListening\",value:function(s,f){return this}},{key:\"subscribed\",value:function(s){return this}},{key:\"error\",value:function(s){return this}},{key:\"on\",value:function(s,f){return this}}]),a})(Et),_e=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"whisper\",value:function(s,f){return this}}]),a})(dt),Hi=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"whisper\",value:function(s,f){return this}}]),a})(dt),Mi=(function(l){D(a,l);var h=H(a);function a(){return L(this,a),h.apply(this,arguments)}return R(a,[{key:\"here\",value:function(s){return this}},{key:\"joining\",value:function(s){return this}},{key:\"whisper\",value:function(s,f){return this}},{key:\"leaving\",value:function(s){return this}}]),a})(_e),Rt=(function(){function l(h){L(this,l),this._defaultOptions={auth:{headers:{}},authEndpoint:\"/broadcasting/auth\",userAuthentication:{endpoint:\"/broadcasting/user-auth\",headers:{}},broadcaster:\"pusher\",csrfToken:null,bearerToken:null,host:null,key:null,namespace:\"App.Events\"},this.setOptions(h),this.connect()}return R(l,[{key:\"setOptions\",value:function(a){this.options=at(this._defaultOptions,a);var c=this.csrfToken();return c&&(this.options.auth.headers[\"X-CSRF-TOKEN\"]=c,this.options.userAuthentication.headers[\"X-CSRF-TOKEN\"]=c),c=this.options.bearerToken,c&&(this.options.auth.headers.Authorization=\"Bearer \"+c,this.options.userAuthentication.headers.Authorization=\"Bearer \"+c),a}},{key:\"csrfToken\",value:function(){var a;return typeof window<\"u\"&&window.Laravel&&window.Laravel.csrfToken?window.Laravel.csrfToken:this.options.csrfToken?this.options.csrfToken:typeof document<\"u\"&&typeof document.querySelector==\"function\"&&(a=document.querySelector('meta[name=\"csrf-token\"]'))?a.getAttribute(\"content\"):null}}]),l})(),fe=(function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:\"connect\",value:function(){typeof this.options.client<\"u\"?this.pusher=this.options.client:this.options.Pusher?this.pusher=new this.options.Pusher(this.options.key,this.options):this.pusher=new Pusher(this.options.key,this.options)}},{key:\"signin\",value:function(){this.pusher.signin()}},{key:\"listen\",value:function(s,f,d){return this.channel(s).listen(f,d)}},{key:\"channel\",value:function(s){return this.channels[s]||(this.channels[s]=new Lt(this.pusher,s,this.options)),this.channels[s]}},{key:\"privateChannel\",value:function(s){return this.channels[\"private-\"+s]||(this.channels[\"private-\"+s]=new ve(this.pusher,\"private-\"+s,this.options)),this.channels[\"private-\"+s]}},{key:\"encryptedPrivateChannel\",value:function(s){return this.channels[\"private-encrypted-\"+s]||(this.channels[\"private-encrypted-\"+s]=new qi(this.pusher,\"private-encrypted-\"+s,this.options)),this.channels[\"private-encrypted-\"+s]}},{key:\"presenceChannel\",value:function(s){return this.channels[\"presence-\"+s]||(this.channels[\"presence-\"+s]=new Ui(this.pusher,\"presence-\"+s,this.options)),this.channels[\"presence-\"+s]}},{key:\"leave\",value:function(s){var f=this,d=[s,\"private-\"+s,\"private-encrypted-\"+s,\"presence-\"+s];d.forEach(function(N,P){f.leaveChannel(N)})}},{key:\"leaveChannel\",value:function(s){this.channels[s]&&(this.channels[s].unsubscribe(),delete this.channels[s])}},{key:\"socketId\",value:function(){return this.pusher.connection.socket_id}},{key:\"disconnect\",value:function(){this.pusher.disconnect()}}]),a})(Rt),pe=(function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:\"connect\",value:function(){var s=this,f=this.getSocketIO();return this.socket=f(this.options.host,this.options),this.socket.on(\"reconnect\",function(){Object.values(s.channels).forEach(function(d){d.subscribe()})}),this.socket}},{key:\"getSocketIO\",value:function(){if(typeof this.options.client<\"u\")return this.options.client;if(typeof io<\"u\")return io;throw new Error(\"Socket.io client not found. Should be globally available or passed via options.client\")}},{key:\"listen\",value:function(s,f,d){return this.channel(s).listen(f,d)}},{key:\"channel\",value:function(s){return this.channels[s]||(this.channels[s]=new ye(this.socket,s,this.options)),this.channels[s]}},{key:\"privateChannel\",value:function(s){return this.channels[\"private-\"+s]||(this.channels[\"private-\"+s]=new ge(this.socket,\"private-\"+s,this.options)),this.channels[\"private-\"+s]}},{key:\"presenceChannel\",value:function(s){return this.channels[\"presence-\"+s]||(this.channels[\"presence-\"+s]=new Di(this.socket,\"presence-\"+s,this.options)),this.channels[\"presence-\"+s]}},{key:\"leave\",value:function(s){var f=this,d=[s,\"private-\"+s,\"presence-\"+s];d.forEach(function(N){f.leaveChannel(N)})}},{key:\"leaveChannel\",value:function(s){this.channels[s]&&(this.channels[s].unsubscribe(),delete this.channels[s])}},{key:\"socketId\",value:function(){return this.socket.id}},{key:\"disconnect\",value:function(){this.socket.disconnect()}}]),a})(Rt),zi=(function(l){D(a,l);var h=H(a);function a(){var c;return L(this,a),c=h.apply(this,arguments),c.channels={},c}return R(a,[{key:\"connect\",value:function(){}},{key:\"listen\",value:function(s,f,d){return new dt}},{key:\"channel\",value:function(s){return new dt}},{key:\"privateChannel\",value:function(s){return new _e}},{key:\"encryptedPrivateChannel\",value:function(s){return new Hi}},{key:\"presenceChannel\",value:function(s){return new Mi}},{key:\"leave\",value:function(s){}},{key:\"leaveChannel\",value:function(s){}},{key:\"socketId\",value:function(){return\"fake-socket-id\"}},{key:\"disconnect\",value:function(){}}]),a})(Rt),be=(function(){function l(h){L(this,l),this.options=h,this.connect(),this.options.withoutInterceptors||this.registerInterceptors()}return R(l,[{key:\"channel\",value:function(a){return this.connector.channel(a)}},{key:\"connect\",value:function(){if(this.options.broadcaster==\"reverb\")this.connector=new fe(at(at({},this.options),{cluster:\"\"}));else if(this.options.broadcaster==\"pusher\")this.connector=new fe(this.options);else if(this.options.broadcaster==\"socket.io\")this.connector=new pe(this.options);else if(this.options.broadcaster==\"null\")this.connector=new zi(this.options);else if(typeof this.options.broadcaster==\"function\"&&Ni(this.options.broadcaster))this.connector=new this.options.broadcaster(this.options);else throw new Error(\"Broadcaster \".concat(st(this.options.broadcaster),\" \").concat(this.options.broadcaster,\" is not supported.\"))}},{key:\"disconnect\",value:function(){this.connector.disconnect()}},{key:\"join\",value:function(a){return this.connector.presenceChannel(a)}},{key:\"leave\",value:function(a){this.connector.leave(a)}},{key:\"leaveChannel\",value:function(a){this.connector.leaveChannel(a)}},{key:\"leaveAllChannels\",value:function(){for(var a in this.connector.channels)this.leaveChannel(a)}},{key:\"listen\",value:function(a,c,s){return this.connector.listen(a,c,s)}},{key:\"private\",value:function(a){return this.connector.privateChannel(a)}},{key:\"encryptedPrivate\",value:function(a){if(this.connector instanceof pe)throw new Error(\"Broadcaster \".concat(st(this.options.broadcaster),\" \").concat(this.options.broadcaster,\" does not support encrypted private channels.\"));return this.connector.encryptedPrivateChannel(a)}},{key:\"socketId\",value:function(){return this.connector.socketId()}},{key:\"registerInterceptors\",value:function(){typeof Vue==\"function\"&&Vue.http&&this.registerVueRequestInterceptor(),typeof axios==\"function\"&&this.registerAxiosRequestInterceptor(),typeof jQuery==\"function\"&&this.registerjQueryAjaxSetup(),(typeof Turbo>\"u\"?\"undefined\":st(Turbo))===\"object\"&&this.registerTurboRequestInterceptor()}},{key:\"registerVueRequestInterceptor\",value:function(){var a=this;Vue.http.interceptors.push(function(c,s){a.socketId()&&c.headers.set(\"X-Socket-ID\",a.socketId()),s()})}},{key:\"registerAxiosRequestInterceptor\",value:function(){var a=this;axios.interceptors.request.use(function(c){return a.socketId()&&(c.headers[\"X-Socket-Id\"]=a.socketId()),c})}},{key:\"registerjQueryAjaxSetup\",value:function(){var a=this;typeof jQuery.ajax<\"u\"&&jQuery.ajaxPrefilter(function(c,s,f){a.socketId()&&f.setRequestHeader(\"X-Socket-Id\",a.socketId())})}},{key:\"registerTurboRequestInterceptor\",value:function(){var a=this;document.addEventListener(\"turbo:before-fetch-request\",function(c){c.detail.fetchOptions.headers[\"X-Socket-Id\"]=a.socketId()})}}]),l})();var we=Li(me(),1);window.EchoFactory=be;window.Pusher=we.default;})();\n/*! Bundled license information:\n\npusher-js/dist/web/pusher.js:\n  (*!\n   * Pusher JavaScript Library v7.6.0\n   * https://pusher.com/\n   *\n   * Copyright 2020, Pusher\n   * Released under the MIT licence.\n   *)\n*/\n"
  },
  {
    "path": "public/js/filament/forms/components/checkbox-list.js",
    "content": "function c({livewireId:s}){return{areAllCheckboxesChecked:!1,checkboxListOptions:[],search:\"\",unsubscribeLivewireHook:null,visibleCheckboxListOptions:[],init(){this.checkboxListOptions=Array.from(this.$root.querySelectorAll(\".fi-fo-checkbox-list-option\")),this.updateVisibleCheckboxListOptions(),this.$nextTick(()=>{this.checkIfAllCheckboxesAreChecked()}),this.unsubscribeLivewireHook=Livewire.interceptMessage(({message:e,onSuccess:t})=>{t(()=>{this.$nextTick(()=>{e.component.id===s&&(this.checkboxListOptions=Array.from(this.$root.querySelectorAll(\".fi-fo-checkbox-list-option\")),this.updateVisibleCheckboxListOptions(),this.checkIfAllCheckboxesAreChecked())})})}),this.$watch(\"search\",()=>{this.updateVisibleCheckboxListOptions(),this.checkIfAllCheckboxesAreChecked()})},checkIfAllCheckboxesAreChecked(){this.areAllCheckboxesChecked=this.visibleCheckboxListOptions.length===this.visibleCheckboxListOptions.filter(e=>e.querySelector(\"input[type=checkbox]:checked, input[type=checkbox]:disabled\")).length},toggleAllCheckboxes(){this.checkIfAllCheckboxesAreChecked();let e=!this.areAllCheckboxesChecked;this.visibleCheckboxListOptions.forEach(t=>{let i=t.querySelector(\"input[type=checkbox]\");i.disabled||i.checked!==e&&(i.checked=e,i.dispatchEvent(new Event(\"change\")))}),this.areAllCheckboxesChecked=e},updateVisibleCheckboxListOptions(){this.visibleCheckboxListOptions=this.checkboxListOptions.filter(e=>[\"\",null,void 0].includes(this.search)||e.querySelector(\".fi-fo-checkbox-list-option-label\")?.innerText.toLowerCase().includes(this.search.toLowerCase())?!0:e.querySelector(\".fi-fo-checkbox-list-option-description\")?.innerText.toLowerCase().includes(this.search.toLowerCase()))},destroy(){this.unsubscribeLivewireHook?.()}}}export{c as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/code-editor.js",
    "content": "var Ms=[],Xh=[];(()=>{let O=\"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(e=>e?parseInt(e,36):1);for(let e=0,t=0;e<O.length;e++)(e%2?Xh:Ms).push(t=t+O[e])})();function zg(O){if(O<768)return!1;for(let e=0,t=Ms.length;;){let i=e+t>>1;if(O<Ms[i])t=i;else if(O>=Xh[i])e=i+1;else return!0;if(e==t)return!1}}function gh(O){return O>=127462&&O<=127487}var Ph=8205;function Th(O,e,t=!0,i=!0){return(t?bh:Ug)(O,e,i)}function bh(O,e,t){if(e==O.length)return e;e&&yh(O.charCodeAt(e))&&xh(O.charCodeAt(e-1))&&e--;let i=Ls(O,e);for(e+=Sh(i);e<O.length;){let r=Ls(O,e);if(i==Ph||r==Ph||t&&zg(r))e+=Sh(r),i=r;else if(gh(r)){let n=0,s=e-2;for(;s>=0&&gh(Ls(O,s));)n++,s-=2;if(n%2==0)break;e+=2}else break}return e}function Ug(O,e,t){for(;e>0;){let i=bh(O,e-2,t);if(i<e)return i;e--}return 0}function Ls(O,e){let t=O.charCodeAt(e);if(!xh(t)||e+1==O.length)return t;let i=O.charCodeAt(e+1);return yh(i)?(t-55296<<10)+(i-56320)+65536:t}function yh(O){return O>=56320&&O<57344}function xh(O){return O>=55296&&O<56320}function Sh(O){return O<65536?1:2}var E=class O{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=NO(this,e,t);let r=[];return this.decompose(0,e,r,2),i.length&&i.decompose(0,i.length,r,3),this.decompose(t,this.length,r,1),DO.from(r,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=NO(this,e,t);let i=[];return this.decompose(e,t,i,0),DO.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),r=new $O(this),n=new $O(e);for(let s=t,a=t;;){if(r.next(s),n.next(s),s=0,r.lineBreak!=n.lineBreak||r.done!=n.done||r.value!=n.value)return!1;if(a+=r.value.length,r.done||a>=i)return!0}}iter(e=1){return new $O(this,e)}iterRange(e,t=this.length){return new Dr(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;i=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Ir(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError(\"A document must have at least one line\");return e.length==1&&!e[0]?O.empty:e.length<=32?new Ae(e):DO.from(Ae.split(e,[]))}},Ae=class O extends E{constructor(e,t=Wg(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,r){for(let n=0;;n++){let s=this.text[n],a=r+s.length;if((t?i:a)>=e)return new Is(r,a,i,s);r=a+1,i++}}decompose(e,t,i,r){let n=e<=0&&t>=this.length?this:new O(kh(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let s=i.pop(),a=Mr(n.text,s.text.slice(),0,n.length);if(a.length<=32)i.push(new O(a,s.length+n.length));else{let o=a.length>>1;i.push(new O(a.slice(0,o)),new O(a.slice(o)))}}else i.push(n)}replace(e,t,i){if(!(i instanceof O))return super.replace(e,t,i);[e,t]=NO(this,e,t);let r=Mr(this.text,Mr(i.text,kh(this.text,0,e)),t),n=this.length+i.length-(t-e);return r.length<=32?new O(r,n):DO.from(O.split(r,[]),n)}sliceString(e,t=this.length,i=`\n`){[e,t]=NO(this,e,t);let r=\"\";for(let n=0,s=0;n<=t&&s<this.text.length;s++){let a=this.text[s],o=n+a.length;n>e&&s&&(r+=i),e<o&&t>n&&(r+=a.slice(Math.max(0,e-n),t-n)),n=o+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],r=-1;for(let n of e)i.push(n),r+=n.length+1,i.length==32&&(t.push(new O(i,r)),i=[],r=-1);return r>-1&&t.push(new O(i,r)),t}},DO=class O extends E{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,r){for(let n=0;;n++){let s=this.children[n],a=r+s.length,o=i+s.lines-1;if((t?o:a)>=e)return s.lineInner(e,t,i,r);r=a+1,i=o+1}}decompose(e,t,i,r){for(let n=0,s=0;s<=t&&n<this.children.length;n++){let a=this.children[n],o=s+a.length;if(e<=o&&t>=s){let l=r&((s<=e?1:0)|(o>=t?2:0));s>=e&&o<=t&&!l?i.push(a):a.decompose(e-s,t-s,i,l)}s=o+1}}replace(e,t,i){if([e,t]=NO(this,e,t),i.lines<this.lines)for(let r=0,n=0;r<this.children.length;r++){let s=this.children[r],a=n+s.length;if(e>=n&&t<=a){let o=s.replace(e-n,t-n,i),l=this.lines-s.lines+o.lines;if(o.lines<l>>4&&o.lines>l>>6){let c=this.children.slice();return c[r]=o,new O(c,this.length-(t-e)+i.length)}return super.replace(n,a,o)}n=a+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`\n`){[e,t]=NO(this,e,t);let r=\"\";for(let n=0,s=0;n<this.children.length&&s<=t;n++){let a=this.children[n],o=s+a.length;s>e&&n&&(r+=i),e<o&&t>s&&(r+=a.sliceString(e-s,t-s,i)),s=o+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof O))return 0;let i=0,[r,n,s,a]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,n+=t){if(r==s||n==a)return i;let o=this.children[r],l=e.children[n];if(o!=l)return i+o.scanIdentical(l,t);i+=o.length+1}}static from(e,t=e.reduce((i,r)=>i+r.length+1,-1)){let i=0;for(let u of e)i+=u.lines;if(i<32){let u=[];for(let Q of e)Q.flatten(u);return new Ae(u,t)}let r=Math.max(32,i>>5),n=r<<1,s=r>>1,a=[],o=0,l=-1,c=[];function h(u){let Q;if(u.lines>n&&u instanceof O)for(let $ of u.children)h($);else u.lines>s&&(o>s||!o)?(f(),a.push(u)):u instanceof Ae&&o&&(Q=c[c.length-1])instanceof Ae&&u.lines+Q.lines<=32?(o+=u.lines,l+=u.length+1,c[c.length-1]=new Ae(Q.text.concat(u.text),Q.length+1+u.length)):(o+u.lines>r&&f(),o+=u.lines,l+=u.length+1,c.push(u))}function f(){o!=0&&(a.push(c.length==1?c[0]:O.from(c,l)),l=-1,o=c.length=0)}for(let u of e)h(u);return f(),a.length==1?a[0]:new O(a,t)}};E.empty=new Ae([\"\"],0);function Wg(O){let e=-1;for(let t of O)e+=t.length+1;return e}function Mr(O,e,t=0,i=1e9){for(let r=0,n=0,s=!0;n<O.length&&r<=i;n++){let a=O[n],o=r+a.length;o>=t&&(o>i&&(a=a.slice(0,i-r)),r<t&&(a=a.slice(t-r)),s?(e[e.length-1]+=a,s=!1):e.push(a)),r=o+1}return e}function kh(O,e,t){return Mr(O,[\"\"],e,t)}var $O=class{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value=\"\",this.nodes=[e],this.offsets=[t>0?1:(e instanceof Ae?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,r=this.nodes[i],n=this.offsets[i],s=n>>1,a=r instanceof Ae?r.text.length:r.children.length;if(s==(t>0?a:0)){if(i==0)return this.done=!0,this.value=\"\",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((n&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`\n`,this;e--}else if(r instanceof Ae){let o=r.text[s+(t<0?-1:0)];if(this.offsets[i]+=t,o.length>Math.max(0,e))return this.value=e==0?o:t>0?o.slice(e):o.slice(0,o.length-e),this;e-=o.length}else{let o=r.children[s+(t<0?-1:0)];e>o.length?(e-=o.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(o),this.offsets.push(t>0?1:(o instanceof Ae?o.text.length:o.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},Dr=class{constructor(e,t,i){this.value=\"\",this.done=!1,this.cursor=new $O(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value=\"\",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=i?r:t<0?r.slice(r.length-i):r.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=\"\"}},Ir=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value=\"\",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value=\"\",this.afterBreak=!1):t?(this.done=!0,this.value=\"\"):i?this.afterBreak?this.value=\"\":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<\"u\"&&(E.prototype[Symbol.iterator]=function(){return this.iter()},$O.prototype[Symbol.iterator]=Dr.prototype[Symbol.iterator]=Ir.prototype[Symbol.iterator]=function(){return this});var Is=class{constructor(e,t,i,r){this.from=e,this.to=t,this.number=i,this.text=r}get length(){return this.to-this.from}};function NO(O,e,t){return e=Math.max(0,Math.min(O.length,e)),[e,Math.max(e,Math.min(O.length,t))]}function fe(O,e,t=!0,i=!0){return Th(O,e,t,i)}function jg(O){return O>=56320&&O<57344}function Cg(O){return O>=55296&&O<56320}function Se(O,e){let t=O.charCodeAt(e);if(!Cg(t)||e+1==O.length)return t;let i=O.charCodeAt(e+1);return jg(i)?(t-55296<<10)+(i-56320)+65536:t}function Ri(O){return O<=65535?String.fromCharCode(O):(O-=65536,String.fromCharCode((O>>10)+55296,(O&1023)+56320))}function Me(O){return O<65536?1:2}var Bs=/\\r\\n?|\\n/,pe=(function(O){return O[O.Simple=0]=\"Simple\",O[O.TrackDel=1]=\"TrackDel\",O[O.TrackBefore=2]=\"TrackBefore\",O[O.TrackAfter=3]=\"TrackAfter\",O})(pe||(pe={})),vt=class O{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,r=0;t<this.sections.length;){let n=this.sections[t++],s=this.sections[t++];s<0?(e(i,r,n),r+=n):r+=s,i+=n}}iterChangedRanges(e,t=!1){Ns(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],r=this.sections[t++];r<0?e.push(i,r):e.push(r,i)}return new O(e)}composeDesc(e){return this.empty?e:e.empty?this:_h(this,e)}mapDesc(e,t=!1){return e.empty?this:Fs(this,e,t)}mapPos(e,t=-1,i=pe.Simple){let r=0,n=0;for(let s=0;s<this.sections.length;){let a=this.sections[s++],o=this.sections[s++],l=r+a;if(o<0){if(l>e)return n+(e-r);n+=a}else{if(i!=pe.Simple&&l>=e&&(i==pe.TrackDel&&r<e&&l>e||i==pe.TrackBefore&&r<e||i==pe.TrackAfter&&l>e))return null;if(l>e||l==e&&t<0&&!a)return e==r||t<0?n:n+o;n+=o}r=l}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return n}touchesRange(e,t=e){for(let i=0,r=0;i<this.sections.length&&r<=t;){let n=this.sections[i++],s=this.sections[i++],a=r+n;if(s>=0&&r<=t&&a>=e)return r<e&&a>t?\"cover\":!0;r=a}return!1}toString(){let e=\"\";for(let t=0;t<this.sections.length;){let i=this.sections[t++],r=this.sections[t++];e+=(e?\" \":\"\")+i+(r>=0?\":\"+r:\"\")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!=\"number\"))throw new RangeError(\"Invalid JSON representation of ChangeDesc\");return new O(e)}static create(e){return new O(e)}},Ze=class O extends vt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError(\"Applying change set to a document with the wrong length\");return Ns(this,(t,i,r,n,s)=>e=e.replace(r,r+(i-t),s),!1),e}mapDesc(e,t=!1){return Fs(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let r=0,n=0;r<t.length;r+=2){let s=t[r],a=t[r+1];if(a>=0){t[r]=a,t[r+1]=s;let o=r>>1;for(;i.length<o;)i.push(E.empty);i.push(s?e.slice(n,n+s):E.empty)}n+=s}return new O(t,i)}compose(e){return this.empty?e:e.empty?this:_h(this,e,!0)}map(e,t=!1){return e.empty?this:Fs(this,e,t,!0)}iterChanges(e,t=!1){Ns(this,e,t)}get desc(){return vt.create(this.sections)}filter(e){let t=[],i=[],r=[],n=new pO(this);e:for(let s=0,a=0;;){let o=s==e.length?1e9:e[s++];for(;a<o||a==o&&n.len==0;){if(n.done)break e;let c=Math.min(n.len,o-a);ye(r,c,-1);let h=n.ins==-1?-1:n.off==0?n.ins:0;ye(t,c,h),h>0&&Mt(i,t,n.text),n.forward(c),a+=c}let l=e[s++];for(;a<l;){if(n.done)break e;let c=Math.min(n.len,l-a);ye(t,c,-1),ye(r,c,n.ins==-1?-1:n.off==0?n.ins:0),n.forward(c),a+=c}}return{changes:new O(t,i),filtered:vt.create(r)}}toJSON(){let e=[];for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t],r=this.sections[t+1];r<0?e.push(i):r==0?e.push([i]):e.push([i].concat(this.inserted[t>>1].toJSON()))}return e}static of(e,t,i){let r=[],n=[],s=0,a=null;function o(c=!1){if(!c&&!r.length)return;s<t&&ye(r,t-s,-1);let h=new O(r,n);a=a?a.compose(h.map(a)):h,r=[],n=[],s=0}function l(c){if(Array.isArray(c))for(let h of c)l(h);else if(c instanceof O){if(c.length!=t)throw new RangeError(`Mismatched change set length (got ${c.length}, expected ${t})`);o(),a=a?a.compose(c.map(a)):c}else{let{from:h,to:f=h,insert:u}=c;if(h>f||h<0||f>t)throw new RangeError(`Invalid change range ${h} to ${f} (in doc of length ${t})`);let Q=u?typeof u==\"string\"?E.of(u.split(i||Bs)):u:E.empty,$=Q.length;if(h==f&&$==0)return;h<s&&o(),h>s&&ye(r,h-s,-1),ye(r,f-h,$),Mt(n,r,Q),s=f}}return l(e),o(!a),a}static empty(e){return new O(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError(\"Invalid JSON representation of ChangeSet\");let t=[],i=[];for(let r=0;r<e.length;r++){let n=e[r];if(typeof n==\"number\")t.push(n,-1);else{if(!Array.isArray(n)||typeof n[0]!=\"number\"||n.some((s,a)=>a&&typeof s!=\"string\"))throw new RangeError(\"Invalid JSON representation of ChangeSet\");if(n.length==1)t.push(n[0],0);else{for(;i.length<r;)i.push(E.empty);i[r]=E.of(n.slice(1)),t.push(n[0],i[r].length)}}}return new O(t,i)}static createSet(e,t){return new O(e,t)}};function ye(O,e,t,i=!1){if(e==0&&t<=0)return;let r=O.length-2;r>=0&&t<=0&&t==O[r+1]?O[r]+=e:r>=0&&e==0&&O[r]==0?O[r+1]+=t:i?(O[r]+=e,O[r+1]+=t):O.push(e,t)}function Mt(O,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i<O.length)O[O.length-1]=O[O.length-1].append(t);else{for(;O.length<i;)O.push(E.empty);O.push(t)}}function Ns(O,e,t){let i=O.inserted;for(let r=0,n=0,s=0;s<O.sections.length;){let a=O.sections[s++],o=O.sections[s++];if(o<0)r+=a,n+=a;else{let l=r,c=n,h=E.empty;for(;l+=a,c+=o,o&&i&&(h=h.append(i[s-2>>1])),!(t||s==O.sections.length||O.sections[s+1]<0);)a=O.sections[s++],o=O.sections[s++];e(r,l,n,c,h),r=l,n=c}}}function Fs(O,e,t,i=!1){let r=[],n=i?[]:null,s=new pO(O),a=new pO(e);for(let o=-1;;){if(s.done&&a.len||a.done&&s.len)throw new Error(\"Mismatched change set lengths\");if(s.ins==-1&&a.ins==-1){let l=Math.min(s.len,a.len);ye(r,l,-1),s.forward(l),a.forward(l)}else if(a.ins>=0&&(s.ins<0||o==s.i||s.off==0&&(a.len<s.len||a.len==s.len&&!t))){let l=a.len;for(ye(r,a.ins,-1);l;){let c=Math.min(s.len,l);s.ins>=0&&o<s.i&&s.len<=c&&(ye(r,0,s.ins),n&&Mt(n,r,s.text),o=s.i),s.forward(c),l-=c}a.next()}else if(s.ins>=0){let l=0,c=s.len;for(;c;)if(a.ins==-1){let h=Math.min(c,a.len);l+=h,c-=h,a.forward(h)}else if(a.ins==0&&a.len<c)c-=a.len,a.next();else break;ye(r,l,o<s.i?s.ins:0),n&&o<s.i&&Mt(n,r,s.text),o=s.i,s.forward(s.len-c)}else{if(s.done&&a.done)return n?Ze.createSet(r,n):vt.create(r);throw new Error(\"Mismatched change set lengths\")}}}function _h(O,e,t=!1){let i=[],r=t?[]:null,n=new pO(O),s=new pO(e);for(let a=!1;;){if(n.done&&s.done)return r?Ze.createSet(i,r):vt.create(i);if(n.ins==0)ye(i,n.len,0,a),n.next();else if(s.len==0&&!s.done)ye(i,0,s.ins,a),r&&Mt(r,i,s.text),s.next();else{if(n.done||s.done)throw new Error(\"Mismatched change set lengths\");{let o=Math.min(n.len2,s.len),l=i.length;if(n.ins==-1){let c=s.ins==-1?-1:s.off?0:s.ins;ye(i,o,c,a),r&&c&&Mt(r,i,s.text)}else s.ins==-1?(ye(i,n.off?0:n.len,o,a),r&&Mt(r,i,n.textBit(o))):(ye(i,n.off?0:n.len,s.off?0:s.ins,a),r&&!s.off&&Mt(r,i,s.text));a=(n.ins>o||s.ins>=0&&s.len>o)&&(a||i.length>l),n.forward2(o),s.forward(o)}}}}var pO=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i<e.length?(this.len=e[this.i++],this.ins=e[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return this.ins==-2}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,t=this.i-2>>1;return t>=e.length?E.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?E.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},MO=class O{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,r;return this.empty?i=r=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new O(i,r,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return S.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return S.range(this.anchor,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!=\"number\"||typeof e.head!=\"number\")throw new RangeError(\"Invalid JSON representation for SelectionRange\");return S.range(e.anchor,e.head)}static create(e,t,i){return new O(e,t,i)}},S=class O{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:O.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;i<this.ranges.length;i++)if(!this.ranges[i].eq(e.ranges[i],t))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return this.ranges.length==1?this:new O([this.main],0)}addRange(e,t=!0){return O.create([e].concat(this.ranges),t?0:this.mainIndex+1)}replaceRange(e,t=this.mainIndex){let i=this.ranges.slice();return i[t]=e,O.create(i,this.mainIndex)}toJSON(){return{ranges:this.ranges.map(e=>e.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!=\"number\"||e.main>=e.ranges.length)throw new RangeError(\"Invalid JSON representation for EditorSelection\");return new O(e.ranges.map(t=>MO.fromJSON(t)),e.main)}static single(e,t=e){return new O([O.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError(\"A selection needs at least one range\");for(let i=0,r=0;r<e.length;r++){let n=e[r];if(n.empty?n.from<=i:n.from<i)return O.normalized(e.slice(),t);i=n.to}return new O(e,t)}static cursor(e,t=0,i,r){return MO.create(e,e,(t==0?0:t<0?8:16)|(i==null?7:Math.min(6,i))|(r??16777215)<<6)}static range(e,t,i,r){let n=(i??16777215)<<6|(r==null?7:Math.min(6,r));return t<e?MO.create(t,e,48|n):MO.create(e,t,(t>e?8:0)|n)}static normalized(e,t=0){let i=e[t];e.sort((r,n)=>r.from-n.from),t=e.indexOf(i);for(let r=1;r<e.length;r++){let n=e[r],s=e[r-1];if(n.empty?n.from<=s.to:n.from<s.to){let a=s.from,o=Math.max(n.to,s.to);r<=t&&t--,e.splice(--r,2,n.anchor>n.head?O.range(o,a):O.range(a,o))}}return new O(e,t)}};function Rh(O,e){for(let t of O.ranges)if(t.to>e)throw new RangeError(\"Selection points outside of document\")}var sa=0,Z=class O{constructor(e,t,i,r,n){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=r,this.id=sa++,this.default=e([]),this.extensions=typeof n==\"function\"?n(this):n}get reader(){return this}static define(e={}){return new O(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:aa),!!e.static,e.enables)}of(e){return new IO([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error(\"Can't compute a static facet\");return new IO(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error(\"Can't compute a static facet\");return new IO(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}};function aa(O,e){return O==e||O.length==e.length&&O.every((t,i)=>t===e[i])}var IO=class{constructor(e,t,i,r){this.dependencies=e,this.facet=t,this.type=i,this.value=r,this.id=sa++}dynamicSlot(e){var t;let i=this.value,r=this.facet.compareInput,n=this.id,s=e[n]>>1,a=this.type==2,o=!1,l=!1,c=[];for(let h of this.dependencies)h==\"doc\"?o=!0:h==\"selection\"?l=!0:(((t=e[h.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[h.id]);return{create(h){return h.values[s]=i(h),1},update(h,f){if(o&&f.docChanged||l&&(f.docChanged||f.selection)||Hs(h,c)){let u=i(h);if(a?!wh(u,h.values[s],r):!r(u,h.values[s]))return h.values[s]=u,1}return 0},reconfigure:(h,f)=>{let u,Q=f.config.address[n];if(Q!=null){let $=Fr(f,Q);if(this.dependencies.every(p=>p instanceof Z?f.facet(p)===h.facet(p):p instanceof ce?f.field(p,!1)==h.field(p,!1):!0)||(a?wh(u=i(h),$,r):r(u=i(h),$)))return h.values[s]=$,0}else u=i(h);return h.values[s]=u,1}}}};function wh(O,e,t){if(O.length!=e.length)return!1;for(let i=0;i<O.length;i++)if(!t(O[i],e[i]))return!1;return!0}function Hs(O,e){let t=!1;for(let i of e)Zi(O,i)&1&&(t=!0);return t}function Gg(O,e,t){let i=t.map(o=>O[o.id]),r=t.map(o=>o.type),n=i.filter(o=>!(o&1)),s=O[e.id]>>1;function a(o){let l=[];for(let c=0;c<i.length;c++){let h=Fr(o,i[c]);if(r[c]==2)for(let f of h)l.push(f);else l.push(h)}return e.combine(l)}return{create(o){for(let l of i)Zi(o,l);return o.values[s]=a(o),1},update(o,l){if(!Hs(o,n))return 0;let c=a(o);return e.compare(c,o.values[s])?0:(o.values[s]=c,1)},reconfigure(o,l){let c=Hs(o,i),h=l.config.facets[e.id],f=l.facet(e);if(h&&!c&&aa(t,h))return o.values[s]=f,0;let u=a(o);return e.compare(u,f)?(o.values[s]=f,0):(o.values[s]=u,1)}}}var Er=Z.define({static:!0}),ce=class O{constructor(e,t,i,r,n){this.id=e,this.createF=t,this.updateF=i,this.compareF=r,this.spec=n,this.provides=void 0}static define(e){let t=new O(sa++,e.create,e.update,e.compare||((i,r)=>i===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Er).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,r)=>{let n=i.values[t],s=this.updateF(n,r);return this.compareF(n,s)?0:(i.values[t]=s,1)},reconfigure:(i,r)=>{let n=i.facet(Er),s=r.facet(Er),a;return(a=n.find(o=>o.field==this))&&a!=s.find(o=>o.field==this)?(i.values[t]=a.create(i),1):r.config.address[this.id]!=null?(i.values[t]=r.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Er.of({field:this,create:e})]}get extension(){return this}},uO={lowest:4,low:3,default:2,high:1,highest:0};function wi(O){return e=>new Br(e,O)}var ze={highest:wi(uO.highest),high:wi(uO.high),default:wi(uO.default),low:wi(uO.low),lowest:wi(uO.lowest)},Br=class{constructor(e,t){this.inner=e,this.prec=t}},FO=class O{of(e){return new vi(this,e)}reconfigure(e){return O.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},vi=class{constructor(e,t){this.compartment=e,this.inner=t}},Nr=class O{constructor(e,t,i,r,n,s){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=r,this.staticValues=n,this.facets=s,this.statusTemplate=[];this.statusTemplate.length<i.length;)this.statusTemplate.push(0)}staticFacet(e){let t=this.address[e.id];return t==null?e.default:this.staticValues[t>>1]}static resolve(e,t,i){let r=[],n=Object.create(null),s=new Map;for(let f of Eg(e,t,s))f instanceof ce?r.push(f):(n[f.facet.id]||(n[f.facet.id]=[])).push(f);let a=Object.create(null),o=[],l=[];for(let f of r)a[f.id]=l.length<<1,l.push(u=>f.slot(u));let c=i?.config.facets;for(let f in n){let u=n[f],Q=u[0].facet,$=c&&c[f]||[];if(u.every(p=>p.type==0))if(a[Q.id]=o.length<<1|1,aa($,u))o.push(i.facet(Q));else{let p=Q.combine(u.map(m=>m.value));o.push(i&&Q.compare(p,i.facet(Q))?i.facet(Q):p)}else{for(let p of u)p.type==0?(a[p.id]=o.length<<1|1,o.push(p.value)):(a[p.id]=l.length<<1,l.push(m=>p.dynamicSlot(m)));a[Q.id]=l.length<<1,l.push(p=>Gg(p,Q,u))}}let h=l.map(f=>f(a));return new O(e,s,h,a,o,n)}};function Eg(O,e,t){let i=[[],[],[],[],[]],r=new Map;function n(s,a){let o=r.get(s);if(o!=null){if(o<=a)return;let l=i[o].indexOf(s);l>-1&&i[o].splice(l,1),s instanceof vi&&t.delete(s.compartment)}if(r.set(s,a),Array.isArray(s))for(let l of s)n(l,a);else if(s instanceof vi){if(t.has(s.compartment))throw new RangeError(\"Duplicate use of compartment in extensions\");let l=e.get(s.compartment)||s.inner;t.set(s.compartment,l),n(l,a)}else if(s instanceof Br)n(s.inner,s.prec);else if(s instanceof ce)i[a].push(s),s.provides&&n(s.provides,a);else if(s instanceof IO)i[a].push(s),s.facet.extensions&&n(s.facet.extensions,uO.default);else{let l=s.extension;if(!l)throw new Error(`Unrecognized extension value in extension set (${s}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);n(l,a)}}return n(O,uO.default),i.reduce((s,a)=>s.concat(a))}function Zi(O,e){if(e&1)return 2;let t=e>>1,i=O.status[t];if(i==4)throw new Error(\"Cyclic dependency between fields and/or facets\");if(i&2)return i;O.status[t]=4;let r=O.computeSlot(O,O.config.dynamicSlots[t]);return O.status[t]=2|r}function Fr(O,e){return e&1?O.config.staticValues[e>>1]:O.values[e>>1]}var Vh=Z.define(),Ks=Z.define({combine:O=>O.some(e=>e),static:!0}),qh=Z.define({combine:O=>O.length?O[0]:void 0,static:!0}),zh=Z.define(),Uh=Z.define(),Wh=Z.define(),jh=Z.define({combine:O=>O.length?O[0]:!1}),qe=class{constructor(e,t){this.type=e,this.value=t}static define(){return new Js}},Js=class{of(e){return new qe(this,e)}},ea=class{constructor(e){this.map=e}of(e){return new V(this,e)}},V=class O{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new O(this.type,t)}is(e){return this.type==e}static define(e={}){return new ea(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let r of e){let n=r.map(t);n&&i.push(n)}return i}};V.reconfigure=V.define();V.appendConfig=V.define();var Qe=class O{constructor(e,t,i,r,n,s){this.startState=e,this.changes=t,this.selection=i,this.effects=r,this.annotations=n,this.scrollIntoView=s,this._doc=null,this._state=null,i&&Rh(i,t.newLength),n.some(a=>a.type==O.time)||(this.annotations=n.concat(O.time.of(Date.now())))}static create(e,t,i,r,n,s){return new O(e,t,i,r,n,s)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(O.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]==\".\"))}};Qe.time=qe.define();Qe.userEvent=qe.define();Qe.addToHistory=qe.define();Qe.remote=qe.define();function Ag(O,e){let t=[];for(let i=0,r=0;;){let n,s;if(i<O.length&&(r==e.length||e[r]>=O[i]))n=O[i++],s=O[i++];else if(r<e.length)n=e[r++],s=e[r++];else return t;!t.length||t[t.length-1]<n?t.push(n,s):t[t.length-1]<s&&(t[t.length-1]=s)}}function Ch(O,e,t){var i;let r,n,s;return t?(r=e.changes,n=Ze.empty(e.changes.length),s=O.changes.compose(e.changes)):(r=e.changes.map(O.changes),n=O.changes.mapDesc(e.changes,!0),s=O.changes.compose(r)),{changes:s,selection:e.selection?e.selection.map(n):(i=O.selection)===null||i===void 0?void 0:i.map(r),effects:V.mapEffects(O.effects,r).concat(V.mapEffects(e.effects,n)),annotations:O.annotations.length?O.annotations.concat(e.annotations):e.annotations,scrollIntoView:O.scrollIntoView||e.scrollIntoView}}function ta(O,e,t){let i=e.selection,r=BO(e.annotations);return e.userEvent&&(r=r.concat(Qe.userEvent.of(e.userEvent))),{changes:e.changes instanceof Ze?e.changes:Ze.of(e.changes||[],t,O.facet(qh)),selection:i&&(i instanceof S?i:S.single(i.anchor,i.head)),effects:BO(e.effects),annotations:r,scrollIntoView:!!e.scrollIntoView}}function Gh(O,e,t){let i=ta(O,e.length?e[0]:{},O.doc.length);e.length&&e[0].filter===!1&&(t=!1);for(let n=1;n<e.length;n++){e[n].filter===!1&&(t=!1);let s=!!e[n].sequential;i=Ch(i,ta(O,e[n],s?i.changes.newLength:O.doc.length),s)}let r=Qe.create(O,i.changes,i.selection,i.effects,i.annotations,i.scrollIntoView);return Mg(t?Lg(r):r)}function Lg(O){let e=O.startState,t=!0;for(let r of e.facet(zh)){let n=r(O);if(n===!1){t=!1;break}Array.isArray(n)&&(t=t===!0?n:Ag(t,n))}if(t!==!0){let r,n;if(t===!1)n=O.changes.invertedDesc,r=Ze.empty(e.doc.length);else{let s=O.changes.filter(t);r=s.changes,n=s.filtered.mapDesc(s.changes).invertedDesc}O=Qe.create(e,r,O.selection&&O.selection.map(n),V.mapEffects(O.effects,n),O.annotations,O.scrollIntoView)}let i=e.facet(Uh);for(let r=i.length-1;r>=0;r--){let n=i[r](O);n instanceof Qe?O=n:Array.isArray(n)&&n.length==1&&n[0]instanceof Qe?O=n[0]:O=Gh(e,BO(n),!1)}return O}function Mg(O){let e=O.startState,t=e.facet(Wh),i=O;for(let r=t.length-1;r>=0;r--){let n=t[r](O);n&&Object.keys(n).length&&(i=Ch(i,ta(e,n,O.changes.newLength),!0))}return i==O?O:Qe.create(e,O.changes,O.selection,i.effects,i.annotations,i.scrollIntoView)}var Dg=[];function BO(O){return O==null?Dg:Array.isArray(O)?O:[O]}var ee=(function(O){return O[O.Word=0]=\"Word\",O[O.Space=1]=\"Space\",O[O.Other=2]=\"Other\",O})(ee||(ee={})),Ig=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/,Oa;try{Oa=new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\",\"u\")}catch{}function Bg(O){if(Oa)return Oa.test(O);for(let e=0;e<O.length;e++){let t=O[e];if(/\\w/.test(t)||t>\"\\x80\"&&(t.toUpperCase()!=t.toLowerCase()||Ig.test(t)))return!0}return!1}function Ng(O){return e=>{if(!/\\S/.test(e))return ee.Space;if(Bg(e))return ee.Word;for(let t=0;t<O.length;t++)if(e.indexOf(O[t])>-1)return ee.Word;return ee.Other}}var I=class O{constructor(e,t,i,r,n,s){this.config=e,this.doc=t,this.selection=i,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=n,s&&(s._state=this);for(let a=0;a<this.config.dynamicSlots.length;a++)Zi(this,a<<1);this.computeSlot=null}field(e,t=!0){let i=this.config.address[e.id];if(i==null){if(t)throw new RangeError(\"Field is not present in this state\");return}return Zi(this,i),Fr(this,i)}update(...e){return Gh(this,e,!0)}applyTransaction(e){let t=this.config,{base:i,compartments:r}=t;for(let a of e.effects)a.is(FO.reconfigure)?(t&&(r=new Map,t.compartments.forEach((o,l)=>r.set(l,o)),t=null),r.set(a.value.compartment,a.value.extension)):a.is(V.reconfigure)?(t=null,i=a.value):a.is(V.appendConfig)&&(t=null,i=BO(i).concat(a.value));let n;t?n=e.startState.values.slice():(t=Nr.resolve(i,r,this),n=new O(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(o,l)=>l.reconfigure(o,this),null).values);let s=e.startState.facet(Ks)?e.newSelection:e.newSelection.asSingle();new O(t,e.newDoc,s,n,(a,o)=>o.update(a,e),e)}replaceSelection(e){return typeof e==\"string\"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:S.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),r=this.changes(i.changes),n=[i.range],s=BO(i.effects);for(let a=1;a<t.ranges.length;a++){let o=e(t.ranges[a]),l=this.changes(o.changes),c=l.map(r);for(let f=0;f<a;f++)n[f]=n[f].map(c);let h=r.mapDesc(l,!0);n.push(o.range.map(h)),r=r.compose(c),s=V.mapEffects(s,c).concat(V.mapEffects(BO(o.effects),h))}return{changes:r,selection:S.create(n,t.mainIndex),effects:s}}changes(e=[]){return e instanceof Ze?e:Ze.of(e,this.doc.length,this.facet(O.lineSeparator))}toText(e){return E.of(e.split(this.facet(O.lineSeparator)||Bs))}sliceDoc(e=0,t=this.doc.length){return this.doc.sliceString(e,t,this.lineBreak)}facet(e){let t=this.config.address[e.id];return t==null?e.default:(Zi(this,t),Fr(this,t))}toJSON(e){let t={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(e)for(let i in e){let r=e[i];r instanceof ce&&this.config.address[r.id]!=null&&(t[i]=r.spec.toJSON(this.field(e[i]),this))}return t}static fromJSON(e,t={},i){if(!e||typeof e.doc!=\"string\")throw new RangeError(\"Invalid JSON representation for EditorState\");let r=[];if(i){for(let n in i)if(Object.prototype.hasOwnProperty.call(e,n)){let s=i[n],a=e[n];r.push(s.init(o=>s.spec.fromJSON(a,o)))}}return O.create({doc:e.doc,selection:S.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Nr.resolve(e.extensions||[],new Map),i=e.doc instanceof E?e.doc:E.of((e.doc||\"\").split(t.staticFacet(O.lineSeparator)||Bs)),r=e.selection?e.selection instanceof S?e.selection:S.single(e.selection.anchor,e.selection.head):S.single(0);return Rh(r,i.length),t.staticFacet(Ks)||(r=r.asSingle()),new O(t,i,r,t.dynamicSlots.map(()=>null),(n,s)=>s.create(n),null)}get tabSize(){return this.facet(O.tabSize)}get lineBreak(){return this.facet(O.lineSeparator)||`\n`}get readOnly(){return this.facet(jh)}phrase(e,...t){for(let i of this.facet(O.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\\$(\\$|\\d*)/g,(i,r)=>{if(r==\"$\")return\"$\";let n=+(r||1);return!n||n>t.length?i:t[n-1]})),e}languageDataAt(e,t,i=-1){let r=[];for(let n of this.facet(Vh))for(let s of n(this,t,i))Object.prototype.hasOwnProperty.call(s,e)&&r.push(s[e]);return r}charCategorizer(e){let t=this.languageDataAt(\"wordChars\",e);return Ng(t.length?t[0]:\"\")}wordAt(e){let{text:t,from:i,length:r}=this.doc.lineAt(e),n=this.charCategorizer(e),s=e-i,a=e-i;for(;s>0;){let o=fe(t,s,!1);if(n(t.slice(o,s))!=ee.Word)break;s=o}for(;a<r;){let o=fe(t,a);if(n(t.slice(a,o))!=ee.Word)break;a=o}return s==a?null:S.range(s+i,a+i)}};I.allowMultipleSelections=Ks;I.tabSize=Z.define({combine:O=>O.length?O[0]:4});I.lineSeparator=qh;I.readOnly=jh;I.phrases=Z.define({compare(O,e){let t=Object.keys(O),i=Object.keys(e);return t.length==i.length&&t.every(r=>O[r]==e[r])}});I.languageData=Vh;I.changeFilter=zh;I.transactionFilter=Uh;I.transactionExtender=Wh;FO.reconfigure=V.define();function xe(O,e,t={}){let i={};for(let r of O)for(let n of Object.keys(r)){let s=r[n],a=i[n];if(a===void 0)i[n]=s;else if(!(a===s||s===void 0))if(Object.hasOwnProperty.call(t,n))i[n]=t[n](a,s);else throw new Error(\"Config merge conflict for field \"+n)}for(let r in e)i[r]===void 0&&(i[r]=e[r]);return i}var tt=class{eq(e){return this==e}range(e,t=e){return Yi.create(e,t,this)}};tt.prototype.startSide=tt.prototype.endSide=0;tt.prototype.point=!1;tt.prototype.mapMode=pe.TrackDel;function oa(O,e){return O==e||O.constructor==e.constructor&&O.eq(e)}var Yi=class O{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new O(e,t,i)}};function ia(O,e){return O.from-e.from||O.value.startSide-e.value.startSide}var ra=class O{constructor(e,t,i,r){this.from=e,this.to=t,this.value=i,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,r=0){let n=i?this.to:this.from;for(let s=r,a=n.length;;){if(s==a)return s;let o=s+a>>1,l=n[o]-e||(i?this.value[o].endSide:this.value[o].startSide)-t;if(o==s)return l>=0?s:a;l>=0?a=o:s=o+1}}between(e,t,i,r){for(let n=this.findIndex(t,-1e9,!0),s=this.findIndex(i,1e9,!1,n);n<s;n++)if(r(this.from[n]+e,this.to[n]+e,this.value[n])===!1)return!1}map(e,t){let i=[],r=[],n=[],s=-1,a=-1;for(let o=0;o<this.value.length;o++){let l=this.value[o],c=this.from[o]+e,h=this.to[o]+e,f,u;if(c==h){let Q=t.mapPos(c,l.startSide,l.mapMode);if(Q==null||(f=u=Q,l.startSide!=l.endSide&&(u=t.mapPos(c,l.endSide),u<f)))continue}else if(f=t.mapPos(c,l.startSide),u=t.mapPos(h,l.endSide),f>u||f==u&&l.startSide>0&&l.endSide<=0)continue;(u-f||l.endSide-l.startSide)<0||(s<0&&(s=f),l.point&&(a=Math.max(a,u-f)),i.push(l),r.push(f-s),n.push(u-s))}return{mapped:i.length?new O(r,n,i,a):null,pos:s}}},M=class O{constructor(e,t,i,r){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=r}static create(e,t,i,r){return new O(e,t,i,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:r=0,filterTo:n=this.length}=e,s=e.filter;if(t.length==0&&!s)return this;if(i&&(t=t.slice().sort(ia)),this.isEmpty)return t.length?O.of(t):this;let a=new Hr(this,null,-1).goto(0),o=0,l=[],c=new Le;for(;a.value||o<t.length;)if(o<t.length&&(a.from-t[o].from||a.startSide-t[o].value.startSide)>=0){let h=t[o++];c.addInner(h.from,h.to,h.value)||l.push(h)}else a.rangeIndex==1&&a.chunkIndex<this.chunk.length&&(o==t.length||this.chunkEnd(a.chunkIndex)<t[o].from)&&(!s||r>this.chunkEnd(a.chunkIndex)||n<this.chunkPos[a.chunkIndex])&&c.addChunk(this.chunkPos[a.chunkIndex],this.chunk[a.chunkIndex])?a.nextChunk():((!s||r>a.to||n<a.from||s(a.from,a.to,a.value))&&(c.addInner(a.from,a.to,a.value)||l.push(Yi.create(a.from,a.to,a.value))),a.next());return c.finishInner(this.nextLayer.isEmpty&&!l.length?O.empty:this.nextLayer.update({add:l,filter:s,filterFrom:r,filterTo:n}))}map(e){if(e.empty||this.isEmpty)return this;let t=[],i=[],r=-1;for(let s=0;s<this.chunk.length;s++){let a=this.chunkPos[s],o=this.chunk[s],l=e.touchesRange(a,a+o.length);if(l===!1)r=Math.max(r,o.maxPoint),t.push(o),i.push(e.mapPos(a));else if(l===!0){let{mapped:c,pos:h}=o.map(a,e);c&&(r=Math.max(r,c.maxPoint),t.push(c),i.push(h))}}let n=this.nextLayer.map(e);return t.length==0?n:new O(i,t,n||O.empty,r)}between(e,t,i){if(!this.isEmpty){for(let r=0;r<this.chunk.length;r++){let n=this.chunkPos[r],s=this.chunk[r];if(t>=n&&e<=n+s.length&&s.between(n,e-n,t-n,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return _i.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return _i.from(e).goto(t)}static compare(e,t,i,r,n=-1){let s=e.filter(h=>h.maxPoint>0||!h.isEmpty&&h.maxPoint>=n),a=t.filter(h=>h.maxPoint>0||!h.isEmpty&&h.maxPoint>=n),o=Zh(s,a,i),l=new QO(s,o,n),c=new QO(a,o,n);i.iterGaps((h,f,u)=>vh(l,h,c,f,u,r)),i.empty&&i.length==0&&vh(l,0,c,0,0,r)}static eq(e,t,i=0,r){r==null&&(r=999999999);let n=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),s=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(n.length!=s.length)return!1;if(!n.length)return!0;let a=Zh(n,s),o=new QO(n,a,0).goto(i),l=new QO(s,a,0).goto(i);for(;;){if(o.to!=l.to||!na(o.active,l.active)||o.point&&(!l.point||!oa(o.point,l.point)))return!1;if(o.to>r)return!0;o.next(),l.next()}}static spans(e,t,i,r,n=-1){let s=new QO(e,null,n).goto(t),a=t,o=s.openStart;for(;;){let l=Math.min(s.to,i);if(s.point){let c=s.activeForPoint(s.to),h=s.pointFrom<t?c.length+1:s.point.startSide<0?c.length:Math.min(c.length,o);r.point(a,l,s.point,c,h,s.pointRank),o=Math.min(s.openEnd(l),c.length)}else l>a&&(r.span(a,l,s.active,o),o=s.openEnd(l));if(s.to>i)return o+(s.point&&s.to>i?1:0);a=s.to,s.next()}}static of(e,t=!1){let i=new Le;for(let r of e instanceof Yi?[e]:t?Fg(e):e)i.add(r.from,r.to,r.value);return i.finish()}static join(e){if(!e.length)return O.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let r=e[i];r!=O.empty;r=r.nextLayer)t=new O(r.chunkPos,r.chunk,t,Math.max(r.maxPoint,t.maxPoint));return t}};M.empty=new M([],[],null,-1);function Fg(O){if(O.length>1)for(let e=O[0],t=1;t<O.length;t++){let i=O[t];if(ia(e,i)>0)return O.slice().sort(ia);e=i}return O}M.empty.nextLayer=M.empty;var Le=class O{finishChunk(e){this.chunks.push(new ra(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new O)).add(e,t,i)}addInner(e,t,i){let r=e-this.lastTo||i.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(M.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=M.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function Zh(O,e,t){let i=new Map;for(let n of O)for(let s=0;s<n.chunk.length;s++)n.chunk[s].maxPoint<=0&&i.set(n.chunk[s],n.chunkPos[s]);let r=new Set;for(let n of e)for(let s=0;s<n.chunk.length;s++){let a=i.get(n.chunk[s]);a!=null&&(t?t.mapPos(a):a)==n.chunkPos[s]&&!t?.touchesRange(a,a+n.chunk[s].length)&&r.add(n.chunk[s])}return r}var Hr=class{constructor(e,t,i,r=0){this.layer=e,this.skip=t,this.minPoint=i,this.rank=r}get startSide(){return this.value?this.value.startSide:0}get endSide(){return this.value?this.value.endSide:0}goto(e,t=-1e9){return this.chunkIndex=this.rangeIndex=0,this.gotoInner(e,t,!1),this}gotoInner(e,t,i){for(;this.chunkIndex<this.layer.chunk.length;){let r=this.layer.chunk[this.chunkIndex];if(!(this.skip&&this.skip.has(r)||this.layer.chunkEnd(this.chunkIndex)<e||r.maxPoint<this.minPoint))break;this.chunkIndex++,i=!1}if(this.chunkIndex<this.layer.chunk.length){let r=this.layer.chunk[this.chunkIndex].findIndex(e-this.layer.chunkPos[this.chunkIndex],t,!0);(!i||this.rangeIndex<r)&&this.setRangeIndex(r)}this.next()}forward(e,t){(this.to-e||this.endSide-t)<0&&this.gotoInner(e,t,!0)}next(){for(;;)if(this.chunkIndex==this.layer.chunk.length){this.from=this.to=1e9,this.value=null;break}else{let e=this.layer.chunkPos[this.chunkIndex],t=this.layer.chunk[this.chunkIndex],i=e+t.from[this.rangeIndex];if(this.from=i,this.to=e+t.to[this.rangeIndex],this.value=t.value[this.rangeIndex],this.setRangeIndex(this.rangeIndex+1),this.minPoint<0||this.value.point&&this.to-this.from>=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex<this.layer.chunk.length&&this.skip.has(this.layer.chunk[this.chunkIndex]);)this.chunkIndex++;this.rangeIndex=0}else this.rangeIndex=e}nextChunk(){this.chunkIndex++,this.rangeIndex=0,this.next()}compare(e){return this.from-e.from||this.startSide-e.startSide||this.rank-e.rank||this.to-e.to||this.endSide-e.endSide}},_i=class O{constructor(e){this.heap=e}static from(e,t=null,i=-1){let r=[];for(let n=0;n<e.length;n++)for(let s=e[n];!s.isEmpty;s=s.nextLayer)s.maxPoint>=i&&r.push(new Hr(s,t,i,n));return r.length==1?r[0]:new O(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Ds(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Ds(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Ds(this.heap,0)}}};function Ds(O,e){for(let t=O[e];;){let i=(e<<1)+1;if(i>=O.length)break;let r=O[i];if(i+1<O.length&&r.compare(O[i+1])>=0&&(r=O[i+1],i++),t.compare(r)<0)break;O[i]=t,O[e]=r,e=i}}var QO=class{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=_i.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Ar(this.active,e),Ar(this.activeTo,e),Ar(this.activeRank,e),this.minActive=Yh(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:r,rank:n}=this.cursor;for(;t<this.activeRank.length&&(n-this.activeRank[t]||r-this.activeTo[t])>0;)t++;Lr(this.active,t,i),Lr(this.activeTo,t,r),Lr(this.activeRank,t,n),e&&Lr(e,t,this.cursor.from),this.minActive=Yh(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let r=this.minActive;if(r>-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),i&&Ar(i,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let n=this.cursor.value;if(!n.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from<this.cursor.to)this.cursor.next();else{this.point=n,this.pointFrom=this.cursor.from,this.pointRank=this.cursor.rank,this.to=this.cursor.to,this.endSide=n.endSide,this.cursor.next(),this.forward(this.to,this.endSide);break}}else{this.to=this.endSide=1e9;break}}if(i){this.openStart=0;for(let r=i.length-1;r>=0&&i[r]<e;r--)this.openStart++}}activeForPoint(e){if(!this.active.length)return this.active;let t=[];for(let i=this.active.length-1;i>=0&&!(this.activeRank[i]<this.pointRank);i--)(this.activeTo[i]>e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}};function vh(O,e,t,i,r,n){O.goto(e),t.goto(i);let s=i+r,a=i,o=i-e,l=!!n.boundChange;for(let c=!1;;){let h=O.to+o-t.to,f=h||O.endSide-t.endSide,u=f<0?O.to+o:t.to,Q=Math.min(u,s);if(O.point||t.point?(O.point&&t.point&&oa(O.point,t.point)&&na(O.activeForPoint(O.to),t.activeForPoint(t.to))||n.comparePoint(a,Q,O.point,t.point),c=!1):(c&&n.boundChange(a),Q>a&&!na(O.active,t.active)&&n.compareRange(a,Q,O.active,t.active),l&&Q<s&&(h||O.openEnd(u)!=t.openEnd(u))&&(c=!0)),u>s)break;a=u,f<=0&&O.next(),f>=0&&t.next()}}function na(O,e){if(O.length!=e.length)return!1;for(let t=0;t<O.length;t++)if(O[t]!=e[t]&&!oa(O[t],e[t]))return!1;return!0}function Ar(O,e){for(let t=e,i=O.length-1;t<i;t++)O[t]=O[t+1];O.pop()}function Lr(O,e,t){for(let i=O.length-1;i>=e;i--)O[i+1]=O[i];O[e]=t}function Yh(O,e){let t=-1,i=1e9;for(let r=0;r<e.length;r++)(e[r]-i||O[r].endSide-O[t].endSide)<0&&(t=r,i=e[r]);return t}function ve(O,e,t=O.length){let i=0;for(let r=0;r<t&&r<O.length;)O.charCodeAt(r)==9?(i+=e-i%e,r++):(i++,r=fe(O,r));return i}function Kr(O,e,t,i){for(let r=0,n=0;;){if(n>=e)return r;if(r==O.length)break;n+=O.charCodeAt(r)==9?t-n%t:1,r=fe(O,r)}return i===!0?-1:O.length}var Eh=typeof Symbol>\"u\"?\"__\\u037C\":Symbol.for(\"\\u037C\"),la=typeof Symbol>\"u\"?\"__styleSet\"+Math.floor(Math.random()*1e8):Symbol(\"styleSet\"),Ah=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:{},Ot=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function r(s){return/^@/.test(s)?[s]:s.split(/,\\s*/)}function n(s,a,o,l){let c=[],h=/^@(\\w+)\\b/.exec(s[0]),f=h&&h[1]==\"keyframes\";if(h&&a==null)return o.push(s[0]+\";\");for(let u in a){let Q=a[u];if(/&/.test(u))n(u.split(/,\\s*/).map($=>s.map(p=>$.replace(/&/,p))).reduce(($,p)=>$.concat(p)),Q,o);else if(Q&&typeof Q==\"object\"){if(!h)throw new RangeError(\"The value of a property (\"+u+\") should be a primitive value.\");n(r(u),Q,c,f)}else Q!=null&&c.push(u.replace(/_.*/,\"\").replace(/[A-Z]/g,$=>\"-\"+$.toLowerCase())+\": \"+Q+\";\")}(c.length||f)&&o.push((i&&!h&&!l?s.map(i):s).join(\", \")+\" {\"+c.join(\" \")+\"}\")}for(let s in e)n(r(s),e[s],this.rules)}getRules(){return this.rules.join(`\n`)}static newName(){let e=Ah[Eh]||1;return Ah[Eh]=e+1,\"\\u037C\"+e.toString(36)}static mount(e,t,i){let r=e[la],n=i&&i.nonce;r?n&&r.setNonce(n):r=new ca(e,n),r.mount(Array.isArray(t)?t:[t],e)}},Lh=new Map,ca=class{constructor(e,t){let i=e.ownerDocument||e,r=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&r.CSSStyleSheet){let n=Lh.get(i);if(n)return e[la]=n;this.sheet=new r.CSSStyleSheet,Lh.set(i,this)}else this.styleTag=i.createElement(\"style\"),t&&this.styleTag.setAttribute(\"nonce\",t);this.modules=[],e[la]=this}mount(e,t){let i=this.sheet,r=0,n=0;for(let s=0;s<e.length;s++){let a=e[s],o=this.modules.indexOf(a);if(o<n&&o>-1&&(this.modules.splice(o,1),n--,o=-1),o==-1){if(this.modules.splice(n++,0,a),i)for(let l=0;l<a.rules.length;l++)i.insertRule(a.rules[l],r++)}else{for(;n<o;)r+=this.modules[n++].rules.length;r+=a.rules.length,n++}}if(i)t.adoptedStyleSheets.indexOf(this.sheet)<0&&(t.adoptedStyleSheets=[this.sheet,...t.adoptedStyleSheets]);else{let s=\"\";for(let o=0;o<this.modules.length;o++)s+=this.modules[o].getRules()+`\n`;this.styleTag.textContent=s;let a=t.head||t;this.styleTag.parentNode!=a&&a.insertBefore(this.styleTag,a.firstChild)}}setNonce(e){this.styleTag&&this.styleTag.getAttribute(\"nonce\")!=e&&this.styleTag.setAttribute(\"nonce\",e)}};var Yt={8:\"Backspace\",9:\"Tab\",10:\"Enter\",12:\"NumLock\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",44:\"PrintScreen\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Meta\",92:\"Meta\",106:\"*\",107:\"+\",108:\",\",109:\"-\",110:\".\",111:\"/\",144:\"NumLock\",145:\"ScrollLock\",160:\"Shift\",161:\"Shift\",162:\"Control\",163:\"Control\",164:\"Alt\",165:\"Alt\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"},HO={48:\")\",49:\"!\",50:\"@\",51:\"#\",52:\"$\",53:\"%\",54:\"^\",55:\"&\",56:\"*\",57:\"(\",59:\":\",61:\"+\",173:\"_\",186:\":\",187:\"+\",188:\"<\",189:\"_\",190:\">\",191:\"?\",192:\"~\",219:\"{\",220:\"|\",221:\"}\",222:'\"'},Hg=typeof navigator<\"u\"&&/Mac/.test(navigator.platform),Kg=typeof navigator<\"u\"&&/MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);for($e=0;$e<10;$e++)Yt[48+$e]=Yt[96+$e]=String($e);var $e;for($e=1;$e<=24;$e++)Yt[$e+111]=\"F\"+$e;var $e;for($e=65;$e<=90;$e++)Yt[$e]=String.fromCharCode($e+32),HO[$e]=String.fromCharCode($e);var $e;for(Jr in Yt)HO.hasOwnProperty(Jr)||(HO[Jr]=Yt[Jr]);var Jr;function Mh(O){var e=Hg&&O.metaKey&&O.shiftKey&&!O.ctrlKey&&!O.altKey||Kg&&O.shiftKey&&O.key&&O.key.length==1||O.key==\"Unidentified\",t=!e&&O.key||(O.shiftKey?HO:Yt)[O.keyCode]||O.key||\"Unidentified\";return t==\"Esc\"&&(t=\"Escape\"),t==\"Del\"&&(t=\"Delete\"),t==\"Left\"&&(t=\"ArrowLeft\"),t==\"Up\"&&(t=\"ArrowUp\"),t==\"Right\"&&(t=\"ArrowRight\"),t==\"Down\"&&(t=\"ArrowDown\"),t}function N(){var O=arguments[0];typeof O==\"string\"&&(O=document.createElement(O));var e=1,t=arguments[1];if(t&&typeof t==\"object\"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var r=t[i];typeof r==\"string\"?O.setAttribute(i,r):r!=null&&(O[i]=r)}e++}for(;e<arguments.length;e++)Dh(O,arguments[e]);return O}function Dh(O,e){if(typeof e==\"string\")O.appendChild(document.createTextNode(e));else if(e!=null)if(e.nodeType!=null)O.appendChild(e);else if(Array.isArray(e))for(var t=0;t<e.length;t++)Dh(O,e[t]);else throw new RangeError(\"Unsupported child node: \"+e)}var Ye=typeof navigator<\"u\"?navigator:{userAgent:\"\",vendor:\"\",platform:\"\"},ga=typeof document<\"u\"?document:{documentElement:{style:{}}},Pa=/Edge\\/(\\d+)/.exec(Ye.userAgent),_f=/MSIE \\d/.test(Ye.userAgent),Sa=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(Ye.userAgent),Rn=!!(_f||Sa||Pa),Ih=!Rn&&/gecko\\/(\\d+)/i.test(Ye.userAgent),ha=!Rn&&/Chrome\\/(\\d+)/.exec(Ye.userAgent),Bh=\"webkitFontSmoothing\"in ga.documentElement.style,Xa=!Rn&&/Apple Computer/.test(Ye.vendor),Nh=Xa&&(/Mobile\\/\\w+/.test(Ye.userAgent)||Ye.maxTouchPoints>2),v={mac:Nh||/Mac/.test(Ye.platform),windows:/Win/.test(Ye.platform),linux:/Linux|X11/.test(Ye.platform),ie:Rn,ie_version:_f?ga.documentMode||6:Sa?+Sa[1]:Pa?+Pa[1]:0,gecko:Ih,gecko_version:Ih?+(/Firefox\\/(\\d+)/.exec(Ye.userAgent)||[0,0])[1]:0,chrome:!!ha,chrome_version:ha?+ha[1]:0,ios:Nh,android:/Android\\b/.test(Ye.userAgent),webkit:Bh,webkit_version:Bh?+(/\\bAppleWebKit\\/(\\d+)/.exec(Ye.userAgent)||[0,0])[1]:0,safari:Xa,safari_version:Xa?+(/\\bVersion\\/(\\d+(\\.\\d+)?)/.exec(Ye.userAgent)||[0,0])[1]:0,tabSize:ga.documentElement.style.tabSize!=null?\"tab-size\":\"-moz-tab-size\"};function uo(O,e){for(let t in O)t==\"class\"&&e.class?e.class+=\" \"+O.class:t==\"style\"&&e.style?e.style+=\";\"+O.style:e[t]=O[t];return e}var $n=Object.create(null);function Qo(O,e,t){if(O==e)return!0;O||(O=$n),e||(e=$n);let i=Object.keys(O),r=Object.keys(e);if(i.length-(t&&i.indexOf(t)>-1?1:0)!=r.length-(t&&r.indexOf(t)>-1?1:0))return!1;for(let n of i)if(n!=t&&(r.indexOf(n)==-1||O[n]!==e[n]))return!1;return!0}function Jg(O,e){for(let t=O.attributes.length-1;t>=0;t--){let i=O.attributes[t].name;e[i]==null&&O.removeAttribute(i)}for(let t in e){let i=e[t];t==\"style\"?O.style.cssText=i:O.getAttribute(t)!=i&&O.setAttribute(t,i)}}function Fh(O,e,t){let i=!1;if(e)for(let r in e)t&&r in t||(i=!0,r==\"style\"?O.style.cssText=\"\":O.removeAttribute(r));if(t)for(let r in t)e&&e[r]==t[r]||(i=!0,r==\"style\"?O.style.cssText=t[r]:O.setAttribute(r,t[r]));return i}function eP(O){let e=Object.create(null);for(let t=0;t<O.attributes.length;t++){let i=O.attributes[t];e[i.name]=i.value}return e}var _e=class{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}get lineBreaks(){return 0}ignoreEvent(e){return!0}coordsAt(e,t,i){return null}get isHidden(){return!1}get editable(){return!1}destroy(e){}},Te=(function(O){return O[O.Text=0]=\"Text\",O[O.WidgetBefore=1]=\"WidgetBefore\",O[O.WidgetAfter=2]=\"WidgetAfter\",O[O.WidgetRange=3]=\"WidgetRange\",O})(Te||(Te={})),Y=class extends tt{constructor(e,t,i,r){super(),this.startSide=e,this.endSide=t,this.widget=i,this.spec=r}get heightRelevant(){return!1}static mark(e){return new Di(e)}static widget(e){let t=Math.max(-1e4,Math.min(1e4,e.side||0)),i=!!e.block;return t+=i&&!e.inlineOrder?t>0?3e8:-4e8:t>0?1e8:-1e8,new PO(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,r;if(e.isBlockGap)i=-5e8,r=4e8;else{let{start:n,end:s}=Rf(e,t);i=(n?t?-3e8:-1:5e8)-1,r=(s?t?2e8:1:-6e8)+1}return new PO(e,i,r,t,e.widget||null,!0)}static line(e){return new Ii(e)}static set(e,t=!1){return M.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};Y.none=M.empty;var Di=class O extends Y{constructor(e){let{start:t,end:i}=Rf(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||\"span\",this.attrs=e.class&&e.attributes?uo(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||$n}eq(e){return this==e||e instanceof O&&this.tagName==e.tagName&&Qo(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError(\"Mark decorations may not be empty\");return super.range(e,t)}};Di.prototype.point=!1;var Ii=class O extends Y{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof O&&this.spec.class==e.spec.class&&Qo(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError(\"Line decoration ranges must be zero-length\");return super.range(e,t)}};Ii.prototype.mapMode=pe.TrackBefore;Ii.prototype.point=!0;var PO=class O extends Y{constructor(e,t,i,r,n,s){super(t,i,n,e),this.block=r,this.isReplace=s,this.mapMode=r?t<=0?pe.TrackBefore:pe.TrackAfter:pe.TrackDel}get type(){return this.startSide!=this.endSide?Te.WidgetRange:this.startSide<=0?Te.WidgetBefore:Te.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof O&&tP(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError(\"Invalid range for replacement decoration\");if(!this.isReplace&&t!=e)throw new RangeError(\"Widget decorations can only have zero-length ranges\");return super.range(e,t)}};PO.prototype.point=!0;function Rf(O,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=O;return t==null&&(t=O.inclusive),i==null&&(i=O.inclusive),{start:t??e,end:i??e}}function tP(O,e){return O==e||!!(O&&e&&O.compare(e))}function Oi(O,e,t,i=0){let r=t.length-1;r>=0&&t[r]+i>=O?t[r]=Math.max(t[r],e):t.push(O,e)}var pn=class O extends tt{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof O&&this.tagName==e.tagName&&Qo(this.attributes,e.attributes)}static create(e){return new O(e.tagName,e.attributes||$n)}static set(e,t=!1){return M.of(e,t)}};pn.prototype.startSide=pn.prototype.endSide=-1;function Bi(O){let e;return O.nodeType==11?e=O.getSelection?O:O.ownerDocument:e=O,e.getSelection()}function Ta(O,e){return e?O==e||O.contains(e.nodeType!=1?e.parentNode:e):!1}function cn(O,e){if(!e.anchorNode)return!1;try{return Ta(O,e.anchorNode)}catch{return!1}}function hn(O){return O.nodeType==3?Ni(O,0,O.nodeValue.length).getClientRects():O.nodeType==1?O.getClientRects():[]}function Wi(O,e,t,i){return t?Hh(O,e,t,i,-1)||Hh(O,e,t,i,1):!1}function Nt(O){for(var e=0;;e++)if(O=O.previousSibling,!O)return e}function mn(O){return O.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(O.nodeName)}function Hh(O,e,t,i,r){for(;;){if(O==t&&e==i)return!0;if(e==(r<0?0:Rt(O))){if(O.nodeName==\"DIV\")return!1;let n=O.parentNode;if(!n||n.nodeType!=1)return!1;e=Nt(O)+(r<0?0:1),O=n}else if(O.nodeType==1){if(O=O.childNodes[e+(r<0?-1:0)],O.nodeType==1&&O.contentEditable==\"false\")return!1;e=r<0?Rt(O):0}else return!1}}function Rt(O){return O.nodeType==3?O.nodeValue.length:O.childNodes.length}function gn(O,e){let t=e?O.left:O.right;return{left:t,right:t,top:O.top,bottom:O.bottom}}function OP(O){let e=O.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:O.innerWidth,top:0,bottom:O.innerHeight}}function Vf(O,e){let t=e.width/O.offsetWidth,i=e.height/O.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-O.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-O.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function iP(O,e,t,i,r,n,s,a){let o=O.ownerDocument,l=o.defaultView||window;for(let c=O,h=!1;c&&!h;)if(c.nodeType==1){let f,u=c==o.body,Q=1,$=1;if(u)f=OP(l);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(h=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let g=c.getBoundingClientRect();({scaleX:Q,scaleY:$}=Vf(c,g)),f={left:g.left,right:g.left+c.clientWidth*Q,top:g.top,bottom:g.top+c.clientHeight*$}}let p=0,m=0;if(r==\"nearest\")e.top<f.top?(m=e.top-(f.top+s),t>0&&e.bottom>f.bottom+m&&(m=e.bottom-f.bottom+s)):e.bottom>f.bottom&&(m=e.bottom-f.bottom+s,t<0&&e.top-m<f.top&&(m=e.top-(f.top+s)));else{let g=e.bottom-e.top,P=f.bottom-f.top;m=(r==\"center\"&&g<=P?e.top+g/2-P/2:r==\"start\"||r==\"center\"&&t<0?e.top-s:e.bottom-P+s)-f.top}if(i==\"nearest\"?e.left<f.left?(p=e.left-(f.left+n),t>0&&e.right>f.right+p&&(p=e.right-f.right+n)):e.right>f.right&&(p=e.right-f.right+n,t<0&&e.left<f.left+p&&(p=e.left-(f.left+n))):p=(i==\"center\"?e.left+(e.right-e.left)/2-(f.right-f.left)/2:i==\"start\"==a?e.left-n:e.right-(f.right-f.left)+n)-f.left,p||m)if(u)l.scrollBy(p,m);else{let g=0,P=0;if(m){let y=c.scrollTop;c.scrollTop+=m/$,P=(c.scrollTop-y)*$}if(p){let y=c.scrollLeft;c.scrollLeft+=p/Q,g=(c.scrollLeft-y)*Q}e={left:e.left-g,top:e.top-P,right:e.right-g,bottom:e.bottom-P},g&&Math.abs(g-p)<1&&(i=\"nearest\"),P&&Math.abs(P-m)<1&&(r=\"nearest\")}if(u)break;(e.top<f.top||e.bottom>f.bottom||e.left<f.left||e.right>f.right)&&(e={left:Math.max(e.left,f.left),right:Math.min(e.right,f.right),top:Math.max(e.top,f.top),bottom:Math.min(e.bottom,f.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function rP(O){let e=O.ownerDocument,t,i;for(let r=O.parentNode;r&&!(r==e.body||t&&i);)if(r.nodeType==1)!i&&r.scrollHeight>r.clientHeight&&(i=r),!t&&r.scrollWidth>r.clientWidth&&(t=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:t,y:i}}var ba=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?Rt(t):0),i,Math.min(e.focusOffset,i?Rt(i):0))}set(e,t,i,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=r}},mO=null;v.safari&&v.safari_version>=26&&(mO=!1);function qf(O){if(O.setActive)return O.setActive();if(mO)return O.focus(mO);let e=[];for(let t=O;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(O.focus(mO==null?{get preventScroll(){return mO={preventScroll:!0},!0}}:void 0),!mO){mO=!1;for(let t=0;t<e.length;){let i=e[t++],r=e[t++],n=e[t++];i.scrollTop!=r&&(i.scrollTop=r),i.scrollLeft!=n&&(i.scrollLeft=n)}}}var Kh;function Ni(O,e,t=e){let i=Kh||(Kh=document.createRange());return i.setEnd(O,t),i.setStart(O,e),i}function ii(O,e,t,i){let r={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:r.altKey,ctrlKey:r.ctrlKey,shiftKey:r.shiftKey,metaKey:r.metaKey}=i);let n=new KeyboardEvent(\"keydown\",r);n.synthetic=!0,O.dispatchEvent(n);let s=new KeyboardEvent(\"keyup\",r);return s.synthetic=!0,O.dispatchEvent(s),n.defaultPrevented||s.defaultPrevented}function nP(O){for(;O;){if(O&&(O.nodeType==9||O.nodeType==11&&O.host))return O;O=O.assignedSlot||O.parentNode}return null}function sP(O,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,Rt(t));;)if(i){if(t.nodeType!=1)return!1;let r=t.childNodes[i-1];r.contentEditable==\"false\"?i--:(t=r,i=Rt(t))}else{if(t==O)return!0;i=Nt(t),t=t.parentNode}}function zf(O){return O.scrollTop>Math.max(1,O.scrollHeight-O.clientHeight-4)}function Uf(O,e){for(let t=O,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable==\"false\")return null;t=t.childNodes[i-1],i=Rt(t)}else if(t.parentNode&&!mn(t))i=Nt(t),t=t.parentNode;else return null}}function Wf(O,e){for(let t=O,i=e;;){if(t.nodeType==3&&i<t.nodeValue.length)return{node:t,offset:i};if(t.nodeType==1&&i<t.childNodes.length){if(t.contentEditable==\"false\")return null;t=t.childNodes[i],i=0}else if(t.parentNode&&!mn(t))i=Nt(t)+1,t=t.parentNode;else return null}}var St=class O{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new O(e.parentNode,Nt(e),t)}static after(e,t){return new O(e.parentNode,Nt(e)+1,t)}},H=(function(O){return O[O.LTR=0]=\"LTR\",O[O.RTL=1]=\"RTL\",O})(H||(H={})),SO=H.LTR,$o=H.RTL;function jf(O){let e=[];for(let t=0;t<O.length;t++)e.push(1<<+O[t]);return e}var aP=jf(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\"),oP=jf(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\"),ya=Object.create(null),Pt=[];for(let O of[\"()\",\"[]\",\"{}\"]){let e=O.charCodeAt(0),t=O.charCodeAt(1);ya[e]=t,ya[t]=-e}function Cf(O){return O<=247?aP[O]:1424<=O&&O<=1524?2:1536<=O&&O<=1785?oP[O-1536]:1774<=O&&O<=2220?4:8192<=O&&O<=8204?256:64336<=O&&O<=65023?4:1}var lP=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/,ct=class{get dir(){return this.level%2?$o:SO}constructor(e,t,i){this.from=e,this.to=t,this.level=i}side(e,t){return this.dir==t==e?this.to:this.from}forward(e,t){return e==(this.dir==t)}static find(e,t,i,r){let n=-1;for(let s=0;s<e.length;s++){let a=e[s];if(a.from<=t&&a.to>=t){if(a.level==i)return s;(n<0||(r!=0?r<0?a.from<t:a.to>t:e[n].level>a.level))&&(n=s)}}if(n<0)throw new RangeError(\"Index out of range\");return n}};function Gf(O,e){if(O.length!=e.length)return!1;for(let t=0;t<O.length;t++){let i=O[t],r=e[t];if(i.from!=r.from||i.to!=r.to||i.direction!=r.direction||!Gf(i.inner,r.inner))return!1}return!0}var re=[];function cP(O,e,t,i,r){for(let n=0;n<=i.length;n++){let s=n?i[n-1].to:e,a=n<i.length?i[n].from:t,o=n?256:r;for(let l=s,c=o,h=o;l<a;l++){let f=Cf(O.charCodeAt(l));f==512?f=c:f==8&&h==4&&(f=16),re[l]=f==4?2:f,f&7&&(h=f),c=f}for(let l=s,c=o,h=o;l<a;l++){let f=re[l];if(f==128)l<a-1&&c==re[l+1]&&c&24?f=re[l]=c:re[l]=256;else if(f==64){let u=l+1;for(;u<a&&re[u]==64;)u++;let Q=l&&c==8||u<t&&re[u]==8?h==1?1:8:256;for(let $=l;$<u;$++)re[$]=Q;l=u-1}else f==8&&h==1&&(re[l]=1);c=f,f&7&&(h=f)}}}function hP(O,e,t,i,r){let n=r==1?2:1;for(let s=0,a=0,o=0;s<=i.length;s++){let l=s?i[s-1].to:e,c=s<i.length?i[s].from:t;for(let h=l,f,u,Q;h<c;h++)if(u=ya[f=O.charCodeAt(h)])if(u<0){for(let $=a-3;$>=0;$-=3)if(Pt[$+1]==-u){let p=Pt[$+2],m=p&2?r:p&4?p&1?n:r:0;m&&(re[h]=re[Pt[$]]=m),a=$;break}}else{if(Pt.length==189)break;Pt[a++]=h,Pt[a++]=f,Pt[a++]=o}else if((Q=re[h])==2||Q==1){let $=Q==r;o=$?0:1;for(let p=a-3;p>=0;p-=3){let m=Pt[p+2];if(m&2)break;if($)Pt[p+2]|=2;else{if(m&4)break;Pt[p+2]|=4}}}}}function fP(O,e,t,i){for(let r=0,n=i;r<=t.length;r++){let s=r?t[r-1].to:O,a=r<t.length?t[r].from:e;for(let o=s;o<a;){let l=re[o];if(l==256){let c=o+1;for(;;)if(c==a){if(r==t.length)break;c=t[r++].to,a=r<t.length?t[r].from:e}else if(re[c]==256)c++;else break;let h=n==1,f=(c<e?re[c]:i)==1,u=h==f?h?1:2:i;for(let Q=c,$=r,p=$?t[$-1].to:O;Q>o;)Q==p&&(Q=t[--$].from,p=$?t[$-1].to:O),re[--Q]=u;o=c}else n=l,o++}}}function xa(O,e,t,i,r,n,s){let a=i%2?2:1;if(i%2==r%2)for(let o=e,l=0;o<t;){let c=!0,h=!1;if(l==n.length||o<n[l].from){let $=re[o];$!=a&&(c=!1,h=$==16)}let f=!c&&a==1?[]:null,u=c?i:i+1,Q=o;e:for(;;)if(l<n.length&&Q==n[l].from){if(h)break e;let $=n[l];if(!c)for(let p=$.to,m=l+1;;){if(p==t)break e;if(m<n.length&&n[m].from==p)p=n[m++].to;else{if(re[p]==a)break e;break}}if(l++,f)f.push($);else{$.from>o&&s.push(new ct(o,$.from,u));let p=$.direction==SO!=!(u%2);ka(O,p?i+1:i,r,$.inner,$.from,$.to,s),o=$.to}Q=$.to}else{if(Q==t||(c?re[Q]!=a:re[Q]==a))break;Q++}f?xa(O,o,Q,i+1,r,f,s):o<Q&&s.push(new ct(o,Q,u)),o=Q}else for(let o=t,l=n.length;o>e;){let c=!0,h=!1;if(!l||o>n[l-1].to){let $=re[o-1];$!=a&&(c=!1,h=$==16)}let f=!c&&a==1?[]:null,u=c?i:i+1,Q=o;e:for(;;)if(l&&Q==n[l-1].to){if(h)break e;let $=n[--l];if(!c)for(let p=$.from,m=l;;){if(p==e)break e;if(m&&n[m-1].to==p)p=n[--m].from;else{if(re[p-1]==a)break e;break}}if(f)f.push($);else{$.to<o&&s.push(new ct($.to,o,u));let p=$.direction==SO!=!(u%2);ka(O,p?i+1:i,r,$.inner,$.from,$.to,s),o=$.from}Q=$.from}else{if(Q==e||(c?re[Q-1]!=a:re[Q-1]==a))break;Q--}f?xa(O,Q,o,i+1,r,f,s):Q<o&&s.push(new ct(Q,o,u)),o=Q}}function ka(O,e,t,i,r,n,s){let a=e%2?2:1;cP(O,r,n,i,a),hP(O,r,n,i,a),fP(r,n,i,a),xa(O,r,n,e,t,i,s)}function dP(O,e,t){if(!O)return[new ct(0,0,e==$o?1:0)];if(e==SO&&!t.length&&!lP.test(O))return Ef(O.length);if(t.length)for(;O.length>re.length;)re[re.length]=256;let i=[],r=e==SO?0:1;return ka(O,r,r,t,0,O.length,i),i}function Ef(O){return[new ct(0,O,0)]}var Af=\"\";function uP(O,e,t,i,r){var n;let s=i.head-O.from,a=ct.find(e,s,(n=i.bidiLevel)!==null&&n!==void 0?n:-1,i.assoc),o=e[a],l=o.side(r,t);if(s==l){let f=a+=r?1:-1;if(f<0||f>=e.length)return null;o=e[a=f],s=o.side(!r,t),l=o.side(r,t)}let c=fe(O.text,s,o.forward(r,t));(c<o.from||c>o.to)&&(c=l),Af=O.text.slice(Math.min(s,c),Math.max(s,c));let h=a==(r?e.length-1:0)?null:e[a+(r?1:-1)];return h&&c==l&&h.level+(r?0:1)<o.level?S.cursor(h.side(!r,t)+O.from,h.forward(r,t)?1:-1,h.level):S.cursor(c+O.from,o.forward(r,t)?-1:1,o.level)}function QP(O,e,t){for(let i=e;i<t;i++){let r=Cf(O.charCodeAt(i));if(r==1)return SO;if(r==2||r==4)return $o}return SO}var Lf=Z.define(),Mf=Z.define(),Df=Z.define(),If=Z.define(),wa=Z.define(),Bf=Z.define(),Nf=Z.define(),po=Z.define(),mo=Z.define(),Ff=Z.define({combine:O=>O.some(e=>e)}),Hf=Z.define({combine:O=>O.some(e=>e)}),Kf=Z.define(),ji=class O{constructor(e,t=\"nearest\",i=\"nearest\",r=5,n=5,s=!1){this.range=e,this.y=t,this.x=i,this.yMargin=r,this.xMargin=n,this.isSnapshot=s}map(e){return e.empty?this:new O(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new O(S.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},en=V.define({map:(O,e)=>O.map(e)}),Jf=V.define();function Xe(O,e,t){let i=O.facet(If);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+\":\",e):console.error(e))}var _t=Z.define({combine:O=>O.length?O[0]:!0}),$P=0,KO=Z.define({combine(O){return O.filter((e,t)=>{for(let i=0;i<t;i++)if(O[i].plugin==e.plugin)return!1;return!0})}}),he=class O{constructor(e,t,i,r,n){this.id=e,this.create=t,this.domEventHandlers=i,this.domEventObservers=r,this.baseExtensions=n(this),this.extension=this.baseExtensions.concat(KO.of({plugin:this,arg:void 0}))}of(e){return this.baseExtensions.concat(KO.of({plugin:this,arg:e}))}static define(e,t){let{eventHandlers:i,eventObservers:r,provide:n,decorations:s}=t||{};return new O($P++,e,i,r,a=>{let o=[];return s&&o.push(Fi.of(l=>{let c=l.plugin(a);return c?s(c):Y.none})),n&&o.push(n(a)),o})}static fromClass(e,t){return O.define((i,r)=>new e(i,r),t)}},Ci=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(Xe(t.state,i,\"CodeMirror plugin crashed\"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){Xe(e.state,t,\"CodeMirror plugin crashed\"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){Xe(e.state,i,\"CodeMirror plugin crashed\")}}deactivate(){this.spec=this.value=null}},ed=Z.define(),go=Z.define(),Fi=Z.define(),td=Z.define(),Od=Z.define(),Ji=Z.define(),id=Z.define();function Jh(O,e){let t=O.state.facet(id);if(!t.length)return t;let i=t.map(n=>n instanceof Function?n(O):n),r=[];return M.spans(i,e.from,e.to,{point(){},span(n,s,a,o){let l=n-e.from,c=s-e.from,h=r;for(let f=a.length-1;f>=0;f--,o--){let u=a[f].spec.bidiIsolate,Q;if(u==null&&(u=QP(e.text,l,c)),o>0&&h.length&&(Q=h[h.length-1]).to==l&&Q.direction==u)Q.to=c,h=Q.inner;else{let $={from:l,to:c,direction:u,inner:[]};h.push($),h=$.inner}}}}),r}var rd=Z.define();function Po(O){let e=0,t=0,i=0,r=0;for(let n of O.state.facet(rd)){let s=n(O);s&&(s.left!=null&&(e=Math.max(e,s.left)),s.right!=null&&(t=Math.max(t,s.right)),s.top!=null&&(i=Math.max(i,s.top)),s.bottom!=null&&(r=Math.max(r,s.bottom)))}return{left:e,right:t,top:i,bottom:r}}var Vi=Z.define(),ht=class O{constructor(e,t,i,r){this.fromA=e,this.toA=t,this.fromB=i,this.toB=r}join(e){return new O(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>i.toA)){if(r.toA<i.fromA)break;i=i.join(r),e.splice(t-1,1)}}return e.splice(t,0,i),e}static extendWithRanges(e,t){if(t.length==0)return e;let i=[];for(let r=0,n=0,s=0;;){let a=r<e.length?e[r].fromB:1e9,o=n<t.length?t[n]:1e9,l=Math.min(a,o);if(l==1e9)break;let c=l+s,h=l,f=c;for(;;)if(n<t.length&&t[n]<=h){let u=t[n+1];n+=2,h=Math.max(h,u);for(let Q=r;Q<e.length&&e[Q].fromB<=h;Q++)s=e[Q].toA-e[Q].toB;f=Math.max(f,u+s)}else if(r<e.length&&e[r].fromB<=h){let u=e[r++];h=Math.max(h,u.toB),f=Math.max(f,u.toA),s=u.toA-u.toB}else break;i.push(new O(c,f,l,h))}return i}},Pn=class O{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=Ze.empty(this.startState.doc.length);for(let n of i)this.changes=this.changes.compose(n.changes);let r=[];this.changes.iterChangedRanges((n,s,a,o)=>r.push(new ht(n,s,a,o))),this.changedRanges=r}static create(e,t,i){return new O(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},pP=[],de=class{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return pP}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Jg(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:\"\")+(this.breakAfter?\"#\":\"\")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let r of this.children){if(r==e)return i;i+=r.length+r.breakAfter}throw new RangeError(\"Invalid child in posBefore\")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=Nt(this.dom),r=this.length?e>0:t>0;return new St(this.parent.dom,i+(r?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof ni)return e;return null}static get(e){return e.cmTile}},ri=class extends de{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,r,n=e?.node==t?e:null,s=0;for(let a of this.children){if(a.sync(e),s+=a.length+a.breakAfter,r=i?i.nextSibling:t.firstChild,n&&r!=a.dom&&(n.written=!0),a.dom.parentNode==t)for(;r&&r!=a.dom;)r=ef(r);else t.insertBefore(a.dom,r);i=a.dom}for(r=i?i.nextSibling:t.firstChild,n&&r&&(n.written=!0);r;)r=ef(r);this.length=s}};function ef(O){let e=O.nextSibling;return O.parentNode.removeChild(O),e}var ni=class extends ri{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=de.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,r=0,n=0;;)if(r==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&n++,r=t.pop()}else{let s=i.children[r++];if(s instanceof It)t.push(r),i=s,r=0;else{let a=n+s.length,o=e(s,n);if(o!==void 0)return o;n=a+s.breakAfter}}}resolveBlock(e,t){let i,r=-1,n,s=-1;if(this.blockTiles((a,o)=>{let l=o+a.length;if(e>=o&&e<=l){if(a.isWidget()&&t>=-1&&t<=1){if(a.flags&32)return!0;a.flags&16&&(i=void 0)}(o<e||e==l&&(t<-1?a.length:a.covers(1)))&&(!i||!a.isWidget()&&i.isWidget())&&(i=a,r=e-o),(l>e||e==o&&(t>1?a.length:a.covers(-1)))&&(!n||!a.isWidget()&&n.isWidget())&&(n=a,s=e-o)}}),!i&&!n)throw new Error(\"No tile at position \"+e);return i&&t<0||!n?{tile:i,offset:r}:{tile:n,offset:s}}},It=class O extends ri{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new O(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},si=class O extends ri{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let r=new O(t||document.createElement(\"div\"),e);return(!t||!i)&&(r.flags|=4),r}get domAttrs(){return this.attrs}resolveInline(e,t,i){let r=null,n=-1,s=null,a=-1;function o(c,h){for(let f=0,u=0;f<c.children.length&&u<=h;f++){let Q=c.children[f],$=u+Q.length;$>=h&&(Q.isComposite()?o(Q,h-u):(!s||s.isHidden&&(t>0||i&&gP(s,Q)))&&($>h||Q.flags&32)?(s=Q,a=h-u):(u<h||Q.flags&16&&!Q.isHidden)&&(r=Q,n=h-u)),u=$}}o(this,e);let l=(t<0?r:s)||r||s;return l?{tile:l,offset:l==r?n:a}:null}coordsIn(e,t){let i=this.resolveInline(e,t,!0);return i?i.tile.coordsIn(Math.max(0,i.offset),t):mP(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:r,offset:n}=i;if(this.dom.contains(r.dom))return r.isText()?new St(r.dom,Math.min(r.dom.nodeValue.length,n)):r.domPosFor(n,r.flags&16?1:r.flags&32?-1:t);let s=i.tile.parent,a=!1;for(let o of s.children){if(a)return new St(o.dom,0);o==i.tile&&(a=!0)}}return new St(this.dom,0)}};function mP(O){let e=O.dom.lastChild;if(!e)return O.dom.getBoundingClientRect();let t=hn(e);return t[t.length-1]||null}function gP(O,e){let t=O.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.top<t.bottom}var Ue=class O extends ri{constructor(e,t){super(e),this.mark=t}get domAttrs(){return this.mark.attrs}static of(e,t){let i=new O(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}},gO=class O extends de{constructor(e,t){super(e,t.length),this.text=t}sync(e){this.flags&2||(super.sync(e),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text))}isText(){return!0}toString(){return JSON.stringify(this.text)}coordsIn(e,t){let i=this.dom.nodeValue.length;e>i&&(e=i);let r=e,n=e,s=0;e==0&&t<0||e==i&&t>=0?v.chrome||v.gecko||(e?(r--,s=1):n<i&&(n++,s=-1)):t<0?r--:n<i&&n++;let a=Ni(this.dom,r,n).getClientRects();if(!a.length)return null;let o=a[(s?s<0:t>=0)?0:a.length-1];return v.safari&&!s&&o.width==0&&(o=Array.prototype.find.call(a,l=>l.width)||o),s?gn(o,s<0):o||null}static of(e,t){let i=new O(t||document.createTextNode(e),e);return t||(i.flags|=2),i}},XO=class O extends de{constructor(e,t,i,r){super(e,t,r),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let r=this.widget.coordsAt(this.dom,e,t);if(r)return r;if(i)return gn(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let n=this.dom.getClientRects(),s=null;if(!n.length)return null;let a=this.flags&16?!0:this.flags&32?!1:e>0;for(let o=a?n.length-1:0;s=n[o],!(e>0?o==0:o==n.length-1||s.top<s.bottom);o+=a?-1:1);return gn(s,!a)}}get overrideDOMText(){if(!this.length)return E.empty;let{root:e}=this;if(!e)return E.empty;let t=this.posAtStart;return e.view.state.doc.slice(t,t+this.length)}destroy(){super.destroy(),this.widget.destroy(this.dom)}static of(e,t,i,r,n){return n||(n=e.toDOM(t),e.editable||(n.contentEditable=\"false\")),new O(n,i,e,r)}},ai=class extends de{constructor(e){let t=document.createElement(\"img\");t.className=\"cm-widgetBuffer\",t.setAttribute(\"aria-hidden\",\"true\"),super(t,0,e)}get isHidden(){return!0}get overrideDOMText(){return E.empty}coordsIn(e){return this.dom.getBoundingClientRect()}},Za=class{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:r,index:n,beforeBreak:s,parents:a}=this;for(;e||t>0;)if(r.isComposite())if(s){if(!e)break;i&&i.break(),e--,s=!1}else if(n==r.children.length){if(!e&&!a.length)break;i&&i.leave(r),s=!!r.breakAfter,{tile:r,index:n}=a.pop(),n++}else{let o=r.children[n],l=o.breakAfter;(t>0?o.length<=e:o.length<e)&&(!i||i.skip(o,0,o.length)!==!1||!o.isComposite)?(s=!!l,n++,e-=o.length):(a.push({tile:r,index:n}),r=o,n=0,i&&o.isComposite()&&i.enter(o))}else if(n==r.length)s=!!r.breakAfter,{tile:r,index:n}=a.pop(),n++;else if(e){let o=Math.min(e,r.length-n);i&&i.skip(r,n,n+o),e-=o,n+=o}else break;return this.tile=r,this.index=n,this.beforeBreak=s,this}get root(){return this.parents.length?this.parents[0].tile:this.tile}},va=class{constructor(e,t,i,r){this.from=e,this.to=t,this.wrapper=i,this.rank=r}},Ya=class{constructor(e,t,i){this.cache=e,this.root=t,this.blockWrappers=i,this.curLine=null,this.lastBlock=null,this.afterWidget=null,this.pos=0,this.wrappers=[],this.wrapperPos=0}addText(e,t,i,r){var n;this.flushBuffer();let s=this.ensureMarks(t,i),a=s.lastChild;if(a&&a.isText()&&!(a.flags&8)){this.cache.reused.set(a,2);let o=s.children[s.children.length-1]=new gO(a.dom,a.text+e);o.parent=s}else s.append(r||gO.of(e,(n=this.cache.find(gO))===null||n===void 0?void 0:n.dom));this.pos+=e.length,this.afterWidget=null}addComposition(e,t){let i=this.curLine;i.dom!=t.line.dom&&(i.setDOM(this.cache.reused.has(t.line)?fa(t.line.dom):t.line.dom),this.cache.reused.set(t.line,2));let r=i;for(let a=t.marks.length-1;a>=0;a--){let o=t.marks[a],l=r.lastChild;if(l instanceof Ue&&l.mark.eq(o.mark))l.dom!=o.dom&&l.setDOM(fa(o.dom)),r=l;else{if(this.cache.reused.get(o)){let h=de.get(o.dom);h&&h.setDOM(fa(o.dom))}let c=Ue.of(o.mark,o.dom);r.append(c),r=c}this.cache.reused.set(o,2)}let n=de.get(e.text);n&&this.cache.reused.set(n,2);let s=new gO(e.text,e.text.nodeValue);s.flags|=8,r.append(s)}addInlineWidget(e,t,i){let r=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);r||this.flushBuffer();let n=this.ensureMarks(t,i);!r&&!(e.flags&16)&&n.append(this.getBuffer(1)),n.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=nd);let r=si.start(e,t||((i=this.cache.find(si))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=r)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let r=this.curLine;for(let n=e.length-1;n>=0;n--){let s=e[n],a;if(t>0&&(a=r.lastChild)&&a instanceof Ue&&a.mark.eq(s))r=a,t--;else{let o=Ue.of(s,(i=this.cache.find(Ue,l=>l.mark.eq(s)))===null||i===void 0?void 0:i.dom);r.append(o),r=o,t=0}}return r}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!tf(this.curLine,!1)||e.dom.nodeName!=\"BR\"&&e.isWidget()&&!(v.ios&&tf(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(da,0,32)||new XO(da.toDOM(),0,da,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to<this.pos&&this.wrappers.splice(e,1);for(let e=this.blockWrappers;e.value&&e.from<=this.pos;e.next())if(e.to>=this.pos){let t=new va(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let r=t.lastChild;if(i.from<this.pos&&r instanceof It&&r.wrapper.eq(i.wrapper))t=r;else{let n=It.of(i.wrapper,(e=this.cache.find(It,s=>s.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(n),t=n}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(ai,void 0,1);return i&&(i.flags=t),i||new ai(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},_a=class{constructor(e){this.skipCount=0,this.text=\"\",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text=\"\",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:r,lineBreak:n,done:s}=this.cursor.next(this.skipCount);if(this.skipCount=0,s)throw new Error(\"Ran out of text content when drawing inline views\");this.text=r;let a=this.textOff=Math.min(e,r.length);return n?null:r.slice(0,a)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}},Sn=[XO,si,gO,Ue,ai,It,ni];for(let O=0;O<Sn.length;O++)Sn[O].bucket=O;var Ra=class{constructor(e){this.view=e,this.buckets=Sn.map(()=>[]),this.index=Sn.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let r=e.bucket,n=this.buckets[r],s=this.index[r];for(let a=n.length-1;a>=0;a--){let o=(a+s)%n.length,l=n[o];if((!t||t(l))&&!this.reused.has(l))return n.splice(o,1),o<s&&this.index[r]--,this.reused.set(l,i),l}return null}findWidget(e,t,i){let r=this.buckets[0];if(r.length)for(let n=0,s=0;;n++){if(n==r.length){if(s)return null;s=1,n=0}let a=r[n];if(!this.reused.has(a)&&(s==0?a.widget.compare(e):a.widget.constructor==e.constructor&&e.updateDOM(a.dom,this.view)))return r.splice(n,1),n<this.index[0]&&this.index[0]--,a.length==t&&(a.flags&497)==i?(this.reused.set(a,1),a):(this.reused.set(a,2),new XO(a.dom,t,e,a.flags&-498|i))}}reuse(e){return this.reused.set(e,1),e}maybeReuse(e,t=2){if(!this.reused.has(e))return this.reused.set(e,t),e.dom}},Va=class{constructor(e,t,i,r,n){this.view=e,this.decorations=r,this.disallowBlockEffectsFor=n,this.openWidget=!1,this.openMarks=0,this.cache=new Ra(e),this.text=new _a(e.state.doc),this.builder=new Ya(this.cache,new ni(e,e.contentDOM),M.iter(i)),this.cache.reused.set(t,2),this.old=new Za(t),this.reuseWalker={skip:(s,a,o)=>{if(this.cache.add(s),s.isComposite())return!1},enter:s=>this.cache.add(s),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let r=0,n=0,s=0;;){let a=s<e.length?e[s++]:null,o=a?a.fromA:this.old.root.length;if(o>r){let l=o-r;this.preserve(l,!s,!a),r=o,n+=l}if(!a)break;this.forward(a.fromA,a.toA),t&&a.fromA<=t.range.fromA&&a.toA>=t.range.toA?(this.emit(n,t.range.fromB),this.builder.addComposition(t,i),this.text.skip(t.range.toB-t.range.fromB),this.emit(t.range.toB,a.toB)):this.emit(n,a.toB),n=a.toB,r=a.toA}return this.builder.curLine&&this.builder.endLine(),this.builder.root}preserve(e,t,i){let r=XP(this.old),n=this.openMarks;this.old.advance(e,i?1:-1,{skip:(s,a,o)=>{if(s.isWidget())if(this.openWidget)this.builder.continueWidget(o-a);else{let l=o>0||a<s.length?XO.of(s.widget,this.view,o-a,s.flags&496,this.cache.maybeReuse(s)):this.cache.reuse(s);l.flags&256?(l.flags&=-2,this.builder.addBlockWidget(l)):(this.builder.ensureLine(null),this.builder.addInlineWidget(l,r,n),n=r.length)}else if(s.isText())this.builder.ensureLine(null),!a&&o==s.length?this.builder.addText(s.text,r,n,this.cache.reuse(s)):(this.cache.add(s),this.builder.addText(s.text.slice(a,o),r,n)),n=r.length;else if(s.isLine())s.flags&=-2,this.cache.reused.set(s,1),this.builder.addLine(s);else if(s instanceof ai)this.cache.add(s);else if(s instanceof Ue)this.builder.ensureLine(null),this.builder.addMark(s,r,n),this.cache.reused.set(s,1),n=r.length;else return!1;this.openWidget=!1},enter:s=>{s.isLine()?this.builder.addLineStart(s.attrs,this.cache.maybeReuse(s)):(this.cache.add(s),s instanceof Ue&&r.unshift(s.mark)),this.openWidget=!1},leave:s=>{s.isLine()?r.length&&(r.length=n=0):s instanceof Ue&&(r.shift(),n=Math.min(n,r.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,r=this.builder,n=0,s=M.spans(this.decorations,e,t,{point:(a,o,l,c,h,f)=>{if(l instanceof PO){if(this.disallowBlockEffectsFor[f]){if(l.block)throw new RangeError(\"Block decorations may not be specified via plugins\");if(o>this.view.state.doc.lineAt(a).to)throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\")}if(n=c.length,h>c.length)r.continueWidget(o-a);else{let u=l.widget||(l.block?Ft.block:Ft.inline),Q=PP(l),$=this.cache.findWidget(u,o-a,Q)||XO.of(u,this.view,o-a,Q);l.block?(l.startSide>0&&r.addLineStartIfNotCovered(i),r.addBlockWidget($)):(r.ensureLine(i),r.addInlineWidget($,c,h))}i=null}else i=SP(i,l);o>a&&this.text.skip(o-a)},span:(a,o,l,c)=>{for(let h=a;h<o;){let f=this.text.next(Math.min(512,o-h));f==null?(r.addLineStartIfNotCovered(i),r.addBreak(),h++):(r.ensureLine(i),r.addText(f,l,c),h+=f.length),i=null}}});r.addLineStartIfNotCovered(i),this.openWidget=s>n,this.openMarks=s}forward(e,t){t-e<=10?this.old.advance(t-e,1,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,1,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let r=e.parentNode;;r=r.parentNode){let n=de.get(r);if(r==this.view.contentDOM)break;n instanceof Ue?t.push(n):n?.isLine()?i=n:r.nodeName==\"DIV\"&&!i&&r!=this.view.contentDOM?i=new si(r,nd):t.push(Ue.of(new Di({tagName:r.nodeName.toLowerCase(),attributes:eP(r)}),r))}return{line:i,marks:t}}};function tf(O,e){let t=i=>{for(let r of i.children)if((e?r.isText():r.length)||t(r))return!0;return!1};return t(O)}function PP(O){let e=O.isReplace?(O.startSide<0?64:0)|(O.endSide>0?128:0):O.startSide>0?32:16;return O.block&&(e|=256),e}var nd={class:\"cm-line\"};function SP(O,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(O||(O={class:\"cm-line\"}),t&&uo(t,O),i&&(O.class+=\" \"+i)),O}function XP(O){let e=[];for(let t=O.parents.length;t>1;t--){let i=t==O.parents.length?O.tile:O.parents[t].tile;i instanceof Ue&&e.push(i.mark)}return e}function fa(O){let e=de.get(O);return e&&e.setDOM(O.cloneNode()),O}var Ft=class extends _e{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}};Ft.inline=new Ft(\"span\");Ft.block=new Ft(\"div\");var da=new class extends _e{toDOM(){return document.createElement(\"br\")}get isHidden(){return!0}get editable(){return!0}},Xn=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=Y.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new ni(e,e.contentDOM),this.updateInner([new ht(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:h})=>h<this.minWidthFrom||c>this.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let r=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?r=this.domChanged.newSel.head:!vP(e.changes,this.hasComposition)&&!e.selectionSet&&(r=e.state.selection.main.head));let n=r>-1?bP(this.view,e.changes,r):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:h}=this.hasComposition;i=new ht(c,h,e.changes.mapPos(c,-1),e.changes.mapPos(h,1)).addToSet(i.slice())}this.hasComposition=n?{from:n.range.fromB,to:n.range.toB}:null,(v.ie||v.chrome)&&!n&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let s=this.decorations,a=this.blockWrappers;this.updateDeco();let o=kP(s,this.decorations,e.changes);o.length&&(i=ht.extendWithRanges(i,o));let l=wP(a,this.blockWrappers,e.changes);return l.length&&(i=ht.extendWithRanges(i,l)),n&&!i.some(c=>c.fromA<=n.range.fromA&&c.toA>=n.range.toA)&&(i=n.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,n),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let s=this.tile,a=new Va(this.view,s,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=a.run(e,t),qa(s,a.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+\"px\",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+\"px\":\"\";let n=v.chrome||v.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(n),n&&(n.written||i.selectionRange.focusNode!=n.node||!this.tile.dom.contains(n.node))&&(this.forceSelection=!0),this.tile.dom.style.height=\"\"});let r=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let n of this.tile.children)n.isWidget()&&n.widget instanceof Gi&&r.push(n.dom);i.updateGaps(r)}updateEditContextFormatting(e){this.editContextFormatting=this.editContextFormatting.map(e.changes);for(let t of e.transactions)for(let i of t.effects)i.is(Jf)&&(this.editContextFormatting=i.value)}updateSelection(e=!1,t=!1){(e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange();let{dom:i}=this.tile,r=this.view.root.activeElement,n=r==i,s=!n&&!(this.view.state.facet(_t)||i.tabIndex>-1)&&cn(i,this.view.observer.selectionRange)&&!(r&&i.contains(r));if(!(n||t||s))return;let a=this.forceSelection;this.forceSelection=!1;let o=this.view.state.selection.main,l,c;if(o.empty?c=l=this.inlineDOMNearPos(o.anchor,o.assoc||1):(c=this.inlineDOMNearPos(o.head,o.head==o.from?1:-1),l=this.inlineDOMNearPos(o.anchor,o.anchor==o.from?1:-1)),v.gecko&&o.empty&&!this.hasComposition&&TP(l)){let f=document.createTextNode(\"\");this.view.observer.ignore(()=>l.node.insertBefore(f,l.node.childNodes[l.offset]||null)),l=c=new St(f,0),a=!0}let h=this.view.observer.selectionRange;(a||!h.focusNode||(!Wi(l.node,l.offset,h.anchorNode,h.anchorOffset)||!Wi(c.node,c.offset,h.focusNode,h.focusOffset))&&!this.suppressWidgetCursorChange(h,o))&&(this.view.observer.ignore(()=>{v.android&&v.chrome&&i.contains(h.focusNode)&&ZP(h.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let f=Bi(this.view.root);if(f)if(o.empty){if(v.gecko){let u=yP(l.node,l.offset);if(u&&u!=3){let Q=(u==1?Uf:Wf)(l.node,l.offset);Q&&(l=new St(Q.node,Q.offset))}}f.collapse(l.node,l.offset),o.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=o.bidiLevel)}else if(f.extend){f.collapse(l.node,l.offset);try{f.extend(c.node,c.offset)}catch{}}else{let u=document.createRange();o.anchor>o.head&&([l,c]=[c,l]),u.setEnd(c.node,c.offset),u.setStart(l.node,l.offset),f.removeAllRanges(),f.addRange(u)}s&&this.view.root.activeElement==i&&(i.blur(),r&&r.focus())}),this.view.observer.setSelectionRange(l,c)),this.impreciseAnchor=l.precise?null:new St(h.anchorNode,h.anchorOffset),this.impreciseHead=c.precise?null:new St(h.focusNode,h.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Wi(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Bi(e.root),{anchorNode:r,anchorOffset:n}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let s=this.lineAt(t.head,t.assoc);if(!s)return;let a=s.posAtStart;if(t.head==a||t.head==a+s.length)return;let o=this.coordsAt(t.head,-1),l=this.coordsAt(t.head,1);if(!o||!l||o.bottom>l.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify(\"move\",t.assoc<0?\"forward\":\"backward\",\"lineboundary\"),e.observer.readSelectionRange();let h=e.observer.selectionRange;e.docView.posFromDOM(h.anchorNode,h.anchorOffset)!=t.from&&i.collapse(r,n)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let r=i.posAtStart;if(i.isComposite()){let n;if(e==i.dom)n=i.dom.childNodes[t];else{let s=Rt(e)==0?0:t==0?-1:1;for(;;){let a=e.parentNode;if(a==i.dom)break;s==0&&a.firstChild!=a.lastChild&&(e==a.firstChild?s=-1:s=1),e=a}s<0?n=e:n=e.nextSibling}if(n==i.dom.firstChild)return r;for(;n&&!de.get(n);)n=n.nextSibling;if(!n)return r+i.length;for(let s=0,a=r;;s++){let o=i.children[s];if(o.dom==n)return a;a+=o.length+o.breakAfter}}else return i.isText()?e==i.dom?r+t:r+(t?i.length:0):r}domAtPos(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(r,t)}inlineDOMNearPos(e,t){let i,r=-1,n=!1,s,a=-1,o=!1;return this.tile.blockTiles((l,c)=>{if(l.isWidget()){if(l.flags&32&&c>=e)return!0;l.flags&16&&(n=!0)}else{let h=c+l.length;if(c<=e&&(i=l,r=e-c,n=h<e),h>=e&&!s&&(s=l,a=e-c,o=c>e),c>e&&s)return!0}}),!i&&!s?this.domAtPos(e,t):(n&&s?i=null:o&&i&&(s=null),i&&t<0||!s?i.domIn(r,t):s.domIn(a,t))}coordsAt(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof Gi?null:i.coordsInWidget(r,t,!0):i.coordsIn(r,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function r(n,s){if(n.isComposite())for(let a of n.children){if(a.length>=s){let o=r(a,s);if(o)return o}if(s-=a.length,s<0)break}else if(n.isText()&&s<n.length){let a=fe(n.text,s);if(a==s)return null;let o=Ni(n.dom,s,a).getClientRects();for(let l=0;l<o.length;l++){let c=o[l];if(l==o.length-1||c.top<c.bottom&&c.left<c.right)return c}}return null}return r(t,i)}measureVisibleLineHeights(e){let t=[],{from:i,to:r}=e,n=this.view.contentDOM.clientWidth,s=n>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,a=-1,o=this.view.textDirection==H.LTR,l=0,c=(h,f,u)=>{for(let Q=0;Q<h.children.length&&!(f>r);Q++){let $=h.children[Q],p=f+$.length,m=$.dom.getBoundingClientRect(),{height:g}=m;if(u&&!Q&&(l+=m.top-u.top),$ instanceof It)p>i&&c($,f,m);else if(f>=i&&(l>0&&t.push(-l),t.push(g+l),l=0,s)){let P=$.dom.lastChild,y=P?hn(P):[];if(y.length){let X=y[y.length-1],x=o?X.right-m.left:m.right-X.left;x>a&&(a=x,this.minWidth=n,this.minWidthFrom=f,this.minWidthTo=p)}}u&&Q==h.children.length-1&&(l+=u.bottom-m.bottom),f=p+$.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction==\"rtl\"?H.RTL:H.LTR}measureTextSize(){let e=this.tile.blockTiles(s=>{if(s.isLine()&&s.children.length&&s.length<=20){let a=0,o;for(let l of s.children){if(!l.isText()||/[^ -~]/.test(l.text))return;let c=hn(l.dom);if(c.length!=1)return;a+=c[0].width,o=c[0].height}if(a)return{lineHeight:s.dom.getBoundingClientRect().height,charWidth:a/s.length,textHeight:o}}});if(e)return e;let t=document.createElement(\"div\"),i,r,n;return t.className=\"cm-line\",t.style.width=\"99999px\",t.style.position=\"absolute\",t.textContent=\"abc def ghi jkl mno pqr stu\",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let s=hn(t.firstChild)[0];i=t.getBoundingClientRect().height,r=s&&s.width?s.width/27:7,n=s&&s.height?s.height:i,t.remove()}),{lineHeight:i,charWidth:r,textHeight:n}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,r=0;;r++){let n=r==t.viewports.length?null:t.viewports[r],s=n?n.from-1:this.view.state.doc.length;if(s>i){let a=(t.lineBlockAt(s).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(Y.replace({widget:new Gi(a),block:!0,inclusive:!0,isBlockGap:!0}).range(i,s))}if(!n)break;i=n.to+1}return Y.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Fi).map(n=>(this.dynamicDecorationMap[e++]=typeof n==\"function\")?n(this.view):n),i=!1,r=this.view.state.facet(Od).map((n,s)=>{let a=typeof n==\"function\";return a&&(i=!0),a?n(this.view):n});for(r.length&&(this.dynamicDecorationMap[e++]=i,t.push(M.join(r))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];e<this.decorations.length;)this.dynamicDecorationMap[e++]=!1;this.blockWrappers=this.view.state.facet(td).map(n=>typeof n==\"function\"?n(this.view):n)}scrollIntoView(e){if(e.isSnapshot){let l=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=l.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let l of this.view.state.facet(Kf))try{if(l(this.view,e.range,e))return!0}catch(c){Xe(this.view.state,c,\"scroll handler\")}let{range:t}=e,i=this.coordsAt(t.head,t.empty?t.assoc:t.head>t.anchor?-1:1),r;if(!i)return;!t.empty&&(r=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,r.left),top:Math.min(i.top,r.top),right:Math.max(i.right,r.right),bottom:Math.max(i.bottom,r.bottom)});let n=Po(this.view),s={left:i.left-n.left,top:i.top-n.top,right:i.right+n.right,bottom:i.bottom+n.bottom},{offsetWidth:a,offsetHeight:o}=this.view.scrollDOM;iP(this.view.scrollDOM,s,t.head<t.anchor?-1:1,e.x,e.y,Math.max(Math.min(e.xMargin,a),-a),Math.max(Math.min(e.yMargin,o),-o),this.view.textDirection==H.LTR)}lineHasWidget(e){let t=i=>i.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){qa(this.tile)}};function qa(O,e){let t=e?.get(O);if(t!=1){t==null&&O.destroy();for(let i of O.children)qa(i,e)}}function TP(O){return O.node.nodeType==1&&O.node.firstChild&&(O.offset==0||O.node.childNodes[O.offset-1].contentEditable==\"false\")&&(O.offset==O.node.childNodes.length||O.node.childNodes[O.offset].contentEditable==\"false\")}function sd(O,e){let t=O.observer.selectionRange;if(!t.focusNode)return null;let i=Uf(t.focusNode,t.focusOffset),r=Wf(t.focusNode,t.focusOffset),n=i||r;if(r&&i&&r.node!=i.node){let a=de.get(r.node);if(!a||a.isText()&&a.text!=r.node.nodeValue)n=r;else if(O.docView.lastCompositionAfterCursor){let o=de.get(i.node);!o||o.isText()&&o.text!=i.node.nodeValue||(n=r)}}if(O.docView.lastCompositionAfterCursor=n!=i,!n)return null;let s=e-n.offset;return{from:s,to:s+n.node.nodeValue.length,node:n.node}}function bP(O,e,t){let i=sd(O,t);if(!i)return null;let{node:r,from:n,to:s}=i,a=r.nodeValue;if(/[\\n\\r]/.test(a)||O.state.doc.sliceString(i.from,i.to)!=a)return null;let o=e.invertedDesc;return{range:new ht(o.mapPos(n),o.mapPos(s),n,s),text:r}}function yP(O,e){return O.nodeType!=1?0:(e&&O.childNodes[e-1].contentEditable==\"false\"?1:0)|(e<O.childNodes.length&&O.childNodes[e].contentEditable==\"false\"?2:0)}var xP=class{constructor(){this.changes=[]}compareRange(e,t){Oi(e,t,this.changes)}comparePoint(e,t){Oi(e,t,this.changes)}boundChange(e){Oi(e,e,this.changes)}};function kP(O,e,t){let i=new xP;return M.compare(O,e,t,i),i.changes}var za=class{constructor(){this.changes=[]}compareRange(e,t){Oi(e,t,this.changes)}comparePoint(){}boundChange(e){Oi(e,e,this.changes)}};function wP(O,e,t){let i=new za;return M.compare(O,e,t,i),i.changes}function ZP(O,e){for(let t=O;t&&t!=e;t=t.assignedSlot||t.parentNode)if(t.nodeType==1&&t.contentEditable==\"false\")return!0;return!1}function vP(O,e){let t=!1;return e&&O.iterChangedRanges((i,r)=>{i<e.to&&r>e.from&&(t=!0)}),t}var Gi=class extends _e{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement(\"div\");return e.className=\"cm-gap\",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+\"px\",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function YP(O,e,t=1){let i=O.charCategorizer(e),r=O.doc.lineAt(e),n=e-r.from;if(r.length==0)return S.cursor(e);n==0?t=1:n==r.length&&(t=-1);let s=n,a=n;t<0?s=fe(r.text,n,!1):a=fe(r.text,n);let o=i(r.text.slice(s,a));for(;s>0;){let l=fe(r.text,s,!1);if(i(r.text.slice(l,s))!=o)break;s=l}for(;a<r.length;){let l=fe(r.text,a);if(i(r.text.slice(a,l))!=o)break;a=l}return S.range(s+r.from,a+r.from)}function _P(O,e,t,i,r){let n=Math.round((i-e.left)*O.defaultCharacterWidth);if(O.lineWrapping&&t.height>O.defaultLineHeight*1.5){let a=O.viewState.heightOracle.textHeight,o=Math.floor((r-t.top-(O.defaultLineHeight-a)*.5)/a);n+=o*O.viewState.heightOracle.lineLength}let s=O.state.sliceDoc(t.from,t.to);return t.from+Kr(s,n,O.state.tabSize)}function Ua(O,e,t){let i=O.lineBlockAt(e);if(Array.isArray(i.type)){let r;for(let n of i.type){if(n.from>e)break;if(!(n.to<e)){if(n.from<e&&n.to>e)return n;(!r||n.type==Te.Text&&(r.type!=n.type||(t<0?n.from<e:n.to>e)))&&(r=n)}}return r||i}return i}function RP(O,e,t,i){let r=Ua(O,e.head,e.assoc||-1),n=!i||r.type!=Te.Text||!(O.lineWrapping||r.widgetLineBreaks)?null:O.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(n){let s=O.dom.getBoundingClientRect(),a=O.textDirectionAt(r.from),o=O.posAtCoords({x:t==(a==H.LTR)?s.right-1:s.left+1,y:(n.top+n.bottom)/2});if(o!=null)return S.cursor(o,t?-1:1)}return S.cursor(t?r.to:r.from,t?-1:1)}function Of(O,e,t,i){let r=O.state.doc.lineAt(e.head),n=O.bidiSpans(r),s=O.textDirectionAt(r.from);for(let a=e,o=null;;){let l=uP(r,n,s,a,t),c=Af;if(!l){if(r.number==(t?O.state.doc.lines:1))return a;c=`\n`,r=O.state.doc.line(r.number+(t?1:-1)),n=O.bidiSpans(r),l=O.visualLineSide(r,!t)}if(o){if(!o(c))return a}else{if(!i)return l;o=i(c)}a=l}}function VP(O,e,t){let i=O.state.charCategorizer(e),r=i(t);return n=>{let s=i(n);return r==ee.Space&&(r=s),r==s}}function qP(O,e,t,i){let r=e.head,n=t?1:-1;if(r==(t?O.state.doc.length:0))return S.cursor(r,e.assoc);let s=e.goalColumn,a,o=O.contentDOM.getBoundingClientRect(),l=O.coordsAtPos(r,e.assoc||-1),c=O.documentTop;if(l)s==null&&(s=l.left-o.left),a=n<0?l.top:l.bottom;else{let u=O.viewState.lineBlockAt(r);s==null&&(s=Math.min(o.right-o.left,O.defaultCharacterWidth*(r-u.from))),a=(n<0?u.top:u.bottom)+c}let h=o.left+s,f=i??O.viewState.heightOracle.textHeight>>1;for(let u=0;;u+=10){let Q=a+(f+u)*n,$=Wa(O,{x:h,y:Q},!1,n);return S.cursor($.pos,$.assoc,void 0,s)}}function Ei(O,e,t){for(;;){let i=0;for(let r of O)r.between(e-1,e+1,(n,s,a)=>{if(e>n&&e<s){let o=i||t||(e-n<s-e?-1:1);e=o<0?n:s,i=o}});if(!i)return e}}function ad(O,e){let t=null;for(let i=0;i<e.ranges.length;i++){let r=e.ranges[i],n=null;if(r.empty){let s=Ei(O,r.from,0);s!=r.from&&(n=S.cursor(s,-1))}else{let s=Ei(O,r.from,-1),a=Ei(O,r.to,1);(s!=r.from||a!=r.to)&&(n=S.range(r.from==r.anchor?s:a,r.from==r.head?s:a))}n&&(t||(t=e.ranges.slice()),t[i]=n)}return t?S.create(t,e.mainIndex):e}function ua(O,e,t){let i=Ei(O.state.facet(Ji).map(r=>r(O)),t.from,e.head>t.from?-1:1);return i==t.from?t:S.cursor(i,i<t.from?1:-1)}var rt=class{constructor(e,t){this.pos=e,this.assoc=t}};function Wa(O,e,t,i){let r=O.contentDOM.getBoundingClientRect(),n=r.top+O.viewState.paddingTop,{x:s,y:a}=e,o=a-n,l;for(;;){if(o<0)return new rt(0,1);if(o>O.viewState.docHeight)return new rt(O.state.doc.length,-1);if(l=O.elementAtHeight(o),i==null)break;if(l.type==Te.Text){let f=O.docView.coordsAt(i<0?l.from:l.to,i);if(f&&(i<0?f.top<=o+n:f.bottom>=o+n))break}let h=O.viewState.heightOracle.textHeight/2;o=i>0?l.bottom+h:l.top-h}if(O.viewport.from>=l.to||O.viewport.to<=l.from){if(t)return null;if(l.type==Te.Text){let h=_P(O,r,l,s,a);return new rt(h,h==l.from?1:-1)}}if(l.type!=Te.Text)return o<(l.top+l.bottom)/2?new rt(l.from,1):new rt(l.to,-1);let c=O.docView.lineAt(l.from,2);return(!c||c.length!=l.length)&&(c=O.docView.lineAt(l.from,-2)),od(O,c,l.from,s,a)}function od(O,e,t,i,r){let n=-1,s=null,a=1e9,o=1e9,l=r,c=r,h=(f,u)=>{for(let Q=0;Q<f.length;Q++){let $=f[Q];if($.top==$.bottom)continue;let p=$.left>i?$.left-i:$.right<i?i-$.right:0,m=$.top>r?$.top-r:$.bottom<r?r-$.bottom:0;$.top<=c&&$.bottom>=l&&(l=Math.min($.top,l),c=Math.max($.bottom,c),m=0),(n<0||(m-o||p-a)<0)&&(n>=0&&o&&a<p&&s.top<=c-2&&s.bottom>=l+2?o=0:(n=u,a=p,o=m,s=$))}};if(e.isText()){for(let u=0;u<e.length;){let Q=fe(e.text,u);if(h(Ni(e.dom,u,Q).getClientRects(),u),!a&&!o)break;u=Q}return i>(s.left+s.right)/2==(rf(O,n+t)==H.LTR)?new rt(t+fe(e.text,n),-1):new rt(t+n,1)}else{if(!e.length)return new rt(t,1);for(let $=0;$<e.children.length;$++){let p=e.children[$];if(p.flags&48)continue;let m=(p.dom.nodeType==1?p.dom:Ni(p.dom,0,p.length)).getClientRects();if(h(m,$),!a&&!o)break}let f=e.children[n],u=e.posBefore(f,t);return f.isComposite()||f.isText()?od(O,f,u,Math.max(s.left,Math.min(s.right,i)),r):i>(s.left+s.right)/2==(rf(O,n+t)==H.LTR)?new rt(u+f.length,-1):new rt(u,1)}}function rf(O,e){let t=O.state.doc.lineAt(e);return O.bidiSpans(t)[ct.find(O.bidiSpans(t),e-t.from,-1,1)].dir}var qi=\"\\uFFFF\",ja=class{constructor(e,t){this.points=e,this.view=t,this.text=\"\",this.lineSeparator=t.state.facet(I.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=qi}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let r=e;;){this.findPointBefore(i,r);let n=this.text.length;this.readNode(r);let s=de.get(r),a=r.nextSibling;if(a==t){s?.breakAfter&&!a&&i!=this.view.contentDOM&&this.lineBreak();break}let o=de.get(a);(s&&o?s.breakAfter:(s?s.breakAfter:mn(r))||mn(a)&&(r.nodeName!=\"BR\"||s?.isWidget())&&this.text.length>n)&&!UP(a,t)&&this.lineBreak(),r=a}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,r=this.lineSeparator?null:/\\r\\n?|\\n/g;;){let n=-1,s=1,a;if(this.lineSeparator?(n=t.indexOf(this.lineSeparator,i),s=this.lineSeparator.length):(a=r.exec(t))&&(n=a.index,s=a[0].length),this.append(t.slice(i,n<0?t.length:n)),n<0)break;if(this.lineBreak(),s>1)for(let o of this.points)o.node==e&&o.pos>this.text.length&&(o.pos-=s-1);i=n+s}}readNode(e){let t=de.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let r=i.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName==\"BR\"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(zP(e,i.node,i.offset)?t:0))}};function zP(O,e,t){for(;;){if(!e||t<Rt(e))return!1;if(e==O)return!0;t=Nt(e)+1,e=e.parentNode}}function UP(O,e){let t;for(;!(O==e||!O);O=O.nextSibling){let i=de.get(O);if(!i?.isWidget())return!1;i&&(t||(t=[])).push(i)}if(t)for(let i of t){let r=i.overrideDOMText;if(r?.length)return!1}return!0}var Tn=class{constructor(e,t){this.node=e,this.offset=t,this.pos=-1}},Ca=class{constructor(e,t,i,r){this.typeOver=r,this.bounds=null,this.text=\"\",this.domChanged=t>-1;let{impreciseHead:n,impreciseAnchor:s}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=ld(e.docView.tile,t,i,0))){let a=n||s?[]:jP(e),o=new ja(a,e);o.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=o.text,this.newSel=CP(a,this.bounds.from)}else{let a=e.observer.selectionRange,o=n&&n.node==a.focusNode&&n.offset==a.focusOffset||!Ta(e.contentDOM,a.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),l=s&&s.node==a.anchorNode&&s.offset==a.anchorOffset||!Ta(e.contentDOM,a.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),c=e.viewport;if((v.ios||v.chrome)&&e.state.selection.main.empty&&o!=l&&(c.from>0||c.to<e.state.doc.length)){let h=Math.min(o,l),f=Math.max(o,l),u=c.from-h,Q=c.to-f;(u==0||u==1||h==0)&&(Q==0||Q==-1||f==e.state.doc.length)&&(o=0,l=e.state.doc.length)}e.inputState.composing>-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(S.range(l,o)):this.newSel=S.single(l,o)}}};function ld(O,e,t,i){if(O.isComposite()){let r=-1,n=-1,s=-1,a=-1;for(let o=0,l=i,c=i;o<O.children.length;o++){let h=O.children[o],f=l+h.length;if(l<e&&f>t)return ld(h,e,t,l);if(f>=e&&r==-1&&(r=o,n=l),l>t&&h.dom.parentNode==O.dom){s=o,a=c;break}c=f,l=f+h.breakAfter}return{from:n,to:a<0?i+O.length:a,startDOM:(r?O.children[r-1].dom.nextSibling:null)||O.dom.firstChild,endDOM:s<O.children.length&&s>=0?O.children[s].dom:null}}else return O.isText()?{from:i,to:i+O.length,startDOM:O.dom,endDOM:O.dom.nextSibling}:null}function cd(O,e){let t,{newSel:i}=e,r=O.state.selection.main,n=O.inputState.lastKeyTime>Date.now()-100?O.inputState.lastKeyCode:-1;if(e.bounds){let{from:s,to:a}=e.bounds,o=r.from,l=null;(n===8||v.android&&e.text.length<a-s)&&(o=r.to,l=\"end\");let c=hd(O.state.doc.sliceString(s,a,qi),e.text,o-s,l);c&&(v.chrome&&n==13&&c.toB==c.from+2&&e.text.slice(c.from,c.toB)==qi+qi&&c.toB--,t={from:s+c.from,to:s+c.toA,insert:E.of(e.text.slice(c.from,c.toB).split(qi))})}else i&&(!O.hasFocus&&O.state.facet(_t)||i.main.eq(r))&&(i=null);if(!t&&!i)return!1;if(!t&&e.typeOver&&!r.empty&&i&&i.main.empty?t={from:r.from,to:r.to,insert:O.state.doc.slice(r.from,r.to)}:(v.mac||v.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\\. ?$/.test(t.insert.toString())&&O.contentDOM.getAttribute(\"autocorrect\")==\"off\"?(i&&t.insert.length==2&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:E.of([t.insert.toString().replace(\".\",\" \")])}):t&&t.from>=r.from&&t.to<=r.to&&(t.from!=r.from||t.to!=r.to)&&r.to-r.from-(t.to-t.from)<=4?t={from:r.from,to:r.to,insert:O.state.doc.slice(r.from,t.from).append(t.insert).append(O.state.doc.slice(t.to,r.to))}:O.state.doc.lineAt(r.from).to<r.to&&O.docView.lineHasWidget(r.to)&&O.inputState.insertingTextAt>Date.now()-50?t={from:r.from,to:r.to,insert:O.state.toText(O.inputState.insertingText)}:v.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==`\n `&&O.lineWrapping&&(i&&(i=S.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:E.of([\" \"])}),t)return So(O,t,i,n);if(i&&!i.main.eq(r)){let s=!1,a=\"select\";return O.inputState.lastSelectionTime>Date.now()-50&&(O.inputState.lastSelectionOrigin==\"select\"&&(s=!0),a=O.inputState.lastSelectionOrigin,a==\"select.pointer\"&&(i=ad(O.state.facet(Ji).map(o=>o(O)),i))),O.dispatch({selection:i,scrollIntoView:s,userEvent:a}),!0}else return!1}function So(O,e,t,i=-1){if(v.ios&&O.inputState.flushIOSKey(e))return!0;let r=O.state.selection.main;if(v.android&&(e.to==r.to&&(e.from==r.from||e.from==r.from-1&&O.state.sliceDoc(e.from,r.from)==\" \")&&e.insert.length==1&&e.insert.lines==2&&ii(O.contentDOM,\"Enter\",13)||(e.from==r.from-1&&e.to==r.to&&e.insert.length==0||i==8&&e.insert.length<e.to-e.from&&e.to>r.head)&&ii(O.contentDOM,\"Backspace\",8)||e.from==r.from&&e.to==r.to+1&&e.insert.length==0&&ii(O.contentDOM,\"Delete\",46)))return!0;let n=e.insert.toString();O.inputState.composing>=0&&O.inputState.composing++;let s,a=()=>s||(s=WP(O,e,t));return O.state.facet(Bf).some(o=>o(O,e.from,e.to,n,a))||O.dispatch(a()),!0}function WP(O,e,t){let i,r=O.state,n=r.selection.main,s=-1;if(e.from==e.to&&e.from<n.from||e.from>n.to){let o=e.from<n.from?-1:1,l=o<0?n.from:n.to,c=Ei(r.facet(Ji).map(h=>h(O)),l,o);e.from==c&&(s=c)}if(s>-1)i={changes:e,selection:S.cursor(e.from+e.insert.length,-1)};else if(e.from>=n.from&&e.to<=n.to&&e.to-e.from>=(n.to-n.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&O.inputState.composing<0){let o=n.from<e.from?r.sliceDoc(n.from,e.from):\"\",l=n.to>e.to?r.sliceDoc(e.to,n.to):\"\";i=r.replaceSelection(O.state.toText(o+e.insert.sliceString(0,void 0,O.state.lineBreak)+l))}else{let o=r.changes(e),l=t&&t.main.to<=o.newLength?t.main:void 0;if(r.selection.ranges.length>1&&(O.inputState.composing>=0||O.inputState.compositionPendingChange)&&e.to<=n.to+10&&e.to>=n.to-10){let c=O.state.sliceDoc(e.from,e.to),h,f=t&&sd(O,t.main.head);if(f){let Q=e.insert.length-(e.to-e.from);h={from:f.from,to:f.to-Q}}else h=O.state.doc.lineAt(n.head);let u=n.to-e.to;i=r.changeByRange(Q=>{if(Q.from==n.from&&Q.to==n.to)return{changes:o,range:l||Q.map(o)};let $=Q.to-u,p=$-c.length;if(O.state.sliceDoc(p,$)!=c||$>=h.from&&p<=h.to)return{range:Q};let m=r.changes({from:p,to:$,insert:e.insert}),g=Q.to-n.to;return{changes:m,range:l?S.range(Math.max(0,l.anchor+g),Math.max(0,l.head+g)):Q.map(m)}})}else i={changes:o,selection:l&&r.selection.replaceRange(l)}}let a=\"input.type\";return(O.composing||O.inputState.compositionPendingChange&&O.inputState.compositionEndedAt>Date.now()-50)&&(O.inputState.compositionPendingChange=!1,a+=\".compose\",O.inputState.compositionFirstChange&&(a+=\".start\",O.inputState.compositionFirstChange=!1)),r.update(i,{userEvent:a,scrollIntoView:!0})}function hd(O,e,t,i){let r=Math.min(O.length,e.length),n=0;for(;n<r&&O.charCodeAt(n)==e.charCodeAt(n);)n++;if(n==r&&O.length==e.length)return null;let s=O.length,a=e.length;for(;s>0&&a>0&&O.charCodeAt(s-1)==e.charCodeAt(a-1);)s--,a--;if(i==\"end\"){let o=Math.max(0,n-Math.min(s,a));t-=s+o-n}if(s<n&&O.length<e.length){let o=t<=n&&t>=s?n-t:0;n-=o,a=n+(a-s),s=n}else if(a<n){let o=t<=n&&t>=a?n-t:0;n-=o,s=n+(s-a),a=n}return{from:n,toA:s,toB:a}}function jP(O){let e=[];if(O.root.activeElement!=O.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:n}=O.observer.selectionRange;return t&&(e.push(new Tn(t,i)),(r!=t||n!=i)&&e.push(new Tn(r,n))),e}function CP(O,e){if(O.length==0)return null;let t=O[0].pos,i=O.length==2?O[1].pos:t;return t>-1&&i>-1?S.single(t+e,i+e):null}var Ga=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText=\"\",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,v.safari&&e.contentDOM.addEventListener(\"input\",()=>null),v.gecko&&eS(e.contentDOM.ownerDocument)}handleEvent(e){!IP(this.view,e)||this.ignoreDuringComposition(e)||e.type==\"keydown\"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let r of i.observers)r(this.view,t);for(let r of i.handlers){if(t.defaultPrevented)break;if(r(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=GP(e),i=this.handlers,r=this.view.contentDOM;for(let n in t)if(n!=\"scroll\"){let s=!t[n].handlers.length,a=i[n];a&&s!=!a.handlers.length&&(r.removeEventListener(n,this.handleEvent),a=null),a||r.addEventListener(n,this.handleEvent,{passive:s})}for(let n in i)n!=\"scroll\"&&!t[n]&&r.removeEventListener(n,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&dd.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),v.android&&v.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return v.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((t=fd.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||EP.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key==\"Enter\"&&e&&e.from<e.to&&/^\\S+$/.test(e.insert.toString())?!1:(this.pendingIOSKey=void 0,ii(this.view.contentDOM,t.key,t.keyCode,t instanceof KeyboardEvent?t:void 0))}ignoreDuringComposition(e){return!/^key/.test(e.type)||e.synthetic?!1:this.composing>0?!0:v.safari&&!v.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function nf(O,e){return(t,i)=>{try{return e.call(O,i,t)}catch(r){Xe(t.state,r)}}}function GP(O){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of O){let r=i.spec,n=r&&r.plugin.domEventHandlers,s=r&&r.plugin.domEventObservers;if(n)for(let a in n){let o=n[a];o&&t(a).handlers.push(nf(i.value,o))}if(s)for(let a in s){let o=s[a];o&&t(a).observers.push(nf(i.value,o))}}for(let i in ft)t(i).handlers.push(ft[i]);for(let i in nt)t(i).observers.push(nt[i]);return e}var fd=[{key:\"Backspace\",keyCode:8,inputType:\"deleteContentBackward\"},{key:\"Enter\",keyCode:13,inputType:\"insertParagraph\"},{key:\"Enter\",keyCode:13,inputType:\"insertLineBreak\"},{key:\"Delete\",keyCode:46,inputType:\"deleteContentForward\"}],EP=\"dthko\",dd=[16,17,18,20,91,92,224,225],tn=6;function On(O){return Math.max(0,O)*.7+8}function AP(O,e){return Math.max(Math.abs(O.clientX-e.clientX),Math.abs(O.clientY-e.clientY))}var Ea=class{constructor(e,t,i,r){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=rP(e.contentDOM),this.atoms=e.state.facet(Ji).map(s=>s(e));let n=e.contentDOM.ownerDocument;n.addEventListener(\"mousemove\",this.move=this.move.bind(this)),n.addEventListener(\"mouseup\",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(I.allowMultipleSelections)&&LP(e,t),this.dragging=DP(e,t)&&$d(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&AP(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,r=0,n=0,s=this.view.win.innerWidth,a=this.view.win.innerHeight;this.scrollParents.x&&({left:r,right:s}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:n,bottom:a}=this.scrollParents.y.getBoundingClientRect());let o=Po(this.view);e.clientX-o.left<=r+tn?t=-On(r-e.clientX):e.clientX+o.right>=s-tn&&(t=On(e.clientX-s)),e.clientY-o.top<=n+tn?i=-On(n-e.clientY):e.clientY+o.bottom>=a-tn&&(i=On(e.clientY-a)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener(\"mousemove\",this.move),e.removeEventListener(\"mouseup\",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=ad(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:\"select.pointer\"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent(\"input.type\"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function LP(O,e){let t=O.state.facet(Lf);return t.length?t[0](e):v.mac?e.metaKey:e.ctrlKey}function MP(O,e){let t=O.state.facet(Mf);return t.length?t[0](e):v.mac?!e.altKey:!e.ctrlKey}function DP(O,e){let{main:t}=O.state.selection;if(t.empty)return!1;let i=Bi(O.root);if(!i||i.rangeCount==0)return!0;let r=i.getRangeAt(0).getClientRects();for(let n=0;n<r.length;n++){let s=r[n];if(s.left<=e.clientX&&s.right>=e.clientX&&s.top<=e.clientY&&s.bottom>=e.clientY)return!0}return!1}function IP(O,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=O.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=de.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var ft=Object.create(null),nt=Object.create(null),ud=v.ie&&v.ie_version<15||v.ios&&v.webkit_version<604;function BP(O){let e=O.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement(\"textarea\"));t.style.cssText=\"position: fixed; left: -10000px; top: 10px\",t.focus(),setTimeout(()=>{O.focus(),t.remove(),Qd(O,t.value)},50)}function Vn(O,e,t){for(let i of O.facet(e))t=i(t,O);return t}function Qd(O,e){e=Vn(O.state,po,e);let{state:t}=O,i,r=1,n=t.toText(e),s=n.lines==t.selection.ranges.length;if(Aa!=null&&t.selection.ranges.every(o=>o.empty)&&Aa==n.toString()){let o=-1;i=t.changeByRange(l=>{let c=t.doc.lineAt(l.from);if(c.from==o)return{range:l};o=c.from;let h=t.toText((s?n.line(r++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:h},range:S.cursor(l.from+h.length)}})}else s?i=t.changeByRange(o=>{let l=n.line(r++);return{changes:{from:o.from,to:o.to,insert:l.text},range:S.cursor(o.from+l.length)}}):i=t.replaceSelection(n);O.dispatch(i,{userEvent:\"input.paste\",scrollIntoView:!0})}nt.scroll=O=>{O.inputState.lastScrollTop=O.scrollDOM.scrollTop,O.inputState.lastScrollLeft=O.scrollDOM.scrollLeft};ft.keydown=(O,e)=>(O.inputState.setSelectionOrigin(\"select\"),e.keyCode==27&&O.inputState.tabFocusMode!=0&&(O.inputState.tabFocusMode=Date.now()+2e3),!1);nt.touchstart=(O,e)=>{O.inputState.lastTouchTime=Date.now(),O.inputState.setSelectionOrigin(\"select.pointer\")};nt.touchmove=O=>{O.inputState.setSelectionOrigin(\"select.pointer\")};ft.mousedown=(O,e)=>{if(O.observer.flush(),O.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of O.state.facet(Df))if(t=i(O,e),t)break;if(!t&&e.button==0&&(t=FP(O,e)),t){let i=!O.hasFocus;O.inputState.startMouseSelection(new Ea(O,e,t,i)),i&&O.observer.ignore(()=>{qf(O.contentDOM);let n=O.root.activeElement;n&&!n.contains(O.contentDOM)&&n.blur()});let r=O.inputState.mouseSelection;if(r)return r.start(e),r.dragging===!1}else O.inputState.setSelectionOrigin(\"select.pointer\");return!1};function sf(O,e,t,i){if(i==1)return S.cursor(e,t);if(i==2)return YP(O.state,e,t);{let r=O.docView.lineAt(e,t),n=O.state.doc.lineAt(r?r.posAtEnd:e),s=r?r.posAtStart:n.from,a=r?r.posAtEnd:n.to;return a<O.state.doc.length&&a==n.to&&a++,S.range(s,a)}}var NP=v.ie&&v.ie_version<=11,af=null,of=0,lf=0;function $d(O){if(!NP)return O.detail;let e=af,t=lf;return af=O,lf=Date.now(),of=!e||t>Date.now()-400&&Math.abs(e.clientX-O.clientX)<2&&Math.abs(e.clientY-O.clientY)<2?(of+1)%3:1}function FP(O,e){let t=O.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=$d(e),r=O.state.selection;return{update(n){n.docChanged&&(t.pos=n.changes.mapPos(t.pos),r=r.map(n.changes))},get(n,s,a){let o=O.posAndSideAtCoords({x:n.clientX,y:n.clientY},!1),l,c=sf(O,o.pos,o.assoc,i);if(t.pos!=o.pos&&!s){let h=sf(O,t.pos,t.assoc,i),f=Math.min(h.from,c.from),u=Math.max(h.to,c.to);c=f<c.from?S.range(f,u):S.range(u,f)}return s?r.replaceRange(r.main.extend(c.from,c.to)):a&&i==1&&r.ranges.length>1&&(l=HP(r,o.pos))?l:a?r.addRange(c):S.create([c])}}}function HP(O,e){for(let t=0;t<O.ranges.length;t++){let{from:i,to:r}=O.ranges[t];if(i<=e&&r>=e)return S.create(O.ranges.slice(0,t).concat(O.ranges.slice(t+1)),O.mainIndex==t?0:O.mainIndex-(O.mainIndex>t?1:0))}return null}ft.dragstart=(O,e)=>{let{selection:{main:t}}=O.state;if(e.target.draggable){let r=O.docView.tile.nearest(e.target);if(r&&r.isWidget()){let n=r.posAtStart,s=n+r.length;(n>=t.to||s<=t.from)&&(t=S.range(n,s))}}let{inputState:i}=O;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData(\"Text\",Vn(O.state,mo,O.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed=\"copyMove\"),!1};ft.dragend=O=>(O.inputState.draggedContent=null,!1);function cf(O,e,t,i){if(t=Vn(O.state,po,t),!t)return;let r=O.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:n}=O.inputState,s=i&&n&&MP(O,e)?{from:n.from,to:n.to}:null,a={from:r,insert:t},o=O.state.changes(s?[s,a]:a);O.focus(),O.dispatch({changes:o,selection:{anchor:o.mapPos(r,-1),head:o.mapPos(r,1)},userEvent:s?\"move.drop\":\"input.drop\"}),O.inputState.draggedContent=null}ft.drop=(O,e)=>{if(!e.dataTransfer)return!1;if(O.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),r=0,n=()=>{++r==t.length&&cf(O,e,i.filter(s=>s!=null).join(O.state.lineBreak),!1)};for(let s=0;s<t.length;s++){let a=new FileReader;a.onerror=n,a.onload=()=>{/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(a.result)||(i[s]=a.result),n()},a.readAsText(t[s])}return!0}else{let i=e.dataTransfer.getData(\"Text\");if(i)return cf(O,e,i,!0),!0}return!1};ft.paste=(O,e)=>{if(O.state.readOnly)return!0;O.observer.flush();let t=ud?null:e.clipboardData;return t?(Qd(O,t.getData(\"text/plain\")||t.getData(\"text/uri-list\")),!0):(BP(O),!1)};function KP(O,e){let t=O.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement(\"textarea\"));i.style.cssText=\"position: fixed; left: -10000px; top: 10px\",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),O.focus()},50)}function JP(O){let e=[],t=[],i=!1;for(let r of O.selection.ranges)r.empty||(e.push(O.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:n}of O.selection.ranges){let s=O.doc.lineAt(n);s.number>r&&(e.push(s.text),t.push({from:s.from,to:Math.min(O.doc.length,s.to+1)})),r=s.number}i=!0}return{text:Vn(O,mo,e.join(O.lineBreak)),ranges:t,linewise:i}}var Aa=null;ft.copy=ft.cut=(O,e)=>{let{text:t,ranges:i,linewise:r}=JP(O.state);if(!t&&!r)return!1;Aa=r?t:null,e.type==\"cut\"&&!O.state.readOnly&&O.dispatch({changes:i,scrollIntoView:!0,userEvent:\"delete.cut\"});let n=ud?null:e.clipboardData;return n?(n.clearData(),n.setData(\"text/plain\",t),!0):(KP(O,t),!1)};var pd=qe.define();function md(O,e){let t=[];for(let i of O.facet(Nf)){let r=i(O,e);r&&t.push(r)}return t.length?O.update({effects:t,annotations:pd.of(!0)}):null}function gd(O){setTimeout(()=>{let e=O.hasFocus;if(e!=O.inputState.notifiedFocused){let t=md(O.state,e);t?O.dispatch(t):O.update([])}},10)}nt.focus=O=>{O.inputState.lastFocusTime=Date.now(),!O.scrollDOM.scrollTop&&(O.inputState.lastScrollTop||O.inputState.lastScrollLeft)&&(O.scrollDOM.scrollTop=O.inputState.lastScrollTop,O.scrollDOM.scrollLeft=O.inputState.lastScrollLeft),gd(O)};nt.blur=O=>{O.observer.clearSelectionRange(),gd(O)};nt.compositionstart=nt.compositionupdate=O=>{O.observer.editContext||(O.inputState.compositionFirstChange==null&&(O.inputState.compositionFirstChange=!0),O.inputState.composing<0&&(O.inputState.composing=0))};nt.compositionend=O=>{O.observer.editContext||(O.inputState.composing=-1,O.inputState.compositionEndedAt=Date.now(),O.inputState.compositionPendingKey=!0,O.inputState.compositionPendingChange=O.observer.pendingRecords().length>0,O.inputState.compositionFirstChange=null,v.chrome&&v.android?O.observer.flushSoon():O.inputState.compositionPendingChange?Promise.resolve().then(()=>O.observer.flush()):setTimeout(()=>{O.inputState.composing<0&&O.docView.hasComposition&&O.update([])},50))};nt.contextmenu=O=>{O.inputState.lastContextMenu=Date.now()};ft.beforeinput=(O,e)=>{var t,i;if((e.inputType==\"insertText\"||e.inputType==\"insertCompositionText\")&&(O.inputState.insertingText=e.data,O.inputState.insertingTextAt=Date.now()),e.inputType==\"insertReplacementText\"&&O.observer.editContext){let n=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData(\"text/plain\"),s=e.getTargetRanges();if(n&&s.length){let a=s[0],o=O.posAtDOM(a.startContainer,a.startOffset),l=O.posAtDOM(a.endContainer,a.endOffset);return So(O,{from:o,to:l,insert:O.state.toText(n)},null),!0}}let r;if(v.chrome&&v.android&&(r=fd.find(n=>n.inputType==e.inputType))&&(O.observer.delayAndroidKey(r.key,r.keyCode),r.key==\"Backspace\"||r.key==\"Delete\")){let n=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var s;(((s=window.visualViewport)===null||s===void 0?void 0:s.height)||0)>n+10&&O.hasFocus&&(O.contentDOM.blur(),O.focus())},100)}return v.ios&&e.inputType==\"deleteContentForward\"&&O.observer.flushSoon(),v.safari&&e.inputType==\"insertText\"&&O.inputState.composing>=0&&setTimeout(()=>nt.compositionend(O,e),20),!1};var hf=new Set;function eS(O){hf.has(O)||(hf.add(O),O.addEventListener(\"copy\",()=>{}),O.addEventListener(\"cut\",()=>{}))}var ff=[\"pre-wrap\",\"normal\",\"pre-line\",\"break-spaces\"],oi=!1;function df(){oi=!1}var La=class{constructor(e){this.lineWrapping=e,this.doc=E.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return ff.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i<e.length;i++){let r=e[i];r<0?i++:this.heightSamples[Math.floor(r*10)]||(t=!0,this.heightSamples[Math.floor(r*10)]=!0)}return t}refresh(e,t,i,r,n,s){let a=ff.indexOf(e)>-1,o=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=a;if(this.lineWrapping=a,this.lineHeight=t,this.charWidth=i,this.textHeight=r,this.lineLength=n,o){this.heightSamples={};for(let l=0;l<s.length;l++){let c=s[l];c<0?l++:this.heightSamples[Math.floor(c*10)]=!0}}return o}},Ma=class{constructor(e,t){this.from=e,this.heights=t,this.index=0}get more(){return this.index<this.heights.length}},lt=class O{constructor(e,t,i,r,n){this.from=e,this.length=t,this.top=i,this.height=r,this._content=n}get type(){return typeof this._content==\"number\"?Te.Text:Array.isArray(this._content)?this._content:this._content.type}get to(){return this.from+this.length}get bottom(){return this.top+this.height}get widget(){return this._content instanceof PO?this._content.widget:null}get widgetLineBreaks(){return typeof this._content==\"number\"?this._content:0}join(e){let t=(Array.isArray(this._content)?this._content:[this]).concat(Array.isArray(e._content)?e._content:[e]);return new O(this.from,this.length+e.length,this.top,this.height+e.height,t)}},oe=(function(O){return O[O.ByPos=0]=\"ByPos\",O[O.ByHeight=1]=\"ByHeight\",O[O.ByPosNoHeight=2]=\"ByPosNoHeight\",O})(oe||(oe={})),fn=.001,De=class O{constructor(e,t,i=2){this.length=e,this.height=t,this.flags=i}get outdated(){return(this.flags&2)>0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>fn&&(oi=!0),this.height=e)}replace(e,t,i){return O.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,r){let n=this,s=i.doc;for(let a=r.length-1;a>=0;a--){let{fromA:o,toA:l,fromB:c,toB:h}=r[a],f=n.lineAt(o,oe.ByPosNoHeight,i.setDoc(t),0,0),u=f.to>=l?f:n.lineAt(l,oe.ByPosNoHeight,i,0,0);for(h+=u.to-l,l=u.to;a>0&&f.from<=r[a-1].toA;)o=r[a-1].fromA,c=r[a-1].fromB,a--,o<f.from&&(f=n.lineAt(o,oe.ByPosNoHeight,i,0,0));c+=f.from-o,o=f.from;let Q=Ia.build(i.setDoc(s),e,c,h);n=bn(n,n.replace(o,l,Q))}return n.updateHeight(i,0)}static empty(){return new it(0,0,0)}static of(e){if(e.length==1)return e[0];let t=0,i=e.length,r=0,n=0;for(;;)if(t==i)if(r>n*2){let a=e[t-1];a.break?e.splice(--t,1,a.left,null,a.right):e.splice(--t,1,a.left,a.right),i+=1+a.break,r-=a.size}else if(n>r*2){let a=e[i];a.break?e.splice(i,1,a.left,null,a.right):e.splice(i,1,a.left,a.right),i+=2+a.break,n-=a.size}else break;else if(r<n){let a=e[t++];a&&(r+=a.size)}else{let a=e[--i];a&&(n+=a.size)}let s=0;return e[t-1]==null?(s=1,t--):e[t]==null&&(s=1,i++),new Da(O.of(e.slice(0,t)),s,O.of(e.slice(i)))}};function bn(O,e){return O==e?O:(O.constructor!=e.constructor&&(oi=!0),e)}De.prototype.size=1;var tS=Y.replace({}),yn=class extends De{constructor(e,t,i){super(e,t),this.deco=i,this.spaceAbove=0}mainBlock(e,t){return new lt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.deco||0)}blockAt(e,t,i,r){return this.spaceAbove&&e<i+this.spaceAbove?new lt(r,0,i,this.spaceAbove,tS):this.mainBlock(i,r)}lineAt(e,t,i,r,n){let s=this.mainBlock(r,n);return this.spaceAbove?this.blockAt(0,i,r,n).join(s):s}forEachLine(e,t,i,r,n,s){e<=n+this.length&&t>=n&&s(this.lineAt(0,oe.ByPos,i,r,n))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more&&this.setMeasuredHeight(r),this.outdated=!1,this}toString(){return`block(${this.length})`}},it=class O extends yn{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new lt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let r=i[0];return i.length==1&&(r instanceof O||r instanceof Bt&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof Bt?r=new O(r.length,this.height,this.spaceAbove):r.height=this.height,this.outdated||(r.outdated=!1),r):De.of(i)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more?this.setMeasuredHeight(r):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:\"\"}${this.widgetHeight?\":\"+this.widgetHeight:\"\"})`}},Bt=class O extends De{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,n=r-i+1,s,a=0;if(e.lineWrapping){let o=Math.min(this.height,e.lineHeight*n);s=o/n,this.length>n+1&&(a=(this.height-o)/(this.length-n-1))}else s=this.height/n;return{firstLine:i,lastLine:r,perLine:s,perChar:a}}blockAt(e,t,i,r){let{firstLine:n,lastLine:s,perLine:a,perChar:o}=this.heightMetrics(t,r);if(t.lineWrapping){let l=r+(e<t.lineHeight?0:Math.round(Math.max(0,Math.min(1,(e-i)/this.height))*this.length)),c=t.doc.lineAt(l),h=a+c.length*o,f=Math.max(i,e-h/2);return new lt(c.from,c.length,f,h,0)}else{let l=Math.max(0,Math.min(s-n,Math.floor((e-i)/a))),{from:c,length:h}=t.doc.line(n+l);return new lt(c,h,i+a*l,a,0)}}lineAt(e,t,i,r,n){if(t==oe.ByHeight)return this.blockAt(e,i,r,n);if(t==oe.ByPosNoHeight){let{from:u,to:Q}=i.doc.lineAt(e);return new lt(u,Q-u,0,0,0)}let{firstLine:s,perLine:a,perChar:o}=this.heightMetrics(i,n),l=i.doc.lineAt(e),c=a+l.length*o,h=l.number-s,f=r+a*h+o*(l.from-n-h);return new lt(l.from,l.length,Math.max(r,Math.min(f,r+this.height-c)),c,0)}forEachLine(e,t,i,r,n,s){e=Math.max(e,n),t=Math.min(t,n+this.length);let{firstLine:a,perLine:o,perChar:l}=this.heightMetrics(i,n);for(let c=e,h=r;c<=t;){let f=i.doc.lineAt(c);if(c==e){let Q=f.number-a;h+=o*Q+l*(e-n-Q)}let u=o+l*f.length;s(new lt(f.from,f.length,h,u,0)),h+=u,c=f.to+1}}replace(e,t,i){let r=this.length-t;if(r>0){let n=i[i.length-1];n instanceof O?i[i.length-1]=new O(n.length+r):i.push(null,new O(r-1))}if(e>0){let n=i[0];n instanceof O?i[0]=new O(e+n.length):i.unshift(new O(e-1),null)}return De.of(i)}decomposeLeft(e,t){t.push(new O(e-1),null)}decomposeRight(e,t){t.push(null,new O(this.length-e-1))}updateHeight(e,t=0,i=!1,r){let n=t+this.length;if(r&&r.from<=t+this.length&&r.more){let s=[],a=Math.max(t,r.from),o=-1;for(r.from>t&&s.push(new O(r.from-t-1).updateHeight(e,t));a<=n&&r.more;){let c=e.doc.lineAt(a).length;s.length&&s.push(null);let h=r.heights[r.index++],f=0;h<0&&(f=-h,h=r.heights[r.index++]),o==-1?o=h:Math.abs(h-o)>=fn&&(o=-2);let u=new it(c,h,f);u.outdated=!1,s.push(u),a+=c+1}a<=n&&s.push(null,new O(n-a).updateHeight(e,a));let l=De.of(s);return(o<0||Math.abs(l.height-this.height)>=fn||Math.abs(o-this.heightMetrics(e,t).perLine)>=fn)&&(oi=!0),bn(this,l)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Da=class extends De{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,r){let n=i+this.left.height;return e<n?this.left.blockAt(e,t,i,r):this.right.blockAt(e,t,n,r+this.left.length+this.break)}lineAt(e,t,i,r,n){let s=r+this.left.height,a=n+this.left.length+this.break,o=t==oe.ByHeight?e<s:e<a,l=o?this.left.lineAt(e,t,i,r,n):this.right.lineAt(e,t,i,s,a);if(this.break||(o?l.to<a:l.from>a))return l;let c=t==oe.ByPosNoHeight?oe.ByPosNoHeight:oe.ByPos;return o?l.join(this.right.lineAt(a,c,i,s,a)):this.left.lineAt(a,c,i,r,n).join(l)}forEachLine(e,t,i,r,n,s){let a=r+this.left.height,o=n+this.left.length+this.break;if(this.break)e<o&&this.left.forEachLine(e,t,i,r,n,s),t>=o&&this.right.forEachLine(e,t,i,a,o,s);else{let l=this.lineAt(o,oe.ByPos,i,r,n);e<l.from&&this.left.forEachLine(e,l.from-1,i,r,n,s),l.to>=e&&l.from<=t&&s(l),t>l.to&&this.right.forEachLine(l.to+1,t,i,a,o,s)}}replace(e,t,i){let r=this.left.length+this.break;if(t<r)return this.balanced(this.left.replace(e,t,i),this.right);if(e>this.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,i));let n=[];e>0&&this.decomposeLeft(e,n);let s=n.length;for(let a of i)n.push(a);if(e>0&&uf(n,s-1),t<this.length){let a=n.length;this.decomposeRight(t,n),uf(n,a)}return De.of(n)}decomposeLeft(e,t){let i=this.left.length;if(e<=i)return this.left.decomposeLeft(e,t);t.push(this.left),this.break&&(i++,e>=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,r=i+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e<i&&this.left.decomposeRight(e,t),this.break&&e<r&&t.push(null),t.push(this.right)}balanced(e,t){return e.size>2*t.size||t.size>2*e.size?De.of(this.break?[e,null,t]:[e,t]):(this.left=bn(this.left,e),this.right=bn(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,r){let{left:n,right:s}=this,a=t+n.length+this.break,o=null;return r&&r.from<=t+n.length&&r.more?o=n=n.updateHeight(e,t,i,r):n.updateHeight(e,t,i),r&&r.from<=a+s.length&&r.more?o=s=s.updateHeight(e,a,i,r):s.updateHeight(e,a,i),o?this.balanced(n,s):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?\" \":\"-\")+this.right}};function uf(O,e){let t,i;O[e]==null&&(t=O[e-1])instanceof Bt&&(i=O[e+1])instanceof Bt&&O.splice(e-1,3,new Bt(t.length+1+i.length))}var OS=5,Ia=class O{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof it?r.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new it(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e<t||i.heightRelevant){let r=i.widget?i.widget.estimatedHeight:0,n=i.widget?i.widget.lineBreaks:0;r<0&&(r=this.oracle.lineHeight);let s=t-e;i.block?this.addBlock(new yn(s,r,i)):(s||n||r>=OS)&&this.addLineDeco(r,n,s)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenTo<e&&((this.writtenTo<e-1||this.nodes[this.nodes.length-1]==null)&&this.nodes.push(this.blankContent(this.writtenTo,e-1)),this.nodes.push(null)),this.pos>e&&this.nodes.push(new it(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new Bt(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof it)return e;let t=new it(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let r=this.ensureLine();r.length+=i,r.collapsed+=i,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof it)&&!this.isCovered?this.nodes.push(new it(0,-1,0)):(this.writtenTo<this.pos||t==null)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos));let i=e;for(let r of this.nodes)r instanceof it&&r.updateHeight(this.oracle,i),i+=r?r.length:1;return this.nodes}static build(e,t,i,r){let n=new O(i,e);return M.spans(t,i,r,n,0),n.finish(i)}};function iS(O,e,t){let i=new Ba;return M.compare(O,e,t,i,0),i.changes}var Ba=class{constructor(){this.changes=[]}compareRange(){}comparePoint(e,t,i,r){(e<t||i&&i.heightRelevant||r&&r.heightRelevant)&&Oi(e,t,this.changes,5)}};function rS(O,e){let t=O.getBoundingClientRect(),i=O.ownerDocument,r=i.defaultView||window,n=Math.max(0,t.left),s=Math.min(r.innerWidth,t.right),a=Math.max(0,t.top),o=Math.min(r.innerHeight,t.bottom);for(let l=O.parentNode;l&&l!=i.body;)if(l.nodeType==1){let c=l,h=window.getComputedStyle(c);if((c.scrollHeight>c.clientHeight||c.scrollWidth>c.clientWidth)&&h.overflow!=\"visible\"){let f=c.getBoundingClientRect();n=Math.max(n,f.left),s=Math.min(s,f.right),a=Math.max(a,f.top),o=Math.min(l==O.parentNode?r.innerHeight:o,f.bottom)}l=h.position==\"absolute\"||h.position==\"fixed\"?c.offsetParent:c.parentNode}else if(l.nodeType==11)l=l.host;else break;return{left:n-t.left,right:Math.max(n,s)-t.left,top:a-(t.top+e),bottom:Math.max(a,o)-(t.top+e)}}function nS(O){let e=O.getBoundingClientRect(),t=O.ownerDocument.defaultView||window;return e.left<t.innerWidth&&e.right>0&&e.top<t.innerHeight&&e.bottom>0}function sS(O,e){let t=O.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Ai=class{constructor(e,t,i,r){this.from=e,this.to=t,this.size=i,this.displaySize=r}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i<e.length;i++){let r=e[i],n=t[i];if(r.from!=n.from||r.to!=n.to||r.size!=n.size)return!1}return!0}draw(e,t){return Y.replace({widget:new Na(this.displaySize*(t?e.scaleY:e.scaleX),t)}).range(this.from,this.to)}},Na=class extends _e{constructor(e,t){super(),this.size=e,this.vertical=t}eq(e){return e.size==this.size&&e.vertical==this.vertical}toDOM(){let e=document.createElement(\"div\");return this.vertical?e.style.height=this.size+\"px\":(e.style.width=this.size+\"px\",e.style.height=\"2px\",e.style.display=\"inline-block\"),e}get estimatedHeight(){return this.vertical?this.size:-1}},xn=class{constructor(e){this.state=e,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.scrollTop=0,this.scrolledToBottom=!1,this.scaleX=1,this.scaleY=1,this.scrollAnchorPos=0,this.scrollAnchorHeight=-1,this.scaler=Qf,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.defaultTextDirection=H.LTR,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1;let t=e.facet(go).some(i=>typeof i!=\"function\"&&i.class==\"cm-lineWrapping\");this.heightOracle=new La(t),this.stateDeco=e.facet(Fi).filter(i=>typeof i!=\"function\"),this.heightMap=De.empty().applyChanges(this.stateDeco,E.empty,this.heightOracle.setDoc(e.doc),[new ht(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Y.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let r=i?t.head:t.anchor;if(!e.some(({from:n,to:s})=>r>=n&&r<=s)){let{from:n,to:s}=this.lineBlockAt(r);e.push(new JO(n,s))}}return this.viewports=e.sort((i,r)=>i.from-r.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Qf:new Fa(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(zi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=this.state.facet(Fi).filter(c=>typeof c!=\"function\");let r=e.changedRanges,n=ht.extendWithRanges(r,iS(i,this.stateDeco,e?e.changes:Ze.empty(this.state.doc.length))),s=this.heightMap.height,a=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);df(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),n),(this.heightMap.height!=s||oi)&&(e.flags|=2),a?(this.scrollAnchorPos=e.changes.mapPos(a.from,-1),this.scrollAnchorHeight=a.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=s);let o=n.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.head<o.from||t.range.head>o.to)||!this.viewportIsAppropriate(o))&&(o=this.getViewport(0,t));let l=o.from!=this.viewport.from||o.to!=this.viewport.to;this.viewport=o,e.flags|=this.updateForViewport(),(l||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Hf)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),r=this.heightOracle,n=i.whiteSpace;this.defaultTextDirection=i.direction==\"rtl\"?H.RTL:H.LTR;let s=this.heightOracle.mustRefreshForWrapping(n),a=t.getBoundingClientRect(),o=s||this.mustMeasureContent||this.contentDOMHeight!=a.height;this.contentDOMHeight=a.height,this.mustMeasureContent=!1;let l=0,c=0;if(a.width&&a.height){let{scaleX:y,scaleY:X}=Vf(t,a);(y>.005&&Math.abs(this.scaleX-y)>.005||X>.005&&Math.abs(this.scaleY-X)>.005)&&(this.scaleX=y,this.scaleY=X,l|=16,s=o=!0)}let h=(parseInt(i.paddingTop)||0)*this.scaleY,f=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=h||this.paddingBottom!=f)&&(this.paddingTop=h,this.paddingBottom=f,l|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(o=!0),this.editorWidth=e.scrollDOM.clientWidth,l|=16);let u=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=u&&(this.scrollAnchorHeight=-1,this.scrollTop=u),this.scrolledToBottom=zf(e.scrollDOM);let Q=(this.printing?sS:rS)(t,this.paddingTop),$=Q.top-this.pixelViewport.top,p=Q.bottom-this.pixelViewport.bottom;this.pixelViewport=Q;let m=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(m!=this.inView&&(this.inView=m,m&&(o=!0)),!this.inView&&!this.scrollTarget&&!nS(e.dom))return 0;let g=a.width;if((this.contentDOMWidth!=g||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=a.width,this.editorHeight=e.scrollDOM.clientHeight,l|=16),o){let y=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(y)&&(s=!0),s||r.lineWrapping&&Math.abs(g-this.contentDOMWidth)>r.charWidth){let{lineHeight:X,charWidth:x,textHeight:k}=e.docView.measureTextSize();s=X>0&&r.refresh(n,X,x,k,Math.max(5,g/x),y),s&&(e.docView.minWidth=0,l|=16)}$>0&&p>0?c=Math.max($,p):$<0&&p<0&&(c=Math.min($,p)),df();for(let X of this.viewports){let x=X.from==this.viewport.from?y:e.docView.measureVisibleLineHeights(X);this.heightMap=(s?De.empty().applyChanges(this.stateDeco,E.empty,this.heightOracle,[new ht(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,s,new Ma(X.from,x))}oi&&(l|=2)}let P=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return P&&(l&2&&(l|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),l|=this.updateForViewport()),(l&2||P)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(s?[]:this.lineGaps,e)),l|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),l}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,n=this.heightOracle,{visibleTop:s,visibleBottom:a}=this,o=new JO(r.lineAt(s-i*1e3,oe.ByHeight,n,0,0).from,r.lineAt(a+(1-i)*1e3,oe.ByHeight,n,0,0).to);if(t){let{head:l}=t.range;if(l<o.from||l>o.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),h=r.lineAt(l,oe.ByPos,n,0,0),f;t.y==\"center\"?f=(h.top+h.bottom)/2-c/2:t.y==\"start\"||t.y==\"nearest\"&&l<o.from?f=h.top:f=h.bottom-c,o=new JO(r.lineAt(f-1e3/2,oe.ByHeight,n,0,0).from,r.lineAt(f+c+1e3/2,oe.ByHeight,n,0,0).to)}}return o}mapViewport(e,t){let i=t.mapPos(e.from,-1),r=t.mapPos(e.to,1);return new JO(this.heightMap.lineAt(i,oe.ByPos,this.heightOracle,0,0).from,this.heightMap.lineAt(r,oe.ByPos,this.heightOracle,0,0).to)}viewportIsAppropriate({from:e,to:t},i=0){if(!this.inView)return!0;let{top:r}=this.heightMap.lineAt(e,oe.ByPos,this.heightOracle,0,0),{bottom:n}=this.heightMap.lineAt(t,oe.ByPos,this.heightOracle,0,0),{visibleTop:s,visibleBottom:a}=this;return(e==0||r<=s-Math.max(10,Math.min(-i,250)))&&(t==this.state.doc.length||n>=a+Math.max(10,Math.min(i,250)))&&r>s-2*1e3&&n<a+2*1e3}mapLineGaps(e,t){if(!e.length||t.empty)return e;let i=[];for(let r of e)t.touchesRange(r.from,r.to)||i.push(new Ai(t.mapPos(r.from),t.mapPos(r.to),r.size,r.displaySize));return i}ensureLineGaps(e,t){let i=this.heightOracle.lineWrapping,r=i?1e4:2e3,n=r>>1,s=r<<1;if(this.defaultTextDirection!=H.LTR&&!i)return[];let a=[],o=(c,h,f,u)=>{if(h-c<n)return;let Q=this.state.selection.main,$=[Q.from];Q.empty||$.push(Q.to);for(let m of $)if(m>c&&m<h){o(c,m-10,f,u),o(m+10,h,f,u);return}let p=oS(e,m=>m.from>=f.from&&m.to<=f.to&&Math.abs(m.from-c)<n&&Math.abs(m.to-h)<n&&!$.some(g=>m.from<g&&m.to>g));if(!p){if(h<f.to&&t&&i&&t.visibleRanges.some(P=>P.from<=h&&P.to>=h)){let P=t.moveToLineBoundary(S.cursor(h),!1,!0).head;P>c&&(h=P)}let m=this.gapSize(f,c,h,u),g=i||m<2e6?m:2e6;p=new Ai(c,h,m,g)}a.push(p)},l=c=>{if(c.length<s||c.type!=Te.Text)return;let h=aS(c.from,c.to,this.stateDeco);if(h.total<s)return;let f=this.scrollTarget?this.scrollTarget.range.head:null,u,Q;if(i){let $=r/this.heightOracle.lineLength*this.heightOracle.lineHeight,p,m;if(f!=null){let g=nn(h,f),P=((this.visibleBottom-this.visibleTop)/2+$)/c.height;p=g-P,m=g+P}else p=(this.visibleTop-c.top-$)/c.height,m=(this.visibleBottom-c.top+$)/c.height;u=rn(h,p),Q=rn(h,m)}else{let $=h.total*this.heightOracle.charWidth,p=r*this.heightOracle.charWidth,m=0;if($>2e6)for(let x of e)x.from>=c.from&&x.from<c.to&&x.size!=x.displaySize&&x.from*this.heightOracle.charWidth+m<this.pixelViewport.left&&(m=x.size-x.displaySize);let g=this.pixelViewport.left+m,P=this.pixelViewport.right+m,y,X;if(f!=null){let x=nn(h,f),k=((P-g)/2+p)/$;y=x-k,X=x+k}else y=(g-p)/$,X=(P+p)/$;u=rn(h,y),Q=rn(h,X)}u>c.from&&o(c.from,u,c,h),Q<c.to&&o(Q,c.to,c,h)};for(let c of this.viewportLines)Array.isArray(c.type)?c.type.forEach(l):l(c);return a}gapSize(e,t,i,r){let n=nn(r,i)-nn(r,t);return this.heightOracle.lineWrapping?e.height*n:r.total*this.heightOracle.charWidth*n}updateLineGaps(e){Ai.same(e,this.lineGaps)||(this.lineGaps=e,this.lineGapDeco=Y.set(e.map(t=>t.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];M.spans(t,this.viewport.from,this.viewport.to,{span(n,s){i.push({from:n,to:s})},point(){}},20);let r=0;if(i.length!=this.visibleRanges.length)r=12;else for(let n=0;n<i.length&&!(r&8);n++){let s=this.visibleRanges[n],a=i[n];(s.from!=a.from||s.to!=a.to)&&(r|=4,e&&e.mapPos(s.from,-1)==a.from&&e.mapPos(s.to,1)==a.to||(r|=8))}return this.visibleRanges=i,r}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||zi(this.heightMap.lineAt(e,oe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||zi(this.heightMap.lineAt(this.scaler.fromDOM(e),oe.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return zi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},JO=class{constructor(e,t){this.from=e,this.to=t}};function aS(O,e,t){let i=[],r=O,n=0;return M.spans(t,O,e,{span(){},point(s,a){s>r&&(i.push({from:r,to:s}),n+=s-r),r=a}},20),r<e&&(i.push({from:r,to:e}),n+=e-r),{total:n,ranges:i}}function rn({total:O,ranges:e},t){if(t<=0)return e[0].from;if(t>=1)return e[e.length-1].to;let i=Math.floor(O*t);for(let r=0;;r++){let{from:n,to:s}=e[r],a=s-n;if(i<=a)return n+i;i-=a}}function nn(O,e){let t=0;for(let{from:i,to:r}of O.ranges){if(e<=r){t+=e-i;break}t+=r-i}return t/O.total}function oS(O,e){for(let t of O)if(e(t))return t}var Qf={toDOM(O){return O},fromDOM(O){return O},scale:1,eq(O){return O==this}},Fa=class O{constructor(e,t,i){let r=0,n=0,s=0;this.viewports=i.map(({from:a,to:o})=>{let l=t.lineAt(a,oe.ByPos,e,0,0).top,c=t.lineAt(o,oe.ByPos,e,0,0).bottom;return r+=c-l,{from:a,to:o,top:l,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let a of this.viewports)a.domTop=s+(a.top-n)*this.scale,s=a.domBottom=a.domTop+(a.bottom-a.top),n=a.bottom}toDOM(e){for(let t=0,i=0,r=0;;t++){let n=t<this.viewports.length?this.viewports[t]:null;if(!n||e<n.top)return r+(e-i)*this.scale;if(e<=n.bottom)return n.domTop+(e-n.top);i=n.bottom,r=n.domBottom}}fromDOM(e){for(let t=0,i=0,r=0;;t++){let n=t<this.viewports.length?this.viewports[t]:null;if(!n||e<n.domTop)return i+(e-r)/this.scale;if(e<=n.domBottom)return n.top+(e-n.domTop);i=n.bottom,r=n.domBottom}}eq(e){return e instanceof O?this.scale==e.scale&&this.viewports.length==e.viewports.length&&this.viewports.every((t,i)=>t.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}};function zi(O,e){if(e.scale==1)return O;let t=e.toDOM(O.top),i=e.toDOM(O.bottom);return new lt(O.from,O.length,t,i-t,Array.isArray(O._content)?O._content.map(r=>zi(r,e)):O._content)}var sn=Z.define({combine:O=>O.join(\" \")}),Ha=Z.define({combine:O=>O.indexOf(!0)>-1}),Ka=Ot.newName(),Pd=Ot.newName(),Sd=Ot.newName(),Xd={\"&light\":\".\"+Pd,\"&dark\":\".\"+Sd};function Ja(O,e,t){return new Ot(e,{finish(i){return/&/.test(i)?i.replace(/&\\w*/,r=>{if(r==\"&\")return O;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):O+\" \"+i}})}var lS=Ja(\".\"+Ka,{\"&\":{position:\"relative !important\",boxSizing:\"border-box\",\"&.cm-focused\":{outline:\"1px dotted #212121\"},display:\"flex !important\",flexDirection:\"column\"},\".cm-scroller\":{display:\"flex !important\",alignItems:\"flex-start !important\",fontFamily:\"monospace\",lineHeight:1.4,height:\"100%\",overflowX:\"auto\",position:\"relative\",zIndex:0,overflowAnchor:\"none\"},\".cm-content\":{margin:0,flexGrow:2,flexShrink:0,display:\"block\",whiteSpace:\"pre\",wordWrap:\"normal\",boxSizing:\"border-box\",minHeight:\"100%\",padding:\"4px 0\",outline:\"none\",\"&[contenteditable=true]\":{WebkitUserModify:\"read-write-plaintext-only\"}},\".cm-lineWrapping\":{whiteSpace_fallback:\"pre-wrap\",whiteSpace:\"break-spaces\",wordBreak:\"break-word\",overflowWrap:\"anywhere\",flexShrink:1},\"&light .cm-content\":{caretColor:\"black\"},\"&dark .cm-content\":{caretColor:\"white\"},\".cm-line\":{display:\"block\",padding:\"0 2px 0 6px\"},\".cm-layer\":{position:\"absolute\",left:0,top:0,contain:\"size style\",\"& > *\":{position:\"absolute\"}},\"&light .cm-selectionBackground\":{background:\"#d9d9d9\"},\"&dark .cm-selectionBackground\":{background:\"#222\"},\"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#d7d4f0\"},\"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\":{background:\"#233\"},\".cm-cursorLayer\":{pointerEvents:\"none\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer\":{animation:\"steps(1) cm-blink 1.2s infinite\"},\"@keyframes cm-blink\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\"@keyframes cm-blink2\":{\"0%\":{},\"50%\":{opacity:0},\"100%\":{}},\".cm-cursor, .cm-dropCursor\":{borderLeft:\"1.2px solid black\",marginLeft:\"-0.6px\",pointerEvents:\"none\"},\".cm-cursor\":{display:\"none\"},\"&dark .cm-cursor\":{borderLeftColor:\"#ddd\"},\".cm-dropCursor\":{position:\"absolute\"},\"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\":{display:\"block\"},\".cm-iso\":{unicodeBidi:\"isolate\"},\".cm-announced\":{position:\"fixed\",top:\"-10000px\"},\"@media print\":{\".cm-announced\":{display:\"none\"}},\"&light .cm-activeLine\":{backgroundColor:\"#cceeff44\"},\"&dark .cm-activeLine\":{backgroundColor:\"#99eeff33\"},\"&light .cm-specialChar\":{color:\"red\"},\"&dark .cm-specialChar\":{color:\"#f78\"},\".cm-gutters\":{flexShrink:0,display:\"flex\",height:\"100%\",boxSizing:\"border-box\",zIndex:200},\".cm-gutters-before\":{insetInlineStart:0},\".cm-gutters-after\":{insetInlineEnd:0},\"&light .cm-gutters\":{backgroundColor:\"#f5f5f5\",color:\"#6c6c6c\",border:\"0px solid #ddd\",\"&.cm-gutters-before\":{borderRightWidth:\"1px\"},\"&.cm-gutters-after\":{borderLeftWidth:\"1px\"}},\"&dark .cm-gutters\":{backgroundColor:\"#333338\",color:\"#ccc\"},\".cm-gutter\":{display:\"flex !important\",flexDirection:\"column\",flexShrink:0,boxSizing:\"border-box\",minHeight:\"100%\",overflow:\"hidden\"},\".cm-gutterElement\":{boxSizing:\"border-box\"},\".cm-lineNumbers .cm-gutterElement\":{padding:\"0 3px 0 5px\",minWidth:\"20px\",textAlign:\"right\",whiteSpace:\"nowrap\"},\"&light .cm-activeLineGutter\":{backgroundColor:\"#e2f2ff\"},\"&dark .cm-activeLineGutter\":{backgroundColor:\"#222227\"},\".cm-panels\":{boxSizing:\"border-box\",position:\"sticky\",left:0,right:0,zIndex:300},\"&light .cm-panels\":{backgroundColor:\"#f5f5f5\",color:\"black\"},\"&light .cm-panels-top\":{borderBottom:\"1px solid #ddd\"},\"&light .cm-panels-bottom\":{borderTop:\"1px solid #ddd\"},\"&dark .cm-panels\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-dialog\":{padding:\"2px 19px 4px 6px\",position:\"relative\",\"& label\":{fontSize:\"80%\"}},\".cm-dialog-close\":{position:\"absolute\",top:\"3px\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",fontSize:\"14px\",padding:\"0\"},\".cm-tab\":{display:\"inline-block\",overflow:\"hidden\",verticalAlign:\"bottom\"},\".cm-widgetBuffer\":{verticalAlign:\"text-top\",height:\"1em\",width:0,display:\"inline\"},\".cm-placeholder\":{color:\"#888\",display:\"inline-block\",verticalAlign:\"top\",userSelect:\"none\"},\".cm-highlightSpace\":{backgroundImage:\"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",backgroundPosition:\"center\"},\".cm-highlightTab\":{backgroundImage:`url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,backgroundSize:\"auto 100%\",backgroundPosition:\"right 90%\",backgroundRepeat:\"no-repeat\"},\".cm-trailingSpace\":{backgroundColor:\"#ff332255\"},\".cm-button\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",padding:\".2em 1em\",borderRadius:\"1px\"},\"&light .cm-button\":{backgroundImage:\"linear-gradient(#eff1f5, #d9d9df)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#b4b4b4, #d0d3d6)\"}},\"&dark .cm-button\":{backgroundImage:\"linear-gradient(#393939, #111)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#111, #333)\"}},\".cm-textfield\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",border:\"1px solid silver\",padding:\".2em .5em\"},\"&light .cm-textfield\":{backgroundColor:\"white\"},\"&dark .cm-textfield\":{border:\"1px solid #555\",backgroundColor:\"inherit\"}},Xd),cS={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Qa=v.ie&&v.ie_version<=11,eo=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new ba,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(v.ie&&v.ie_version<=11||v.ios&&e.composing)&&t.some(i=>i.type==\"childList\"&&i.removedNodes.length||i.type==\"characterData\"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&v.android&&e.constructor.EDIT_CONTEXT!==!1&&!(v.chrome&&v.chrome_version<126)&&(this.editContext=new to(e),e.state.facet(_t)&&(e.contentDOM.editContext=this.editContext.editContext)),Qa&&(this.onCharData=t=>{this.queue.push({target:t.target,type:\"characterData\",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia(\"print\")),typeof ResizeObserver==\"function\"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)<Date.now()-75&&this.onResize()}),this.resizeScroll.observe(e.scrollDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver==\"function\"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent(\"Event\")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent(\"Event\"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers(\"scroll\",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type==\"change\"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,r=this.selectionRange;if(i.state.facet(_t)?i.root.activeElement!=this.dom:!cn(this.dom,r))return;let n=r.anchorNode&&i.docView.tile.nearest(r.anchorNode);if(n&&n.isWidget()&&n.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(v.ie&&v.ie_version<=11||v.android&&v.chrome)&&!i.state.selection.main.empty&&r.focusNode&&Wi(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Bi(e.root);if(!t)return!1;let i=v.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&hS(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let r=cn(this.dom,i);return r&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime<Date.now()-300&&sP(this.dom,i)?(this.view.inputState.lastFocusTime=0,e.docView.updateSelection(),!1):(this.selectionRange.setRange(i),r&&(this.selectionChanged=!0),!0)}setSelectionRange(e,t){this.selectionRange.set(e.node,e.offset,t.node,t.offset),this.selectionChanged=!1}clearSelectionRange(){this.selectionRange.set(null,0,null,0)}listenForScroll(){this.parentCheck=-1;let e=0,t=null;for(let i=this.dom;i;)if(i.nodeType==1)!t&&e<this.scrollTargets.length&&this.scrollTargets[e]==i?e++:t||(t=this.scrollTargets.slice(0,e)),t&&t.push(i),i=i.assignedSlot||i.parentNode;else if(i.nodeType==11)i=i.host;else break;if(e<this.scrollTargets.length&&!t&&(t=this.scrollTargets.slice(0,e)),t){for(let i of this.scrollTargets)i.removeEventListener(\"scroll\",this.onScroll);for(let i of this.scrollTargets=t)i.addEventListener(\"scroll\",this.onScroll)}}ignore(e){if(!this.active)return e();try{return this.stop(),e()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,cS),Qa&&this.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),Qa&&this.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(e,t){var i;if(!this.delayedAndroidKey){let r=()=>{let n=this.delayedAndroidKey;n&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=n.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&n.force&&ii(this.dom,n.key,n.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e==\"Enter\")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange<Date.now()-50||!!(!((i=this.delayedAndroidKey)===null||i===void 0)&&i.force)})}clearDelayedAndroidKey(){this.win.cancelAnimationFrame(this.flushingAndroidKey),this.delayedAndroidKey=null,this.flushingAndroidKey=-1}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=this.view.win.requestAnimationFrame(()=>{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,r=!1;for(let n of e){let s=this.readMutation(n);s&&(s.typeOver&&(r=!0),t==-1?{from:t,to:i}=s:(t=Math.min(s.from,t),i=Math.max(s.to,i)))}return{from:t,to:i,typeOver:r}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),r=this.selectionChanged&&cn(this.dom,this.selectionRange);if(e<0&&!r)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let n=new Ca(this.view,e,t,i);return this.view.docView.domChanged={newSel:n.newSel?n.newSel.main:null},n}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,r=cd(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!t.newSel.main.eq(this.view.state.selection.main))&&this.view.update([]),r}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type==\"attributes\"),e.type==\"childList\"){let i=$f(t,e.previousSibling||e.target.previousSibling,-1),r=$f(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type==\"characterData\"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener(\"change\",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener(\"beforeprint\",this.onPrint),e.addEventListener(\"scroll\",this.onScroll),e.document.addEventListener(\"selectionchange\",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener(\"scroll\",this.onScroll),e.removeEventListener(\"resize\",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener(\"change\",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener(\"beforeprint\",this.onPrint),e.document.removeEventListener(\"selectionchange\",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(_t)!=e.state.facet(_t)&&(e.view.contentDOM.editContext=e.state.facet(_t)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let r of this.scrollTargets)r.removeEventListener(\"scroll\",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function $f(O,e,t){for(;e;){let i=de.get(e);if(i&&i.parent==O)return i;let r=e.parentNode;e=r!=O.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function pf(O,e){let t=e.startContainer,i=e.startOffset,r=e.endContainer,n=e.endOffset,s=O.docView.domAtPos(O.state.selection.main.anchor,1);return Wi(s.node,s.offset,r,n)&&([t,i,r,n]=[r,n,t,i]),{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:n}}function hS(O,e){if(e.getComposedRanges){let r=e.getComposedRanges(O.root)[0];if(r)return pf(O,r)}let t=null;function i(r){r.preventDefault(),r.stopImmediatePropagation(),t=r.getTargetRanges()[0]}return O.contentDOM.addEventListener(\"beforeinput\",i,!0),O.dom.ownerDocument.execCommand(\"indent\"),O.contentDOM.removeEventListener(\"beforeinput\",i,!0),t?pf(O,t):null}var to=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let r=e.state.selection.main,{anchor:n,head:s}=r,a=this.toEditorPos(i.updateRangeStart),o=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:a,drifted:!1});let l=o-a>i.text.length;a==this.from&&n<this.from?a=n:o==this.to&&n>this.to&&(o=n);let c=hd(e.state.sliceDoc(a,o),i.text,(l?r.from:r.to)-a,l?\"end\":null);if(!c){let f=S.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));f.main.eq(r)||e.dispatch({selection:f,userEvent:\"select\"});return}let h={from:c.from+a,to:c.toA+a,insert:E.of(i.text.slice(c.from,c.toB).split(`\n`))};if((v.mac||v.android)&&h.from==s-1&&/^\\. ?$/.test(i.text)&&e.contentDOM.getAttribute(\"autocorrect\")==\"off\"&&(h={from:a,to:o,insert:E.of([i.text.replace(\".\",\" \")])}),this.pendingContextChange=h,!e.state.readOnly){let f=this.to-this.from+(h.to-h.from+h.insert.length);So(e,h,S.single(this.toEditorPos(i.selectionStart,f),this.toEditorPos(i.selectionEnd,f)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),h.from<h.to&&!h.insert.length&&e.inputState.composing>=0&&!/[\\\\p{Alphabetic}\\\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let r=[],n=null;for(let s=this.toEditorPos(i.rangeStart),a=this.toEditorPos(i.rangeEnd);s<a;s++){let o=e.coordsForChar(s);n=o&&new DOMRect(o.left,o.top,o.right-o.left,o.bottom-o.top)||n||new DOMRect,r.push(n)}t.updateCharacterBounds(i.rangeStart,r)},this.handlers.textformatupdate=i=>{let r=[];for(let n of i.getTextFormats()){let s=n.underlineStyle,a=n.underlineThickness;if(!/none/i.test(s)&&!/none/i.test(a)){let o=this.toEditorPos(n.rangeStart),l=this.toEditorPos(n.rangeEnd);if(o<l){let c=`text-decoration: underline ${/^[a-z]/.test(s)?s+\" \":s==\"Dashed\"?\"dashed \":s==\"Squiggle\"?\"wavy \":\"\"}${/thin/i.test(a)?1:2}px`;r.push(Y.mark({attributes:{style:c}}).range(o,l))}}}e.dispatch({effects:Jf.of(Y.set(r))})},this.handlers.compositionstart=()=>{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let r=Bi(i.root);r&&r.rangeCount&&this.editContext.updateSelectionBounds(r.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,r=this.pendingContextChange;return e.changes.iterChanges((n,s,a,o,l)=>{if(i)return;let c=l.length-(s-n);if(r&&s>=r.to)if(r.from==n&&r.to==s&&r.insert.eq(l)){r=this.pendingContextChange=null,t+=c,this.to+=c;return}else r=null,this.revertPending(e.state);if(n+=t,s+=t,s<=this.from)this.from+=c,this.to+=c;else if(n<this.to){if(n<this.from||s>this.to||this.to-this.from+l.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(n),this.toContextPos(s),l.toString()),this.to+=c}t+=c}),r&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(r=>!r.isUserEvent(\"input.type\")&&r.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),r=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=r)&&this.editContext.updateSelection(i,r)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to<e.doc.length&&this.to-t<500||this.to-this.from>1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},T=class O{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement(\"div\"),this.scrollDOM=document.createElement(\"div\"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className=\"cm-scroller\",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement(\"div\"),this.announceDOM.className=\"cm-announced\",this.announceDOM.setAttribute(\"aria-live\",\"polite\"),this.dom=document.createElement(\"div\"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(r=>r.forEach(n=>i(n,this)))||(r=>this.update(r)),this.dispatch=this.dispatch.bind(this),this._root=e.root||nP(e.parent)||document,this.viewState=new xn(e.state||I.create(e)),e.scrollTo&&e.scrollTo.is(en)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(KO).map(r=>new Ci(r));for(let r of this.plugins)r.update(this);this.observer=new eo(this),this.inputState=new Ga(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Xn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>this.requestMeasure())}dispatch(...e){let t=e.length==1&&e[0]instanceof Qe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");let t=!1,i=!1,r,n=this.state;for(let f of e){if(f.startState!=n)throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");n=f.state}if(this.destroyed){this.viewState.state=n;return}let s=this.hasFocus,a=0,o=null;e.some(f=>f.annotation(pd))?(this.inputState.notifiedFocused=s,a=1):s!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=s,o=md(n,s),o||(a=1));let l=this.observer.delayedAndroidKey,c=null;if(l?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(n.doc)||!this.state.selection.eq(n.selection))&&(c=null)):this.observer.clear(),n.facet(I.phrases)!=this.state.facet(I.phrases))return this.setState(n);r=Pn.create(this,n,e),r.flags|=a;let h=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(h&&(h=h.map(f.changes)),f.scrollIntoView){let{main:u}=f.state.selection;h=new ji(u.empty?u:S.cursor(u.head,u.head>u.anchor?-1:1))}for(let u of f.effects)u.is(en)&&(h=u.value.clip(this.state))}this.viewState.update(r,h),this.bidiCache=kn.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(Vi)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent(\"select.pointer\")))}finally{this.updateState=0}if(r.startState.facet(sn)!=r.state.facet(sn)&&(this.viewState.mustMeasureContent=!0),(t||i||h||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!r.empty)for(let f of this.state.facet(wa))try{f(r)}catch(u){Xe(this.state,u,\"update listener\")}(o||c)&&Promise.resolve().then(()=>{o&&this.state==o.startState&&this.dispatch(o),c&&!cd(this,c)&&l.force&&ii(this.contentDOM,l.key,l.keyCode)})}setState(e){if(this.updateState!=0)throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new xn(e),this.plugins=e.facet(KO).map(i=>new Ci(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Xn(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(KO),i=e.state.facet(KO);if(t!=i){let r=[];for(let n of i){let s=t.indexOf(n);if(s<0)r.push(new Ci(n));else{let a=this.plugins[s];a.mustUpdate=e,r.push(a)}}for(let n of this.plugins)n.mustUpdate!=e&&n.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r<this.plugins.length;r++)this.plugins[r].update(this);t!=i&&this.inputState.ensureHandlers(this.plugins)}docViewUpdate(){for(let e of this.plugins){let t=e.value;if(t&&t.docViewUpdate)try{t.docViewUpdate(this)}catch(i){Xe(this.state,i,\"doc view update listener\")}}}measure(e=!0){if(this.destroyed)return;if(this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.scrollDOM,r=i.scrollTop*this.scaleY,{scrollAnchorPos:n,scrollAnchorHeight:s}=this.viewState;Math.abs(r-this.viewState.scrollTop)>1&&(s=-1),this.viewState.scrollAnchorHeight=-1;try{for(let a=0;;a++){if(s<0)if(zf(i))n=-1,s=this.viewState.heightMap.height;else{let u=this.viewState.scrollAnchorAt(r);n=u.from,s=u.top}this.updateState=1;let o=this.viewState.measure(this);if(!o&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(a>5){console.warn(this.measureRequests.length?\"Measure loop restarted more than 5 times\":\"Viewport failed to stabilize\");break}let l=[];o&4||([this.measureRequests,l]=[l,this.measureRequests]);let c=l.map(u=>{try{return u.read(this)}catch(Q){return Xe(this.state,Q),mf}}),h=Pn.create(this,this.state,[]),f=!1;h.flags|=o,t?t.flags|=o:t=h,this.updateState=2,h.empty||(this.updatePlugins(h),this.inputState.update(h),this.updateAttrs(),f=this.docView.update(h),f&&this.docViewUpdate());for(let u=0;u<l.length;u++)if(c[u]!=mf)try{let Q=l[u];Q.write&&Q.write(c[u],this)}catch(Q){Xe(this.state,Q)}if(f&&this.docView.updateSelection(!0),!h.viewportChanged&&this.measureRequests.length==0){if(this.viewState.editorHeight)if(this.viewState.scrollTarget){this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,s=-1;continue}else{let Q=(n<0?this.viewState.heightMap.height:this.viewState.lineBlockAt(n).top)-s;if(Q>1||Q<-1){r=r+Q,i.scrollTop=r/this.scaleY,s=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let a of this.state.facet(wa))a(t)}get themeClasses(){return Ka+\" \"+(this.state.facet(Ha)?Sd:Pd)+\" \"+this.state.facet(sn)}updateAttrs(){let e=gf(this,ed,{class:\"cm-editor\"+(this.hasFocus?\" cm-focused \":\" \")+this.themeClasses}),t={spellcheck:\"false\",autocorrect:\"off\",autocapitalize:\"off\",writingsuggestions:\"false\",translate:\"no\",contenteditable:this.state.facet(_t)?\"true\":\"false\",class:\"cm-content\",style:`${v.tabSize}: ${this.state.tabSize}`,role:\"textbox\",\"aria-multiline\":\"true\"};this.state.readOnly&&(t[\"aria-readonly\"]=\"true\"),gf(this,go,t);let i=this.observer.ignore(()=>{let r=Fh(this.contentDOM,this.contentAttrs,t),n=Fh(this.dom,this.editorAttrs,e);return r||n});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let r of i.effects)if(r.is(O.announce)){t&&(this.announceDOM.textContent=\"\"),t=!1;let n=this.announceDOM.appendChild(document.createElement(\"div\"));n.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(Vi);let e=this.state.facet(O.cspNonce);Ot.mount(this.root,this.styleModules.concat(lS).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error(\"Reading the editor layout isn't allowed during an update\");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;t<this.measureRequests.length;t++)if(this.measureRequests[t].key===e.key){this.measureRequests[t]=e;return}}this.measureRequests.push(e)}}plugin(e){let t=this.pluginMap.get(e);return(t===void 0||t&&t.plugin!=e)&&this.pluginMap.set(e,t=this.plugins.find(i=>i.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return ua(this,e,Of(this,e,t,i))}moveByGroup(e,t){return ua(this,e,Of(this,e,t,i=>VP(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),r=this.textDirectionAt(e.from),n=i[t?i.length-1:0];return S.cursor(n.side(t,r)+e.from,n.forward(!t,r)?1:-1)}moveToLineBoundary(e,t,i=!0){return RP(this,e,t,i)}moveVertically(e,t,i){return ua(this,e,qP(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Wa(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Wa(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let r=this.state.doc.lineAt(e),n=this.bidiSpans(r),s=n[ct.find(n,e-r.from,-1,t)];return gn(i,s.dir==H.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Ff)||e<this.viewport.from||e>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>fS)return Ef(e.length);let t=this.textDirectionAt(e.from),i;for(let n of this.bidiCache)if(n.from==e.from&&n.dir==t&&(n.fresh||Gf(n.isolates,i=Jh(this,e))))return n.order;i||(i=Jh(this,e));let r=dP(e.text,t,i);return this.bidiCache.push(new kn(e.from,e.to,t,i,!0,r)),r}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||v.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{qf(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return en.of(new ji(typeof e==\"number\"?S.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return en.of(new ji(S.cursor(i.from),\"start\",\"start\",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e==\"boolean\"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return he.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return he.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=Ot.newName(),r=[sn.of(i),Vi.of(Ja(`.${i}`,e))];return t&&t.dark&&r.push(Ha.of(!0)),r}static baseTheme(e){return ze.lowest(Vi.of(Ja(\".\"+Ka,e,Xd)))}static findFromDOM(e){var t;let i=e.querySelector(\".cm-content\"),r=i&&de.get(i)||de.get(e);return((t=r?.root)===null||t===void 0?void 0:t.view)||null}};T.styleModule=Vi;T.inputHandler=Bf;T.clipboardInputFilter=po;T.clipboardOutputFilter=mo;T.scrollHandler=Kf;T.focusChangeEffect=Nf;T.perLineTextDirection=Ff;T.exceptionSink=If;T.updateListener=wa;T.editable=_t;T.mouseSelectionStyle=Df;T.dragMovesSelection=Mf;T.clickAddsSelectionRange=Lf;T.decorations=Fi;T.blockWrappers=td;T.outerDecorations=Od;T.atomicRanges=Ji;T.bidiIsolatedRanges=id;T.scrollMargins=rd;T.darkTheme=Ha;T.cspNonce=Z.define({combine:O=>O.length?O[0]:\"\"});T.contentAttributes=go;T.editorAttributes=ed;T.lineWrapping=T.contentAttributes.of({class:\"cm-lineWrapping\"});T.announce=V.define();var fS=4096,mf={},kn=class O{constructor(e,t,i,r,n,s){this.from=e,this.to=t,this.dir=i,this.isolates=r,this.fresh=n,this.order=s}static update(e,t){if(t.empty&&!e.some(n=>n.fresh))return e;let i=[],r=e.length?e[e.length-1].dir:H.LTR;for(let n=Math.max(0,e.length-10);n<e.length;n++){let s=e[n];s.dir==r&&!t.touchesRange(s.from,s.to)&&i.push(new O(t.mapPos(s.from,1),t.mapPos(s.to,-1),s.dir,s.isolates,!1,s.order))}return i}};function gf(O,e,t){for(let i=O.state.facet(e),r=i.length-1;r>=0;r--){let n=i[r],s=typeof n==\"function\"?n(O):n;s&&uo(s,t)}return t}var dS=v.mac?\"mac\":v.windows?\"win\":v.linux?\"linux\":\"key\";function uS(O,e){let t=O.split(/-(?!$)/),i=t[t.length-1];i==\"Space\"&&(i=\" \");let r,n,s,a;for(let o=0;o<t.length-1;++o){let l=t[o];if(/^(cmd|meta|m)$/i.test(l))a=!0;else if(/^a(lt)?$/i.test(l))r=!0;else if(/^(c|ctrl|control)$/i.test(l))n=!0;else if(/^s(hift)?$/i.test(l))s=!0;else if(/^mod$/i.test(l))e==\"mac\"?a=!0:n=!0;else throw new Error(\"Unrecognized modifier name: \"+l)}return r&&(i=\"Alt-\"+i),n&&(i=\"Ctrl-\"+i),a&&(i=\"Meta-\"+i),s&&(i=\"Shift-\"+i),i}function an(O,e,t){return e.altKey&&(O=\"Alt-\"+O),e.ctrlKey&&(O=\"Ctrl-\"+O),e.metaKey&&(O=\"Meta-\"+O),t!==!1&&e.shiftKey&&(O=\"Shift-\"+O),O}var QS=ze.default(T.domEventHandlers({keydown(O,e){return yd(Td(e.state),O,e,\"editor\")}})),Xt=Z.define({enables:QS}),Pf=new WeakMap;function Td(O){let e=O.facet(Xt),t=Pf.get(e);return t||Pf.set(e,t=pS(e.reduce((i,r)=>i.concat(r),[]))),t}function bd(O,e,t){return yd(Td(O.state),e,O,t)}var Dt=null,$S=4e3;function pS(O,e=dS){let t=Object.create(null),i=Object.create(null),r=(s,a)=>{let o=i[s];if(o==null)i[s]=a;else if(o!=a)throw new Error(\"Key binding \"+s+\" is used both as a regular binding and as a multi-stroke prefix\")},n=(s,a,o,l,c)=>{var h,f;let u=t[s]||(t[s]=Object.create(null)),Q=a.split(/ (?!$)/).map(m=>uS(m,e));for(let m=1;m<Q.length;m++){let g=Q.slice(0,m).join(\" \");r(g,!0),u[g]||(u[g]={preventDefault:!0,stopPropagation:!1,run:[P=>{let y=Dt={view:P,prefix:g,scope:s};return setTimeout(()=>{Dt==y&&(Dt=null)},$S),!0}]})}let $=Q.join(\" \");r($,!1);let p=u[$]||(u[$]={preventDefault:!1,stopPropagation:!1,run:((f=(h=u._any)===null||h===void 0?void 0:h.run)===null||f===void 0?void 0:f.slice())||[]});o&&p.run.push(o),l&&(p.preventDefault=!0),c&&(p.stopPropagation=!0)};for(let s of O){let a=s.scope?s.scope.split(\" \"):[\"editor\"];if(s.any)for(let l of a){let c=t[l]||(t[l]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:h}=s;for(let f in c)c[f].run.push(u=>h(u,Oo))}let o=s[e]||s.key;if(o)for(let l of a)n(l,o,s.run,s.preventDefault,s.stopPropagation),s.shift&&n(l,\"Shift-\"+o,s.shift,s.preventDefault,s.stopPropagation)}return t}var Oo=null;function yd(O,e,t,i){Oo=e;let r=Mh(e),n=Se(r,0),s=Me(n)==r.length&&r!=\" \",a=\"\",o=!1,l=!1,c=!1;Dt&&Dt.view==t&&Dt.scope==i&&(a=Dt.prefix+\" \",dd.indexOf(e.keyCode)<0&&(l=!0,Dt=null));let h=new Set,f=p=>{if(p){for(let m of p.run)if(!h.has(m)&&(h.add(m),m(t)))return p.stopPropagation&&(c=!0),!0;p.preventDefault&&(p.stopPropagation&&(c=!0),l=!0)}return!1},u=O[i],Q,$;return u&&(f(u[a+an(r,e,!s)])?o=!0:s&&(e.altKey||e.metaKey||e.ctrlKey)&&!(v.windows&&e.ctrlKey&&e.altKey)&&!(v.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(Q=Yt[e.keyCode])&&Q!=r?(f(u[a+an(Q,e,!0)])||e.shiftKey&&($=HO[e.keyCode])!=r&&$!=Q&&f(u[a+an($,e,!1)]))&&(o=!0):s&&e.shiftKey&&f(u[a+an(r,e,!0)])&&(o=!0),!o&&f(u._any)&&(o=!0)),l&&(o=!0),o&&c&&e.stopPropagation(),Oo=null,o}var Hi=class O{constructor(e,t,i,r,n){this.className=e,this.left=t,this.top=i,this.width=r,this.height=n}draw(){let e=document.createElement(\"div\");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+\"px\",e.style.top=this.top+\"px\",this.width!=null&&(e.style.width=this.width+\"px\"),e.style.height=this.height+\"px\"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let r=e.coordsAtPos(i.head,i.assoc||1);if(!r)return[];let n=xd(e);return[new O(t,r.left-n.left,r.top-n.top,null,r.bottom-r.top)]}else return mS(e,t,i)}};function xd(O){let e=O.scrollDOM.getBoundingClientRect();return{left:(O.textDirection==H.LTR?e.left:e.right-O.scrollDOM.clientWidth*O.scaleX)-O.scrollDOM.scrollLeft*O.scaleX,top:e.top-O.scrollDOM.scrollTop*O.scaleY}}function Sf(O,e,t,i){let r=O.coordsAtPos(e,t*2);if(!r)return i;let n=O.dom.getBoundingClientRect(),s=(r.top+r.bottom)/2,a=O.posAtCoords({x:n.left+1,y:s}),o=O.posAtCoords({x:n.right-1,y:s});return a==null||o==null?i:{from:Math.max(i.from,Math.min(a,o)),to:Math.min(i.to,Math.max(a,o))}}function mS(O,e,t){if(t.to<=O.viewport.from||t.from>=O.viewport.to)return[];let i=Math.max(t.from,O.viewport.from),r=Math.min(t.to,O.viewport.to),n=O.textDirection==H.LTR,s=O.contentDOM,a=s.getBoundingClientRect(),o=xd(O),l=s.querySelector(\".cm-line\"),c=l&&window.getComputedStyle(l),h=a.left+(c?parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)):0),f=a.right-(c?parseInt(c.paddingRight):0),u=Ua(O,i,1),Q=Ua(O,r,-1),$=u.type==Te.Text?u:null,p=Q.type==Te.Text?Q:null;if($&&(O.lineWrapping||u.widgetLineBreaks)&&($=Sf(O,i,1,$)),p&&(O.lineWrapping||Q.widgetLineBreaks)&&(p=Sf(O,r,-1,p)),$&&p&&$.from==p.from&&$.to==p.to)return g(P(t.from,t.to,$));{let X=$?P(t.from,null,$):y(u,!1),x=p?P(null,t.to,p):y(Q,!0),k=[];return($||u).to<(p||Q).from-($&&p?1:0)||u.widgetLineBreaks>1&&X.bottom+O.defaultLineHeight/2<x.top?k.push(m(h,X.bottom,f,x.top)):X.bottom<x.top&&O.elementAtHeight((X.bottom+x.top)/2).type==Te.Text&&(X.bottom=x.top=(X.bottom+x.top)/2),g(X).concat(k).concat(g(x))}function m(X,x,k,j){return new Hi(e,X-o.left,x-o.top,k-X,j-x)}function g({top:X,bottom:x,horizontal:k}){let j=[];for(let A=0;A<k.length;A+=2)j.push(m(k[A],X,k[A+1],x));return j}function P(X,x,k){let j=1e9,A=-1e9,ie=[];function G(B,ae,we,Ee,mt){let Pe=O.coordsAtPos(B,B==k.to?-2:2),Je=O.coordsAtPos(we,we==k.from?2:-2);!Pe||!Je||(j=Math.min(Pe.top,Je.top,j),A=Math.max(Pe.bottom,Je.bottom,A),mt==H.LTR?ie.push(n&&ae?h:Pe.left,n&&Ee?f:Je.right):ie.push(!n&&Ee?h:Je.left,!n&&ae?f:Pe.right))}let q=X??k.from,K=x??k.to;for(let B of O.visibleRanges)if(B.to>q&&B.from<K)for(let ae=Math.max(B.from,q),we=Math.min(B.to,K);;){let Ee=O.state.doc.lineAt(ae);for(let mt of O.bidiSpans(Ee)){let Pe=mt.from+Ee.from,Je=mt.to+Ee.from;if(Pe>=we)break;Je>ae&&G(Math.max(Pe,ae),X==null&&Pe<=q,Math.min(Je,we),x==null&&Je>=K,mt.dir)}if(ae=Ee.to+1,ae>=we)break}return ie.length==0&&G(q,X==null,K,x==null,O.textDirection),{top:j,bottom:A,horizontal:ie}}function y(X,x){let k=a.top+(x?X.top:X.bottom);return{top:k,bottom:k,horizontal:[]}}}function gS(O,e){return O.constructor==e.constructor&&O.eq(e)}var io=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement(\"div\")),this.dom.classList.add(\"cm-layer\"),t.above&&this.dom.classList.add(\"cm-layer-above\"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute(\"aria-hidden\",\"true\"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(dn)!=e.state.facet(dn)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(dn);for(;t<i.length&&i[t]!=this.layer;)t++;this.dom.style.zIndex=String((this.layer.above?150:-1)-t)}measure(){return this.layer.markers(this.view)}scale(){let{scaleX:e,scaleY:t}=this.view;(e!=this.scaleX||t!=this.scaleY)&&(this.scaleX=e,this.scaleY=t,this.dom.style.transform=`scale(${1/e}, ${1/t})`)}draw(e){if(e.length!=this.drawn.length||e.some((t,i)=>!gS(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let r of e)r.update&&t&&r.constructor&&this.drawn[i].constructor&&r.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(r.draw(),t);for(;t;){let r=t.nextSibling;t.remove(),t=r}this.drawn=e,v.safari&&v.safari_version>=26&&(this.dom.style.display=this.dom.firstChild?\"\":\"none\")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},dn=Z.define();function kd(O){return[he.define(e=>new io(e,O)),dn.of(O)]}var Ki=Z.define({combine(O){return xe(O,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function wd(O={}){return[Ki.of(O),PS,SS,XS,Hf.of(!0)]}function Zd(O){return O.startState.facet(Ki)!=O.state.facet(Ki)}var PS=kd({above:!0,markers(O){let{state:e}=O,t=e.facet(Ki),i=[];for(let r of e.selection.ranges){let n=r==e.selection.main;if(r.empty||t.drawRangeCursor){let s=n?\"cm-cursor cm-cursor-primary\":\"cm-cursor cm-cursor-secondary\",a=r.empty?r:S.cursor(r.head,r.head>r.anchor?-1:1);for(let o of Hi.forRange(O,s,a))i.push(o)}}return i},update(O,e){O.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName==\"cm-blink\"?\"cm-blink2\":\"cm-blink\");let t=Zd(O);return t&&Xf(O.state,e),O.docChanged||O.selectionSet||t},mount(O,e){Xf(e.state,O)},class:\"cm-cursorLayer\"});function Xf(O,e){e.style.animationDuration=O.facet(Ki).cursorBlinkRate+\"ms\"}var SS=kd({above:!1,markers(O){return O.state.selection.ranges.map(e=>e.empty?[]:Hi.forRange(O,\"cm-selectionBackground\",e)).reduce((e,t)=>e.concat(t))},update(O,e){return O.docChanged||O.selectionSet||O.viewportChanged||Zd(O)},class:\"cm-selectionLayer\"}),XS=ze.highest(T.theme({\".cm-line\":{\"& ::selection, &::selection\":{backgroundColor:\"transparent !important\"},caretColor:\"transparent !important\"},\".cm-content\":{caretColor:\"transparent !important\",\"& :focus\":{caretColor:\"initial !important\",\"&::selection, & ::selection\":{backgroundColor:\"Highlight !important\"}}}})),vd=V.define({map(O,e){return O==null?null:e.mapPos(O)}}),Ui=ce.define({create(){return null},update(O,e){return O!=null&&(O=e.changes.mapPos(O)),e.effects.reduce((t,i)=>i.is(vd)?i.value:t,O)}}),TS=he.fromClass(class{constructor(O){this.view=O,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(O){var e;let t=O.state.field(Ui);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement(\"div\")),this.cursor.className=\"cm-dropCursor\"),(O.startState.field(Ui)!=t||O.docChanged||O.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:O}=this,e=O.state.field(Ui),t=e!=null&&O.coordsAtPos(e);if(!t)return null;let i=O.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+O.scrollDOM.scrollLeft*O.scaleX,top:t.top-i.top+O.scrollDOM.scrollTop*O.scaleY,height:t.bottom-t.top}}drawCursor(O){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;O?(this.cursor.style.left=O.left/e+\"px\",this.cursor.style.top=O.top/t+\"px\",this.cursor.style.height=O.height/t+\"px\"):this.cursor.style.left=\"-100000px\"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(O){this.view.state.field(Ui)!=O&&this.view.dispatch({effects:vd.of(O)})}},{eventObservers:{dragover(O){this.setDropPos(this.view.posAtCoords({x:O.clientX,y:O.clientY}))},dragleave(O){(O.target==this.view.contentDOM||!this.view.contentDOM.contains(O.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function Yd(){return[Ui,TS]}function Tf(O,e,t,i,r){e.lastIndex=0;for(let n=O.iterRange(t,i),s=t,a;!n.next().done;s+=n.value.length)if(!n.lineBreak)for(;a=e.exec(n.value);)r(s+a.index,a)}function bS(O,e){let t=O.visibleRanges;if(t.length==1&&t[0].from==O.viewport.from&&t[0].to==O.viewport.to)return t;let i=[];for(let{from:r,to:n}of t)r=Math.max(O.state.doc.lineAt(r).from,r-e),n=Math.min(O.state.doc.lineAt(n).to,n+e),i.length&&i[i.length-1].to>=r?i[i.length-1].to=n:i.push({from:r,to:n});return i}var ro=class{constructor(e){let{regexp:t,decoration:i,decorate:r,boundary:n,maxLength:s=1e3}=e;if(!t.global)throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");if(this.regexp=t,r)this.addMatch=(a,o,l,c)=>r(c,l,l+a[0].length,a,o);else if(typeof i==\"function\")this.addMatch=(a,o,l,c)=>{let h=i(a,o,l);h&&c(l,l+a[0].length,h)};else if(i)this.addMatch=(a,o,l,c)=>c(l,l+a[0].length,i);else throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");this.boundary=n,this.maxLength=s}createDeco(e){let t=new Le,i=t.add.bind(t);for(let{from:r,to:n}of bS(e,this.maxLength))Tf(e.state.doc,this.regexp,r,n,(s,a)=>this.addMatch(a,e,s,i));return t.finish()}updateDeco(e,t){let i=1e9,r=-1;return e.docChanged&&e.changes.iterChanges((n,s,a,o)=>{o>=e.view.viewport.from&&a<=e.view.viewport.to&&(i=Math.min(a,i),r=Math.max(o,r))}),e.viewportMoved||r-i>1e3?this.createDeco(e.view):r>-1?this.updateRange(e.view,t.map(e.changes),i,r):t}updateRange(e,t,i,r){for(let n of e.visibleRanges){let s=Math.max(n.from,i),a=Math.min(n.to,r);if(a>=s){let o=e.state.doc.lineAt(s),l=o.to<a?e.state.doc.lineAt(a):o,c=Math.max(n.from,o.from),h=Math.min(n.to,l.to);if(this.boundary){for(;s>o.from;s--)if(this.boundary.test(o.text[s-1-o.from])){c=s;break}for(;a<l.to;a++)if(this.boundary.test(l.text[a-l.from])){h=a;break}}let f=[],u,Q=($,p,m)=>f.push(m.range($,p));if(o==l)for(this.regexp.lastIndex=c-o.from;(u=this.regexp.exec(o.text))&&u.index<h-o.from;)this.addMatch(u,e,u.index+o.from,Q);else Tf(e.state.doc,this.regexp,c,h,($,p)=>this.addMatch(p,e,$,Q));t=t.update({filterFrom:c,filterTo:h,filter:($,p)=>$<c||p>h,add:f})}}return t}},no=/x/.unicode!=null?\"gu\":\"g\",yS=new RegExp(`[\\0-\\b\n-\u001f\\x7F-\\x9F\\xAD\\u061C\\u200B\\u200E\\u200F\\u2028\\u2029\\u202D\\u202E\\u2066\\u2067\\u2069\\uFEFF\\uFFF9-\\uFFFC]`,no),xS={0:\"null\",7:\"bell\",8:\"backspace\",10:\"newline\",11:\"vertical tab\",13:\"carriage return\",27:\"escape\",8203:\"zero width space\",8204:\"zero width non-joiner\",8205:\"zero width joiner\",8206:\"left-to-right mark\",8207:\"right-to-left mark\",8232:\"line separator\",8237:\"left-to-right override\",8238:\"right-to-left override\",8294:\"left-to-right isolate\",8295:\"right-to-left isolate\",8297:\"pop directional isolate\",8233:\"paragraph separator\",65279:\"zero width no-break space\",65532:\"object replacement\"},$a=null;function kS(){var O;if($a==null&&typeof document<\"u\"&&document.body){let e=document.body.style;$a=((O=e.tabSize)!==null&&O!==void 0?O:e.MozTabSize)!=null}return $a||!1}var un=Z.define({combine(O){let e=xe(O,{render:null,specialChars:yS,addSpecialChars:null});return(e.replaceTabs=!kS())&&(e.specialChars=new RegExp(\"\t|\"+e.specialChars.source,no)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+\"|\"+e.addSpecialChars.source,no)),e}});function _d(O={}){return[un.of(O),wS()]}var bf=null;function wS(){return bf||(bf=he.fromClass(class{constructor(O){this.view=O,this.decorations=Y.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(O.state.facet(un)),this.decorations=this.decorator.createDeco(O)}makeDecorator(O){return new ro({regexp:O.specialChars,decoration:(e,t,i)=>{let{doc:r}=t.state,n=Se(e[0],0);if(n==9){let s=r.lineAt(i),a=t.state.tabSize,o=ve(s.text,a,i-s.from);return Y.replace({widget:new ao((a-o%a)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[n]||(this.decorationCache[n]=Y.replace({widget:new so(O,n)}))},boundary:O.replaceTabs?void 0:/[^]/})}update(O){let e=O.state.facet(un);O.startState.facet(un)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(O.view)):this.decorations=this.decorator.updateDeco(O,this.decorations)}},{decorations:O=>O.decorations}))}var ZS=\"\\u2022\";function vS(O){return O>=32?ZS:O==10?\"\\u2424\":String.fromCharCode(9216+O)}var so=class extends _e{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=vS(this.code),i=e.state.phrase(\"Control character\")+\" \"+(xS[this.code]||\"0x\"+this.code.toString(16)),r=this.options.render&&this.options.render(this.code,i,t);if(r)return r;let n=document.createElement(\"span\");return n.textContent=t,n.title=i,n.setAttribute(\"aria-label\",i),n.className=\"cm-specialChar\",n}ignoreEvent(){return!1}},ao=class extends _e{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement(\"span\");return e.textContent=\"\t\",e.className=\"cm-tab\",e.style.width=this.width+\"px\",e}ignoreEvent(){return!1}};function Rd(){return _S}var YS=Y.line({class:\"cm-activeLine\"}),_S=he.fromClass(class{constructor(O){this.decorations=this.getDeco(O)}update(O){(O.docChanged||O.selectionSet)&&(this.decorations=this.getDeco(O.view))}getDeco(O){let e=-1,t=[];for(let i of O.state.selection.ranges){let r=O.lineBlockAt(i.head);r.from>e&&(t.push(YS.range(r.from)),e=r.from)}return Y.set(t)}},{decorations:O=>O.decorations});var oo=2e3;function RS(O,e,t){let i=Math.min(e.line,t.line),r=Math.max(e.line,t.line),n=[];if(e.off>oo||t.off>oo||e.col<0||t.col<0){let s=Math.min(e.off,t.off),a=Math.max(e.off,t.off);for(let o=i;o<=r;o++){let l=O.doc.line(o);l.length<=a&&n.push(S.range(l.from+s,l.to+a))}}else{let s=Math.min(e.col,t.col),a=Math.max(e.col,t.col);for(let o=i;o<=r;o++){let l=O.doc.line(o),c=Kr(l.text,s,O.tabSize,!0);if(c<0)n.push(S.cursor(l.to));else{let h=Kr(l.text,a,O.tabSize);n.push(S.range(l.from+c,l.from+h))}}}return n}function VS(O,e){let t=O.coordsAtPos(O.viewport.from);return t?Math.round(Math.abs((t.left-e)/O.defaultCharacterWidth)):-1}function yf(O,e){let t=O.posAtCoords({x:e.clientX,y:e.clientY},!1),i=O.state.doc.lineAt(t),r=t-i.from,n=r>oo?-1:r==i.length?VS(O,e.clientX):ve(i.text,O.state.tabSize,t-i.from);return{line:i.number,col:n,off:r}}function qS(O,e){let t=yf(O,e),i=O.state.selection;return t?{update(r){if(r.docChanged){let n=r.changes.mapPos(r.startState.doc.line(t.line).from),s=r.state.doc.lineAt(n);t={line:s.number,col:t.col,off:Math.min(t.off,s.length)},i=i.map(r.changes)}},get(r,n,s){let a=yf(O,r);if(!a)return i;let o=RS(O.state,t,a);return o.length?s?S.create(o.concat(i.ranges)):S.create(o):i}}:null}function Vd(O){let e=O?.eventFilter||(t=>t.altKey&&t.button==0);return T.mouseSelectionStyle.of((t,i)=>e(i)?qS(t,i):null)}var zS={Alt:[18,O=>!!O.altKey],Control:[17,O=>!!O.ctrlKey],Shift:[16,O=>!!O.shiftKey],Meta:[91,O=>!!O.metaKey]},US={style:\"cursor: crosshair\"};function qd(O={}){let[e,t]=zS[O.key||\"Alt\"],i=he.fromClass(class{constructor(r){this.view=r,this.isDown=!1}set(r){this.isDown!=r&&(this.isDown=r,this.view.update([]))}},{eventObservers:{keydown(r){this.set(r.keyCode==e||t(r))},keyup(r){(r.keyCode==e||!t(r))&&this.set(!1)},mousemove(r){this.set(t(r))}}});return[i,T.contentAttributes.of(r=>{var n;return!((n=r.plugin(i))===null||n===void 0)&&n.isDown?US:null})]}var on=\"-10000px\",wn=class{constructor(e,t,i,r){this.facet=t,this.createTooltipView=i,this.removeTooltipView=r,this.input=e.state.facet(t),this.tooltips=this.input.filter(s=>s);let n=null;this.tooltipViews=this.tooltips.map(s=>n=i(s,n))}update(e,t){var i;let r=e.state.facet(this.facet),n=r.filter(o=>o);if(r===this.input){for(let o of this.tooltipViews)o.update&&o.update(e);return!1}let s=[],a=t?[]:null;for(let o=0;o<n.length;o++){let l=n[o],c=-1;if(l){for(let h=0;h<this.tooltips.length;h++){let f=this.tooltips[h];f&&f.create==l.create&&(c=h)}if(c<0)s[o]=this.createTooltipView(l,o?s[o-1]:null),a&&(a[o]=!!l.above);else{let h=s[o]=this.tooltipViews[c];a&&(a[o]=t[c]),h.update&&h.update(e)}}}for(let o of this.tooltipViews)s.indexOf(o)<0&&(this.removeTooltipView(o),(i=o.destroy)===null||i===void 0||i.call(o));return t&&(a.forEach((o,l)=>t[l]=o),t.length=a.length),this.input=r,this.tooltips=n,this.tooltipViews=s,!0}};function WS(O){let e=O.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var pa=Z.define({combine:O=>{var e,t,i;return{position:v.ios?\"absolute\":((e=O.find(r=>r.position))===null||e===void 0?void 0:e.position)||\"fixed\",parent:((t=O.find(r=>r.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=O.find(r=>r.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||WS}}}),xf=new WeakMap,Xo=he.fromClass(class{constructor(O){this.view=O,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=O.state.facet(pa);this.position=e.position,this.parent=e.parent,this.classes=O.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver==\"function\"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new wn(O,er,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver==\"function\"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),O.win.addEventListener(\"resize\",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement(\"div\"),this.container.style.position=\"relative\",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let O of this.manager.tooltipViews)this.intersectionObserver.observe(O.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(O){O.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(O,this.above);e&&this.observeIntersection();let t=e||O.geometryChanged,i=O.state.facet(pa);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let r of this.manager.tooltipViews)r.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let r of this.manager.tooltipViews)this.container.appendChild(r.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(O,e){let t=O.create(this.view),i=e?e.dom:null;if(t.dom.classList.add(\"cm-tooltip\"),O.arrow&&!t.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")){let r=document.createElement(\"div\");r.className=\"cm-tooltip-arrow\",t.dom.appendChild(r)}return t.dom.style.position=this.position,t.dom.style.top=on,t.dom.style.left=\"0px\",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var O,e,t;this.view.win.removeEventListener(\"resize\",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(O=i.destroy)===null||O===void 0||O.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let O=1,e=1,t=!1;if(this.position==\"fixed\"&&this.manager.tooltipViews.length){let{dom:n}=this.manager.tooltipViews[0];if(v.safari){let s=n.getBoundingClientRect();t=Math.abs(s.top+1e4)>1||Math.abs(s.left)>1}else t=!!n.offsetParent&&n.offsetParent!=this.container.ownerDocument.body}if(t||this.position==\"absolute\")if(this.parent){let n=this.parent.getBoundingClientRect();n.width&&n.height&&(O=n.width/this.parent.offsetWidth,e=n.height/this.parent.offsetHeight)}else({scaleX:O,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),r=Po(this.view);return{visible:{left:i.left+r.left,top:i.top+r.top,right:i.right-r.right,bottom:i.bottom-r.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((n,s)=>{let a=this.manager.tooltipViews[s];return a.getCoords?a.getCoords(n.pos):this.view.coordsAtPos(n.pos)}),size:this.manager.tooltipViews.map(({dom:n})=>n.getBoundingClientRect()),space:this.view.state.facet(pa).tooltipSpace(this.view),scaleX:O,scaleY:e,makeAbsolute:t}}writeMeasure(O){var e;if(O.makeAbsolute){this.madeAbsolute=!0,this.position=\"absolute\";for(let a of this.manager.tooltipViews)a.dom.style.position=\"absolute\"}let{visible:t,space:i,scaleX:r,scaleY:n}=O,s=[];for(let a=0;a<this.manager.tooltips.length;a++){let o=this.manager.tooltips[a],l=this.manager.tooltipViews[a],{dom:c}=l,h=O.pos[a],f=O.size[a];if(!h||o.clip!==!1&&(h.bottom<=Math.max(t.top,i.top)||h.top>=Math.min(t.bottom,i.bottom)||h.right<Math.max(t.left,i.left)-.1||h.left>Math.min(t.right,i.right)+.1)){c.style.top=on;continue}let u=o.arrow?l.dom.querySelector(\".cm-tooltip-arrow\"):null,Q=u?7:0,$=f.right-f.left,p=(e=xf.get(l))!==null&&e!==void 0?e:f.bottom-f.top,m=l.offset||CS,g=this.view.textDirection==H.LTR,P=f.width>i.right-i.left?g?i.left:i.right-f.width:g?Math.max(i.left,Math.min(h.left-(u?14:0)+m.x,i.right-$)):Math.min(Math.max(i.left,h.left-$+(u?14:0)-m.x),i.right-$),y=this.above[a];!o.strictSide&&(y?h.top-p-Q-m.y<i.top:h.bottom+p+Q+m.y>i.bottom)&&y==i.bottom-h.bottom>h.top-i.top&&(y=this.above[a]=!y);let X=(y?h.top-i.top:i.bottom-h.bottom)-Q;if(X<p&&l.resize!==!1){if(X<this.view.defaultLineHeight){c.style.top=on;continue}xf.set(l,p),c.style.height=(p=X)/n+\"px\"}else c.style.height&&(c.style.height=\"\");let x=y?h.top-p-Q-m.y:h.bottom+Q+m.y,k=P+$;if(l.overlap!==!0)for(let j of s)j.left<k&&j.right>P&&j.top<x+p&&j.bottom>x&&(x=y?j.top-p-2-Q:j.bottom+Q+2);if(this.position==\"absolute\"?(c.style.top=(x-O.parent.top)/n+\"px\",kf(c,(P-O.parent.left)/r)):(c.style.top=x/n+\"px\",kf(c,P/r)),u){let j=h.left+(g?m.x:-m.x)-(P+14-7);u.style.left=j/r+\"px\"}l.overlap!==!0&&s.push({left:P,top:x,right:k,bottom:x+p}),c.classList.toggle(\"cm-tooltip-above\",y),c.classList.toggle(\"cm-tooltip-below\",!y),l.positioned&&l.positioned(O.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let O of this.manager.tooltipViews)O.dom.style.top=on}},{eventObservers:{scroll(){this.maybeMeasure()}}});function kf(O,e){let t=parseInt(O.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(O.style.left=e+\"px\")}var jS=T.baseTheme({\".cm-tooltip\":{zIndex:500,boxSizing:\"border-box\"},\"&light .cm-tooltip\":{border:\"1px solid #bbb\",backgroundColor:\"#f5f5f5\"},\"&light .cm-tooltip-section:not(:first-child)\":{borderTop:\"1px solid #bbb\"},\"&dark .cm-tooltip\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-tooltip-arrow\":{height:\"7px\",width:\"14px\",position:\"absolute\",zIndex:-1,overflow:\"hidden\",\"&:before, &:after\":{content:\"''\",position:\"absolute\",width:0,height:0,borderLeft:\"7px solid transparent\",borderRight:\"7px solid transparent\"},\".cm-tooltip-above &\":{bottom:\"-7px\",\"&:before\":{borderTop:\"7px solid #bbb\"},\"&:after\":{borderTop:\"7px solid #f5f5f5\",bottom:\"1px\"}},\".cm-tooltip-below &\":{top:\"-7px\",\"&:before\":{borderBottom:\"7px solid #bbb\"},\"&:after\":{borderBottom:\"7px solid #f5f5f5\",top:\"1px\"}}},\"&dark .cm-tooltip .cm-tooltip-arrow\":{\"&:before\":{borderTopColor:\"#333338\",borderBottomColor:\"#333338\"},\"&:after\":{borderTopColor:\"transparent\",borderBottomColor:\"transparent\"}}}),CS={x:0,y:0},er=Z.define({enables:[Xo,jS]}),Zn=Z.define({combine:O=>O.reduce((e,t)=>e.concat(t),[])}),vn=class O{static create(e){return new O(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement(\"div\"),this.dom.classList.add(\"cm-tooltip-hover\"),this.manager=new wn(e,Zn,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add(\"cm-tooltip-section\"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let r=i[e];if(r!==void 0){if(t===void 0)t=r;else if(t!==r)return}}return t}get offset(){return this.passProp(\"offset\")}get getCoords(){return this.passProp(\"getCoords\")}get overlap(){return this.passProp(\"overlap\")}get resize(){return this.passProp(\"resize\")}},GS=er.compute([Zn],O=>{let e=O.facet(Zn);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:vn.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),lo=class{constructor(e,t,i,r,n){this.view=e,this.source=t,this.field=i,this.setHover=r,this.hoverTime=n,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener(\"mouseleave\",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener(\"mousemove\",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;e<this.hoverTime?this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime-e):this.startHover()}startHover(){clearTimeout(this.restartTimeout);let{view:e,lastMove:t}=this,i=e.docView.tile.nearest(t.target);if(!i)return;let r,n=1;if(i.isWidget())r=i.posAtStart;else{if(r=e.posAtCoords(t),r==null)return;let a=e.coordsAtPos(r);if(!a||t.y<a.top||t.y>a.bottom||t.x<a.left-e.defaultCharacterWidth||t.x>a.right+e.defaultCharacterWidth)return;let o=e.bidiSpans(e.state.doc.lineAt(r)).find(c=>c.from<=r&&c.to>=r),l=o&&o.dir==H.RTL?-1:1;n=t.x<a.left?-l:l}let s=this.source(e,r,n);if(s?.then){let a=this.pending={pos:r};s.then(o=>{this.pending==a&&(this.pending=null,o&&!(Array.isArray(o)&&!o.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(o)?o:[o])}))},o=>Xe(e.state,o,\"hover tooltip\"))}else s&&!(Array.isArray(s)&&!s.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(s)?s:[s])})}get tooltip(){let e=this.view.plugin(Xo),t=e?e.manager.tooltips.findIndex(i=>i.create==vn.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:r,tooltip:n}=this;if(r.length&&n&&!ES(n.dom,e)||this.pending){let{pos:s}=r[0]||this.pending,a=(i=(t=r[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:s;(s==a?this.view.posAtCoords(this.lastMove)!=s:!AS(this.view,s,a,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener(\"mouseleave\",t),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener(\"mouseleave\",t)}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener(\"mouseleave\",this.mouseleave),this.view.dom.removeEventListener(\"mousemove\",this.mousemove)}},ln=4;function ES(O,e){let{left:t,right:i,top:r,bottom:n}=O.getBoundingClientRect(),s;if(s=O.querySelector(\".cm-tooltip-arrow\")){let a=s.getBoundingClientRect();r=Math.min(a.top,r),n=Math.max(a.bottom,n)}return e.clientX>=t-ln&&e.clientX<=i+ln&&e.clientY>=r-ln&&e.clientY<=n+ln}function AS(O,e,t,i,r,n){let s=O.scrollDOM.getBoundingClientRect(),a=O.documentTop+O.documentPadding.top+O.contentHeight;if(s.left>i||s.right<i||s.top>r||Math.min(s.bottom,a)<r)return!1;let o=O.posAtCoords({x:i,y:r},!1);return o>=e&&o<=t}function zd(O,e={}){let t=V.define(),i=ce.define({create(){return[]},update(r,n){if(r.length&&(e.hideOnChange&&(n.docChanged||n.selection)?r=[]:e.hideOn&&(r=r.filter(s=>!e.hideOn(n,s))),n.docChanged)){let s=[];for(let a of r){let o=n.changes.mapPos(a.pos,-1,pe.TrackDel);if(o!=null){let l=Object.assign(Object.create(null),a);l.pos=o,l.end!=null&&(l.end=n.changes.mapPos(l.end)),s.push(l)}}r=s}for(let s of n.effects)s.is(t)&&(r=s.value),s.is(LS)&&(r=[]);return r},provide:r=>Zn.from(r)});return{active:i,extension:[i,he.define(r=>new lo(r,O,i,t,e.hoverTime||300)),GS]}}function To(O,e){let t=O.plugin(Xo);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}var LS=V.define();var wf=Z.define({combine(O){let e,t;for(let i of O)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function bO(O,e){let t=O.plugin(Ud),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}var Ud=he.fromClass(class{constructor(O){this.input=O.state.facet(TO),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(O));let e=O.state.facet(wf);this.top=new ei(O,!0,e.topContainer),this.bottom=new ei(O,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add(\"cm-panel\"),t.mount&&t.mount()}update(O){let e=O.state.facet(wf);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new ei(O.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new ei(O.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=O.state.facet(TO);if(t!=this.input){let i=t.filter(o=>o),r=[],n=[],s=[],a=[];for(let o of i){let l=this.specs.indexOf(o),c;l<0?(c=o(O.view),a.push(c)):(c=this.panels[l],c.update&&c.update(O)),r.push(c),(c.top?n:s).push(c)}this.specs=i,this.panels=r,this.top.sync(n),this.bottom.sync(s);for(let o of a)o.dom.classList.add(\"cm-panel\"),o.mount&&o.mount()}else for(let i of this.panels)i.update&&i.update(O)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:O=>T.scrollMargins.of(e=>{let t=e.plugin(O);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})}),ei=class{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes=\"\",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement(\"div\"),this.dom.className=this.top?\"cm-panels cm-panels-top\":\"cm-panels cm-panels-bottom\",this.dom.style[this.top?\"top\":\"bottom\"]=\"0\";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=Zf(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=Zf(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(\" \"))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(\" \"))e&&this.container.classList.add(e)}}};function Zf(O){let e=O.nextSibling;return O.remove(),e}var TO=Z.define({enables:Ud});var Ie=class extends tt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};Ie.prototype.elementClass=\"\";Ie.prototype.toDOM=void 0;Ie.prototype.mapMode=pe.TrackBefore;Ie.prototype.startSide=Ie.prototype.endSide=-1;Ie.prototype.point=!0;var Qn=Z.define(),MS=Z.define(),DS={class:\"\",renderEmptyElements:!1,elementStyle:\"\",markers:()=>M.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:\"before\"},Li=Z.define();function bo(O){return[Wd(),Li.of({...DS,...O})]}var co=Z.define({combine:O=>O.some(e=>e)});function Wd(O){let e=[IS];return O&&O.fixed===!1&&e.push(co.of(!0)),e}var IS=he.fromClass(class{constructor(O){this.view=O,this.domAfter=null,this.prevViewport=O.viewport,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutters cm-gutters-before\",this.dom.setAttribute(\"aria-hidden\",\"true\"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+\"px\",this.gutters=O.state.facet(Li).map(e=>new Yn(O,e)),this.fixed=!O.state.facet(co);for(let e of this.gutters)e.config.side==\"after\"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position=\"sticky\"),this.syncGutters(!1),O.scrollDOM.insertBefore(this.dom,O.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement(\"div\"),this.domAfter.className=\"cm-gutters cm-gutters-after\",this.domAfter.setAttribute(\"aria-hidden\",\"true\"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+\"px\",this.domAfter.style.position=this.fixed?\"sticky\":\"\",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(O){if(this.updateGutters(O)){let e=this.prevViewport,t=O.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(O.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+\"px\";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(co)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?\"sticky\":\"\",this.domAfter&&(this.domAfter.style.position=this.fixed?\"sticky\":\"\")),this.prevViewport=O.view.viewport}syncGutters(O){let e=this.dom.nextSibling;O&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=M.iter(this.view.state.facet(Qn),this.view.viewport.from),i=[],r=this.gutters.map(n=>new fo(n,this.view.viewport,-this.view.documentPadding.top));for(let n of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(n.type)){let s=!0;for(let a of n.type)if(a.type==Te.Text&&s){ho(t,i,a.from);for(let o of r)o.line(this.view,a,i);s=!1}else if(a.widget)for(let o of r)o.widget(this.view,a)}else if(n.type==Te.Text){ho(t,i,n.from);for(let s of r)s.line(this.view,n,i)}else if(n.widget)for(let s of r)s.widget(this.view,n);for(let n of r)n.finish();O&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(O){let e=O.startState.facet(Li),t=O.state.facet(Li),i=O.docChanged||O.heightChanged||O.viewportChanged||!M.eq(O.startState.facet(Qn),O.state.facet(Qn),O.view.viewport.from,O.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(O)&&(i=!0);else{i=!0;let r=[];for(let n of t){let s=e.indexOf(n);s<0?r.push(new Yn(this.view,n)):(this.gutters[s].update(O),r.push(this.gutters[s]))}for(let n of this.gutters)n.dom.remove(),r.indexOf(n)<0&&n.destroy();for(let n of r)n.config.side==\"after\"?this.getDOMAfter().appendChild(n.dom):this.dom.appendChild(n.dom);this.gutters=r}return i}destroy(){for(let O of this.gutters)O.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:O=>T.scrollMargins.of(e=>{let t=e.plugin(O);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,r=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==H.LTR?{left:i,right:r}:{right:i,left:r}})});function vf(O){return Array.isArray(O)?O:[O]}function ho(O,e,t){for(;O.value&&O.from<=t;)O.from==t&&e.push(O.value),O.next()}var fo=class{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=M.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:r}=this,n=(t.top-this.height)/e.scaleY,s=t.height/e.scaleY;if(this.i==r.elements.length){let a=new _n(e,s,n,i);r.elements.push(a),r.dom.appendChild(a.dom)}else r.elements[this.i].update(e,s,n,i);this.height=t.bottom,this.i++}line(e,t,i){let r=[];ho(this.cursor,r,t.from),i.length&&(r=r.concat(i));let n=this.gutter.config.lineMarker(e,t,r);n&&r.unshift(n);let s=this.gutter;r.length==0&&!s.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),r=i?[i]:null;for(let n of e.state.facet(MS)){let s=n(e,t.widget,t);s&&(r||(r=[])).push(s)}r&&this.addElement(e,t,r)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}},Yn=class{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutter\"+(this.config.class?\" \"+this.config.class:\"\");for(let i in t.domEventHandlers)this.dom.addEventListener(i,r=>{let n=r.target,s;if(n!=this.dom&&this.dom.contains(n)){for(;n.parentNode!=this.dom;)n=n.parentNode;let o=n.getBoundingClientRect();s=(o.top+o.bottom)/2}else s=r.clientY;let a=e.lineBlockAtHeight(s-e.documentTop);t.domEventHandlers[i](e,a,r)&&r.preventDefault()});this.markers=vf(t.markers(e)),t.initialSpacer&&(this.spacer=new _n(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+=\"visibility: hidden; pointer-events: none\")}update(e){let t=this.markers;if(this.markers=vf(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let i=e.view.viewport;return!M.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},_n=class{constructor(e,t,i,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutterElement\",this.update(e,t,i,r)}update(e,t,i,r){this.height!=t&&(this.height=t,this.dom.style.height=t+\"px\"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+\"px\":\"\"),BS(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let i=\"cm-gutterElement\",r=this.dom.firstChild;for(let n=0,s=0;;){let a=s,o=n<t.length?t[n++]:null,l=!1;if(o){let c=o.elementClass;c&&(i+=\" \"+c);for(let h=s;h<this.markers.length;h++)if(this.markers[h].compare(o)){a=h,l=!0;break}}else a=this.markers.length;for(;s<a;){let c=this.markers[s++];if(c.toDOM){c.destroy(r);let h=r.nextSibling;r.remove(),r=h}}if(!o)break;o.toDOM&&(l?r=r.nextSibling:this.dom.insertBefore(o.toDOM(e),r)),l&&s++}this.dom.className=i,this.markers=t}destroy(){this.setMarkers(null,[])}};function BS(O,e){if(O.length!=e.length)return!1;for(let t=0;t<O.length;t++)if(!O[t].compare(e[t]))return!1;return!0}var NS=Z.define(),FS=Z.define(),ti=Z.define({combine(O){return xe(O,{formatNumber:String,domEventHandlers:{}},{domEventHandlers(e,t){let i=Object.assign({},e);for(let r in t){let n=i[r],s=t[r];i[r]=n?(a,o,l)=>n(a,o,l)||s(a,o,l):s}return i}})}}),Mi=class extends Ie{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function ma(O,e){return O.state.facet(ti).formatNumber(e,O.state)}var HS=Li.compute([ti],O=>({class:\"cm-lineNumbers\",renderEmptyElements:!1,markers(e){return e.state.facet(NS)},lineMarker(e,t,i){return i.some(r=>r.toDOM)?null:new Mi(ma(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let r of e.state.facet(FS)){let n=r(e,t,i);if(n)return n}return null},lineMarkerChange:e=>e.startState.facet(ti)!=e.state.facet(ti),initialSpacer(e){return new Mi(ma(e,Yf(e.state.doc.lines)))},updateSpacer(e,t){let i=ma(t.view,Yf(t.view.state.doc.lines));return i==e.number?e:new Mi(i)},domEventHandlers:O.facet(ti).domEventHandlers,side:\"before\"}));function jd(O={}){return[ti.of(O),Wd(),HS]}function Yf(O){let e=9;for(;e<O;)e=e*10+9;return e}var KS=new class extends Ie{constructor(){super(...arguments),this.elementClass=\"cm-activeLineGutter\"}},JS=Qn.compute([\"selection\"],O=>{let e=[],t=-1;for(let i of O.selection.ranges){let r=O.doc.lineAt(i.head).from;r>t&&(t=r,e.push(KS.range(r)))}return M.of(e)});function Cd(){return JS}var eX=0,We=class{constructor(e,t){this.from=e,this.to=t}},R=class{constructor(e={}){this.id=eX++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error(\"This node type doesn't define a deserialize function\")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError(\"Can't add per-node props to node types\");return typeof e!=\"function\"&&(e=ue.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};R.closedBy=new R({deserialize:O=>O.split(\" \")});R.openedBy=new R({deserialize:O=>O.split(\" \")});R.group=new R({deserialize:O=>O.split(\" \")});R.isolate=new R({deserialize:O=>{if(O&&O!=\"rtl\"&&O!=\"ltr\"&&O!=\"auto\")throw new RangeError(\"Invalid value for isolate: \"+O);return O||\"auto\"}});R.contextHash=new R({perNode:!0});R.lookAhead=new R({perNode:!0});R.mounted=new R({perNode:!0});var Ht=class{constructor(e,t,i,r=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=r}static get(e){return e&&e.props&&e.props[R.mounted.id]}},tX=Object.create(null),ue=class O{constructor(e,t,i,r=0){this.name=e,this.props=t,this.id=i,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):tX,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new O(e.name||\"\",t,e.id,i);if(e.props){for(let n of e.props)if(Array.isArray(n)||(n=n(r)),n){if(n[0].perNode)throw new RangeError(\"Can't store a per-node prop on a node type\");t[n[0].id]=n[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e==\"string\"){if(this.name==e)return!0;let t=this.prop(R.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let r of i.split(\" \"))t[r]=e[i];return i=>{for(let r=i.prop(R.group),n=-1;n<(r?r.length:0);n++){let s=t[n<0?i.name:r[n]];if(s)return s}}}};ue.none=new ue(\"\",Object.create(null),0,8);var Kt=class O{constructor(e){this.types=e;for(let t=0;t<e.length;t++)if(e[t].id!=t)throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\")}extend(...e){let t=[];for(let i of this.types){let r=null;for(let n of e){let s=n(i);if(s){r||(r=Object.assign({},i.props));let a=s[1],o=s[0];o.combine&&o.id in r&&(a=o.combine(r[o.id],a)),r[o.id]=a}}t.push(r?new ue(i.name,r,i.id,i.flags):i)}return new O(t)}},qn=new WeakMap,Gd=new WeakMap,C;(function(O){O[O.ExcludeBuffers=1]=\"ExcludeBuffers\",O[O.IncludeAnonymous=2]=\"IncludeAnonymous\",O[O.IgnoreMounts=4]=\"IgnoreMounts\",O[O.IgnoreOverlays=8]=\"IgnoreOverlays\",O[O.EnterBracketed=16]=\"EnterBracketed\"})(C||(C={}));var D=class O{constructor(e,t,i,r,n){if(this.type=e,this.children=t,this.positions=i,this.length=r,this.props=null,n&&n.length){this.props=Object.create(null);for(let[s,a]of n)this.props[typeof s==\"number\"?s:s.id]=a}}toString(){let e=Ht.get(this);if(e&&!e.overlay)return e.tree.toString();let t=\"\";for(let i of this.children){let r=i.toString();r&&(t&&(t+=\",\"),t+=r)}return this.type.name?(/\\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(t.length?\"(\"+t+\")\":\"\"):t}cursor(e=0){return new li(this.topNode,e)}cursorAt(e,t=0,i=0){let r=qn.get(this)||this.topNode,n=new li(r);return n.moveTo(e,t),qn.set(this,n._tree),n}get topNode(){return new je(this,0,0,null)}resolve(e,t=0){let i=tr(qn.get(this)||this.topNode,e,t,!1);return qn.set(this,i),i}resolveInner(e,t=0){let i=tr(Gd.get(this)||this.topNode,e,t,!0);return Gd.set(this,i),i}resolveStack(e,t=0){return OX(this,e,t)}iterate(e){let{enter:t,leave:i,from:r=0,to:n=this.length}=e,s=e.mode||0,a=(s&C.IncludeAnonymous)>0;for(let o=this.cursor(s|C.IncludeAnonymous);;){let l=!1;if(o.from<=n&&o.to>=r&&(!a&&o.type.isAnonymous||t(o)!==!1)){if(o.firstChild())continue;l=!0}for(;l&&i&&(a||!o.type.isAnonymous)&&i(o),!o.nextSibling();){if(!o.parent())return;l=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:qo(ue.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,r)=>new O(this.type,t,i,r,this.propValues),e.makeTree||((t,i,r)=>new O(ue.none,t,i,r)))}static build(e){return iX(e)}};D.empty=new D(ue.none,[],[],0);var yo=class O{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new O(this.buffer,this.index)}},Jt=class O{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return ue.none}toString(){let e=[];for(let t=0;t<this.buffer.length;)e.push(this.childString(t)),t=this.buffer[t+3];return e.join(\",\")}childString(e){let t=this.buffer[e],i=this.buffer[e+3],r=this.set.types[t],n=r.name;if(/\\W/.test(n)&&!r.isError&&(n=JSON.stringify(n)),e+=4,i==e)return n;let s=[];for(;e<i;)s.push(this.childString(e)),e=this.buffer[e+3];return n+\"(\"+s.join(\",\")+\")\"}findChild(e,t,i,r,n){let{buffer:s}=this,a=-1;for(let o=e;o!=t&&!(Bd(n,r,s[o+1],s[o+2])&&(a=o,i>0));o=s[o+3]);return a}slice(e,t,i){let r=this.buffer,n=new Uint16Array(t-e),s=0;for(let a=e,o=0;a<t;){n[o++]=r[a++],n[o++]=r[a++]-i;let l=n[o++]=r[a++]-i;n[o++]=r[a++]-e,s=Math.max(s,l)}return new O(n,s,this.set)}};function Bd(O,e,t,i){switch(O){case-2:return t<e;case-1:return i>=e&&t<e;case 0:return t<e&&i>e;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function tr(O,e,t,i){for(var r;O.from==O.to||(t<1?O.from>=e:O.from>e)||(t>-1?O.to<=e:O.to<e);){let s=!i&&O instanceof je&&O.index<0?null:O.parent;if(!s)return O;O=s}let n=i?0:C.IgnoreOverlays;if(i)for(let s=O,a=s.parent;a;s=a,a=s.parent)s instanceof je&&s.index<0&&((r=a.enter(e,t,n))===null||r===void 0?void 0:r.from)!=s.from&&(O=a);for(;;){let s=O.enter(e,t,n);if(!s)return O;O=s}}var Un=class{cursor(e=0){return new li(this,e)}getChild(e,t=null,i=null){let r=Ed(this,e,t,i);return r.length?r[0]:null}getChildren(e,t=null,i=null){return Ed(this,e,t,i)}resolve(e,t=0){return tr(this,e,t,!1)}resolveInner(e,t=0){return tr(this,e,t,!0)}matchContext(e){return xo(this.parent,e)}enterUnfinishedNodesBefore(e){let t=this.childBefore(e),i=this;for(;t;){let r=t.lastChild;if(!r||r.to!=t.to)break;r.type.isError&&r.from==r.to?(i=t,t=r.prevSibling):t=r}return i}get node(){return this}get next(){return this.parent}},je=class O extends Un{constructor(e,t,i,r){super(),this._tree=e,this.from=t,this.index=i,this._parent=r}get type(){return this._tree.type}get name(){return this._tree.type.name}get to(){return this.from+this._tree.length}nextChild(e,t,i,r,n=0){var s;for(let a=this;;){for(let{children:o,positions:l}=a._tree,c=t>0?o.length:-1;e!=c;e+=t){let h=o[e],f=l[e]+a.from;if(!(!(n&C.EnterBracketed&&h instanceof D&&((s=Ht.get(h))===null||s===void 0?void 0:s.overlay)===null&&(f>=i||f+h.length<=i))&&!Bd(r,i,f,f+h.length))){if(h instanceof Jt){if(n&C.ExcludeBuffers)continue;let u=h.findChild(0,h.buffer.length,t,i-f,r);if(u>-1)return new yO(new ko(a,h,e,f),null,u)}else if(n&C.IncludeAnonymous||!h.type.isAnonymous||Vo(h)){let u;if(!(n&C.IgnoreMounts)&&(u=Ht.get(h))&&!u.overlay)return new O(u.tree,f,e,a);let Q=new O(h,f,e,a);return n&C.IncludeAnonymous||!Q.type.isAnonymous?Q:Q.nextChild(t<0?h.children.length-1:0,t,i,r,n)}}}if(n&C.IncludeAnonymous||!a.type.isAnonymous||(a.index>=0?e=a.index+t:e=t<0?-1:a._parent._tree.children.length,a=a._parent,!a))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let r;if(!(i&C.IgnoreOverlays)&&(r=Ht.get(this._tree))&&r.overlay){let n=e-this.from,s=i&C.EnterBracketed&&r.bracketed;for(let{from:a,to:o}of r.overlay)if((t>0||s?a<=n:a<n)&&(t<0||s?o>=n:o>n))return new O(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function Ed(O,e,t,i){let r=O.cursor(),n=[];if(!r.firstChild())return n;if(t!=null){for(let s=!1;!s;)if(s=r.type.is(t),!r.nextSibling())return n}for(;;){if(i!=null&&r.type.is(i))return n;if(r.type.is(e)&&n.push(r.node),!r.nextSibling())return i==null?n:[]}}function xo(O,e,t=e.length-1){for(let i=O;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var ko=class{constructor(e,t,i,r){this.parent=e,this.buffer=t,this.index=i,this.start=r}},yO=class O extends Un{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:r}=this.context,n=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,i);return n<0?null:new O(this.context,this,n)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&C.ExcludeBuffers)return null;let{buffer:r}=this.context,n=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return n<0?null:new O(this.context,this,n)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new O(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new O(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,r=this.index+4,n=i.buffer[this.index+3];if(n>r){let s=i.buffer[this.index+1];e.push(i.slice(r,n,s)),t.push(0)}return new D(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function Nd(O){if(!O.length)return null;let e=0,t=O[0];for(let n=1;n<O.length;n++){let s=O[n];(s.from>t.from||s.to<t.to)&&(t=s,e=n)}let i=t instanceof je&&t.index<0?null:t.parent,r=O.slice();return i?r[e]=i:r.splice(e,1),new wo(r,t)}var wo=class{constructor(e,t){this.heads=e,this.node=t}get next(){return Nd(this.heads)}};function OX(O,e,t){let i=O.resolveInner(e,t),r=null;for(let n=i instanceof je?i:i.context.parent;n;n=n.parent)if(n.index<0){let s=n.parent;(r||(r=[i])).push(s.resolve(e,t)),n=s}else{let s=Ht.get(n.tree);if(s&&s.overlay&&s.overlay[0].from<=e&&s.overlay[s.overlay.length-1].to>=e){let a=new je(s.tree,s.overlay[0].from+n.from,-1,n);(r||(r=[i])).push(tr(a,e,t,!1))}}return r?Nd(r):i}var li=class{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~C.EnterBracketed,e instanceof je)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0}yield(e){return e?e instanceof je?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:r}=this.buffer,n=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,i);return n<0?!1:(this.stack.push(this.index),this.yieldBuf(n))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&C.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&C.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&C.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let r=i<0?0:this.stack[i]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(r)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:r}=this;if(r){if(e>0){if(this.index<r.buffer.buffer.length)return!1}else for(let n=0;n<this.index;n++)if(r.buffer.buffer[n+3]<this.index)return!1;({index:t,parent:i}=r)}else({index:t,_parent:i}=this._tree);for(;i;{index:t,_parent:i}=i)if(t>-1)for(let n=t+e,s=e<0?-1:i._tree.children.length;n!=s;n+=e){let a=i._tree.children[n];if(this.mode&C.IncludeAnonymous||a instanceof Jt||!a.type.isAnonymous||Vo(a))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to<e))&&this.parent(););for(;this.enterChild(1,e,t););return this}get node(){if(!this.buffer)return this._tree;let e=this.bufferNode,t=null,i=0;if(e&&e.context==this.buffer)e:for(let r=this.index,n=this.stack.length;n>=0;){for(let s=e;s;s=s._parent)if(s.index==r){if(r==this.index)return s;t=s,i=n+1;break e}r=this.stack[--n]}for(let r=i;r<this.stack.length;r++)t=new yO(this.buffer,t,this.stack[r]);return this.bufferNode=new yO(this.buffer,t,this.index)}get tree(){return this.buffer?null:this._tree._tree}iterate(e,t){for(let i=0;;){let r=!1;if(this.type.isAnonymous||e(this)!==!1){if(this.firstChild()){i++;continue}this.type.isAnonymous||(r=!0)}for(;;){if(r&&t&&t(this),r=this.type.isAnonymous,!i)return;if(this.nextSibling())break;this.parent(),i--,r=!0}}}matchContext(e){if(!this.buffer)return xo(this.node.parent,e);let{buffer:t}=this.buffer,{types:i}=t.set;for(let r=e.length-1,n=this.stack.length-1;r>=0;n--){if(n<0)return xo(this._tree,e,r);let s=i[t.buffer[this.stack[n]]];if(!s.isAnonymous){if(e[r]&&e[r]!=s.name)return!1;r--}}return!0}};function Vo(O){return O.children.some(e=>e instanceof Jt||!e.type.isAnonymous||Vo(e))}function iX(O){var e;let{buffer:t,nodeSet:i,maxBufferLength:r=1024,reused:n=[],minRepeatType:s=i.types.length}=O,a=Array.isArray(t)?new yo(t,t.length):t,o=i.types,l=0,c=0;function h(X,x,k,j,A,ie){let{id:G,start:q,end:K,size:B}=a,ae=c,we=l;if(B<0)if(a.next(),B==-1){let Zt=n[G];k.push(Zt),j.push(q-X);return}else if(B==-3){l=G;return}else if(B==-4){c=G;return}else throw new RangeError(`Unrecognized record size: ${B}`);let Ee=o[G],mt,Pe,Je=q-X;if(K-q<=r&&(Pe=p(a.pos-x,A))){let Zt=new Uint16Array(Pe.size-Pe.skip),et=a.pos-Pe.size,gt=Zt.length;for(;a.pos>et;)gt=m(Pe.start,Zt,gt);mt=new Jt(Zt,K-Pe.start,i),Je=Pe.start-X}else{let Zt=a.pos-B;a.next();let et=[],gt=[],dO=G>=s?G:-1,LO=0,Gr=K;for(;a.pos>Zt;)dO>=0&&a.id==dO&&a.size>=0?(a.end<=Gr-r&&(Q(et,gt,q,LO,a.end,Gr,dO,ae,we),LO=et.length,Gr=a.end),a.next()):ie>2500?f(q,Zt,et,gt):h(q,Zt,et,gt,dO,ie+1);if(dO>=0&&LO>0&&LO<et.length&&Q(et,gt,q,LO,q,Gr,dO,ae,we),et.reverse(),gt.reverse(),dO>-1&&LO>0){let mh=u(Ee,we);mt=qo(Ee,et,gt,0,et.length,0,K-q,mh,mh)}else mt=$(Ee,et,gt,K-q,ae-K,we)}k.push(mt),j.push(Je)}function f(X,x,k,j){let A=[],ie=0,G=-1;for(;a.pos>x;){let{id:q,start:K,end:B,size:ae}=a;if(ae>4)a.next();else{if(G>-1&&K<G)break;G<0&&(G=B-r),A.push(q,K,B),ie++,a.next()}}if(ie){let q=new Uint16Array(ie*4),K=A[A.length-2];for(let B=A.length-3,ae=0;B>=0;B-=3)q[ae++]=A[B],q[ae++]=A[B+1]-K,q[ae++]=A[B+2]-K,q[ae++]=ae;k.push(new Jt(q,A[2]-K,i)),j.push(K-X)}}function u(X,x){return(k,j,A)=>{let ie=0,G=k.length-1,q,K;if(G>=0&&(q=k[G])instanceof D){if(!G&&q.type==X&&q.length==A)return q;(K=q.prop(R.lookAhead))&&(ie=j[G]+q.length+K)}return $(X,k,j,A,ie,x)}}function Q(X,x,k,j,A,ie,G,q,K){let B=[],ae=[];for(;X.length>j;)B.push(X.pop()),ae.push(x.pop()+k-A);X.push($(i.types[G],B,ae,ie-A,q-ie,K)),x.push(A-k)}function $(X,x,k,j,A,ie,G){if(ie){let q=[R.contextHash,ie];G=G?[q].concat(G):[q]}if(A>25){let q=[R.lookAhead,A];G=G?[q].concat(G):[q]}return new D(X,x,k,j,G)}function p(X,x){let k=a.fork(),j=0,A=0,ie=0,G=k.end-r,q={size:0,start:0,skip:0};e:for(let K=k.pos-X;k.pos>K;){let B=k.size;if(k.id==x&&B>=0){q.size=j,q.start=A,q.skip=ie,ie+=4,j+=4,k.next();continue}let ae=k.pos-B;if(B<0||ae<K||k.start<G)break;let we=k.id>=s?4:0,Ee=k.start;for(k.next();k.pos>ae;){if(k.size<0)if(k.size==-3||k.size==-4)we+=4;else break e;else k.id>=s&&(we+=4);k.next()}A=Ee,j+=B,ie+=we}return(x<0||j==X)&&(q.size=j,q.start=A,q.skip=ie),q.size>4?q:void 0}function m(X,x,k){let{id:j,start:A,end:ie,size:G}=a;if(a.next(),G>=0&&j<s){let q=k;if(G>4){let K=a.pos-(G-4);for(;a.pos>K;)k=m(X,x,k)}x[--k]=q,x[--k]=ie-X,x[--k]=A-X,x[--k]=j}else G==-3?l=j:G==-4&&(c=j);return k}let g=[],P=[];for(;a.pos>0;)h(O.start||0,O.bufferStart||0,g,P,-1,0);let y=(e=O.length)!==null&&e!==void 0?e:g.length?P[0]+g[0].length:0;return new D(o[O.topID],g.reverse(),P.reverse(),y)}var Ad=new WeakMap;function zn(O,e){if(!O.isAnonymous||e instanceof Jt||e.type!=O)return 1;let t=Ad.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=O||!(i instanceof D)){t=1;break}t+=zn(O,i)}Ad.set(e,t)}return t}function qo(O,e,t,i,r,n,s,a,o){let l=0;for(let Q=i;Q<r;Q++)l+=zn(O,e[Q]);let c=Math.ceil(l*1.5/8),h=[],f=[];function u(Q,$,p,m,g){for(let P=p;P<m;){let y=P,X=$[P],x=zn(O,Q[P]);for(P++;P<m;P++){let k=zn(O,Q[P]);if(x+k>=c)break;x+=k}if(P==y+1){if(x>c){let k=Q[y];u(k.children,k.positions,0,k.children.length,$[y]+g);continue}h.push(Q[y])}else{let k=$[P-1]+Q[P-1].length-X;h.push(qo(O,Q,$,y,P,X,k,null,o))}f.push(X+g-n)}}return u(e,t,i,r,0),(a||o)(h,f,s)}var Tt=class{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let r=this.map.get(e);r||this.map.set(e,r=new Map),r.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof yO?this.setBuffer(e.context.buffer,e.index,t):e instanceof je&&this.map.set(e.tree,t)}get(e){return e instanceof yO?this.getBuffer(e.context.buffer,e.index):e instanceof je?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}},Vt=class O{constructor(e,t,i,r,n=!1,s=!1){this.from=e,this.to=t,this.tree=i,this.offset=r,this.open=(n?1:0)|(s?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let r=[new O(0,e.length,e,0,!1,i)];for(let n of t)n.to>e.length&&r.push(n);return r}static applyChanges(e,t,i=128){if(!t.length)return e;let r=[],n=1,s=e.length?e[0]:null;for(let a=0,o=0,l=0;;a++){let c=a<t.length?t[a]:null,h=c?c.fromA:1e9;if(h-o>=i)for(;s&&s.from<h;){let f=s;if(o>=f.from||h<=f.to||l){let u=Math.max(f.from,o)-l,Q=Math.min(f.to,h)-l;f=u>=Q?null:new O(u,Q,f.tree,f.offset+l,a>0,!!c)}if(f&&r.push(f),s.to>h)break;s=n<e.length?e[n++]:null}if(!c)break;o=c.toA,l=c.toA-c.toB}return r}},eO=class{startParse(e,t,i){return typeof e==\"string\"&&(e=new Zo(e)),i=i?i.length?i.map(r=>new We(r.from,r.to)):[new We(0,0)]:[new We(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let r=this.startParse(e,t,i);for(;;){let n=r.advance();if(n)return n}}},Zo=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};function xO(O){return(e,t,i,r)=>new _o(e,O,t,i,r)}var Wn=class{constructor(e,t,i,r,n,s){this.parser=e,this.parse=t,this.overlay=i,this.bracketed=r,this.target=n,this.from=s}};function Ld(O){if(!O.length||O.some(e=>e.from>=e.to))throw new RangeError(\"Invalid inner parse ranges given: \"+JSON.stringify(O))}var vo=class{constructor(e,t,i,r,n,s,a,o){this.parser=e,this.predicate=t,this.mounts=i,this.index=r,this.start=n,this.bracketed=s,this.target=a,this.prev=o,this.depth=0,this.ranges=[]}},Yo=new R({perNode:!0}),_o=class{constructor(e,t,i,r,n){this.nest=t,this.input=i,this.fragments=r,this.ranges=n,this.inner=[],this.innerDone=0,this.baseTree=null,this.stoppedAt=null,this.baseParse=e}advance(){if(this.baseParse){let i=this.baseParse.advance();if(!i)return null;if(this.baseParse=null,this.baseTree=i,this.startInner(),this.stoppedAt!=null)for(let r of this.inner)r.parse.stopAt(this.stoppedAt)}if(this.innerDone==this.inner.length){let i=this.baseTree;return this.stoppedAt!=null&&(i=new D(i.type,i.children,i.positions,i.length,i.propValues.concat([[Yo,this.stoppedAt]]))),i}let e=this.inner[this.innerDone],t=e.parse.advance();if(t){this.innerDone++;let i=Object.assign(Object.create(null),e.target.props);i[R.mounted.id]=new Ht(t,e.overlay,e.parser,e.bracketed),e.target.props=i}return null}get parsedPos(){if(this.baseParse)return 0;let e=this.input.length;for(let t=this.innerDone;t<this.inner.length;t++)this.inner[t].from<e&&(e=Math.min(e,this.inner[t].parse.parsedPos));return e}stopAt(e){if(this.stoppedAt=e,this.baseParse)this.baseParse.stopAt(e);else for(let t=this.innerDone;t<this.inner.length;t++)this.inner[t].parse.stopAt(e)}startInner(){let e=new Ro(this.fragments),t=null,i=null,r=new li(new je(this.baseTree,this.ranges[0].from,0,null),C.IncludeAnonymous|C.IgnoreMounts);e:for(let n,s;;){let a=!0,o;if(this.stoppedAt!=null&&r.from>=this.stoppedAt)a=!1;else if(e.hasNode(r)){if(t){let l=t.mounts.find(c=>c.frag.from<=r.from&&c.frag.to>=r.to&&c.mount.overlay);if(l)for(let c of l.mount.overlay){let h=c.from+l.pos,f=c.to+l.pos;h>=r.from&&f<=r.to&&!t.ranges.some(u=>u.from<f&&u.to>h)&&t.ranges.push({from:h,to:f})}}a=!1}else if(i&&(s=rX(i.ranges,r.from,r.to)))a=s!=2;else if(!r.type.isAnonymous&&(n=this.nest(r,this.input))&&(r.from<r.to||!n.overlay)){r.tree||(nX(r),t&&t.depth++,i&&i.depth++);let l=e.findMounts(r.from,n.parser);if(typeof n.overlay==\"function\")t=new vo(n.parser,n.overlay,l,this.inner.length,r.from,!!n.bracketed,r.tree,t);else{let c=Dd(this.ranges,n.overlay||(r.from<r.to?[new We(r.from,r.to)]:[]));c.length&&Ld(c),(c.length||!n.overlay)&&this.inner.push(new Wn(n.parser,c.length?n.parser.startParse(this.input,Id(l,c),c):n.parser.startParse(\"\"),n.overlay?n.overlay.map(h=>new We(h.from-r.from,h.to-r.from)):null,!!n.bracketed,r.tree,c.length?c[0].from:r.from)),n.overlay?c.length&&(i={ranges:c,depth:0,prev:i}):a=!1}}else if(t&&(o=t.predicate(r))&&(o===!0&&(o=new We(r.from,r.to)),o.from<o.to)){let l=t.ranges.length-1;l>=0&&t.ranges[l].to==o.from?t.ranges[l]={from:t.ranges[l].from,to:o.to}:t.ranges.push(o)}if(a&&r.firstChild())t&&t.depth++,i&&i.depth++;else for(;!r.nextSibling();){if(!r.parent())break e;if(t&&!--t.depth){let l=Dd(this.ranges,t.ranges);l.length&&(Ld(l),this.inner.splice(t.index,0,new Wn(t.parser,t.parser.startParse(this.input,Id(t.mounts,l),l),t.ranges.map(c=>new We(c.from-t.start,c.to-t.start)),t.bracketed,t.target,l[0].from))),t=t.prev}i&&!--i.depth&&(i=i.prev)}}}};function rX(O,e,t){for(let i of O){if(i.from>=t)break;if(i.to>e)return i.from<=e&&i.to>=t?2:1}return 0}function Md(O,e,t,i,r,n){if(e<t){let s=O.buffer[e+1];i.push(O.slice(e,t,s)),r.push(s-n)}}function nX(O){let{node:e}=O,t=[],i=e.context.buffer;do t.push(O.index),O.parent();while(!O.tree);let r=O.tree,n=r.children.indexOf(i),s=r.children[n],a=s.buffer,o=[n];function l(c,h,f,u,Q,$){let p=t[$],m=[],g=[];Md(s,c,p,m,g,u);let P=a[p+1],y=a[p+2];o.push(m.length);let X=$?l(p+4,a[p+3],s.set.types[a[p]],P,y-P,$-1):e.toTree();return m.push(X),g.push(P-u),Md(s,a[p+3],h,m,g,u),new D(f,m,g,Q)}r.children[n]=l(0,a.length,ue.none,0,s.length,t.length-1);for(let c of o){let h=O.tree.children[c],f=O.tree.positions[c];O.yield(new je(h,f+O.from,c,O._tree))}}var jn=class{constructor(e,t){this.offset=t,this.done=!1,this.cursor=e.cursor(C.IncludeAnonymous|C.IgnoreMounts)}moveTo(e){let{cursor:t}=this,i=e-this.offset;for(;!this.done&&t.from<i;)t.to>=e&&t.enter(i,1,C.IgnoreOverlays|C.ExcludeBuffers)||t.next(!1)||(this.done=!0)}hasNode(e){if(this.moveTo(e.from),!this.done&&this.cursor.from+this.offset==e.from&&this.cursor.tree)for(let t=this.cursor.tree;;){if(t==e.tree)return!0;if(t.children.length&&t.positions[0]==0&&t.children[0]instanceof D)t=t.children[0];else break}return!1}},Ro=class{constructor(e){var t;if(this.fragments=e,this.curTo=0,this.fragI=0,e.length){let i=this.curFrag=e[0];this.curTo=(t=i.tree.prop(Yo))!==null&&t!==void 0?t:i.to,this.inner=new jn(i.tree,-i.offset)}else this.curFrag=this.inner=null}hasNode(e){for(;this.curFrag&&e.from>=this.curTo;)this.nextFrag();return this.curFrag&&this.curFrag.from<=e.from&&this.curTo>=e.to&&this.inner.hasNode(e)}nextFrag(){var e;if(this.fragI++,this.fragI==this.fragments.length)this.curFrag=this.inner=null;else{let t=this.curFrag=this.fragments[this.fragI];this.curTo=(e=t.tree.prop(Yo))!==null&&e!==void 0?e:t.to,this.inner=new jn(t.tree,-t.offset)}}findMounts(e,t){var i;let r=[];if(this.inner){this.inner.cursor.moveTo(e,1);for(let n=this.inner.cursor.node;n;n=n.parent){let s=(i=n.tree)===null||i===void 0?void 0:i.prop(R.mounted);if(s&&s.parser==t)for(let a=this.fragI;a<this.fragments.length;a++){let o=this.fragments[a];if(o.from>=n.to)break;o.tree==this.curFrag.tree&&r.push({frag:o,pos:n.from-o.offset,mount:s})}}}return r}};function Dd(O,e){let t=null,i=e;for(let r=1,n=0;r<O.length;r++){let s=O[r-1].to,a=O[r].from;for(;n<i.length;n++){let o=i[n];if(o.from>=a)break;o.to<=s||(t||(i=t=e.slice()),o.from<s?(t[n]=new We(o.from,s),o.to>a&&t.splice(n+1,0,new We(a,o.to))):o.to>a?t[n--]=new We(a,o.to):t.splice(n--,1))}}return i}function sX(O,e,t,i){let r=0,n=0,s=!1,a=!1,o=-1e9,l=[];for(;;){let c=r==O.length?1e9:s?O[r].to:O[r].from,h=n==e.length?1e9:a?e[n].to:e[n].from;if(s!=a){let f=Math.max(o,t),u=Math.min(c,h,i);f<u&&l.push(new We(f,u))}if(o=Math.min(c,h),o==1e9)break;c==o&&(s?(s=!1,r++):s=!0),h==o&&(a?(a=!1,n++):a=!0)}return l}function Id(O,e){let t=[];for(let{pos:i,mount:r,frag:n}of O){let s=i+(r.overlay?r.overlay[0].from:0),a=s+r.tree.length,o=Math.max(n.from,s),l=Math.min(n.to,a);if(r.overlay){let c=r.overlay.map(f=>new We(f.from+i,f.to+i)),h=sX(e,c,o,l);for(let f=0,u=o;;f++){let Q=f==h.length,$=Q?l:h[f].from;if($>u&&t.push(new Vt(u,$,r.tree,-s,n.from>=u||n.openStart,n.to<=$||n.openEnd)),Q)break;u=h[f].to}}else t.push(new Vt(o,l,r.tree,-s,n.from>=s||n.openStart,n.to<=a||n.openEnd))}return t}var aX=0,Be=class O{constructor(e,t,i,r){this.name=e,this.set=t,this.base=i,this.modified=r,this.id=aX++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e==\"string\"?e:\"?\";if(e instanceof O&&(t=e),t?.base)throw new Error(\"Can not derive from a modified tag\");let r=new O(i,[],null,[]);if(r.set.push(r),t)for(let n of t.set)r.set.push(n);return r}static defineModifier(e){let t=new An(e);return i=>i.modified.indexOf(t)>-1?i:An.get(i.base||i,i.modified.concat(t).sort((r,n)=>r.id-n.id))}},oX=0,An=class O{constructor(e){this.name=e,this.instances=[],this.id=oX++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(a=>a.base==e&&lX(t,a.modified));if(i)return i;let r=[],n=new Be(e.name,r,e,t);for(let a of t)a.instances.push(n);let s=cX(t);for(let a of e.set)if(!a.modified.length)for(let o of s)r.push(O.get(a,o));return n}};function lX(O,e){return O.length==e.length&&O.every((t,i)=>t==e[i])}function cX(O){let e=[[]];for(let t=0;t<O.length;t++)for(let i=0,r=e.length;i<r;i++)e.push(e[i].concat(O[t]));return e.sort((t,i)=>i.length-t.length)}function F(O){let e=Object.create(null);for(let t in O){let i=O[t];Array.isArray(i)||(i=[i]);for(let r of t.split(\" \"))if(r){let n=[],s=2,a=r;for(let h=0;;){if(a==\"...\"&&h>0&&h+3==r.length){s=1;break}let f=/^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(a);if(!f)throw new RangeError(\"Invalid path: \"+r);if(n.push(f[0]==\"*\"?\"\":f[0][0]=='\"'?JSON.parse(f[0]):f[0]),h+=f[0].length,h==r.length)break;let u=r[h++];if(h==r.length&&u==\"!\"){s=0;break}if(u!=\"/\")throw new RangeError(\"Invalid path: \"+r);a=r.slice(h)}let o=n.length-1,l=n[o];if(!l)throw new RangeError(\"Invalid path: \"+r);let c=new wO(i,s,o>0?n.slice(0,o):null);e[l]=c.sort(e[l])}}return Kd.add(e)}var Kd=new R({combine(O,e){let t,i,r;for(;O||e;){if(!O||e&&O.depth>=e.depth?(r=e,e=e.next):(r=O,O=O.next),t&&t.mode==r.mode&&!r.context&&!t.context)continue;let n=new wO(r.tags,r.mode,r.context);t?t.next=n:i=n,t=n}return i}}),wO=class{constructor(e,t,i,r){this.tags=e,this.mode=t,this.context=i,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth<this.depth?(this.next=e,this):(e.next=this.sort(e.next),e)}get depth(){return this.context?this.context.length:0}};wO.empty=new wO([],2,null);function jo(O,e){let t=Object.create(null);for(let n of O)if(!Array.isArray(n.tag))t[n.tag.id]=n.class;else for(let s of n.tag)t[s.id]=n.class;let{scope:i,all:r=null}=e||{};return{style:n=>{let s=r;for(let a of n)for(let o of a.set){let l=t[o.id];if(l){s=s?s+\" \"+l:l;break}}return s},scope:i}}function hX(O,e){let t=null;for(let i of O){let r=i.style(e);r&&(t=t?t+\" \"+r:r)}return t}function Jd(O,e,t,i=0,r=O.length){let n=new Uo(i,Array.isArray(e)?e:[e],t);n.highlightRange(O.cursor(),i,r,\"\",n.highlighters),n.flush(r)}var Uo=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=\"\"}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,r,n){let{type:s,from:a,to:o}=e;if(a>=i||o<=t)return;s.isTop&&(n=this.highlighters.filter(u=>!u.scope||u.scope(s)));let l=r,c=fX(e)||wO.empty,h=hX(n,c.tags);if(h&&(l&&(l+=\" \"),l+=h,c.mode==1&&(r+=(r?\" \":\"\")+h)),this.startSpan(Math.max(t,a),l),c.opaque)return;let f=e.tree&&e.tree.prop(R.mounted);if(f&&f.overlay){let u=e.node.enter(f.overlay[0].from+a,1),Q=this.highlighters.filter(p=>!p.scope||p.scope(f.tree.type)),$=e.firstChild();for(let p=0,m=a;;p++){let g=p<f.overlay.length?f.overlay[p]:null,P=g?g.from+a:o,y=Math.max(t,m),X=Math.min(i,P);if(y<X&&$)for(;e.from<X&&(this.highlightRange(e,y,X,r,n),this.startSpan(Math.min(X,e.to),l),!(e.to>=P||!e.nextSibling())););if(!g||P>i)break;m=g.to+a,m>t&&(this.highlightRange(u.cursor(),Math.max(t,g.from+a),Math.min(i,m),\"\",Q),this.startSpan(Math.min(i,m),l))}$&&e.parent()}else if(e.firstChild()){f&&(r=\"\");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,r,n),this.startSpan(Math.min(i,e.to),l)}while(e.nextSibling());e.parent()}}};function fX(O){let e=O.type.prop(Kd);for(;e&&e.context&&!O.matchContext(e.context);)e=e.next;return e||null}var w=Be.define,Cn=w(),tO=w(),Fd=w(tO),Hd=w(tO),OO=w(),Gn=w(OO),zo=w(OO),xt=w(),kO=w(xt),bt=w(),yt=w(),Wo=w(),Or=w(Wo),En=w(),d={comment:Cn,lineComment:w(Cn),blockComment:w(Cn),docComment:w(Cn),name:tO,variableName:w(tO),typeName:Fd,tagName:w(Fd),propertyName:Hd,attributeName:w(Hd),className:w(tO),labelName:w(tO),namespace:w(tO),macroName:w(tO),literal:OO,string:Gn,docString:w(Gn),character:w(Gn),attributeValue:w(Gn),number:zo,integer:w(zo),float:w(zo),bool:w(OO),regexp:w(OO),escape:w(OO),color:w(OO),url:w(OO),keyword:bt,self:w(bt),null:w(bt),atom:w(bt),unit:w(bt),modifier:w(bt),operatorKeyword:w(bt),controlKeyword:w(bt),definitionKeyword:w(bt),moduleKeyword:w(bt),operator:yt,derefOperator:w(yt),arithmeticOperator:w(yt),logicOperator:w(yt),bitwiseOperator:w(yt),compareOperator:w(yt),updateOperator:w(yt),definitionOperator:w(yt),typeOperator:w(yt),controlOperator:w(yt),punctuation:Wo,separator:w(Wo),bracket:Or,angleBracket:w(Or),squareBracket:w(Or),paren:w(Or),brace:w(Or),content:xt,heading:kO,heading1:w(kO),heading2:w(kO),heading3:w(kO),heading4:w(kO),heading5:w(kO),heading6:w(kO),contentSeparator:w(xt),list:w(xt),quote:w(xt),emphasis:w(xt),strong:w(xt),link:w(xt),monospace:w(xt),strikethrough:w(xt),inserted:w(),deleted:w(),changed:w(),invalid:w(),meta:En,documentMeta:w(En),annotation:w(En),processingInstruction:w(En),definition:Be.defineModifier(\"definition\"),constant:Be.defineModifier(\"constant\"),function:Be.defineModifier(\"function\"),standard:Be.defineModifier(\"standard\"),local:Be.defineModifier(\"local\"),special:Be.defineModifier(\"special\")};for(let O in d){let e=d[O];e instanceof Be&&(e.name=O)}var a_=jo([{tag:d.link,class:\"tok-link\"},{tag:d.heading,class:\"tok-heading\"},{tag:d.emphasis,class:\"tok-emphasis\"},{tag:d.strong,class:\"tok-strong\"},{tag:d.keyword,class:\"tok-keyword\"},{tag:d.atom,class:\"tok-atom\"},{tag:d.bool,class:\"tok-bool\"},{tag:d.url,class:\"tok-url\"},{tag:d.labelName,class:\"tok-labelName\"},{tag:d.inserted,class:\"tok-inserted\"},{tag:d.deleted,class:\"tok-deleted\"},{tag:d.literal,class:\"tok-literal\"},{tag:d.string,class:\"tok-string\"},{tag:d.number,class:\"tok-number\"},{tag:[d.regexp,d.escape,d.special(d.string)],class:\"tok-string2\"},{tag:d.variableName,class:\"tok-variableName\"},{tag:d.local(d.variableName),class:\"tok-variableName tok-local\"},{tag:d.definition(d.variableName),class:\"tok-variableName tok-definition\"},{tag:d.special(d.variableName),class:\"tok-variableName2\"},{tag:d.definition(d.propertyName),class:\"tok-propertyName tok-definition\"},{tag:d.typeName,class:\"tok-typeName\"},{tag:d.namespace,class:\"tok-namespace\"},{tag:d.className,class:\"tok-className\"},{tag:d.macroName,class:\"tok-macroName\"},{tag:d.propertyName,class:\"tok-propertyName\"},{tag:d.operator,class:\"tok-operator\"},{tag:d.comment,class:\"tok-comment\"},{tag:d.meta,class:\"tok-meta\"},{tag:d.invalid,class:\"tok-invalid\"},{tag:d.punctuation,class:\"tok-punctuation\"}]);var Co,iO=new R;function or(O){return Z.define({combine:O?e=>e.concat(O):void 0})}var Dn=new R,Re=class{constructor(e,t,i=[],r=\"\"){this.data=e,this.name=r,I.prototype.hasOwnProperty(\"tree\")||Object.defineProperty(I.prototype,\"tree\",{get(){return U(this)}}),this.parser=t,this.extension=[rO.of(this),I.languageData.of((n,s,a)=>{let o=eu(n,s,a),l=o.type.prop(iO);if(!l)return[];let c=n.facet(l),h=o.type.prop(Dn);if(h){let f=o.resolve(s-o.from,a);for(let u of h)if(u.test(f,n)){let Q=n.facet(u.facet);return u.type==\"replace\"?Q:Q.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return eu(e,t,i).type.prop(iO)==this.data}findRegions(e){let t=e.facet(rO);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],r=(n,s)=>{if(n.prop(iO)==this.data){i.push({from:s,to:s+n.length});return}let a=n.prop(R.mounted);if(a){if(a.tree.prop(iO)==this.data){if(a.overlay)for(let o of a.overlay)i.push({from:o.from+s,to:o.to+s});else i.push({from:s,to:s+n.length});return}else if(a.overlay){let o=i.length;if(r(a.tree,a.overlay[0].from+s),i.length>o)return}}for(let o=0;o<n.children.length;o++){let l=n.children[o];l instanceof D&&r(l,n.positions[o]+s)}};return r(U(e),0),i}get allowsNesting(){return!0}};Re.setState=V.define();function eu(O,e,t){let i=O.facet(rO),r=U(O).topNode;if(!i||i.allowsNesting)for(let n=r;n;n=n.enter(e,t,C.ExcludeBuffers|C.EnterBracketed))n.type.isTop&&(r=n);return r}var ne=class O extends Re{constructor(e,t,i){super(e,t,[],i),this.parser=t}static define(e){let t=or(e.languageData);return new O(t,e.parser.configure({props:[iO.add(i=>i.isTop?t:void 0)]}),e.name)}configure(e,t){return new O(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function U(O){let e=O.field(Re.state,!1);return e?e.tree:D.empty}var Lo=class{constructor(e){this.doc=e,this.cursorPos=0,this.string=\"\",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e<i||t>=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}},ir=null,nr=class O{constructor(e,t,i=[],r,n,s,a,o){this.parser=e,this.state=t,this.fragments=i,this.tree=r,this.treeLen=n,this.viewport=s,this.skipped=a,this.scheduleOn=o,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new O(e,t,[],D.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Lo(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=D.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e==\"number\"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t<this.state.doc.length&&this.parse.stopAt(t);;){let r=this.parse.advance();if(r)if(this.fragments=this.withoutTempSkipped(Vt.addTree(r,this.fragments,this.parse.stoppedAt!=null)),this.treeLen=(i=this.parse.stoppedAt)!==null&&i!==void 0?i:this.state.doc.length,this.tree=r,this.parse=null,this.treeLen<(t??this.state.doc.length))this.parse=this.startParse();else return!0;if(e())return!1}})}takeTree(){let e,t;this.parse&&(e=this.parse.parsedPos)>=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Vt.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=ir;ir=this;try{return e()}finally{ir=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=tu(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:r,treeLen:n,viewport:s,skipped:a}=this;if(this.takeTree(),!e.empty){let o=[];if(e.iterChangedRanges((l,c,h,f)=>o.push({fromA:l,toA:c,fromB:h,toB:f})),i=Vt.applyChanges(i,o),r=D.empty,n=0,s={from:e.mapPos(s.from,-1),to:e.mapPos(s.to,1)},this.skipped.length){a=[];for(let l of this.skipped){let c=e.mapPos(l.from,1),h=e.mapPos(l.to,-1);c<h&&a.push({from:c,to:h})}}}return new O(this.parser,t,i,r,n,s,a,this.scheduleOn)}updateViewport(e){if(this.viewport.from==e.from&&this.viewport.to==e.to)return!1;this.viewport=e;let t=this.skipped.length;for(let i=0;i<this.skipped.length;i++){let{from:r,to:n}=this.skipped[i];r<e.to&&n>e.from&&(this.fragments=tu(this.fragments,r,n),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends eO{createParse(t,i,r){let n=r[0].from,s=r[r.length-1].to;return{parsedPos:n,advance(){let o=ir;if(o){for(let l of r)o.tempSkipped.push(l);e&&(o.scheduleOn=o.scheduleOn?Promise.all([o.scheduleOn,e]):e)}return this.parsedPos=s,new D(ue.none,[],[],s-n)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return ir}};function tu(O,e,t){return Vt.applyChanges(O,[{fromA:e,toA:t,fromB:e,toB:t}])}var sr=class O{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new O(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=nr.create(e.facet(rO).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new O(i)}};Re.state=ce.define({create:sr.init,update(O,e){for(let t of e.effects)if(t.is(Re.setState))return t.value;return e.startState.facet(rO)!=e.state.facet(rO)?sr.init(e.state):O.apply(e)}});var au=O=>{let e=setTimeout(()=>O(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<\"u\"&&(au=O=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(O,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var Go=typeof navigator<\"u\"&&(!((Co=navigator.scheduling)===null||Co===void 0)&&Co.isInputPending)?()=>navigator.scheduling.isInputPending():null,dX=he.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Re.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Re.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=au(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnd<t&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=t+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:i,viewport:{to:r}}=this.view,n=i.field(Re.state);if(n.tree==n.context.tree&&n.context.isDone(r+1e5))return;let s=Date.now()+Math.min(this.chunkBudget,100,e&&!Go?Math.max(25,e.timeRemaining()-5):1e9),a=n.context.treeLen<r&&i.doc.length>r+1e3,o=n.context.work(()=>Go&&Go()||Date.now()>s,r+(a?0:1e5));this.chunkBudget-=Date.now()-t,(o||this.chunkBudget<=0)&&(n.context.takeTree(),this.view.dispatch({effects:Re.setState.of(new sr(n.context))})),this.chunkBudget>0&&!(o&&!a)&&this.scheduleWork(),this.checkAsyncSchedule(n.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>Xe(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),rO=Z.define({combine(O){return O.length?O[0]:null},enables:O=>[Re.state,dX,T.contentAttributes.compute([O],e=>{let t=e.facet(O);return t&&t.name?{\"data-language\":t.name}:{}})]}),J=class{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}},ar=class O{constructor(e,t,i,r,n,s=void 0){this.name=e,this.alias=t,this.extensions=i,this.filename=r,this.loadFunc=n,this.support=s,this.loading=null}load(){return this.loading||(this.loading=this.loadFunc().then(e=>this.support=e,e=>{throw this.loading=null,e}))}static of(e){let{load:t,support:i}=e;if(!t){if(!i)throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");t=()=>Promise.resolve(i)}return new O(e.name,(e.alias||[]).concat(e.name).map(r=>r.toLowerCase()),e.extensions||[],e.filename,t,i)}static matchFilename(e,t){for(let r of e)if(r.filename&&r.filename.test(t))return r;let i=/\\.([^.]+)$/.exec(t);if(i){for(let r of e)if(r.extensions.indexOf(i[1])>-1)return r}return null}static matchLanguageName(e,t,i=!0){t=t.toLowerCase();for(let r of e)if(r.alias.some(n=>n==t))return r;if(i)for(let r of e)for(let n of r.alias){let s=t.indexOf(n);if(s>-1&&(n.length>2||!/\\w/.test(t[s-1])&&!/\\w/.test(t[s+n.length])))return r}return null}},uX=Z.define(),nO=Z.define({combine:O=>{if(!O.length)return\"  \";let e=O[0];if(!e||/\\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error(\"Invalid indent unit: \"+JSON.stringify(O[0]));return e}});function lr(O){let e=O.facet(nO);return e.charCodeAt(0)==9?O.tabSize*e.length:e.length}function hi(O,e){let t=\"\",i=O.tabSize,r=O.facet(nO)[0];if(r==\"\t\"){for(;e>=i;)t+=\"\t\",e-=i;r=\" \"}for(let n=0;n<e;n++)t+=r;return t}function In(O,e){O instanceof I&&(O=new ZO(O));for(let i of O.state.facet(uX)){let r=i(O,e);if(r!==void 0)return r}let t=U(O.state);return t.length>=e?QX(O,t,e):null}var ZO=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=lr(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:n}=this.options;return r!=null&&r>=i.from&&r<=i.to?n&&r==e?{text:\"\",from:e}:(t<0?r<e:r<=e)?{text:i.text.slice(r-i.from),from:r}:{text:i.text.slice(0,r-i.from),from:i.from}:i}textAfterPos(e,t=1){if(this.options.simulateDoubleBreak&&e==this.options.simulateBreak)return\"\";let{text:i,from:r}=this.lineAt(e,t);return i.slice(e-r,Math.min(i.length,e+100-r))}column(e,t=1){let{text:i,from:r}=this.lineAt(e,t),n=this.countColumn(i,e-r),s=this.options.overrideIndentation?this.options.overrideIndentation(r):-1;return s>-1&&(n+=s-this.countColumn(i,i.search(/\\S|$/))),n}countColumn(e,t=e.length){return ve(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:r}=this.lineAt(e,t),n=this.options.overrideIndentation;if(n){let s=n(r);if(s>-1)return s}return this.countColumn(i,i.search(/\\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},se=new R;function QX(O,e,t){let i=e.resolveStack(t),r=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(r!=i.node){let n=[];for(let s=r;s&&!(s.from<i.node.from||s.to>i.node.to||s.from==i.node.from&&s.type==i.node.type);s=s.parent)n.push(s);for(let s=n.length-1;s>=0;s--)i={node:n[s],next:i}}return ou(i,O,t)}function ou(O,e,t){for(let i=O;i;i=i.next){let r=pX(i.node);if(r)return r(Mo.create(e,t,i))}return 0}function $X(O){return O.pos==O.options.simulateBreak&&O.options.simulateDoubleBreak}function pX(O){let e=O.type.prop(se);if(e)return e;let t=O.firstChild,i;if(t&&(i=t.type.prop(R.closedBy))){let r=O.lastChild,n=r&&i.indexOf(r.name)>-1;return s=>lu(s,!0,1,void 0,n&&!$X(s)?r.from:void 0)}return O.parent==null?mX:null}function mX(){return 0}var Mo=class O extends ZO{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new O(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(gX(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return ou(this.context.next,this.base,this.pos)}};function gX(O,e){for(let t=e;t;t=t.parent)if(O==t)return!0;return!1}function PX(O){let e=O.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let r=O.options.simulateBreak,n=O.state.doc.lineAt(t.from),s=r==null||r<=n.from?n.to:Math.min(n.to,r);for(let a=t.to;;){let o=e.childAfter(a);if(!o||o==i)return null;if(!o.type.isSkipped){if(o.from>=s)return null;let l=/^ */.exec(n.text.slice(t.to-n.from))[0].length;return{from:t.from,to:t.to+l}}a=o.to}}function be({closing:O,align:e=!0,units:t=1}){return i=>lu(i,e,t,O)}function lu(O,e,t,i,r){let n=O.textAfter,s=n.match(/^\\s*/)[0].length,a=i&&n.slice(s,s+i.length)==i||r==O.pos+s,o=e?PX(O):null;return o?a?O.column(o.from):O.column(o.to):O.baseIndent+(a?0:O.unit*t)}var sO=O=>O.baseIndent;function le({except:O,units:e=1}={}){return t=>{let i=O&&O.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}var SX=200;function cu(){return I.transactionFilter.of(O=>{if(!O.docChanged||!O.isUserEvent(\"input.type\")&&!O.isUserEvent(\"input.complete\"))return O;let e=O.startState.languageDataAt(\"indentOnInput\",O.startState.selection.main.head);if(!e.length)return O;let t=O.newDoc,{head:i}=O.newSelection.main,r=t.lineAt(i);if(i>r.from+SX)return O;let n=t.sliceString(r.from,i);if(!e.some(l=>l.test(n)))return O;let{state:s}=O,a=-1,o=[];for(let{head:l}of s.selection.ranges){let c=s.doc.lineAt(l);if(c.from==a)continue;a=c.from;let h=In(s,c.from);if(h==null)continue;let f=/^\\s*/.exec(c.text)[0],u=hi(s,h);f!=u&&o.push({from:c.from,to:c.from+f.length,insert:u})}return o.length?[O,{changes:o,sequential:!0}]:O})}var Ho=Z.define(),te=new R;function me(O){let e=O.firstChild,t=O.lastChild;return e&&e.to<t.from?{from:e.to,to:t.type.isError?O.to:t.from}:null}function XX(O,e,t){let i=U(O);if(i.length<t)return null;let r=i.resolveStack(t,1),n=null;for(let s=r;s;s=s.next){let a=s.node;if(a.to<=t||a.from>t)continue;if(n&&a.from<e)break;let o=a.type.prop(te);if(o&&(a.to<i.length-50||i.length==O.doc.length||!TX(a))){let l=o(a,O);l&&l.from<=t&&l.from>=e&&l.to>t&&(n=l)}}return n}function TX(O){let e=O.lastChild;return e&&e.to==O.to&&e.type.isError}function Ln(O,e,t){for(let i of O.facet(Ho)){let r=i(O,e,t);if(r)return r}return XX(O,e,t)}function hu(O,e){let t=e.mapPos(O.from,1),i=e.mapPos(O.to,-1);return t>=i?void 0:{from:t,to:i}}var Bn=V.define({map:hu}),cr=V.define({map:hu});function fu(O){let e=[];for(let{head:t}of O.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(O.lineBlockAt(t));return e}var vO=ce.define({create(){return Y.none},update(O,e){e.isUserEvent(\"delete\")&&e.changes.iterChangedRanges((t,i)=>O=Ou(O,t,i)),O=O.map(e.changes);for(let t of e.effects)if(t.is(Bn)&&!bX(O,t.value.from,t.value.to)){let{preparePlaceholder:i}=e.state.facet(Ko),r=i?Y.replace({widget:new Do(i(e.state,t.value))}):iu;O=O.update({add:[r.range(t.value.from,t.value.to)]})}else t.is(cr)&&(O=O.update({filter:(i,r)=>t.value.from!=i||t.value.to!=r,filterFrom:t.value.from,filterTo:t.value.to}));return e.selection&&(O=Ou(O,e.selection.main.head)),O},provide:O=>T.decorations.from(O),toJSON(O,e){let t=[];return O.between(0,e.doc.length,(i,r)=>{t.push(i,r)}),t},fromJSON(O){if(!Array.isArray(O)||O.length%2)throw new RangeError(\"Invalid JSON for fold state\");let e=[];for(let t=0;t<O.length;){let i=O[t++],r=O[t++];if(typeof i!=\"number\"||typeof r!=\"number\")throw new RangeError(\"Invalid JSON for fold state\");e.push(iu.range(i,r))}return Y.set(e,!0)}});function Ou(O,e,t=e){let i=!1;return O.between(e,t,(r,n)=>{r<t&&n>e&&(i=!0)}),i?O.update({filterFrom:e,filterTo:t,filter:(r,n)=>r>=t||n<=e}):O}function Mn(O,e,t){var i;let r=null;return(i=O.field(vO,!1))===null||i===void 0||i.between(e,t,(n,s)=>{(!r||r.from>n)&&(r={from:n,to:s})}),r}function bX(O,e,t){let i=!1;return O.between(e,e,(r,n)=>{r==e&&n==t&&(i=!0)}),i}function du(O,e){return O.field(vO,!1)?e:e.concat(V.appendConfig.of($u()))}var yX=O=>{for(let e of fu(O)){let t=Ln(O.state,e.from,e.to);if(t)return O.dispatch({effects:du(O.state,[Bn.of(t),uu(O,t)])}),!0}return!1},xX=O=>{if(!O.state.field(vO,!1))return!1;let e=[];for(let t of fu(O)){let i=Mn(O.state,t.from,t.to);i&&e.push(cr.of(i),uu(O,i,!1))}return e.length&&O.dispatch({effects:e}),e.length>0};function uu(O,e,t=!0){let i=O.state.doc.lineAt(e.from).number,r=O.state.doc.lineAt(e.to).number;return T.announce.of(`${O.state.phrase(t?\"Folded lines\":\"Unfolded lines\")} ${i} ${O.state.phrase(\"to\")} ${r}.`)}var kX=O=>{let{state:e}=O,t=[];for(let i=0;i<e.doc.length;){let r=O.lineBlockAt(i),n=Ln(e,r.from,r.to);n&&t.push(Bn.of(n)),i=(n?O.lineBlockAt(n.to):r).to+1}return t.length&&O.dispatch({effects:du(O.state,t)}),!!t.length},wX=O=>{let e=O.state.field(vO,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,O.state.doc.length,(i,r)=>{t.push(cr.of({from:i,to:r}))}),O.dispatch({effects:t}),!0};var Qu=[{key:\"Ctrl-Shift-[\",mac:\"Cmd-Alt-[\",run:yX},{key:\"Ctrl-Shift-]\",mac:\"Cmd-Alt-]\",run:xX},{key:\"Ctrl-Alt-[\",run:kX},{key:\"Ctrl-Alt-]\",run:wX}],ZX={placeholderDOM:null,preparePlaceholder:null,placeholderText:\"\\u2026\"},Ko=Z.define({combine(O){return xe(O,ZX)}});function $u(O){let e=[vO,YX];return O&&e.push(Ko.of(O)),e}function pu(O,e){let{state:t}=O,i=t.facet(Ko),r=s=>{let a=O.lineBlockAt(O.posAtDOM(s.target)),o=Mn(O.state,a.from,a.to);o&&O.dispatch({effects:cr.of(o)}),s.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(O,r,e);let n=document.createElement(\"span\");return n.textContent=i.placeholderText,n.setAttribute(\"aria-label\",t.phrase(\"folded code\")),n.title=t.phrase(\"unfold\"),n.className=\"cm-foldPlaceholder\",n.onclick=r,n}var iu=Y.replace({widget:new class extends _e{toDOM(O){return pu(O,null)}}}),Do=class extends _e{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return pu(e,this.value)}},vX={openText:\"\\u2304\",closedText:\"\\u203A\",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},rr=class extends Ie{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement(\"span\");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?\"Fold line\":\"Unfold line\"),t}};function mu(O={}){let e={...vX,...O},t=new rr(e,!0),i=new rr(e,!1),r=he.fromClass(class{constructor(s){this.from=s.viewport.from,this.markers=this.buildMarkers(s)}update(s){(s.docChanged||s.viewportChanged||s.startState.facet(rO)!=s.state.facet(rO)||s.startState.field(vO,!1)!=s.state.field(vO,!1)||U(s.startState)!=U(s.state)||e.foldingChanged(s))&&(this.markers=this.buildMarkers(s.view))}buildMarkers(s){let a=new Le;for(let o of s.viewportLineBlocks){let l=Mn(s.state,o.from,o.to)?i:Ln(s.state,o.from,o.to)?t:null;l&&a.add(o.from,o.from,l)}return a.finish()}}),{domEventHandlers:n}=e;return[r,bo({class:\"cm-foldGutter\",markers(s){var a;return((a=s.plugin(r))===null||a===void 0?void 0:a.markers)||M.empty},initialSpacer(){return new rr(e,!1)},domEventHandlers:{...n,click:(s,a,o)=>{if(n.click&&n.click(s,a,o))return!0;let l=Mn(s.state,a.from,a.to);if(l)return s.dispatch({effects:cr.of(l)}),!0;let c=Ln(s.state,a.from,a.to);return c?(s.dispatch({effects:Bn.of(c)}),!0):!1}}}),$u()]}var YX=T.baseTheme({\".cm-foldPlaceholder\":{backgroundColor:\"#eee\",border:\"1px solid #ddd\",color:\"#888\",borderRadius:\".2em\",margin:\"0 1px\",padding:\"0 1px\",cursor:\"pointer\"},\".cm-foldGutter span\":{padding:\"0 1px\",cursor:\"pointer\"}}),ci=class O{constructor(e,t){this.specs=e;let i;function r(a){let o=Ot.newName();return(i||(i=Object.create(null)))[\".\"+o]=a,o}let n=typeof t.all==\"string\"?t.all:t.all?r(t.all):void 0,s=t.scope;this.scope=s instanceof Re?a=>a.prop(iO)==s.data:s?a=>a==s:void 0,this.style=jo(e.map(a=>({tag:a.tag,class:a.class||r(Object.assign({},a,{tag:null}))})),{all:n}).style,this.module=i?new Ot(i):null,this.themeType=t.themeType}static define(e,t){return new O(e,t||{})}},Io=Z.define(),gu=Z.define({combine(O){return O.length?[O[0]]:null}});function Eo(O){let e=O.facet(Io);return e.length?e:O.facet(gu)}function Nn(O,e){let t=[_X],i;return O instanceof ci&&(O.module&&t.push(T.styleModule.of(O.module)),i=O.themeType),e?.fallback?t.push(gu.of(O)):i?t.push(Io.computeN([T.darkTheme],r=>r.facet(T.darkTheme)==(i==\"dark\")?[O]:[])):t.push(Io.of(O)),t}var Bo=class{constructor(e){this.markCache=Object.create(null),this.tree=U(e.state),this.decorations=this.buildDeco(e,Eo(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=U(e.state),i=Eo(e.state),r=i!=Eo(e.startState),{viewport:n}=e.view,s=e.changes.mapPos(this.decoratedTo,1);t.length<n.to&&!r&&t.type==this.tree.type&&s>=n.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=s):(t!=this.tree||e.viewportChanged||r)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=n.to)}buildDeco(e,t){if(!t||!this.tree.length)return Y.none;let i=new Le;for(let{from:r,to:n}of e.visibleRanges)Jd(this.tree,t,(s,a,o)=>{i.add(s,a,this.markCache[o]||(this.markCache[o]=Y.mark({class:o})))},r,n);return i.finish()}},_X=ze.high(he.fromClass(Bo,{decorations:O=>O.decorations})),Pu=ci.define([{tag:d.meta,color:\"#404740\"},{tag:d.link,textDecoration:\"underline\"},{tag:d.heading,textDecoration:\"underline\",fontWeight:\"bold\"},{tag:d.emphasis,fontStyle:\"italic\"},{tag:d.strong,fontWeight:\"bold\"},{tag:d.strikethrough,textDecoration:\"line-through\"},{tag:d.keyword,color:\"#708\"},{tag:[d.atom,d.bool,d.url,d.contentSeparator,d.labelName],color:\"#219\"},{tag:[d.literal,d.inserted],color:\"#164\"},{tag:[d.string,d.deleted],color:\"#a11\"},{tag:[d.regexp,d.escape,d.special(d.string)],color:\"#e40\"},{tag:d.definition(d.variableName),color:\"#00f\"},{tag:d.local(d.variableName),color:\"#30a\"},{tag:[d.typeName,d.namespace],color:\"#085\"},{tag:d.className,color:\"#167\"},{tag:[d.special(d.variableName),d.macroName],color:\"#256\"},{tag:d.definition(d.propertyName),color:\"#00c\"},{tag:d.comment,color:\"#940\"},{tag:d.invalid,color:\"#f00\"}]),RX=T.baseTheme({\"&.cm-focused .cm-matchingBracket\":{backgroundColor:\"#328c8252\"},\"&.cm-focused .cm-nonmatchingBracket\":{backgroundColor:\"#bb555544\"}}),Su=1e4,Xu=\"()[]{}\",Tu=Z.define({combine(O){return xe(O,{afterCursor:!0,brackets:Xu,maxScanDistance:Su,renderMatch:zX})}}),VX=Y.mark({class:\"cm-matchingBracket\"}),qX=Y.mark({class:\"cm-nonmatchingBracket\"});function zX(O){let e=[],t=O.matched?VX:qX;return e.push(t.range(O.start.from,O.start.to)),O.end&&e.push(t.range(O.end.from,O.end.to)),e}var UX=ce.define({create(){return Y.none},update(O,e){if(!e.docChanged&&!e.selection)return O;let t=[],i=e.state.facet(Tu);for(let r of e.state.selection.ranges){if(!r.empty)continue;let n=dt(e.state,r.head,-1,i)||r.head>0&&dt(e.state,r.head-1,1,i)||i.afterCursor&&(dt(e.state,r.head,1,i)||r.head<e.state.doc.length&&dt(e.state,r.head+1,-1,i));n&&(t=t.concat(i.renderMatch(n,e.state)))}return Y.set(t,!0)},provide:O=>T.decorations.from(O)}),WX=[UX,RX];function bu(O={}){return[Tu.of(O),WX]}var hr=new R;function No(O,e,t){let i=O.prop(e<0?R.openedBy:R.closedBy);if(i)return i;if(O.name.length==1){let r=t.indexOf(O.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function Fo(O){let e=O.type.prop(hr);return e?e(O.node):O}function dt(O,e,t,i={}){let r=i.maxScanDistance||Su,n=i.brackets||Xu,s=U(O),a=s.resolveInner(e,t);for(let o=a;o;o=o.parent){let l=No(o.type,t,n);if(l&&o.from<o.to){let c=Fo(o);if(c&&(t>0?e>=c.from&&e<c.to:e>c.from&&e<=c.to))return jX(O,e,t,o,c,l,n)}}return CX(O,e,t,s,a.type,r,n)}function jX(O,e,t,i,r,n,s){let a=i.parent,o={from:r.from,to:r.to},l=0,c=a?.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(l==0&&n.indexOf(c.type.name)>-1&&c.from<c.to){let h=Fo(c);return{start:o,end:h?{from:h.from,to:h.to}:void 0,matched:!0}}else if(No(c.type,t,s))l++;else if(No(c.type,-t,s)){if(l==0){let h=Fo(c);return{start:o,end:h&&h.from<h.to?{from:h.from,to:h.to}:void 0,matched:!1}}l--}}while(t<0?c.prevSibling():c.nextSibling());return{start:o,matched:!1}}function CX(O,e,t,i,r,n,s){let a=t<0?O.sliceDoc(e-1,e):O.sliceDoc(e,e+1),o=s.indexOf(a);if(o<0||o%2==0!=t>0)return null;let l={from:t<0?e-1:e,to:t>0?e+1:e},c=O.doc.iterRange(e,t>0?O.doc.length:0),h=0;for(let f=0;!c.next().done&&f<=n;){let u=c.value;t<0&&(f+=u.length);let Q=e+f*t;for(let $=t>0?0:u.length-1,p=t>0?u.length:-1;$!=p;$+=t){let m=s.indexOf(u[$]);if(!(m<0||i.resolveInner(Q+$,1).type!=r))if(m%2==0==t>0)h++;else{if(h==1)return{start:l,end:{from:Q+$,to:Q+$+1},matched:m>>1==o>>1};h--}}t>0&&(f+=u.length)}return c.done?{start:l,matched:!1}:null}var GX=Object.create(null),ru=[ue.none];var nu=[],su=Object.create(null),EX=Object.create(null);for(let[O,e]of[[\"variable\",\"variableName\"],[\"variable-2\",\"variableName.special\"],[\"string-2\",\"string.special\"],[\"def\",\"variableName.definition\"],[\"tag\",\"tagName\"],[\"attribute\",\"attributeName\"],[\"type\",\"typeName\"],[\"builtin\",\"variableName.standard\"],[\"qualifier\",\"modifier\"],[\"error\",\"invalid\"],[\"header\",\"heading\"],[\"property\",\"propertyName\"]])EX[O]=AX(GX,e);function Ao(O,e){nu.indexOf(O)>-1||(nu.push(O),console.warn(e))}function AX(O,e){let t=[];for(let a of e.split(\" \")){let o=[];for(let l of a.split(\".\")){let c=O[l]||d[l];c?typeof c==\"function\"?o.length?o=o.map(c):Ao(l,`Modifier ${l} used at start of tag`):o.length?Ao(l,`Tag ${l} used as modifier`):o=Array.isArray(c)?c:[c]:Ao(l,`Unknown highlighting tag ${l}`)}for(let l of o)t.push(l)}if(!t.length)return 0;let i=e.replace(/ /g,\"_\"),r=i+\" \"+t.map(a=>a.id),n=su[r];if(n)return n.id;let s=su[r]=ue.define({id:ru.length,name:i,props:[F({[i]:t})]});return ru.push(s),s.id}var Q_={rtl:Y.mark({class:\"cm-iso\",inclusive:!0,attributes:{dir:\"rtl\"},bidiIsolate:H.RTL}),ltr:Y.mark({class:\"cm-iso\",inclusive:!0,attributes:{dir:\"ltr\"},bidiIsolate:H.LTR}),auto:Y.mark({class:\"cm-iso\",inclusive:!0,attributes:{dir:\"auto\"},bidiIsolate:null})};var LX=O=>{let{state:e}=O,t=e.doc.lineAt(e.selection.main.from),i=nl(O.state,t.from);return i.line?MX(O):i.block?IX(O):!1};function rl(O,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let r=O(e,t);return r?(i(t.update(r)),!0):!1}}var MX=rl(FX,0);var DX=rl(Ru,0);var IX=rl((O,e)=>Ru(O,e,NX(e)),0);function nl(O,e){let t=O.languageDataAt(\"commentTokens\",e,1);return t.length?t[0]:{}}var fr=50;function BX(O,{open:e,close:t},i,r){let n=O.sliceDoc(i-fr,i),s=O.sliceDoc(r,r+fr),a=/\\s*$/.exec(n)[0].length,o=/^\\s*/.exec(s)[0].length,l=n.length-a;if(n.slice(l-e.length,l)==e&&s.slice(o,o+t.length)==t)return{open:{pos:i-a,margin:a&&1},close:{pos:r+o,margin:o&&1}};let c,h;r-i<=2*fr?c=h=O.sliceDoc(i,r):(c=O.sliceDoc(i,i+fr),h=O.sliceDoc(r-fr,r));let f=/^\\s*/.exec(c)[0].length,u=/\\s*$/.exec(h)[0].length,Q=h.length-u-t.length;return c.slice(f,f+e.length)==e&&h.slice(Q,Q+t.length)==t?{open:{pos:i+f+e.length,margin:/\\s/.test(c.charAt(f+e.length))?1:0},close:{pos:r-u-t.length,margin:/\\s/.test(h.charAt(Q-1))?1:0}}:null}function NX(O){let e=[];for(let t of O.selection.ranges){let i=O.doc.lineAt(t.from),r=t.to<=i.to?i:O.doc.lineAt(t.to);r.from>i.from&&r.from==t.to&&(r=t.to==i.to+1?i:O.doc.lineAt(t.to-1));let n=e.length-1;n>=0&&e[n].to>i.from?e[n].to=r.to:e.push({from:i.from+/^\\s*/.exec(i.text)[0].length,to:r.to})}return e}function Ru(O,e,t=e.selection.ranges){let i=t.map(n=>nl(e,n.from).block);if(!i.every(n=>n))return null;let r=t.map((n,s)=>BX(e,i[s],n.from,n.to));if(O!=2&&!r.every(n=>n))return{changes:e.changes(t.map((n,s)=>r[s]?[]:[{from:n.from,insert:i[s].open+\" \"},{from:n.to,insert:\" \"+i[s].close}]))};if(O!=1&&r.some(n=>n)){let n=[];for(let s=0,a;s<r.length;s++)if(a=r[s]){let o=i[s],{open:l,close:c}=a;n.push({from:l.pos-o.open.length,to:l.pos+l.margin},{from:c.pos-c.margin,to:c.pos+o.close.length})}return{changes:n}}return null}function FX(O,e,t=e.selection.ranges){let i=[],r=-1;for(let{from:n,to:s}of t){let a=i.length,o=1e9,l=nl(e,n).line;if(l){for(let c=n;c<=s;){let h=e.doc.lineAt(c);if(h.from>r&&(n==s||s>h.from)){r=h.from;let f=/^\\s*/.exec(h.text)[0].length,u=f==h.length,Q=h.text.slice(f,f+l.length)==l?f:-1;f<h.text.length&&f<o&&(o=f),i.push({line:h,comment:Q,token:l,indent:f,empty:u,single:!1})}c=h.to+1}if(o<1e9)for(let c=a;c<i.length;c++)i[c].indent<i[c].line.text.length&&(i[c].indent=o);i.length==a+1&&(i[a].single=!0)}}if(O!=2&&i.some(n=>n.comment<0&&(!n.empty||n.single))){let n=[];for(let{line:a,token:o,indent:l,empty:c,single:h}of i)(h||!c)&&n.push({from:a.from+l,insert:o+\" \"});let s=e.changes(n);return{changes:s,selection:e.selection.map(s,1)}}else if(O!=1&&i.some(n=>n.comment>=0)){let n=[];for(let{line:s,comment:a,token:o}of i)if(a>=0){let l=s.from+a,c=l+o.length;s.text[c-s.from]==\" \"&&c++,n.push({from:l,to:c})}return{changes:n}}return null}var el=qe.define(),HX=qe.define(),KX=Z.define(),Vu=Z.define({combine(O){return xe(O,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,r)=>e(i,r)||t(i,r)})}}),qu=ce.define({create(){return YO.empty},update(O,e){let t=e.state.facet(Vu),i=e.annotation(el);if(i){let o=ut.fromTransaction(e,i.selection),l=i.side,c=l==0?O.undone:O.done;return o?c=Hn(c,c.length,t.minDepth,o):c=ju(c,e.startState.selection),new YO(l==0?i.rest:c,l==0?c:i.rest)}let r=e.annotation(HX);if((r==\"full\"||r==\"before\")&&(O=O.isolate()),e.annotation(Qe.addToHistory)===!1)return e.changes.empty?O:O.addMapping(e.changes.desc);let n=ut.fromTransaction(e),s=e.annotation(Qe.time),a=e.annotation(Qe.userEvent);return n?O=O.addChanges(n,s,a,t,e):e.selection&&(O=O.addSelection(e.startState.selection,s,a,t.newGroupDelay)),(r==\"full\"||r==\"after\")&&(O=O.isolate()),O},toJSON(O){return{done:O.done.map(e=>e.toJSON()),undone:O.undone.map(e=>e.toJSON())}},fromJSON(O){return new YO(O.done.map(ut.fromJSON),O.undone.map(ut.fromJSON))}});function zu(O={}){return[qu,Vu.of(O),T.domEventHandlers({beforeinput(e,t){let i=e.inputType==\"historyUndo\"?Uu:e.inputType==\"historyRedo\"?tl:null;return i?(e.preventDefault(),i(t)):!1}})]}function Kn(O,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let r=t.field(qu,!1);if(!r)return!1;let n=r.pop(O,t,e);return n?(i(n),!0):!1}}var Uu=Kn(0,!1),tl=Kn(1,!1),JX=Kn(0,!0),eT=Kn(1,!0);var ut=class O{constructor(e,t,i,r,n){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=r,this.selectionsAfter=n}setSelAfter(e){return new O(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new O(e.changes&&Ze.fromJSON(e.changes),[],e.mapped&&vt.fromJSON(e.mapped),e.startSelection&&S.fromJSON(e.startSelection),e.selectionsAfter.map(S.fromJSON))}static fromTransaction(e,t){let i=st;for(let r of e.startState.facet(KX)){let n=r(e);n.length&&(i=i.concat(n))}return!i.length&&e.changes.empty?null:new O(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,st)}static selection(e){return new O(void 0,st,void 0,void 0,e)}};function Hn(O,e,t,i){let r=e+1>t+20?e-t-1:0,n=O.slice(r,e);return n.push(i),n}function tT(O,e){let t=[],i=!1;return O.iterChangedRanges((r,n)=>t.push(r,n)),e.iterChangedRanges((r,n,s,a)=>{for(let o=0;o<t.length;){let l=t[o++],c=t[o++];a>=l&&s<=c&&(i=!0)}}),i}function OT(O,e){return O.ranges.length==e.ranges.length&&O.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Wu(O,e){return O.length?e.length?O.concat(e):O:e}var st=[],iT=200;function ju(O,e){if(O.length){let t=O[O.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-iT));return i.length&&i[i.length-1].eq(e)?O:(i.push(e),Hn(O,O.length-1,1e9,t.setSelAfter(i)))}else return[ut.selection([e])]}function rT(O){let e=O[O.length-1],t=O.slice();return t[O.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Jo(O,e){if(!O.length)return O;let t=O.length,i=st;for(;t;){let r=nT(O[t-1],e,i);if(r.changes&&!r.changes.empty||r.effects.length){let n=O.slice(0,t);return n[t-1]=r,n}else e=r.mapped,t--,i=r.selectionsAfter}return i.length?[ut.selection(i)]:st}function nT(O,e,t){let i=Wu(O.selectionsAfter.length?O.selectionsAfter.map(a=>a.map(e)):st,t);if(!O.changes)return ut.selection(i);let r=O.changes.map(e),n=e.mapDesc(O.changes,!0),s=O.mapped?O.mapped.composeDesc(n):n;return new ut(r,V.mapEffects(O.effects,e),s,O.startSelection.map(n),i)}var sT=/^(input\\.type|delete)($|\\.)/,YO=class O{constructor(e,t,i=0,r=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=r}isolate(){return this.prevTime?new O(this.done,this.undone):this}addChanges(e,t,i,r,n){let s=this.done,a=s[s.length-1];return a&&a.changes&&!a.changes.empty&&e.changes&&(!i||sT.test(i))&&(!a.selectionsAfter.length&&t-this.prevTime<r.newGroupDelay&&r.joinToEvent(n,tT(a.changes,e.changes))||i==\"input.type.compose\")?s=Hn(s,s.length-1,r.minDepth,new ut(e.changes.compose(a.changes),Wu(V.mapEffects(e.effects,a.changes),a.effects),a.mapped,a.startSelection,st)):s=Hn(s,s.length,r.minDepth,e),new O(s,st,t,i)}addSelection(e,t,i,r){let n=this.done.length?this.done[this.done.length-1].selectionsAfter:st;return n.length>0&&t-this.prevTime<r&&i==this.prevUserEvent&&i&&/^select($|\\.)/.test(i)&&OT(n[n.length-1],e)?this:new O(ju(this.done,e),this.undone,t,i)}addMapping(e){return new O(Jo(this.done,e),Jo(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,i){let r=e==0?this.done:this.undone;if(r.length==0)return null;let n=r[r.length-1],s=n.selectionsAfter[0]||t.selection;if(i&&n.selectionsAfter.length)return t.update({selection:n.selectionsAfter[n.selectionsAfter.length-1],annotations:el.of({side:e,rest:rT(r),selection:s}),userEvent:e==0?\"select.undo\":\"select.redo\",scrollIntoView:!0});if(n.changes){let a=r.length==1?st:r.slice(0,r.length-1);return n.mapped&&(a=Jo(a,n.mapped)),t.update({changes:n.changes,selection:n.startSelection,effects:n.effects,annotations:el.of({side:e,rest:a,selection:s}),filter:!1,userEvent:e==0?\"undo\":\"redo\",scrollIntoView:!0})}else return null}};YO.empty=new YO(st,st);var Cu=[{key:\"Mod-z\",run:Uu,preventDefault:!0},{key:\"Mod-y\",mac:\"Mod-Shift-z\",run:tl,preventDefault:!0},{linux:\"Ctrl-Shift-z\",run:tl,preventDefault:!0},{key:\"Mod-u\",run:JX,preventDefault:!0},{key:\"Alt-u\",mac:\"Mod-Shift-u\",run:eT,preventDefault:!0}];function fi(O,e){return S.create(O.ranges.map(e),O.mainIndex)}function Qt(O,e){return O.update({selection:e,scrollIntoView:!0,userEvent:\"select\"})}function $t({state:O,dispatch:e},t){let i=fi(O.selection,t);return i.eq(O.selection,!0)?!1:(e(Qt(O,i)),!0)}function Jn(O,e){return S.cursor(e?O.to:O.from)}function Gu(O,e){return $t(O,t=>t.empty?O.moveByChar(t,e):Jn(t,e))}function ke(O){return O.textDirectionAt(O.state.selection.main.head)==H.LTR}var Eu=O=>Gu(O,!ke(O)),Au=O=>Gu(O,ke(O));function Lu(O,e){return $t(O,t=>t.empty?O.moveByGroup(t,e):Jn(t,e))}var aT=O=>Lu(O,!ke(O)),oT=O=>Lu(O,ke(O));var b_=typeof Intl<\"u\"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:\"word\"}):null;function lT(O,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\\s,.;:]/.test(O.sliceDoc(e.from,e.to)))||e.firstChild}function es(O,e,t){let i=U(O).resolveInner(e.head),r=t?R.closedBy:R.openedBy;for(let o=e.head;;){let l=t?i.childAfter(o):i.childBefore(o);if(!l)break;lT(O,l,r)?i=l:o=t?l.to:l.from}let n=i.type.prop(r),s,a;return n&&(s=t?dt(O,i.from,1):dt(O,i.to,-1))&&s.matched?a=t?s.end.to:s.end.from:a=t?i.to:i.from,S.cursor(a,t?-1:1)}var cT=O=>$t(O,e=>es(O.state,e,!ke(O))),hT=O=>$t(O,e=>es(O.state,e,ke(O)));function Mu(O,e){return $t(O,t=>{if(!t.empty)return Jn(t,e);let i=O.moveVertically(t,e);return i.head!=t.head?i:O.moveToLineBoundary(t,e)})}var Du=O=>Mu(O,!1),Iu=O=>Mu(O,!0);function Bu(O){let e=O.scrollDOM.clientHeight<O.scrollDOM.scrollHeight-2,t=0,i=0,r;if(e){for(let n of O.state.facet(T.scrollMargins)){let s=n(O);s?.top&&(t=Math.max(s?.top,t)),s?.bottom&&(i=Math.max(s?.bottom,i))}r=O.scrollDOM.clientHeight-t-i}else r=(O.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:t,marginBottom:i,selfScroll:e,height:Math.max(O.defaultLineHeight,r-5)}}function Nu(O,e){let t=Bu(O),{state:i}=O,r=fi(i.selection,s=>s.empty?O.moveVertically(s,e,t.height):Jn(s,e));if(r.eq(i.selection))return!1;let n;if(t.selfScroll){let s=O.coordsAtPos(i.selection.main.head),a=O.scrollDOM.getBoundingClientRect(),o=a.top+t.marginTop,l=a.bottom-t.marginBottom;s&&s.top>o&&s.bottom<l&&(n=T.scrollIntoView(r.main.head,{y:\"start\",yMargin:s.top-o}))}return O.dispatch(Qt(i,r),{effects:n}),!0}var yu=O=>Nu(O,!1),Ol=O=>Nu(O,!0);function aO(O,e,t){let i=O.lineBlockAt(e.head),r=O.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?i.to:i.from)&&(r=O.moveToLineBoundary(e,t,!1)),!t&&r.head==i.from&&i.length){let n=/^\\s*/.exec(O.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;n&&e.head!=i.from+n&&(r=S.cursor(i.from+n))}return r}var fT=O=>$t(O,e=>aO(O,e,!0)),dT=O=>$t(O,e=>aO(O,e,!1)),uT=O=>$t(O,e=>aO(O,e,!ke(O))),QT=O=>$t(O,e=>aO(O,e,ke(O))),$T=O=>$t(O,e=>S.cursor(O.lineBlockAt(e.head).from,1)),pT=O=>$t(O,e=>S.cursor(O.lineBlockAt(e.head).to,-1));function mT(O,e,t){let i=!1,r=fi(O.selection,n=>{let s=dt(O,n.head,-1)||dt(O,n.head,1)||n.head>0&&dt(O,n.head-1,1)||n.head<O.doc.length&&dt(O,n.head+1,-1);if(!s||!s.end)return n;i=!0;let a=s.start.from==n.head?s.end.to:s.end.from;return t?S.range(n.anchor,a):S.cursor(a)});return i?(e(Qt(O,r)),!0):!1}var gT=({state:O,dispatch:e})=>mT(O,e,!1);function at(O,e){let t=fi(O.state.selection,i=>{let r=e(i);return S.range(i.anchor,r.head,r.goalColumn,r.bidiLevel||void 0)});return t.eq(O.state.selection)?!1:(O.dispatch(Qt(O.state,t)),!0)}function Fu(O,e){return at(O,t=>O.moveByChar(t,e))}var Hu=O=>Fu(O,!ke(O)),Ku=O=>Fu(O,ke(O));function Ju(O,e){return at(O,t=>O.moveByGroup(t,e))}var PT=O=>Ju(O,!ke(O)),ST=O=>Ju(O,ke(O));var XT=O=>at(O,e=>es(O.state,e,!ke(O))),TT=O=>at(O,e=>es(O.state,e,ke(O)));function eQ(O,e){return at(O,t=>O.moveVertically(t,e))}var tQ=O=>eQ(O,!1),OQ=O=>eQ(O,!0);function iQ(O,e){return at(O,t=>O.moveVertically(t,e,Bu(O).height))}var xu=O=>iQ(O,!1),ku=O=>iQ(O,!0),bT=O=>at(O,e=>aO(O,e,!0)),yT=O=>at(O,e=>aO(O,e,!1)),xT=O=>at(O,e=>aO(O,e,!ke(O))),kT=O=>at(O,e=>aO(O,e,ke(O))),wT=O=>at(O,e=>S.cursor(O.lineBlockAt(e.head).from)),ZT=O=>at(O,e=>S.cursor(O.lineBlockAt(e.head).to)),wu=({state:O,dispatch:e})=>(e(Qt(O,{anchor:0})),!0),Zu=({state:O,dispatch:e})=>(e(Qt(O,{anchor:O.doc.length})),!0),vu=({state:O,dispatch:e})=>(e(Qt(O,{anchor:O.selection.main.anchor,head:0})),!0),Yu=({state:O,dispatch:e})=>(e(Qt(O,{anchor:O.selection.main.anchor,head:O.doc.length})),!0),vT=({state:O,dispatch:e})=>(e(O.update({selection:{anchor:0,head:O.doc.length},userEvent:\"select\"})),!0),YT=({state:O,dispatch:e})=>{let t=ts(O).map(({from:i,to:r})=>S.range(i,Math.min(r+1,O.doc.length)));return e(O.update({selection:S.create(t),userEvent:\"select\"})),!0},_T=({state:O,dispatch:e})=>{let t=fi(O.selection,i=>{let r=U(O),n=r.resolveStack(i.from,1);if(i.empty){let s=r.resolveStack(i.from,-1);s.node.from>=n.node.from&&s.node.to<=n.node.to&&(n=s)}for(let s=n;s;s=s.next){let{node:a}=s;if((a.from<i.from&&a.to>=i.to||a.to>i.to&&a.from<=i.from)&&s.next)return S.range(a.to,a.from)}return i});return t.eq(O.selection)?!1:(e(Qt(O,t)),!0)};function rQ(O,e){let{state:t}=O,i=t.selection,r=t.selection.ranges.slice();for(let n of t.selection.ranges){let s=t.doc.lineAt(n.head);if(e?s.to<O.state.doc.length:s.from>0)for(let a=n;;){let o=O.moveVertically(a,e);if(o.head<s.from||o.head>s.to){r.some(l=>l.head==o.head)||r.push(o);break}else{if(o.head==a.head)break;a=o}}}return r.length==i.ranges.length?!1:(O.dispatch(Qt(t,S.create(r,r.length-1))),!0)}var RT=O=>rQ(O,!1),VT=O=>rQ(O,!0),qT=({state:O,dispatch:e})=>{let t=O.selection,i=null;return t.ranges.length>1?i=S.create([t.main]):t.main.empty||(i=S.create([S.cursor(t.main.head)])),i?(e(Qt(O,i)),!0):!1};function dr(O,e){if(O.state.readOnly)return!1;let t=\"delete.selection\",{state:i}=O,r=i.changeByRange(n=>{let{from:s,to:a}=n;if(s==a){let o=e(n);o<s?(t=\"delete.backward\",o=Fn(O,o,!1)):o>s&&(t=\"delete.forward\",o=Fn(O,o,!0)),s=Math.min(s,o),a=Math.max(a,o)}else s=Fn(O,s,!1),a=Fn(O,a,!0);return s==a?{range:n}:{changes:{from:s,to:a},range:S.cursor(s,s<n.head?-1:1)}});return r.changes.empty?!1:(O.dispatch(i.update(r,{scrollIntoView:!0,userEvent:t,effects:t==\"delete.selection\"?T.announce.of(i.phrase(\"Selection deleted\")):void 0})),!0)}function Fn(O,e,t){if(O instanceof T)for(let i of O.state.facet(T.atomicRanges).map(r=>r(O)))i.between(e,e,(r,n)=>{r<e&&n>e&&(e=t?n:r)});return e}var nQ=(O,e,t)=>dr(O,i=>{let r=i.from,{state:n}=O,s=n.doc.lineAt(r),a,o;if(t&&!e&&r>s.from&&r<s.from+200&&!/[^ \\t]/.test(a=s.text.slice(0,r-s.from))){if(a[a.length-1]==\"\t\")return r-1;let l=ve(a,n.tabSize),c=l%lr(n)||lr(n);for(let h=0;h<c&&a[a.length-1-h]==\" \";h++)r--;o=r}else o=fe(s.text,r-s.from,e,e)+s.from,o==r&&s.number!=(e?n.doc.lines:1)?o+=e?1:-1:!e&&/[\\ufe00-\\ufe0f]/.test(s.text.slice(o-s.from,r-s.from))&&(o=fe(s.text,o-s.from,!1,!1)+s.from);return o}),il=O=>nQ(O,!1,!0);var sQ=O=>nQ(O,!0,!1),aQ=(O,e)=>dr(O,t=>{let i=t.head,{state:r}=O,n=r.doc.lineAt(i),s=r.charCategorizer(i);for(let a=null;;){if(i==(e?n.to:n.from)){i==t.head&&n.number!=(e?r.doc.lines:1)&&(i+=e?1:-1);break}let o=fe(n.text,i-n.from,e)+n.from,l=n.text.slice(Math.min(i,o)-n.from,Math.max(i,o)-n.from),c=s(l);if(a!=null&&c!=a)break;(l!=\" \"||i!=t.head)&&(a=c),i=o}return i}),oQ=O=>aQ(O,!1),zT=O=>aQ(O,!0);var UT=O=>dr(O,e=>{let t=O.lineBlockAt(e.head).to;return e.head<t?t:Math.min(O.state.doc.length,e.head+1)});var WT=O=>dr(O,e=>{let t=O.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),jT=O=>dr(O,e=>{let t=O.moveToLineBoundary(e,!0).head;return e.head<t?t:Math.min(O.state.doc.length,e.head+1)});var CT=({state:O,dispatch:e})=>{if(O.readOnly)return!1;let t=O.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:E.of([\"\",\"\"])},range:S.cursor(i.from)}));return e(O.update(t,{scrollIntoView:!0,userEvent:\"input\"})),!0},GT=({state:O,dispatch:e})=>{if(O.readOnly)return!1;let t=O.changeByRange(i=>{if(!i.empty||i.from==0||i.from==O.doc.length)return{range:i};let r=i.from,n=O.doc.lineAt(r),s=r==n.from?r-1:fe(n.text,r-n.from,!1)+n.from,a=r==n.to?r+1:fe(n.text,r-n.from,!0)+n.from;return{changes:{from:s,to:a,insert:O.doc.slice(r,a).append(O.doc.slice(s,r))},range:S.cursor(a)}});return t.changes.empty?!1:(e(O.update(t,{scrollIntoView:!0,userEvent:\"move.character\"})),!0)};function ts(O){let e=[],t=-1;for(let i of O.selection.ranges){let r=O.doc.lineAt(i.from),n=O.doc.lineAt(i.to);if(!i.empty&&i.to==n.from&&(n=O.doc.lineAt(i.to-1)),t>=r.number){let s=e[e.length-1];s.to=n.to,s.ranges.push(i)}else e.push({from:r.from,to:n.to,ranges:[i]});t=n.number+1}return e}function lQ(O,e,t){if(O.readOnly)return!1;let i=[],r=[];for(let n of ts(O)){if(t?n.to==O.doc.length:n.from==0)continue;let s=O.doc.lineAt(t?n.to+1:n.from-1),a=s.length+1;if(t){i.push({from:n.to,to:s.to},{from:n.from,insert:s.text+O.lineBreak});for(let o of n.ranges)r.push(S.range(Math.min(O.doc.length,o.anchor+a),Math.min(O.doc.length,o.head+a)))}else{i.push({from:s.from,to:n.from},{from:n.to,insert:O.lineBreak+s.text});for(let o of n.ranges)r.push(S.range(o.anchor-a,o.head-a))}}return i.length?(e(O.update({changes:i,scrollIntoView:!0,selection:S.create(r,O.selection.mainIndex),userEvent:\"move.line\"})),!0):!1}var ET=({state:O,dispatch:e})=>lQ(O,e,!1),AT=({state:O,dispatch:e})=>lQ(O,e,!0);function cQ(O,e,t){if(O.readOnly)return!1;let i=[];for(let n of ts(O))t?i.push({from:n.from,insert:O.doc.slice(n.from,n.to)+O.lineBreak}):i.push({from:n.to,insert:O.lineBreak+O.doc.slice(n.from,n.to)});let r=O.changes(i);return e(O.update({changes:r,selection:O.selection.map(r,t?1:-1),scrollIntoView:!0,userEvent:\"input.copyline\"})),!0}var LT=({state:O,dispatch:e})=>cQ(O,e,!1),MT=({state:O,dispatch:e})=>cQ(O,e,!0),DT=O=>{if(O.state.readOnly)return!1;let{state:e}=O,t=e.changes(ts(e).map(({from:r,to:n})=>(r>0?r--:n<e.doc.length&&n++,{from:r,to:n}))),i=fi(e.selection,r=>{let n;if(O.lineWrapping){let s=O.lineBlockAt(r.head),a=O.coordsAtPos(r.head,r.assoc||1);a&&(n=s.bottom+O.documentTop-a.bottom+O.defaultLineHeight/2)}return O.moveVertically(r,!0,n)}).map(t);return O.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:\"delete.line\"}),!0};function IT(O,e){if(/\\(\\)|\\[\\]|\\{\\}/.test(O.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=U(O).resolveInner(e),i=t.childBefore(e),r=t.childAfter(e),n;return i&&r&&i.to<=e&&r.from>=e&&(n=i.type.prop(R.closedBy))&&n.indexOf(r.name)>-1&&O.doc.lineAt(i.to).from==O.doc.lineAt(r.from).from&&!/\\S/.test(O.sliceDoc(i.to,r.from))?{from:i.to,to:r.from}:null}var _u=hQ(!1),BT=hQ(!0);function hQ(O){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(r=>{let{from:n,to:s}=r,a=e.doc.lineAt(n),o=!O&&n==s&&IT(e,n);O&&(n=s=(s<=a.to?a:e.doc.lineAt(s)).to);let l=new ZO(e,{simulateBreak:n,simulateDoubleBreak:!!o}),c=In(l,n);for(c==null&&(c=ve(/^\\s*/.exec(e.doc.lineAt(n).text)[0],e.tabSize));s<a.to&&/\\s/.test(a.text[s-a.from]);)s++;o?{from:n,to:s}=o:n>a.from&&n<a.from+100&&!/\\S/.test(a.text.slice(0,n))&&(n=a.from);let h=[\"\",hi(e,c)];return o&&h.push(hi(e,l.lineIndent(a.from,-1))),{changes:{from:n,to:s,insert:E.of(h)},range:S.cursor(n+1+h[1].length)}});return t(e.update(i,{scrollIntoView:!0,userEvent:\"input\"})),!0}}function sl(O,e){let t=-1;return O.changeByRange(i=>{let r=[];for(let s=i.from;s<=i.to;){let a=O.doc.lineAt(s);a.number>t&&(i.empty||i.to>a.from)&&(e(a,r,i),t=a.number),s=a.to+1}let n=O.changes(r);return{changes:r,range:S.range(n.mapPos(i.anchor,1),n.mapPos(i.head,1))}})}var NT=({state:O,dispatch:e})=>{if(O.readOnly)return!1;let t=Object.create(null),i=new ZO(O,{overrideIndentation:n=>{let s=t[n];return s??-1}}),r=sl(O,(n,s,a)=>{let o=In(i,n.from);if(o==null)return;/\\S/.test(n.text)||(o=0);let l=/^\\s*/.exec(n.text)[0],c=hi(O,o);(l!=c||a.from<n.from+l.length)&&(t[n.from]=o,s.push({from:n.from,to:n.from+l.length,insert:c}))});return r.changes.empty||e(O.update(r,{userEvent:\"indent\"})),!0},fQ=({state:O,dispatch:e})=>O.readOnly?!1:(e(O.update(sl(O,(t,i)=>{i.push({from:t.from,insert:O.facet(nO)})}),{userEvent:\"input.indent\"})),!0),dQ=({state:O,dispatch:e})=>O.readOnly?!1:(e(O.update(sl(O,(t,i)=>{let r=/^\\s*/.exec(t.text)[0];if(!r)return;let n=ve(r,O.tabSize),s=0,a=hi(O,Math.max(0,n-lr(O)));for(;s<r.length&&s<a.length&&r.charCodeAt(s)==a.charCodeAt(s);)s++;i.push({from:t.from+s,to:t.from+r.length,insert:a.slice(s)})}),{userEvent:\"delete.dedent\"})),!0),FT=O=>(O.setTabFocusMode(),!0);var HT=[{key:\"Ctrl-b\",run:Eu,shift:Hu,preventDefault:!0},{key:\"Ctrl-f\",run:Au,shift:Ku},{key:\"Ctrl-p\",run:Du,shift:tQ},{key:\"Ctrl-n\",run:Iu,shift:OQ},{key:\"Ctrl-a\",run:$T,shift:wT},{key:\"Ctrl-e\",run:pT,shift:ZT},{key:\"Ctrl-d\",run:sQ},{key:\"Ctrl-h\",run:il},{key:\"Ctrl-k\",run:UT},{key:\"Ctrl-Alt-h\",run:oQ},{key:\"Ctrl-o\",run:CT},{key:\"Ctrl-t\",run:GT},{key:\"Ctrl-v\",run:Ol}],KT=[{key:\"ArrowLeft\",run:Eu,shift:Hu,preventDefault:!0},{key:\"Mod-ArrowLeft\",mac:\"Alt-ArrowLeft\",run:aT,shift:PT,preventDefault:!0},{mac:\"Cmd-ArrowLeft\",run:uT,shift:xT,preventDefault:!0},{key:\"ArrowRight\",run:Au,shift:Ku,preventDefault:!0},{key:\"Mod-ArrowRight\",mac:\"Alt-ArrowRight\",run:oT,shift:ST,preventDefault:!0},{mac:\"Cmd-ArrowRight\",run:QT,shift:kT,preventDefault:!0},{key:\"ArrowUp\",run:Du,shift:tQ,preventDefault:!0},{mac:\"Cmd-ArrowUp\",run:wu,shift:vu},{mac:\"Ctrl-ArrowUp\",run:yu,shift:xu},{key:\"ArrowDown\",run:Iu,shift:OQ,preventDefault:!0},{mac:\"Cmd-ArrowDown\",run:Zu,shift:Yu},{mac:\"Ctrl-ArrowDown\",run:Ol,shift:ku},{key:\"PageUp\",run:yu,shift:xu},{key:\"PageDown\",run:Ol,shift:ku},{key:\"Home\",run:dT,shift:yT,preventDefault:!0},{key:\"Mod-Home\",run:wu,shift:vu},{key:\"End\",run:fT,shift:bT,preventDefault:!0},{key:\"Mod-End\",run:Zu,shift:Yu},{key:\"Enter\",run:_u,shift:_u},{key:\"Mod-a\",run:vT},{key:\"Backspace\",run:il,shift:il,preventDefault:!0},{key:\"Delete\",run:sQ,preventDefault:!0},{key:\"Mod-Backspace\",mac:\"Alt-Backspace\",run:oQ,preventDefault:!0},{key:\"Mod-Delete\",mac:\"Alt-Delete\",run:zT,preventDefault:!0},{mac:\"Mod-Backspace\",run:WT,preventDefault:!0},{mac:\"Mod-Delete\",run:jT,preventDefault:!0}].concat(HT.map(O=>({mac:O.key,run:O.run,shift:O.shift}))),uQ=[{key:\"Alt-ArrowLeft\",mac:\"Ctrl-ArrowLeft\",run:cT,shift:XT},{key:\"Alt-ArrowRight\",mac:\"Ctrl-ArrowRight\",run:hT,shift:TT},{key:\"Alt-ArrowUp\",run:ET},{key:\"Shift-Alt-ArrowUp\",run:LT},{key:\"Alt-ArrowDown\",run:AT},{key:\"Shift-Alt-ArrowDown\",run:MT},{key:\"Mod-Alt-ArrowUp\",run:RT},{key:\"Mod-Alt-ArrowDown\",run:VT},{key:\"Escape\",run:qT},{key:\"Mod-Enter\",run:BT},{key:\"Alt-l\",mac:\"Ctrl-l\",run:YT},{key:\"Mod-i\",run:_T,preventDefault:!0},{key:\"Mod-[\",run:dQ},{key:\"Mod-]\",run:fQ},{key:\"Mod-Alt-\\\\\",run:NT},{key:\"Shift-Mod-k\",run:DT},{key:\"Shift-Mod-\\\\\",run:gT},{key:\"Mod-/\",run:LX},{key:\"Alt-A\",run:DX},{key:\"Ctrl-m\",mac:\"Shift-Alt-m\",run:FT}].concat(KT),QQ={key:\"Tab\",run:fQ,shift:dQ};var $Q=typeof String.prototype.normalize==\"function\"?O=>O.normalize(\"NFKD\"):O=>O,lO=class{constructor(e,t,i=0,r=e.length,n,s){this.test=s,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer=\"\",this.bufferPos=0,this.iter=e.iterRange(i,r),this.bufferStart=i,this.normalize=n?a=>n($Q(a)):$Q,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Se(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=Ri(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Me(e);let r=this.normalize(t);if(r.length)for(let n=0,s=i;;n++){let a=r.charCodeAt(n),o=this.match(a,s,this.bufferPos+this.bufferStart);if(n==r.length-1){if(o)return this.value=o,this;break}s==i&&n<t.length&&t.charCodeAt(n)==a&&s++}}}match(e,t,i){let r=null;for(let n=0;n<this.matches.length;n+=2){let s=this.matches[n],a=!1;this.query.charCodeAt(s)==e&&(s==this.query.length-1?r={from:this.matches[n+1],to:i}:(this.matches[n]++,a=!0)),a||(this.matches.splice(n,2),n-=2)}return this.query.charCodeAt(0)==e&&(this.query.length==1?r={from:t,to:i}:this.matches.push(1,t)),r&&this.test&&!this.test(r.from,r.to,this.buffer,this.bufferStart)&&(r=null),r}};typeof Symbol<\"u\"&&(lO.prototype[Symbol.iterator]=function(){return this});var PQ={from:-1,to:-1,match:/.*/.exec(\"\")},dl=\"gm\"+(/x/.unicode==null?\"\":\"u\"),rs=class{constructor(e,t,i,r=0,n=e.length){if(this.text=e,this.to=n,this.curLine=\"\",this.done=!1,this.value=PQ,/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(t))return new ss(e,t,i,r,n);this.re=new RegExp(t,dl+(i?.ignoreCase?\"i\":\"\")),this.test=i?.test,this.iter=e.iter();let s=e.lineAt(r);this.curLineStart=s.from,this.matchPos=as(e,r),this.getLine(this.curLineStart)}getLine(e){this.iter.next(e),this.iter.lineBreak?this.curLine=\"\":(this.curLine=this.iter.value,this.curLineStart+this.curLine.length>this.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine=\"\":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,r=i+t[0].length;if(this.matchPos=as(this.text,r+(i==r?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(i<r||i>this.value.to)&&(!this.test||this.test(i,r,t)))return this.value={from:i,to:r,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length<this.to)this.nextLine(),e=0;else return this.done=!0,this}}},al=new WeakMap,ns=class O{constructor(e,t){this.from=e,this.text=t}get to(){return this.from+this.text.length}static get(e,t,i){let r=al.get(e);if(!r||r.from>=i||r.to<=t){let a=new O(t,e.sliceString(t,i));return al.set(e,a),a}if(r.from==t&&r.to==i)return r;let{text:n,from:s}=r;return s>t&&(n=e.sliceString(t,s)+n,s=t),r.to<i&&(n+=e.sliceString(r.to,i)),al.set(e,new O(s,n)),new O(t,n.slice(t-s,i-s))}},ss=class{constructor(e,t,i,r,n){this.text=e,this.to=n,this.done=!1,this.value=PQ,this.matchPos=as(e,r),this.re=new RegExp(t,dl+(i?.ignoreCase?\"i\":\"\")),this.test=i?.test,this.flat=ns.get(e,r,this.chunkEnd(r+5e3))}chunkEnd(e){return e>=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,r=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,r,t)))return this.value={from:i,to:r,match:t},this.matchPos=as(this.text,r+(i==r?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=ns.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<\"u\"&&(rs.prototype[Symbol.iterator]=ss.prototype[Symbol.iterator]=function(){return this});function JT(O){try{return new RegExp(O,dl),!0}catch{return!1}}function as(O,e){if(e>=O.length)return e;let t=O.lineAt(e),i;for(;e<t.to&&(i=t.text.charCodeAt(e-t.from))>=56320&&i<57344;)e++;return e}function ol(O){let e=String(O.state.doc.lineAt(O.state.selection.main.head).number),t=N(\"input\",{class:\"cm-textfield\",name:\"line\",value:e}),i=N(\"form\",{class:\"cm-gotoLine\",onkeydown:n=>{n.keyCode==27?(n.preventDefault(),O.dispatch({effects:ur.of(!1)}),O.focus()):n.keyCode==13&&(n.preventDefault(),r())},onsubmit:n=>{n.preventDefault(),r()}},N(\"label\",O.state.phrase(\"Go to line\"),\": \",t),\" \",N(\"button\",{class:\"cm-button\",type:\"submit\"},O.state.phrase(\"go\")),N(\"button\",{name:\"close\",onclick:()=>{O.dispatch({effects:ur.of(!1)}),O.focus()},\"aria-label\":O.state.phrase(\"close\"),type:\"button\"},[\"\\xD7\"]));function r(){let n=/^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(t.value);if(!n)return;let{state:s}=O,a=s.doc.lineAt(s.selection.main.head),[,o,l,c,h]=n,f=c?+c.slice(1):0,u=l?+l:a.number;if(l&&h){let p=u/100;o&&(p=p*(o==\"-\"?-1:1)+a.number/s.doc.lines),u=Math.round(s.doc.lines*p)}else l&&o&&(u=u*(o==\"-\"?-1:1)+a.number);let Q=s.doc.line(Math.max(1,Math.min(s.doc.lines,u))),$=S.cursor(Q.from+Math.max(0,Math.min(f,Q.length)));O.dispatch({effects:[ur.of(!1),T.scrollIntoView($.from,{y:\"center\"})],selection:$}),O.focus()}return{dom:i}}var ur=V.define(),pQ=ce.define({create(){return!0},update(O,e){for(let t of e.effects)t.is(ur)&&(O=t.value);return O},provide:O=>TO.from(O,e=>e?ol:null)}),e1=O=>{let e=bO(O,ol);if(!e){let t=[ur.of(!0)];O.state.field(pQ,!1)==null&&t.push(V.appendConfig.of([pQ,t1])),O.dispatch({effects:t}),e=bO(O,ol)}return e&&e.dom.querySelector(\"input\").select(),!0},t1=T.baseTheme({\".cm-panel.cm-gotoLine\":{padding:\"2px 6px 4px\",position:\"relative\",\"& label\":{fontSize:\"80%\"},\"& [name=close]\":{position:\"absolute\",top:\"0\",bottom:\"0\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",padding:\"0\"}}}),O1={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},SQ=Z.define({combine(O){return xe(O,O1,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function XQ(O){let e=[a1,s1];return O&&e.push(SQ.of(O)),e}var i1=Y.mark({class:\"cm-selectionMatch\"}),r1=Y.mark({class:\"cm-selectionMatch cm-selectionMatch-main\"});function mQ(O,e,t,i){return(t==0||O(e.sliceDoc(t-1,t))!=ee.Word)&&(i==e.doc.length||O(e.sliceDoc(i,i+1))!=ee.Word)}function n1(O,e,t,i){return O(e.sliceDoc(t,t+1))==ee.Word&&O(e.sliceDoc(i-1,i))==ee.Word}var s1=he.fromClass(class{constructor(O){this.decorations=this.getDeco(O)}update(O){(O.selectionSet||O.docChanged||O.viewportChanged)&&(this.decorations=this.getDeco(O.view))}getDeco(O){let e=O.state.facet(SQ),{state:t}=O,i=t.selection;if(i.ranges.length>1)return Y.none;let r=i.main,n,s=null;if(r.empty){if(!e.highlightWordAroundCursor)return Y.none;let o=t.wordAt(r.head);if(!o)return Y.none;s=t.charCategorizer(r.head),n=t.sliceDoc(o.from,o.to)}else{let o=r.to-r.from;if(o<e.minSelectionLength||o>200)return Y.none;if(e.wholeWords){if(n=t.sliceDoc(r.from,r.to),s=t.charCategorizer(r.head),!(mQ(s,t,r.from,r.to)&&n1(s,t,r.from,r.to)))return Y.none}else if(n=t.sliceDoc(r.from,r.to),!n)return Y.none}let a=[];for(let o of O.visibleRanges){let l=new lO(t.doc,n,o.from,o.to);for(;!l.next().done;){let{from:c,to:h}=l.value;if((!s||mQ(s,t,c,h))&&(r.empty&&c<=r.from&&h>=r.to?a.push(r1.range(c,h)):(c>=r.to||h<=r.from)&&a.push(i1.range(c,h)),a.length>e.maxMatches))return Y.none}}return Y.set(a)}},{decorations:O=>O.decorations}),a1=T.baseTheme({\".cm-selectionMatch\":{backgroundColor:\"#99ff7780\"},\".cm-searchMatch .cm-selectionMatch\":{backgroundColor:\"transparent\"}}),o1=({state:O,dispatch:e})=>{let{selection:t}=O,i=S.create(t.ranges.map(r=>O.wordAt(r.head)||S.cursor(r.head)),t.mainIndex);return i.eq(t)?!1:(e(O.update({selection:i})),!0)};function l1(O,e){let{main:t,ranges:i}=O.selection,r=O.wordAt(t.head),n=r&&r.from==t.from&&r.to==t.to;for(let s=!1,a=new lO(O.doc,e,i[i.length-1].to);;)if(a.next(),a.done){if(s)return null;a=new lO(O.doc,e,0,Math.max(0,i[i.length-1].from-1)),s=!0}else{if(s&&i.some(o=>o.from==a.value.from))continue;if(n){let o=O.wordAt(a.value.from);if(!o||o.from!=a.value.from||o.to!=a.value.to)continue}return a.value}}var c1=({state:O,dispatch:e})=>{let{ranges:t}=O.selection;if(t.some(n=>n.from===n.to))return o1({state:O,dispatch:e});let i=O.sliceDoc(t[0].from,t[0].to);if(O.selection.ranges.some(n=>O.sliceDoc(n.from,n.to)!=i))return!1;let r=l1(O,i);return r?(e(O.update({selection:O.selection.addRange(S.range(r.from,r.to),!1),effects:T.scrollIntoView(r.to)})),!0):!1},Qi=Z.define({combine(O){return xe(O,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new fl(e),scrollToMatch:e=>T.scrollIntoView(e)})}});var os=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||\"\",this.valid=!!this.search&&(!this.regexp||JT(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}unquote(e){return this.literal?e:e.replace(/\\\\([nrt\\\\])/g,(t,i)=>i==\"n\"?`\n`:i==\"r\"?\"\\r\":i==\"t\"?\"\t\":\"\\\\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord}create(){return this.regexp?new cl(this):new ll(this)}getCursor(e,t=0,i){let r=e.doc?e:I.create({doc:e});return i==null&&(i=r.doc.length),this.regexp?ui(this,r,t,i):di(this,r,t,i)}},ls=class{constructor(e){this.spec=e}};function di(O,e,t,i){return new lO(e.doc,O.unquoted,t,i,O.caseSensitive?void 0:r=>r.toLowerCase(),O.wholeWord?h1(e.doc,e.charCategorizer(e.selection.main.head)):void 0)}function h1(O,e){return(t,i,r,n)=>((n>t||n+r.length<i)&&(n=Math.max(0,t-2),r=O.sliceString(n,Math.min(O.length,i+2))),(e(cs(r,t-n))!=ee.Word||e(hs(r,t-n))!=ee.Word)&&(e(hs(r,i-n))!=ee.Word||e(cs(r,i-n))!=ee.Word))}var ll=class extends ls{constructor(e){super(e)}nextMatch(e,t,i){let r=di(this.spec,e,i,e.doc.length).nextOverlapping();if(r.done){let n=Math.min(e.doc.length,t+this.spec.unquoted.length);r=di(this.spec,e,0,n).nextOverlapping()}return r.done||r.value.from==t&&r.value.to==i?null:r.value}prevMatchInRange(e,t,i){for(let r=i;;){let n=Math.max(t,r-1e4-this.spec.unquoted.length),s=di(this.spec,e,n,r),a=null;for(;!s.nextOverlapping().done;)a=s.value;if(a)return a;if(n==t)return null;r-=1e4}}prevMatch(e,t,i){let r=this.prevMatchInRange(e,0,t);return r||(r=this.prevMatchInRange(e,Math.max(0,i-this.spec.unquoted.length),e.doc.length)),r&&(r.from!=t||r.to!=i)?r:null}getReplacement(e){return this.spec.unquote(this.spec.replace)}matchAll(e,t){let i=di(this.spec,e,0,e.doc.length),r=[];for(;!i.next().done;){if(r.length>=t)return null;r.push(i.value)}return r}highlight(e,t,i,r){let n=di(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!n.next().done;)r(n.value.from,n.value.to)}};function ui(O,e,t,i){return new rs(e.doc,O.search,{ignoreCase:!O.caseSensitive,test:O.wholeWord?f1(e.charCategorizer(e.selection.main.head)):void 0},t,i)}function cs(O,e){return O.slice(fe(O,e,!1),e)}function hs(O,e){return O.slice(e,fe(O,e))}function f1(O){return(e,t,i)=>!i[0].length||(O(cs(i.input,i.index))!=ee.Word||O(hs(i.input,i.index))!=ee.Word)&&(O(hs(i.input,i.index+i[0].length))!=ee.Word||O(cs(i.input,i.index+i[0].length))!=ee.Word)}var cl=class extends ls{nextMatch(e,t,i){let r=ui(this.spec,e,i,e.doc.length).next();return r.done&&(r=ui(this.spec,e,0,t).next()),r.done?null:r.value}prevMatchInRange(e,t,i){for(let r=1;;r++){let n=Math.max(t,i-r*1e4),s=ui(this.spec,e,n,i),a=null;for(;!s.next().done;)a=s.value;if(a&&(n==t||a.from>n+10))return a;if(n==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g,(t,i)=>{if(i==\"&\")return e.match[0];if(i==\"$\")return\"$\";for(let r=i.length;r>0;r--){let n=+i.slice(0,r);if(n>0&&n<e.match.length)return e.match[n]+i.slice(r)}return t})}matchAll(e,t){let i=ui(this.spec,e,0,e.doc.length),r=[];for(;!i.next().done;){if(r.length>=t)return null;r.push(i.value)}return r}highlight(e,t,i,r){let n=ui(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!n.next().done;)r(n.value.from,n.value.to)}},$r=V.define(),ul=V.define(),oO=ce.define({create(O){return new Qr(hl(O).create(),null)},update(O,e){for(let t of e.effects)t.is($r)?O=new Qr(t.value.create(),O.panel):t.is(ul)&&(O=new Qr(O.query,t.value?Ql:null));return O},provide:O=>TO.from(O,e=>e.panel)});var Qr=class{constructor(e,t){this.query=e,this.panel=t}},d1=Y.mark({class:\"cm-searchMatch\"}),u1=Y.mark({class:\"cm-searchMatch cm-searchMatch-selected\"}),Q1=he.fromClass(class{constructor(O){this.view=O,this.decorations=this.highlight(O.state.field(oO))}update(O){let e=O.state.field(oO);(e!=O.startState.field(oO)||O.docChanged||O.selectionSet||O.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:O,panel:e}){if(!e||!O.spec.valid)return Y.none;let{view:t}=this,i=new Le;for(let r=0,n=t.visibleRanges,s=n.length;r<s;r++){let{from:a,to:o}=n[r];for(;r<s-1&&o>n[r+1].from-500;)o=n[++r].to;O.highlight(t.state,a,o,(l,c)=>{let h=t.state.selection.ranges.some(f=>f.from==l&&f.to==c);i.add(l,c,h?u1:d1)})}return i.finish()}},{decorations:O=>O.decorations});function pr(O){return e=>{let t=e.state.field(oO,!1);return t&&t.query.spec.valid?O(e,t):yQ(e)}}var fs=pr((O,{query:e})=>{let{to:t}=O.state.selection.main,i=e.nextMatch(O.state,t,t);if(!i)return!1;let r=S.single(i.from,i.to),n=O.state.facet(Qi);return O.dispatch({selection:r,effects:[$l(O,i),n.scrollToMatch(r.main,O)],userEvent:\"select.search\"}),bQ(O),!0}),ds=pr((O,{query:e})=>{let{state:t}=O,{from:i}=t.selection.main,r=e.prevMatch(t,i,i);if(!r)return!1;let n=S.single(r.from,r.to),s=O.state.facet(Qi);return O.dispatch({selection:n,effects:[$l(O,r),s.scrollToMatch(n.main,O)],userEvent:\"select.search\"}),bQ(O),!0}),$1=pr((O,{query:e})=>{let t=e.matchAll(O.state,1e3);return!t||!t.length?!1:(O.dispatch({selection:S.create(t.map(i=>S.range(i.from,i.to))),userEvent:\"select.search.matches\"}),!0)}),p1=({state:O,dispatch:e})=>{let t=O.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:r}=t.main,n=[],s=0;for(let a=new lO(O.doc,O.sliceDoc(i,r));!a.next().done;){if(n.length>1e3)return!1;a.value.from==i&&(s=n.length),n.push(S.range(a.value.from,a.value.to))}return e(O.update({selection:S.create(n,s),userEvent:\"select.search.matches\"})),!0},gQ=pr((O,{query:e})=>{let{state:t}=O,{from:i,to:r}=t.selection.main;if(t.readOnly)return!1;let n=e.nextMatch(t,i,i);if(!n)return!1;let s=n,a=[],o,l,c=[];s.from==i&&s.to==r&&(l=t.toText(e.getReplacement(s)),a.push({from:s.from,to:s.to,insert:l}),s=e.nextMatch(t,s.from,s.to),c.push(T.announce.of(t.phrase(\"replaced match on line $\",t.doc.lineAt(i).number)+\".\")));let h=O.state.changes(a);return s&&(o=S.single(s.from,s.to).map(h),c.push($l(O,s)),c.push(t.facet(Qi).scrollToMatch(o.main,O))),O.dispatch({changes:h,selection:o,effects:c,userEvent:\"input.replace\"}),!0}),m1=pr((O,{query:e})=>{if(O.state.readOnly)return!1;let t=e.matchAll(O.state,1e9).map(r=>{let{from:n,to:s}=r;return{from:n,to:s,insert:e.getReplacement(r)}});if(!t.length)return!1;let i=O.state.phrase(\"replaced $ matches\",t.length)+\".\";return O.dispatch({changes:t,effects:T.announce.of(i),userEvent:\"input.replace.all\"}),!0});function Ql(O){return O.state.facet(Qi).createPanel(O)}function hl(O,e){var t,i,r,n,s;let a=O.selection.main,o=a.empty||a.to>a.from+100?\"\":O.sliceDoc(a.from,a.to);if(e&&!o)return e;let l=O.facet(Qi);return new os({search:((t=e?.literal)!==null&&t!==void 0?t:l.literal)?o:o.replace(/\\n/g,\"\\\\n\"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:l.caseSensitive,literal:(r=e?.literal)!==null&&r!==void 0?r:l.literal,regexp:(n=e?.regexp)!==null&&n!==void 0?n:l.regexp,wholeWord:(s=e?.wholeWord)!==null&&s!==void 0?s:l.wholeWord})}function TQ(O){let e=bO(O,Ql);return e&&e.dom.querySelector(\"[main-field]\")}function bQ(O){let e=TQ(O);e&&e==O.root.activeElement&&e.select()}var yQ=O=>{let e=O.state.field(oO,!1);if(e&&e.panel){let t=TQ(O);if(t&&t!=O.root.activeElement){let i=hl(O.state,e.query.spec);i.valid&&O.dispatch({effects:$r.of(i)}),t.focus(),t.select()}}else O.dispatch({effects:[ul.of(!0),e?$r.of(hl(O.state,e.query.spec)):V.appendConfig.of(P1)]});return!0},xQ=O=>{let e=O.state.field(oO,!1);if(!e||!e.panel)return!1;let t=bO(O,Ql);return t&&t.dom.contains(O.root.activeElement)&&O.focus(),O.dispatch({effects:ul.of(!1)}),!0},kQ=[{key:\"Mod-f\",run:yQ,scope:\"editor search-panel\"},{key:\"F3\",run:fs,shift:ds,scope:\"editor search-panel\",preventDefault:!0},{key:\"Mod-g\",run:fs,shift:ds,scope:\"editor search-panel\",preventDefault:!0},{key:\"Escape\",run:xQ,scope:\"editor search-panel\"},{key:\"Mod-Shift-l\",run:p1},{key:\"Mod-Alt-g\",run:e1},{key:\"Mod-d\",run:c1,preventDefault:!0}],fl=class{constructor(e){this.view=e;let t=this.query=e.state.field(oO).query.spec;this.commit=this.commit.bind(this),this.searchField=N(\"input\",{value:t.search,placeholder:Ne(e,\"Find\"),\"aria-label\":Ne(e,\"Find\"),class:\"cm-textfield\",name:\"search\",form:\"\",\"main-field\":\"true\",onchange:this.commit,onkeyup:this.commit}),this.replaceField=N(\"input\",{value:t.replace,placeholder:Ne(e,\"Replace\"),\"aria-label\":Ne(e,\"Replace\"),class:\"cm-textfield\",name:\"replace\",form:\"\",onchange:this.commit,onkeyup:this.commit}),this.caseField=N(\"input\",{type:\"checkbox\",name:\"case\",form:\"\",checked:t.caseSensitive,onchange:this.commit}),this.reField=N(\"input\",{type:\"checkbox\",name:\"re\",form:\"\",checked:t.regexp,onchange:this.commit}),this.wordField=N(\"input\",{type:\"checkbox\",name:\"word\",form:\"\",checked:t.wholeWord,onchange:this.commit});function i(r,n,s){return N(\"button\",{class:\"cm-button\",name:r,onclick:n,type:\"button\"},s)}this.dom=N(\"div\",{onkeydown:r=>this.keydown(r),class:\"cm-search\"},[this.searchField,i(\"next\",()=>fs(e),[Ne(e,\"next\")]),i(\"prev\",()=>ds(e),[Ne(e,\"previous\")]),i(\"select\",()=>$1(e),[Ne(e,\"all\")]),N(\"label\",null,[this.caseField,Ne(e,\"match case\")]),N(\"label\",null,[this.reField,Ne(e,\"regexp\")]),N(\"label\",null,[this.wordField,Ne(e,\"by word\")]),...e.state.readOnly?[]:[N(\"br\"),this.replaceField,i(\"replace\",()=>gQ(e),[Ne(e,\"replace\")]),i(\"replaceAll\",()=>m1(e),[Ne(e,\"replace all\")])],N(\"button\",{name:\"close\",onclick:()=>xQ(e),\"aria-label\":Ne(e,\"close\"),type:\"button\"},[\"\\xD7\"])])}commit(){let e=new os({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:$r.of(e)}))}keydown(e){bd(this.view,e,\"search-panel\")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ds:fs)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),gQ(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is($r)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Qi).top}};function Ne(O,e){return O.state.phrase(e)}var Os=30,is=/[\\s\\.,:;?!]/;function $l(O,{from:e,to:t}){let i=O.state.doc.lineAt(e),r=O.state.doc.lineAt(t).to,n=Math.max(i.from,e-Os),s=Math.min(r,t+Os),a=O.state.sliceDoc(n,s);if(n!=i.from){for(let o=0;o<Os;o++)if(!is.test(a[o+1])&&is.test(a[o])){a=a.slice(o);break}}if(s!=r){for(let o=a.length-1;o>a.length-Os;o--)if(!is.test(a[o-1])&&is.test(a[o])){a=a.slice(0,o);break}}return T.announce.of(`${O.state.phrase(\"current match\")}. ${a} ${O.state.phrase(\"on line\")} ${i.number}.`)}var g1=T.baseTheme({\".cm-panel.cm-search\":{padding:\"2px 6px 4px\",position:\"relative\",\"& [name=close]\":{position:\"absolute\",top:\"0\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",padding:0,margin:0},\"& input, & button, & label\":{margin:\".2em .6em .2em 0\"},\"& input[type=checkbox]\":{marginRight:\".2em\"},\"& label\":{fontSize:\"80%\",whiteSpace:\"pre\"}},\"&light .cm-searchMatch\":{backgroundColor:\"#ffff0054\"},\"&dark .cm-searchMatch\":{backgroundColor:\"#00ffff8a\"},\"&light .cm-searchMatch-selected\":{backgroundColor:\"#ff6a0054\"},\"&dark .cm-searchMatch-selected\":{backgroundColor:\"#ff00ff8a\"}}),P1=[oO,ze.low(Q1),g1];var $i=class{constructor(e,t,i,r){this.state=e,this.pos=t,this.explicit=i,this.view=r,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=U(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),r=t.text.slice(i-t.from,this.pos-t.from),n=r.search(zQ(e,!1));return n<0?null:{from:i+n,to:this.pos,text:r.slice(n)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e==\"abort\"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function wQ(O){let e=Object.keys(O).join(\"\"),t=/\\w/.test(e);return t&&(e=e.replace(/\\w/g,\"\")),`[${t?\"\\\\w\":\"\"}${e.replace(/[^\\w\\s]/g,\"\\\\$&\")}]`}function S1(O){let e=Object.create(null),t=Object.create(null);for(let{label:r}of O){e[r[0]]=!0;for(let n=1;n<r.length;n++)t[r[n]]=!0}let i=wQ(e)+wQ(t)+\"*$\";return[new RegExp(\"^\"+i),new RegExp(i)]}function zt(O){let e=O.map(r=>typeof r==\"string\"?{label:r}:r),[t,i]=e.every(r=>/^\\w+$/.test(r.label))?[/\\w*$/,/\\w+$/]:S1(e);return r=>{let n=r.matchBefore(i);return n||r.explicit?{from:n?n.from:r.pos,options:e,validFor:t}:null}}function cO(O,e){return t=>{for(let i=U(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(O.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}var Qs=class{constructor(e,t,i,r){this.completion=e,this.source=t,this.match=i,this.score=r}};function RO(O){return O.selection.main.from}function zQ(O,e){var t;let{source:i}=O,r=e&&i[0]!=\"^\",n=i[i.length-1]!=\"$\";return!r&&!n?O:new RegExp(`${r?\"^\":\"\"}(?:${i})${n?\"$\":\"\"}`,(t=O.flags)!==null&&t!==void 0?t:O.ignoreCase?\"i\":\"\")}var Zl=qe.define();function X1(O,e,t,i){let{main:r}=O.selection,n=t-r.from,s=i-r.from;return{...O.changeByRange(a=>{if(a!=r&&t!=i&&O.sliceDoc(a.from+n,a.from+s)!=O.sliceDoc(t,i))return{range:a};let o=O.toText(e);return{changes:{from:a.from+n,to:i==r.from?a.to:a.from+s,insert:o},range:S.cursor(a.from+n+o.length)}}),scrollIntoView:!0,userEvent:\"input.complete\"}}var ZQ=new WeakMap;function T1(O){if(!Array.isArray(O))return O;let e=ZQ.get(O);return e||ZQ.set(O,e=zt(O)),e}var $s=V.define(),mr=V.define(),Pl=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t<e.length;){let i=Se(e,t),r=Me(i);this.chars.push(i);let n=e.slice(t,t+r),s=n.toUpperCase();this.folded.push(Se(s==n?n.toLowerCase():s,0)),t+=r}this.astral=e.length!=this.chars.length}ret(e,t){return this.score=e,this.matched=t,this}match(e){if(this.pattern.length==0)return this.ret(-100,[]);if(e.length<this.pattern.length)return null;let{chars:t,folded:i,any:r,precise:n,byWord:s}=this;if(t.length==1){let g=Se(e,0),P=Me(g),y=P==e.length?0:-100;if(g!=t[0])if(g==i[0])y+=-200;else return null;return this.ret(y,[0,P])}let a=e.indexOf(this.pattern);if(a==0)return this.ret(e.length==this.pattern.length?0:-100,[0,this.pattern.length]);let o=t.length,l=0;if(a<0){for(let g=0,P=Math.min(e.length,200);g<P&&l<o;){let y=Se(e,g);(y==t[l]||y==i[l])&&(r[l++]=g),g+=Me(y)}if(l<o)return null}let c=0,h=0,f=!1,u=0,Q=-1,$=-1,p=/[a-z]/.test(e),m=!0;for(let g=0,P=Math.min(e.length,200),y=0;g<P&&h<o;){let X=Se(e,g);a<0&&(c<o&&X==t[c]&&(n[c++]=g),u<o&&(X==t[u]||X==i[u]?(u==0&&(Q=g),$=g+1,u++):u=0));let x,k=X<255?X>=48&&X<=57||X>=97&&X<=122?2:X>=65&&X<=90?1:0:(x=Ri(X))!=x.toLowerCase()?1:x!=x.toUpperCase()?2:0;(!g||k==1&&p||y==0&&k!=0)&&(t[h]==X||i[h]==X&&(f=!0)?s[h++]=g:s.length&&(m=!1)),y=k,g+=Me(X)}return h==o&&s[0]==0&&m?this.result(-100+(f?-200:0),s,e):u==o&&Q==0?this.ret(-200-e.length+($==e.length?0:-100),[0,$]):a>-1?this.ret(-700-e.length,[a,a+this.pattern.length]):u==o?this.ret(-900-e.length,[Q,$]):h==o?this.result(-100+(f?-200:0)+-700+(m?0:-1100),s,e):t.length==2?null:this.result((r[0]?-700:0)+-200+-1100,r,e)}result(e,t,i){let r=[],n=0;for(let s of t){let a=s+(this.astral?Me(Se(i,s)):1);n&&r[n-1]==s?r[n-1]=a:(r[n++]=s,r[n++]=a)}return this.ret(e-i.length,r)}},Sl=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length<this.pattern.length)return null;let t=e.slice(0,this.pattern.length),i=t==this.pattern?0:t.toLowerCase()==this.folded?-200:null;return i==null?null:(this.matched=[0,t.length],this.score=i+(e.length==this.pattern.length?0:-100),this)}},ge=Z.define({combine(O){return xe(O,{activateOnTyping:!0,activateOnCompletion:()=>!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>\"\",optionClass:()=>\"\",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:b1,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>vQ(e(i),t(i)),optionClass:(e,t)=>i=>vQ(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function vQ(O,e){return O?e?O+\" \"+e:O:e}function b1(O,e,t,i,r,n){let s=O.textDirection==H.RTL,a=s,o=!1,l=\"top\",c,h,f=e.left-r.left,u=r.right-e.right,Q=i.right-i.left,$=i.bottom-i.top;if(a&&f<Math.min(Q,u)?a=!1:!a&&u<Math.min(Q,f)&&(a=!0),Q<=(a?f:u))c=Math.max(r.top,Math.min(t.top,r.bottom-$))-e.top,h=Math.min(400,a?f:u);else{o=!0,h=Math.min(400,(s?e.right:r.right-e.left)-30);let g=r.bottom-e.bottom;g>=$||g>e.top?c=t.bottom-e.top:(l=\"bottom\",c=e.bottom-t.top)}let p=(e.bottom-e.top)/n.offsetHeight,m=(e.right-e.left)/n.offsetWidth;return{style:`${l}: ${c/p}px; max-width: ${h/m}px`,class:\"cm-completionInfo-\"+(o?s?\"left-narrow\":\"right-narrow\":a?\"left\":\"right\")}}function y1(O){let e=O.addToOptions.slice();return O.icons&&e.push({render(t){let i=document.createElement(\"div\");return i.classList.add(\"cm-completionIcon\"),t.type&&i.classList.add(...t.type.split(/\\s+/g).map(r=>\"cm-completionIcon-\"+r)),i.setAttribute(\"aria-hidden\",\"true\"),i},position:20}),e.push({render(t,i,r,n){let s=document.createElement(\"span\");s.className=\"cm-completionLabel\";let a=t.displayLabel||t.label,o=0;for(let l=0;l<n.length;){let c=n[l++],h=n[l++];c>o&&s.appendChild(document.createTextNode(a.slice(o,c)));let f=s.appendChild(document.createElement(\"span\"));f.appendChild(document.createTextNode(a.slice(c,h))),f.className=\"cm-completionMatchedText\",o=h}return o<a.length&&s.appendChild(document.createTextNode(a.slice(o))),s},position:50},{render(t){if(!t.detail)return null;let i=document.createElement(\"span\");return i.className=\"cm-completionDetail\",i.textContent=t.detail,i},position:80}),e.sort((t,i)=>t.position-i.position).map(t=>t.render)}function pl(O,e,t){if(O<=t)return{from:0,to:O};if(e<0&&(e=0),e<=O>>1){let r=Math.floor(e/t);return{from:r*t,to:(r+1)*t}}let i=Math.floor((O-e)/t);return{from:O-(i+1)*t,to:O-i*t}}var Xl=class{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:o=>this.placeInfo(o),key:this},this.space=null,this.currentClass=\"\";let r=e.state.field(t),{options:n,selected:s}=r.open,a=e.state.facet(ge);this.optionContent=y1(a),this.optionClass=a.optionClass,this.tooltipClass=a.tooltipClass,this.range=pl(n.length,s,a.maxRenderedOptions),this.dom=document.createElement(\"div\"),this.dom.className=\"cm-tooltip-autocomplete\",this.updateTooltipClass(e.state),this.dom.addEventListener(\"mousedown\",o=>{let{options:l}=e.state.field(t).open;for(let c=o.target,h;c&&c!=this.dom;c=c.parentNode)if(c.nodeName==\"LI\"&&(h=/-(\\d+)$/.exec(c.id))&&+h[1]<l.length){this.applyCompletion(e,l[+h[1]]),o.preventDefault();return}}),this.dom.addEventListener(\"focusout\",o=>{let l=e.state.field(this.stateField,!1);l&&l.tooltip&&e.state.facet(ge).closeOnBlur&&o.relatedTarget!=e.contentDOM&&e.dispatch({effects:mr.of(null)})}),this.showOptions(n,r.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener(\"scroll\",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),r=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=r){let{options:n,selected:s,disabled:a}=i.open;(!r.open||r.open.options!=n)&&(this.range=pl(n.length,s,e.state.facet(ge).maxRenderedOptions),this.showOptions(n,i.id)),this.updateSel(),a!=((t=r.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\",!!a)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(\" \"))i&&this.dom.classList.remove(i);for(let i of t.split(\" \"))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected<this.range.from||t.selected>=this.range.to)&&(this.range=pl(t.options.length,t.selected,this.view.state.facet(ge).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:r}=t.options[t.selected],{info:n}=r;if(!n)return;let s=typeof n==\"string\"?document.createTextNode(n):n(r);if(!s)return;\"then\"in s?s.then(a=>{a&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(a,r)}).catch(a=>Xe(this.view.state,a,\"completion info\")):(this.addInfoPane(s,r),i.setAttribute(\"aria-describedby\",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement(\"div\");if(i.className=\"cm-tooltip cm-completionInfo\",i.id=\"cm-completionInfo-\"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:r,destroy:n}=e;i.appendChild(r),this.infoDestroy=n||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,r=this.range.from;i;i=i.nextSibling,r++)i.nodeName!=\"LI\"||!i.id?r--:r==e?i.hasAttribute(\"aria-selected\")||(i.setAttribute(\"aria-selected\",\"true\"),t=i):i.hasAttribute(\"aria-selected\")&&(i.removeAttribute(\"aria-selected\"),i.removeAttribute(\"aria-describedby\"));return t&&k1(this.list,t),t}measureInfo(){let e=this.dom.querySelector(\"[aria-selected]\");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),r=e.getBoundingClientRect(),n=this.space;if(!n){let s=this.dom.ownerDocument.documentElement;n={left:0,top:0,right:s.clientWidth,bottom:s.clientHeight}}return r.top>Math.min(n.bottom,t.bottom)-10||r.bottom<Math.max(n.top,t.top)+10?null:this.view.state.facet(ge).positionInfo(this.view,t,r,i,n,this.dom)}placeInfo(e){this.info&&(e?(e.style&&(this.info.style.cssText=e.style),this.info.className=\"cm-tooltip cm-completionInfo \"+(e.class||\"\")):this.info.style.cssText=\"top: -1e6px\")}createListBox(e,t,i){let r=document.createElement(\"ul\");r.id=t,r.setAttribute(\"role\",\"listbox\"),r.setAttribute(\"aria-expanded\",\"true\"),r.setAttribute(\"aria-label\",this.view.state.phrase(\"Completions\")),r.addEventListener(\"mousedown\",s=>{s.target==r&&s.preventDefault()});let n=null;for(let s=i.from;s<i.to;s++){let{completion:a,match:o}=e[s],{section:l}=a;if(l){let f=typeof l==\"string\"?l:l.name;if(f!=n&&(s>i.from||i.from==0))if(n=f,typeof l!=\"string\"&&l.header)r.appendChild(l.header(l));else{let u=r.appendChild(document.createElement(\"completion-section\"));u.textContent=f}}let c=r.appendChild(document.createElement(\"li\"));c.id=t+\"-\"+s,c.setAttribute(\"role\",\"option\");let h=this.optionClass(a);h&&(c.className=h);for(let f of this.optionContent){let u=f(a,this.view.state,this.view,o);u&&c.appendChild(u)}}return i.from&&r.classList.add(\"cm-completionListIncompleteTop\"),i.to<e.length&&r.classList.add(\"cm-completionListIncompleteBottom\"),r}destroyInfo(){this.info&&(this.infoDestroy&&this.infoDestroy(),this.info.remove(),this.info=null)}destroy(){this.destroyInfo()}};function x1(O,e){return t=>new Xl(t,O,e)}function k1(O,e){let t=O.getBoundingClientRect(),i=e.getBoundingClientRect(),r=t.height/O.offsetHeight;i.top<t.top?O.scrollTop-=(t.top-i.top)/r:i.bottom>t.bottom&&(O.scrollTop+=(i.bottom-t.bottom)/r)}function YQ(O){return(O.boost||0)*100+(O.apply?10:0)+(O.info?5:0)+(O.type?1:0)}function w1(O,e){let t=[],i=null,r=null,n=c=>{t.push(c);let{section:h}=c.completion;if(h){i||(i=[]);let f=typeof h==\"string\"?h:h.name;i.some(u=>u.name==f)||i.push(typeof h==\"string\"?{name:f}:h)}},s=e.facet(ge);for(let c of O)if(c.hasResult()){let h=c.result.getMatch;if(c.result.filter===!1)for(let f of c.result.options)n(new Qs(f,c.source,h?h(f):[],1e9-t.length));else{let f=e.sliceDoc(c.from,c.to),u,Q=s.filterStrict?new Sl(f):new Pl(f);for(let $ of c.result.options)if(u=Q.match($.label)){let p=$.displayLabel?h?h($,u.matched):[]:u.matched,m=u.score+($.boost||0);if(n(new Qs($,c.source,p,m)),typeof $.section==\"object\"&&$.section.rank===\"dynamic\"){let{name:g}=$.section;r||(r=Object.create(null)),r[g]=Math.max(m,r[g]||-1e9)}}}}if(i){let c=Object.create(null),h=0,f=(u,Q)=>(u.rank===\"dynamic\"&&Q.rank===\"dynamic\"?r[Q.name]-r[u.name]:0)||(typeof u.rank==\"number\"?u.rank:1e9)-(typeof Q.rank==\"number\"?Q.rank:1e9)||(u.name<Q.name?-1:1);for(let u of i.sort(f))h-=1e5,c[u.name]=h;for(let u of t){let{section:Q}=u.completion;Q&&(u.score+=c[typeof Q==\"string\"?Q:Q.name])}}let a=[],o=null,l=s.compareCompletions;for(let c of t.sort((h,f)=>f.score-h.score||l(h.completion,f.completion))){let h=c.completion;!o||o.label!=h.label||o.detail!=h.detail||o.type!=null&&h.type!=null&&o.type!=h.type||o.apply!=h.apply||o.boost!=h.boost?a.push(c):YQ(c.completion)>YQ(o)&&(a[a.length-1]=c),o=c.completion}return a}var Tl=class O{constructor(e,t,i,r,n,s){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=r,this.selected=n,this.disabled=s}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new O(this.options,_Q(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,r,n,s){if(r&&!s&&e.some(l=>l.isPending))return r.setDisabled();let a=w1(e,t);if(!a.length)return r&&e.some(l=>l.isPending)?r.setDisabled():null;let o=t.facet(ge).selectOnOpen?0:-1;if(r&&r.selected!=o&&r.selected!=-1){let l=r.options[r.selected].completion;for(let c=0;c<a.length;c++)if(a[c].completion==l){o=c;break}}return new O(a,_Q(i,o),{pos:e.reduce((l,c)=>c.hasResult()?Math.min(l,c.from):l,1e8),create:V1,above:n.aboveCursor},r?r.timestamp:Date.now(),o,!1)}map(e){return new O(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new O(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},bl=class O{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new O(_1,\"cm-ac-\"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(ge),n=(i.override||t.languageDataAt(\"autocomplete\",RO(t)).map(T1)).map(o=>(this.active.find(c=>c.source==o)||new qt(o,this.active.some(c=>c.state!=0)?1:0)).update(e,i));n.length==this.active.length&&n.every((o,l)=>o==this.active[l])&&(n=this.active);let s=this.open,a=e.effects.some(o=>o.is(vl));s&&e.docChanged&&(s=s.map(e.changes)),e.selection||n.some(o=>o.hasResult()&&e.changes.touchesRange(o.from,o.to))||!Z1(n,this.active)||a?s=Tl.build(n,t,this.id,s,i,a):s&&s.disabled&&!n.some(o=>o.isPending)&&(s=null),!s&&n.every(o=>!o.isPending)&&n.some(o=>o.hasResult())&&(n=n.map(o=>o.hasResult()?new qt(o.source,0):o));for(let o of e.effects)o.is(WQ)&&(s=s&&s.setSelected(o.value,this.id));return n==this.active&&s==this.open?this:new O(n,this.id,s)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?v1:Y1}};function Z1(O,e){if(O==e)return!0;for(let t=0,i=0;;){for(;t<O.length&&!O[t].hasResult();)t++;for(;i<e.length&&!e[i].hasResult();)i++;let r=t==O.length,n=i==e.length;if(r||n)return r==n;if(O[t++].result!=e[i++].result)return!1}}var v1={\"aria-autocomplete\":\"list\"},Y1={};function _Q(O,e){let t={\"aria-autocomplete\":\"list\",\"aria-haspopup\":\"listbox\",\"aria-controls\":O};return e>-1&&(t[\"aria-activedescendant\"]=O+\"-\"+e),t}var _1=[];function UQ(O,e){if(O.isUserEvent(\"input.complete\")){let i=O.annotation(Zl);if(i&&e.activateOnCompletion(i))return 12}let t=O.isUserEvent(\"input.type\");return t&&e.activateOnTyping?5:t?1:O.isUserEvent(\"delete.backward\")?2:O.selection?8:O.docChanged?16:0}var qt=class O{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=UQ(e,t),r=this;(i&8||i&16&&this.touches(e))&&(r=new O(r.source,0)),i&4&&r.state==0&&(r=new O(this.source,1)),r=r.updateFor(e,i);for(let n of e.effects)if(n.is($s))r=new O(r.source,1,n.value);else if(n.is(mr))r=new O(r.source,0);else if(n.is(vl))for(let s of n.value)s.source==r.source&&(r=s);return r}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(RO(e.state))}},ps=class O extends qt{constructor(e,t,i,r,n,s){super(e,3,t),this.limit=i,this.result=r,this.from=n,this.to=s}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let r=this.result;r.map&&!e.changes.empty&&(r=r.map(r,e.changes));let n=e.changes.mapPos(this.from),s=e.changes.mapPos(this.to,1),a=RO(e.state);if(a>s||!r||t&2&&(RO(e.startState)==this.from||a<this.limit))return new qt(this.source,t&4?1:0);let o=e.changes.mapPos(this.limit);return R1(r.validFor,e.state,n,s)?new O(this.source,this.explicit,o,r,n,s):r.update&&(r=r.update(r,n,s,new $i(e.state,a,!1)))?new O(this.source,this.explicit,o,r,r.from,(i=r.to)!==null&&i!==void 0?i:RO(e.state)):new qt(this.source,1,this.explicit)}map(e){return e.empty?this:(this.result.map?this.result.map(this.result,e):this.result)?new O(this.source,this.explicit,e.mapPos(this.limit),this.result,e.mapPos(this.from),e.mapPos(this.to,1)):new qt(this.source,0)}touches(e){return e.changes.touchesRange(this.from,this.to)}};function R1(O,e,t,i){if(!O)return!1;let r=e.sliceDoc(t,i);return typeof O==\"function\"?O(r,t,i,e):zQ(O,!0).test(r)}var vl=V.define({map(O,e){return O.map(t=>t.map(e))}}),WQ=V.define(),Ce=ce.define({create(){return bl.start()},update(O,e){return O.update(e)},provide:O=>[er.from(O,e=>e.tooltip),T.contentAttributes.from(O,e=>e.attrs)]});function Yl(O,e){let t=e.completion.apply||e.completion.label,i=O.state.field(Ce).active.find(r=>r.source==e.source);return i instanceof ps?(typeof t==\"string\"?O.dispatch({...X1(O.state,t,i.from,i.to),annotations:Zl.of(e.completion)}):t(O,e.completion,i.from,i.to),!0):!1}var V1=x1(Ce,Yl);function us(O,e=\"option\"){return t=>{let i=t.state.field(Ce,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp<t.state.facet(ge).interactionDelay)return!1;let r=1,n;e==\"page\"&&(n=To(t,i.open.tooltip))&&(r=Math.max(2,Math.floor(n.dom.offsetHeight/n.dom.querySelector(\"li\").offsetHeight)-1));let{length:s}=i.open.options,a=i.open.selected>-1?i.open.selected+r*(O?1:-1):O?0:s-1;return a<0?a=e==\"page\"?0:s-1:a>=s&&(a=e==\"page\"?s-1:0),t.dispatch({effects:WQ.of(a)}),!0}}var q1=O=>{let e=O.state.field(Ce,!1);return O.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestamp<O.state.facet(ge).interactionDelay?!1:Yl(O,e.open.options[e.open.selected])},ml=O=>O.state.field(Ce,!1)?(O.dispatch({effects:$s.of(!0)}),!0):!1,z1=O=>{let e=O.state.field(Ce,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(O.dispatch({effects:mr.of(null)}),!0)},yl=class{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}},U1=50,W1=1e3,j1=he.fromClass(class{constructor(O){this.view=O,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of O.state.field(Ce).active)e.isPending&&this.startQuery(e)}update(O){let e=O.state.field(Ce),t=O.state.facet(ge);if(!O.selectionSet&&!O.docChanged&&O.startState.field(Ce)==e)return;let i=O.transactions.some(n=>{let s=UQ(n,t);return s&8||(n.selection||n.docChanged)&&!(s&3)});for(let n=0;n<this.running.length;n++){let s=this.running[n];if(i||s.context.abortOnDocChange&&O.docChanged||s.updates.length+O.transactions.length>U1&&Date.now()-s.time>W1){for(let a of s.context.abortListeners)try{a()}catch(o){Xe(this.view.state,o)}s.context.abortListeners=null,this.running.splice(n--,1)}else s.updates.push(...O.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),O.transactions.some(n=>n.effects.some(s=>s.is($s)))&&(this.pendingStart=!0);let r=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(n=>n.isPending&&!this.running.some(s=>s.active.source==n.source))?setTimeout(()=>this.startUpdate(),r):-1,this.composing!=0)for(let n of O.transactions)n.isUserEvent(\"input.type\")?this.composing=2:this.composing==2&&n.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:O}=this.view,e=O.field(Ce);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(ge).updateSyncTime))}startQuery(O){let{state:e}=this.view,t=RO(e),i=new $i(e,t,O.explicit,this.view),r=new yl(O,i);this.running.push(r),Promise.resolve(O.source(i)).then(n=>{r.context.aborted||(r.done=n||null,this.scheduleAccept())},n=>{this.view.dispatch({effects:mr.of(null)}),Xe(this.view.state,n)})}scheduleAccept(){this.running.every(O=>O.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(ge).updateSyncTime))}accept(){var O;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(ge),i=this.view.state.field(Ce);for(let r=0;r<this.running.length;r++){let n=this.running[r];if(n.done===void 0)continue;if(this.running.splice(r--,1),n.done){let a=RO(n.updates.length?n.updates[0].startState:this.view.state),o=Math.min(a,n.done.from+(n.active.explicit?0:1)),l=new ps(n.active.source,n.active.explicit,o,n.done,n.done.from,(O=n.done.to)!==null&&O!==void 0?O:a);for(let c of n.updates)l=l.update(c,t);if(l.hasResult()){e.push(l);continue}}let s=i.active.find(a=>a.source==n.active.source);if(s&&s.isPending)if(n.done==null){let a=new qt(n.active.source,0);for(let o of n.updates)a=a.update(o,t);a.isPending||e.push(a)}else this.startQuery(s)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:vl.of(e)})}},{eventHandlers:{blur(O){let e=this.view.state.field(Ce,!1);if(e&&e.tooltip&&this.view.state.facet(ge).closeOnBlur){let t=e.open&&To(this.view,e.open.tooltip);(!t||!t.dom.contains(O.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:mr.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:$s.of(!1)}),20),this.composing=0}}}),C1=typeof navigator==\"object\"&&/Win/.test(navigator.platform),G1=ze.highest(T.domEventHandlers({keydown(O,e){let t=e.state.field(Ce,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||O.key.length>1||O.ctrlKey&&!(C1&&O.altKey)||O.metaKey)return!1;let i=t.open.options[t.open.selected],r=t.active.find(s=>s.source==i.source),n=i.completion.commitCharacters||r.result.commitCharacters;return n&&n.indexOf(O.key)>-1&&Yl(e,i),!1}})),jQ=T.baseTheme({\".cm-tooltip.cm-tooltip-autocomplete\":{\"& > ul\":{fontFamily:\"monospace\",whiteSpace:\"nowrap\",overflow:\"hidden auto\",maxWidth_fallback:\"700px\",maxWidth:\"min(700px, 95vw)\",minWidth:\"250px\",maxHeight:\"10em\",height:\"100%\",listStyle:\"none\",margin:0,padding:0,\"& > li, & > completion-section\":{padding:\"1px 3px\",lineHeight:1.2},\"& > li\":{overflowX:\"hidden\",textOverflow:\"ellipsis\",cursor:\"pointer\"},\"& > completion-section\":{display:\"list-item\",borderBottom:\"1px solid silver\",paddingLeft:\"0.5em\",opacity:.7}}},\"&light .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"#17c\",color:\"white\"},\"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\":{background:\"#777\"},\"&dark .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"#347\",color:\"white\"},\"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\":{background:\"#444\"},\".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\":{content:'\"\\xB7\\xB7\\xB7\"',opacity:.5,display:\"block\",textAlign:\"center\"},\".cm-tooltip.cm-completionInfo\":{position:\"absolute\",padding:\"3px 9px\",width:\"max-content\",maxWidth:\"400px\",boxSizing:\"border-box\",whiteSpace:\"pre-line\"},\".cm-completionInfo.cm-completionInfo-left\":{right:\"100%\"},\".cm-completionInfo.cm-completionInfo-right\":{left:\"100%\"},\".cm-completionInfo.cm-completionInfo-left-narrow\":{right:\"30px\"},\".cm-completionInfo.cm-completionInfo-right-narrow\":{left:\"30px\"},\"&light .cm-snippetField\":{backgroundColor:\"#00000022\"},\"&dark .cm-snippetField\":{backgroundColor:\"#ffffff22\"},\".cm-snippetFieldPosition\":{verticalAlign:\"text-top\",width:0,height:\"1.15em\",display:\"inline-block\",margin:\"0 -0.7px -.7em\",borderLeft:\"1.4px dotted #888\"},\".cm-completionMatchedText\":{textDecoration:\"underline\"},\".cm-completionDetail\":{marginLeft:\"0.5em\",fontStyle:\"italic\"},\".cm-completionIcon\":{fontSize:\"90%\",width:\".8em\",display:\"inline-block\",textAlign:\"center\",paddingRight:\".6em\",opacity:\"0.6\",boxSizing:\"content-box\"},\".cm-completionIcon-function, .cm-completionIcon-method\":{\"&:after\":{content:\"'\\u0192'\"}},\".cm-completionIcon-class\":{\"&:after\":{content:\"'\\u25CB'\"}},\".cm-completionIcon-interface\":{\"&:after\":{content:\"'\\u25CC'\"}},\".cm-completionIcon-variable\":{\"&:after\":{content:\"'\\u{1D465}'\"}},\".cm-completionIcon-constant\":{\"&:after\":{content:\"'\\u{1D436}'\"}},\".cm-completionIcon-type\":{\"&:after\":{content:\"'\\u{1D461}'\"}},\".cm-completionIcon-enum\":{\"&:after\":{content:\"'\\u222A'\"}},\".cm-completionIcon-property\":{\"&:after\":{content:\"'\\u25A1'\"}},\".cm-completionIcon-keyword\":{\"&:after\":{content:\"'\\u{1F511}\\uFE0E'\"}},\".cm-completionIcon-namespace\":{\"&:after\":{content:\"'\\u25A2'\"}},\".cm-completionIcon-text\":{\"&:after\":{content:\"'abc'\",fontSize:\"50%\",verticalAlign:\"middle\"}}}),xl=class{constructor(e,t,i,r){this.field=e,this.line=t,this.from=i,this.to=r}},kl=class O{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,pe.TrackDel),i=e.mapPos(this.to,1,pe.TrackDel);return t==null||i==null?null:new O(this.field,t,i)}},wl=class O{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],r=[t],n=e.doc.lineAt(t),s=/^\\s*/.exec(n.text)[0];for(let o of this.lines){if(i.length){let l=s,c=/^\\t*/.exec(o)[0].length;for(let h=0;h<c;h++)l+=e.facet(nO);r.push(t+l.length-c),o=l+o.slice(c)}i.push(o),t+=o.length+1}let a=this.fieldPositions.map(o=>new kl(o.field,r[o.line]+o.from,r[o.line]+o.to));return{text:i,ranges:a}}static parse(e){let t=[],i=[],r=[],n;for(let s of e.split(/\\r\\n?|\\n/)){for(;n=/[#$]\\{(?:(\\d+)(?::([^{}]*))?|((?:\\\\[{}]|[^{}])*))\\}/.exec(s);){let a=n[1]?+n[1]:null,o=n[2]||n[3]||\"\",l=-1,c=o.replace(/\\\\[{}]/g,h=>h[1]);for(let h=0;h<t.length;h++)(a!=null?t[h].seq==a:c&&t[h].name==c)&&(l=h);if(l<0){let h=0;for(;h<t.length&&(a==null||t[h].seq!=null&&t[h].seq<a);)h++;t.splice(h,0,{seq:a,name:c}),l=h;for(let f of r)f.field>=l&&f.field++}for(let h of r)if(h.line==i.length&&h.from>n.index){let f=n[2]?3+(n[1]||\"\").length:2;h.from-=f,h.to-=f}r.push(new xl(l,i.length,n.index,n.index+c.length)),s=s.slice(0,n.index)+o+s.slice(n.index+n[0].length)}s=s.replace(/\\\\([{}])/g,(a,o,l)=>{for(let c of r)c.line==i.length&&c.from>l&&(c.from--,c.to--);return o}),i.push(s)}return new O(i,r)}},E1=Y.widget({widget:new class extends _e{toDOM(){let O=document.createElement(\"span\");return O.className=\"cm-snippetFieldPosition\",O}ignoreEvent(){return!1}}}),A1=Y.mark({class:\"cm-snippetField\"}),pi=class O{constructor(e,t){this.ranges=e,this.active=t,this.deco=Y.set(e.map(i=>(i.from==i.to?E1:A1).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let r=i.map(e);if(!r)return null;t.push(r)}return new O(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}},Sr=V.define({map(O,e){return O&&O.map(e)}}),L1=V.define(),gr=ce.define({create(){return null},update(O,e){for(let t of e.effects){if(t.is(Sr))return t.value;if(t.is(L1)&&O)return new pi(O.ranges,t.value)}return O&&e.docChanged&&(O=O.map(e.changes)),O&&e.selection&&!O.selectionInsideField(e.selection)&&(O=null),O},provide:O=>T.decorations.from(O,e=>e?e.deco:Y.none)});function _l(O,e){return S.create(O.filter(t=>t.field==e).map(t=>S.range(t.from,t.to)))}function M1(O){let e=wl.parse(O);return(t,i,r,n)=>{let{text:s,ranges:a}=e.instantiate(t.state,r),{main:o}=t.state.selection,l={changes:{from:r,to:n==o.from?o.to:n,insert:E.of(s)},scrollIntoView:!0,annotations:i?[Zl.of(i),Qe.userEvent.of(\"input.complete\")]:void 0};if(a.length&&(l.selection=_l(a,0)),a.some(c=>c.field>0)){let c=new pi(a,0),h=l.effects=[Sr.of(c)];t.state.field(gr,!1)===void 0&&h.push(V.appendConfig.of([gr,F1,H1,jQ]))}t.dispatch(t.state.update(l))}}function CQ(O){return({state:e,dispatch:t})=>{let i=e.field(gr,!1);if(!i||O<0&&i.active==0)return!1;let r=i.active+O,n=O>0&&!i.ranges.some(s=>s.field==r+O);return t(e.update({selection:_l(i.ranges,r),effects:Sr.of(n?null:new pi(i.ranges,r)),scrollIntoView:!0})),!0}}var D1=({state:O,dispatch:e})=>O.field(gr,!1)?(e(O.update({effects:Sr.of(null)})),!0):!1,I1=CQ(1),B1=CQ(-1);var N1=[{key:\"Tab\",run:I1,shift:B1},{key:\"Escape\",run:D1}],RQ=Z.define({combine(O){return O.length?O[0]:N1}}),F1=ze.highest(Xt.compute([RQ],O=>O.facet(RQ)));function W(O,e){return{...e,apply:M1(O)}}var H1=T.domEventHandlers({mousedown(O,e){let t=e.state.field(gr,!1),i;if(!t||(i=e.posAtCoords({x:O.clientX,y:O.clientY}))==null)return!1;let r=t.ranges.find(n=>n.from<=i&&n.to>=i);return!r||r.field==t.active?!1:(e.dispatch({selection:_l(t.ranges,r.field),effects:Sr.of(t.ranges.some(n=>n.field>r.field)?new pi(t.ranges,r.field):null),scrollIntoView:!0}),!0)}});var Pr={brackets:[\"(\",\"[\",\"{\",\"'\",'\"'],before:\")]}:;>\",stringPrefixes:[]},_O=V.define({map(O,e){let t=e.mapPos(O,-1,pe.TrackAfter);return t??void 0}}),Rl=new class extends tt{};Rl.startSide=1;Rl.endSide=-1;var GQ=ce.define({create(){return M.empty},update(O,e){if(O=O.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);O=O.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(_O)&&(O=O.update({add:[Rl.range(t.value,t.value+1)]}));return O}});function EQ(){return[J1,GQ]}var gl=\"()[]{}<>\\xAB\\xBB\\xBB\\xAB\\uFF3B\\uFF3D\\uFF5B\\uFF5D\";function AQ(O){for(let e=0;e<gl.length;e+=2)if(gl.charCodeAt(e)==O)return gl.charAt(e+1);return Ri(O<128?O:O+1)}function LQ(O,e){return O.languageDataAt(\"closeBrackets\",e)[0]||Pr}var K1=typeof navigator==\"object\"&&/Android\\b/.test(navigator.userAgent),J1=T.inputHandler.of((O,e,t,i)=>{if((K1?O.composing:O.compositionStarted)||O.state.readOnly)return!1;let r=O.state.selection.main;if(i.length>2||i.length==2&&Me(Se(i,0))==1||e!=r.from||t!=r.to)return!1;let n=t0(O.state,i);return n?(O.dispatch(n),!0):!1}),e0=({state:O,dispatch:e})=>{if(O.readOnly)return!1;let i=LQ(O,O.selection.main.head).brackets||Pr.brackets,r=null,n=O.changeByRange(s=>{if(s.empty){let a=O0(O.doc,s.head);for(let o of i)if(o==a&&ms(O.doc,s.head)==AQ(Se(o,0)))return{changes:{from:s.head-o.length,to:s.head+o.length},range:S.cursor(s.head-o.length)}}return{range:r=s}});return r||e(O.update(n,{scrollIntoView:!0,userEvent:\"delete.backward\"})),!r},MQ=[{key:\"Backspace\",run:e0}];function t0(O,e){let t=LQ(O,O.selection.main.head),i=t.brackets||Pr.brackets;for(let r of i){let n=AQ(Se(r,0));if(e==r)return n==r?n0(O,r,i.indexOf(r+r+r)>-1,t):i0(O,r,n,t.before||Pr.before);if(e==n&&DQ(O,O.selection.main.from))return r0(O,r,n)}return null}function DQ(O,e){let t=!1;return O.field(GQ).between(0,O.doc.length,i=>{i==e&&(t=!0)}),t}function ms(O,e){let t=O.sliceString(e,e+2);return t.slice(0,Me(Se(t,0)))}function O0(O,e){let t=O.sliceString(e-2,e);return Me(Se(t,0))==t.length?t:t.slice(1)}function i0(O,e,t,i){let r=null,n=O.changeByRange(s=>{if(!s.empty)return{changes:[{insert:e,from:s.from},{insert:t,from:s.to}],effects:_O.of(s.to+e.length),range:S.range(s.anchor+e.length,s.head+e.length)};let a=ms(O.doc,s.head);return!a||/\\s/.test(a)||i.indexOf(a)>-1?{changes:{insert:e+t,from:s.head},effects:_O.of(s.head+e.length),range:S.cursor(s.head+e.length)}:{range:r=s}});return r?null:O.update(n,{scrollIntoView:!0,userEvent:\"input.type\"})}function r0(O,e,t){let i=null,r=O.changeByRange(n=>n.empty&&ms(O.doc,n.head)==t?{changes:{from:n.head,to:n.head+t.length,insert:t},range:S.cursor(n.head+t.length)}:i={range:n});return i?null:O.update(r,{scrollIntoView:!0,userEvent:\"input.type\"})}function n0(O,e,t,i){let r=i.stringPrefixes||Pr.stringPrefixes,n=null,s=O.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:e,from:a.to}],effects:_O.of(a.to+e.length),range:S.range(a.anchor+e.length,a.head+e.length)};let o=a.head,l=ms(O.doc,o),c;if(l==e){if(VQ(O,o))return{changes:{insert:e+e,from:o},effects:_O.of(o+e.length),range:S.cursor(o+e.length)};if(DQ(O,o)){let f=t&&O.sliceDoc(o,o+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:o,to:o+f.length,insert:f},range:S.cursor(o+f.length)}}}else{if(t&&O.sliceDoc(o-2*e.length,o)==e+e&&(c=qQ(O,o-2*e.length,r))>-1&&VQ(O,c))return{changes:{insert:e+e+e+e,from:o},effects:_O.of(o+e.length),range:S.cursor(o+e.length)};if(O.charCategorizer(o)(l)!=ee.Word&&qQ(O,o,r)>-1&&!s0(O,o,e,r))return{changes:{insert:e+e,from:o},effects:_O.of(o+e.length),range:S.cursor(o+e.length)}}return{range:n=a}});return n?null:O.update(s,{scrollIntoView:!0,userEvent:\"input.type\"})}function VQ(O,e){let t=U(O).resolveInner(e+1);return t.parent&&t.from==e}function s0(O,e,t,i){let r=U(O).resolveInner(e,-1),n=i.reduce((s,a)=>Math.max(s,a.length),0);for(let s=0;s<5;s++){let a=O.sliceDoc(r.from,Math.min(r.to,r.from+t.length+n)),o=a.indexOf(t);if(!o||o>-1&&i.indexOf(a.slice(0,o))>-1){let c=r.firstChild;for(;c&&c.from==r.from&&c.to-c.from>t.length+o;){if(O.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let l=r.to==e&&r.parent;if(!l)break;r=l}return!1}function qQ(O,e,t){let i=O.charCategorizer(e);if(i(O.sliceDoc(e-1,e))!=ee.Word)return e;for(let r of t){let n=e-r.length;if(O.sliceDoc(n,e)==r&&i(O.sliceDoc(n-1,n))!=ee.Word)return n}return-1}function IQ(O={}){return[G1,Ce,ge.of(O),j1,a0,jQ]}var Vl=[{key:\"Ctrl-Space\",run:ml},{mac:\"Alt-`\",run:ml},{mac:\"Alt-i\",run:ml},{key:\"Escape\",run:z1},{key:\"ArrowDown\",run:us(!0)},{key:\"ArrowUp\",run:us(!1)},{key:\"PageDown\",run:us(!0,\"page\")},{key:\"PageUp\",run:us(!1,\"page\")},{key:\"Enter\",run:q1}],a0=ze.highest(Xt.computeN([ge],O=>O.facet(ge).defaultKeymap?[Vl]:[]));var Ps=class{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}},VO=class O{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let r=i.facet(Xr).markerFilter;r&&(e=r(e,i));let n=e.slice().sort((u,Q)=>u.from-Q.from||u.to-Q.to),s=new Le,a=[],o=0,l=i.doc.iter(),c=0,h=i.doc.length;for(let u=0;;){let Q=u==n.length?null:n[u];if(!Q&&!a.length)break;let $,p;if(a.length)$=o,p=a.reduce((P,y)=>Math.min(P,y.to),Q&&Q.from>$?Q.from:1e8);else{if($=Q.from,$>h)break;p=Q.to,a.push(Q),u++}for(;u<n.length;){let P=n[u];if(P.from==$&&(P.to>P.from||P.to==$))a.push(P),u++,p=Math.min(P.to,p);else{p=Math.min(P.from,p);break}}p=Math.min(p,h);let m=!1;if(a.some(P=>P.from==$&&(P.to==p||p==h))&&(m=$==p,!m&&p-$<10)){let P=$-(c+l.value.length);P>0&&(l.next(P),c=$);for(let y=$;;){if(y>=p){m=!0;break}if(!l.lineBreak&&c+l.value.length>y)break;y=c+l.value.length,c+=l.value.length,l.next()}}let g=m0(a);if(m)s.add($,$,Y.widget({widget:new ql(g),diagnostics:a.slice()}));else{let P=a.reduce((y,X)=>X.markClass?y+\" \"+X.markClass:y,\"\");s.add($,p,Y.mark({class:\"cm-lintRange cm-lintRange-\"+g+P,diagnostics:a.slice(),inclusiveEnd:a.some(y=>y.to>p)}))}if(o=p,o==h)break;for(let P=0;P<a.length;P++)a[P].to<=o&&a.splice(P--,1)}let f=s.finish();return new O(f,t,mi(f))}};function mi(O,e=null,t=0){let i=null;return O.between(t,1e9,(r,n,{spec:s})=>{if(!(e&&s.diagnostics.indexOf(e)<0))if(!i)i=new Ps(r,n,e||s.diagnostics[0]);else{if(s.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new Ps(i.from,n,i.diagnostic)}}),i}function o0(O,e){let t=e.pos,i=e.end||t,r=O.state.facet(Xr).hideOn(O,t,i);if(r!=null)return r;let n=O.startState.doc.lineAt(e.pos);return!!(O.effects.some(s=>s.is(FQ))||O.changes.touchesRange(n.from,Math.max(n.to,i)))}function l0(O,e){return O.field(Fe,!1)?e:e.concat(V.appendConfig.of(g0))}var FQ=V.define(),zl=V.define(),HQ=V.define(),Fe=ce.define({create(){return new VO(Y.none,null,null)},update(O,e){if(e.docChanged&&O.diagnostics.size){let t=O.diagnostics.map(e.changes),i=null,r=O.panel;if(O.selected){let n=e.changes.mapPos(O.selected.from,1);i=mi(t,O.selected.diagnostic,n)||mi(t,null,n)}!t.size&&r&&e.state.facet(Xr).autoPanel&&(r=null),O=new VO(t,r,i)}for(let t of e.effects)if(t.is(FQ)){let i=e.state.facet(Xr).autoPanel?t.value.length?Tr.open:null:O.panel;O=VO.init(t.value,i,e.state)}else t.is(zl)?O=new VO(O.diagnostics,t.value?Tr.open:null,O.selected):t.is(HQ)&&(O=new VO(O.diagnostics,O.panel,t.value));return O},provide:O=>[TO.from(O,e=>e.panel),T.decorations.from(O,e=>e.diagnostics)]});var c0=Y.mark({class:\"cm-lintRange cm-lintRange-active\"});function h0(O,e,t){let{diagnostics:i}=O.state.field(Fe),r,n=-1,s=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(o,l,{spec:c})=>{if(e>=o&&e<=l&&(o==l||(e>o||t>0)&&(e<l||t<0)))return r=c.diagnostics,n=o,s=l,!1});let a=O.state.facet(Xr).tooltipFilter;return r&&a&&(r=a(r,O.state)),r?{pos:n,end:s,above:O.state.doc.lineAt(n).to<s,create(){return{dom:f0(O,r)}}}:null}function f0(O,e){return N(\"ul\",{class:\"cm-tooltip-lint\"},e.map(t=>e$(O,t,!1)))}var d0=O=>{let e=O.state.field(Fe,!1);(!e||!e.panel)&&O.dispatch({effects:l0(O.state,[zl.of(!0)])});let t=bO(O,Tr.open);return t&&t.dom.querySelector(\".cm-panel-lint ul\").focus(),!0},BQ=O=>{let e=O.state.field(Fe,!1);return!e||!e.panel?!1:(O.dispatch({effects:zl.of(!1)}),!0)},u0=O=>{let e=O.state.field(Fe,!1);if(!e)return!1;let t=O.state.selection.main,i=e.diagnostics.iter(t.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==t.from&&i.to==t.to)?!1:(O.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var KQ=[{key:\"Mod-Shift-m\",run:d0,preventDefault:!0},{key:\"F8\",run:u0}];var Xr=Z.define({combine(O){return{sources:O.map(e=>e.source).filter(e=>e!=null),...xe(O.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:NQ,tooltipFilter:NQ,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,r,n)=>e(i,r,n)||t(i,r,n):e:t,autoPanel:(e,t)=>e||t})}}});function NQ(O,e){return O?e?(t,i)=>e(O(t,i),i):O:e}function JQ(O){let e=[];if(O)e:for(let{name:t}of O){for(let i=0;i<t.length;i++){let r=t[i];if(/[a-zA-Z]/.test(r)&&!e.some(n=>n.toLowerCase()==r.toLowerCase())){e.push(r);continue e}}e.push(\"\")}return e}function e$(O,e,t){var i;let r=t?JQ(e.actions):[];return N(\"li\",{class:\"cm-diagnostic cm-diagnostic-\"+e.severity},N(\"span\",{class:\"cm-diagnosticText\"},e.renderMessage?e.renderMessage(O):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((n,s)=>{let a=!1,o=u=>{if(u.preventDefault(),a)return;a=!0;let Q=mi(O.state.field(Fe).diagnostics,e);Q&&n.apply(O,Q.from,Q.to)},{name:l}=n,c=r[s]?l.indexOf(r[s]):-1,h=c<0?l:[l.slice(0,c),N(\"u\",l.slice(c,c+1)),l.slice(c+1)],f=n.markClass?\" \"+n.markClass:\"\";return N(\"button\",{type:\"button\",class:\"cm-diagnosticAction\"+f,onclick:o,onmousedown:o,\"aria-label\":` Action: ${l}${c<0?\"\":` (access key \"${r[s]})\"`}.`},h)}),e.source&&N(\"div\",{class:\"cm-diagnosticSource\"},e.source))}var ql=class extends _e{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return N(\"span\",{class:\"cm-lintPoint cm-lintPoint-\"+this.sev})}},Ss=class{constructor(e,t){this.diagnostic=t,this.id=\"item_\"+Math.floor(Math.random()*4294967295).toString(16),this.dom=e$(e,t,!0),this.dom.id=this.id,this.dom.setAttribute(\"role\",\"option\")}},Tr=class O{constructor(e){this.view=e,this.items=[];let t=r=>{if(r.keyCode==27)BQ(this.view),this.view.focus();else if(r.keyCode==38||r.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(r.keyCode==40||r.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(r.keyCode==36)this.moveSelection(0);else if(r.keyCode==35)this.moveSelection(this.items.length-1);else if(r.keyCode==13)this.view.focus();else if(r.keyCode>=65&&r.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:n}=this.items[this.selectedIndex],s=JQ(n.actions);for(let a=0;a<s.length;a++)if(s[a].toUpperCase().charCodeAt(0)==r.keyCode){let o=mi(this.view.state.field(Fe).diagnostics,n);o&&n.actions[a].apply(e,o.from,o.to)}}else return;r.preventDefault()},i=r=>{for(let n=0;n<this.items.length;n++)this.items[n].dom.contains(r.target)&&this.moveSelection(n)};this.list=N(\"ul\",{tabIndex:0,role:\"listbox\",\"aria-label\":this.view.state.phrase(\"Diagnostics\"),onkeydown:t,onclick:i}),this.dom=N(\"div\",{class:\"cm-panel-lint\"},this.list,N(\"button\",{type:\"button\",name:\"close\",\"aria-label\":this.view.state.phrase(\"close\"),onclick:()=>BQ(this.view)},\"\\xD7\")),this.update()}get selectedIndex(){let e=this.view.state.field(Fe).selected;if(!e)return-1;for(let t=0;t<this.items.length;t++)if(this.items[t].diagnostic==e.diagnostic)return t;return-1}update(){let{diagnostics:e,selected:t}=this.view.state.field(Fe),i=0,r=!1,n=null,s=new Set;for(e.between(0,this.view.state.doc.length,(a,o,{spec:l})=>{for(let c of l.diagnostics){if(s.has(c))continue;s.add(c);let h=-1,f;for(let u=i;u<this.items.length;u++)if(this.items[u].diagnostic==c){h=u;break}h<0?(f=new Ss(this.view,c),this.items.splice(i,0,f),r=!0):(f=this.items[h],h>i&&(this.items.splice(i,h-i),r=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute(\"aria-selected\")||(f.dom.setAttribute(\"aria-selected\",\"true\"),n=f):f.dom.hasAttribute(\"aria-selected\")&&f.dom.removeAttribute(\"aria-selected\"),i++}});i<this.items.length&&!(this.items.length==1&&this.items[0].diagnostic.from<0);)r=!0,this.items.pop();this.items.length==0&&(this.items.push(new Ss(this.view,{from:-1,to:-1,severity:\"info\",message:this.view.state.phrase(\"No diagnostics\")})),r=!0),n?(this.list.setAttribute(\"aria-activedescendant\",n.id),this.view.requestMeasure({key:this,read:()=>({sel:n.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:o})=>{let l=o.height/this.list.offsetHeight;a.top<o.top?this.list.scrollTop-=(o.top-a.top)/l:a.bottom>o.bottom&&(this.list.scrollTop+=(a.bottom-o.bottom)/l)}})):this.selectedIndex<0&&this.list.removeAttribute(\"aria-activedescendant\"),r&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(Fe),i=mi(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:HQ.of(i)})}static open(e){return new O(e)}};function Q0(O,e='viewBox=\"0 0 40 40\"'){return`url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${e}>${encodeURIComponent(O)}</svg>')`}function gs(O){return Q0(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${O}\" fill=\"none\" stroke-width=\".7\"/>`,'width=\"6\" height=\"3\"')}var $0=T.baseTheme({\".cm-diagnostic\":{padding:\"3px 6px 3px 8px\",marginLeft:\"-1px\",display:\"block\",whiteSpace:\"pre-wrap\"},\".cm-diagnostic-error\":{borderLeft:\"5px solid #d11\"},\".cm-diagnostic-warning\":{borderLeft:\"5px solid orange\"},\".cm-diagnostic-info\":{borderLeft:\"5px solid #999\"},\".cm-diagnostic-hint\":{borderLeft:\"5px solid #66d\"},\".cm-diagnosticAction\":{font:\"inherit\",border:\"none\",padding:\"2px 4px\",backgroundColor:\"#444\",color:\"white\",borderRadius:\"3px\",marginLeft:\"8px\",cursor:\"pointer\"},\".cm-diagnosticSource\":{fontSize:\"70%\",opacity:.7},\".cm-lintRange\":{backgroundPosition:\"left bottom\",backgroundRepeat:\"repeat-x\",paddingBottom:\"0.7px\"},\".cm-lintRange-error\":{backgroundImage:gs(\"#d11\")},\".cm-lintRange-warning\":{backgroundImage:gs(\"orange\")},\".cm-lintRange-info\":{backgroundImage:gs(\"#999\")},\".cm-lintRange-hint\":{backgroundImage:gs(\"#66d\")},\".cm-lintRange-active\":{backgroundColor:\"#ffdd9980\"},\".cm-tooltip-lint\":{padding:0,margin:0},\".cm-lintPoint\":{position:\"relative\",\"&:after\":{content:'\"\"',position:\"absolute\",bottom:0,left:\"-2px\",borderLeft:\"3px solid transparent\",borderRight:\"3px solid transparent\",borderBottom:\"4px solid #d11\"}},\".cm-lintPoint-warning\":{\"&:after\":{borderBottomColor:\"orange\"}},\".cm-lintPoint-info\":{\"&:after\":{borderBottomColor:\"#999\"}},\".cm-lintPoint-hint\":{\"&:after\":{borderBottomColor:\"#66d\"}},\".cm-panel.cm-panel-lint\":{position:\"relative\",\"& ul\":{maxHeight:\"100px\",overflowY:\"auto\",\"& [aria-selected]\":{backgroundColor:\"#ddd\",\"& u\":{textDecoration:\"underline\"}},\"&:focus [aria-selected]\":{background_fallback:\"#bdf\",backgroundColor:\"Highlight\",color_fallback:\"white\",color:\"HighlightText\"},\"& u\":{textDecoration:\"none\"},padding:0,margin:0},\"& [name=close]\":{position:\"absolute\",top:\"0\",right:\"2px\",background:\"inherit\",border:\"none\",font:\"inherit\",padding:0,margin:0}}});function p0(O){return O==\"error\"?4:O==\"warning\"?3:O==\"info\"?2:1}function m0(O){let e=\"hint\",t=1;for(let i of O){let r=p0(i.severity);r>t&&(t=r,e=i.severity)}return e}var g0=[Fe,T.decorations.compute([Fe],O=>{let{selected:e,panel:t}=O.field(Fe);return!e||!t||e.from==e.to?Y.none:Y.set([c0.range(e.from,e.to)])}),zd(h0,{hideOn:o0}),$0];var t$=[jd(),Cd(),_d(),zu(),mu(),wd(),Yd(),I.allowMultipleSelections.of(!0),cu(),Nn(Pu,{fallback:!0}),bu(),EQ(),IQ(),Vd(),qd(),Rd(),XQ(),Xt.of([...MQ,...uQ,...kQ,...Cu,...Qu,...Vl,...KQ])];var P0=\"#e5c07b\",O$=\"#e06c75\",S0=\"#56b6c2\",X0=\"#ffffff\",Xs=\"#abb2bf\",Wl=\"#7d8799\",T0=\"#61afef\",b0=\"#98c379\",i$=\"#d19a66\",y0=\"#c678dd\",x0=\"#21252b\",r$=\"#2c313a\",n$=\"#282c34\",Ul=\"#353a42\",k0=\"#3E4451\",s$=\"#528bff\";var w0=T.theme({\"&\":{color:Xs,backgroundColor:n$},\".cm-content\":{caretColor:s$},\".cm-cursor, .cm-dropCursor\":{borderLeftColor:s$},\"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\":{backgroundColor:k0},\".cm-panels\":{backgroundColor:x0,color:Xs},\".cm-panels.cm-panels-top\":{borderBottom:\"2px solid black\"},\".cm-panels.cm-panels-bottom\":{borderTop:\"2px solid black\"},\".cm-searchMatch\":{backgroundColor:\"#72a1ff59\",outline:\"1px solid #457dff\"},\".cm-searchMatch.cm-searchMatch-selected\":{backgroundColor:\"#6199ff2f\"},\".cm-activeLine\":{backgroundColor:\"#6699ff0b\"},\".cm-selectionMatch\":{backgroundColor:\"#aafe661a\"},\"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\":{backgroundColor:\"#bad0f847\"},\".cm-gutters\":{backgroundColor:n$,color:Wl,border:\"none\"},\".cm-activeLineGutter\":{backgroundColor:r$},\".cm-foldPlaceholder\":{backgroundColor:\"transparent\",border:\"none\",color:\"#ddd\"},\".cm-tooltip\":{border:\"none\",backgroundColor:Ul},\".cm-tooltip .cm-tooltip-arrow:before\":{borderTopColor:\"transparent\",borderBottomColor:\"transparent\"},\".cm-tooltip .cm-tooltip-arrow:after\":{borderTopColor:Ul,borderBottomColor:Ul},\".cm-tooltip-autocomplete\":{\"& > ul > li[aria-selected]\":{backgroundColor:r$,color:Xs}}},{dark:!0}),Z0=ci.define([{tag:d.keyword,color:y0},{tag:[d.name,d.deleted,d.character,d.propertyName,d.macroName],color:O$},{tag:[d.function(d.variableName),d.labelName],color:T0},{tag:[d.color,d.constant(d.name),d.standard(d.name)],color:i$},{tag:[d.definition(d.name),d.separator],color:Xs},{tag:[d.typeName,d.className,d.number,d.changed,d.annotation,d.modifier,d.self,d.namespace],color:P0},{tag:[d.operator,d.operatorKeyword,d.url,d.escape,d.regexp,d.link,d.special(d.string)],color:S0},{tag:[d.meta,d.comment],color:Wl},{tag:d.strong,fontWeight:\"bold\"},{tag:d.emphasis,fontStyle:\"italic\"},{tag:d.strikethrough,textDecoration:\"line-through\"},{tag:d.link,color:Wl,textDecoration:\"underline\"},{tag:d.heading,fontWeight:\"bold\",color:O$},{tag:[d.atom,d.bool,d.special(d.variableName)],color:i$},{tag:[d.processingInstruction,d.string,d.inserted],color:b0},{tag:d.invalid,color:X0}]),a$=[w0,Nn(Z0)];var Gl=class O{constructor(e,t,i,r,n,s,a,o,l,c=0,h){this.p=e,this.stack=t,this.state=i,this.reducePos=r,this.pos=n,this.score=s,this.buffer=a,this.bufferBase=o,this.curContext=l,this.lookAhead=c,this.parent=h}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?\"!\"+this.score:\"\"}`}static start(e,t,i=0){let r=e.parser.context;return new O(e,[],t,i,i,0,[],0,r?new Ts(r,r.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,r=e&65535,{parser:n}=this.p,s=this.reducePos<this.pos-25&&this.setLookAhead(this.pos),a=n.dynamicPrecedence(r);if(a&&(this.score+=a),i==0){this.pushState(n.getGoto(this.state,r,!0),this.reducePos),r<n.minRepeatTerm&&this.storeNode(r,this.reducePos,this.reducePos,s?8:4,!0),this.reduceContext(r,this.reducePos);return}let o=this.stack.length-(i-1)*3-(e&262144?6:0),l=o?this.stack[o-2]:this.p.ranges[0].from,c=this.reducePos-l;c>=2e3&&!(!((t=this.p.parser.nodeSet.types[r])===null||t===void 0)&&t.isAnonymous)&&(l==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=c):this.p.lastBigReductionSize<c&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=l,this.p.lastBigReductionSize=c));let h=o?this.stack[o-1]:0,f=this.bufferBase+this.buffer.length-h;if(r<n.minRepeatTerm||e&131072){let u=n.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(r,l,u,f+4,!0)}if(e&262144)this.state=this.stack[o];else{let u=this.stack[o-3];this.state=n.getGoto(u,r,!0)}for(;this.stack.length>o;)this.stack.pop();this.reduceContext(r,l)}storeNode(e,t,i,r=4,n=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let s=this,a=this.buffer.length;if(a==0&&s.parent&&(a=s.bufferBase-s.parent.bufferBase,s=s.parent),a>0&&s.buffer[a-4]==0&&s.buffer[a-1]>-1){if(t==i)return;if(s.buffer[a-2]>=t){s.buffer[a-2]=i;return}}}if(!n||this.pos==i)this.buffer.push(e,t,i,r);else{let s=this.buffer.length;if(s>0&&(this.buffer[s-4]!=0||this.buffer[s-1]<0)){let a=!1;for(let o=s;o>0&&this.buffer[o-2]>i;o-=4)if(this.buffer[o-1]>=0){a=!0;break}if(a)for(;s>0&&this.buffer[s-2]>i;)this.buffer[s]=this.buffer[s-4],this.buffer[s+1]=this.buffer[s-3],this.buffer[s+2]=this.buffer[s-2],this.buffer[s+3]=this.buffer[s-1],s-=4,r>4&&(r-=4)}this.buffer[s]=e,this.buffer[s+1]=t,this.buffer[s+2]=i,this.buffer[s+3]=r}}shift(e,t,i,r){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let n=e,{parser:s}=this.p;(r>this.pos||t<=s.maxNode)&&(this.pos=r,s.stateFlag(n,1)||(this.reducePos=r)),this.pushState(n,i),this.shiftContext(t,i),t<=s.maxNode&&this.buffer.push(t,i,r,4)}else this.pos=r,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,r,4)}apply(e,t,i,r){e&65536?this.reduce(e):this.shift(e,t,i,r)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(i,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),r=e.bufferBase+t;for(;e&&r==e.bufferBase;)e=e.parent;return new O(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,r,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new El(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let r=[];for(let n=0,s;n<t.length;n+=2)(s=t[n+1])!=this.state&&this.p.parser.hasAction(s,e)&&r.push(t[n],s);if(this.stack.length<120)for(let n=0;r.length<8&&n<t.length;n+=2){let s=t[n+1];r.some((a,o)=>o&1&&a==s)||r.push(t[n],s)}t=r}let i=[];for(let r=0;r<t.length&&i.length<4;r+=2){let n=t[r+1];if(n==this.state)continue;let s=this.split();s.pushState(n,this.pos),s.storeNode(0,s.pos,s.pos,4,!0),s.shiftContext(t[r],this.pos),s.reducePos=this.pos,s.score-=200,i.push(s)}return i}forceReduce(){let{parser:e}=this.p,t=e.stateSlot(this.state,5);if((t&65536)==0)return!1;if(!e.validAction(this.state,t)){let i=t>>19,r=t&65535,n=this.stack.length-i*3;if(n<0||e.getGoto(this.stack[n],r,!1)<0){let s=this.findForcedReduction();if(s==null)return!1;t=s}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(r,n)=>{if(!t.includes(r))return t.push(r),e.allActions(r,s=>{if(!(s&393216))if(s&65536){let a=(s>>19)-n;if(a>1){let o=s&65535,l=this.stack.length-a*3;if(l>=0&&e.getGoto(this.stack[l],o,!1)>=0)return a<<19|65536|o}}else{let a=i(s,n+1);if(a!=null)return a}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t<this.stack.length;t+=3)if(this.stack[t]!=e.stack[t])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(e){return this.p.parser.dialect.flags[e]}shiftContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,e,this,this.p.stream.reset(t)))}reduceContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,e,this,this.p.stream.reset(t)))}emitContext(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-3)&&this.buffer.push(this.curContext.hash,this.pos,this.pos,-3)}emitLookAhead(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-4)&&this.buffer.push(this.lookAhead,this.pos,this.pos,-4)}updateContext(e){if(e!=this.curContext.context){let t=new Ts(this.curContext.tracker,e);t.hash!=this.curContext.hash&&this.emitContext(),this.curContext=t}}setLookAhead(e){return e<=this.lookAhead?!1:(this.emitLookAhead(),this.lookAhead=e,!0)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},Ts=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},El=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}},Al=class O{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new O(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new O(this.stack,this.pos,this.index)}};function br(O,e=Uint16Array){if(typeof O!=\"string\")return O;let t=null;for(let i=0,r=0;i<O.length;){let n=0;for(;;){let s=O.charCodeAt(i++),a=!1;if(s==126){n=65535;break}s>=92&&s--,s>=34&&s--;let o=s-32;if(o>=46&&(o-=46,a=!0),n+=o,a)break;n*=46}t?t[r++]=n:t=new e(n)}return t}var gi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},o$=new gi,Ll=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk=\"\",this.chunkOff=0,this.chunk2=\"\",this.chunk2Pos=0,this.next=-1,this.token=o$,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,r=this.rangeIndex,n=this.pos+e;for(;n<i.from;){if(!r)return null;let s=this.ranges[--r];n-=i.from-s.to,i=s}for(;t<0?n>i.to:n>=i.to;){if(r==this.ranges.length-1)return null;let s=this.ranges[++r];n+=s.from-i.to,i=s}return n}clipPos(e){if(e>=this.range.from&&e<this.range.to)return e;for(let t of this.ranges)if(t.to>e)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,r;if(t>=0&&t<this.chunk.length)i=this.pos+e,r=this.chunk.charCodeAt(t);else{let n=this.resolveOffset(e,1);if(n==null)return-1;if(i=n,i>=this.chunk2Pos&&i<this.chunk2Pos+this.chunk2.length)r=this.chunk2.charCodeAt(i-this.chunk2Pos);else{let s=this.rangeIndex,a=this.range;for(;a.to<=i;)a=this.ranges[++s];this.chunk2=this.input.chunk(this.chunk2Pos=i),i+this.chunk2.length>a.to&&(this.chunk2=this.chunk2.slice(0,a.to-i)),r=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),r}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i<this.token.start)throw new RangeError(\"Token end out of bounds\");this.token.value=e,this.token.end=i}acceptTokenTo(e,t){this.token.value=e,this.token.end=t}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:e,chunkPos:t}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=e,this.chunk2Pos=t,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let e=this.input.chunk(this.pos),t=this.pos+e.length;this.chunk=t>this.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk=\"\",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=o$,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;e>=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e<this.chunkPos+this.chunk.length?this.chunkOff=e-this.chunkPos:(this.chunk=\"\",this.chunkOff=0),this.readNext()}return this}read(e,t){if(e>=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i=\"\";for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(i+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return i}},hO=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;d$(this.data,e,t,this.id,i.data,i.tokenPrecTable)}};hO.prototype.contextual=hO.prototype.fallback=hO.prototype.extend=!1;var kt=class{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e==\"string\"?br(e):e}token(e,t){let i=e.pos,r=0;for(;;){let n=e.next<0,s=e.resolveOffset(1,1);if(d$(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(n||r++,s==null)break;e.reset(s,e.token)}r&&(e.reset(i,e.token),e.acceptToken(this.elseToken,r))}};kt.prototype.contextual=hO.prototype.fallback=hO.prototype.extend=!1;var z=class{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}};function d$(O,e,t,i,r,n){let s=0,a=1<<i,{dialect:o}=t.p.parser;e:for(;(a&O[s])!=0;){let l=O[s+1];for(let u=s+3;u<l;u+=2)if((O[u+1]&a)>0){let Q=O[u];if(o.allows(Q)&&(e.token.value==-1||e.token.value==Q||Y0(Q,e.token.value,r,n))){e.acceptToken(Q);break}}let c=e.next,h=0,f=O[s+2];if(e.next<0&&f>h&&O[l+f*3-3]==65535){s=O[l+f*3-1];continue e}for(;h<f;){let u=h+f>>1,Q=l+u+(u<<1),$=O[Q],p=O[Q+1]||65536;if(c<$)f=u;else if(c>=p)h=u+1;else{s=O[Q+2],e.advance();continue e}}break}}function l$(O,e,t){for(let i=e,r;(r=O[i])!=65535;i++)if(r==t)return i-e;return-1}function Y0(O,e,t,i){let r=l$(t,i,e);return r<0||l$(t,i,O)<r}var He=typeof process<\"u\"&&process.env&&/\\bparse\\b/.test(process.env.LOG),jl=null;function c$(O,e,t){let i=O.cursor(C.IncludeAnonymous);for(i.moveTo(e);;)if(!(t<0?i.childBefore(e):i.childAfter(e)))for(;;){if((t<0?i.to<e:i.from>e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(O.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:O.length}}var Ml=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?c$(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?c$(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(e<this.nextStart)return null;for(;this.fragment&&this.safeTo<=e;)this.nextFragment();if(!this.fragment)return null;for(;;){let t=this.trees.length-1;if(t<0)return this.nextFragment(),null;let i=this.trees[t],r=this.index[t];if(r==i.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let n=i.children[r],s=this.start[t]+i.positions[r];if(s>e)return this.nextStart=s,null;if(n instanceof D){if(s==e){if(s<this.safeFrom)return null;let a=s+n.length;if(a<=this.safeTo){let o=n.prop(R.lookAhead);if(!o||a+o<this.fragment.to)return n}}this.index[t]++,s+n.length>=Math.max(this.safeFrom,e)&&(this.trees.push(n),this.start.push(s),this.index.push(0))}else this.index[t]++,this.nextStart=s+n.length}}},Dl=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new gi)}getActions(e){let t=0,i=null,{parser:r}=e.p,{tokenizers:n}=r,s=r.stateSlot(e.state,3),a=e.curContext?e.curContext.hash:0,o=0;for(let l=0;l<n.length;l++){if((1<<l&s)==0)continue;let c=n[l],h=this.tokens[l];if(!(i&&!c.fallback)&&((c.contextual||h.start!=e.pos||h.mask!=s||h.context!=a)&&(this.updateCachedToken(h,c,e),h.mask=s,h.context=a),h.lookAhead>h.end+25&&(o=Math.max(h.lookAhead,o)),h.value!=0)){let f=t;if(h.extended>-1&&(t=this.addActions(e,h.extended,h.end,t)),t=this.addActions(e,h.value,h.end,t),!c.extend&&(i=h,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return o&&e.setLookAhead(o),!i&&e.pos==this.stream.end&&(i=new gi,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new gi,{pos:i,p:r}=e;return t.start=i,t.end=Math.min(i+1,r.stream.end),t.value=i==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,i){let r=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(r,e),i),e.value>-1){let{parser:n}=i.p;for(let s=0;s<n.specialized.length;s++)if(n.specialized[s]==e.value){let a=n.specializers[s](this.stream.read(e.start,e.end),i);if(a>=0&&i.p.parser.dialect.allows(a>>1)){(a&1)==0?e.value=a>>1:e.extended=a>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,i,r){for(let n=0;n<r;n+=3)if(this.actions[n]==e)return r;return this.actions[r++]=e,this.actions[r++]=t,this.actions[r++]=i,r}addActions(e,t,i,r){let{state:n}=e,{parser:s}=e.p,{data:a}=s;for(let o=0;o<2;o++)for(let l=s.stateSlot(n,o?2:1);;l+=3){if(a[l]==65535)if(a[l+1]==1)l=Ut(a,l+2);else{r==0&&a[l+1]==2&&(r=this.putAction(Ut(a,l+2),t,i,r));break}a[l]==t&&(r=this.putAction(Ut(a,l+1),t,i,r))}return r}},Il=class{constructor(e,t,i,r){this.parser=e,this.input=t,this.ranges=r,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new Ll(t,r),this.tokens=new Dl(e,this.stream),this.topTerm=e.top[1];let{from:n}=r[0];this.stacks=[Gl.start(this,e.top[0],n)],this.fragments=i.length&&this.stream.end-n>e.bufferLength*4?new Ml(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],r,n;if(this.bigReductionCount>300&&e.length==1){let[s]=e;for(;s.forceReduce()&&s.stack.length&&s.stack[s.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let s=0;s<e.length;s++){let a=e[s];for(;;){if(this.tokens.mainToken=null,a.pos>t)i.push(a);else{if(this.advanceStack(a,i,e))continue;{r||(r=[],n=[]),r.push(a);let o=this.tokens.getMainToken(a);n.push(o.value,o.end)}}break}}if(!i.length){let s=r&&_0(r);if(s)return He&&console.log(\"Finish with \"+this.stackID(s)),this.stackToTree(s);if(this.parser.strict)throw He&&r&&console.log(\"Stuck with token \"+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):\"none\")),new SyntaxError(\"No parse at \"+t);this.recovering||(this.recovering=5)}if(this.recovering&&r){let s=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,n,i);if(s)return He&&console.log(\"Force-finish \"+this.stackID(s)),this.stackToTree(s.forceAll())}if(this.recovering){let s=this.recovering==1?1:this.recovering*3;if(i.length>s)for(i.sort((a,o)=>o.score-a.score);i.length>s;)i.pop();i.some(a=>a.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let s=0;s<i.length-1;s++){let a=i[s];for(let o=s+1;o<i.length;o++){let l=i[o];if(a.sameState(l)||a.buffer.length>500&&l.buffer.length>500)if((a.score-l.score||a.buffer.length-l.buffer.length)>0)i.splice(o--,1);else{i.splice(s--,1);continue e}}}i.length>12&&(i.sort((s,a)=>a.score-s.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let s=1;s<i.length;s++)i[s].pos<this.minStackPos&&(this.minStackPos=i[s].pos);return null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw new RangeError(\"Can't move stoppedAt forward\");this.stoppedAt=e}advanceStack(e,t,i){let r=e.pos,{parser:n}=this,s=He?this.stackID(e)+\" -> \":\"\";if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let l=e.curContext&&e.curContext.tracker.strict,c=l?e.curContext.hash:0;for(let h=this.fragments.nodeAt(r);h;){let f=this.parser.nodeSet.types[h.type.id]==h.type?n.getGoto(e.state,h.type.id):-1;if(f>-1&&h.length&&(!l||(h.prop(R.contextHash)||0)==c))return e.useNode(h,f),He&&console.log(s+this.stackID(e)+` (via reuse of ${n.getName(h.type.id)})`),!0;if(!(h instanceof D)||h.children.length==0||h.positions[0]>0)break;let u=h.children[0];if(u instanceof D&&h.positions[0]==0)h=u;else break}}let a=n.stateSlot(e.state,4);if(a>0)return e.reduce(a),He&&console.log(s+this.stackID(e)+` (via always-reduce ${n.getName(a&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let o=this.tokens.getActions(e);for(let l=0;l<o.length;){let c=o[l++],h=o[l++],f=o[l++],u=l==o.length||!i,Q=u?e:e.split(),$=this.tokens.mainToken;if(Q.apply(c,h,$?$.start:Q.pos,f),He&&console.log(s+this.stackID(Q)+` (via ${(c&65536)==0?\"shift\":`reduce of ${n.getName(c&65535)}`} for ${n.getName(h)} @ ${r}${Q==e?\"\":\", split\"})`),u)return!0;Q.pos>r?t.push(Q):i.push(Q)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return h$(e,t),!0}}runRecovery(e,t,i){let r=null,n=!1;for(let s=0;s<e.length;s++){let a=e[s],o=t[s<<1],l=t[(s<<1)+1],c=He?this.stackID(a)+\" -> \":\"\";if(a.deadEnd&&(n||(n=!0,a.restart(),He&&console.log(c+this.stackID(a)+\" (restarted)\"),this.advanceFully(a,i))))continue;let h=a.split(),f=c;for(let u=0;u<10&&h.forceReduce()&&(He&&console.log(f+this.stackID(h)+\" (via force-reduce)\"),!this.advanceFully(h,i));u++)He&&(f=this.stackID(h)+\" -> \");for(let u of a.recoverByInsert(o))He&&console.log(c+this.stackID(u)+\" (via recover-insert)\"),this.advanceFully(u,i);this.stream.end>a.pos?(l==a.pos&&(l++,o=0),a.recoverByDelete(o,l),He&&console.log(c+this.stackID(a)+` (via recover-delete ${this.parser.getName(o)})`),h$(a,i)):(!r||r.score<a.score)&&(r=a)}return r}stackToTree(e){return e.close(),D.build({buffer:Al.create(e),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:e.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(e){let t=(jl||(jl=new WeakMap)).get(e);return t||jl.set(e,t=String.fromCodePoint(this.nextStackID++)),t+e}};function h$(O,e){for(let t=0;t<e.length;t++){let i=e[t];if(i.pos==O.pos&&i.sameState(O)){e[t].score<O.score&&(e[t]=O);return}}e.push(O)}var Bl=class{constructor(e,t,i){this.source=e,this.flags=t,this.disabled=i}allows(e){return!this.disabled||this.disabled[e]==0}},Cl=O=>O,Ge=class{constructor(e){this.start=e.start,this.shift=e.shift||Cl,this.reduce=e.reduce||Cl,this.reuse=e.reuse||Cl,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}},Oe=class O extends eO{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(\" \");this.minRepeatTerm=t.length;for(let a=0;a<e.repeatNodeCount;a++)t.push(\"\");let i=Object.keys(e.topRules).map(a=>e.topRules[a][1]),r=[];for(let a=0;a<t.length;a++)r.push([]);function n(a,o,l){r[a].push([o,o.deserialize(String(l))])}if(e.nodeProps)for(let a of e.nodeProps){let o=a[0];typeof o==\"string\"&&(o=R[o]);for(let l=1;l<a.length;){let c=a[l++];if(c>=0)n(c,o,a[l++]);else{let h=a[l+-c];for(let f=-c;f>0;f--)n(a[l++],o,h);l++}}}this.nodeSet=new Kt(t.map((a,o)=>ue.define({name:o>=this.minRepeatTerm?void 0:a,id:o,props:r[o],top:i.indexOf(o)>-1,error:o==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(o)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let s=br(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let a=0;a<this.specializerSpecs.length;a++)this.specialized[a]=this.specializerSpecs[a].term;this.specializers=this.specializerSpecs.map(f$),this.states=br(e.states,Uint32Array),this.data=br(e.stateData),this.goto=br(e.goto),this.maxTerm=e.maxTerm,this.tokenizers=e.tokenizers.map(a=>typeof a==\"number\"?new hO(s,a):a),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let r=new Il(this,e,t,i);for(let n of this.wrappers)r=n(r,e,t,i);return r}getGoto(e,t,i=!1){let r=this.goto;if(t>=r[0])return-1;for(let n=r[t+1];;){let s=r[n++],a=s&1,o=r[n++];if(a&&i)return o;for(let l=n+(s>>1);n<l;n++)if(r[n]==e)return o;if(a)return-1}}hasAction(e,t){let i=this.data;for(let r=0;r<2;r++)for(let n=this.stateSlot(e,r?2:1),s;;n+=3){if((s=i[n])==65535)if(i[n+1]==1)s=i[n=Ut(i,n+2)];else{if(i[n+1]==2)return Ut(i,n+2);break}if(s==t||s==0)return Ut(i,n+1)}return 0}stateSlot(e,t){return this.states[e*6+t]}stateFlag(e,t){return(this.stateSlot(e,0)&t)>0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),r=i?t(i):void 0;for(let n=this.stateSlot(e,1);r==null;n+=3){if(this.data[n]==65535)if(this.data[n+1]==1)n=Ut(this.data,n+2);else break;r=t(Ut(this.data,n+1))}return r}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ut(this.data,i+2);else break;if((this.data[i+2]&1)==0){let r=this.data[i+1];t.some((n,s)=>s&1&&n==r)||t.push(this.data[i],r)}}return t}configure(e){let t=Object.assign(Object.create(O.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let r=e.tokenizers.find(n=>n.from==i);return r?r.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,r)=>{let n=e.specializers.find(a=>a.from==i.external);if(!n)return i;let s=Object.assign(Object.assign({},i),{external:n.to});return t.specializers[r]=f$(s),s})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let n of e.split(\" \")){let s=t.indexOf(n);s>=0&&(i[s]=!0)}let r=null;for(let n=0;n<t.length;n++)if(!i[n])for(let s=this.dialects[t[n]],a;(a=this.data[s++])!=65535;)(r||(r=new Uint8Array(this.maxTerm+1)))[a]=1;return new Bl(e,i,r)}static deserialize(e){return new O(e)}};function Ut(O,e){return O[e]|O[e+1]<<16}function _0(O){let e=null;for(let t of O){let i=t.p.stoppedAt;(t.pos==t.p.stream.end||i!=null&&t.pos>i)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.score<t.score)&&(e=t)}return e}function f$(O){if(O.external){let e=O.extend?1:0;return(t,i)=>O.external(t,i)<<1|e}return O.get}var u$=1,R0=2,V0=3,q0=82,z0=76,U0=117,W0=85,j0=97,C0=122,G0=65,E0=90,A0=95,Nl=48,Q$=34,L0=40,$$=41,M0=32,p$=62,D0=new z(O=>{if(O.next==z0||O.next==W0?O.advance():O.next==U0&&(O.advance(),O.next==Nl+8&&O.advance()),O.next!=q0||(O.advance(),O.next!=Q$))return;O.advance();let e=\"\";for(;O.next!=L0;){if(O.next==M0||O.next<=13||O.next==$$)return;e+=String.fromCharCode(O.next),O.advance()}for(O.advance();;){if(O.next<0)return O.acceptToken(u$);if(O.next==$$){let t=!0;for(let i=0;t&&i<e.length;i++)O.peek(i+1)!=e.charCodeAt(i)&&(t=!1);if(t&&O.peek(e.length+1)==Q$)return O.acceptToken(u$,2+e.length)}O.advance()}}),I0=new z(O=>{if(O.next==p$)O.peek(1)==p$&&O.acceptToken(R0,1);else{let e=!1,t=0;for(;;t++){if(O.next>=G0&&O.next<=E0)e=!0;else{if(O.next>=j0&&O.next<=C0)return;if(O.next!=A0&&!(O.next>=Nl&&O.next<=Nl+9))break}O.advance()}e&&t>1&&O.acceptToken(V0)}},{extend:!0}),B0=F({\"typedef struct union enum class typename decltype auto template operator friend noexcept namespace using requires concept import export module __attribute__ __declspec __based\":d.definitionKeyword,\"extern MsCallModifier MsPointerModifier extern static register thread_local inline const volatile restrict _Atomic mutable constexpr constinit consteval virtual explicit VirtualSpecifier Access\":d.modifier,\"if else switch for while do case default return break continue goto throw try catch\":d.controlKeyword,\"co_return co_yield co_await\":d.controlKeyword,\"new sizeof delete static_assert\":d.operatorKeyword,\"NULL nullptr\":d.null,this:d.self,\"True False\":d.bool,\"TypeSize PrimitiveType\":d.standard(d.typeName),TypeIdentifier:d.typeName,FieldIdentifier:d.propertyName,\"CallExpression/FieldExpression/FieldIdentifier\":d.function(d.propertyName),\"ModuleName/Identifier\":d.namespace,PartitionName:d.labelName,StatementIdentifier:d.labelName,\"Identifier DestructorName\":d.variableName,\"CallExpression/Identifier\":d.function(d.variableName),\"CallExpression/ScopedIdentifier/Identifier\":d.function(d.variableName),\"FunctionDeclarator/Identifier FunctionDeclarator/DestructorName\":d.function(d.definition(d.variableName)),NamespaceIdentifier:d.namespace,OperatorName:d.operator,ArithOp:d.arithmeticOperator,LogicOp:d.logicOperator,BitOp:d.bitwiseOperator,CompareOp:d.compareOperator,AssignOp:d.definitionOperator,UpdateOp:d.updateOperator,LineComment:d.lineComment,BlockComment:d.blockComment,Number:d.number,String:d.string,\"RawString SystemLibString\":d.special(d.string),CharLiteral:d.character,EscapeSequence:d.escape,\"UserDefinedLiteral/Identifier\":d.literal,PreProcArg:d.meta,\"PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif\":d.processingInstruction,MacroName:d.special(d.name),\"( )\":d.paren,\"[ ]\":d.squareBracket,\"{ }\":d.brace,\"< >\":d.angleBracket,\". ->\":d.derefOperator,\", ;\":d.separator}),N0={__proto__:null,bool:36,char:36,int:36,float:36,double:36,void:36,size_t:36,ssize_t:36,intptr_t:36,uintptr_t:36,charptr_t:36,int8_t:36,int16_t:36,int32_t:36,int64_t:36,uint8_t:36,uint16_t:36,uint32_t:36,uint64_t:36,char8_t:36,char16_t:36,char32_t:36,char64_t:36,const:70,volatile:72,restrict:74,_Atomic:76,mutable:78,constexpr:80,constinit:82,consteval:84,struct:88,__declspec:92,final:148,override:148,public:152,private:152,protected:152,virtual:154,extern:160,static:162,register:164,inline:166,thread_local:168,__attribute__:172,__based:178,__restrict:180,__uptr:180,__sptr:180,_unaligned:180,__unaligned:180,noexcept:194,requires:198,TRUE:786,true:786,FALSE:788,false:788,typename:218,class:220,template:234,throw:248,__cdecl:256,__clrcall:256,__stdcall:256,__fastcall:256,__thiscall:256,__vectorcall:256,try:260,catch:264,export:282,import:286,case:296,default:298,if:308,else:314,switch:318,do:322,while:324,for:330,return:334,break:338,continue:342,goto:346,co_return:350,co_yield:354,using:362,typedef:366,namespace:380,new:398,delete:400,co_await:402,concept:406,enum:410,static_assert:414,friend:422,union:424,explicit:430,operator:444,module:456,signed:518,unsigned:518,long:518,short:518,decltype:528,auto:530,sizeof:566,NULL:572,nullptr:586,this:588},F0={__proto__:null,\"<\":755},H0={__proto__:null,\">\":135},K0={__proto__:null,operator:388,new:576,delete:582},m$=Oe.deserialize({version:14,states:\"$;SQ!QQVOOP'gOUOOO(XOWO'#CdO,RQUO'#CgO,]QUO'#FjO-sQbO'#CxO.UQUO'#CxO0TQUO'#KZO0[QUO'#CwO0gOpO'#DvO0oQ!dO'#D]OOQR'#JO'#JOO5XQVO'#GUO5fQUO'#JVOOQQ'#JV'#JVO8zQUO'#KnO<eQUO'#KnO>{QVO'#E^O?]QUO'#E^OOQQ'#Ed'#EdOOQQ'#Ee'#EeO?bQVO'#EfO@XQVO'#EiOBUQUO'#FPOBvQUO'#FhOOQR'#Fj'#FjOB{QUO'#FjOOQR'#LR'#LROOQR'#LQ'#LQOETQVO'#KQOFxQUO'#LWOGVQUO'#KrOGkQUO'#LWOH]QUO'#LYOOQR'#HU'#HUOOQR'#HV'#HVOOQR'#HW'#HWOOQR'#K}'#K}OOQR'#J_'#J_Q!QQVOOOHkQVO'#FOOIWQUO'#EhOI_QUOOOKZQVO'#HgOKkQUO'#HgONVQUO'#KrONaQUO'#KrOOQQ'#Kr'#KrO!!_QUO'#KrOOQQ'#Jq'#JqO!!lQUO'#HxOOQQ'#KZ'#KZO!&^QUO'#KZO!&zQUO'#KQO!(zQVO'#I]O!(zQVO'#I`OCQQUO'#KQOOQQ'#Ip'#IpOOQQ'#KQ'#KQO!,}QUO'#KZOOQR'#KY'#KYO!-UQUO'#DZO!/mQUO'#KoOOQQ'#Ko'#KoO!/tQUO'#KoO!/{QUO'#ETO!0QQUO'#EWO!0VQUO'#FRO8zQUO'#FPO!QQVO'#F^O!0[Q#vO'#F`O!0gQUO'#FkO!0oQUO'#FpO!0tQVO'#FrO!0oQUO'#FuO!3sQUO'#FvO!3xQVO'#FxO!4SQUO'#FzO!4XQUO'#F|O!4^QUO'#GOO!4cQVO'#GQO!(zQVO'#GSO!4jQUO'#GpO!4xQUO'#GYO!(zQVO'#FeO!6VQUO'#FeO!6[QVO'#G`O!6cQUO'#GaO!6nQUO'#GnO!6sQUO'#GrO!6xQUO'#GzO!7jQ&lO'#HiO!:mQUO'#GuO!:}QUO'#HXO!;YQUO'#HZO!;bQUO'#DXO!;bQUO'#HuO!;bQUO'#HvO!;yQUO'#HwO!<[QUO'#H|O!=PQUO'#H}O!>uQVO'#IbO!(zQVO'#IdO!?PQUO'#IgO!?WQVO'#IjP!@}{,UO'#CbP!6n{,UO'#CbP!AY{7[O'#CbP!6n{,UO'#CbP!A_{,UO'#CbP!AjOSO'#IzPOOO)CEn)CEnOOOO'#I|'#I|O!AtOWO,59OOOQR,59O,59OO!(zQVO,59VOOQQ,59X,59XOOQR'#Do'#DoO!(zQVO,5;ROOQR,5<U,5<UO!BPQUO,59ZO!(zQVO,5>qOOQR'#IX'#IXOOQR'#IY'#IYOOQR'#IZ'#IZOOQR'#I['#I[O!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!(zQVO,5>rO!DOQVO,5>zOOQQ,5?W,5?WO!EqQVO'#CjO!IjQUO'#CzOOQQ,59d,59dOOQQ,59c,59cOOQQ,5<},5<}O!IwQ&lO,5=mO!?PQUO,5?RO!LkQVO,5?UO!LrQbO,59dO!L}QVO'#FYOOQQ,5?P,5?PO!M_QVO,59WO!MfO`O,5:bO!MkQbO'#D^O!M|QbO'#K_O!N[QbO,59wO!NdQbO'#CxO!NuQUO'#CxO!NzQUO'#KZO# UQUO'#CwOOQR-E<|-E<|O# aQUO,5ApO# hQVO'#EfO@XQVO'#EiOBUQUO,5;kOOQR,5<p,5<pO#$aQUO'#KQO#$hQUO'#KQO!(zQVO'#IUO8zQUO,5;kO#${Q&lO'#HiO#(SQUO'#CtO#*wQbO'#CxO#*|QUO'#CwO#.jQUO'#KZOOQQ-E=T-E=TO#0}QUO,5AYO#1XQUO'#KZO#1cQUO,5AYOOQR,5Ap,5ApOOQQ,5>l,5>lO#3gQUO'#CgO#4]QUO,5>pO#6OQUO'#IeOOQR'#I}'#I}O#6WQUO,5:xO#6tQUO,5:xO#7eQUO,5:xO#8YQUO'#CuO!0QQUO'#CmOOQQ'#JW'#JWO#6tQUO,5:xO#8bQUO,5;QO!4xQUO'#DOO#9kQUO,5;QO#9pQUO,5>QO#:|QUO'#DOO#;dQUO,5>{O#;iQUO'#KxO#<rQUO,5;TO#<zQVO,5;TO#=UQUO,5;TOOQQ,5;T,5;TO#>}QUO'#L]O#?UQUO,5>UO#?ZQbO'#CxO#?fQUO'#GcO#?kQUO'#E^O#@[QUO,5;kO#@sQUO'#LOO#@{QUO,5;rOKkQUO'#HfOBUQUO'#HgO#AQQUO'#KrO!6nQUO'#HjO#AxQUO'#CuO!0tQVO,5<SOOQQ'#Cg'#CgOOQR'#Jh'#JhO#A}QVO,5=`OOQQ,5?Z,5?ZO#DWQbO'#CxO#DcQUO'#GcOOQQ'#Ji'#JiOOQQ-E=g-E=gOGVQUO,5ArOGkQUO,5ArO#DhQUO,5AtO#DsQUO'#G|OOQR,5Ar,5ArO#DhQUO,5ArO#EOQUO'#HOO#EWQUO,5AtOOQR,5At,5AtOOQR,5Au,5AuO#EfQVO,5AuOOQR-E=]-E=]O#G`QVO,5;jOOQR,5;j,5;jO#IaQUO'#EjO#JfQUO'#EwO#K]QVO'#ExO#MoQUO'#EvO#MwQUO'#EyO#NvQUO'#EzOOQQ'#K{'#K{O$ mQUO,5;SO$!sQUO'#EvOOQQ,5;S,5;SO$#pQUO,5;SO$%cQUO,5:yO$'|QVO,5>PO$(WQUO'#E[O$(eQUO,5>ROOQQ,5>S,5>SO$,RQVO'#C|OOQQ-E=o-E=oOOQQ,5>d,5>dOOQQ,59a,59aO$,]QUO,5>wO$.]QUO,5>zO!6nQUO,59uO$.pQUO,5;qO$.}QUO,5<{O!0QQUO,5:oOOQQ,5:r,5:rO$/YQUO,5;mO$/_QUO'#KnOBUQUO,5;kOOQR,5;x,5;xO$0OQUO'#FbO$0^QUO'#FbO$0cQUO,5;zO$3|QVO'#FmO!0tQVO,5<VO!0oQUO,5<VO!0VQUO,5<[O$4TQVO'#GUO$7PQUO,5<^O!0tQVO,5<aO$:gQVO,5<bO$:tQUO,5<dOOQR,5<d,5<dO$;}QUO,5<dOOQR,5<f,5<fOOQR,5<h,5<hOOQQ'#Fi'#FiO$<SQUO,5<jO$<XQUO,5<lOOQR,5<l,5<lO$=_QUO,5<nO$>eQUO,5<rO$>pQUO,5=[O$>uQUO,5=[O!4xQUO,5<tO$>}QUO,5<tO$?cQUO,5<PO$@iQVO,5<PO$BzQUO,5<zOOQR,5<z,5<zOOQR,5<{,5<{O$>uQUO,5<{O$DQQUO,5<{O$D]QUO,5=YO!(zQVO,5=^O!(zQVO,5=fO#NeQUO,5=mOOQQ,5>T,5>TO$FbQUO,5>TO$FlQUO,5>TO$FqQUO,5>TO$FvQUO,5>TO!6nQUO,5>TO$HtQUO'#KZO$H{QUO,5=oO$IWQUO,5=aOKkQUO,5=oO$JQQUO,5=sOOQR,5=s,5=sO$JYQUO,5=sO$LeQVO'#H[OOQQ,5=u,5=uO!;]QUO,5=uO%#`QUO'#KkO%#gQUO'#K[O%#{QUO'#KkO%$VQUO'#DyO%$hQUO'#D|O%'eQUO'#K[OOQQ'#K['#K[O%)WQUO'#K[O%#gQUO'#K[O%)]QUO'#K[OOQQ,59s,59sOOQQ,5>a,5>aOOQQ,5>b,5>bO%)eQUO'#HzO%)mQUO,5>cOOQQ,5>c,5>cO%-XQUO,5>cO%-dQUO,5>hO%1OQVO,5>iO%1VQUO,5>|O# hQVO'#EfO%4]QUO,5>|OOQQ,5>|,5>|O%4|QUO,5?OO%7QQUO,5?RO!<[QUO,5?RO%8|QUO,5?UO%<iQVO,5?UP!A_{,UO,58|P%<p{,UO,58|P%=O{7[O,58|P%=U{,UO,58|PO{O'#Ju'#JuP%=Z{,UO'#LdPOOO'#Ld'#LdP%=a{,UO'#LdPOOO,58|,58|POOO,5?f,5?fP%=fOSO,5?fOOOO-E<z-E<zOOQR1G.j1G.jO%=mQUO1G.qO%>sQUO1G0mOOQQ1G0m1G0mO%@PQUO'#CpO%B`QbO'#CxO%BkQUO'#CsO%BpQUO'#CsO%BuQUO1G.uO#AxQUO'#CrOOQQ1G.u1G.uO%DxQUO1G4]O%FOQUO1G4^O%GqQUO1G4^O%IdQUO1G4^O%KVQUO1G4^O%LxQUO1G4^O%NkQUO1G4^O&!^QUO1G4^O&$PQUO1G4^O&%rQUO1G4^O&'eQUO1G4^O&)WQUO1G4^O&*yQUO'#KPO&,SQUO'#KPO&,[QUO,59UOOQQ,5=P,5=PO&.dQUO,5=PO&.nQUO,5=PO&.sQUO,5=PO&.xQUO,5=PO!6nQUO,5=PO#NeQUO1G3XO&/SQUO1G4mO!<[QUO1G4mO&1OQUO1G4pO&2qQVO1G4pOOQQ1G/O1G/OOOQQ1G.}1G.}OOQQ1G2i1G2iO!IwQ&lO1G3XO&2xQUO'#LPO@XQVO'#EiO&4RQUO'#F]OOQQ'#Ja'#JaO&4WQUO'#FZO&4cQUO'#LPO&4kQUO,5;tO&4pQUO1G.rOOQQ1G.r1G.rOOQR1G/|1G/|O&6cQ!dO'#JPO&6hQbO,59xO&8yQ!eO'#D`O&9QQ!dO'#JRO&9VQbO,5@yO&9VQbO,5@yOOQR1G/c1G/cO&9bQbO1G/cO&9gQ&lO'#GeO&:eQbO,59dOOQR1G7[1G7[O#@[QUO1G1VO&:pQUO1G1^OBUQUO1G1VO&=RQUO'#CzO#*wQbO,59dO&@tQUO1G6tOOQR-E<{-E<{O&BWQUO1G0dO#6WQUO1G0dOOQQ-E=U-E=UO#6tQUO1G0dOOQQ1G0l1G0lO&B{QUO,59jOOQQ1G3l1G3lO&CcQUO,59jO&CyQUO,59jO!M_QVO1G4gO!(zQVO'#JYO&DeQUO,5AdOOQQ1G0o1G0oO!(zQVO1G0oO!6nQUO'#JnO&DmQUO,5AwOOQQ1G3p1G3pOOQR1G1V1G1VO&HjQVO'#FOO!M_QVO,5;sOOQQ,5;s,5;sOBUQUO'#JcO&JfQUO,5AjO&JnQVO'#E[OOQR1G1^1G1^O&M]QUO'#L]OOQR1G1n1G1nOOQR-E=f-E=fOOQR1G7^1G7^O#DhQUO1G7^OGVQUO1G7^O#DhQUO1G7`OOQR1G7`1G7`O&MeQUO'#G}O&MmQUO'#LXOOQQ,5=h,5=hO&M{QUO,5=jO&NQQUO,5=kOOQR1G7a1G7aO#EfQVO1G7aO&NVQUO1G7aO' ]QVO,5=kOOQR1G1U1G1UO$.vQUO'#E]O'!RQUO'#E]OOQQ'#Kz'#KzO'!lQUO'#KyO'!wQUO,5;UO'#PQUO'#ElO'#dQUO'#ElO'#wQUO'#EtOOQQ'#J['#J[O'#|QUO,5;cO'$sQUO,5;cO'%nQUO,5;dO'&tQVO,5;dOOQQ,5;d,5;dO''OQVO,5;dO'&tQVO,5;dO''VQUO,5;bO'(SQUO,5;eO'(_QUO'#KqO'(gQUO,5:vO'(lQUO,5;fOOQQ1G0n1G0nOOQQ'#J]'#J]O''VQUO,5;bO!4xQUO'#E}OOQQ,5;b,5;bO')gQUO'#E`O'+aQUO'#E{OHrQUO1G0nO'+fQUO'#EbOOQQ'#JX'#JXO'-OQUO'#KsOOQQ'#Ks'#KsO'-xQUO1G0eO'.pQUO1G3kO'/vQVO1G3kOOQQ1G3k1G3kO'0QQVO1G3kO'0XQUO'#L`O'1eQUO'#KXO'1sQUO'#KWO'2OQUO,59hO'2WQUO1G/aO'2]QUO'#FPOOQR1G1]1G1]OOQR1G2g1G2gO$>uQUO1G2gO'2gQUO1G2gO'2rQUO1G0ZOOQR'#J`'#J`O'2wQVO1G1XO'8pQUO'#FTO'8uQUO1G1VO!6nQUO'#JdO'9TQUO,5;|O$0^QUO,5;|OOQQ'#Fc'#FcOOQQ,5;|,5;|O'9cQUO1G1fOOQR1G1f1G1fO'9kQUO,5<XO$.vQUO'#FWOBUQUO'#FWO'9rQUO,5<XO!(zQVO,5<XO'9zQUO,5<XO':PQVO1G1qO!0tQVO1G1qOOQR1G1v1G1vO'?oQUO1G1xOOQR1G1{1G1{O'?tQUO1G1|OBUQUO1G2]O'@}QVO1G1|O'CcQUO1G1|O'ChQUO'#GWO8zQUO1G2]OOQR1G2O1G2OOOQR1G2U1G2UOOQR1G2W1G2WOOQR1G2Y1G2YO'CmQUO1G2^O!4xQUO1G2^OOQR1G2v1G2vO'CuQUO1G2vO$>}QUO1G2`OOQQ'#Cv'#CvO'CzQUO'#G[O'DuQUO'#G[O'DzQUO'#LSO'EYQUO'#G_OOQQ'#LT'#LTO'EhQUO1G2`O'EmQVO1G1kO'HOQVO'#GUOBUQUO'#FWOOQR'#Je'#JeO'EmQVO1G1kO'HYQUO'#FvOOQR1G2f1G2fO'H_QUO1G2gO'HdQUO'#JgO'2gQUO1G2gO!(zQVO1G2tO'HlQUO1G2xO'IuQUO1G3QO'J{QUO1G3XOOQQ1G3o1G3oO'KaQUO1G3oOOQR1G3Z1G3ZO'KfQUO'#KZO'2]QUO'#LUOGkQUO'#LWOOQR'#Gy'#GyO#DhQUO'#LYOOQR'#HQ'#HQO'KpQUO'#GvO'#wQUO'#GuOOQR1G2{1G2{O'LmQUO1G2{O'MdQUO1G3ZO'MoQUO1G3_O'MtQUO1G3_OOQR1G3_1G3_O'M|QUO'#H]OOQR'#H]'#H]O( VQUO'#H]O!(zQVO'#H`O!(zQVO'#H_OOQR'#L['#L[O( [QUO'#L[OOQR'#Jk'#JkO( aQVO,5=vOOQQ,5=v,5=vO( hQUO'#H^O( pQUO'#HZOOQQ1G3a1G3aO( zQUO,5@vOOQQ,5@v,5@vO%)WQUO,5@vO%)]QUO,5@vO%$VQUO,5:eO(%iQUO'#KlO(%wQUO'#KlOOQQ,5:e,5:eOOQQ'#JS'#JSO(&SQUO'#D}O(&^QUO'#KrOGkQUO'#LWO('YQUO'#D}OOQQ'#Hp'#HpOOQQ'#Hr'#HrOOQQ'#Hs'#HsOOQQ'#Km'#KmOOQQ'#JU'#JUO('dQUO,5:hOOQQ,5:h,5:hO((aQUO'#LWO((nQUO'#HtO()UQUO,5@vO()]QUO'#H{O()hQUO'#L_O()pQUO,5>fO()uQUO'#L^OOQQ1G3}1G3}O(-lQUO1G3}O(-sQUO1G3}O(-zQUO1G4TO(/QQUO1G4TO(/VQUO,5A}O!6nQUO1G4hO!(zQVO'#IiOOQQ1G4m1G4mO(/[QUO1G4mO(1_QVO1G4pPOOO1G.h1G.hP!A_{,UO1G.hP(3_QUO'#LfP(3j{,UO1G.hP(3o{7[O1G.hPO{O-E=s-E=sPOOO,5BO,5BOP(3w{,UO,5BOPOOO1G5Q1G5QO!(zQVO7+$]O(3|QUO'#CzOOQQ,59_,59_O(4XQbO,59dO(4dQbO,59_OOQQ,59^,59^OOQQ7+)w7+)wO!M_QVO'#JtO(4oQUO,5@kOOQQ1G.p1G.pOOQQ1G2k1G2kO(4wQUO1G2kO(4|QUO7+(sOOQQ7+*X7+*XO(7bQUO7+*XO(7iQUO7+*XO(1_QVO7+*[O#NeQUO7+(sO(7vQVO'#JbO(8ZQUO,5AkO(8cQUO,5;vOOQQ'#Cp'#CpOOQQ,5;w,5;wO!(zQVO'#F[OOQQ-E=_-E=_O!M_QVO,5;uOOQQ1G1`1G1`OOQQ,5?k,5?kOOQQ-E<}-E<}OOQR'#Dg'#DgOOQR'#Di'#DiOOQR'#Dl'#DlO(9lQ!eO'#K`O(9sQMkO'#K`O(9zQ!eO'#K`OOQR'#K`'#K`OOQR'#JQ'#JQO(:RQ!eO,59zOOQQ,59z,59zO(:YQbO,5?mOOQQ-E=P-E=PO(:hQbO1G6eOOQR7+$}7+$}OOQR7+&q7+&qOOQR7+&x7+&xO'8uQUO7+&qO(:sQUO7+&OO#6WQUO7+&OO(;hQUO1G/UO(<OQUO1G/UO(<jQUO7+*ROOQQ7+*V7+*VO(>]QUO,5?tOOQQ-E=W-E=WO(?fQUO7+&ZOOQQ,5@Y,5@YOOQQ-E=l-E=lO(?kQUO'#LPO@XQVO'#EiO(@wQUO1G1_OOQQ1G1_1G1_O(BQQUO,5?}OOQQ,5?},5?}OOQQ-E=a-E=aO(BfQUO'#KqOOQR7+,x7+,xO#DhQUO7+,xOOQR7+,z7+,zO(BsQUO,5=iO#DsQUO'#JjO(CUQUO,5AsOOQR1G3U1G3UOOQR1G3V1G3VO(CdQUO7+,{OOQR7+,{7+,{O(E[QUO,5:wO(FyQUO'#EwO!(zQVO,5;VO(GlQUO,5:wO(GvQUO'#EpO(HXQUO'#EzOOQQ,5;Z,5;ZO#K]QVO'#ExO(HoQUO,5:wO(HvQUO'#EyO#GgQUO'#JZO(J`QUO,5AeOOQQ1G0p1G0pO(JkQUO,5;WO!<[QUO,5;^O(KUQUO,5;_O(KdQUO,5;WO(MvQUO,5;`OOQQ-E=Y-E=YO(NOQUO1G0}OOQQ1G1O1G1OO(NyQUO1G1OO)!PQVO1G1OO)!WQVO1G1OO)!bQUO1G0|OOQQ1G0|1G0|OOQQ1G1P1G1PO)#_QUO'#JoO)#iQUO,5A]OOQQ1G0b1G0bOOQQ-E=Z-E=ZO)#qQUO,5;iO!<[QUO,5;iO)$nQVO,5:zO)$uQUO,5;gO$ mQUO7+&YOOQQ7+&Y7+&YO!(zQVO'#EfO)$|QUO,5:|OOQQ'#Kt'#KtOOQQ-E=V-E=VOOQQ,5A_,5A_OOQQ'#Jl'#JlO)(qQUO7+&PPOQQ7+&P7+&POOQQ7+)V7+)VO))iQUO7+)VO)*oQVO7+)VOOQQ,5>m,5>mO$)YQVO'#JsO)*vQUO,5@rOOQQ1G/S1G/SOOQQ7+${7+${O)+RQUO7+(RO)+WQUO7+(ROOQR7+(R7+(RO$>uQUO7+(ROOQQ7+%u7+%uOOQR-E=^-E=^O!0VQUO,5;oOOQQ,5@O,5@OOOQQ-E=b-E=bO$0^QUO1G1hOOQQ1G1h1G1hOOQR7+'Q7+'QOOQR1G1s1G1sOBUQUO,5;rO)+tQUO,5<YO)+{QUO1G1sO)-UQUO1G1sO!0tQVO7+']O)-ZQVO7+']O)2yQUO7+'dO)3OQVO7+'hO)5dQUO7+'wO)5nQUO7+'hO)6tQVO7+'hOKkQUO7+'wO$>hQUO,5<rO!4xQUO7+'xO)6{QUO7+'xOOQR7+(b7+(bO)7QQUO7+'zO)7VQUO,5<vO'CzQUO,5<vO)7}QUO,5<vO'CzQUO,5<vOOQQ,5<w,5<wO)8`QVO,5<xO'EYQUO'#JfO)8jQUO,5AnO)8rQUO,5<yOOQR7+'z7+'zO)8}QVO7+'VO)5gQUO'#LOOOQR-E=c-E=cO);`QVO,5<bOOQQ,5@R,5@RO!6nQUO,5@ROOQQ-E=e-E=eO)=wQUO7+(`O)>}QUO7+(dO)?SQVO7+(dOOQQ7+(l7+(lOOQQ7+)Z7+)ZO)?[QUO'#KkO)?fQUO'#KkOOQR,5=b,5=bO)?sQUO,5=bO!;bQUO,5=bO!;bQUO,5=bO!;bQUO,5=bOOQR7+(g7+(gOOQR7+(u7+(uOOQR7+(y7+(yOOQR,5=w,5=wO)?xQUO,5=zO)AOQUO,5=yOOQR,5Av,5AvOOQR-E=i-E=iOOQQ1G3b1G3bO)BUQUO,5=xO)BZQVO'#EfOOQQ1G6b1G6bO%)WQUO1G6bO%)]QUO1G6bOOQQ1G0P1G0POOQQ-E=Q-E=QO)DrQUO,5AWO(%iQUO'#JTO)D}QUO,5AWO)D}QUO,5AWO)EVQUO,5:iO8zQUO,5:iOOQQ,5>],5>]O)EaQUO,5ArO)EhQUO'#EVO)FrQUO'#EVO)G]QUO,5:iO)GgQUO'#HlO)GgQUO'#HmOOQQ'#Kp'#KpO)HUQUO'#KpO!(zQVO'#HnOOQQ,5:i,5:iO)HvQUO,5:iO!M_QVO,5:iOOQQ-E=S-E=SOOQQ1G0S1G0SOOQQ,5>`,5>`O)H{QUO1G6bO!(zQVO,5>gO)LjQUO'#JrO)LuQUO,5AyOOQQ1G4Q1G4QO)L}QUO,5AxOOQQ,5Ax,5AxOOQQ7+)i7+)iO*!lQUO7+)iOOQQ7+)o7+)oO*'kQVO1G7iO*)mQUO7+*SO*)rQUO,5?TO**xQUO7+*[POOO7+$S7+$SP*,kQUO'#LgP*,sQUO,5BQP*,x{,UO7+$SPOOO1G7j1G7jO*,}QUO<<GwOOQQ1G.y1G.yOOQQ'#IT'#ITO*.pQUO,5@`OOQQ,5@`,5@`OOQQ-E=r-E=rOOQQ7+(V7+(VOOQQ<<Ms<<MsO*/yQUO<<MsO*1|QUO<<MvO*3oQUO<<L_O*4TQUO,5?|OOQQ,5?|,5?|OOQQ-E=`-E=`OOQQ1G1b1G1bO*5^QUO,5;vO*6dQUO1G1aOOQQ1G1a1G1aOOQR,5@z,5@zO*7mQ!eO,5@zO*7tQMkO,5@zO*7{Q!eO,5@zOOQR-E=O-E=OOOQQ1G/f1G/fO*8SQ!eO'#DwOOQQ1G5X1G5XOOQR<<J]<<J]O*8ZQUO<<IjO*9OQUO7+$pOOQQ<<Iu<<IuO(7vQVO,5;ROOQR<=!d<=!dOOQQ1G3T1G3TOOQQ,5@U,5@UOOQQ-E=h-E=hOOQR<=!g<=!gO*9{QUO1G0cO*:SQUO'#EzO*:dQUO1G0cO*:kQUO'#I}O*<RQUO1G0qO!(zQVO1G0qOOQQ,5;[,5;[OOQQ,5;],5;]OOQQ,5?u,5?uOOQQ-E=X-E=XO!<[QUO1G0xO*=bQUO1G0xOOQQ1G0y1G0yO*=sQUO'#ElOOQQ1G0z1G0zOOQQ7+&j7+&jO*>XQUO7+&jO*?_QVO7+&jOOQQ7+&h7+&hOOQQ,5@Z,5@ZOOQQ-E=m-E=mO*@ZQUO1G1TO*@eQUO1G1TO*AOQUO1G0fOOQQ1G0f1G0fO*BUQUO'#K|O*B^QUO1G1ROOQQ<<It<<ItOOQQ'#Hb'#HbO'+fQUO,5={OOQQ'#Hd'#HdO'+fQUO,5=}OOQQ-E=j-E=jPOQQ<<Ik<<IkPOQQ-E=k-E=kOOQQ<<Lq<<LqO*BcQUO'#LbO*CoQUO'#LaOOQQ,5@_,5@_OOQQ-E=q-E=qOOQR<<Km<<KmO$>uQUO<<KmO*C}QUO<<KmOOQR1G1Z1G1ZOOQQ7+'S7+'SO!M_QVO1G1tO*DSQUO1G1tOOQR7+'_7+'_OOQR<<Jw<<JwO!0tQVO<<JwOOQR<<KO<<KOO*D_QUO<<KSO*EeQVO<<KSOKkQUO<<KcO!M_QVO<<KcO*ElQUO<<KSO!0tQVO<<KSO*FuQUO<<KSO*FzQUO<<KcO*GVQUO<<KdOOQR<<Kd<<KdOOQR<<Kf<<KfO*G[QUO1G2bO)7VQUO1G2bO'CzQUO1G2bO*GmQUO1G2dO*HsQVO1G2dOOQQ1G2d1G2dO*H}QVO1G2dO*IUQUO,5@QOOQQ-E=d-E=dOOQQ1G2e1G2eO*IdQUO1G1|O*JmQVO1G1|O*JtQUO1G1|OOQQ1G5m1G5mOOQR<<Kz<<KzOOQR<<LO<<LOO*JyQVO<<LOO*KUQUO<<LOOOQR1G2|1G2|O*KZQUO1G2|O*KbQUO1G3eOOQR1G3d1G3dOOQQ7++|7++|O%)WQUO7++|O*KmQUO1G6rO*KmQUO1G6rO(%iQUO,5?oO*KuQUO,5?oOOQQ-E=R-E=RO*LQQUO1G0TOOQQ1G0T1G0TO*L[QUO1G0TO!M_QVO1G0TO*LaQUO1G0TOOQQ1G3w1G3wO*LkQUO,5:qO)EhQUO,5:qO*MXQUO,5:qO)EhQUO,5:qO$#uQUO,5:uO*MvQVO,5>VO)GgQUO'#JpO*NQQUO1G0TO*NcQVO1G0TOOQQ1G3u1G3uO*NjQUO,5>WO*NuQUO,5>XO+ dQUO,5>YO+!jQUO1G0TO%)]QUO7++|O+#pQUO1G4ROOQQ,5@^,5@^OOQQ-E=p-E=pOOQQ<<MT<<MTOOQQ<<Mn<<MnO+$yQUO1G4oP+&|QUO'#JvP+'UQUO,5BRPO{O1G7l1G7lPOOO<<Gn<<GnOOQQANC_ANC_OOQR1G6f1G6fO+'^Q!eO,5:cOOQQ,5:c,5:cO+'eQUO1G0mO+(qQUO7+&]O+*QQUO7+&dO+*cQUO,5;WOOQQ<<JU<<JUO+*qQUO7+&oOOQQ7+&Q7+&QO!4xQUO'#J^O++lQUO,5AhOOQQ7+&m7+&mOOQQ1G3g1G3gO++tQUO1G3iOOQQ,5>n,5>nO+/iQUOANAXOOQRANAXANAXO+/nQUO7+'`OOQRAN@cAN@cO+0zQVOAN@nO+1RQUOAN@nO!0tQVOAN@nO+2[QUOAN@nO+2aQUOAN@}O+2lQUOAN@}O+3rQUOAN@}OOQRAN@nAN@nO!M_QVOAN@}OOQRANAOANAOO+3wQUO7+'|O)7VQUO7+'|OOQQ7+(O7+(OO+4YQUO7+(OO+5`QVO7+(OO+5gQVO7+'hO+5nQUOANAjOOQR7+(h7+(hOOQR7+)P7+)PO+5sQUO7+)PO+5xQUO7+)POOQQ<= h<= hO+6QQUO7+,^O+6YQUO1G5ZOOQQ1G5Z1G5ZO+6eQUO7+%oOOQQ7+%o7+%oO+6vQUO7+%oO*NcQVO7+%oOOQQ7+)a7+)aO+6{QUO7+%oO+8RQUO7+%oO!M_QVO7+%oO+8]QUO1G0]O*LkQUO1G0]O)EhQUO1G0]OOQQ1G0a1G0aO+8zQUO1G3qO+:QQVO1G3qOOQQ1G3q1G3qO+:[QVO1G3qO+:cQUO,5@[OOQQ-E=n-E=nOOQQ1G3r1G3rO%)WQUO<= hOOQQ7+*Z7+*ZPOQQ,5@b,5@bPOQQ-E=t-E=tOOQQ1G/}1G/}OOQQ,5?x,5?xOOQQ-E=[-E=[OOQRG26sG26sO+:zQUOG26YO!0tQVOG26YO+<TQUOG26YOOQRG26YG26YO!M_QVOG26iO!0tQVOG26iO+<YQUOG26iO+=`QUOG26iO+=eQUO<<KhOOQQ<<Kj<<KjOOQRG27UG27UOOQR<<Lk<<LkO+=vQUO<<LkOOQQ7+*u7+*uOOQQ<<IZ<<IZO+={QUO<<IZO!M_QVO<<IZO+>QQUO<<IZO+?WQUO<<IZO*NcQVO<<IZOOQQ<<L{<<L{O+?iQUO7+%wO*LkQUO7+%wOOQQ7+)]7+)]O+@WQUO7+)]O+A^QVO7+)]OOQQANESANESO!0tQVOLD+tOOQRLD+tLD+tO+AeQUOLD,TO+BkQUOLD,TOOQRLD,TLD,TO!0tQVOLD,TOOQRANBVANBVOOQQAN>uAN>uO+BpQUOAN>uO+CvQUOAN>uO!M_QVOAN>uO+C{QUO<<IcOOQQ<<Lw<<LwOOQR!$( `!$( `O!0tQVO!$( oOOQR!$( o!$( oOOQQG24aG24aO+DjQUOG24aO+EpQUOG24aOOQR!)9EZ!)9EZOOQQLD){LD){O+EuQUO'#CgO(dQUO'#CgO+IrQUO'#CzO+LcQUO'#CzO!E{QUO'#CzO+M[QUO'#CzO+MoQUO'#CzO,#bQUO'#CzO,#rQUO'#CzO,$PQUO'#CzO,$[QbO,59dO,$gQbO,59dO,$rQbO,59dO,$}QbO'#CxO,%`QbO'#CxO,%qQbO'#CxO,&SQUO'#CgO,(gQUO'#CgO,(tQUO'#CgO,+iQUO'#CgO,.lQUO'#CgO,.|QUO'#CgO,2uQUO'#CgO,2|QUO'#CgO,3|QUO'#CgO,6VQUO,5:xO#?kQUO,5:xO#?kQUO,5:xO#=ZQUO'#L]O,6sQbO'#CxO,7OQbO'#CxO,7ZQbO'#CxO,7fQbO'#CxO#6tQUO'#E^O,7qQUO'#E^O,9OQUO'#HgO,9pQbO'#CxO,9{QbO'#CxO,:WQUO'#CwO,:]QUO'#CwO,:bQUO'#CpO,:pQbO,59dO,:{QbO,59dO,;WQbO,59dO,;cQbO,59dO,;nQbO,59dO,;yQbO,59dO,<UQbO,59dO,6VQUO1G0dO,<aQUO1G0dO#?kQUO1G0dO,7qQUO1G0dO,>nQUO'#KZO,?OQUO'#CzO,?^QbO,59dO,6VQUO7+&OO,<aQUO7+&OO,?iQUO'#EwO,@[QUO'#EzO,@{QUO'#E^O,AQQUO'#GcO,AVQUO'#CwO,A[QUO'#CxO,AaQUO'#CxO,AfQUO'#CwO,AkQUO'#GcO,ApQUO'#KZO,B^QUO'#KZO,BhQUO'#CwO,BsQUO'#CwO,COQUO'#CwO,<aQUO,5:xO,7qQUO,5:xO,7qQUO,5:xO,CZQUO'#KZO,CnQbO'#CxO,CyQUO'#CsO,DOQUO'#E^\",stateData:\",Dt~O(nOSSOSTOSRPQVPQ'ePQ'gPQ'hPQ'iPQ'jPQ'kPQ'lPQ'mPQ~O*[OS~OPmO]eOb!]Oe!POmTOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!VfO!X!XO!Y!WO!i!YO!opO!r!`O!s!aO!t!aO!u!bO!v!aO!x!cO!{!dO#V#QO#a#VO#b#TO#i#OO#p!xO#t!fO#v!eO$R!gO$T!hO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO${!tO$}!uO%U!yO%_#ZO%`#[O%a#YO%c!zO%e#UO%g!{O%l#SO%o!|O%v!}O%|#PO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(rRO)QYO)TaO)V|O)W{O)YiO)Z!ZO)]XO)icO)jdO~OR#bOV#]O'e#^O'g#_O'h#`O'i#`O'j#aO'k#aO'l#_O'm#_O~OX#dO(o#fO(q#dO~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX(uZX(v$]X(wZX(xZX)TZX)TjX)UZX)VZX)VjX)WZX)WjX)XZX)YZX)ZZX)kZX~O)YjX!UZX~P(dO]$OO!V#mO!X#|O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO(w#lO(x#lO)T#nO)U#pO)V#oO)W#qO)X#iO)Y#kO)Z#}O~Oe$SO%Y$TO'[$UO'_$VO(y$PO~Om$WO~O!T$XO](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)Y(}X~Om$WO~P.ZOm$WO!g$ZO)k$ZO~OX$[O)^$[O~O!R$]O)P)RP)Z)RP~OPmO]$fOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!TxO!V$gO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~Om$`O#t$mO(rRO~P0zO](]Xb'yXe(]Xm'yXm(]Xs'yXs(]Xt'yXt(]Xu'yXu(]Xv'yXv(]Xw'yXw(]Xx'yXx(]Xy'yXy(]Xz'yXz(]X|'yX!O'yX!V(]X!o(]X!r'yX!r(]X!s'yX!s(]X!t'yX!t(]X!u'yX!u(]X!v'yX!v(]X!x'yX!x(]X!{(]X#a'yX#b'yX%e'yX%l'yX%o(]X%v(]X&m'yX&r'yX&s'yX(r'yX(r(]X)T(]X)V(]X)W(]X~Ob!TOm$pOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO&r#WO&s$xO])bXe)bXm)bX!V)bX!{)bX%v)bX(r)bX)T)bX)V)bX)W)bX~O)Y$wO~P:nOPmO]eOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)TaO)V|O)W{O)Z!ZO)]XO)icO)jdO~Ob%ROm:{O!|%SO(r$yO~P<lO)T%TO~Ob!]Om$`O|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r;OO~P<lOPmO]$fOb%ROm:{O!V$gO!W%`O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W%^O)Z!ZO)]XO)icO)jdO)k%]O~O]%iOe!POm%cO!V%lO!{!dO%v$nO(r;PO)T%eO)V%jO)W%jO~O(v%nO~O)Y#kO~O(r%oO](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX!g(tX)k(tX[(tX!W(tX(v(tX!U(tXQ(tX!d(tX~OP%pO(pQO~PCQO]%iOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V%lO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO%o!|O%v!}O)T;aO)V|O)W|O~Om%sO!o%xO(r$yO~PE_O!TxO#v!eO(v%zO)k%}O])fX!V)fX~O]%iOe!POm%sO!V%lO!{!dO%v!}O(r$yO)T;aO)V|O)W|O~O!TxO#v!eO)Y&QO)k&RO~O!U&UO~P!QO]&ZO!TxO!V&XO)T&WO)V&[O)W&[O~Oq&VO~PHrO]&dO!V&cO~OPmO]eOe!PO!VfO!X!XO!Y!WO!i!YO!{!dO#V#QO%_#ZO%`#[O%a#YO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)TaO)V|O)W{O)Z!ZO)]XO)icO)jdO~Ob%ROm:{O%v$nO(r$yO~PIgO]%iOe!POm;]O!V%lO!{!dO%v$nO(r$yO)T;aO)V|O)W|O~Oq&gO](tX])fX!V(tX!V)fX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX[(tX[)fX!U(tX~O!g$ZO)k$ZO~PL]O!g(tX)k(tX~PL]O](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX!g(tX)k(tX[(tX!U(tX~O])fX!V)fX[)fX~PNkOb&iO&m!RO]&lXe&lXm&lXs&lXt&lXu&lXv&lXw&lXx&lXy&lXz&lX!O&lX!V&lX!r&lX!s&lX!t&lX!u&lX!v&lX!x&lX!{&lX%v&lX&r&lX&s&lX(r&lX)T&lX)V&lX)W&lX)Y&lX[&lX!T&lX!X&lX!Y&lX![&lX!^&lX!_&lX!a&lX!b&lX!e&lX!f&lX!h&lX(u&lX(w&lX(x&lX)U&lX)X&lX)Z&lX!g&lX)k&lX!W&lXQ&lX!d&lX(v&lX!U&lX#v&lX~Oq&gOm(}X[(}XQ(}X!d(}X!h(}X)Z(}X)k(}X~P.ZO!g$ZO)k$ZO](tX!V(tX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX!h(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Y(tX)Z(tX[(tX!W(tX(v(tX!U(tXQ(tX!d(tX~OPmO]$fOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O](}Xe(}Xm(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)Y(}X[(}XQ(}X!d(}X!h(}X)Z(}X)k(}X~O]$OO~P!*qO]&mO~O])cXb)cXe)cXm)cXs)cXt)cXu)cXv)cXw)cXx)cXy)cXz)cX|)cX!O)cX!V)cX!o)cX!r)cX!s)cX!t)cX!u)cX!v)cX!x)cX!{)cX#a)cX#b)cX%e)cX%l)cX%o)cX%v)cX&m)cX&r)cX&s)cX(r)cX)T)cX)V)cX)W)cX~O(pQO~P!-ZO%U&oO~P!-ZO]&pO~O]$OO~O!TxO~O$W&xO(r%oO(v&wO~O]&yOx&{O~O]&yO~OPmO]$fOb%ROm:{O!TxO!V$gO!X!XO!Y!WO!i!YO#V#QO#p!xO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:nO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~O]'QO~O!T$XO)Y'SO~P!(zO)Y'UO~O)Y'VO~O(r'WO~O)Y'ZO~P!(zOm;_O%U'_O%e'_O(r;QO~Ob!TOm$pOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO~O(v'cO~O)Y'eO~P!(zO!TxO(r%oO)k'gO~O(r%oO~O]'jO~O]'kOe%nXm%nX!V%nX!{%nX%v%nX(r%nX)T%nX)V%nX)W%nX~O]'oO!V'pO!X'mO!g'mO%Z'mO%['mO%]'mO%^'mO%_'qO%`'qO%a'mO(x'nO)k'mO)y'rO~P8zO]%iOb!TOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V%lO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO!{!dO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO)T;aO)V|O)W|O~Om;`Oq&VO%v$nO(r;RO~P!8jO(r%oO(v'wO)Y'xO~O]&dO!T'zO~Om$pO!O!_O!T(RO!l(WO(r$oO(v(QO)QYO~Om$pO|(_O!T([O#b(_O(r$oO~Ob!TOm$pO|#RO#a#VO#b#TO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO~O](aO~OPmOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)]XO)icO)jdO~O](cO)Z(dO~P!=UO]$OO~P!<[OPmO]$fOb%ROm:{O!V(jO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~OY(kO(pQO(r%oO~O'f(nO~OS(rOT(oO*X(qO~O]$OO(n(uO~Q'nXX#dO(o(wO(q#dO~Oe)ROm(|O&r#WO(r({O~O!Y'Sa!['Sa!^'Sa!_'Sa!a'Sa!b'Sa!e'Sa!f'Sa!h'Sa(u'Sa)T'Sa)U'Sa)V'Sa)W'Sa)X'Sa)Y'Sa)Z'Sa!g'Sa)k'Sa['Sa!W'Sa(v'Sa!U'SaQ'Sa!d'Sa~OPmOb%ROm:{O!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)]XO)icO)jdO]'Sa!V'Sa!X'Sa(w'Sa(x'Sa~P!B_O!T$XO[(sP~P!(zO]oX]%WXeoXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!ToX!VoX!V%WX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!e%WX!f%WX!gnX!h%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX(u%WX(w%WX(x%WX)ToX)T%WX)U%WX)VoX)V%WX)WoX)W%WX)X%WX)Y%WX)Z%WX)knX[%WX~O)YoX[oX!U%WX~P!E{O])eO!V)fO!X)cO!g)cO%Z)cO%[)cO%])cO%^)cO%_)gO%`)gO%a)cO(x)dO)k)cO)y)hO~P8zOPmO]$fOb%ROm:{O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O!V)mO~P!JwOe)pO%Y)qO(y$PO~O!T$XO!V)sO(w)tO!U)sP~P!JwO!T$XO~P!(zO)[){O~Om)|O]!QX!h!QX)P!QX)Z!QX~O]*OO!h*PO)P)RX)Z)RX~O)P*SO)Z*TO~Oe$SO%Y*UO'[$UO'_$VO(y$PO~Om*VO~Om*VO[(}X~P.ZOm*VO!g$ZO)k$ZO~O)Y*WO~P:nOPmO]$fOb!]Om$`Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~Oq&gO~P!&zOq&gO!W(tX(v(tXQ(tX!d(tX~PNkO]'oO!V'pO!X'mO!g'mO%Z'mO%['mO%]'mO%^'mO%_'qO%`'qO%a'mO(x'nO)k'mO)y'rO~O]jXejXmhXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX!TjX!hjX)ZjX)kjX[jX~O!ljX(vjX)YjX!XjX!YjX![jX!^jX!_jX!ajX!bjX!ejX!fjX(ujX(wjX(xjX)UjX)XjX!gjX!WjXQjX!djX!UjX#vjX#TjX#VjX#pjXbjX|jX!ojX#ajX#bjX#ijX#tjX${jX%cjX%ejX%kjX%ljX%ojX&mjX)QjX~P#%yO(y*[O~Om*]O~O](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)Y(}X!T(}X!X(}X!Y(}X![(}X!^(}X!_(}X!a(}X!b(}X!e(}X!f(}X!h(}X(u(}X(w(}X(x(}X)U(}X)X(}X)Z(}X!g(}X)k(}X[(}X!W(}XQ(}X!d(}X(v(}X!U(}X#v(}X~Om*]O~P#+ROs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO])bae)bam)ba!V)ba!{)ba%v)ba(r)ba)T)ba)V)ba)W)baQ)ba!d)ba!h)ba)Z)ba)k)ba[)ba!T)ba(v)ba)Y)ba~O&r#WO&s$xO~P#.qOq&gOm(}X~P#+RO&r)ba~P#.qO]ZXmhXqZXqjX!TjX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX(uZX(wZX(xZX)TZX)UZX)VZX)WZX)XZX)YZX)ZZX)kZX[ZX~O!WZX(vZX!UZXQZX!dZX~P#1jO]$OO!V#mO!X#|O(w#lO(x#lO~O!Y&xa![&xa!^&xa!_&xa!a&xa!b&xa!e&xa!f&xa!g&xa!h&xa(u&xa)T&xa)U&xa)V&xa)W&xa)X&xa)Y&xa)Z&xa)k&xa[&xa!W&xa(v&xa!U&xaQ&xa!d&xa~P#3zOm;iO!T$XO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~PKkOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!|%SO~PKkO]&dO!V&cO[#Qa!T#Qa!h#Qa#v#Qa)Y#Qa)k#QaQ#Qa!d#Qa(v#Qa~Oq&gO!T$XO~O[*dO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[*dO~O[*fO]&dO!V&cO~O]&ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V&XO&r#WO&s$xO)T&WO)V&[O)W&[O~O[rXQrX!drX!hrX)ZrX)YrX~P#9{O[*iO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h*jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!W)lX~P#3zO!W*lO!h*mO~O!W*lO!h*mO~P!(zO!W*lO~Oq&gO!g$ZO!h*nO)k$ZO](tX!V(tX!W(tX!W*PX!X(tX!Y(tX![(tX!^(tX!_(tX!a(tX!b(tX!e(tX!f(tX(u(tX(w(tX(x(tX)T(tX)U(tX)V(tX)W(tX)X(tX)Z(tX~O!h(tX~P#=ZO!W*pO~Oe$SO%Y*UO(y:sO~Om;lO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!|%SO~PBUO]*wO!T*rO!V&cO!h*uO#v!eO)k*sO)Y)rX~O!h*uO)Y)rX~O)Y*xO~Oq&gO])fX!T)fX!V)fX!h)fX#v)fX)Y)fX)k)fX[)fXQ)fX!d)fX(v)fX~Oq&gO~OP%pO(pQO]%ha!V%ha!X%ha!Y%ha![%ha!^%ha!_%ha!a%ha!b%ha!e%ha!f%ha!h%ha(r%ha(u%ha(w%ha(x%ha)T%ha)U%ha)V%ha)W%ha)X%ha)Y%ha)Z%ha!g%ha)k%ha[%ha!W%ha(v%ha!U%haQ%ha!d%ha~Oe$SO%Y$TO(y:pO~Om:xO~O!TxO#v!eO)k%}O~Om<]O&r#WO(r;hO~O$Z+UO%`+VO~O!TxO#v!eO)Y+WO)k+XO~OPmO]$fOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO$Z+UO%_#ZO%`+ZO%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O!U+[O~P!QOb!TOm$pOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#a+bO#b+cO#i+dO%e#UO%l#SO&m!RO&r#WO&s!TO(r$oO)QYO~OQ)mP!d)mP~P#GgO]&ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V&XO)T&WO)V&[O)W&[O~O[#kX!T#kX#v#kX)Y#kX)k#kXQ#kX!d#kX!h#kX)Z#kX!x#kX(v#kX~P#IkOPmO]$fOb%ROm:{Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V$gO!W+jO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T+kO)W$lO)Z!ZO)]XO)icO)jdO~O]&dO!V+lO~O]&ZO!V&XO)QYO)T&WO)V&[O)W&[O)Z+oO[)eP~P8zO]&ZO!V&XO)T&WO)V&[O)W&[O~O[#nX!T#nX#v#nX)Y#nX)k#nXQ#nX!d#nX!h#nX)Z#nX!x#nX(v#nX~P#NeO!TxO])oX!V)oX~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O#T+wO#p+xO(x+uO)V+sO)W+sO~O]#jX!T#jX!V#jX[#jX#v#jX)Y#jX)k#jXQ#jX!d#jX!h#jX)Z#jX!x#jX(v#jX~P$ xO#V+zO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!l+{O#T+wO#V+zO#p+xO(x+uO)V+{O)W+{O])gP!T)gP!V)gP#v)gP(v)gP)k)gP[)gP!h)gP)Y)gP~O!x)gPQ)gP!d)gP~P$#uOPmO]$fOb%ROm:{Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)W$lO)Z!ZO)]XO)icO)jdO~O!W,RO)T,SO~P$%pO)QYO)Z+oO[)eP~P8zO]&dO!V&cO[&Za!T&Za!h&Za#v&Za)Y&Za)k&ZaQ&Za!d&Za(v&Za~OPmO]$fOb!]Om:}Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;SO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~OQ(zP!d(zP~P$)YO]$OO!V#mO(w#lO(x#lO!X'Pa!Y'Pa!['Pa!^'Pa!_'Pa!a'Pa!b'Pa!e'Pa!f'Pa!h'Pa(u'Pa)T'Pa)U'Pa)V'Pa)W'Pa)X'Pa)Y'Pa)Z'Pa!g'Pa)k'Pa['Pa!W'Pa(v'Pa!U'PaQ'Pa!d'Pa~O]$OO!V#mO!X#|O(w#lO(x#lO~P!B_O!TxO#t!fO)QYO~P8zO!TxO(r%oO)k,]O~O#x,bO~OQ)bX!d)bX!h)bX)Z)bX)k)bX[)bX!T)bX(v)bX)Y)bX~P:nO(v,fO(w,dO)Q$UX)Y$UX~O(r,gO~O)QYO)Y,jO~OPmO]$fOb!]Om:|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V$gO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~O(r;TO~P$0kOPmO]$fOb%ROm:{O!TxO!V$gO!X!XO!Y!WO!i!YO#V#QO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r:nO)QYO)T$lO)W$lO)YiO)Z!ZO)]XO)icO)jdO~O$h,tO~OPmO]$fOb!]Om:|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!V$gO!X!XO!Y!WO!i!YO!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO#V#QO#a#VO#b#TO$}!uO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)T$lO)W$lO)Z!ZO)]XO)icO)jdO~O${,zO(r;OO)Y,xO~P$7UO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y,|O)Z#}O~P#3zO)Y,|O~O)Y,}O~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y-OO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y-PO)Z#}O~P#3zOq&gO)QYO)k-RO~O)Y-SO~Om;_O(r;QO~O]-ZO!{!dO&r#WO&s$xO(r-VO)T-WO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO(v-^O)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!TxO$`!iO$e!jO$g!kO$h!lO$k-cO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:oOe$Xa!o$Xa!{$Xa#i$Xa#p$Xa#t$Xa#v$Xa$R$Xa$T$Xa$Y$Xa$Z$Xa${$Xa%U$Xa%c$Xa%g$Xa%o$Xa%|$Xa(k$Xa)V$Xa!U$Xa$c$Xa~P$0kO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y-dO)Z#}O~P#3zOm-fO!TxO)k,]O~O)k-hO~O]&]a!X&]a!Y&]a![&]a!^&]a!_&]a!a&]a!b&]a!e&]a!f&]a!h&]a(u&]a(w&]a(x&]a)U&]a)V&]a)W&]a)X&]a)Y&]a)Z&]a!g&]a)k&]a[&]a!W&]a!T&]a#v&]a(v&]a!U&]aQ&]a!d&]a~O)T-lO!V&]a~P$DbO[-lO~O!W-lO~O!V-mO)T&]a~P$DbO](}Xe(}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!V(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X~Om;nO~P$GQO]&dO!V&cO)Y-nO~Om;dO!o-qO#V+zO#i-vO#t!fO${,zO%c!zO%k-uO%o!|O%v!}O(r;UO)QYO~P!8jO!n-zO(r,gO~O)QYO)Y-|O~OPmO]$fOb%ROm:{O!T.RO!V$gO!X!XO!Y!WO!i!YO#V.YO#a.XO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO(x.QO)T$lO)W$lO)Y.OO)Z!ZO)]XO)icO)jdO~O!U.WO~P$JbO])_Xe)_Xs)_Xt)_Xu)_Xv)_Xw)_Xx)_Xy)_Xz)_X!O)_X!T)_X!V)_X!l)_X!r)_X!s)_X!t)_X!u)_X!v)_X!x)_X!{)_X%v)_X&r)_X&s)_X(r)_X(v)_X)T)_X)V)_X)W)_X)Y)_X[)_X!h)_X)Z)_X!X)_X!Y)_X![)_X!^)_X!_)_X!a)_X!b)_X!e)_X!f)_X(u)_X(w)_X(x)_X)U)_X)X)_X!g)_X)k)_X!W)_XQ)_X!d)_X#T)_X#V)_X#p)_X#v)_Xb)_X|)_X!o)_X#a)_X#b)_X#i)_X#t)_X${)_X%c)_X%e)_X%k)_X%l)_X%o)_X&m)_X)Q)_X!U)_X~Om*]O~P$LlOm$pO!T(RO!l._O(r$oO(v(QO)QYO~Oq&gOm)_X~P$LlOm$pO!n.dO!o.dO(r$oO)QYO~Om;eO!U.oO!n.qO!o.pO#i-vO${!tO$}!uO%g!{O%k-uO%o!|O%v!}O(r;WO)QYO~P!8jO!T(RO!l._O(v(QO])OXe)OXm)OXs)OXt)OXu)OXv)OXw)OXx)OXy)OXz)OX!O)OX!V)OX!r)OX!s)OX!t)OX!u)OX!v)OX!x)OX!{)OX%v)OX&r)OX&s)OX(r)OX)T)OX)V)OX)W)OX~O)Y)OX[)OX!X)OX!Y)OX![)OX!^)OX!_)OX!a)OX!b)OX!e)OX!f)OX!h)OX(u)OX(w)OX(x)OX)U)OX)X)OX)Z)OX!g)OX)k)OX!W)OXQ)OX!d)OX!U)OX#v)OX~P%%eO!T(RO~O!T(RO(v(QO~O(r%oO!U*RP~O!T([O(v.vO]&kae&kam&kas&kat&kau&kav&kaw&kax&kay&kaz&ka!O&ka!V&ka!r&ka!s&ka!t&ka!u&ka!v&ka!x&ka!{&ka%v&ka&r&ka&s&ka(r&ka)T&ka)V&ka)W&ka)Y&ka[&ka!X&ka!Y&ka![&ka!^&ka!_&ka!a&ka!b&ka!e&ka!f&ka!h&ka(u&ka(w&ka(x&ka)U&ka)X&ka)Z&ka!g&ka)k&ka!W&kaQ&ka!d&ka!U&ka#v&ka~Om$pO!T([O(r$oO~O&r#WO&s$xO]&pae&pam&pas&pat&pau&pav&paw&pax&pay&paz&pa!O&pa!V&pa!r&pa!s&pa!t&pa!u&pa!v&pa!x&pa!{&pa%v&pa(r&pa)T&pa)V&pa)W&pa)Y&pa[&pa!T&pa!X&pa!Y&pa![&pa!^&pa!_&pa!a&pa!b&pa!e&pa!f&pa!h&pa(u&pa(w&pa(x&pa)U&pa)X&pa)Z&pa!g&pa)k&pa!W&paQ&pa!d&pa(v&pa!U&pa#v&pa~O&s.{O~P!(zO!Y#rO![#sO!f#{O)T#nO!^'Ua!_'Ua!a'Ua!b'Ua!e'Ua!h'Ua(u'Ua)U'Ua)V'Ua)W'Ua)X'Ua)Y'Ua)Z'Ua!g'Ua)k'Ua['Ua!W'Ua(v'Ua!U'UaQ'Ua!d'Ua~P#3zO!V'dX!X'dX!Y'dX!['dX!^'dX!_'dX!a'dX!b'dX!e'dX!f'dX!h'dX(u'dX(w'dX(x'dX)T'dX)U'dX)V'dX)W'dX)X'dX)Z'dX['dX~O].}O)Y'dX!g'dX)k'dX!W'dX(v'dX!U'dXQ'dX!d'dX~P%2xO!Y#rO![#sO!f#{O)T#nO!^'Wa!_'Wa!a'Wa!b'Wa!e'Wa!h'Wa(u'Wa)U'Wa)V'Wa)W'Wa)X'Wa)Y'Wa)Z'Wa!g'Wa)k'Wa['Wa!W'Wa(v'Wa!U'WaQ'Wa!d'Wa~P#3zO]$OO!T$XO!V/OO&r#WO&s$xO~O!X'Za!Y'Za!['Za!^'Za!_'Za!a'Za!b'Za!e'Za!f'Za!h'Za(u'Za(w'Za(x'Za)T'Za)U'Za)V'Za)W'Za)X'Za)Y'Za)Z'Za!g'Za)k'Za['Za!W'Za(v'Za!U'ZaQ'Za!d'Za~P%6oO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^a)Y'^a!g'^a)k'^a['^a!W'^a(v'^a!U'^aQ'^a!d'^a~P#3zOPmO]$fOb%ROm:{O!V$gO!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)T$lO)W%^O)Z!ZO)]XO)icO)jdO)k%]O~O!W/RO~P%:oOS(rOT(oO]$OO*X(qO~O]/UO'f/VO*X/SO~OS/ZOT(oO*X/YO~O]$OO~Q'na!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO(v/]O)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O)Y#Zi[#Zi~P#3zO]dXmhXqdXqjX!VdX!XdX!YdX![dX!^dX!_dX!adX!bdX!edX!fdX!gdX!hdX(udX(wdX(xdX)TdX)UdX)VdX)WdX)XdX)YdX)ZdX)kdX[dX!WdX(vdX!TdX#vdX!UdXQdX!ddX~Oe/_O%Y*UO(y/^O~Om/`O~Om/aO~Oq&gO]ci!Vci!Xci!Yci![ci!^ci!_ci!aci!bci!eci!fci!gci!hci(uci(wci(xci)Tci)Uci)Vci)Wci)Xci)Yci)Zci)kci[ci!Wci(vci!UciQci!dci~O!W/cO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO![#sO)T#nO!Y&zi!^&zi!_&zi!a&zi!b&zi!e&zi!f&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y&zi![&zi!^&zi!_&zi!a&zi!b&zi!e&zi!f&zi!h&zi(u&zi)T&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)W#qO)X#iO!h&zi(u&zi)U&zi)V&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)V#oO)W#qO)X#iO!h&zi(u&zi)U&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)W#qO)X#iO!^&zi!h&zi(u&zi)U&zi)V&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!a#yO!b#zO!e#zO!f#{O)T#nO)W#qO)X#iO!^&zi!_&zi!h&zi(u&zi)U&zi)V&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!a#yO!b#zO!e#zO!f#{O)T#nO)X#iO!^&zi!_&zi!h&zi(u&zi)U&zi)V&zi)W&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!b#zO!e#zO!f#{O)T#nO)X#iO!^&zi!_&zi!a&zi!h&zi(u&zi)U&zi)V&zi)W&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!f#{O)T#nO!^&zi!_&zi!a&zi!b&zi!e&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO)T#nO!^&zi!_&zi!a&zi!b&zi!e&zi!f&zi!h&zi(u&zi)U&zi)V&zi)W&zi)X&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)U#pO)V#oO)W#qO)X#iO!h&zi(u&zi)Y&zi)Z&zi!g&zi)k&zi[&zi!W&zi(v&zi!U&ziQ&zi!d&zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h/dO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O[(sX~P#3zO!h/dO[(sX~O[/fO~O]%Xaq%Xa!X%Xa!Y%Xa![%Xa!^%Xa!_%Xa!a%Xa!b%Xa!e%Xa!f%Xa!h%Xa(u%Xa(w%Xa(x%Xa)U%Xa)V%Xa)W%Xa)X%Xa)Y%Xa)Z%Xa!g%Xa)k%Xa[%Xa!W%Xa!T%Xa#v%Xa(v%Xa!U%XaQ%Xa!d%Xa~O)T/gO!V%Xa~P&,aO[/gO~O!W/gO~O!V/hO)T%Xa~P&,aO!X'Zi!Y'Zi!['Zi!^'Zi!_'Zi!a'Zi!b'Zi!e'Zi!f'Zi!h'Zi(u'Zi(w'Zi(x'Zi)T'Zi)U'Zi)V'Zi)W'Zi)X'Zi)Y'Zi)Z'Zi!g'Zi)k'Zi['Zi!W'Zi(v'Zi!U'ZiQ'Zi!d'Zi~P%6oO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^i)Y'^i!g'^i)k'^i['^i!W'^i(v'^i!U'^iQ'^i!d'^i~P#3zO!W/mO~P%:oO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h/oO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U)sX~P#3zO(r/rO~O!V/tO(w)tO)k/vO~O!h/oO!U)sX~O!U/wO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h`i(u`i)Y`i!g`i)k`i[`i!W`i(v`i!U`iQ`i!d`i~P#3zO!R/xO~Om)|O]!Qa!h!Qa)P!Qa)Z!Qa~OP0QO]0POm0QO!R0QO!T/}O!V0OO!X0QO!Y0QO![0QO!^0QO!_0QO!a0QO!b0QO!e0QO!f0QO!g0QO!h0QO!i0QO(pQO(v0QO(w0QO(x0QO)T/zO)U/{O)V/{O)W/|O)X#iO)Y0QO)Z0QO)]XO~O[0TO~P&6yO!R$]O~O!h*PO)P)Ra)Z)Ra~O)P0XO~O])eO!V)fO!X)cO!g)cO%Z)cO%[)cO%])cO%^)cO%_)gO%`)gO%a)cO(x)dO)k)cO)y)hO~Oe)pO%Y*UO(y$PO~O)Y0ZO~O]oXeoXmnXqoXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!VoX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX!ToX!hoX)ZoX[oXQoX!doX~O!loX(voX)YoX!XoX!YoX![oX!^oX!_oX!aoX!boX!eoX!foX(uoX(woX(xoX)UoX)XoX!goX)koX!WoX!UoX#voX#ToX#VoX#poXboX|oX!ooX#aoX#boX#ioX#toX${oX%coX%eoX%koX%loX%ooX&moX)QoX~P&:uOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!O!_O!r!aO!s!aO!t!aO!u!aO!v!aO!x!cO~O])bie)bim)bi!V)bi!{)bi%v)bi(r)bi)T)bi)V)bi)W)biQ)bi!d)bi!h)bi)Z)bi)k)bi[)bi!T)bi&r)bi(v)bi)Y)bi~P&?sO]&dO!V&cO[#Qi!T#Qi!h#Qi#v#Qi)Y#Qi)k#QiQ#Qi!d#Qi(v#Qi~O[raQra!dra!hra)Zra)Yra~P#9{O[raQra!dra!hra)Zra)Yra~P#IkO]&dO!V+lO[raQra!dra!hra)Zra)Yra~O!h*jO!W)la~O!h*nO!W*Pa~OPmOb!]Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O|#RO!O!_O!X!XO!Y!WO!i!YO!s!aO!t!aO!v!aO!x!cO#V#QO#a#VO#b#TO#v!eO$Y!vO$Z!wO$`!iO$e!jO$g!kO$h!lO$k!mO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO%_#ZO%`#[O%a#YO%e#UO%l#SO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO)QYO)YiO)Z!ZO)]XO)icO)jdO~O]eOe!POmTO!T*rO!U&UO!V0iO!opO!r!`O!u!bO!{!dO#i#OO#p!xO#t!fO$R!gO$T!hO${!tO$}!uO%U!yO%c!zO%g!{O%o!|O%v!}O%|#PO(rRO(w)tO)TaO)V|O)W{O~P&DuO!h*uO)Y)ra~OPmO]$fOb!]Om:}O|#RO!T$XO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;VO)QYO)T$lO)W$lO)Z0oO)]XO)icO)jdO[(sP[)eP~P&?sO!h*nO!W*PX~O]$OO!T$XO~O!h0tO!T){X#v){X)k){X~O)Y0vO~O)Y0wO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y0yO)Z#}O~P#3zO)Y0wO~P!?WO]1TOe!POm%cO!V1RO!{!dO%v$nO(r$yO)T0{O)Z1OO~O)V1PO)W1PO)k0|OQ#PX!d#PX!h#PX[#PX~P' dO!h1UOQ)mX!d)mX~OQ1WO!d1WO~O)Z1ZO)k1YOQ#`X!d#`X!h#`X~P!<[O)Z1ZO)k1YOQ#`X!d#`X!h#`X~P!;bOq&VO~O[#ka!T#ka#v#ka)Y#ka)k#kaQ#ka!d#ka!h#ka)Z#ka!x#ka(v#ka~P#IkO]&dO!V+lO[#ka!T#ka#v#ka)Y#ka)k#kaQ#ka!d#ka!h#ka)Z#ka!x#ka(v#ka~O!W1`O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W1`O)T1bO~P$%pO!W1`O~P!(zO]#ja!T#ja!V#ja[#ja#v#ja)Y#ja)k#jaQ#ja!d#ja!h#ja)Z#ja!x#ja(v#ja~P$ xO[1fO]&dO!V+lO~O!h1gO[)eX~O[1iO~O]&dO!V+lO[#na!T#na#v#na)Y#na)k#naQ#na!d#na!h#na)Z#na!x#na(v#na~O]1mOs#SXt#SXu#SXv#SXw#SXx#SXy#SXz#SX!T#SX!V#SX#T#SX#p#SX(x#SX)V#SX)W#SX!l#SX!x#SX#V#SX#v#SX(v#SX)k#SX[#SX!h#SX)Y#SXQ#SX!d#SX)Z#SX~O]1nO~O]1qOm$pO!V$gO#V#QO(r$oO)icO)jdO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!l+{O#T+wO#V+zO#p+xO(x+uO)V+{O)W+{O~O])gX!T)gX!V)gX!x)gX#v)gX(v)gX)k)gX[)gX!h)gX)Y)gXQ)gX!d)gX~P'+}O!x!cO]#Ri!T#Ri!V#Ri#v#Ri(v#Ri)k#Ri[#Ri!h#Ri)Y#RiQ#Ri!d#Ri~O!W1yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W1yO)T1{O~P$%pO!W1yO~P!(zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ*SX!d*SX!h*SX~P#3zO)Z1|OQ({X!d({X!h({X~O!h1}OQ(zX!d(zX~OQ2PO!d2PO~O[2QO~O#t$mO)QYO~P8zOm-fO!TxO)k2UO~O[2VO~O#x,bOP#ui]#uib#uie#uim#uis#uit#uiu#uiv#uiw#uix#uiy#uiz#ui|#ui!O#ui!T#ui!V#ui!X#ui!Y#ui!i#ui!o#ui!r#ui!s#ui!t#ui!u#ui!v#ui!x#ui!{#ui#V#ui#a#ui#b#ui#i#ui#p#ui#t#ui#v#ui$R#ui$T#ui$Y#ui$Z#ui$`#ui$e#ui$g#ui$h#ui$k#ui$m#ui$o#ui$q#ui$s#ui$u#ui$w#ui${#ui$}#ui%U#ui%_#ui%`#ui%a#ui%c#ui%e#ui%g#ui%l#ui%o#ui%v#ui%|#ui&m#ui&r#ui&s#ui'Q#ui'R#ui'V#ui'Y#ui'a#ui'b#ui(k#ui(p#ui(r#ui)Q#ui)T#ui)V#ui)W#ui)Y#ui)Z#ui)]#ui)i#ui)j#ui!U#ui$c#ui!n#ui%k#ui~O]&dO~O]&dO!TxO!V&cO#v!eO~O(v2[O(w,dO)Q$Ua)Y$Ua~O)QYO)Y2^O~O[2_O~P,]O[2_O)Y#kO~O[2_O~O$c2dOP$_i]$_ib$_ie$_im$_is$_it$_iu$_iv$_iw$_ix$_iy$_iz$_i|$_i!O$_i!T$_i!V$_i!X$_i!Y$_i!i$_i!o$_i!r$_i!s$_i!t$_i!u$_i!v$_i!x$_i!{$_i#V$_i#a$_i#b$_i#i$_i#p$_i#t$_i#v$_i$R$_i$T$_i$Y$_i$Z$_i$`$_i$e$_i$g$_i$h$_i$k$_i$m$_i$o$_i$q$_i$s$_i$u$_i$w$_i${$_i$}$_i%U$_i%_$_i%`$_i%a$_i%c$_i%e$_i%g$_i%l$_i%o$_i%v$_i%|$_i&m$_i&r$_i&s$_i'Q$_i'R$_i'V$_i'Y$_i'a$_i'b$_i(k$_i(p$_i(r$_i)Q$_i)T$_i)V$_i)W$_i)Y$_i)Z$_i)]$_i)i$_i)j$_i!U$_i~O]1qO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y2gO)Z#}O~P#3zOPmO]$fOb!]Om:|O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)T$lO)W$lO)Y2jO)Z!ZO)]XO)icO)jdO~P&?sO)Y2gO~O(r-VO~O)QYO)k2mO~O)Y2oO~O]-ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO!|%SO(r-VO)T-WO~O)T2tO~O]&dO!V2vO!h2wO)Y)vX~O]-ZO!{!dO(r-VO)T-WO~O)Y2zO~O!TxO$`!iO$e!jO$g!kO$h!lO$k-cO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:oOe$Xi!o$Xi!{$Xi#i$Xi#p$Xi#t$Xi#v$Xi$R$Xi$T$Xi$Y$Xi$Z$Xi${$Xi%U$Xi%c$Xi%g$Xi%o$Xi%|$Xi(k$Xi)V$Xi!U$Xi$c$Xi~P$0kOm:|O(r:oO~P0zO]3OO~O)Y2TO~O!u3QO(r%oO~O[3TO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h3UO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[3VO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO]&dO!V+lO!T%ui#v%ui)Y%ui)k%ui~O!W3WO~Om:zO)Y(}X~P$GQOb!TOm$pO|3^O#a#VO#b3]O#t!fO%e#UO%l3_O&m!RO&r#WO&s!TO(r$oO)QYO~P&?sOm;dO!o-qO#i-vO#t!fO${,zO%c!zO%k-uO%o!|O%v!}O(r;UO)QYO~P!8jO]&dO!V&cO)Y3aO~O)Y3bO~O)QYO)Y3bO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y3cO)Z#}O~P#3zO)Y3cO~O)Y3fO~O!U3hO~P$JbOm$pO(r$oO~O]3jO!T'zO~P'+iO!T(RO!l3mO(v(QO])Oae)Oam)Oas)Oat)Oau)Oav)Oaw)Oax)Oay)Oaz)Oa!O)Oa!V)Oa!r)Oa!s)Oa!t)Oa!u)Oa!v)Oa!x)Oa!{)Oa%v)Oa&r)Oa&s)Oa(r)Oa)T)Oa)V)Oa)W)Oa)Y)Oa[)Oa!X)Oa!Y)Oa![)Oa!^)Oa!_)Oa!a)Oa!b)Oa!e)Oa!f)Oa!h)Oa(u)Oa(w)Oa(x)Oa)U)Oa)X)Oa)Z)Oa!g)Oa)k)Oa!W)OaQ)Oa!d)Oa!U)Oa#v)Oa~Om$pO!n.dO!o.dO(r$oO~O!h3qO)Z3sO!T)`X~O!o3uO)QYO~P8zO)Y3vO~PGVO]3{Om(|O!T$XO!{!dO%v$nO&r#WO(r({O(v4PO)T3xO)V3|O)W3|O~O)Y4QO)k4SO~P(&eOm;eO!U4UO!n.qO!o.pO#i-vO${!tO$}!uO%g!{O%k-uO%o!|O%v!}O(r;WO)QYO~P!8jOm;eO%v!}O(r;WO~P!8jO(v4VO~Om$pO!T(RO(r$oO(v(QO)QYO~O!l3mO~P((sO)k4XO!U&oX!h&oX~O!h4YO!U*RX~O!U4[O~Ob4^Om$pO&m!RO(r$oO~O!T([O]&kie&kim&kis&kit&kiu&kiv&kiw&kix&kiy&kiz&ki!O&ki!V&ki!r&ki!s&ki!t&ki!u&ki!v&ki!x&ki!{&ki%v&ki&r&ki&s&ki(r&ki)T&ki)V&ki)W&ki)Y&ki[&ki!X&ki!Y&ki![&ki!^&ki!_&ki!a&ki!b&ki!e&ki!f&ki!h&ki(u&ki(w&ki(x&ki)U&ki)X&ki)Z&ki!g&ki)k&ki!W&kiQ&ki!d&ki!U&ki#v&ki~O(v&ki~P(*TO(v.vO~P(*TO[4aO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[4aO~O[4bO~O]$OO!T$XO!V'Zi!X'Zi!Y'Zi!['Zi!^'Zi!_'Zi!a'Zi!b'Zi!e'Zi!f'Zi!h'Zi(u'Zi(w'Zi(x'Zi)T'Zi)U'Zi)V'Zi)W'Zi)X'Zi)Y'Zi)Z'Zi!g'Zi)k'Zi['Zi!W'Zi(v'Zi!U'ZiQ'Zi!d'Zi~OPmOb%ROm:{O!X!XO!Y!WO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)Z!ZO)]XO)icO)jdO]#]aq#]a!T#]a!V#]a)T#]a)V#]a)W#]a~O(r%oO)Z4gO[*ZP~O*X4fO~O'f4iO*X4fO~O*X4jO~OmnXqoXq&wX~Oe4lO%Y*UO(y/^O~Oe4lO%Y*UO(y4mO~O!h/dO[(sa~O!W4qO~O]&dO!V+lO!T%uq#v%uq)Y%uq)k%uq~O]$OO!T$XO!X'Zq!Y'Zq!['Zq!^'Zq!_'Zq!a'Zq!b'Zq!e'Zq!f'Zq!h'Zq(u'Zq(w'Zq(x'Zq)T'Zq)U'Zq)V'Zq)W'Zq)X'Zq)Y'Zq)Z'Zq!g'Zq)k'Zq['Zq!W'Zq(v'Zq!U'ZqQ'Zq!d'Zq~O!V'Zq~P(5bO!V/OO&r#WO&s$xO~P(5bO!T$XO!V)sO(w)tO!U(UX!h(UX~P!JwO!h/oO!U)sa~O!W4yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h*jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!U4}O~P&6yO!W4}O~P&6yO[4}O~P&6yO[5SO~P&6yO]5TO!h'ua)P'ua)Z'ua~O!h*PO)P)Ri)Z)Ri~O]&dO!V&cO[#Qq!T#Qq!h#Qq#v#Qq)Y#Qq)k#QqQ#Qq!d#Qq(v#Qq~O[riQri!dri!hri)Zri)Yri~P#IkO]&dO!V+lO[riQri!dri!hri)Zri)Yri~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'Tq)Y'Tq!g'Tq)k'Tq['Tq!W'Tq(v'Tq!U'TqQ'Tq!d'Tq~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!W'|a!h'|a~P#3zO!W5YO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h5ZO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y#kO)Z#}O!U)sX~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h#{i)Y#{i~P#3zO]*wO!T$XO!V&cO)k*sO!h(Va)Y(Va~O!h1gO[)eX]'dX~P%2xO)Z5]O!T%qa!h%qa#v%qa)k%qa~O!h0tO!T){a#v){a)k){a~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y5`O)Z#}O~P#3zO]1TOe!POm;]O!V1RO!{!dO%v$nO(r$yO)T;yO)V5bO)W5bO~OQ#Pa!d#Pa!h#Pa[#Pa~P(DjO]1TOe!POs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V1RO!{!dO!|%SO%v$nO(r$yOQ#kX!d#kX!h#kX[#kX~Om%cO)T0{O)V;zO)W;zO~P(ElO]&dOQ#Pa!d#Pa!h#Pa[#Pa~O!V&cO)k5fO~P(GZO(r%oOQ#dX!d#dX!h#dX[#dX~O)V;zO)W;zOQ#nX!d#nX!h#nX[#nX~P' dO!V+lO~P(GZO]1TOb!TOe!POm;^O|#RO!V1RO!{!dO#a#VO#b#TO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO(r;RO)QYO)T;yO)V5bO)W5bO)Z+oO[)eP~P&?sO!h1UOQ)ma!d)ma~Oq&gO)k5kOQ#`am(}X!d#`a!h#`a)Z(}X~P$GQO(r-VOQ#ga!d#ga!h#ga~Oq&gO)k5kOQ#`a])_Xe)_Xm)_Xs)_Xt)_Xu)_Xv)_Xw)_Xx)_Xy)_Xz)_X!O)_X!T)_X!V)_X!d#`a!h#`a!l)_X!r)_X!s)_X!t)_X!u)_X!v)_X!x)_X!{)_X%v)_X&r)_X&s)_X(r)_X(v)_X)T)_X)V)_X)W)_X)Z)_X~O#a5nO#b5nO~O]&dO!V+lO[#ki!T#ki#v#ki)Y#ki)k#kiQ#ki!d#ki!h#ki)Z#ki!x#ki(v#ki~O!W5pO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W5pO~P!(zO!W5pO)T5rO~P$%pO]#ji!T#ji!V#ji[#ji#v#ji)Y#ji)k#jiQ#ji!d#ji!h#ji)Z#ji!x#ji(v#ji~P$ xO)QYO)Z5tO~P8zO!h1gO[)ea~O&r#WO&s$xO!T#qa!x#qa#v#qa(v#qa)k#qa[#qa!h#qa)Y#qaQ#qa!d#qa)Z#qa~P#NeO[5yO~P!(zO[)pP~P!4xO)U6PO)V5}O]#Ua!T#Ua!V#Ua)T#Ua)W#Uas#Uat#Uau#Uav#Uaw#Uax#Uay#Uaz#Ua!l#Ua!x#Ua#T#Ua#V#Ua#p#Ua#v#Ua(v#Ua(x#Ua)k#Uab#Uae#Uam#Ua|#Ua!O#Ua!o#Ua!r#Ua!s#Ua!t#Ua!u#Ua!v#Ua!{#Ua#a#Ua#b#Ua#i#Ua#t#Ua${#Ua%c#Ua%e#Ua%k#Ua%l#Ua%o#Ua%v#Ua&m#Ua&r#Ua&s#Ua(r#Ua)Q#Ua)Y#Ua[#Ua!h#UaQ#Ua!d#Ua~O!x!cO]#Rq!T#Rq!V#Rq#v#Rq(v#Rq)k#Rq[#Rq!h#Rq)Y#RqQ#Rq!d#Rq~O!W6UO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W6UO~P!(zO!h1}OQ(za!d(za~O)Y6ZO~Om-fO!TxO)k6[O~O]*wO!T$XO!V&cO!h*uO)Y)rX~O)k6`O~P)+cO[6bO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[6bO~O$c6dOP$_q]$_qb$_qe$_qm$_qs$_qt$_qu$_qv$_qw$_qx$_qy$_qz$_q|$_q!O$_q!T$_q!V$_q!X$_q!Y$_q!i$_q!o$_q!r$_q!s$_q!t$_q!u$_q!v$_q!x$_q!{$_q#V$_q#a$_q#b$_q#i$_q#p$_q#t$_q#v$_q$R$_q$T$_q$Y$_q$Z$_q$`$_q$e$_q$g$_q$h$_q$k$_q$m$_q$o$_q$q$_q$s$_q$u$_q$w$_q${$_q$}$_q%U$_q%_$_q%`$_q%a$_q%c$_q%e$_q%g$_q%l$_q%o$_q%v$_q%|$_q&m$_q&r$_q&s$_q'Q$_q'R$_q'V$_q'Y$_q'a$_q'b$_q(k$_q(p$_q(r$_q)Q$_q)T$_q)V$_q)W$_q)Y$_q)Z$_q)]$_q)i$_q)j$_q!U$_q~O)Y6eO~OPmO]$fOb!]Om:|O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)T$lO)W$lO)Y6gO)Z!ZO)]XO)icO)jdO~P&?sO(v6iO)k*sO~P)+cO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y6gO)Z#}O~P#3zO[6kO~P!(zO)Y6oO~O)Y6pO~O]-ZOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO(r-VO)T-WO~O]&dO!V2vO!h%Oa)Y%Oa[%Oa~O!W6vO)T6wO~P$%pO!h2wO)Y)va~O[6zO]&dO!V2vO~O!TxO$`!iO$e!jO$g!kO$h!lO$k-cO$m!nO$o!oO$q!pO$s!qO$u!rO$w!sO$}!uO(r:oOe$Xq!o$Xq!{$Xq#i$Xq#p$Xq#t$Xq#v$Xq$R$Xq$T$Xq$Y$Xq$Z$Xq${$Xq%U$Xq%c$Xq%g$Xq%o$Xq%|$Xq(k$Xq)V$Xq!U$Xq$c$Xq~P$0kOPmO]$fOb!]Om:|O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;OO)QYO)T$lO)W$lO)Y6|O)Z!ZO)]XO)icO)jdO~P&?sO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y7PO)Z#}O~P#3zO)Y7QO~OP7RO(pQO~Om*]O)Y)_X~P$GQOq&gOm(}X)Y)_X~P$GQO)Y7TO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O)Y&Sa~P#3zO!U7VO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO)Y7WO~OPmO]$fOb!]Om:}O|#RO!V$gO!X!XO!Y!WO!i!YO#V#QO#a#VO#b#TO%_#ZO%`#[O%a#YO%e#UO%l#SO%v$nO&m!RO&r#WO&s!TO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r;VO)QYO)T$lO)W$lO)Z0oO)]XO)icO)jdO[)eP~P&?sO!h3qO)Z7[O!T)`a~O!h3qO!T)`a~O)Y7aO)k7cO~P(&eO)Y7eO~PGVO]3{Om(|Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!{!dO!|%SO%v$nO&r#WO(r({O)T3xO)V3|O)W3|O~O)T7iO~O]&dO!T*rO!V7kO!h7lO#v!eO(v4PO~O)Y7aO)k7nO~P)FwO]3{Om(|O!{!dO%v$nO&r#WO(r({O)T3xO)V3|O)W3|O~Oq&gO])dX!T)dX!V)dX!h)dX#v)dX(v)dX)Y)dX)k)dX[)dX~O)Y7aO~O!T(RO!l7tO(v(QO])Oie)Oim)Ois)Oit)Oiu)Oiv)Oiw)Oix)Oiy)Oiz)Oi!O)Oi!V)Oi!r)Oi!s)Oi!t)Oi!u)Oi!v)Oi!x)Oi!{)Oi%v)Oi&r)Oi&s)Oi(r)Oi)T)Oi)V)Oi)W)Oi)Y)Oi[)Oi!X)Oi!Y)Oi![)Oi!^)Oi!_)Oi!a)Oi!b)Oi!e)Oi!f)Oi!h)Oi(u)Oi(w)Oi(x)Oi)U)Oi)X)Oi)Z)Oi!g)Oi)k)Oi!W)OiQ)Oi!d)Oi!U)Oi#v)Oi~O(r%oO!U(fX!h(fX~O!h4YO!U*Ra~Oq&gO]*Qae*Qam*Qas*Qat*Qau*Qav*Qaw*Qax*Qay*Qaz*Qa!O*Qa!T*Qa!V*Qa!r*Qa!s*Qa!t*Qa!u*Qa!v*Qa!x*Qa!{*Qa%v*Qa&r*Qa&s*Qa(r*Qa)T*Qa)V*Qa)W*Qa)Y*Qa[*Qa!X*Qa!Y*Qa![*Qa!^*Qa!_*Qa!a*Qa!b*Qa!e*Qa!f*Qa!h*Qa(u*Qa(w*Qa(x*Qa)U*Qa)X*Qa)Z*Qa!g*Qa)k*Qa!W*QaQ*Qa!d*Qa(v*Qa!U*Qa#v*Qa~O!T([O]&kqe&kqm&kqs&kqt&kqu&kqv&kqw&kqx&kqy&kqz&kq!O&kq!V&kq!r&kq!s&kq!t&kq!u&kq!v&kq!x&kq!{&kq%v&kq&r&kq&s&kq(r&kq)T&kq)V&kq)W&kq)Y&kq[&kq!X&kq!Y&kq![&kq!^&kq!_&kq!a&kq!b&kq!e&kq!f&kq!h&kq(u&kq(w&kq(x&kq)U&kq)X&kq)Z&kq!g&kq)k&kq!W&kqQ&kq!d&kq(v&kq!U&kq#v&kq~OPmOb%ROm:{O!T$XO!i!YO#V#QO%_#ZO%`#[O%a#YO%v$nO'Q!WO'R!WO'V#XO'Y![O'a![O'b![O(pQO(r$yO)]XO)icO)jdO~O]*Vi!V*Vi!X*Vi!Y*Vi![*Vi!^*Vi!_*Vi!a*Vi!b*Vi!e*Vi!f*Vi!h*Vi(u*Vi(w*Vi(x*Vi)T*Vi)U*Vi)V*Vi)W*Vi)X*Vi)Y*Vi)Z*Vi!g*Vi)k*Vi[*Vi!W*Vi(v*Vi!U*ViQ*Vi!d*Vi~P*&WO[7yO~O!W7zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^q)Y'^q!g'^q)k'^q['^q!W'^q(v'^q!U'^qQ'^q!d'^q~P#3zO!h7{O[*ZX~O[7}O~O*X8OO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h_y)Y_y!g_y)k_y[_y!W_y(v_y!U_yQ_y!d_y~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O[(ha!h(ha~P#3zO]$OO!T$XO!V'Zy!X'Zy!Y'Zy!['Zy!^'Zy!_'Zy!a'Zy!b'Zy!e'Zy!f'Zy!h'Zy(u'Zy(w'Zy(x'Zy)T'Zy)U'Zy)V'Zy)W'Zy)X'Zy)Y'Zy)Z'Zy!g'Zy)k'Zy['Zy!W'Zy(v'Zy!U'ZyQ'Zy!d'Zy~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!h'^y)Y'^y!g'^y)k'^y['^y!W'^y(v'^y!U'^yQ'^y!d'^y~P#3zO]&dO!V+lO!T%uy#v%uy)Y%uy)k%uy~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U(Ua!h(Ua~P#3zO!W4yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U#}i!h#}i~P#3zO!U8QO~P&6yO!W8QO~P&6yO[8QO~P&6yO[8SO~P&6yO]&dO!V&cO[#Qy!T#Qy!h#Qy#v#Qy)Y#Qy)k#QyQ#Qy!d#Qy(v#Qy~O]&dO!V+lO[rqQrq!drq!hrq)Zrq)Yrq~O]&dOQ#Pi!d#Pi!h#Pi[#Pi~O!V+lO~P*9jOQ#nX!d#nX!h#nX[#nX~P(DjO!V&cO~P*9jOQ(OX](OXe'qXm'qXs(OXt(OXu(OXv(OXw(OXx(OXy(OXz(OX!V(OX!d(OX!h(OX!{'qX%v'qX(r'qX)T(OX)V(OX)W(OX[(OX~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ#_i!d#_i!h#_i[#_i~P#3zO&r#WO&s$xOQ#fi!d#fi!h#fi~O(r-VO)Z1ZO)k1YOQ#`X!d#`X!h#`X~O!W8XO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W8XO~P!(zO!T#qi!x#qi#v#qi(v#qi)k#qi[#qi!h#qi)Y#qiQ#qi!d#qi)Z#qi~O]&dO!V+lO~P*?fO]&ZO!V&XO&r#WO&s$xO)T&WO)V&[O)W&[O~P*?fO[8ZO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!h8[O[)pX~O[8^O~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ*UX!d*UX!h*UX~P#3zO)Z8aOQ*TX!d*TX!h*TX~O)Y8cO~O[$bi!h#{a)Y#{a~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y8fO)Z#}O~P#3zO[8hO~P!(zO[8hO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[8hO~O]&dO!V&cO(v8nO~O)Y8oO~O]&dO!V2vO!h%Oi)Y%Oi[%Oi~O!W8rO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W8rO)T8tO~P$%pO!W8rO~P!(zO]&dO!V2vO!h(Ya)Y(Ya~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y8uO)Z#}O~P#3zO)Y2jO~P!(zO)Y8uO~OP%pO[8vO(pQO~O[8vO~O)Y8wO~P%%eO#T8zO(x.QO)Y8xO~O!h3qO!T)`i~O)Z9OO!T'wa!h'wa~O)Y9QO)k9SO~P)FwO)Y9QO~O)Y9QO)k9WO~P(&eOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~P)GgO]&dO!V7kO!T!ya!h!ya#v!ya(v!ya)Y!ya)k!ya[!ya~O!W9_O)T9`O~P$%pO!T$XO!h7lO(v4PO)Y9QO)k9WO~O!T$XO~P#EfO[9cO]&dO!V7kO~O]&dO!V7kO!T&aa!h&aa#v&aa(v&aa)Y&aa)k&aa[&aa~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O)Y&ba~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y9QO)Z#}O~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U&oi!h&oi~P#3zO!V/OO]']i!T']i!X']i!Y']i![']i!^']i!_']i!a']i!b']i!e']i!f']i!h']i(u']i(w']i(x']i)T']i)U']i)V']i)W']i)X']i)Y']i)Z']i!g']i)k']i[']i!W']i(v']i!U']iQ']i!d']i~O(r%oO)Z9fO~O!h7{O[*Za~O[9hO~P&6yO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O!U(Ua)Y#Zi~P#3zO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}OQ#_q!d#_q!h#_q[#_q~P#3zO&r#WO&s$xOQ#fq!d#fq!h#fq~O)k5kOQ#`a!d#`a!h#`a~O]&dO!V+lO!T#qq!x#qq#v#qq(v#qq)k#qq[#qq!h#qq)Y#qqQ#qq!d#qq)Z#qq~O!h8[O[)pa~O)V5}O]&Vi!T&Vi!V&Vi)T&Vi)U&Vi)W&Vis&Vit&Viu&Viv&Viw&Vix&Viy&Viz&Vi!l&Vi!x&Vi#T&Vi#V&Vi#p&Vi#v&Vi(v&Vi(x&Vi)k&Vib&Vie&Vim&Vi|&Vi!O&Vi!o&Vi!r&Vi!s&Vi!t&Vi!u&Vi!v&Vi!{&Vi#a&Vi#b&Vi#i&Vi#t&Vi${&Vi%c&Vi%e&Vi%k&Vi%l&Vi%o&Vi%v&Vi&m&Vi&r&Vi&s&Vi(r&Vi)Q&Vi)Y&Vi[&Vi!h&ViQ&Vi!d&Vi~O)Y9kO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O[$bq!h#{i)Y#{i~P#3zO[9mO~P!(zO[9mO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[9mO~O]&dO!V&cO(v9pO~O[9qO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[9qO~O]&dO!V2vO!h%Oq)Y%Oq[%Oq~O!W9uO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W9uO~P!(zO)Y6gO~P!(zO)Y9vO~O)Y9wO~O(x.QO)Y9wO~O!h3qO!T)`q~O)Z9yO!T'wi!h'wi~O!T$XO!h7lO(v4PO)Y9zO)k9|O~O)Y9zO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y9zO)Z#}O~P#3zO)Y9zO)k:PO~P)FwO]&dO!V7kO!T!yi!h!yi#v!yi(v!yi)Y!yi)k!yi[!yi~O!W:TO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W:TO)T:VO~P$%pO!W:TO~P!(zO]&dO!V7kO!T(da!h(da(v(da)Y(da)k(da~O[:XO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O!h#jO(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[:XO~O[:^O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[:^O~O]&dO!V2vO!h%Oy)Y%Oy[%Oy~O)Y:_O~O)Y:`O~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y:`O)Z#}O~P#3zO!T$XO!h7lO(v4PO)Y:`O)k:cO~O]&dO!V7kO!T!yq!h!yq#v!yq(v!yq)Y!yq)k!yq[!yq~O!W:eO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO!W:eO~P!(zO[:gO!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Z#}O~P#3zO[:gO~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y:iO)Z#}O~P#3zO)Y:iO~O]&dO!V7kO!T!yy!h!yy#v!yy(v!yy)Y!yy)k!yy[!yy~O!Y#rO![#sO!^#vO!_#wO!a#yO!b#zO!e#zO!f#{O(u#gO)T#nO)U#pO)V#oO)W#qO)X#iO)Y:mO)Z#}O~P#3zO)Y:mO~O]ZXmhXqZXqjX!TjX!VZX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX(uZX(v$]X(wZX(xZX)TZX)UZX)VZX)WZX)XZX)YZX)ZZX)kZX~O]%WXmnXqoXq%WX!ToX!V%WX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!e%WX!f%WX!gnX!h%WX(u%WX(w%WX(x%WX)T%WX)U%WX)V%WX)W%WX)X%WX)Z%WX)knX[%WXQ%WX!d%WX~O)Y%WX!W%WX(v%WX!U%WX~P+GrO]oX]%WXeoXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!VoX!V%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX[oX[%WX!hoX)ZoX~O)YoX)koX~P+JSO]%WXmnXqoXq%WX!V%WX!h%WXQ%WX!d%WX[%WX~O!T%WX#v%WX)Y%WX)k%WX(v%WX~P+LmOQoXQ%WX!ToX!X%WX!Y%WX![%WX!^%WX!_%WX!a%WX!b%WX!doX!d%WX!e%WX!f%WX!gnX!h%WX(u%WX(w%WX(x%WX)T%WX)U%WX)V%WX)W%WX)X%WX)Z%WX)knX~P+JSO]oX]%WXmnXqoXq%WXsoXtoXuoXvoXwoXxoXyoXzoX!OoX!V%WX!roX!soX!toX!uoX!voX!xoX!{oX%voX&roX&soX(roX)ToX)VoX)WoX~O!ToX(voX)YoX)koX~P, eOeoX!VoX)Y%WX~P, eOmnXqoX)Y%WX~Oe)pO%Y)qO(y:pO~Oe)pO%Y)qO(y:uO~Oe)pO%Y)qO(y:qO~Oe$SO%Y*UO'[$UO'_$VO(y:pO~Oe$SO%Y*UO'[$UO'_$VO(y:rO~Oe$SO%Y*UO'[$UO'_$VO(y:tO~O[jX]jXsjXtjXujXvjXwjXxjXyjXzjX!VjX&rjX&sjX)TjX)VjX)WjXejX!OjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX(rjX~P#1jO]ZXmhXqZXqjX!VZX!hZX)YZX)kZX~O!TZX#vZX(vZX~P,'{OmhXqjX)QjX)YZX)kjX~O]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VZX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX[ZX[jX!hjX)ZjX)kjX~O)YZX~P,)VO]ZX]jXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!TjX!VZX!VjX!XZX!YZX![ZX!^ZX!_ZX!aZX!bZX!eZX!fZX!gZX!hZX!hjX&rjX&sjX(uZX(wZX(xZX)TZX)TjX)UZX)VZX)VjX)WZX)WjX)XZX)ZZX)ZjX)kZX~OQZXQjX!dZX!djX~P,+pO]jXejXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX~P#1jO]ZX]jXejXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!VZX!VjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX)TjX)VjX)WjX~O)YjX~P,0rO[ZX[jXejX!OjX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX(rjX)kjX~P,+pO]ZX]jXmhXqZXqjXsjXtjXujXvjXwjXxjXyjXzjX!OjX!TjX!VZX!rjX!sjX!tjX!ujX!vjX!xjX!{jX%vjX&rjX&sjX(rjX(vjX)TjX)VjX)WjX)YjX)kjX~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~PBUOe$SO%Y*UO(y:pO~Oe$SO%Y*UO(y:qO~Oe$SO%Y*UO(y:wO~Oe$SO%Y*UO(y:vO~O]%iOe!POm%cOs!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O!V%lO!{!dO!|%SO%v$nO(r$yO)T;bO)V;cO)W;cO~O]%iOe!POm%cO!V%lO!{!dO%v$nO(r$yO)T;bO)V;cO)W;cO~Oe$SO%Y$TO(y:qO~Oe$SO%Y$TO(y:uO~Om:zO~Om:yO~O]dXmhXqjX!TdX~Oe)pO%Y*UO(y:pO~Oe)pO%Y*UO(y:qO~Oe)pO%Y*UO(y:rO~Oe)pO%Y*UO(y:sO~Oe)pO%Y*UO(y:tO~Oe)pO%Y*UO(y:vO~Oe)pO%Y*UO(y:wO~Os!^Ot!^Ou!^Ov!^Ow!^Ox!^Oy!^Oz!^O~P,9OO](}Xs(}Xt(}Xu(}Xv(}Xw(}Xx(}Xy(}Xz(}X!O(}X!r(}X!s(}X!t(}X!u(}X!v(}X!x(}X!{(}X%v(}X&r(}X&s(}X(r(}X)T(}X)V(}X)W(}X)k(}X~Om:yO!T(}X(v(}X)Y(}X~P,<}O]&wXmnXqoX!T&wX~Oe4lO%Y*UO(y;uO~Om;]O)T;yO)V5bO)W5bO~P(ElOe!POm%cO!{!dO%v$nO(r$yO~O]1TO!V1RO)T0{O)V;zO)W;zOQ#nX!d#nX!h#nX[#nX~P,?yO)T;ZO~Om;iO~Om;jO~Om;kO~Om;mO~Om;nO~Om;oO~Om;mO!T$XOQ(}X!d(}X!h(}X)Z(}X[(}X)k(}X~P$GQOm;kO!T$XO~P$GQOm;iO!g$ZO)k$ZO~Om;kO!g$ZO)k$ZO~Om;mO!g$ZO)k$ZO~Om;jO[(}X!h(}X)Z(}X)k(}X~P$GQOe/_O%Y*UO(y;uO~Om;vO~O)T<ZO~OV'e'h'i'g(p)]!R(rST%Z!Y!['je%[!i'R!f]'f*['k(w!^!_'l'm'l~\",goto:\"%7`*[PPPPPP*]P*`PP.UPP4j7k7k:uP:u>PP>j>|?bFYMY!&^!,tP!3n!4c!5WP!5rPPPPPPPP!6]P!7uP!9W!:pP!:vPPPPPP!:yP!:yPP!:yPP!;VPPPPPP!=X!@oP!@rPP!A`!BTPPPPP!BXP>m!CjPP>m!Eq!Gr!HQ!Ig!KWP!KcP!Kr!Kr# S#$c#%y#)V#,a!Gr#,kPP!Gr#,r#,x#,k#,k#,{P#-P#-n#-n#-n#-n!KWP#.X#.j#1PP#1eP#3QP#3U#3^#4R#4^#6l#6t#6t#3UP#3UP#6{#7RP#7]PP#7x#8g#9X#7xP#9y#:VP#7xP#7xPP#7x#7xP#7xP#7xP#7xP#7xP#7xP#7xP#:Y#7]#:vP#;]P#;r#;r#;r#;r#<P#3UP#<g#Ac#BQPPPPPPPP#BxP#CWP#CWP#Cd#Fq#;RPP#CQ#GTP#Gh#Gs#Gy#Gy#CQ#HoP#3U#3U#3U#3U#3UP!Kr#IZ#Ib#Ib#Ib#If!N|#Ip!N|#It!HQ!HQ!HQ#Iw#Na!HQ>m>m>m$%Y!BT!BT!BT!BT!BT!BT!6]!6]!6]$%mP$'Y$'h!6]$'nPP!6]$)|$*P#Bo$*S:u7k$-Y$/T$0t$2d7kPP7k$4W7kP7k7kP7kP$7^7kP7kPP7k$7jPPPPPPPPP*]P$:r$:x$=a$?g$?m$@T$@_$@j$@y$AP$B_$C^$Ce$Cl$Cr$Cz$DU$D[$Dg$Dm$Dv$EO$EZ$Ea$Ek$Eq$E{$FS$Fc$Fi$FoP$Fu$F}$GU$Gd$IQ$IW$I^$Ie$InPPPPPPPP$It$IxPPPPP%!z$)|%!}%&V%(_PP%(l%(oPPPPPPPPPP%({%*O%*U%*Y%,P%-^%.P%.W%0g%0mPPP%0w%1S%1V%1]%2d%2g%2q%2{%3P%4T%4v%4|#BxP%5g%5w%5z%6[%6h%6l%6r%6x$)|$*P$*P%6{%7OP%7Y%7]R#cP'`mO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gU%pm%q7RQ&n!`Q(k#]d0Q*O/}0O0P0S5O5P5Q5T8RR7R3Ub}Oaewx{!g&T*r&v$j[!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0|1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gS%af0i#d%kgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZS%rm!YS&v!h#PQ'^!tQ'h!yQ'i!zQ(k#`Q(l#]Q(m#^Q*y%lQ,X&mQ,^&oQ-T'_Q-e'gQ-l'rS.s([4YQ/g)hQ0f*nQ2R,]Q2Y,dQ3P-fQ4c.}Q4g/UQ5g1OQ6]2UQ7O3QQ8b6[Q9f7{R;[1R$|#hS!]$z%R%U%[&k&l'R'Y'['b'd(b(f(i(x(y)S)T)U)V)W)X)Y)Z)[)])^)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:jQ&q!dQ(h#ZQ(t#bQ)k$U[*t%f*X0l2a2h2|Q,_&pQ/P(gQ/T(lQ/[(uS/j)j/QQ0s+RS4r/k/lR8P4s'a![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g'a!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ)P#lS+R%z0tQ/s)tk4O.h3t3x3{3|7d7f7g7i7l9Y9Z:SQ)R#lk3}.h3t3x3{3|7d7f7g7i7l9Y9Z:Sl)Q#l.h3t3x3{3|7d7f7g7i7l9Y9Z:ST+R%z0t[UOwx!g&T*rW$a[e$f(c#l$q_!f!u!}#R#S#T#U#V#Z$T$U$m%V&V&Z&d&n'`(O(Q(V(_(h)k)q+]+b+c+u+z,Y,l,{-R-p-u.X.Y.`.a.e.r.v1U1Y1g1l1n2m3]3^3_3q3u5k6O6Q7]8[![%dg$h%e%j&t*Z*u+^,m,w-`0{1P2`;X;Y;Z;b;c;p;q;r;s;w;x;z<X<Y<ZY%tnp%x-q.gl(}#l.h3t3x3{3|7d7f7g7i7l9Y9Z:SS;f'u-xU;g(R.n.p&|;|af{|!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l$}%O%T%^%i%n&R&X&c&z&}'P'j'k'v'z(a(j)m)s*a*c*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0^0i0z0|1R1b1c1m1q1{2d2j2k2v4P4S4X4b5Z5b5f5r6`6d6g6h6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g;a;yQ;}1Td<O&y'Q'c,x-^-_-b2g2{3OW<P&g*w1}3jQ<Q#O[<R!t'_'g,]2U6[T<^%z0t[VOwx!g&T*rW$b[e$f(cQ$q.v!j$r_!f!u!}#V#Z$T$U$m%V&V&Z&d&n'`(h)k)q+]+b+u,Y,l,{-R-p.e1U1Y1g1l1n2m3u5k8[&^${af{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g![%dg$h%e%j&t*Z*u+^,m,w-`0{1P2`;X;Y;Z;b;c;p;q;r;s;w;x;z<X<Y<ZY%tnp%x-q.gQ's#O|'}#R#S#T#U(O(Q(V(_+c+z.X.Y.`.a.r3]3^3_3q6O6Q7]l(}#l.h3t3x3{3|7d7f7g7i7l9Y9Z:SS-o'u-xQ3X-uU;t(R.n.pn;||$}%O%T%i'v*a*c0^0z2k5b6h;a;y[<R!t'_'g,]2U6[W<S&g*w1}3jd<T&y'Q'c,x-^-_-b2g2{3OQ<[1TT<^%z0t!Q!UO[ewx!g$f&T&g&y'Q'c(c*r*w,x-^-_-b1}2g2{3O3j!v$u_!f!u!}#O#V#Z$T$U$m%V&V&Z&d&n'`'u(R(h)k)q+]+u,Y,l,{-R-p-x.e.n.p1T1U1Y1g1l1n2m3u5k8[&^%Qaf{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g$Q%mgnp|#l$h$}%O%T%e%i%j%x%z&t'_'g'v*Z*a*c*u+^,],m,w-`-q.g.h0^0t0z0{1P2U2`2k3t3x3{3|5b6[6h7d7f7g7i7l9Y9Z:S;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZQ']!tz(P#R#S#T#U(O(Q(V(_+z.X.Y.`.a.r3]3^3_3q6O6Q7]f-['a-U-W-Z2q2r2t2w6r6s8qQ1X+bQ1[+cQ2l,zQ3Y-uQ4].vQ5m1ZR8W5n!Q!UO[ewx!g$f&T&g&y'Q'c(c*r*w,x-^-_-b1}2g2{3O3j!x$u_!f!u!}#O#V#Z$T$U$m%V&V&Z&d&n'`'u(R(h)k)q+]+b+u,Y,l,{-R-p-x.e.n.p1T1U1Y1g1l1n2m3u5k8[&^%Qaf{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g$S%mgnp|!t#l$h$}%O%T%e%i%j%x%z&t'_'g'v*Z*a*c*u+^,],m,w-`-q.g.h0^0t0z0{1P2U2`2k3t3x3{3|5b6[6h7d7f7g7i7l9Y9Z:S;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Z|(P#R#S#T#U(O(Q(V(_+c+z.X.Y.`.a.r3]3^3_3q6O6Q7]Q3Y-uR4].v[WOwx!g&T*rW$c[e$f(c#l$q_!f!u!}#R#S#T#U#V#Z$T$U$m%V&V&Z&d&n'`(O(Q(V(_(h)k)q+]+b+c+u+z,Y,l,{-R-p-u.X.Y.`.a.e.r.v1U1Y1g1l1n2m3]3^3_3q3u5k6O6Q7]8[![%dg$h%e%j&t*Z*u+^,m,w-`0{1P2`;X;Y;Z;b;c;p;q;r;s;w;x;z<X<Y<ZY%tnp%x-q.gl(}#l.h3t3x3{3|7d7f7g7i7l9Y9Z:SS;f'u-xU;g(R.n.pn;||$}%O%T%i'v*a*c0^0z2k5b6h;a;yQ;}1TQ<Q#O[<R!t'_'g,]2U6[&^<Uaf{!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$g$l%^%n&R&X&c&z&}'P'j'k'z(a(j)m)s*i*j*m*s+X+Z+i+k+l,Q,S,o,r-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{2d2j2v4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gd<V&y'Q'c,x-^-_-b2g2{3OW<W&g*w1}3jT<^%z0tp$QT$`$p%c%s(|:{:|:};];^;_;`;d;e<]o)n$W*V*]/`:x:y:z;i;j;k;l;m;n;o;vp$RT$`$p%c%s(|:{:|:};];^;_;`;d;e<]o)o$W*V*]/`:x:y:z;i;j;k;l;m;n;o;v^&f}!O$j$k%a%k;[d&j!U$u%Q%m'](P1X1[3Y4]V/b)P)Q4OS%Ze$fQ,U&gQ.|(cQ2n-RQ5z1nQ6W1}Q6n2mR9i8[#}!TO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[#[^O[_`wx!f!g!}#O$T$e$m$t$v&T&V&Z&d&n&s&y'Q'c'u(R)q*^*r*w+],Y,l,x,{-^-_-b-p-u-x.e.n.p1T1U1g2g2{3O3j3u_(V#R#S#T+c3]3^3_#}ZO[wx!g!k#R#S#T%n&T&V&Z&d&n&x&y&z&}'P'Q']'c'u'y(O(Q(R(V*r*w+]+c,Y,i,l,r-Q-^-_-b-p-u-x-{.`.e.n.r1T1U1g2d2l2{3O3]3^3_3j6d6k8h9m9q:X:^:gQ$^YR0U*PR*R$^e0Q*O/}0O0P0S5O5P5Q5T8R$f#zS%U%['R'Y'['b'd(i(x(y)S)V)W)X)Y)Z)[)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:je0Q*O/}0O0P0S5O5P5Q5T8R'`!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:ge0Q*O/}0O0P0S5O5P5Q5T8RR5U0U^(U#R#S#T+c3]3^3_Y.^(O(S(V(W7UU3l.[._.rS7Y3m4WR9d7t^(T#R#S#T+c3]3^3_[.](O(S(U(V(W7UW3k.[.^._.rU7X3l3m4WS8{7Y7tR:W9dT.l(R.nd]Owx!g&T'u(R*r-x.n!v^[_`!f!}#O$T$e$m$t$v&V&Z&d&n&s&y'Q'c)q*^*w+],Y,l,x,{-^-_-b-p-u.e.p1T1U1g2g2{3O3j3uQ%unT1v,O1w!jbOaenpwx{|!g#O$}%O%T%i%x&T'u'v(R*a*c*r-q-x.g.n.p0^0z1T2k5b6h;a;yf-X'a-U-W-Z2q2r2t2w6r6s8qj3y.h3t3x3{3|7d7f7g7i7l9Y9Z:Sr;{g$h%e%j&t*Z*u,m,w-`2`;X;Y;Z;p;r;wi<_+^0{1P;b;c;q;s;x;z<X<Y<Z!O&_y%Y&W&Z&['l)i*e*g+^+f+y/n0_0z0{1P1T1k5b5w;y;zz&bz%P%X%f&e't*X*`,c-y0[0]0l0}2a2h2|5W5c6m8jS'|#Q.Yn+m&Y*h+g+n+q-k/i0`1S1_4u5X5a5v8YQ2X,b^2u-Y2s2y6q6x8p9te7j3z7`7h7p7q9V9X9a:R:dS+_&V1UY+o&Z&d*w1T3jR5t1g#w!POaegnpwx{|!g#O$h$}%O%T%e%i%j%x&T&t'u'v(R*Z*a*c*r*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Z`oOwx!g&T'u*r-x#U!Paeg{|#O$h$}%O%T%e%i%j&t'v*Z*a*c*u+^,m,w-`0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZU%wnp-qQ+O%xS.f(R.nT3w.g.pW+s&_+m+t1dV+{&b+|7jQ+y&aU+{&b+|7jQ-x'uT.T'z.V'`![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gX1s+z.Y6O6Q'W!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gW1s+z.Y6O6QR2f,t!WjO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gY%We$f(c1q3jQ'T!nS(z#j5ZQ,n&yQ,y'QS.P'z.VQ2c,oQ6l2jQ6}3OQ8i6gR9n8f'W![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gX1s+z.Y6O6Q'ayO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l+z,Q,S,o,r,x-^-_-b-h.Q.R.V.Y/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6O6Q6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ&ayS'u#O-vR1]+dS+_&V1UR5o1]Q1Q+^R5h1PR1Q+^T+_&V1Uz&]%Y&W&Z&['l)i*e*g+^+f/n0_0z0{1P1T1k5b5w;y;zQ&^yR1o+y!P&]y%Y&W&Z&['l)i*e*g+^+f+y/n0_0z0{1P1T1k5b5w;y;zQ+v&_S+}&b7jS1e+m+tQ1u+|R5s1d!WkO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gS%{o.fS&Pq-sQ&`yQ&r!eQ'f!yQ*q%fU*|%w%|3wS+Q%y&OQ+r&^Q,Z&nS,[&o'hQ,s&|S0Y*X,cS0p*}+OQ0r+PQ1p+yS2T,^-gQ5V0[Q5[0qQ5|1oQ6Z2SQ6^2XQ7o3zQ9T7`R:Q9V[uOwx!g&T*rQ,Z&nQ-w'uQ3Z-uR3`-xxlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gU$i[&}-_S%{o.fS&Pq-sQ*q%fU*|%w%|3wS+Q%y&OS0Y*X,cS0p*}+OQ0r+PQ5V0[Q5[0qQ7o3zQ9T7`R:Q9VT,`&r,a]uOwx!g&T*r[uOwx!g&T*rQ,Z&nQ,o&yQ,x'QW-a'c-^-b2{Q-w'uQ3Z-uQ3`-xR6|3O[%gg$h,m,w-`2`R0m*u^$YV!U$b${%Q<S<TQ'T!nS)a$O*wS)w$X*rQ)z$ZY*t%f*X0l2h2|Q/P(gS/j)j/QS0b*i4bS0k*s6`Q0s+RQ4R.hQ4o/dS4r/k/lS4w/o5ZQ4|/vQ6a2aU7b3t3z4SQ8P4sQ8l6iY9R7`7c7d7m7nQ9s8nW9{9P9S9V9WQ:[9pU:b9|:O:PR:k:cS)w$X*rT4w/o5ZZ)u$X)v*r/o5ZQ&x!hR'y#PS,h&w'wQ2],fR6_2[xlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gV$i[&}-_!XkO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:g!WhO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gR'X!q!WkO[wx!g!k%n&T&z&}'P'c*r,r-^-_-b2d2{6d6k8h9m9q:X:^:gR,o&yQ&z!iQ&|!jQ'P!lR,r&{R,p&yxlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gX-a'c-^-b2{[uOwx!g&T*rQ,{'QQ-w'uS.l(R.nR3`-x[uOwx!g&T*rQ,{'QW-a'c-^-b2{T.l(R.ng-['a-U-W-Z2q2r2t2w6r6s8qylOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gb!OOaewx{!g&T*r&|$k[f!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g#d%kgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<ZQ'^!tQ-T'_Q-e'gQ2R,]Q6]2UR8b6[j$ST$`%c%s:{:|:};];^;_;`;d;ei)p$W*V:x:y:z;i;j;k;l;m;n;oj$ST$`%c%s:{:|:};];^;_;`;d;eh)p$W*V:x:y:z;i;j;k;l;m;n;oS/_(|<]V4l/`/a;v[uOwx!g&T*rQ-w'uR3`-x[uOwx!g&T*rT.l(R.n'`!YO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gR7S3U[uOwx!g&T*rQ-w'uS.l(R.nR3`-x[pOwx!g&T*rQ%xnS-q'u-xT.g(R.nS%|o.fS*}%w3wR0q+OQ+S%zR5^0tS%{o.fS&Pq-sU*|%w%|3wS+Q%y&OS0p*}+OQ0r+PQ5[0qQ7o3zQ9T7`R:Q9V`qOwx!g&T(R*r.nS%yn-qU&Op.g.pQ+P%xT-s'u-xS'{#Q.YR.Z'|T.S'z.VS.T'z.VQ8y7VR9x8zT6O1r8`R6Q1r#d!Pgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Zb!QOaewx{!g&T*r&}![[f!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g#d!Pgnp|#O$h$}%O%T%e%i%j%x&t'u'v(R*Z*a*c*u+^,m,w-`-q-x.g.n.p0^0z0{1P1T2`2k5b6h;X;Y;Z;a;b;c;p;q;r;s;w;x;y;z<X<Y<Zb!QOaewx{!g&T*r&|![[f!W!X!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{#|$O$V$X$Z$f$g$l%^%n&R&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X4b5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gk3}.h3t3x3{3|7d7f7g7i7l9Y9Z:SQ4R.hS7b3t3zU9R7`7d7mS9{9P9VR:b:O#|!TO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[R4^.vQ(^#US.w(](_S4_.x.yR7x4`Q.t([R7v4Y#|!TO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[p$x`$e$t%Y&s'a(`(g)j*e-U/l1k5l5w8Vq)O#l%z.h0t3t3x3{3|7d7f7g7i7l9Y9Z:SR,V&gR6X1}'X!VO[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:g$q#sS%U%['R'Y'['b'd(b(f(i(x(y)S)T)V)W)X)Y)Z)[)])^)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j$]#tS%U%['R'Y'['b'd(i(x(y)S)W)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j$Z#uS%U%['R'Y'['b'd(i(x(y)S)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j$c#xS%U%['R'Y'['b'd(i(x(y)S)V)W)X)Y)_)`)l)r)y+Y+h,P,T,k,v-i-j-}.z/q0a0c0h0j0x1a1z2b2i3S3d3e4d4e4k4n4t4v4z4{5e5q5x6V6f6j6t6{7r7s7u8T8U8d8g8k8s9U9]9l9r9}:U:Z:a:j'X![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/]/d/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ/Q(gQ/k)jQ4s/lR9e7z']![O[aefwx{!W!X!g!k!n!r!s!v!x#X#Y#[#g#j#m#r#s#t#u#v#w#x#y#z#{$O$V$X$Z$f$g$l%^%n&R&T&X&c&g&y&z&}'P'Q'c'j'k'z(a(c(j)m)s*i*j*m*r*s*w+X+Z+i+k+l,Q,S,o,r,x-^-_-b-h.Q.R.V/O/R/]/d/m/o/t/v0i0|1R1b1c1m1q1{1}2d2g2j2v2{3O3j4P4S4X5Z5f5r6`6d6g6i6k6u6w6|7c7k7n8f8h8n8t8u9S9W9^9`9m9p9q9|:P:V:X:^:c:gQ#eQR(v#eU$}a;a;yb%Ve$f&g(c-R1n1}2m8[Q'`!u!Q*_$}%V'`*a*g+i,Q0^0_1c2q6r6u7f8q9Y9^:S;X;p;q;w;x<XS*a%O%TQ*g%YS+i&X1RQ,Q&cQ0^*cQ0_*eQ1c+lQ2q-WS6r2r2tQ6u2vQ7f3xQ8q6sS9Y7g7iQ9^7kQ:S9ZQ;X%eS;p;Y;ZS;q<Y<ZQ;w;rQ;x;sT<X0{;b[[Owx!g&T*rl$d[&}(O+],Y,i,l-Q-_-p-{.`.e.rl&}!k%n&z'P,r2d6d6k8h9m9q:X:^:g^(O#R#S#T+c3]3^3_`+]&V&Z&d*w1T1U1g3jS,Y&n-uQ,i&xU,l&y'Q3OS-Q']2lW-_'c-^-b2{S-p'u-xQ-{'yQ.`(QS.e(R.nR.r(VQ)}$]R/y)}Q0S*OQ5O/}Q5P0OQ5Q0PY5R0S5O5P5Q8RR8R5TQ*Q$^S0V*Q0WR0W*RS.a(Q.`S3o.a7]R7]3qQ3r.bS7Z3p3sU7_3r7Z8|R8|7[Q.n(RR4T.n!|_O[wx!f!g!}#O$T$m&T&V&Z&d&n&y'Q'c'u(R)q*r*w+],Y,l,x,{-^-_-b-p-u-x.e.n.p1T1U1g2g2{3O3j3uU$s_$v*^U$v`$e&sR*^$tU%Oa;a;yd*b%O*c2r6s7g9Z;Y;r;s<YQ*c%TQ2r-WQ6s2tQ7g3xQ9Z7iQ;Y%eQ;r;ZQ;s<ZT<Y0{;bS+|&b7jR1t+|S*k%[/qR0d*kQ1V+`R5j1VU+f&W0{;yR1^+fQ+t&_Q1d+mT1j+t1dQ8]5zR9j8]QwOS&Sw&TT&Tx*rQ,a&rR2W,aW)v$X*r/o5ZR/u)vU/p)r)w0hR4x/p[*v%f%g*X2a2h2|R0n*vQ,e&vR2Z,eQ-b'cQ2{-^T2}-b2{Q2x-YR6y2xQ-g'hQ2S,^T3R-g2SS%qm7RR*{%qdnOwx!g&T'u(R*r-x.nR%vnQ0u+SR5_0uQ.V'zR3g.VQ1w,OR6R1wU*o%a*y;[R0g*oS1h+o0oR5u1hQ7m3zQ9P7`U9b7m9P:OR:O9V$O!SO[_ewx!f!g!u!}#O#V#Z$T$U$f$m%V&T&V&Z&d&g&n&y'Q'`'c'u(R(c(h)k)q*r*w+]+b+u,Y,l,x,{-R-^-_-b-p-u-x.e.n.p.v1T1U1Y1g1l1n1}2g2m2{3O3j3u5k8[R&h!SQ4Z.tR7w4ZQ2O,VR6Y2OS/e)`)aR4p/eW(p#a(k(l/TR/X(pQ7|4gR9g7|T)b$O*w!USO[wx!g!k%n&T&z&}'P'c,r-^-_-b2d2{6d6k8h9m9q:X:^:gj$za{$l%^+k,S1b1{5r6w8t9`:VY%Ue$f(c1q3jY%[f$g(j)m*mQ&k!WQ&l!XQ'R!nQ'Y!rQ'[!sQ'b!vQ'd!xQ(b#XQ(f#YS(i#[+ZQ(x#gQ(y#jQ)S#mQ)T#rQ)U#sQ)V#tQ)W#uQ)X#vQ)Y#wQ)Z#xQ)[#yQ)]#zQ)^#{Q)_#|S)`$O*wQ)l$VQ)r$XQ)y$ZQ+Y&RS+h&X1RQ,P&cQ,T&gQ,k&yQ,v'QQ-i'jQ-j'kS-}'z.VQ.z(aS/q)s0iS0a*i4bQ0c*jQ0h*rQ0j*sQ0x+XS1a+i+lQ1z,QQ2b,oS2i,x6|Q3S-hQ3d.QQ3e.RQ4d/OQ4e/RQ4k/]Q4n/dQ4t/mQ4v/oQ4z/tQ4{/vQ5e0|Q5q1cQ5x1mQ6V1}S6f2g8uQ6j2jQ6t2vQ6{3OQ7r4PQ7s4SQ7u4XQ8T5ZQ8U5fQ8d6`Q8g6gQ8k6iQ8s6uS9U7c7nQ9]7kQ9l8fQ9r8nS9}9S9WQ:U9^Q:Z9pS:a9|:PR:j:cR,W&gd]Owx!g&T'u(R*r-x.n!v^[_`!f!}#O$T$e$m$t$v&V&Z&d&n&s&y'Q'c)q*^*w+],Y,l,x,{-^-_-b-p-u.e.p1T1U1g2g2{3O3j3u#r$|ae!u$f$}%O%T%V%Y%e&X&c&g'`(c*a*c*e*g+i+l,Q-R-W0^0_1R1c1n1}2m2q2r2t2v3x6r6s6u7f7g7i7k8[8q9Y9Z9^:S;X;Y;Z;a;b;p;q;r;s;w;x<X<Y<ZQ%unS+e&W+fW+s&_+m+t1dU+{&b+|7jQ1l+uT5d0{;y``Owx!g&T'u*r-xS$e[-pQ$t_b%Ye$f&g(c-R1n1}2m8[!h&s!f!}#O$T$m&V&Z&d&n&y'Q'c(R)q*w+],Y,l,x,{-^-_-b-u.e.n.p1T1U1g2g2{3O3j3uQ'a!uS(`#V+bQ(g#ZS)j$U(hQ*e%VQ-U'`Q/l)kQ1k+uQ5l1YQ5w1lR8V5kS(X#R3^S(Y#S3_V(Z#T+c3]R$_Ye0R*O/}0O0P0S5O5P5Q5T8RW(S#R#S#T+cQ(]#US.[(O(VS.b(Q.`Q.y(_W1s+z.Y6O6QQ3[-uQ3i.XQ3p.aQ4W.rU7U3]3^3_Q7^3qR8}7]Q.c(QR3n.`T.m(R.ndgOwx!g&T&n'u*r-u-xU$h[,Y-pQ&t!fQ'l!}Q'v#OQ)i$TQ*Z$m`+^&V&Z&d*w1T1U1g3jQ,m&yQ,w'QY-`'c-^-b2{3OS.h(R.nQ/n)qQ0z+]S2`,l-_S2k,x,{S3t.e.pQ6h2gR7d3ud]Owx!g&T'u(R*r-x.n!v^[_`!f!}#O$T$e$m$t$v&V&Z&d&n&s&y'Q'c)q*^*w+],Y,l,x,{-^-_-b-p-u.e.p1T1U1g2g2{3O3j3uR%unQ3z.hQ7`3tQ7h3xQ7p3{Q7q3|Q9V7dU9X7f7g7iQ9a7lS:R9Y9ZR:d:SZ+p&Z&d*w1T3jpzOnpwx!g%x&T'u(R*r-q-x.g.n.p[%Pa%e0{;a;b;yU%Xe%i1TQ%fg^&e{|%j1P5b;c;zQ't#OQ*X$hb*`$}%O%T;X;Y;Z<X<Y<ZQ,c&tQ-y'vQ0[*Z[0]*a*c;p;q;r;sQ0l*uQ0}+^Q2a,mQ2h,wS2|-`2`U5W0^;w;xQ5c0zQ6m2kR8j6hQ,O&bR9[7jS1r+z.YQ8_6OR8`6Q[%_f$g(j)m)s0iR0e*mR+a&VQ+`&VR5i1US&Yy+yQ*h%YU+g&W0{;yS+n&Z1TW+q&[1P5b;zQ-k'lQ/i)iS0`*e*gQ1S+^Q1_+fQ4u/nQ5X0_Q5a0zQ5v1kR8Y5wR5{1nYvOwx&T*rR&u!gW%hg,m,w-`T*Y$h2`T)x$X*r[uOwx!g&T*rQ'O!kQ*z%nQ,q&zQ,u'PQ2e,rQ6c2dQ8e6dQ8m6kQ9o8hQ:Y9mQ:]9qQ:f:XQ:h:^R:l:gxlOwx!g!k%n&T&z'P*r,r2d6d6k8h9m9q:X:^:gU$i[&}-_X-a'c-^-b2{Q-]'aR2p-US-Y'a-UQ2s-WQ2y-ZU6q2q2r2tQ6x2wS8p6r6sR9t8q[rOwx!g&T*rS-r'u-xT.i(R.nR+T%z[sOwx!g&T*rS-t'u-xT.j(R.n[tOwx!g&T*rT.k(R.nT.U'z.VX%bf%l0i1RQ.x(]R4`.yR.u([R(e#XQ(s#aS/S(k(lR4f/TR/W(mR4h/U\",nodeNames:\"\\u26A0 RawString > MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ) ( ArgumentList ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr constinit consteval StructSpecifier struct MsDeclspecModifier __declspec Attribute AttributeName Identifier AttributeArgs { } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp , Number CharLiteral AttributeArgs VirtualSpecifier BaseClassClause Access virtual FieldDeclarationList FieldDeclaration extern static register inline thread_local AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept RequiresClause requires True False ParenthesizedExpression CommaExpression LambdaExpression LambdaCaptureSpecifier TemplateParameterList OptionalParameterDeclaration TypeParameterDeclaration typename class VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration template AbstractFunctionDeclarator AbstractPointerDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ThrowSpecifier throw TrailingReturnType CompoundStatement FunctionDefinition MsCallModifier TryStatement try CatchClause catch LinkageSpecification Declaration InitDeclarator InitializerList InitializerPair SubscriptDesignator FieldDesignator ExportDeclaration export ImportDeclaration import ModuleName PartitionName HeaderName CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto CoReturnStatement co_return CoYieldStatement co_yield AttributeStatement ForRangeLoop AliasDeclaration using TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ThrowStatement NamespaceDefinition namespace ScopedIdentifier Identifier OperatorName operator ArithOp BitOp CompareOp LogicOp new delete co_await ConceptDefinition concept UsingDeclaration enum StaticAssertDeclaration static_assert ConcatenatedString TemplateDeclaration FriendDeclaration friend union FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause FunctionDefinition OperatorCast operator TemplateInstantiation FunctionDefinition FunctionDefinition Declaration ModuleDeclaration module RequiresExpression RequirementList SimpleRequirement TypeRequirement CompoundRequirement ReturnTypeRequirement ConstraintConjuction LogicOp ConstraintDisjunction LogicOp ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator TemplateFunction OperatorName StructuredBindingDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration AccessSpecifier UnionSpecifier ClassSpecifier EnumSpecifier SizedTypeSpecifier TypeSize EnumeratorList Enumerator DependentType Decltype decltype auto PlaceholderTypeSpecifier ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CoAwaitExpression CompoundLiteralExpression NULL NewExpression new NewDeclarator DeleteExpression delete ParameterPackExpansion nullptr this UserDefinedLiteral ParamPack #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program\",maxTerm:426,nodeProps:[[\"group\",-35,1,8,11,15,16,17,19,71,72,100,101,102,104,191,208,229,242,243,270,271,272,277,280,281,282,284,285,286,287,290,292,293,294,295,296,\"Expression\",-13,18,25,26,27,43,255,256,257,258,262,263,265,266,\"Type\",-19,126,129,147,150,152,153,158,160,163,164,166,168,170,172,174,176,178,179,188,\"Statement\"],[\"isolate\",-4,4,5,8,10,\"\"],[\"openedBy\",12,\"(\",52,\"{\",54,\"[\"],[\"closedBy\",13,\")\",51,\"}\",53,\"]\"]],propSources:[B0],skippedNodes:[0,3,4,5,6,7,10,297,298,299,300,301,302,303,304,305,306,347,348],repeatNodeCount:41,tokenData:\"&*r7ZR!UOX$eXY({YZ.gZ]$e]^+P^p$epq({qr.}rs0}st2ktu$euv!7dvw!9bwx!;exy!<Yyz!=Tz{!>O{|!?R|}!AV}!O!BQ!O!P!DX!P!Q#+y!Q!R#Az!R![$(x![!]$Ag!]!^$Cc!^!_$D^!_!`%1W!`!a%2X!a!b%5_!b!c$e!c!n%6Y!n!o%7q!o!w%6Y!w!x%7q!x!}%6Y!}#O%:n#O#P%<g#P#Q%Kz#Q#R%Ms#R#S%6Y#S#T$e#T#i%6Y#i#j%Nv#j#o%6Y#o#p&!e#p#q&#`#q#r&%f#r#s&&a#s;'S$e;'S;=`(u<%lO$e&t$nY)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&r%eW)^W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^&j&SU'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j&kX'f&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j']V'f&jOY%}YZ%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&j'uP;=`<%l%}&r'{P;=`<%l%^&l(VW(qQ'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O&l(rP;=`<%l(O&t(xP;=`<%l$e7Z)Y`)^W(qQ(n.o'f&j*[)`OX$eXY({YZ*[Z]$e]^+P^p$epq({qr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e.o*aT(n.oXY*[YZ*[]^*[pq*[#O#P*p.o*sQYZ*[]^*y.o*|PYZ*[4e+[`)^W(qQ(n.o'f&jOX$eXY+PYZ*[Z]$e]^+P^p$epq+Pqr$ers%^sw$ewx(Ox#O$e#O#P,^#P;'S$e;'S;=`(u<%lO$e4Z,cX'f&jOY%}YZ-OZ]%}]^-{^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4Z-V[(n.o'f&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4Z.QV'f&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P.nT*X)`(n.oXY*[YZ*[]^*[pq*[#O#P*p3o/[[%^!b'QP)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o0_Y%]!b!a,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e6e1YY)^W(oQ(p/]'f&jOY%^Zr%^rs1xsw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^(U2RW)y!b)^W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^4e2tf)^W(qQ'f&jOX$eXY2kZp$epq2kqr$ers%^sw$ewx(Ox!c$e!c!}4Y!}#O$e#O#P&f#P#T$e#T#W4Y#W#X5m#X#Y>u#Y#]4Y#]#^NZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e4eb)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e5xd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y7W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e7cd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z8q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e8|d)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^:[#^#o4Y#o;'S$e;'S;=`(u<%lO$e4e:gd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#b4Y#b#c;u#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e<Qd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y=`#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e=mb)^W(qQ'e.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e?Qf)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a@f#a#b4Y#b#cHV#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e@qf)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^BV#^#g4Y#g#hEV#h#o4Y#o;'S$e;'S;=`(u<%lO$e4eBbd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZCp#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eC}b)^W(qQ'f&j'l.o'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eEbd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#YFp#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4eF}b)^W(qQ'j.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eHbd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#XIp#X#o4Y#o;'S$e;'S;=`(u<%lO$e4eI{d)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#]4Y#]#^KZ#^#o4Y#o;'S$e;'S;=`(u<%lO$e4eKfd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#ZLt#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4eMRb)^W(qQ'f&j'k.o'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4eNff)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z! z#Z#b4Y#b#c!.[#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!!Xf)^W(qQ'g.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!#m#X#b4Y#b#c!(W#c#o4Y#o;'S$e;'S;=`(u<%lO$e4e!#xd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!%W#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!%cd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!&q#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!'Ob)^W(qQ'h.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!(cd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!)q#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!)|d)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!+[#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!+gd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#Y4Y#Y#Z!,u#Z#o4Y#o;'S$e;'S;=`(u<%lO$e4e!-Sb)^W(qQ'i.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e4e!.gd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#V4Y#V#W!/u#W#o4Y#o;'S$e;'S;=`(u<%lO$e4e!0Qd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#`4Y#`#a!1`#a#o4Y#o;'S$e;'S;=`(u<%lO$e4e!1kd)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#i4Y#i#j!2y#j#o4Y#o;'S$e;'S;=`(u<%lO$e4e!3Ud)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#W4Y#W#X!4d#X#o4Y#o;'S$e;'S;=`(u<%lO$e4e!4od)^W(qQ'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#X4Y#X#Y!5}#Y#o4Y#o;'S$e;'S;=`(u<%lO$e4e!6[b)^W(qQV.o'f&j'm.oOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![4Y![!c$e!c!}4Y!}#O$e#O#P&f#P#R$e#R#S4Y#S#T$e#T#o4Y#o;'S$e;'S;=`(u<%lO$e3o!7q[)^W(qQ%Z!b![,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!8rY!g-y)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!9o])W,g)^W(qQ%[!b'f&jOY$eZr$ers%^sv$evw!:hwx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!:uY)V,g%^!b)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2X!;pW)[S(qQ)],g'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O6i!<eY)^W(qQ]6_'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V!=`Y[a)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!>][)T,g)^W(qQ%Z!b'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!?`^)^W(qQ%Z!b!Y,g'f&jOY$eZr$ers%^sw$ewx(Ox{$e{|!@[|!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!@gY)^W!X-y(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!AbY!h,k)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!B__)^W(qQ%Z!b!Y,g'f&jOY$eZr$ers%^sw$ewx(Ox}$e}!O!@[!O!_$e!_!`!8g!`!a!C^!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o!CiY(x-y)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Dd^)^W(qQ'f&j(w,gOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!E`!P!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!Ei[)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P!F_!P#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2a!FjY)Z,k)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]!Gen)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx!Icx!Q$e!Q![!GY![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T!IjY(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![!JY![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T!Jcn(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx!Icx!Q(O!Q![!JY![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ljl(qQ!i,g'f&jOY(OZr(Ors%}s{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T!Ni^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![# e![!c(O!c!i# e!i#O(O#O#P&f#P#T(O#T#Z# e#Z;'S(O;'S;=`(o<%lO(O2T# nj(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx!Nbx!Q(O!Q![# e![!c(O!c!h# e!h!i# e!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#Y# e#Y#Z# e#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T##id(qQ!i,g'f&jOY(OZr(Ors%}s!h(O!h!i##`!i!n(O!n!o##`!o!w(O!w!x##`!x#O(O#O#P&f#P#Y(O#Y#Z##`#Z#`(O#`#a##`#a#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]#%Sn)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#'Z`)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![#(]![!c$e!c!i#(]!i#O$e#O#P&f#P#T$e#T#Z#(]#Z;'S$e;'S;=`(u<%lO$e2]#(hj)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx!Nbx!Q$e!Q![#(]![!c$e!c!h#(]!h!i#(]!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#Y#(]#Y#Z#(]#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]#*ef)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox!h$e!h!i#*Y!i!n$e!n!o#*Y!o!w$e!w!x#*Y!x#O$e#O#P&f#P#Y$e#Y#Z#*Y#Z#`$e#`#a#*Y#a#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e7Z#,W`)^W(qQ%Z!b![,g'f&jOY$eZr$ers%^sw$ewx(Oxz$ez{#-Y{!P$e!P!Q#:s!Q!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#-c])^W(qQ'f&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y1e#._TOz#.[z{#.n{;'S#.[;'S;=`#/]<%lO#.[1e#.qVOz#.[z{#.n{!P#.[!P!Q#/W!Q;'S#.[;'S;=`#/]<%lO#.[1e#/]OT1e1e#/`P;=`<%l#.[7X#/jZ)^W'f&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7P#0bX'f&jOY#0]YZ#.[Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1SZ'f&jOY#0]YZ#.[Zz#0]z{#0}{!P#0]!P!Q#1u!Q#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#1|UT1e'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}7P#2eZ'f&jOY#0]YZ#0]Z]#0]]^#3W^z#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3]X'f&jOY#0]YZ#0]Zz#0]z{#0}{#O#0]#O#P#2`#P;'S#0];'S;=`#3x<%lO#0]7P#3{P;=`<%l#0]7X#4V])^W'f&jOY#/cYZ#.[Zw#/cwx#0]xz#/cz{#4O{!P#/c!P!Q#5O!Q#O#/c#O#P#2`#P;'S#/c;'S;=`#5q<%lO#/c7X#5XW)^WT1e'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^7X#5tP;=`<%l#/c7R#6OZ(qQ'f&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#6x](qQ'f&jOY#5wYZ#.[Zr#5wrs#0]sz#5wz{#6q{!P#5w!P!Q#7q!Q#O#5w#O#P#2`#P;'S#5w;'S;=`#8d<%lO#5w7R#7zW(qQT1e'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O7R#8gP;=`<%l#5w7Z#8s_)^W(qQ'f&jOY#-YYZ#.[Zr#-Yrs#/csw#-Ywx#5wxz#-Yz{#8j{!P#-Y!P!Q#9r!Q#O#-Y#O#P#2`#P;'S#-Y;'S;=`#:m<%lO#-Y7Z#9}Y)^W(qQT1e'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z#:pP;=`<%l#-Y7Z#;OY)^W(qQS1e'f&jOY#:sZr#:srs#;nsw#:swx#@{x#O#:s#O#P#<z#P;'S#:s;'S;=`#At<%lO#:s7X#;wW)^WS1e'f&jOY#;nZw#;nwx#<ax#O#;n#O#P#<z#P;'S#;n;'S;=`#@u<%lO#;n7P#<hUS1e'f&jOY#<aZ#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#=RXS1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P;'S#<a;'S;=`#>[<%lO#<a7P#=uVS1e'f&jOY#<aYZ%}Z#O#<a#O#P#<z#P;'S#<a;'S;=`#>[<%lO#<a7P#>_P;=`<%l#<a7P#>i]S1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c#f#<a#f#g#?b#g;'S#<a;'S;=`#>[<%lO#<a7P#?iUS1e'f&jOY#<aZ#O#<a#O#P#?{#P;'S#<a;'S;=`#>[<%lO#<a7P#@SZS1e'f&jOY#<aYZ%}Z]#<a]^#=n^#O#<a#O#P#>b#P#b#<a#b#c#<a#c;'S#<a;'S;=`#>[<%lO#<a7X#@xP;=`<%l#;n7R#AUW(qQS1e'f&jOY#@{Zr#@{rs#<as#O#@{#O#P#<z#P;'S#@{;'S;=`#An<%lO#@{7R#AqP;=`<%l#@{7Z#AwP;=`<%l#:s2]#BVt)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$+X#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$=`#m;'S$e;'S;=`(u<%lO$e2T#DnY(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![#E^![#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O2T#Egp(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#Dgx!O(O!O!P#Gk!P!Q(O!Q![#E^![!g(O!g!h!La!h!i##`!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#X(O#X#Y!La#Y#Z##`#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#Gtn(qQ!i,g'f&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#I{p(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#LPx!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T#LW^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![#Ir![!c(O!c!i#Ir!i#O(O#O#P&f#P#T(O#T#Z#Ir#Z;'S(O;'S;=`(o<%lO(O2T#M]t(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx#LPx{(O{|!Nb|}(O}!O!Nb!O!Q(O!Q![#Ir![!c(O!c!g#Ir!g!h#MS!h!i#Ir!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X#Ir#X#Y#MS#Y#Z#Ir#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$ xp)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$$Xp)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#LPx!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$&ht)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#LPx{$e{|#'Q|}$e}!O#'Q!O!Q$e!Q![$#|![!c$e!c!g$#|!g!h$&]!h!i$#|!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$#|#X#Y$&]#Y#Z$#|#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$)Tp)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$+b_)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$-`!R![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$,j[)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![!GY![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$-kt)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx#Dgx!O$e!O!P$ m!P!Q$e!Q![$(x![!g$e!g!h#$w!h!i#*Y!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#U$e#U#V$/{#V#X$e#X#Y#$w#Y#Z#*Y#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e2]$0U[)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$(x![#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$1T`)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$2br)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2T$4s^(qQ'f&jOY(OZr(Ors%}s!Q(O!Q![$5o![!c(O!c!i$5o!i#O(O#O#P&f#P#T(O#T#Z$5o#Z;'S(O;'S;=`(o<%lO(O2T$5xr(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx$4lx!O(O!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2T$8]u(qQ!i,g'f&jOY(OZr(Ors%}sw(Owx$4lx{(O{|!Nb|}(O}!O!Nb!O!P#Gk!P!Q(O!Q![$5o![!c(O!c!g$5o!g!h$8S!h!i$5o!i!n(O!n!o##`!o!r(O!r!s!La!s!w(O!w!x##`!x#O(O#O#P&f#P#T(O#T#X$5o#X#Y$8S#Y#Z$5o#Z#`(O#`#a##`#a#d(O#d#e!La#e#i(O#i#j##`#j;'S(O;'S;=`(o<%lO(O2]$:{u)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx{$e{|#'Q|}$e}!O#'Q!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j;'S$e;'S;=`(u<%lO$e2]$=ic)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!O$e!O!P$,a!P!Q$e!Q!R$>t!R![$2V![!c$e!c!i$2V!i#O$e#O#P&f#P#T$e#T#Z$2V#Z;'S$e;'S;=`(u<%lO$e2]$?Pv)^W(qQ!i,g'f&jOY$eZr$ers%^sw$ewx$4lx!O$e!O!P$ m!P!Q$e!Q![$2V![!c$e!c!g$2V!g!h$:p!h!i$2V!i!n$e!n!o#*Y!o!r$e!r!s#$w!s!w$e!w!x#*Y!x#O$e#O#P&f#P#T$e#T#U$2V#U#V$2V#V#X$2V#X#Y$:p#Y#Z$2V#Z#`$e#`#a#*Y#a#d$e#d#e#$w#e#i$e#i#j#*Y#j#l$e#l#m$0z#m;'S$e;'S;=`(u<%lO$e4e$Ar[(v-X)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox![$e![!]$Bh!]#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3s$BsYm-})^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e2]$CnY)Y,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7V$Dk_q,g%]!b)^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!^$Ej!^!_%+w!_!`%.U!`!a%0]!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej*[$Es])^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ejp$FoTO!`$Fl!`!a$GO!a;'S$Fl;'S;=`$GT<%lO$Flp$GTO$Wpp$GWP;=`<%l$Fl*Y$GbZ)^W'f&jOY$GZYZ$FlZw$GZwx$HTx!`$GZ!`!a%(U!a#O$GZ#O#P$Ib#P;'S$GZ;'S;=`%(y<%lO$GZ*Q$HYX'f&jOY$HTYZ$FlZ!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q$IOU$WpY#t'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}*Q$Ig['f&jOY$HTYZ$HTZ]$HT]^$J]^!`$HT!`!a$NO!a#O$HT#O#P%&n#P;'S$HT;'S;=`%'f;=`<%l%$z<%lO$HT*Q$JbX'f&jOY$HTYZ$J}Z!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT'[$KSX'f&jOY$J}YZ$FlZ!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$KvU$Wp'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}'[$L_Z'f&jOY$J}YZ$J}Z]$J}]^$MQ^!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MVX'f&jOY$J}YZ$J}Z!`$J}!`!a$Ko!a#O$J}#O#P$LY#P;'S$J};'S;=`$Mr<%lO$J}'[$MuP;=`<%l$J}*Q$M{P;=`<%l$HT*Q$NVW$Wp'f&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`$NtW'f&jOY$NoZ!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`% eUY#t'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%})`% |Y'f&jOY$NoYZ$NoZ]$No]^%!l^#O$No#O#P%#d#P;'S$No;'S;=`%$[;=`<%l%$z<%lO$No)`%!qX'f&jOY$NoYZ%}Z!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%#aP;=`<%l$No)`%#iZ'f&jOY$NoYZ%}Z]$No]^%!l^!`$No!`!a% ^!a#O$No#O#P% w#P;'S$No;'S;=`%#^<%lO$No)`%$_XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$No<%lO%$z#t%$}WOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h<%lO%$z#t%%lOY#t#t%%oRO;'S%$z;'S;=`%%x;=`O%$z#t%%{XOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l%$z<%lO%$z#t%&kP;=`<%l%$z*Q%&sZ'f&jOY$HTYZ$J}Z]$HT]^$J]^!`$HT!`!a$Hu!a#O$HT#O#P$Ib#P;'S$HT;'S;=`$Mx<%lO$HT*Q%'iXOY%$zZ!`%$z!`!a%%g!a#O%$z#O#P%%l#P;'S%$z;'S;=`%&h;=`<%l$HT<%lO%$z*Y%(aW$WpY#t)^W'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^*Y%(|P;=`<%l$GZ*S%)WZ(qQ'f&jOY%)PYZ$FlZr%)Prs$HTs!`%)P!`!a%)y!a#O%)P#O#P$Ib#P;'S%)P;'S;=`%*n<%lO%)P*S%*UW$WpY#t(qQ'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O*S%*qP;=`<%l%)P*[%+RY$WpY#t)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e*[%+tP;=`<%l$Ej7V%,U^)^W(qQ%[!b!f,g'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!_$Ej!_!`%-Q!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%-]]!g-y)^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%*t!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%.c]%]!b!b,g)^W(qQ'f&jOY$EjYZ$FlZr$Ejrs$GZsw$Ejwx%)Px!`$Ej!`!a%/[!a#O$Ej#O#P$Ib#P;'S$Ej;'S;=`%+q<%lO$Ej7V%/mY%]!b!b,g$WpY#t)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e)j%0hYY#t)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%1c[)k!c)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`0Q!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%2f]%]!b)^W(qQ!d,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`%3_!`!a%4[!a#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%3lY%]!b!b,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%4i[)^W(qQ%[!b!f,g'f&jOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%5jY(uP)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z%6ib)^W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e7Z%8Qb)^W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e5P%9cW)^W(p/]'f&jOY%^Zw%^wx%}x#O%^#O#P&f#P;'S%^;'S;=`'x<%lO%^2T%:UW(qQ)],g'f&jOY(OZr(Ors%}s#O(O#O#P&f#P;'S(O;'S;=`(o<%lO(O3o%:yZ!V-y)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox!}$e!}#O%;l#O#P&f#P;'S$e;'S;=`(u<%lO$e&u%;wY)QP)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e4e%<la'f&jOY%=qYZ%>[Z]%=q]^%?Z^!Q%=q!Q![%?w![!w%=q!w!x%AX!x#O%=q#O#P%H_#P#i%=q#i#j%Ds#j#l%=q#l#m%IR#m;'S%=q;'S;=`%Kt<%lO%=q&t%=xUXY'f&jOY%}Z#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}4e%>e[XY(n.o'f&jOX%}XY-OYZ*[Z]%}]^-O^p%}pq-Oq#O%}#O#P,^#P;'S%};'S;=`'r<%lO%}4e%?bVXY'f&jOY%}YZ-OZ#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@OWXY'f&jOY%}Z!Q%}!Q![%@h![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%@oWXY'f&jOY%}Z!Q%}!Q![%=q![#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%A^['f&jOY%}Z!Q%}!Q![%BS![!c%}!c!i%BS!i#O%}#O#P&f#P#T%}#T#Z%BS#Z;'S%};'S;=`'r<%lO%}&t%BX['f&jOY%}Z!Q%}!Q![%B}![!c%}!c!i%B}!i#O%}#O#P&f#P#T%}#T#Z%B}#Z;'S%};'S;=`'r<%lO%}&t%CS['f&jOY%}Z!Q%}!Q![%Cx![!c%}!c!i%Cx!i#O%}#O#P&f#P#T%}#T#Z%Cx#Z;'S%};'S;=`'r<%lO%}&t%C}['f&jOY%}Z!Q%}!Q![%Ds![!c%}!c!i%Ds!i#O%}#O#P&f#P#T%}#T#Z%Ds#Z;'S%};'S;=`'r<%lO%}&t%Dx['f&jOY%}Z!Q%}!Q![%En![!c%}!c!i%En!i#O%}#O#P&f#P#T%}#T#Z%En#Z;'S%};'S;=`'r<%lO%}&t%Es['f&jOY%}Z!Q%}!Q![%Fi![!c%}!c!i%Fi!i#O%}#O#P&f#P#T%}#T#Z%Fi#Z;'S%};'S;=`'r<%lO%}&t%Fn['f&jOY%}Z!Q%}!Q![%Gd![!c%}!c!i%Gd!i#O%}#O#P&f#P#T%}#T#Z%Gd#Z;'S%};'S;=`'r<%lO%}&t%Gi['f&jOY%}Z!Q%}!Q![%=q![!c%}!c!i%=q!i#O%}#O#P&f#P#T%}#T#Z%=q#Z;'S%};'S;=`'r<%lO%}&t%HfXXY'f&jOY%}YZ%}Z]%}]^'W^#O%}#O#P&f#P;'S%};'S;=`'r<%lO%}&t%IW['f&jOY%}Z!Q%}!Q![%I|![!c%}!c!i%I|!i#O%}#O#P&f#P#T%}#T#Z%I|#Z;'S%};'S;=`'r<%lO%}&t%JR['f&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KO[XY'f&jOY%}Z!Q%}!Q![%Jw![!c%}!c!i%Jw!i#O%}#O#P&f#P#T%}#T#Z%Jw#Z;'S%};'S;=`'r<%lO%}&t%KwP;=`<%l%=q2a%LVZ!W,V)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P#Q%Lx#Q;'S$e;'S;=`(u<%lO$e'Y%MTY)Pd)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o%NQ[)^W(qQ%[!b'f&j!_,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e7Z& Vd)^W(yS(qQ!R,f(r%y'f&jOY$eZr$ers%9Ysw$ewx%9{x!Q$e!Q!Y%6Y!Y!Z%7q!Z![%6Y![!c$e!c!}%6Y!}#O$e#O#P&f#P#R$e#R#S%6Y#S#T$e#T#o%6Y#o;'S$e;'S;=`(u<%lO$e2]&!pY!T,g)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e3o&#m^)^W(qQ%[!b'f&j!^,gOY$eZr$ers%^sw$ewx(Ox!_$e!_!`!8g!`#O$e#O#P&f#P#p$e#p#q&$i#q;'S$e;'S;=`(u<%lO$e3o&$vY)U,g%^!b)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e'V&%qY!Ua)^W(qQ'f&jOY$eZr$ers%^sw$ewx(Ox#O$e#O#P&f#P;'S$e;'S;=`(u<%lO$e(]&&nc)^W(qQ%[!b'RP'f&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&(Sc)^W(qQ'f&jOX$eXY&'yZp$epq&'yqr$ers%^sw$ewx(Ox!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e&y&)jb)^W(qQeT'f&jOY$eZr$ers%^sw$ewx(Ox!Q$e!Q![&)_![!c$e!c!}&)_!}#O$e#O#P&f#P#R$e#R#S&)_#S#T$e#T#o&)_#o;'S$e;'S;=`(u<%lO$e\",tokenizers:[D0,I0,0,1,2,3,4,5,6,7,8,9],topRules:{Program:[0,307]},dynamicPrecedences:{65:1,87:1,94:1,119:1,184:1,187:-10,240:-10,241:1,244:-1,246:-10,247:1,262:-1,267:2,268:2,306:-10,365:3,418:1,419:3,420:1,421:1},specialized:[{term:356,get:O=>N0[O]||-1},{term:33,get:O=>F0[O]||-1},{term:66,get:O=>H0[O]||-1},{term:363,get:O=>K0[O]||-1}],tokenPrec:24891});var J0=ne.define({name:\"cpp\",parser:m$.configure({props:[se.add({IfStatement:le({except:/^\\s*({|else\\b)/}),TryStatement:le({except:/^\\s*({|catch)\\b/}),LabeledStatement:sO,CaseStatement:O=>O.baseIndent+O.unit,BlockComment:()=>null,CompoundStatement:be({closing:\"}\"}),Statement:le({except:/^{/})}),te.add({\"DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList\":me,BlockComment(O){return{from:O.from+2,to:O.to-2}}})]}),languageData:{commentTokens:{line:\"//\",block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*(?:case |default:|\\{|\\})$/,closeBrackets:{stringPrefixes:[\"L\",\"u\",\"U\",\"u8\",\"LR\",\"UR\",\"uR\",\"u8R\",\"R\"]}}});function g$(){return new J(J0)}var eb=122,P$=1,tb=123,Ob=124,X$=2,ib=125,rb=3,nb=4,T$=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],sb=58,ab=40,b$=95,ob=91,bs=45,lb=46,cb=35,hb=37,fb=38,db=92,ub=10,Qb=42;function yr(O){return O>=65&&O<=90||O>=97&&O<=122||O>=161}function Fl(O){return O>=48&&O<=57}function S$(O){return Fl(O)||O>=97&&O<=102||O>=65&&O<=70}var y$=(O,e,t)=>(i,r)=>{for(let n=!1,s=0,a=0;;a++){let{next:o}=i;if(yr(o)||o==bs||o==b$||n&&Fl(o))!n&&(o!=bs||a>0)&&(n=!0),s===a&&o==bs&&s++,i.advance();else if(o==db&&i.peek(1)!=ub){if(i.advance(),S$(i.next)){do i.advance();while(S$(i.next));i.next==32&&i.advance()}else i.next>-1&&i.advance();n=!0}else{n&&i.acceptToken(s==2&&r.canShift(X$)?e:o==ab?t:O);break}}},$b=new z(y$(tb,X$,Ob)),pb=new z(y$(ib,rb,nb)),mb=new z(O=>{if(T$.includes(O.peek(-1))){let{next:e}=O;(yr(e)||e==b$||e==cb||e==lb||e==Qb||e==ob||e==sb&&yr(O.peek(1))||e==bs||e==fb)&&O.acceptToken(eb)}}),gb=new z(O=>{if(!T$.includes(O.peek(-1))){let{next:e}=O;if(e==hb&&(O.advance(),O.acceptToken(P$)),yr(e)){do O.advance();while(yr(O.next)||Fl(O.next));O.acceptToken(P$)}}}),Pb=F({\"AtKeyword import charset namespace keyframes media supports\":d.definitionKeyword,\"from to selector\":d.keyword,NamespaceName:d.namespace,KeyframeName:d.labelName,KeyframeRangeName:d.operatorKeyword,TagName:d.tagName,ClassName:d.className,PseudoClassName:d.constant(d.className),IdName:d.labelName,\"FeatureName PropertyName\":d.propertyName,AttributeName:d.attributeName,NumberLiteral:d.number,KeywordQuery:d.keyword,UnaryQueryOp:d.operatorKeyword,\"CallTag ValueName\":d.atom,VariableName:d.variableName,Callee:d.operatorKeyword,Unit:d.unit,\"UniversalSelector NestingSelector\":d.definitionOperator,\"MatchOp CompareOp\":d.compareOperator,\"ChildOp SiblingOp, LogicOp\":d.logicOperator,BinOp:d.arithmeticOperator,Important:d.modifier,Comment:d.blockComment,ColorLiteral:d.color,\"ParenthesizedContent StringLiteral\":d.string,\":\":d.punctuation,\"PseudoOp #\":d.derefOperator,\"; ,\":d.separator,\"( )\":d.paren,\"[ ]\":d.squareBracket,\"{ }\":d.brace}),Sb={__proto__:null,lang:38,\"nth-child\":38,\"nth-last-child\":38,\"nth-of-type\":38,\"nth-last-of-type\":38,dir:38,\"host-context\":38,if:84,url:124,\"url-prefix\":124,domain:124,regexp:124},Xb={__proto__:null,or:98,and:98,not:106,only:106,layer:170},Tb={__proto__:null,selector:112,layer:166},bb={__proto__:null,\"@import\":162,\"@media\":174,\"@charset\":178,\"@namespace\":182,\"@keyframes\":188,\"@supports\":200,\"@scope\":204},yb={__proto__:null,to:207},x$=Oe.deserialize({version:14,states:\"EbQYQdOOO#qQdOOP#xO`OOOOQP'#Cf'#CfOOQP'#Ce'#CeO#}QdO'#ChO$nQaO'#CcO$xQdO'#CkO%TQdO'#DpO%YQdO'#DrO%_QdO'#DuO%_QdO'#DxOOQP'#FV'#FVO&eQhO'#EhOOQS'#FU'#FUOOQS'#Ek'#EkQYQdOOO&lQdO'#EOO&PQhO'#EUO&lQdO'#EWO'aQdO'#EYO'lQdO'#E]O'tQhO'#EcO(VQdO'#EeO(bQaO'#CfO)VQ`O'#D{O)[Q`O'#F`O)gQdO'#F`QOQ`OOP)qO&jO'#CaPOOO)C@t)C@tOOQP'#Cj'#CjOOQP,59S,59SO#}QdO,59SO)|QdO,59VO%TQdO,5:[O%YQdO,5:^O%_QdO,5:aO%_QdO,5:cO%_QdO,5:dO%_QdO'#ErO*XQ`O,58}O*aQdO'#DzOOQS,58},58}OOQP'#Cn'#CnOOQO'#Dn'#DnOOQP,59V,59VO*hQ`O,59VO*mQ`O,59VOOQP'#Dq'#DqOOQP,5:[,5:[OOQO'#Ds'#DsO*rQpO,5:^O+]QaO,5:aO+sQaO,5:dOOQW'#DZ'#DZO,ZQhO'#DdO,xQhO'#FaO'tQhO'#DbO-WQ`O'#DhOOQW'#F['#F[O-]Q`O,5;SO-eQ`O'#DeOOQS-E8i-E8iOOQ['#Cs'#CsO-jQdO'#CtO.QQdO'#CzO.hQdO'#C}O/OQ!pO'#DPO1RQ!jO,5:jOOQO'#DU'#DUO*mQ`O'#DTO1cQ!nO'#FXO3`Q`O'#DVO3eQ`O'#DkOOQ['#FX'#FXO-`Q`O,5:pO3jQ!bO,5:rOOQS'#E['#E[O3rQ`O,5:tO3wQdO,5:tOOQO'#E_'#E_O4PQ`O,5:wO4UQhO,5:}O%_QdO'#DgOOQS,5;P,5;PO-eQ`O,5;PO4^QdO,5;PO4fQdO,5:gO4vQdO'#EtO5TQ`O,5;zO5TQ`O,5;zPOOO'#Ej'#EjP5`O&jO,58{POOO,58{,58{OOQP1G.n1G.nOOQP1G.q1G.qO*hQ`O1G.qO*mQ`O1G.qOOQP1G/v1G/vO5kQpO1G/xO5sQaO1G/{O6ZQaO1G/}O6qQaO1G0OO7XQaO,5;^OOQO-E8p-E8pOOQS1G.i1G.iO7cQ`O,5:fO7hQdO'#DoO7oQdO'#CrOOQP1G/x1G/xO&lQdO1G/xO7vQ!jO'#DZO8UQ!bO,59vO8^QhO,5:OOOQO'#F]'#F]O8XQ!bO,59zO'tQhO,59xO8fQhO'#EvO8sQ`O,5;{O9OQhO,59|O9uQhO'#DiOOQW,5:S,5:SOOQS1G0n1G0nOOQW,5:P,5:PO9|Q!fO'#FYOOQS'#FY'#FYOOQS'#Em'#EmO;^QdO,59`OOQ[,59`,59`O;tQdO,59fOOQ[,59f,59fO<[QdO,59iOOQ[,59i,59iOOQ[,59k,59kO&lQdO,59mO<rQhO'#EQOOQW'#EQ'#EQO=WQ`O1G0UO1[QhO1G0UOOQ[,59o,59oO'tQhO'#DXOOQ[,59q,59qO=]Q#tO,5:VOOQS1G0[1G0[OOQS1G0^1G0^OOQS1G0`1G0`O=hQ`O1G0`O=mQdO'#E`OOQS1G0c1G0cOOQS1G0i1G0iO=xQaO,5:RO-`Q`O1G0kOOQS1G0k1G0kO-eQ`O1G0kO>PQ!fO1G0ROOQO1G0R1G0ROOQO,5;`,5;`O>gQdO,5;`OOQO-E8r-E8rO>tQ`O1G1fPOOO-E8h-E8hPOOO1G.g1G.gOOQP7+$]7+$]OOQP7+%d7+%dO&lQdO7+%dOOQS1G0Q1G0QO?PQaO'#F_O?ZQ`O,5:ZO?`Q!fO'#ElO@^QdO'#FWO@hQ`O,59^O@mQ!bO7+%dO&lQdO1G/bO@uQhO1G/fOOQW1G/j1G/jOOQW1G/d1G/dOAWQhO,5;bOOQO-E8t-E8tOAfQhO'#DZOAtQhO'#F^OBPQ`O'#F^OBUQ`O,5:TOOQS-E8k-E8kOOQ[1G.z1G.zOOQ[1G/Q1G/QOOQ[1G/T1G/TOOQ[1G/X1G/XOBZQdO,5:lOOQS7+%p7+%pOB`Q`O7+%pOBeQhO'#DYOBmQ`O,59sO'tQhO,59sOOQ[1G/q1G/qOBuQ`O1G/qOOQS7+%z7+%zOBzQbO'#DPOOQO'#Eb'#EbOCYQ`O'#EaOOQO'#Ea'#EaOCeQ`O'#EwOCmQdO,5:zOOQS,5:z,5:zOOQ[1G/m1G/mOOQS7+&V7+&VO-`Q`O7+&VOCxQ!fO'#EsO&lQdO'#EsOEPQdO7+%mOOQO7+%m7+%mOOQO1G0z1G0zOEdQ!bO<<IOOElQdO'#EqOEvQ`O,5;yOOQP1G/u1G/uOOQS-E8j-E8jOFOQdO'#EpOFYQ`O,5;rOOQ]1G.x1G.xOOQP<<IO<<IOOFbQdO7+$|OOQO'#D]'#D]OFiQ!bO7+%QOFqQhO'#EoOF{Q`O,5;xO&lQdO,5;xOOQW1G/o1G/oOOQO'#ES'#ESOGTQ`O1G0WOOQS<<I[<<I[O&lQdO,59tOGnQhO1G/_OOQ[1G/_1G/_OGuQ`O1G/_OOQW-E8l-E8lOOQ[7+%]7+%]OOQO,5:{,5:{O=pQdO'#ExOCeQ`O,5;cOOQS,5;c,5;cOOQS-E8u-E8uOOQS1G0f1G0fOOQS<<Iq<<IqOG}Q!fO,5;_OOQS-E8q-E8qOOQO<<IX<<IXOOQPAN>jAN>jOIUQaO,5;]OOQO-E8o-E8oOI`QdO,5;[OOQO-E8n-E8nOOQW<<Hh<<HhOOQW<<Hl<<HlOIjQhO<<HlOI{QhO,5;ZOJWQ`O,5;ZOOQO-E8m-E8mOJ]QdO1G1dOBZQdO'#EuOJgQ`O7+%rOOQW7+%r7+%rOJoQ!bO1G/`OOQ[7+$y7+$yOJzQhO7+$yPKRQ`O'#EnOOQO,5;d,5;dOOQO-E8v-E8vOOQS1G0}1G0}OKWQ`OAN>WO&lQdO1G0uOK]Q`O7+'OOOQO,5;a,5;aOOQO-E8s-E8sOOQW<<I^<<I^OOQ[<<He<<HePOQW,5;Y,5;YOOQWG23rG23rOKeQdO7+&a\",stateData:\"Kx~O#sOS#tQQ~OW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#oRO~OQiOW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#ohO~O#m$SP~P!dO#tmO~O#ooO~O]qO`rOarOjsOmtO!juO!mwO#nvO~OpzO!^xO~P$SOc!QO#o|O#p}O~O#o!RO~O#o!TO~OW[OZ[O]TO`VOaVOjWOmXO!jYO!mZO#oRO~OS!]Oe!YO!V![O!Y!`O#q!XOp$TP~Ok$TP~P&POQ!jOe!cOm!dOp!eOr!mOt!mOz!kO!`!lO#o!bO#p!hO#}!fO~Ot!qO!`!lO#o!pO~Ot!sO#o!sO~OS!]Oe!YO!V![O!Y!`O#q!XO~Oe!vOpzO#Z!xO~O]YX`YX`!pXaYXjYXmYXpYX!^YX!jYX!mYX#nYX~O`!zO~Ok!{O#m$SXo$SX~O#m$SXo$SX~P!dO#u#OO#v#OO#w#QO~Oc#UO#o|O#p}O~OpzO!^xO~Oo$SP~P!dOe#`O~Oe#aO~Ol#bO!h#cO~O]qO`rOarOjsOmtO~Op!ia!^!ia!j!ia!m!ia#n!iad!ia~P*zOp!la!^!la!j!la!m!la#n!lad!la~P*zOR#gOS!]Oe!YOr#gOt#gO!V![O!Y!`O#q#dO#}!fO~O!R#iO!^#jOk$TXp$TX~Oe#mO~Ok#oOpzO~Oe!vO~O]#rO`#rOd#uOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl#wO~P&lO]#rO`#rOi#rOj#rOk#rOo#yO~P&lOP#zOSsXesXksXvsX!VsX!YsX!usX!wsX#qsX!TsXQsX]sX`sXdsXisXjsXmsXpsXrsXtsXzsX!`sX#osX#psX#}sXlsXosX!^sX!qsX#msX~Ov#{O!u#|O!w#}Ok$TP~P'tOe#aOS#{Xk#{Xv#{X!V#{X!Y#{X!u#{X!w#{X#q#{XQ#{X]#{X`#{Xd#{Xi#{Xj#{Xm#{Xp#{Xr#{Xt#{Xz#{X!`#{X#o#{X#p#{X#}#{Xl#{Xo#{X!^#{X!q#{X#m#{X~Oe$RO~Oe$TO~Ok$VOv#{O~Ok$WO~Ot$XO!`!lO~Op$YO~OpzO!R#iO~OpzO#Z$`O~O!q$bOk!oa#m!oao!oa~P&lOk#hX#m#hXo#hX~P!dOk!{O#m$Sao$Sa~O#u#OO#v#OO#w$hO~Ol$jO!h$kO~Op!ii!^!ii!j!ii!m!ii#n!iid!ii~P*zOp!ki!^!ki!j!ki!m!ki#n!kid!ki~P*zOp!li!^!li!j!li!m!li#n!lid!li~P*zOp#fa!^#fa~P$SOo$lO~Od$RP~P%_Od#zP~P&lO`!PXd}X!R}X!T!PX~O`$sO!T$tO~Od$uO!R#iO~Ok#jXp#jX!^#jX~P'tO!^#jOk$Tap$Ta~O!R#iOk!Uap!Ua!^!Uad!Ua`!Ua~OS!]Oe!YO!V![O!Y!`O#q$yO~Od$QP~P9dOv#{OQ#|X]#|X`#|Xd#|Xe#|Xi#|Xj#|Xk#|Xm#|Xp#|Xr#|Xt#|Xz#|X!`#|X#o#|X#p#|X#}#|Xl#|Xo#|X~O]#rO`#rOd%OOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl%PO~P&lO]#rO`#rOi#rOj#rOk#rOo%QO~P&lOe%SOS!tXk!tX!V!tX!Y!tX#q!tX~Ok%TO~Od%YOt%ZO!a%ZO~Ok%[O~Oo%cO#o%^O#}%]O~Od%dO~P$SOv#{O!^%hO!q%jOk!oi#m!oio!oi~P&lOk#ha#m#hao#ha~P!dOk!{O#m$Sio$Si~O!^%mOd$RX~P$SOd%oO~Ov#{OQ#`Xd#`Xe#`Xm#`Xp#`Xr#`Xt#`Xz#`X!^#`X!`#`X#o#`X#p#`X#}#`X~O!^%qOd#zX~P&lOd%sO~Ol%tOv#{O~OR#gOr#gOt#gO#q%vO#}!fO~O!R#iOk#jap#ja!^#ja~O`!PXd}X!R}X!^}X~O!R#iO!^%xOd$QX~O`%zO~Od%{O~O#o%|O~Ok&OO~O`&PO!R#iO~Od&ROk&QO~Od&UO~OP#zOpsX!^sXdsX~O#}%]Op#TX!^#TX~OpzO!^&WO~Oo&[O#o%^O#}%]O~Ov#{OQ#gXe#gXk#gXm#gXp#gXr#gXt#gXz#gX!^#gX!`#gX!q#gX#m#gX#o#gX#p#gX#}#gXo#gX~O!^%hO!q&`Ok!oq#m!oqo!oq~P&lOl&aOv#{O~Od#eX!^#eX~P%_O!^%mOd$Ra~Od#dX!^#dX~P&lO!^%qOd#za~Od&fO~P&lOd&gO!T&hO~Od#cX!^#cX~P9dO!^%xOd$Qa~O]&mOd&oO~OS#bae#ba!V#ba!Y#ba#q#ba~Od&qO~PG]Od&qOk&rO~Ov#{OQ#gae#gak#gam#gap#gar#gat#gaz#ga!^#ga!`#ga!q#ga#m#ga#o#ga#p#ga#}#gao#ga~Od#ea!^#ea~P$SOd#da!^#da~P&lOR#gOr#gOt#gO#q%vO#}%]O~O!R#iOd#ca!^#ca~O`&xO~O!^%xOd$Qi~P&lO]&mOd&|O~Ov#{Od|ik|i~Od&}O~PG]Ok'OO~Od'PO~O!^%xOd$Qq~Od#cq!^#cq~P&lO#s!a#t#}]#}v!m~\",goto:\"2h$UPPPPP$VP$YP$c$uP$cP%X$cPP%_PPP%e%o%oPPPPP%oPP%oP&]P%oP%o'W%oP't'w'}'}(^'}P'}P'}P'}'}P(m'}(yP(|PP)p)v$c)|$c*SP$cP$c$cP*Y*{+YP$YP+aP+dP$YP$YP$YP+j$YP+m+p+s+z$YP$YPP$YP,P,V,f,|-[-b-l-r-x.O.U.`.f.l.rPPPPPPPPPPP.x/R/w/z0|P1U1u2O2R2U2[RnQ_^OP`kz!{$dq[OPYZ`kuvwxz!v!{#`$d%mqSOPYZ`kuvwxz!v!{#`$d%mQpTR#RqQ!OVR#SrQ#S!QS$Q!i!jR$i#U!V!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'Q!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QU#g!Y$t&hU%`$Y%b&WR&V%_!V!iac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QR$S!kQ%W$RR&S%Xk!^]bf!Y![!g#i#j#m$P$R%X%xQ#e!YQ${#mQ%w$tQ&j%xR&w&hQ!ygQ#p!`Q$^!xR%f$`R#n!]!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QQ!qdR$X!rQ!PVR#TrQ#S!PR$i#TQ!SWR#VsQ!UXR#WtQ{UQ!wgQ#^yQ#o!_Q$U!nQ$[!uQ$_!yQ%e$^Q&Y%aQ&]%fR&v&XSjPzQ!}kQ$c!{R%k$dZiPkz!{$dR$P!gQ%}%SR&z&mR!rdR!teR$Z!tS%a$Y%bR&t&WV%_$Y%b&WQ#PmR$g#PQ`OSkPzU!a`k$dR$d!{Q$p#aY%p$p%u&d&l'QQ%u$sQ&d%qQ&l%zR'Q&xQ#t!cQ#v!dQ#x!eV$}#t#v#xQ%X$RR&T%XQ%y$zS&k%y&yR&y&lQ%r$pR&e%rQ%n$mR&c%nQyUR#]yQ%i$aR&_%iQ!|jS$e!|$fR$f!}Q&n%}R&{&nQ#k!ZR$x#kQ%b$YR&Z%bQ&X%aR&u&X__OP`kz!{$d^UOP`kz!{$dQ!VYQ!WZQ#XuQ#YvQ#ZwQ#[xQ$]!vQ$m#`R&b%mR$q#aQ!gaQ!oc[#q!c!d!e#t#v#xQ$a!zd$o#a$p$s%q%u%z&d&l&x'QQ$r#cQ%R#{S%g$a%iQ%l$kQ&^%hR&p&P]#s!c!d!e#t#v#xW!Z]b!g$PQ!ufQ#f!YQ#l![Q$v#iQ$w#jQ$z#mS%V$R%XR&i%xQ#h!YQ%w$tR&w&hR$|#mR$n#`QlPR#_zQ!_]Q!nbQ$O!gR%U$P\",nodeNames:\"\\u26A0 Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue AtKeyword # ; ] [ BracketedValue } { BracedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee IfExpression if ArgList IfBranch KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp ComparisonQuery CompareOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector ParenthesizedSelector CallQuery ArgList , CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp Block Declaration PropertyName Important ImportStatement import Layer layer LayerName layer MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports ScopeStatement scope to AtRule Styles\",maxTerm:143,nodeProps:[[\"isolate\",-2,5,36,\"\"],[\"openedBy\",20,\"(\",28,\"[\",31,\"{\"],[\"closedBy\",21,\")\",29,\"]\",32,\"}\"]],propSources:[Pb],skippedNodes:[0,5,106],repeatNodeCount:15,tokenData:\"JQ~R!YOX$qX^%i^p$qpq%iqr({rs-ust/itu6Wuv$qvw7Qwx7cxy9Qyz9cz{9h{|:R|}>t}!O?V!O!P?t!P!Q@]!Q![AU![!]BP!]!^B{!^!_C^!_!`DY!`!aDm!a!b$q!b!cEn!c!}$q!}#OG{#O#P$q#P#QH^#Q#R6W#R#o$q#o#pHo#p#q6W#q#rIQ#r#sIc#s#y$q#y#z%i#z$f$q$f$g%i$g#BY$q#BY#BZ%i#BZ$IS$q$IS$I_%i$I_$I|$q$I|$JO%i$JO$JT$q$JT$JU%i$JU$KV$q$KV$KW%i$KW&FU$q&FU&FV%i&FV;'S$q;'S;=`Iz<%lO$q`$tSOy%Qz;'S%Q;'S;=`%c<%lO%Q`%VS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q`%fP;=`<%l%Q~%nh#s~OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Q~'ah#s~!a`OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Qj)OUOy%Qz#]%Q#]#^)b#^;'S%Q;'S;=`%c<%lO%Qj)gU!a`Oy%Qz#a%Q#a#b)y#b;'S%Q;'S;=`%c<%lO%Qj*OU!a`Oy%Qz#d%Q#d#e*b#e;'S%Q;'S;=`%c<%lO%Qj*gU!a`Oy%Qz#c%Q#c#d*y#d;'S%Q;'S;=`%c<%lO%Qj+OU!a`Oy%Qz#f%Q#f#g+b#g;'S%Q;'S;=`%c<%lO%Qj+gU!a`Oy%Qz#h%Q#h#i+y#i;'S%Q;'S;=`%c<%lO%Qj,OU!a`Oy%Qz#T%Q#T#U,b#U;'S%Q;'S;=`%c<%lO%Qj,gU!a`Oy%Qz#b%Q#b#c,y#c;'S%Q;'S;=`%c<%lO%Qj-OU!a`Oy%Qz#h%Q#h#i-b#i;'S%Q;'S;=`%c<%lO%Qj-iS!qY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q~-xWOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c<%lO-u~.gOt~~.jRO;'S-u;'S;=`.s;=`O-u~.vXOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c;=`<%l-u<%lO-u~/fP;=`<%l-uj/nYjYOy%Qz!Q%Q!Q![0^![!c%Q!c!i0^!i#T%Q#T#Z0^#Z;'S%Q;'S;=`%c<%lO%Qj0cY!a`Oy%Qz!Q%Q!Q![1R![!c%Q!c!i1R!i#T%Q#T#Z1R#Z;'S%Q;'S;=`%c<%lO%Qj1WY!a`Oy%Qz!Q%Q!Q![1v![!c%Q!c!i1v!i#T%Q#T#Z1v#Z;'S%Q;'S;=`%c<%lO%Qj1}YrY!a`Oy%Qz!Q%Q!Q![2m![!c%Q!c!i2m!i#T%Q#T#Z2m#Z;'S%Q;'S;=`%c<%lO%Qj2tYrY!a`Oy%Qz!Q%Q!Q![3d![!c%Q!c!i3d!i#T%Q#T#Z3d#Z;'S%Q;'S;=`%c<%lO%Qj3iY!a`Oy%Qz!Q%Q!Q![4X![!c%Q!c!i4X!i#T%Q#T#Z4X#Z;'S%Q;'S;=`%c<%lO%Qj4`YrY!a`Oy%Qz!Q%Q!Q![5O![!c%Q!c!i5O!i#T%Q#T#Z5O#Z;'S%Q;'S;=`%c<%lO%Qj5TY!a`Oy%Qz!Q%Q!Q![5s![!c%Q!c!i5s!i#T%Q#T#Z5s#Z;'S%Q;'S;=`%c<%lO%Qj5zSrY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qd6ZUOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qd6tS!hS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qb7VSZQOy%Qz;'S%Q;'S;=`%c<%lO%Q~7fWOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z<%lO7c~8RRO;'S7c;'S;=`8[;=`O7c~8_XOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z;=`<%l7c<%lO7c~8}P;=`<%l7cj9VSeYOy%Qz;'S%Q;'S;=`%c<%lO%Q~9hOd~n9oUWQvWOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qj:YWvW!mQOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj:wU!a`Oy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Qj;bY!a`#}YOy%Qz!Q%Q!Q![;Z![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj<VY!a`Oy%Qz{%Q{|<u|}%Q}!O<u!O!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj<zU!a`Oy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj=eU!a`#}YOy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj>O[!a`#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj>yS!^YOy%Qz;'S%Q;'S;=`%c<%lO%Qj?[WvWOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj?yU]YOy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Q~@bTvWOy%Qz{@q{;'S%Q;'S;=`%c<%lO%Q~@xS!a`#t~Oy%Qz;'S%Q;'S;=`%c<%lO%QjAZ[#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%QjBUU`YOy%Qz![%Q![!]Bh!];'S%Q;'S;=`%c<%lO%QbBoSaQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjCQSkYOy%Qz;'S%Q;'S;=`%c<%lO%QhCcU!TWOy%Qz!_%Q!_!`Cu!`;'S%Q;'S;=`%c<%lO%QhC|S!TW!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QlDaS!TW!hSOy%Qz;'S%Q;'S;=`%c<%lO%QjDtV!jQ!TWOy%Qz!_%Q!_!`Cu!`!aEZ!a;'S%Q;'S;=`%c<%lO%QbEbS!jQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjEqYOy%Qz}%Q}!OFa!O!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjFfW!a`Oy%Qz!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjGV[iY!a`Oy%Qz}%Q}!OGO!O!Q%Q!Q![GO![!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjHQSmYOy%Qz;'S%Q;'S;=`%c<%lO%QnHcSl^Oy%Qz;'S%Q;'S;=`%c<%lO%QjHtSpYOy%Qz;'S%Q;'S;=`%c<%lO%QjIVSoYOy%Qz;'S%Q;'S;=`%c<%lO%QfIhU!mQOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Q`I}P;=`<%l$q\",tokenizers:[mb,gb,$b,pb,1,2,3,4,new kt(\"m~RRYZ[z{a~~g~aO#v~~dP!P!Qg~lO#w~~\",28,129)],topRules:{StyleSheet:[0,6],Styles:[1,105]},specialized:[{term:124,get:O=>Sb[O]||-1},{term:125,get:O=>Xb[O]||-1},{term:4,get:O=>Tb[O]||-1},{term:25,get:O=>bb[O]||-1},{term:123,get:O=>yb[O]||-1}],tokenPrec:1963});var Hl=null;function Kl(){if(!Hl&&typeof document==\"object\"&&document.body){let{style:O}=document.body,e=[],t=new Set;for(let i in O)i!=\"cssText\"&&i!=\"cssFloat\"&&typeof O[i]==\"string\"&&(/[A-Z]/.test(i)&&(i=i.replace(/[A-Z]/g,r=>\"-\"+r.toLowerCase())),t.has(i)||(e.push(i),t.add(i)));Hl=e.sort().map(i=>({type:\"property\",label:i,apply:i+\": \"}))}return Hl||[]}var k$=[\"active\",\"after\",\"any-link\",\"autofill\",\"backdrop\",\"before\",\"checked\",\"cue\",\"default\",\"defined\",\"disabled\",\"empty\",\"enabled\",\"file-selector-button\",\"first\",\"first-child\",\"first-letter\",\"first-line\",\"first-of-type\",\"focus\",\"focus-visible\",\"focus-within\",\"fullscreen\",\"has\",\"host\",\"host-context\",\"hover\",\"in-range\",\"indeterminate\",\"invalid\",\"is\",\"lang\",\"last-child\",\"last-of-type\",\"left\",\"link\",\"marker\",\"modal\",\"not\",\"nth-child\",\"nth-last-child\",\"nth-last-of-type\",\"nth-of-type\",\"only-child\",\"only-of-type\",\"optional\",\"out-of-range\",\"part\",\"placeholder\",\"placeholder-shown\",\"read-only\",\"read-write\",\"required\",\"right\",\"root\",\"scope\",\"selection\",\"slotted\",\"target\",\"target-text\",\"valid\",\"visited\",\"where\"].map(O=>({type:\"class\",label:O})),w$=[\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"antialiased\",\"appworkspace\",\"asterisks\",\"attr\",\"auto\",\"auto-flow\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"axis-pan\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"button-bevel\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"color\",\"color-burn\",\"color-dodge\",\"column\",\"column-reverse\",\"compact\",\"condensed\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"darken\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"dense\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"difference\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic-abegede-gez\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-gez\",\"ew-resize\",\"exclusion\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fill-box\",\"fixed\",\"flat\",\"flex\",\"flex-end\",\"flex-start\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"graytext\",\"grid\",\"groove\",\"hand\",\"hard-light\",\"help\",\"hidden\",\"hide\",\"higher\",\"highlight\",\"highlighttext\",\"horizontal\",\"hsl\",\"hsla\",\"hue\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-grid\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"justify\",\"keep-all\",\"landscape\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"lighten\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lowercase\",\"ltr\",\"luminosity\",\"manipulation\",\"match\",\"matrix\",\"matrix3d\",\"medium\",\"menu\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"monospace\",\"move\",\"multiple\",\"multiple_mask_images\",\"multiply\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"opacity\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"perspective\",\"pinch-zoom\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row\",\"row-resize\",\"row-reverse\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"saturation\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"screen\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"self-start\",\"self-end\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"soft-light\",\"solid\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"space-around\",\"space-between\",\"space-evenly\",\"spell-out\",\"square\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"stroke-box\",\"sub\",\"subpixel-antialiased\",\"svg_masks\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"system-ui\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"to\",\"top\",\"transform\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"unidirectional-pan\",\"unset\",\"up\",\"upper-latin\",\"uppercase\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"view-box\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"wrap\",\"wrap-reverse\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\"].map(O=>({type:\"keyword\",label:O})).concat([\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"].map(O=>({type:\"constant\",label:O}))),xb=[\"a\",\"abbr\",\"address\",\"article\",\"aside\",\"b\",\"bdi\",\"bdo\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\"figure\",\"footer\",\"form\",\"header\",\"hgroup\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"meter\",\"nav\",\"ol\",\"output\",\"p\",\"pre\",\"ruby\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"tr\",\"u\",\"ul\"].map(O=>({type:\"type\",label:O})),kb=[\"@charset\",\"@color-profile\",\"@container\",\"@counter-style\",\"@font-face\",\"@font-feature-values\",\"@font-palette-values\",\"@import\",\"@keyframes\",\"@layer\",\"@media\",\"@namespace\",\"@page\",\"@position-try\",\"@property\",\"@scope\",\"@starting-style\",\"@supports\",\"@view-transition\"].map(O=>({type:\"keyword\",label:O})),Wt=/^(\\w[\\w-]*|-\\w[\\w-]*|)$/,wb=/^-(-[\\w-]*)?$/;function Zb(O,e){var t;if((O.name==\"(\"||O.type.isError)&&(O=O.parent||O),O.name!=\"ArgList\")return!1;let i=(t=O.parent)===null||t===void 0?void 0:t.firstChild;return i?.name!=\"Callee\"?!1:e.sliceString(i.from,i.to)==\"var\"}var Z$=new Tt,vb=[\"Declaration\"];function Yb(O){for(let e=O;;){if(e.type.isTop)return e;if(!(e=e.parent))return O}}function v$(O,e,t){if(e.to-e.from>4096){let i=Z$.get(e);if(i)return i;let r=[],n=new Set,s=e.cursor(C.IncludeAnonymous);if(s.firstChild())do for(let a of v$(O,s.node,t))n.has(a.label)||(n.add(a.label),r.push(a));while(s.nextSibling());return Z$.set(e,r),r}else{let i=[],r=new Set;return e.cursor().iterate(n=>{var s;if(t(n)&&n.matchContext(vb)&&((s=n.node.nextSibling)===null||s===void 0?void 0:s.name)==\":\"){let a=O.sliceString(n.from,n.to);r.has(a)||(r.add(a),i.push({label:a,type:\"variable\"}))}}),i}}var _b=O=>e=>{let{state:t,pos:i}=e,r=U(t).resolveInner(i,-1),n=r.type.isError&&r.from==r.to-1&&t.doc.sliceString(r.from,r.to)==\"-\";if(r.name==\"PropertyName\"||(n||r.name==\"TagName\")&&/^(Block|Styles)$/.test(r.resolve(r.to).name))return{from:r.from,options:Kl(),validFor:Wt};if(r.name==\"ValueName\")return{from:r.from,options:w$,validFor:Wt};if(r.name==\"PseudoClassName\")return{from:r.from,options:k$,validFor:Wt};if(O(r)||(e.explicit||n)&&Zb(r,t.doc))return{from:O(r)||n?r.from:i,options:v$(t.doc,Yb(r),O),validFor:wb};if(r.name==\"TagName\"){for(let{parent:o}=r;o;o=o.parent)if(o.name==\"Block\")return{from:r.from,options:Kl(),validFor:Wt};return{from:r.from,options:xb,validFor:Wt}}if(r.name==\"AtKeyword\")return{from:r.from,options:kb,validFor:Wt};if(!e.explicit)return null;let s=r.resolve(i),a=s.childBefore(i);return a&&a.name==\":\"&&s.name==\"PseudoClassSelector\"?{from:i,options:k$,validFor:Wt}:a&&a.name==\":\"&&s.name==\"Declaration\"||s.name==\"ArgList\"?{from:i,options:w$,validFor:Wt}:s.name==\"Block\"||s.name==\"Styles\"?{from:i,options:Kl(),validFor:Wt}:null},Rb=_b(O=>O.name==\"VariableName\"),xr=ne.define({name:\"css\",parser:x$.configure({props:[se.add({Declaration:le()}),te.add({\"Block KeyframeList\":me})]}),languageData:{commentTokens:{block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*\\}$/,wordChars:\"-\"}});function ys(){return new J(xr,xr.data.of({autocomplete:Rb}))}var Vb=177,qb=179,zb=184,Ub=12,Wb=13,jb=17,Cb=20,Gb=25,Eb=53,Ab=95,Lb=142,Mb=144,Db=145,Ib=148,Bb=10,Nb=13,Fb=32,Hb=9,Y$=47,Kb=41,Jb=125,ey=new z((O,e)=>{for(let t=0,i=O.next;(e.context&&(i<0||i==Bb||i==Nb||i==Y$&&O.peek(t+1)==Y$)||i==Kb||i==Jb)&&O.acceptToken(Vb),!(i!=Fb&&i!=Hb);)i=O.peek(++t)},{contextual:!0}),ty=new Set([Ab,zb,Cb,Ub,jb,Mb,Db,Lb,Ib,Wb,Eb,Gb]),Oy=new Ge({start:!1,shift:(O,e)=>e==qb?O:ty.has(e)}),iy=F({\"func interface struct chan map const type var\":d.definitionKeyword,\"import package\":d.moduleKeyword,\"switch for go select return break continue goto fallthrough case if else defer\":d.controlKeyword,range:d.keyword,Bool:d.bool,String:d.string,Rune:d.character,Number:d.number,Nil:d.null,VariableName:d.variableName,DefName:d.definition(d.variableName),TypeName:d.typeName,LabelName:d.labelName,FieldName:d.propertyName,\"FunctionDecl/DefName\":d.function(d.definition(d.variableName)),\"TypeSpec/DefName\":d.definition(d.typeName),\"CallExpr/VariableName\":d.function(d.variableName),LineComment:d.lineComment,BlockComment:d.blockComment,LogicOp:d.logicOperator,ArithOp:d.arithmeticOperator,BitOp:d.bitwiseOperator,\"DerefOp .\":d.derefOperator,\"UpdateOp IncDecOp\":d.updateOperator,CompareOp:d.compareOperator,\"= :=\":d.definitionOperator,\"<-\":d.operator,'~ \"*\"':d.modifier,\"; ,\":d.separator,\"... :\":d.punctuation,\"( )\":d.paren,\"[ ]\":d.squareBracket,\"{ }\":d.brace}),ry={__proto__:null,package:10,import:18,true:380,false:380,nil:383,struct:48,func:68,interface:78,chan:94,map:118,make:157,new:159,const:204,type:212,var:224,if:236,else:238,switch:242,case:248,default:250,for:260,range:266,go:270,select:274,return:284,break:288,continue:290,goto:292,fallthrough:296,defer:300},_$=Oe.deserialize({version:14,states:\"!=xO#{QQOOP$SOQOOO&UQTO'#CbO&]QRO'#FlO]QQOOOOQP'#Cn'#CnOOQP'#Co'#CoO&eQQO'#C|O(kQQO'#C{O)]QRO'#GiO+tQQO'#D_OOQP'#Ge'#GeO+{QQO'#GeO.aQTO'#GaO.hQQO'#D`OOQP'#Gm'#GmO.mQRO'#GdO/hQQO'#DgOOQP'#Gd'#GdO/uQQO'#DrO2bQQO'#DsO4QQTO'#GqO,^QTO'#GaO4XQQO'#DxO4^QQO'#D{OOQO'#EQ'#EQOOQO'#ER'#EROOQO'#ES'#ESOOQO'#ET'#ETO4cQQO'#EPO5}QQO'#EPOOQP'#Ga'#GaO6UQQO'#E`O6^QQO'#EcOOQP'#G`'#G`O6cQQO'#EsOOQP'#G_'#G_O&]QRO'#FnOOQO'#Fn'#FnO9QQQO'#G^QOQQOOO&]QROOO9XQQO'#C`O9^QSO'#CdO9lQQO'#C}O9tQQO'#DSO9yQQO'#D[O:kQQO'#CsO:pQQO'#DhO:uQQO'#EeO:}QQO'#EiO;VQQO'#EoO;_QQO'#EuO<uQQO'#ExO<|QQO'#FRO4cQQO'#FWO=WQQO'#FYO=]QRO'#F_O=jQRO'#FaO=uQQO'#FaOOQP'#Fe'#FeO4cQQO'#FgP=zOWO'#C^POOO)CAz)CAzOOQO'#G]'#G]OOQO,5<W,5<WOOQO-E9j-E9jO?TQTO'#CqOOQO'#C|'#C|OOQP,59g,59gO?tQQO'#D_O@fQSO'#FuO@kQQO'#C}O@pQQO'#D[O9XQQO'#FqO@uQRO,5=TOAyQQO,59yOCVQSO,5:[O@kQQO'#C}OCaQQO'#DjOOQP,59^,59^OOQO,5<a,5<aO?tQQO'#DeOOQO,5:e,5:eOOQO-E9s-E9sOOQP,59z,59zOOQP,59|,59|OCqQSO,5:QO(kQQO,5:ROC{QQO,5:RO&]QRO'#FxOOQO'#Fx'#FxOFjQQO'#GpOFwQQO,5:^OF|QQO,5:_OHdQQO,5:`OHlQQO,5:aOHvQRO'#FyOIaQRO,5=]OIuQQO'#DzOOQP,5:d,5:dOOQO'#EV'#EVOOQO'#EW'#EWOOQO'#EX'#EXOOQO'#EZ'#EZOOQO'#E['#E[O4cQQO,5:pO4cQQO,5:pO4cQQO,5:pO4cQQO,5:pO4cQQO,5:pO4cQQO,5:wOOQP,5:x,5:xO?tQQO'#EOOOQP,5:g,5:gOOQP,5:k,5:kO9yQQO,59vO4cQQO,5:zO4cQQO,5:}OI|QRO,5;_OOQO,5<Y,5<YOOQO-E9l-E9lO]QQOOOOQP'#Cb'#CbOOQP,58z,58zOOQP'#Cf'#CfOJWQQO'#CfOJ]QSO'#CkOOQP,59O,59OOJkQQO'#DPOLZQQO,5<UOLbQQO,59iOLsQQO,5<TOMpQQO'#DUOOQP,59n,59nOOQP,59v,59vONfQQO,59vONmQQO'#CwOOQP,59_,59_O?tQQO,5:SONxQRO'#EgO! VQQO'#EhOOQP,5;P,5;PO! |QQO'#EkO!!WQQO'#EnOOQP,5;T,5;TO!!`QRO'#EqO!!mQQO'#ErOOQP,5;Z,5;ZO!!uQTO'#CbO!!|QTO,5;aO&]QRO,5;aO!#WQQO,5;jO!$yQTO,5;dO!%WQQO'#EzOOQP,5;d,5;dO&]QRO,5;dO!%cQSO,5;mO!%mQQO'#E`O!%uQQO'#EcO!%zQQO'#FTO!&UQQO'#FTOOQP,5;m,5;mO!&ZQQO,5;mO!&`QTO,5;rO!&mQQO'#F[OOQP,5;t,5;tO!&xQTO'#GqOOQP,5;y,5;yOOQP'#Et'#EtOOQP,5;{,5;{O!']QTO,5<RPOOO'#Fk'#FkP!'jOWO,58xPOOO,58x,58xO!'uQQO,59yO!'zQQO'#GgOOQP,59i,59iO(kQQO,59vOOQP,5<],5<]OOQP-E9o-E9oOOQP1G/e1G/eOOQP1G/v1G/vO!([QSO'#DlO!(lQQO'#DlO!(wQQO'#DkOOQO'#Go'#GoO!(|QQO'#GoO!)UQQO,5:UO!)ZQQO'#GnO!)fQQO,5:PPOQO'#Cq'#CqO(kQQO1G/lOOQP1G/m1G/mO(kQQO1G/mOOQO,5<d,5<dOOQO-E9v-E9vOOQP1G/x1G/xO!)kQSO1G/yOOQP'#Cy'#CyOOQP1G/z1G/zO?tQQO1G/}O!)xQSO1G/{O!*YQQO1G/|O!*gQTO,5<eOOQP-E9w-E9wOOQP,5:f,5:fO!+QQQO,5:fOOQP1G0[1G0[O!,vQTO1G0[O!.wQTO1G0[O!/OQTO1G0[O!0pQTO1G0[O!1QQTO1G0cO!1bQQO,5:jOOQP1G/b1G/bOOQP1G0f1G0fOOQP1G0i1G0iOOQP1G0y1G0yOOQP,59Q,59QO&]QRO'#FmO!1mQSO,59VOOQP,59V,59VOOQO'#DQ'#DQO?tQQO'#DQO!1{QQO'#DQOOQO'#Gh'#GhO!2SQQO'#GhO!2[QQO,59kO!2aQSO'#CqOJkQQO'#DPOOQP,5=R,5=RO@kQQO1G1pOOQP1G/w1G/wO.hQQO'#ElO!2rQRO1G1oO@kQQO1G1oO@kQQO'#DVO?tQQO'#DWOOQP'#Gk'#GkO!2}QRO'#GjOOQP'#Gj'#GjO&]QRO'#FsO!3`QQO,59pOOQP,59p,59pO!3gQRO'#CxO!3uQQO'#CxO!3|QRO'#CxO.hQQO'#CxO&]QRO'#FoO!4XQQO,59cOOQP,59c,59cO!4dQQO1G/nO4cQQO,5;RO!4iQQO,5;RO&]QRO'#FzO!4nQQO,5;SOOQP,5;S,5;SO!6aQQO'#DgO?tQQO,5;VOOQP,5;V,5;VO&]QRO'#F}O!6hQQO,5;YOOQP,5;Y,5;YO!6pQRO,5;]O4cQQO,5;]O&]QRO'#GOO!6{QQO,5;^OOQP,5;^,5;^O!7TQRO1G0{O!7`QQO1G0{O4cQQO1G1UO!8vQQO1G1UOOQP1G1O1G1OO!9OQQO'#GPO!9YQQO,5;fOOQP,5;f,5;fO4cQQO'#E{O!9eQQO'#E{O<uQQO1G1OOOQP1G1X1G1XO!9jQQO,5:zO!9jQQO,5:}O!9tQSO,5;oO!:OQQO,5;oO!:VQQO,5;oO!9OQQO'#GRO!:aQQO,5;vOOQP,5;v,5;vO!<PQQO'#F]O!<WQQO'#F]POOO-E9i-E9iPOOO1G.d1G.dO!<]QQO,5:VO!<gQQO,5=ZO!<tQQO,5=ZOOQP1G/p1G/pO!<|QQO,5=YO!=WQQO,5=YOOQP1G/k1G/kOOQP7+%W7+%WOOQP7+%X7+%XOOQP7+%e7+%eO!=cQQO7+%eO!=hQQO7+%iOOQP7+%g7+%gO!=mQQO7+%gO!=rQQO7+%hO!>PQSO7+%hOOQP7+%h7+%hO4cQQO7+%hOOQP1G0Q1G0QO!>^QQO1G0QOOQP1G0U1G0UO!>fQQO1G0UOF|QQO1G0UOOQO,5<X,5<XOOQO-E9k-E9kOOQP1G.q1G.qOOQO,59l,59lO?tQQO,59lO!?cQQO,5=SO!?jQQO,5=SOOQP1G/V1G/VO!?rQQO,59yO!?}QRO7+'[O!@YQQO'#EmO!@dQQO'#HOO!@lQQO,5;WOOQP7+'Z7+'ZO!@qQRO7+'ZOOQP,59q,59qOOQP,59r,59rOOQO'#DZ'#DZO!@]QQO'#FtO!@|QRO,59tOOQO,5<_,5<_OOQO-E9q-E9qOOQP1G/[1G/[OOQP,59d,59dOHgQQO'#FpO!3uQQO,59dO!A_QRO,59dO!AjQRO,59dOOQO,5<Z,5<ZOOQO-E9m-E9mOOQP1G.}1G.}O(kQQO7+%YOOQP1G0m1G0mO4cQQO1G0mOOQO,5<f,5<fOOQO-E9x-E9xOOQP1G0n1G0nO!AxQQO'#GdOOQP1G0q1G0qOOQO,5<i,5<iOOQO-E9{-E9{OOQP1G0t1G0tO4cQQO1G0wOOQP1G0w1G0wOOQO,5<j,5<jOOQO-E9|-E9|OOQP1G0x1G0xO!B]QQO7+&gO!BeQSO7+&gO!CsQSO7+&pO!CzQQO7+&pOOQO,5<k,5<kOOQO-E9}-E9}OOQP1G1Q1G1QO!DRQQO,5;gOOQO,5;g,5;gO!DWQSO7+&jOOQP7+&j7+&jO!DbQQO7+&pO!7`QQO1G1[O!DgQQO1G1ZOOQO1G1Z1G1ZO!DnQSO1G1ZOOQO,5<m,5<mOOQO-E:P-E:POOQP1G1b1G1bO!DxQSO'#GqO!E]QQO'#F^O!EbQQO'#F^O!EgQQO,5;wOOQO,5;w,5;wO!ElQSO1G/qOOQO1G/q1G/qO!EyQSO'#DoO!FZQQO'#DoO!FfQQO'#DnOOQO,5<c,5<cO!FkQQO1G2uOOQO-E9u-E9uOOQO,5<b,5<bO!FxQQO1G2tOOQO-E9t-E9tOOQP<<IP<<IPOOQP<<IT<<ITOOQP<<IR<<IRO!GSQSO<<ISOOQP<<IS<<ISO4cQQO<<ISO!GaQSO<<ISOOQP7+%l7+%lO!GkQQO7+%lOOQP7+%p7+%pO!GpQQO7+%pO!GuQQO7+%pOOQO1G/W1G/WOOQO,5<^,5<^O!G}QQO1G2nOOQO-E9p-E9pOOQP<<Jv<<JvO.hQQO'#F{O!@YQQO,5;XOOQO,5;X,5;XO!HUQQO,5=jO!H^QQO,5=jOOQO1G0r1G0rOOQP<<Ju<<JuOOQP,5<`,5<`OOQP-E9r-E9rOOQO,5<[,5<[OOQO-E9n-E9nO!HfQRO1G/OOOQP1G/O1G/OOOQP<<Ht<<HtOOQP7+&X7+&XO!HqQQO'#DeOOQP7+&c7+&cOOQP<<JR<<JRO!HxQRO<<JRO!ITQQO<<J[O!I]QQO<<J[OOQO1G1R1G1ROOQP<<JU<<JUO4cQQO<<J[O!IbQSO7+&vOOQO7+&u7+&uO!IlQQO7+&uO4cQQO,5;xOOQO1G1c1G1cO!<]QQO,5:YP!<]QQO'#FwP?tQQO'#FvOOQPAN>nAN>nO4cQQOAN>nO!IsQSOAN>nOOQP<<IW<<IWOOQP<<I[<<I[O!I}QQO<<I[P!>nQQO'#FrOOQO,5<g,5<gOOQO-E9y-E9yOOQO1G0s1G0sOOQO,5<h,5<hO!JVQQO1G3UOOQO-E9z-E9zOOQP7+$j7+$jO!J_QQO'#GnO!B]QQOAN?mO!JjQQOAN?vO!JqQQOAN?vO!KzQSOAN?vOOQO<<Ja<<JaO!LRQSO1G1dO!L]QSO1G/tOOQO1G/t1G/tO!LjQSOG24YOOQPG24YG24YOOQPAN>vAN>vO!LtQQOAN>vP.hQQO'#F|OOQPG25XG25XO!LyQQOG25bO!MOQQO'#FPOOQPG25bG25bO!MZQQOG25bOOQPLD)tLD)tOOQPG24bG24bO!JqQQOLD*|O!9OQQO'#GQO!McQQO,5;kOOQP,5;k,5;kO?tQQO'#FQO!MnQQO'#FQO!MsQQOLD*|OOQP!$'Nh!$'NhOOQO,5<l,5<lOOQO-E:O-E:OOOQP1G1V1G1VO!MzQQO,5;lOOQO,5;l,5;lO!NPQQO!$'NhOOQO1G1W1G1WO!JqQQO!)9DSOOQP!.K9n!.K9nO# {QTO'#CqO#!`QTO'#CqO##}QSO'#CqO#$XQSO'#CqO#&]QSO'#CqO#&gQQO'#FyO#&tQQO'#FyO#'OQQO,5=]O#'ZQQO,5=]O#'cQQO,5:pO!7`QQO,5:pOF|QQO,5:pO#'cQQO,5:pO!7`QQO,5:pOF|QQO,5:pO#'cQQO,5:pO!7`QQO,5:pOF|QQO,5:pO#'cQQO,5:pO!7`QQO,5:pOF|QQO,5:pO#'cQQO,5:pO!7`QQO,5:pOF|QQO,5:pO!7`QQO,5:wO!7`QQO,5:zO!7`QQO,5:}O#(yQSO'#CbO#)}QSO'#CbO#*bQSO'#GqO#*rQSO'#GqO#+PQRO'#GgO#+yQSO,5<eO#,ZQSO,5<eO#,hQSO1G0[O#-rQTO1G0[O#-yQSO1G0[O#.TQSO1G0[O#0{QTO1G0[O#1SQSO1G0[O#2eQSO1G0[O#2lQTO1G0[O#2sQSO1G0[O#4XQSO1G0[O#4`QTO1G0[O#4jQSO1G0[O#4wQSO1G0cO#5dQTO'#CqO#5kQTO'#CqO#6bQSO'#GqO#'cQQO'#EPO!7`QQO'#EPOF|QQO'#EPO#8]QQO'#EPO#8gQQO'#EPO#8qQQO'#EPO#8{QQO'#E`O#9TQQO'#EcO@kQQO'#C}O?tQQO,5:RO#9YQQO,59vO#:iQQO,59vO?tQQO,59vO?tQQO1G/lO?tQQO1G/mO?tQQO7+%YO?tQQO'#C{O#:pQQO'#DgO#9YQQO'#D[O#:wQQO'#D[O#:|QSO,5:QO#;WQQO,5:RO#;]QQO1G/nO?tQQO,5:SO#;bQQO'#Dh\",stateData:\"#;m~O$yOSPOS$zPQ~OVvOX{O[oO^YOaoOdoOh!POjcOr|Ow}O!P!OO!QnO!WaO!]!QO!phO!qhO#Y!RO#^!SO#d!TO#j!UO#m!VO#v!WO#{!XO#}!YO$S!ZO$U![O$V![O$W!]O$Y!^O$[!_O%OQO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO$v%QP~OTzO~P]O$z!`O~OVeXZeX^eX^!TXj!TXnUXneX!QeX!WeX!W!TX!|eX#ReX#TeX#UeX#WUX$weX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeX~O!a#hX~P$XOV!bO$w!bO~O[!wX^pX^!wXa!wXd!wXhpXh!wXrpXr!wXwpXw!wX!PpX!P!wX!QpX!Q!wX!WpX!W!wX!]pX!]!wX!p!wX!q!wX%OpX%O!wX%U!wX%V!wX%YpX%Y!wX%f!wX%g!wX%h!wX%i!wX%j!wX~O^!hOh!POr!jOw}O!P!OO!Q!kO!WaO!]!QO%O!eO%Y!fO~On!lO#W%]XV%]X^%]Xh%]Xr%]Xw%]X!P%]X!Q%]X!W%]X!]%]X#T%]X$w%]X%O%]X%Y%]Xu%]X~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!WaO!]!QO!phO!qhO%O+wO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O!Q-OO~P*aOj!qO^%XX]%XXn%XX!V%XX~O!W!tOV%TXZ%TX^%TXn%TX!Q%TX!W%TX!|%TX#R%TX#T%TX#U%TX$w%TX%Y%TX%`%TX%f%TX%g%TX%i%TX%j%TX%k%TX%l%TX%m%TX%n%TX%o%TX%p%TX%q%TX]%TX!V%TXj%TXi%TX!a%TXu%TX~OZ!sO~P,^O%O!eO~O!W!tO^%WXj%WX]%WXn%WX!V%WXu%WXV%WX$w%WX%`%WX#T%WX[%WX!a%WX~Ou!{O!QnO!V!zO~P*aOV!}O[oO^YOaoOdoOh!POjcOr!pOw}O!P!OO!QnO!WaO!]!QO!phO!qhO#Y!RO#^!SO#d!TO#j!UO#m!VO#v!WO#{!XO#}!YO$S!ZO$U![O$V![O$W!]O$Y!^O$[!_O%OQO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlOi%dP~O^#QO~OZ#RO^#VOn#TO!Q#cO!W#SO#R#dO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]OV`X#T%eX#U%eX$w`X~O!|#`O~P2gO^#VO~O^#eO~O!QnO~P*aO[oO^YOaoOdoOh!POr!pOw}O!QnO!WaO!]!QO!phO!qhO%O+wO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O!P#hO~P4jO#T#iO#U#iO~O#W#jO~O!a#kO~OVvO[oO^YOaoOdoOh!POjcOr|Ow}O!P!OO!QnO!WaO!]!QO!phO!qhO#Y!RO#^!SO#d!TO#j!UO#m!VO#v!WO#{!XO#}!YO$S!ZO$U![O$V![O$W!]O$Y!^O$[!_O%OQO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O$v%QX~P6hO%O#oO~OZ#rO[#qO^#sO%O#oO~O^#uO%O#oO~Oj#yO~O^!hOh!POr!jOw}O!P!OO!Q#|O!WaO!]!QO%O!eO%Y!fO~Oj#}O~O!W$PO~O^$RO%O#oO~O^$UO%O#oO~O^$XO%O#oO~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-PO!WaO!]!QO!phO!qhO%O$ZO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~Oj$`O~P;_OV$fOjcO~P;_Oj$kO~O!QnOV$RX$w$RX~P*aO%O$oOV$TX$w$TX~O%O$oO~O${$rO$|$rO$}$tO~OZeX^!TX!W!TXj!TXn!TXh!TXr!TXw!TX{!TX!P!TX!Q!TX!]!TX%O!TX%Y!TX~O]!TX!V!TXu!TX#T!TXV!TX$w!TX%`!TX[!TX!a!TX~P>VO^!hOh!POr-TOw}O!P-_O!Q-`O!W-^O!]-eO%O!eO%Y!fO~OZ!sO~O^#uO~O!P$xO~On!lO#W%]aV%]a^%]ah%]ar%]aw%]a!P%]a!Q%]a!W%]a!]%]a#T%]a$w%]a%O%]a%Y%]au%]a~O]${O^#QO~OZ#RO^#VO!W#SO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]O~O]$|O!|,WO~PBROj!qOn%QO!QnOi%cP~P*aO!V%WO!|#`O~PBRO!V%YO~OV!}O[oO^YOaoOdoOh!POjcOr!pOw}O!P!OO!QnO!WaO!]!QO!phO!qhO#Y!RO#^!SO#d!TO#j!UO#m!VO#v!WO#{!XO#}!YO$S!ZO$U![O$V![O$W!]O$Y!^O$[!_O%OQO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~Oi%dX#p%dX#q%dX~PDQOi%]O~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-QO!WaO!]!QO!phO!qhO%O+{O%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O^%aO%O%_O~O!QnO!a%cO~P*aO!QnOn$mX#T$mX#U$mXV$mX$w$mX!a$mX~P*aOn#TO#T%ea#U%eaV%ea$w%ea!a%ea~O]%fO~PF|OV#ga$w#ga~PDTO[%sO~OZ#rO[#qO]%vO%O#oO~O^!hOh!POn%zOr-TOu%xOw}O!P-_O!Q-`O!W-^O!]-eO%O,dO%Y!fO]%[P~O^&OOh!POr!jOw}O!P!OO!Q!kO!WaO!]!QO%Y!fO^%ZXj%ZX~O%O%}O~PKfOjcO^qa]qanqa!Vqa~O^#uO!W&SO~O^!hOh!POr-TOw}O{&WO!P-_O!Q-`O!W-^O!]-eO%O,xO%Y!fO~Oi&^O~PL{O^!hOh!POr!jOw}O!Q!kO!WaO!]!QO%O!eO%Y!fO~O!P#hO~PMwOi&eO%O,yO%Y!fO~O#T&gOV#ZX$w#ZX~P?tO]&kO%O#oO~O^!hOh!POr-TOw}O!P-_O!Q-`O!]-eO%O!eO%Y!fO~O!W&lO#T&mO~P! _O]&qO%O#oO~O#T&sOV#eX$w#eX~P?tO]&vO%O#oO~OjeX~P$XOjcO!|,XO~P2gOn!lO#W&yO#W%]X~O^#VOn#TO!Q#cO!W#SO!|,XO#R#dO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]OV`X#T%eX#U%eX~OZ&zOj$`O$w`X~P!#cOi'OO#p'PO#q'QO~OZ#ROjcO~P!#cO#T'TO#U#iO~O#W'UO~OV'WO!QnO~P*aOV'XO~OjcO~O!|#`OV#za$w#za~PBROi'[O#p']O#q'^O~On#TO!|#`OV%eX$w%eX!a%eX~PBRO!|#`OV$Za$w$Za~PBRO${$rO$|$rO$}'`O~O]${O~O%O!eO]%ZXn%ZX!V%ZX~PKfO!|#`Oi!_Xn!_X!a!`X~PBROi!_Xn!_X!a!`X~O!a'aO~On'bOi%cX~Oi'dO~On'eO!V%bX!a%bX~O!V'gO~O]'jOn'kO!|,YO~PBROn'nO!V'mO!a'oO!|#`O~PBRO!QnO!V'qO!a'rO~P*aO!|#`On$ma#T$ma#U$maV$ma$w$ma!a$ma~PBRO]'sOu'tO~O%Y#XO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOV!xiZ!xi^!xin!xi!Q!xi!W!xi!|!xi#R!xi#T!xi#U!xi$w!xi%`!xi%f!xi%g!xi%i!xi%p!xi%q!xi~O!V!xii!xi!a!xi~P!+YO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOV!xiZ!xi^!xin!xi!Q!xi!W!xi#R!xi#T!xi#U!xi$w!xi%p!xi%q!xi!V!xii!xi!a!xi~O!|!xi~P!-TO!|#`O~P!-TO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[OV!xiZ!xi^!xin!xi!Q!xi!W!xi#R!xi#T!xi#U!xi$w!xi%q!xi~O!|#`O!V!xii!xi!a!xi~P!/VO!|#`OV#Pi$w#Pi!a#Pi~PBRO]'uOn'wOu'vO~OZ#rO[#qO]'zO%O#oO~Ou'|O~P?tOn'}O]%[X~O](PO~OZeX^mX^!TXj!TX!W!TX~OjcOV$]i$w$]i~O%`(ZOV%^X$w%^Xn%^X!V%^X~Oi(`O~PL{O[(aO!W!tOVlX$wlX~On(bO~P?tO[(aOVlX$wlX~Oi(hO%O,yO%Y!fO~O!V(iO~O#T(kO~O](nO%O#oO~O[oO^YOaoOdoOh!POr!pOu-bOw}O!P!OO!QnO!V-UO!WaO!]!QO!phO!qhO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O%O+zO~P!4vO](sO%O#oO~O#T(tOV#ea$w#ea~O](xO%O#oO~O#k(yOV#ii$w#ii~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-PO!WaO!]!QO!phO!qhO%O+xO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O^(|O%O%_O~O#p%dP#q%dP~P/uOi)PO#p'PO#q'QO~O!a)RO~O!QnO#y)VO~P*aOV)WO!|#`O~PBROj#wa~P;_OV)WO!QnO~P*aOi)]O#p']O#q'^O~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!QnO!WaO!]!QO!phO!qhO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O%O,eO~P!:lO!a)bO~Oj!qO!QnO~P*aOj!qO!QnOi%ca~P*aOn)iOi%ca~O!V%ba!a%ba~P?tOn)lO!V%ba!a%ba~O])nO~O])oO~O!V)pO~O!QnO!V)rO!a)sO~P*aO!V)rO!a)sO!|#`O~PBRO])uOn)vO~O])wOn)xO~O^!hOh!POr-TOu%xOw}O!P-_O!Q-`O!W-^O!]-eO%O,dO%Y!fO~O]%[a~P!>nOn)|O]%[a~O]${O]tXntX~OjcOV$^q$w$^q~On*PO{&WO~P?tOn*SO!V%rX~O!V*UO~OjcOV$]q$w$]q~O%`(ZOV|a$w|an|a!V|a~O[*]OVla$wla~O[*]O!W!tOVla$wla~On*PO{&WO!W*`O^%WXj%WX~P! _OjcO#j!UO~OjcO!|,XO~PBROZ*dO^#VO!W#SO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]O~O!|#`O~P!BoO#^*eO~P?tO!a*fO~Oj$`O!|,XO~P!BoO#W*hO~Oj#wi~P;_OV*kO!|#`O~PBROn#TO!Q#cO!|#`O!a$QX#T%eX~PBRO#T*lO~O#W*lO~O!a*mO~O!|#`Oi!_in!_i~PBRO!|#`Oi!bXn!bX!a!cX~PBROi!bXn!bX!a!cX~O!a*nO~Oj!qO!QnOi%ci~P*aO!V%bi!a%bi~P?tO!V*qO!a*rO!|#`O~PBRO!V*qO!|#`O~PBRO]*tO~O]*uO~O]*uOu*vO~O]%[i~P!>nO%O!eO!V%ra~On*|O!V%ra~O[+OOVli$wli~O%O+yO~P!4vO#k+QOV#iy$w#iy~O^+RO%O%_O~O]+SO~O!|,XOj#xq~PBROj#wq~P;_O!V+ZO!|#`O~PBRO]+[On+]O~O%O!eO!V%ri~O^#QOn'eO!V%bX~O#^+`O~P?tOj+aO~O^#VO!W#SO!|#`O%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[O%q#]O~OZ+cO~P!JvO!|#`O!a$Qi~PBRO!|#`Oi!bin!bi~PBRO!V+dO!|#`O~PBRO]+eO~O]+fO~Oi+iO#p+jO#q+kO~O^+lO%O%_O~Oi+pO#p+jO#q+kO~O!a+rO~O#^+sO~P?tO!a+tO~O]+uO~OZeX^eX^!TXj!TX!WeX!W!TX!|eX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeXVeXneX!QeX#ReX#TeX#UeX$weX~O]eX]!TX!VeXieX!aeX~P!NUOjeX~P!NUOZeX^eX^!TXj!TX!WeX!W!TX!|eX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeXn!TX!VeX~O]eX!V!TX~P#!gOh!TXr!TXw!TX{!TX!P!TX!Q!TX!]!TX%O!TX%Y!TX~P#!gOZeX^eX^!TXj!TXneX!WeX!W!TX!|eX%YeX%`eX%feX%geX%ieX%jeX%keX%leX%meX%neX%oeX%peX%qeX~O]eXueX~P#$xO]$mXn$mXu$mX~PF|Oj$mXn$mX~P!7`On+|O]%eau%ea~On+}Oj%ea~O[oO^YOaoOdoOh!POr!pOw}O!P!OO!Q-OO!WaO!]!QO!phO!qhO%O+yO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~OZeX]!TX^UXhUXnUXn!TXrUXuUXwUX!PUX!QUX!WUX!W!TX!]UX%OUX%YUX~OnUX!QeX!aeX#TeX#WUX~P#$xOn+|O!|,YO]%eXu%eX~PBROn+}O!|,XOj%eX~PBRO^&OOV%ZXj%ZX$w%ZX]%ZXn%ZX!V%ZXu%ZX%`%ZX#T%ZX[%ZX!a%ZX~P?wO!|,YO]$man$mau$ma~PBRO!|,XOj$man$ma~PBRO%Y#XO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOZ!xi]!xi^!xi!W!xi!|!xi%`!xi%f!xi%g!xi%i!xi%p!xi%q!xi~Oj!xi~P!+YOn!xiu!xi~P#,hO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOZ!xi]!xi^!xi!W!xi!|!xi%p!xi%q!xi~O%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOV!xiZ!xi^!xij!xin!xi!Q!xi!W!xi#R!xi#T!xi#U!xi$w!xi%p!xi%q!xi~O!|!xi~P#/_On!xiu!xi~P#.TO%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YOZ!xi]!xi^!xi!W!xi%p!xi%q!xi~O!|,WO~P#1^O!|,XO~P#/_O!|,YOn!xiu!xi~P#1^O%Y#XO%`#ZO%fiO%giO%i#ZO%j#YO%k#XO%l#XO%m#YO%n#YO%o#YO%p#[OZ!xi]!xi^!xi!W!xi%q!xi~O!|,WO~P#3QO!|,XOj!xi~P!/VO!|,YOn!xiu!xi~P#3QO!|,XOj#Pi~PBROV!TXZeX^mX!W!TX$w!TX~O%`!TX~P#5RO[!TXhmXnmXrmXwmX!PmX!QmX!WmX!]mX%OmX%YmX~P#5ROn#TO!Q,aO!|,XO#R#dOj`X#T%eX#U%eX~PBRO[oO^YOaoOdoOh!POr!pOw}O!P#hO!WaO!]!QO!phO!qhO%UTO%VUO%YVO%fiO%giO%hjO%ikO%jlO~O!Q-OO%O+yO~P#6{O!Q-PO%O+xO~P#6{O!Q-QO%O+{O~P#6{O#T,bO#U,bO~O#W,cO~O^!hOh!POr-TOw}O!P-_O!Q-WO!W-^O!]-eO%O!eO%Y!fO~O^!hOh!POr-TOw}O!Q-`O!W-^O!]-eO%O!eO%Y!fO~O!P-VO~P#9zO%O+wO~P!4vO!P-XO~O!V-YO!|#`O~PBRO!V-ZO~O!V-[O~O!W-dO~OP%ka%Oa~\",goto:\"!FW%sPP%tP%wP%zP'SP'XPPPP'`'cP'u'uP)w'u-_PPP0j0m0qP1V4b1VP7s8WP1VP8a8d8hP8p8w1VPP1V8{<`?vPPCY-_-_-_PCdCuCxPC{DQ'u'uDV'uES'u'u'u'uGUIW'uPPJR'uJUMjMjMj'u! r! r!#SP!$`!%d!&d'cP'cPP'cP!&yP!'V!'^!&yP!'a!'h!'n!'w!&yP!'z!(R!&y!(U!(fPP!&yP!(x!)UPP!&y!)Y!)c!&yP!)g!)gP!&yP!&yP!)j!)m!&v!&yP!&yPPP!&yP!&yP!)q!)q!)w!)}!*U!*[!*d!*j!*p!*w!*}!+T!+Z!.q!.x!/O!/X!/m!/s!/z!0Q!0W!0^!0d!0jPPPPPPPPP!0p!1f!1k!1{!2kPP!7P!:^P!>u!?Z!?_!@Z!@fP!@p!D_!Df!Di!DuPPPPPPPPPPPP!FSR!aPRyO!WXOScw!R!T!U!W#O#k#n#u$R$X&O&j&u&|'W'Y']'})W)|*k*w+gQ#pzU#r{#s%uQ#x|U$T!S$U&pQ$^!VQ$y!lR)U'RVROS#nQ#t{T%t#s%uR#t{qrOScw!U!V!W#O#k#n&|'W'Y)W*k+g%PoOSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^%O]OSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^#u!iW^!O!h!t!z#e#h#u#v#y#|#}$P$Q$T$W$v$x%W%Y%a%x%y&O&S&W&]&`&b&d&m'e'|'}(S([(c(i(o(|)l)|*P*Q*S*p*w*|+R+^+j+l,h-U-V-W-X-Y-Z-[-]-_-d'cbOSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dR$O!PT&c#}&dW%`#R&z*d+cQ&Q#vS&V#y&]S&`#}&dR*Y(b'cZOSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-d%fWOSWYacmnw!O!U!V!W!X!Z!_!q!z#O#Q#S#T#V#^#_#`#a#b#c#h#i#j#k#n#v#|$f$v$x%W%Y%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(i(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^S&b#}&d!{-]!h!t#e#u#y$P$Q$T$W%a%x%y&O&W&]&`&m'e'|'}(S([(c(o(|)l)|*Q*p*w+R+j+l,h-U-V-W-X-Y-Z-[-]-_-dQ#v|S$v!j!pU&P#v$v,hZ,h#x&Q&U&V-TS%{#u&OV){'})|*wR#z}T&[#y&]]&X#y&](S([(o*QZ&Z#y&](S(o*QT([&Y(]'s_OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|#}$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&S&W&]&`&b&d&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*P*Q*S*`*h*k*l*n*o*p*r*w*|+R+^+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-d'r_OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|#}$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&S&W&]&`&b&d&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*P*Q*S*`*h*k*l*n*o*p*r*w*|+R+^+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dR!w^'bbOSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dS&a#}&dR(d&bS!u]fX!x`&_(e(oQ!r[Q%O!qQ)d'aU)f'b)i*oR+X*nR%R!qR%P!qV)h'b)i*oV)g'b)i*odtOScw#O#k#n&|'Y+gQ$h!WQ&R#wQ&w$[S'S$c$iQ(V&TQ*O(RQ*V(WQ*b(yQ*c(zR+_+Q%PfOSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^%PgOSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^!q#Weg!o!y$[$_$c$j$m$q$}%^%b%d%m'V'p(z({)S)Y)^)c)e)q)t*i*s+T+V+W+Y,f,g,i,j,w,z-aR#fh#^mOSacmnw!X!Z!_!q#O#S#T#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&y&|'P'T'U'X'Y']'a'b'o'r(k(t)i)s*`*h*l*n*o*r+g-^!W#_e!y$j$m$q$}%b%d%j%k%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aW,T!o,n,q,tj,U$[$_$c(z)S*i,g,j,o,r,u,w,z[,V%^,f,i,p,s,v`,{Y,Q,T,W,Z,^,{-Ox,|!U!V!W&x'R'W)V)W*k+},R,U,X,[,_,a,b,c,|-Pg,}#Q#V'w+|,S,V,Y,],`,}-Q#^mOSacmnw!X!Z!_!q#O#S#T#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&y&|'P'T'U'X'Y']'a'b'o'r(k(t)i)s*`*h*l*n*o*r+g-^`,{Y,Q,T,W,Z,^,{-Ox,|!U!V!W&x'R'W)V)W*k+},R,U,X,[,_,a,b,c,|-Pg,}#Q#V'w+|,S,V,Y,],`,}-Q!Y#^e!y$j$m$q$}%b%d%i%j%k%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aY,Q!o,k,n,q,tl,R$[$_$c(z)S*i,g,j,l,o,r,u,w,z_,S%^,f,i,m,p,s,v!W#_e!y$j$m$q$}%b%d%j%k%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aW,T!o,n,q,tj,U$[$_$c(z)S*i,g,j,o,r,u,w,z],V%^,f,i,p,s,v!S#ae!y$j$m$q$}%b%d%l%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aS,Z!o,tf,[$[$_$c(z)S*i,g,j,u,w,zX,]%^,f,i,v!Q#be!y$j$m$q$}%b%d%m'V'p({)Y)^)c)e)q)t*s+T+V+W+Y-aQ,^!od,_$[$_$c(z)S*i,g,j,w,zV,`%^,f,iprOScw!U!V!W#O#k#n&|'W'Y)W*k+gR)a']etOScw#O#k#n&|'Y+gQ$S!RT&i$R&jR$S!RQ$V!ST&o$U&pQ&U#xR&m$TS(T&S&lV*{*S*|+^R$V!SQ$Y!TT&t$X&uR$Y!TdsOScw#O#k#n&|'Y+gT$p![!]dtOScw#O#k#n&|'Y+gQ*b(yR+_+QQ$a!VQ&{$_Q)T'RR*g)ST&|$`&}Q+b+SQ+m+fR+v+uT+g+a+hR$i!WR$l!YT'Y$k'ZXuOSw#nQ$s!`R'_$sSSO#nR!dSQ%u#sR'y%uUwOS#nR#mwQ&d#}R(g&dQ(c&`R*Z(cS!mX$^R$z!mQ(O%{R)}(OQ&]#yR(_&]Q(]&YR*X(]'r^OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|#}$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&S&W&]&`&b&d&g&l&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*P*Q*S*`*h*k*l*n*o*p*r*w*|+R+^+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dR!v^S'f%T+PR)m'fQ'c%RR)j'cW#Oc&|'Y+gR%[#O^#Ue$[$_$c$m)^,zU%e#U,O,PQ,O,fR,P,gQ&j$RR(m&jS*Q(S(oR*y*QQ*T(TR*}*TQ&p$UR(r&pQ&u$XR(w&uQ&}$`R)O&}Q+h+aR+o+hQ'Z$kR)['ZQ!cRQ#luQ#nyQ%Z!|Q&x$]Q'R$bQ'x%tQ(^&[Q(f&cQ(l&iQ(q&oR(v&tVxOS#nWuOSw#nY!|c#O&|'Y+gR%r#kdtOScw#O#k#n&|'Y+gQ$]!UQ$b!VQ$g!WQ)X'WQ*j)WR+U*kdeOScw#O#k#n&|'Y+gQ!oYQ!ya`#gmn,{,|,}-O-P-QQ$[!UQ$_!VQ$c!WQ$j!Xd$m!Z#i#j&g&s'P'T'U(k(tQ$q!_Q$}!qQ%^#QQ%b#SQ%d#TW%h#^,Q,R,SQ%i#_Q%j#`Q%k#aQ%l#bQ%m#cQ'V$fQ'p%cQ(z&xQ({&yQ)S'RQ)Y'XQ)^']Q)c'aU)e'b)i*oQ)q'oQ)t'rQ*i)VQ*s)sQ+T*hQ+V*lQ+W*nQ+Y*rS,f#V'wS,g,b,cQ,i+|Q,j+}Q,k,TQ,l,UQ,m,VQ,n,WQ,o,XQ,p,YQ,q,ZQ,r,[Q,s,]Q,t,^Q,u,_Q,v,`Q,w,aU,z'W)W*kV-a&l*`-^#bZW!O!h!t!z#e#h#u#v#y#|$P$Q$T$W$v$x%W%Y%a%x%y&O&W&]&`&m'e'|'}(S([(c(i(o(|)l)|*Q*p*w+R+j+l,h-U-V-W-X-Y-Z-[-]-_-d%P[OSYacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*`*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^$zdOSacmnw!U!V!W!X!Z!_!q#O#Q#S#T#V#^#_#`#a#b#c#i#j#k#n$f%c&g&l&s&x&y&|'P'R'T'U'W'X'Y']'a'b'o'r'w(k(t)V)W)i)s*h*k*l*n*o*r+g+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,{,|,}-O-P-Q-^S!gW-]Q!nYS#{!O-_Q$u!hS%T!t+jS%X!z-UQ%n#e[%o#h#|$x-V-W-XW%w#u'})|*wU&P#v$v,h[&X#y&](S([(o*QQ&f$PQ&h$QQ&n$TQ&r$WS'h%W-YS'i%Y-ZW'l%a(|+R+lS'{%x%yQ(Q&OQ(Y&WQ(d&`Q(p&mU)k'e)l*pQ)z'|Q*[(cS*^(i-[Q+P*`R-c-dS#w|!pS$w!j-TQ&T#xQ(R&QQ(W&UR(X&VT%|#u&OhqOScw!U!V#O#k#n&|'Y+gU$Q!R$R&jU$W!T$X&uQ$e!WY%y#u&O'})|*wQ)`']V-S'W)W*kS&[#y&]S*R(S(oR*z*QY&Y#y&](S(o*QR*W(['``OSWYacmnw!O!U!V!W!X!Z!_!h!q!t!z#O#Q#S#T#V#^#_#`#a#b#c#e#h#i#j#k#n#u#v#y#|$P$Q$T$W$f$v$x%W%Y%a%c%x%y&O&W&]&`&g&m&s&x&y&|'P'R'T'U'W'X'Y']'a'b'e'o'r'w'|'}(S([(c(i(k(o(t(|)V)W)i)l)s)|*Q*`*h*k*l*n*o*p*r*w+R+g+j+l+|+},Q,R,S,T,U,V,W,X,Y,Z,[,],^,_,`,a,b,c,h,{,|,}-O-P-Q-U-V-W-X-Y-Z-[-]-^-_-dS&_#}&dW(S&S*S*|+^Q(e&bQ(o&lR*x*PS%U!t*`R+q+jR%S!qQ#PcQ(}&|Q)Z'YR+n+ghpOScw!U!V#O#k#n&|'Y+gQ$d!WQ$n!ZQ%g#VU%p#i'T,bU%q#j'U,cQ(j&gQ(u&sQ)Q'PQ)_']Q)y'wQ*_(kQ*a(tV-R'W)W*kT(U&S&l\",nodeNames:\"\\u26A0 LineComment BlockComment SourceFile PackageClause package DefName ; ImportDecl import ImportSpec . String ) ( SpecList ExprStatement Number Bool Nil Rune VariableName TypedLiteral StructType struct } { StructBody FieldDecl FieldName , PointerType * FunctionType func Parameters Parameter ... InterfaceType interface InterfaceBody MethodElem UnderlyingType ~ TypeElem LogicOp ChannelType chan <- ParenthesizedType QualifiedType TypeName ParameterizedType ] [ TypeArgs ArrayType SliceType MapType map LiteralValue Element Key : Element Key ParenthesizedExpr FunctionLiteral Block Conversion SelectorExpr IndexExpr SliceExpr TypeAssertion CallExpr ParameterizedExpr Arguments CallExpr make new Arguments UnaryExp ArithOp LogicOp BitOp DerefOp BinaryExp ArithOp BitOp BitOp CompareOp LogicOp LogicOp SendStatement IncDecStatement IncDecOp Assignment = UpdateOp VarDecl := ConstDecl const ConstSpec SpecList TypeDecl type TypeSpec TypeParams TypeParam SpecList VarDecl var VarSpec SpecList LabeledStatement LabelName IfStatement if else SwitchStatement switch SwitchBlock Case case default TypeSwitchStatement SwitchBlock Case ForStatement for ForClause RangeClause range GoStatement go SelectStatement select SelectBlock Case ReceiveStatement ReturnStatement return GotoStatement break continue goto FallthroughStatement fallthrough DeferStatement defer FunctionDecl MethodDecl\",maxTerm:218,context:Oy,nodeProps:[[\"isolate\",-3,2,12,20,\"\"],[\"group\",-18,12,17,18,19,20,21,22,66,67,69,70,71,72,73,74,77,81,86,\"Expr\",-20,16,68,93,94,96,99,101,105,111,115,117,120,126,129,134,136,141,143,147,149,\"Statement\",-12,23,31,33,38,46,49,50,51,52,56,57,58,\"Type\"],[\"openedBy\",13,\"(\",25,\"{\",53,\"[\"],[\"closedBy\",14,\")\",26,\"}\",54,\"]\"]],propSources:[iy],skippedNodes:[0,1,2,153],repeatNodeCount:23,tokenData:\":b~RvXY#iYZ#i]^#ipq#iqr#zrs$Xuv&Pvw&^wx&yxy(qyz(vz{({{|)T|})e}!O)j!O!P)u!P!Q+}!Q!R,y!R![-t![!]2^!]!^2k!^!_2p!_!`3]!`!a3e!c!}3x!}#O4j#P#Q4o#Q#R4t#R#S4|#S#T9X#T#o3x#o#p9q#p#q9v#q#r:W#r#s:]$g;'S3x;'S;=`4d<%lO3x~#nS$y~XY#iYZ#i]^#ipq#iU$PP%hQ!_!`$SS$XO!|S~$^W[~OY$XZr$Xrs$vs#O$X#O#P${#P;'S$X;'S;=`%y<%lO$X~${O[~~%ORO;'S$X;'S;=`%X;=`O$X~%^X[~OY$XZr$Xrs$vs#O$X#O#P${#P;'S$X;'S;=`%y;=`<%l$X<%lO$X~%|P;=`<%l$X~&UP%l~!_!`&X~&^O#U~~&cR%j~vw&l!_!`&X#Q#R&q~&qO%p~~&vP%o~!_!`&X~'OWd~OY&yZw&ywx'hx#O&y#O#P'm#P;'S&y;'S;=`(k<%lO&y~'mOd~~'pRO;'S&y;'S;=`'y;=`O&y~(OXd~OY&yZw&ywx'hx#O&y#O#P'm#P;'S&y;'S;=`(k;=`<%l&y<%lO&y~(nP;=`<%l&y~(vO^~~({O]~~)QP%Y~!_!`&X~)YQ%f~{|)`!_!`&X~)eO#R~~)jOn~~)oQ%g~}!O)`!_!`&X~)zRZS!O!P*T!Q![*`#R#S+w~*WP!O!P*Z~*`Ou~Q*eTaQ!Q![*`!g!h*t#R#S+w#X#Y*t#]#^+rQ*wS{|+T}!O+T!Q![+^#R#S+lQ+WQ!Q![+^#R#S+lQ+cRaQ!Q![+^#R#S+l#]#^+rQ+oP!Q![+^Q+wOaQQ+zP!Q![*`~,SR%k~z{,]!P!Q,b!_!`&X~,bO$z~~,gSP~OY,bZ;'S,b;'S;=`,s<%lO,b~,vP;=`<%l,bQ-O[aQ!O!P*`!Q![-t!d!e.c!g!h*t!q!r/Z!z!{/x#R#S.]#U#V.c#X#Y*t#]#^+r#c#d/Z#l#m/xQ-yUaQ!O!P*`!Q![-t!g!h*t#R#S.]#X#Y*t#]#^+rQ.`P!Q![-tQ.fR!Q!R.o!R!S.o#R#S/QQ.tSaQ!Q!R.o!R!S.o#R#S/Q#]#^+rQ/TQ!Q!R.o!R!S.oQ/^Q!Q!Y/d#R#S/rQ/iRaQ!Q!Y/d#R#S/r#]#^+rQ/uP!Q!Y/dQ/{T!O!P0[!Q![1c!c!i1c#R#S2Q#T#Z1cQ0_S!Q![0k!c!i0k#R#S1V#T#Z0kQ0pVaQ!Q![0k!c!i0k!r!s*t#R#S1V#T#Z0k#]#^+r#d#e*tQ1YR!Q![0k!c!i0k#T#Z0kQ1hWaQ!O!P0k!Q![1c!c!i1c!r!s*t#R#S2Q#T#Z1c#]#^+r#d#e*tQ2TR!Q![1c!c!i1c#T#Z1c~2cP!a~!_!`2f~2kO#W~~2pOV~~2uR!|S}!O3O!^!_3T!_!`$S~3TO!Q~~3YP%m~!_!`&X~3bP#T~!_!`$S~3jQ!|S!_!`$S!`!a3p~3uP%n~!_!`&X~3}V%O~!Q![3x!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~4gP;=`<%l3x~4oO!W~~4tO!V~~4yP%i~!_!`&X~5RV%O~!Q![5h!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~5o^aQ%O~!O!P*`!Q![5h!c!g3x!g!h6k!h!}3x#R#S4|#T#X3x#X#Y6k#Y#]3x#]#^8k#^#o3x$g;'S3x;'S;=`4d<%lO3x~6pX%O~{|+T}!O+T!Q![7]!c!}3x#R#S8P#T#o3x$g;'S3x;'S;=`4d<%lO3x~7dXaQ%O~!Q![7]!c!}3x#R#S8P#T#]3x#]#^8k#^#o3x$g;'S3x;'S;=`4d<%lO3x~8UV%O~!Q![7]!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~8rVaQ%O~!Q![3x!c!}3x#R#S3x#T#o3x$g;'S3x;'S;=`4d<%lO3x~9[TO#S9X#S#T$v#T;'S9X;'S;=`9k<%lO9X~9nP;=`<%l9X~9vOj~~9{Q%`~!_!`&X#p#q:R~:WO%q~~:]Oi~~:bO{~\",tokenizers:[ey,1,2,new kt(\"j~RQYZXz{^~^O$|~~aP!P!Qd~iO$}~~\",25,181)],topRules:{SourceFile:[0,3]},dynamicPrecedences:{19:1,51:-1,55:2,69:-1,108:-1},specialized:[{term:184,get:O=>ry[O]||-1}],tokenPrec:5451});var ny=[W(\"func ${name}(${params}) ${type} {\\n\t${}\\n}\",{label:\"func\",detail:\"declaration\",type:\"keyword\"}),W(\"func (${receiver}) ${name}(${params}) ${type} {\\n\t${}\\n}\",{label:\"func\",detail:\"method declaration\",type:\"keyword\"}),W(\"var ${name} = ${value}\",{label:\"var\",detail:\"declaration\",type:\"keyword\"}),W(\"type ${name} ${type}\",{label:\"type\",detail:\"declaration\",type:\"keyword\"}),W(\"const ${name} = ${value}\",{label:\"const\",detail:\"declaration\",type:\"keyword\"}),W(\"type ${name} = ${type}\",{label:\"type\",detail:\"alias declaration\",type:\"keyword\"}),W(\"for ${init}; ${test}; ${update} {\\n\t${}\\n}\",{label:\"for\",detail:\"loop\",type:\"keyword\"}),W(\"for ${i} := range ${value} {\\n\t${}\\n}\",{label:\"for\",detail:\"range\",type:\"keyword\"}),W(`select {\n\t\\${}\n}`,{label:\"select\",detail:\"statement\",type:\"keyword\"}),W(\"case ${}:\\n${}\",{label:\"case\",type:\"keyword\"}),W(\"switch ${} {\\n\t${}\\n}\",{label:\"switch\",detail:\"statement\",type:\"keyword\"}),W(\"switch ${}.(${type}) {\\n\t${}\\n}\",{label:\"switch\",detail:\"type statement\",type:\"keyword\"}),W(\"if ${} {\\n\t${}\\n}\",{label:\"if\",detail:\"block\",type:\"keyword\"}),W(`if \\${} {\n\t\\${}\n} else {\n\t\\${}\n}`,{label:\"if\",detail:\"/ else block\",type:\"keyword\"}),W('import ${name} \"${module}\"\\n${}',{label:\"import\",detail:\"declaration\",type:\"keyword\"})],R$=new Tt,q$=new Set([\"SourceFile\",\"Block\",\"FunctionDecl\",\"MethodDecl\",\"FunctionLiteral\",\"ForStatement\",\"SwitchStatement\",\"TypeSwitchStatement\",\"IfStatement\"]);function Pi(O,e){return(t,i)=>{e:for(let r=t.node.firstChild,n=0,s=null;;){for(;!r;){if(!n)break e;n--,r=s.nextSibling,s=s.parent}e&&r.name==e||r.name==\"SpecList\"?(n++,s=r,r=r.firstChild):(r.name==\"DefName\"&&i(r,O),r=r.nextSibling)}return!0}}var sy={FunctionDecl:Pi(\"function\"),VarDecl:Pi(\"var\",\"VarSpec\"),ConstDecl:Pi(\"constant\",\"ConstSpec\"),TypeDecl:Pi(\"type\",\"TypeSpec\"),ImportDecl:Pi(\"constant\",\"ImportSpec\"),Parameter:Pi(\"var\"),__proto__:null};function z$(O,e){let t=R$.get(e);if(t)return t;let i=[],r=!0;function n(s,a){let o=O.sliceString(s.from,s.to);i.push({label:o,type:a})}return e.cursor(C.IncludeAnonymous).iterate(s=>{if(r)r=!1;else if(s.name){let a=sy[s.name];if(a&&a(s,n)||q$.has(s.name))return!1}else if(s.to-s.from>8192){for(let a of z$(O,s.node))i.push(a);return!1}}),R$.set(e,i),i}var V$=/^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/,U$=[\"String\",\"LineComment\",\"BlockComment\",\"DefName\",\"LabelName\",\"FieldName\",\".\",\"?.\"],ay=O=>{let e=U(O.state).resolveInner(O.pos,-1);if(U$.indexOf(e.name)>-1)return null;let t=e.name==\"VariableName\"||e.to-e.from<20&&V$.test(O.state.sliceDoc(e.from,e.to));if(!t&&!O.explicit)return null;let i=[];for(let r=e;r;r=r.parent)q$.has(r.name)&&(i=i.concat(z$(O.state.doc,r)));return{options:i,from:t?e.from:O.pos,validFor:V$}},Jl=ne.define({name:\"go\",parser:_$.configure({props:[se.add({IfStatement:le({except:/^\\s*({|else\\b)/}),LabeledStatement:sO,\"SwitchBlock SelectBlock\":O=>{let e=O.textAfter,t=/^\\s*\\}/.test(e),i=/^\\s*(case|default)\\b/.test(e);return O.baseIndent+(t||i?0:O.unit)},Block:be({closing:\"}\"}),BlockComment:()=>null,Statement:le({except:/^{/})}),te.add({\"Block SwitchBlock SelectBlock LiteralValue InterfaceType StructType SpecList\":me,BlockComment(O){return{from:O.from+2,to:O.to-2}}})]}),languageData:{closeBrackets:{brackets:[\"(\",\"[\",\"{\",\"'\",'\"',\"`\"]},commentTokens:{line:\"//\",block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*(?:case\\b|default\\b|\\})$/}}),oy=O=>({label:O,type:\"keyword\"}),ly=\"interface struct chan map package go return break continue goto fallthrough else defer range true false nil\".split(\" \").map(oy);function W$(){let O=ny.concat(ly);return new J(Jl,[Jl.data.of({autocomplete:cO(U$,zt(O))}),Jl.data.of({autocomplete:ay})])}var cy=55,hy=1,fy=56,dy=2,uy=57,Qy=3,j$=4,$y=5,rc=6,I$=7,B$=8,N$=9,F$=10,py=11,my=12,gy=13,ec=58,Py=14,Sy=15,C$=59,H$=21,Xy=23,K$=24,Ty=25,Oc=27,J$=28,by=29,yy=32,xy=35,ky=37,wy=38,Zy=0,vy=1,Yy={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},_y={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},G$={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ry(O){return O==45||O==46||O==58||O>=65&&O<=90||O==95||O>=97&&O<=122||O>=161}var E$=null,A$=null,L$=0;function ic(O,e){let t=O.pos+e;if(L$==t&&A$==O)return E$;let i=O.peek(e),r=\"\";for(;Ry(i);)r+=String.fromCharCode(i),i=O.peek(++e);return A$=O,L$=t,E$=r?r.toLowerCase():i==Vy||i==qy?void 0:null}var ep=60,xs=62,nc=47,Vy=63,qy=33,zy=45;function M$(O,e){this.name=O,this.parent=e}var Uy=[rc,F$,I$,B$,N$],Wy=new Ge({start:null,shift(O,e,t,i){return Uy.indexOf(e)>-1?new M$(ic(i,1)||\"\",O):O},reduce(O,e){return e==H$&&O?O.parent:O},reuse(O,e,t,i){let r=e.type.id;return r==rc||r==ky?new M$(ic(i,1)||\"\",O):O},strict:!1}),jy=new z((O,e)=>{if(O.next!=ep){O.next<0&&e.context&&O.acceptToken(ec);return}O.advance();let t=O.next==nc;t&&O.advance();let i=ic(O,0);if(i===void 0)return;if(!i)return O.acceptToken(t?Sy:Py);let r=e.context?e.context.name:null;if(t){if(i==r)return O.acceptToken(py);if(r&&_y[r])return O.acceptToken(ec,-2);if(e.dialectEnabled(Zy))return O.acceptToken(my);for(let n=e.context;n;n=n.parent)if(n.name==i)return;O.acceptToken(gy)}else{if(i==\"script\")return O.acceptToken(I$);if(i==\"style\")return O.acceptToken(B$);if(i==\"textarea\")return O.acceptToken(N$);if(Yy.hasOwnProperty(i))return O.acceptToken(F$);r&&G$[r]&&G$[r][i]?O.acceptToken(ec,-1):O.acceptToken(rc)}},{contextual:!0}),Cy=new z(O=>{for(let e=0,t=0;;t++){if(O.next<0){t&&O.acceptToken(C$);break}if(O.next==zy)e++;else if(O.next==xs&&e>=2){t>=3&&O.acceptToken(C$,-2);break}else e=0;O.advance()}});function Gy(O){for(;O;O=O.parent)if(O.name==\"svg\"||O.name==\"math\")return!0;return!1}var Ey=new z((O,e)=>{if(O.next==nc&&O.peek(1)==xs){let t=e.dialectEnabled(vy)||Gy(e.context);O.acceptToken(t?$y:j$,2)}else O.next==xs&&O.acceptToken(j$,1)});function sc(O,e,t){let i=2+O.length;return new z(r=>{for(let n=0,s=0,a=0;;a++){if(r.next<0){a&&r.acceptToken(e);break}if(n==0&&r.next==ep||n==1&&r.next==nc||n>=2&&n<i&&r.next==O.charCodeAt(n-2))n++,s++;else if(n==i&&r.next==xs){a>s?r.acceptToken(e,-s):r.acceptToken(t,-(s-2));break}else if((r.next==10||r.next==13)&&a){r.acceptToken(e,1);break}else n=s=0;r.advance()}})}var Ay=sc(\"script\",cy,hy),Ly=sc(\"style\",fy,dy),My=sc(\"textarea\",uy,Qy),Dy=F({\"Text RawText IncompleteTag IncompleteCloseTag\":d.content,\"StartTag StartCloseTag SelfClosingEndTag EndTag\":d.angleBracket,TagName:d.tagName,\"MismatchedCloseTag/TagName\":[d.tagName,d.invalid],AttributeName:d.attributeName,\"AttributeValue UnquotedAttributeValue\":d.attributeValue,Is:d.definitionOperator,\"EntityReference CharacterReference\":d.character,Comment:d.blockComment,ProcessingInst:d.processingInstruction,DoctypeDecl:d.documentMeta}),tp=Oe.deserialize({version:14,states:\",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[\",stateData:\",c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~\",goto:\"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",nodeNames:\"\\u26A0 StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",maxTerm:68,context:Wy,nodeProps:[[\"closedBy\",-10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,22,31,34,37,\"CloseTag\"],[\"openedBy\",4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,30,33,36,38,\"OpenTag\"],[\"group\",-10,14,15,18,19,20,21,40,41,42,43,\"Entity\",17,\"Entity TextContent\",-3,29,32,35,\"TextContent Entity\"],[\"isolate\",-11,22,30,31,33,34,36,37,38,39,42,43,\"ltr\",-3,27,28,40,\"\"]],propSources:[Dy],skippedNodes:[0],repeatNodeCount:9,tokenData:\"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|caPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bXaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UVaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pTaPOv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!dpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({WaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!b`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!b`!dpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYlWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`aP!b`!dp!_^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebiSlWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXiSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vciSaP!b`!dpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!ahaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WiiSlWd!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QciSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXjSaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",tokenizers:[Ay,Ly,My,Ey,jy,Cy,0,1,2,3,4,5],topRules:{Document:[0,16]},dialects:{noMatch:0,selfClosing:515},tokenPrec:517});function Op(O,e){let t=Object.create(null);for(let i of O.getChildren(K$)){let r=i.getChild(Ty),n=i.getChild(Oc)||i.getChild(J$);r&&(t[e.read(r.from,r.to)]=n?n.type.id==Oc?e.read(n.from+1,n.to-1):e.read(n.from,n.to):\"\")}return t}function D$(O,e){let t=O.getChild(Xy);return t?e.read(t.from,t.to):\" \"}function tc(O,e,t){let i;for(let r of t)if(!r.attrs||r.attrs(i||(i=Op(O.node.parent.firstChild,e))))return{parser:r.parser,bracketed:!0};return null}function ac(O=[],e=[]){let t=[],i=[],r=[],n=[];for(let a of O)(a.tag==\"script\"?t:a.tag==\"style\"?i:a.tag==\"textarea\"?r:n).push(a);let s=e.length?Object.create(null):null;for(let a of e)(s[a.name]||(s[a.name]=[])).push(a);return xO((a,o)=>{let l=a.type.id;if(l==by)return tc(a,o,t);if(l==yy)return tc(a,o,i);if(l==xy)return tc(a,o,r);if(l==H$&&n.length){let c=a.node,h=c.firstChild,f=h&&D$(h,o),u;if(f){for(let Q of n)if(Q.tag==f&&(!Q.attrs||Q.attrs(u||(u=Op(h,o))))){let $=c.lastChild,p=$.type.id==wy?$.from:c.to;if(p>h.to)return{parser:Q.parser,overlay:[{from:h.to,to:p}]}}}}if(s&&l==K$){let c=a.node,h;if(h=c.firstChild){let f=s[o.read(h.from,h.to)];if(f)for(let u of f){if(u.tagName&&u.tagName!=D$(c.parent,o))continue;let Q=c.lastChild;if(Q.type.id==Oc){let $=Q.from+1,p=Q.lastChild,m=Q.to-(p&&p.isError?0:1);if(m>$)return{parser:u.parser,overlay:[{from:$,to:m}],bracketed:!0}}else if(Q.type.id==J$)return{parser:u.parser,overlay:[{from:Q.from,to:Q.to}]}}}}return null})}var Iy=316,By=317,ip=1,Ny=2,Fy=3,Hy=4,Ky=318,Jy=320,ex=321,tx=5,Ox=6,ix=0,lc=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],rp=125,rx=59,cc=47,nx=42,sx=43,ax=45,ox=60,lx=44,cx=63,hx=46,fx=91,dx=new Ge({start:!1,shift(O,e){return e==tx||e==Ox||e==Jy?O:e==ex},strict:!1}),ux=new z((O,e)=>{let{next:t}=O;(t==rp||t==-1||e.context)&&O.acceptToken(Ky)},{contextual:!0,fallback:!0}),Qx=new z((O,e)=>{let{next:t}=O,i;lc.indexOf(t)>-1||t==cc&&((i=O.peek(1))==cc||i==nx)||t!=rp&&t!=rx&&t!=-1&&!e.context&&O.acceptToken(Iy)},{contextual:!0}),$x=new z((O,e)=>{O.next==fx&&!e.context&&O.acceptToken(By)},{contextual:!0}),px=new z((O,e)=>{let{next:t}=O;if(t==sx||t==ax){if(O.advance(),t==O.next){O.advance();let i=!e.context&&e.canShift(ip);O.acceptToken(i?ip:Ny)}}else t==cx&&O.peek(1)==hx&&(O.advance(),O.advance(),(O.next<48||O.next>57)&&O.acceptToken(Fy))},{contextual:!0});function oc(O,e){return O>=65&&O<=90||O>=97&&O<=122||O==95||O>=192||!e&&O>=48&&O<=57}var mx=new z((O,e)=>{if(O.next!=ox||!e.dialectEnabled(ix)||(O.advance(),O.next==cc))return;let t=0;for(;lc.indexOf(O.next)>-1;)O.advance(),t++;if(oc(O.next,!0)){for(O.advance(),t++;oc(O.next,!1);)O.advance(),t++;for(;lc.indexOf(O.next)>-1;)O.advance(),t++;if(O.next==lx)return;for(let i=0;;i++){if(i==7){if(!oc(O.next,!0))return;break}if(O.next!=\"extends\".charCodeAt(i))break;O.advance(),t++}}O.acceptToken(Hy,-t)}),gx=F({\"get set async static\":d.modifier,\"for while do if else switch try catch finally return throw break continue default case defer\":d.controlKeyword,\"in of await yield void typeof delete instanceof as satisfies\":d.operatorKeyword,\"let var const using function class extends\":d.definitionKeyword,\"import export from\":d.moduleKeyword,\"with debugger new\":d.keyword,TemplateString:d.special(d.string),super:d.atom,BooleanLiteral:d.bool,this:d.self,null:d.null,Star:d.modifier,VariableName:d.variableName,\"CallExpression/VariableName TaggedTemplateExpression/VariableName\":d.function(d.variableName),VariableDefinition:d.definition(d.variableName),Label:d.labelName,PropertyName:d.propertyName,PrivatePropertyName:d.special(d.propertyName),\"CallExpression/MemberExpression/PropertyName\":d.function(d.propertyName),\"FunctionDeclaration/VariableDefinition\":d.function(d.definition(d.variableName)),\"ClassDeclaration/VariableDefinition\":d.definition(d.className),\"NewExpression/VariableName\":d.className,PropertyDefinition:d.definition(d.propertyName),PrivatePropertyDefinition:d.definition(d.special(d.propertyName)),UpdateOp:d.updateOperator,\"LineComment Hashbang\":d.lineComment,BlockComment:d.blockComment,Number:d.number,String:d.string,Escape:d.escape,ArithOp:d.arithmeticOperator,LogicOp:d.logicOperator,BitOp:d.bitwiseOperator,CompareOp:d.compareOperator,RegExp:d.regexp,Equals:d.definitionOperator,Arrow:d.function(d.punctuation),\": Spread\":d.punctuation,\"( )\":d.paren,\"[ ]\":d.squareBracket,\"{ }\":d.brace,\"InterpolationStart InterpolationEnd\":d.special(d.brace),\".\":d.derefOperator,\", ;\":d.separator,\"@\":d.meta,TypeName:d.typeName,TypeDefinition:d.definition(d.typeName),\"type enum interface implements namespace module declare\":d.definitionKeyword,\"abstract global Privacy readonly override\":d.modifier,\"is keyof unique infer asserts\":d.operatorKeyword,JSXAttributeValue:d.attributeValue,JSXText:d.content,\"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\":d.angleBracket,\"JSXIdentifier JSXNameSpacedName\":d.tagName,\"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\":d.attributeName,\"JSXBuiltin/JSXIdentifier\":d.standard(d.tagName)}),Px={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},Sx={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},Xx={__proto__:null,\"<\":193},np=Oe.deserialize({version:14,states:\"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-E<j-E<jO9kQ`O,5=_O!$rQ`O,5=_O!$wQlO,5;ZO!&zQMhO'#EkO!(eQ`O,5;ZO!(jQlO'#DyO!(tQpO,5;dO!(|QpO,5;dO%[QlO,5;dOOQ['#FT'#FTOOQ['#FV'#FVO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eOOQ['#FZ'#FZO!)[QlO,5;tOOQ!0Lf,5;y,5;yOOQ!0Lf,5;z,5;zOOQ!0Lf,5;|,5;|O%[QlO'#IpO!+_Q!0LrO,5<iO%[QlO,5;eO!&zQMhO,5;eO!+|QMhO,5;eO!-nQMhO'#E^O%[QlO,5;wOOQ!0Lf,5;{,5;{O!-uQ,UO'#FjO!.rQ,UO'#KXO!.^Q,UO'#KXO!.yQ,UO'#KXOOQO'#KX'#KXO!/_Q,UO,5<SOOOW,5<`,5<`O!/pQlO'#FvOOOW'#Io'#IoO7VO7dO,5<QO!/wQ,UO'#FxOOQ!0Lf,5<Q,5<QO!0hQ$IUO'#CyOOQ!0Lh'#C}'#C}O!0{O#@ItO'#DRO!1iQMjO,5<eO!1pQ`O,5<hO!3YQ(CWO'#GXO!3jQ`O'#GYO!3oQ`O'#GYO!5_Q(CWO'#G^O!6dQpO'#GbOOQO'#Gn'#GnO!,TQMhO'#GmOOQO'#Gp'#GpO!,TQMhO'#GoO!7VQ$IUO'#JlOOQ!0Lh'#Jl'#JlO!7aQ`O'#JkO!7oQ`O'#JjO!7wQ`O'#CuOOQ!0Lh'#C{'#C{O!8YQ`O'#C}OOQ!0Lh'#DV'#DVOOQ!0Lh'#DX'#DXO!8_Q`O,5<eO1SQ`O'#DZO!,TQMhO'#GPO!,TQMhO'#GRO!8gQ`O'#GTO!8lQ`O'#GUO!3oQ`O'#G[O!,TQMhO'#GaO<]Q`O'#JkO!8qQ`O'#EqO!9`Q`O,5<gOOQ!0Lb'#Cr'#CrO!9hQ`O'#ErO!:bQpO'#EsOOQ!0Lb'#KR'#KRO!:iQ!0LrO'#KaO9uQ!0LrO,5=cO`QlO,5>tOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!<hQ!0MxO,5:bO!:]QpO,5:`O!?RQ!0MxO,5:jO%[QlO,5:jO!AiQ!0MxO,5:lOOQO,5@z,5@zO!BYQMhO,5=_O!BhQ!0LrO'#JiO9`Q`O'#JiO!ByQ!0LrO,59ZO!CUQpO,59ZO!C^QMhO,59ZO:dQMhO,59ZO!CiQ`O,5;ZO!CqQ`O'#HbO!DVQ`O'#KdO%[QlO,5;}O!:]QpO,5<PO!D_Q`O,5=zO!DdQ`O,5=zO!DiQ`O,5=zO!DwQ`O,5=zO9uQ!0LrO,5=zO<]Q`O,5=jOOQO'#Cy'#CyO!EOQpO,5=gO!EWQMhO,5=hO!EcQ`O,5=jO!EhQ!bO,5=mO!EpQ`O'#K`O?YQ`O'#HWO9kQ`O'#HYO!EuQ`O'#HYO:dQMhO'#H[O!EzQ`O'#H[OOQ[,5=p,5=pO!FPQ`O'#H]O!FbQ`O'#CoO!FgQ`O,59PO!FqQ`O,59PO!HvQlO,59POOQ[,59P,59PO!IWQ!0LrO,59PO%[QlO,59PO!KcQlO'#HeOOQ['#Hf'#HfOOQ['#Hg'#HgO`QlO,5=}O!KyQ`O,5=}O`QlO,5>TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-E<f-E<fO#)kQ!0MSO,5;RODWQpO,5:rO#)uQpO,5:rODWQpO,5;RO!ByQ!0LrO,5:rOOQ!0Lb'#Ej'#EjOOQO,5;R,5;RO%[QlO,5;RO#*SQ!0LrO,5;RO#*_Q!0LrO,5;RO!CUQpO,5:rOOQO,5;X,5;XO#*mQ!0LrO,5;RPOOO'#I^'#I^P#+RO&2DjO,58|POOO,58|,58|OOOO-E<^-E<^OOQ!0Lh1G.p1G.pOOOO-E<_-E<_OOOO,59},59}O#+^Q!bO,59}OOOO-E<a-E<aOOQ!0Lf1G/g1G/gO#+cQ!fO,5?OO+}QlO,5?OOOQO,5?U,5?UO#+mQlO'#IdOOQO-E<b-E<bO#+zQ`O,5@`O#,SQ!fO,5@`O#,ZQ`O,5@nOOQ!0Lf1G/m1G/mO%[QlO,5@oO#,cQ`O'#IjOOQO-E<h-E<hO#,ZQ`O,5@nOOQ!0Lb1G0x1G0xOOQ!0Ln1G/x1G/xOOQ!0Ln1G0Y1G0YO%[QlO,5@lO#,wQ!0LrO,5@lO#-YQ!0LrO,5@lO#-aQ`O,5@kO9eQ`O,5@kO#-iQ`O,5@kO#-wQ`O'#ImO#-aQ`O,5@kOOQ!0Lb1G0w1G0wO!(tQpO,5:uO!)PQpO,5:uOOQS,5:w,5:wO#.iQdO,5:wO#.qQMhO1G2yO9kQ`O1G2yOOQ!0Lf1G0u1G0uO#/PQ!0MxO1G0uO#0UQ!0MvO,5;VOOQ!0Lh'#GW'#GWO#0rQ!0MzO'#JlO!$wQlO1G0uO#2}Q!fO'#JwO%[QlO'#JwO#3XQ`O,5:eOOQ!0Lh'#D_'#D_OOQ!0Lf1G1O1G1OO%[QlO1G1OOOQ!0Lf1G1f1G1fO#3^Q`O1G1OO#5rQ!0MxO1G1PO#5yQ!0MxO1G1PO#8aQ!0MxO1G1PO#8hQ!0MxO1G1PO#;OQ!0MxO1G1PO#=fQ!0MxO1G1PO#=mQ!0MxO1G1PO#=tQ!0MxO1G1PO#@[Q!0MxO1G1PO#@cQ!0MxO1G1PO#BpQ?MtO'#CiO#DkQ?MtO1G1`O#DrQ?MtO'#JsO#EVQ!0MxO,5?[OOQ!0Lb-E<n-E<nO#GdQ!0MxO1G1PO#HaQ!0MzO1G1POOQ!0Lf1G1P1G1PO#IdQMjO'#J|O#InQ`O,5:xO#IsQ!0MxO1G1cO#JgQ,UO,5<WO#JoQ,UO,5<XO#JwQ,UO'#FoO#K`Q`O'#FnOOQO'#KY'#KYOOQO'#In'#InO#KeQ,UO1G1nOOQ!0Lf1G1n1G1nOOOW1G1y1G1yO#KvQ?MtO'#JrO#LQQ`O,5<bO!)[QlO,5<bOOOW-E<m-E<mOOQ!0Lf1G1l1G1lO#LVQpO'#KXOOQ!0Lf,5<d,5<dO#L_QpO,5<dO#LdQMhO'#DTOOOO'#Ib'#IbO#LkO#@ItO,59mOOQ!0Lh,59m,59mO%[QlO1G2PO!8lQ`O'#IrO#LvQ`O,5<zOOQ!0Lh,5<w,5<wO!,TQMhO'#IuO#MdQMjO,5=XO!,TQMhO'#IwO#NVQMjO,5=ZO!&zQMhO,5=]OOQO1G2S1G2SO#NaQ!dO'#CrO#NtQ(CWO'#ErO$ |QpO'#GbO$!dQ!dO,5<sO$!kQ`O'#K[O9eQ`O'#K[O$!yQ`O,5<uO$#aQ!dO'#C{O!,TQMhO,5<tO$#kQ`O'#GZO$$PQ`O,5<tO$$UQ!dO'#GWO$$cQ!dO'#K]O$$mQ`O'#K]O!&zQMhO'#K]O$$rQ`O,5<xO$$wQlO'#JvO$%RQpO'#GcO#$`QpO'#GcO$%dQ`O'#GgO!3oQ`O'#GkO$%iQ!0LrO'#ItO$%tQpO,5<|OOQ!0Lp,5<|,5<|O$%{QpO'#GcO$&YQpO'#GdO$&kQpO'#GdO$&pQMjO,5=XO$'QQMjO,5=ZOOQ!0Lh,5=^,5=^O!,TQMhO,5@VO!,TQMhO,5@VO$'bQ`O'#IyO$'vQ`O,5@UO$(OQ`O,59aOOQ!0Lh,59i,59iO$(TQ`O,5@VO$)TQ$IYO,59uOOQ!0Lh'#Jp'#JpO$)vQMjO,5<kO$*iQMjO,5<mO@zQ`O,5<oOOQ!0Lh,5<p,5<pO$*sQ`O,5<vO$*xQMjO,5<{O$+YQ`O'#KPO!$wQlO1G2RO$+_Q`O1G2RO9eQ`O'#KSO9eQ`O'#EtO%[QlO'#EtO9eQ`O'#I{O$+dQ!0LrO,5@{OOQ[1G2}1G2}OOQ[1G4`1G4`OOQ!0Lf1G/|1G/|OOQ!0Lf1G/z1G/zO$-fQ!0MxO1G0UOOQ[1G2y1G2yO!&zQMhO1G2yO%[QlO1G2yO#.tQ`O1G2yO$/jQMhO'#EkOOQ!0Lb,5@T,5@TO$/wQ!0LrO,5@TOOQ[1G.u1G.uO!ByQ!0LrO1G.uO!CUQpO1G.uO!C^QMhO1G.uO$0YQ`O1G0uO$0_Q`O'#CiO$0jQ`O'#KeO$0rQ`O,5=|O$0wQ`O'#KeO$0|Q`O'#KeO$1[Q`O'#JRO$1jQ`O,5AOO$1rQ!fO1G1iOOQ!0Lf1G1k1G1kO9kQ`O1G3fO@zQ`O1G3fO$1yQ`O1G3fO$2OQ`O1G3fO!DiQ`O1G3fO9uQ!0LrO1G3fOOQ[1G3f1G3fO!EcQ`O1G3UO!&zQMhO1G3RO$2TQ`O1G3ROOQ[1G3S1G3SO!&zQMhO1G3SO$2YQ`O1G3SO$2bQpO'#HQOOQ[1G3U1G3UO!6_QpO'#I}O!EhQ!bO1G3XOOQ[1G3X1G3XOOQ[,5=r,5=rO$2jQMhO,5=tO9kQ`O,5=tO$%dQ`O,5=vO9`Q`O,5=vO!CUQpO,5=vO!C^QMhO,5=vO:dQMhO,5=vO$2xQ`O'#KcO$3TQ`O,5=wOOQ[1G.k1G.kO$3YQ!0LrO1G.kO@zQ`O1G.kO$3eQ`O1G.kO9uQ!0LrO1G.kO$5mQ!fO,5AQO$5zQ`O,5AQO9eQ`O,5AQO$6VQlO,5>PO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5<iO$BOQ!fO1G4jOOQO1G4p1G4pO%[QlO,5?OO$BYQ`O1G5zO$BbQ`O1G6YO$BjQ!fO1G6ZO9eQ`O,5?UO$BtQ!0MxO1G6WO%[QlO1G6WO$CUQ!0LrO1G6WO$CgQ`O1G6VO$CgQ`O1G6VO9eQ`O1G6VO$CoQ`O,5?XO9eQ`O,5?XOOQO,5?X,5?XO$DTQ`O,5?XO$+YQ`O,5?XOOQO-E<k-E<kOOQS1G0a1G0aOOQS1G0c1G0cO#.lQ`O1G0cOOQ[7+(e7+(eO!&zQMhO7+(eO%[QlO7+(eO$DcQ`O7+(eO$DnQMhO7+(eO$D|Q!0MzO,5=XO$GXQ!0MzO,5=ZO$IdQ!0MzO,5=XO$KuQ!0MzO,5=ZO$NWQ!0MzO,59uO%!]Q!0MzO,5<kO%$hQ!0MzO,5<mO%&sQ!0MzO,5<{OOQ!0Lf7+&a7+&aO%)UQ!0MxO7+&aO%)xQlO'#IfO%*VQ`O,5@cO%*_Q!fO,5@cOOQ!0Lf1G0P1G0PO%*iQ`O7+&jOOQ!0Lf7+&j7+&jO%*nQ?MtO,5:fO%[QlO7+&zO%*xQ?MtO,5:bO%+VQ?MtO,5:jO%+aQ?MtO,5:lO%+kQMhO'#IiO%+uQ`O,5@hOOQ!0Lh1G0d1G0dOOQO1G1r1G1rOOQO1G1s1G1sO%+}Q!jO,5<ZO!)[QlO,5<YOOQO-E<l-E<lOOQ!0Lf7+'Y7+'YOOOW7+'e7+'eOOOW1G1|1G1|O%,YQ`O1G1|OOQ!0Lf1G2O1G2OOOOO,59o,59oO%,_Q!dO,59oOOOO-E<`-E<`OOQ!0Lh1G/X1G/XO%,fQ!0MxO7+'kOOQ!0Lh,5?^,5?^O%-YQMhO1G2fP%-aQ`O'#IrPOQ!0Lh-E<p-E<pO%-}QMjO,5?aOOQ!0Lh-E<s-E<sO%.pQMjO,5?cOOQ!0Lh-E<u-E<uO%.zQ!dO1G2wO%/RQ!dO'#CrO%/iQMhO'#KSO$$wQlO'#JvOOQ!0Lh1G2_1G2_O%/sQ`O'#IqO%0[Q`O,5@vO%0[Q`O,5@vO%0dQ`O,5@vO%0oQ`O,5@vOOQO1G2a1G2aO%0}QMjO1G2`O$+YQ`O'#K[O!,TQMhO1G2`O%1_Q(CWO'#IsO%1lQ`O,5@wO!&zQMhO,5@wO%1tQ!dO,5@wOOQ!0Lh1G2d1G2dO%4UQ!fO'#CiO%4`Q`O,5=POOQ!0Lb,5<},5<}O%4hQpO,5<}OOQ!0Lb,5=O,5=OOCwQ`O,5<}O%4sQpO,5<}OOQ!0Lb,5=R,5=RO$+YQ`O,5=VOOQO,5?`,5?`OOQO-E<r-E<rOOQ!0Lp1G2h1G2hO#$`QpO,5<}O$$wQlO,5=PO%5RQ`O,5=OO%5^QpO,5=OO!,TQMhO'#IuO%6WQMjO1G2sO!,TQMhO'#IwO%6yQMjO1G2uO%7TQMjO1G5qO%7_QMjO1G5qOOQO,5?e,5?eOOQO-E<w-E<wOOQO1G.{1G.{O!,TQMhO1G5qO!,TQMhO1G5qO!:]QpO,59wO%[QlO,59wOOQ!0Lh,5<j,5<jO%7lQ`O1G2ZO!,TQMhO1G2bO%7qQ!0MxO7+'mOOQ!0Lf7+'m7+'mO!$wQlO7+'mO%8eQ`O,5;`OOQ!0Lb,5?g,5?gOOQ!0Lb-E<y-E<yO%8jQ!dO'#K^O#(ZQ`O7+(eO4UQ!fO7+(eO$DfQ`O7+(eO%8tQ!0MvO'#CiO%9XQ!0MvO,5=SO%9lQ`O,5=SO%9tQ`O,5=SOOQ!0Lb1G5o1G5oOOQ[7+$a7+$aO!ByQ!0LrO7+$aO!CUQpO7+$aO!$wQlO7+&aO%9yQ`O'#JQO%:bQ`O,5APOOQO1G3h1G3hO9kQ`O,5APO%:bQ`O,5APO%:jQ`O,5APOOQO,5?m,5?mOOQO-E=P-E=POOQ!0Lf7+'T7+'TO%:oQ`O7+)QO9uQ!0LrO7+)QO9kQ`O7+)QO@zQ`O7+)QO%:tQ`O7+)QOOQ[7+)Q7+)QOOQ[7+(p7+(pO%:yQ!0MvO7+(mO!&zQMhO7+(mO!E^Q`O7+(nOOQ[7+(n7+(nO!&zQMhO7+(nO%;TQ`O'#KbO%;`Q`O,5=lOOQO,5?i,5?iOOQO-E<{-E<{OOQ[7+(s7+(sO%<rQpO'#HZOOQ[1G3`1G3`O!&zQMhO1G3`O%[QlO1G3`O%<yQ`O1G3`O%=UQMhO1G3`O9uQ!0LrO1G3bO$%dQ`O1G3bO9`Q`O1G3bO!CUQpO1G3bO!C^QMhO1G3bO%=dQ`O'#JPO%=xQ`O,5@}O%>QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-E<c-E<cOOQO,5?V,5?VOOQO-E<i-E<iO!CUQpO1G/sOOQO-E<e-E<eOOQ!0Ln1G0]1G0]OOQ!0Lf7+%u7+%uO#(ZQ`O7+%uOOQ!0Lf7+&`7+&`O?YQ`O7+&`O!CUQpO7+&`OOQO7+%x7+%xO$AlQ!0MxO7+&XOOQO7+&X7+&XO%[QlO7+&XO%@nQ!0LrO7+&XO!ByQ!0LrO7+%xO!CUQpO7+%xO%@yQ!0LrO7+&XO%AXQ!0MxO7++rO%[QlO7++rO%AiQ`O7++qO%AiQ`O7++qOOQO1G4s1G4sO9eQ`O1G4sO%AqQ`O1G4sOOQS7+%}7+%}O#(ZQ`O<<LPO4UQ!fO<<LPO%BPQ`O<<LPOOQ[<<LP<<LPO!&zQMhO<<LPO%[QlO<<LPO%BXQ`O<<LPO%BdQ!0MzO,5?aO%DoQ!0MzO,5?cO%FzQ!0MzO1G2`O%I]Q!0MzO1G2sO%KhQ!0MzO1G2uO%MsQ!fO,5?QO%[QlO,5?QOOQO-E<d-E<dO%M}Q`O1G5}OOQ!0Lf<<JU<<JUO%NVQ?MtO1G0uO&!^Q?MtO1G1PO&!eQ?MtO1G1PO&$fQ?MtO1G1PO&$mQ?MtO1G1PO&&nQ?MtO1G1PO&(oQ?MtO1G1PO&(vQ?MtO1G1PO&(}Q?MtO1G1PO&+OQ?MtO1G1PO&+VQ?MtO1G1PO&+^Q!0MxO<<JfO&-UQ?MtO1G1PO&.RQ?MvO1G1PO&/UQ?MvO'#JlO&1[Q?MtO1G1cO&1iQ?MtO1G0UO&1sQMjO,5?TOOQO-E<g-E<gO!)[QlO'#FqOOQO'#KZ'#KZOOQO1G1u1G1uO&1}Q`O1G1tO&2SQ?MtO,5?[OOOW7+'h7+'hOOOO1G/Z1G/ZO&2^Q!dO1G4xOOQ!0Lh7+(Q7+(QP!&zQMhO,5?^O!,TQMhO7+(cO&2eQ`O,5?]O9eQ`O,5?]O$+YQ`O,5?]OOQO-E<o-E<oO&2sQ`O1G6bO&2sQ`O1G6bO&2{Q`O1G6bO&3WQMjO7+'zO&3hQ!dO,5?_O&3rQ`O,5?_O!&zQMhO,5?_OOQO-E<q-E<qO&3wQ!dO1G6cO&4RQ`O1G6cO&4ZQ`O1G2kO!&zQMhO1G2kOOQ!0Lb1G2i1G2iOOQ!0Lb1G2j1G2jO%4hQpO1G2iO!CUQpO1G2iOCwQ`O1G2iOOQ!0Lb1G2q1G2qO&4`QpO1G2iO&4nQ`O1G2kO$+YQ`O1G2jOCwQ`O1G2jO$$wQlO1G2kO&4vQ`O1G2jO&5jQMjO,5?aOOQ!0Lh-E<t-E<tO&6]QMjO,5?cOOQ!0Lh-E<v-E<vO!,TQMhO7++]O&6gQMjO7++]O&6qQMjO7++]OOQ!0Lh1G/c1G/cO&7OQ`O1G/cOOQ!0Lh7+'u7+'uO&7TQMjO7+'|O&7eQ!0MxO<<KXOOQ!0Lf<<KX<<KXO&8XQ`O1G0zO!&zQMhO'#IzO&8^Q`O,5@xO&:`Q!fO<<LPO!&zQMhO1G2nO&:gQ!0LrO1G2nOOQ[<<G{<<G{O!ByQ!0LrO<<G{O&:xQ!0MxO<<I{OOQ!0Lf<<I{<<I{OOQO,5?l,5?lO&;lQ`O,5?lO&;qQ`O,5?lOOQO-E=O-E=OO&<PQ`O1G6kO&<PQ`O1G6kO9kQ`O1G6kO@zQ`O<<LlOOQ[<<Ll<<LlO&<XQ`O<<LlO9uQ!0LrO<<LlO9kQ`O<<LlOOQ[<<LX<<LXO%:yQ!0MvO<<LXOOQ[<<LY<<LYO!E^Q`O<<LYO&<^QpO'#I|O&<iQ`O,5@|O!)[QlO,5@|OOQ[1G3W1G3WOOQO'#JO'#JOO9uQ!0LrO'#JOO&<qQpO,5=uOOQ[,5=u,5=uO&<xQpO'#EgO&=PQpO'#GeO&=UQ`O7+(zO&=ZQ`O7+(zOOQ[7+(z7+(zO!&zQMhO7+(zO%[QlO7+(zO&=cQ`O7+(zOOQ[7+(|7+(|O9uQ!0LrO7+(|O$%dQ`O7+(|O9`Q`O7+(|O!CUQpO7+(|O&=nQ`O,5?kOOQO-E<}-E<}OOQO'#H^'#H^O&=yQ`O1G6iO9uQ!0LrO<<GqOOQ[<<Gq<<GqO@zQ`O<<GqO&>RQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<<Ly<<LyOOQ[<<L{<<L{OOQ[-E=Q-E=QOOQ[1G3z1G3zO&>nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<<Ia<<IaOOQ!0Lf<<Iz<<IzO?YQ`O<<IzOOQO<<Is<<IsO$AlQ!0MxO<<IsO%[QlO<<IsOOQO<<Id<<IdO!ByQ!0LrO<<IdO&?SQ!0LrO<<IsO&?_Q!0MxO<= ^O&?oQ`O<= ]OOQO7+*_7+*_O9eQ`O7+*_OOQ[ANAkANAkO&?wQ!fOANAkO!&zQMhOANAkO#(ZQ`OANAkO4UQ!fOANAkO&@OQ`OANAkO%[QlOANAkO&@WQ!0MzO7+'zO&BiQ!0MzO,5?aO&DtQ!0MzO,5?cO&GPQ!0MzO7+'|O&IbQ!fO1G4lO&IlQ?MtO7+&aO&KpQ?MvO,5=XO&MwQ?MvO,5=ZO&NXQ?MvO,5=XO&NiQ?MvO,5=ZO&NyQ?MvO,59uO'#PQ?MvO,5<kO'%SQ?MvO,5<mO''hQ?MvO,5<{O')^Q?MtO7+'kO')kQ?MtO7+'mO')xQ`O,5<]OOQO7+'`7+'`OOQ!0Lh7+*d7+*dO')}QMjO<<K}OOQO1G4w1G4wO'*UQ`O1G4wO'*aQ`O1G4wO'*oQ`O7++|O'*oQ`O7++|O!&zQMhO1G4yO'*wQ!dO1G4yO'+RQ`O7++}O'+ZQ`O7+(VO'+fQ!dO7+(VOOQ!0Lb7+(T7+(TOOQ!0Lb7+(U7+(UO!CUQpO7+(TOCwQ`O7+(TO'+pQ`O7+(VO!&zQMhO7+(VO$+YQ`O7+(UO'+uQ`O7+(VOCwQ`O7+(UO'+}QMjO<<NwO!,TQMhO<<NwOOQ!0Lh7+$}7+$}O',XQ!dO,5?fOOQO-E<x-E<xO',cQ!0MvO7+(YO!&zQMhO7+(YOOQ[AN=gAN=gO9kQ`O1G5WOOQO1G5W1G5WO',sQ`O1G5WO',xQ`O7+,VO',xQ`O7+,VO9uQ!0LrOANBWO@zQ`OANBWOOQ[ANBWANBWO'-QQ`OANBWOOQ[ANAsANAsOOQ[ANAtANAtO'-VQ`O,5?hOOQO-E<z-E<zO'-bQ?MtO1G6hOOQO,5?j,5?jOOQO-E<|-E<|OOQ[1G3a1G3aO'-lQ`O,5=POOQ[<<Lf<<LfO!&zQMhO<<LfO&=UQ`O<<LfO'-qQ`O<<LfO%[QlO<<LfOOQ[<<Lh<<LhO9uQ!0LrO<<LhO$%dQ`O<<LhO9`Q`O<<LhO'-yQpO1G5VO'.UQ`O7+,TOOQ[AN=]AN=]O9uQ!0LrOAN=]OOQ[<= r<= rOOQ[<= s<= sO'.^Q`O<= rO'.cQ`O<= sOOQ[<<Lq<<LqO'.hQ`O<<LqO'.mQlO<<LqOOQ[1G3{1G3{O?YQ`O7+)lO'.tQ`O<<JQO'/PQ?MtO<<JQOOQO<<Hy<<HyOOQ!0LfAN?fAN?fOOQOAN?_AN?_O$AlQ!0MxOAN?_OOQOAN?OAN?OO%[QlOAN?_OOQO<<My<<MyOOQ[G27VG27VO!&zQMhOG27VO#(ZQ`OG27VO'/ZQ!fOG27VO4UQ!fOG27VO'/bQ`OG27VO'/jQ?MtO<<JfO'/wQ?MvO1G2`O'1mQ?MvO,5?aO'3pQ?MvO,5?cO'5sQ?MvO1G2sO'7vQ?MvO1G2uO'9yQ?MtO<<KXO':WQ?MtO<<I{OOQO1G1w1G1wO!,TQMhOANAiOOQO7+*c7+*cO':eQ`O7+*cO':pQ`O<= hO':xQ!dO7+*eOOQ!0Lb<<Kq<<KqO$+YQ`O<<KqOCwQ`O<<KqO';SQ`O<<KqO!&zQMhO<<KqOOQ!0Lb<<Ko<<KoO!CUQpO<<KoO';_Q!dO<<KqOOQ!0Lb<<Kp<<KpO';iQ`O<<KqO!&zQMhO<<KqO$+YQ`O<<KpO';nQMjOANDcO';xQ!0MvO<<KtOOQO7+*r7+*rO9kQ`O7+*rO'<YQ`O<= qOOQ[G27rG27rO9uQ!0LrOG27rO@zQ`OG27rO!)[QlO1G5SO'<bQ`O7+,SO'<jQ`O1G2kO&=UQ`OANBQOOQ[ANBQANBQO!&zQMhOANBQO'<oQ`OANBQOOQ[ANBSANBSO9uQ!0LrOANBSO$%dQ`OANBSOOQO'#H_'#H_OOQO7+*q7+*qOOQ[G22wG22wOOQ[ANE^ANE^OOQ[ANE_ANE_OOQ[ANB]ANB]O'<wQ`OANB]OOQ[<<MW<<MWO!)[QlOAN?lOOQOG24yG24yO$AlQ!0MxOG24yO#(ZQ`OLD,qOOQ[LD,qLD,qO!&zQMhOLD,qO'<|Q!fOLD,qO'=TQ?MvO7+'zO'>yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<<M}<<M}OOQ!0LbANA]ANA]O$+YQ`OANA]OCwQ`OANA]O'EVQ!dOANA]OOQ!0LbANAZANAZO'E^Q`OANA]O!&zQMhOANA]O'EiQ!dOANA]OOQ!0LbANA[ANA[OOQO<<N^<<N^OOQ[LD-^LD-^O9uQ!0LrOLD-^O'EsQ?MtO7+*nOOQO'#Gf'#GfOOQ[G27lG27lO&=UQ`OG27lO!&zQMhOG27lOOQ[G27nG27nO9uQ!0LrOG27nOOQ[G27wG27wO'E}Q?MtOG25WOOQOLD*eLD*eOOQ[!$(!]!$(!]O#(ZQ`O!$(!]O!&zQMhO!$(!]O'FXQ!0MzOG27TOOQ!0LbG26wG26wO$+YQ`OG26wO'HjQ`OG26wOCwQ`OG26wO'HuQ!dOG26wO!&zQMhOG26wOOQ[!$(!x!$(!xOOQ[LD-WLD-WO&=UQ`OLD-WOOQ[LD-YLD-YOOQ[!)9Ew!)9EwO#(ZQ`O!)9EwOOQ!0LbLD,cLD,cO$+YQ`OLD,cOCwQ`OLD,cO'H|Q`OLD,cO'IXQ!dOLD,cOOQ[!$(!r!$(!rOOQ[!.K;c!.K;cO'I`Q?MvOG27TOOQ!0Lb!$( }!$( }O$+YQ`O!$( }OCwQ`O!$( }O'KUQ`O!$( }OOQ!0Lb!)9Ei!)9EiO$+YQ`O!)9EiOCwQ`O!)9EiOOQ!0Lb!.K;T!.K;TO$+YQ`O!.K;TOOQ!0Lb!4/0o!4/0oO!)[QlO'#DzO1PQ`O'#EXO'KaQ!fO'#JrO'KhQ!L^O'#DvO'KoQlO'#EOO'KvQ!fO'#CiO'N^Q!fO'#CiO!)[QlO'#EQO'NnQlO,5;ZO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO'#IpO(!qQ`O,5<iO!)[QlO,5;eO(!yQMhO,5;eO($dQMhO,5;eO!)[QlO,5;wO!&zQMhO'#GmO(!yQMhO'#GmO!&zQMhO'#GoO(!yQMhO'#GoO1SQ`O'#DZO1SQ`O'#DZO!&zQMhO'#GPO(!yQMhO'#GPO!&zQMhO'#GRO(!yQMhO'#GRO!&zQMhO'#GaO(!yQMhO'#GaO!)[QlO,5:jO($kQpO'#D_O($uQpO'#JvO!)[QlO,5@oO'NnQlO1G0uO(%PQ?MtO'#CiO!)[QlO1G2PO!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO(%ZQ!dO'#CrO!&zQMhO,5<tO(!yQMhO,5<tO'NnQlO1G2RO!)[QlO7+&zO!&zQMhO1G2`O(!yQMhO1G2`O!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO!&zQMhO1G2bO(!yQMhO1G2bO'NnQlO7+'mO'NnQlO7+&aO!&zQMhOANAiO(!yQMhOANAiO(%nQ`O'#EoO(%sQ`O'#EoO(%{Q`O'#F]O(&QQ`O'#EyO(&VQ`O'#KTO(&bQ`O'#KRO(&mQ`O,5;ZO(&rQMjO,5<eO(&yQ`O'#GYO('OQ`O'#GYO('TQ`O,5<eO(']Q`O,5<gO('eQ`O,5;ZO('mQ?MtO1G1`O('tQ`O,5<tO('yQ`O,5<tO((OQ`O,5<vO((TQ`O,5<vO((YQ`O1G2RO((_Q`O1G0uO((dQMjO<<K}O((kQMjO<<K}O((rQMhO'#F|O9`Q`O'#F{OAuQ`O'#EnO!)[QlO,5;tO!3oQ`O'#GYO!3oQ`O'#GYO!3oQ`O'#G[O!3oQ`O'#G[O!,TQMhO7+(cO!,TQMhO7+(cO%.zQ!dO1G2wO%.zQ!dO1G2wO!&zQMhO,5=]O!&zQMhO,5=]\",stateData:\"()x~O'|OS'}OSTOS(ORQ~OPYOQYOSfOY!VOaqOdzOeyOl!POpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!uwO!xxO!|]O$W|O$niO%h}O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO&W!WO&^!XO&`!YO&b!ZO&d![O&g!]O&m!^O&s!_O&u!`O&w!aO&y!bO&{!cO(TSO(VTO(YUO(aVO(o[O~OWtO~P`OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa!wOs!nO!S!oO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!xO#W!pO#X!pO#[!zO#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O(O!{O~OP]XR]X[]Xa]Xj]Xr]X!Q]X!S]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X'z]X(a]X(r]X(y]X(z]X~O!g%RX~P(qO_!}O(V#PO(W!}O(X#PO~O_#QO(X#PO(Y#PO(Z#QO~Ox#SO!U#TO(b#TO(c#VO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T<ZO(VTO(YUO(aVO(o[O~O![#ZO!]#WO!Y(hP!Y(vP~P+}O!^#cO~P`OPYOQYOSfOd!jOe!iOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(VTO(YUO(aVO(o[O~Op#mO![#iO!|]O#i#lO#j#iO(T<[O!k(sP~P.iO!l#oO(T#nO~O!x#sO!|]O%h#tO~O#k#uO~O!g#vO#k#uO~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!]$_O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa(fX'z(fX'w(fX!k(fX!Y(fX!_(fX%i(fX!g(fX~P1qO#S$dO#`$eO$Q$eOP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX!_(gX%i(gX~Oa(gX'z(gX'w(gX!Y(gX!k(gXv(gX!g(gX~P4UO#`$eO~O$]$hO$_$gO$f$mO~OSfO!_$nO$i$oO$k$qO~Oh%VOj%dOk%dOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T$sO(VTO(YUO(a$uO(y$}O(z%POg(^P~Ol%[O~P7eO!l%eO~O!S%hO!_%iO(T%gO~O!g%mO~Oa%nO'z%nO~O!Q%rO~P%[O(U!lO~P%[O%n%vO~P%[Oh%VO!l%eO(T%gO(U!lO~Oe%}O!l%eO(T%gO~Oj$RO~O!_&PO(T%gO(U!lO(VTO(YUO`)WP~O!Q&SO!l&RO%j&VO&T&WO~P;SO!x#sO~O%s&YO!S)SX!_)SX(T)SX~O(T&ZO~Ol!PO!u&`O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO~Od&eOe&dO!x&bO%h&cO%{&aO~P<bOd&hOeyOl!PO!_&gO!u&`O!xxO!|]O%h}O%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO~Ob&kO#`&nO%j&iO(U!lO~P=gO!l&oO!u&sO~O!l#oO~O!_XO~Oa%nO'x&{O'z%nO~Oa%nO'x'OO'z%nO~Oa%nO'x'QO'z%nO~O'w]X!Y]Xv]X!k]X&[]X!_]X%i]X!g]X~P(qO!b'_O!c'WO!d'WO(U!lO(VTO(YUO~Os'UO!S'TO!['XO(e'SO!^(iP!^(xP~P@nOn'bO!_'`O(T%gO~Oe'gO!l%eO(T%gO~O!Q&SO!l&RO~Os!nO!S!oO!|<VO#T!pO#U!pO#W!pO#X!pO(U!lO(VTO(YUO(e!mO(o!sO~O!b'mO!c'lO!d'lO#V!pO#['nO#]'nO~PBYOa%nOh%VO!g#vO!l%eO'z%nO(r'pO~O!p'tO#`'rO~PChOs!nO!S!oO(VTO(YUO(e!mO(o!sO~O!_XOs(mX!S(mX!b(mX!c(mX!d(mX!|(mX#T(mX#U(mX#V(mX#W(mX#X(mX#[(mX#](mX(U(mX(V(mX(Y(mX(e(mX(o(mX~O!c'lO!d'lO(U!lO~PDWO(P'xO(Q'xO(R'zO~O_!}O(V'|O(W!}O(X'|O~O_#QO(X'|O(Y'|O(Z#QO~Ov(OO~P%[Ox#SO!U#TO(b#TO(c(RO~O![(TO!Y'WX!Y'^X!]'WX!]'^X~P+}O!](VO!Y(hX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!](VO!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~O!Y(hX~PHRO!Y([O~O!Y(uX!](uX!g(uX!k(uX(r(uX~O#`(uX#k#dX!^(uX~PJUO#`(]O!Y(wX!](wX~O!](^O!Y(vX~O!Y(aO~O#`$eO~PJUO!^(bO~P`OR#zO!Q#yO!S#{O!l#xO(aVOP!na[!naj!nar!na!]!na!p!na#R!na#n!na#o!na#p!na#q!na#r!na#s!na#t!na#u!na#v!na#x!na#z!na#{!na(r!na(y!na(z!na~Oa!na'z!na'w!na!Y!na!k!nav!na!_!na%i!na!g!na~PKlO!k(cO~O!g#vO#`(dO(r'pO!](tXa(tX'z(tX~O!k(tX~PNXO!S%hO!_%iO!|]O#i(iO#j(hO(T%gO~O!](jO!k(sX~O!k(lO~O!S%hO!_%iO#j(hO(T%gO~OP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~O!g#vO!k(gX~P! uOR(nO!Q(mO!l#xO#S$dO!|!{a!S!{a~O!x!{a%h!{a!_!{a#i!{a#j!{a(T!{a~P!#vO!x(rO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~O#k(xO~O![(zO!k(kP~P%[O(e(|O(o[O~O!S)OO!l#xO(e(|O(o[O~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S*YO!_*ZO!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op*`O![*^O(T*XO!k)OP~P!1uO#k*aO~O!l*bO~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T*dO(VTO(YUO(a$uO(y$}O(z%PO~O![*gO!Y)PP~P!3tOr*sOs!nO!S*iO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO(e!mO~O!^*pO~P!5iO#S$dOn(`X!Q(`X'y(`X(y(`X(z(`X!](`X#`(`X~Og(`X$O(`X~P!6kOn*xO#`*wOg(_X!](_X~O!]*yOg(^X~Oj%dOk%dOl%dO(T&ZOg(^P~Os*|O~Og)}O(T&ZO~O!l+SO~O(T(vO~Op+WO!S%hO![#iO!_%iO!|]O#i#lO#j#iO(T%gO!k(sP~O!g#vO#k+XO~O!S%hO![+ZO!](^O!_%iO(T%gO!Y(vP~Os'[O!S+]O![+[O(VTO(YUO(e(|O~O!^(xP~P!9|O!]+^Oa)TX'z)TX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa!ja!]!ja'z!ja'w!ja!Y!ja!k!jav!ja!_!ja%i!ja!g!ja~P!:tOR#zO!Q#yO!S#{O!l#xO(aVOP!ra[!raj!rar!ra!]!ra!p!ra#R!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#v!ra#x!ra#z!ra#{!ra(r!ra(y!ra(z!ra~Oa!ra'z!ra'w!ra!Y!ra!k!rav!ra!_!ra%i!ra!g!ra~P!=[OR#zO!Q#yO!S#{O!l#xO(aVOP!ta[!taj!tar!ta!]!ta!p!ta#R!ta#n!ta#o!ta#p!ta#q!ta#r!ta#s!ta#t!ta#u!ta#v!ta#x!ta#z!ta#{!ta(r!ta(y!ta(z!ta~Oa!ta'z!ta'w!ta!Y!ta!k!tav!ta!_!ta%i!ta!g!ta~P!?rOh%VOn+gO!_'`O%i+fO~O!g+iOa(]X!_(]X'z(]X!](]X~Oa%nO!_XO'z%nO~Oh%VO!l%eO~Oh%VO!l%eO(T%gO~O!g#vO#k(xO~Ob+tO%j+uO(T+qO(VTO(YUO!^)XP~O!]+vO`)WX~O[+zO~O`+{O~O!_&PO(T%gO(U!lO`)WP~O%j,OO~P;SOh%VO#`,SO~Oh%VOn,VO!_$|O~O!_,XO~O!Q,ZO!_XO~O%n%vO~O!x,`O~Oe,eO~Ob,fO(T#nO(VTO(YUO!^)VP~Oe%}O~O%j!QO(T&ZO~P=gO[,kO`,jO~OPYOQYOSfOdzOeyOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!iuO!lZO!oYO!pYO!qYO!svO!xxO!|]O$niO%h}O(VTO(YUO(aVO(o[O~O!_!eO!u!gO$W!kO(T!dO~P!FyO`,jOa%nO'z%nO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa,pOl!OO!uwO%l!OO%m!OO%n!OO~P!IcO!l&oO~O&^,vO~O!_,xO~O&o,zO&q,{OP&laQ&laS&laY&laa&lad&lae&lal&lap&lar&las&lat&laz&la|&la!O&la!S&la!W&la!X&la!_&la!i&la!l&la!o&la!p&la!q&la!s&la!u&la!x&la!|&la$W&la$n&la%h&la%j&la%l&la%m&la%n&la%q&la%s&la%v&la%w&la%y&la&W&la&^&la&`&la&b&la&d&la&g&la&m&la&s&la&u&la&w&la&y&la&{&la'w&la(T&la(V&la(Y&la(a&la(o&la!^&la&e&lab&la&j&la~O(T-QO~Oh!eX!]!RX!^!RX!g!RX!g!eX!l!eX#`!RX~O!]!eX!^!eX~P#!iO!g-VO#`-UOh(jX!]#hX!^#hX!g(jX!l(jX~O!](jX!^(jX~P##[Oh%VO!g-XO!l%eO!]!aX!^!aX~Os!nO!S!oO(VTO(YUO(e!mO~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO#z<gO#{<hO(aVO(r$YO(y#|O(z#}O~O$O.{O~P#BwO#S$dO#`<nO$Q<nO$O(gX!^(gX~P! uOa'da!]'da'z'da'w'da!k'da!Y'dav'da!_'da%i'da!g'da~P!:tO[#mia#mij#mir#mi!]#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO(y#mi(z#mi~P#EyOn>]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]<iO!^(fX~P#BwO!^/ZO~O!g)hO$f({X~O$f/]O~Ov/^O~P!&zOx)yO(b)zO(c/aO~O!S/dO~O(y$}On%aa!Q%aa'y%aa(z%aa!]%aa#`%aa~Og%aa$O%aa~P#L{O(z%POn%ca!Q%ca'y%ca(y%ca!]%ca#`%ca~Og%ca$O%ca~P#MnO!]fX!gfX!kfX!k$zX(rfX~P!0SOp%WO![/mO!](^O(T/lO!Y(vP!Y)PP~P!1uOr*sO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO~Os<}O!S/nO![+[O!^*pO(e<|O!^(xP~P$ [O!k/oO~P#/sO!]/pO!g#vO(r'pO!k)OX~O!k/uO~OnoX!QoX'yoX(yoX(zoX~O!g#vO!koX~P$#OOp/wO!S%hO![*^O!_%iO(T%gO!k)OP~O#k/xO~O!Y$zX!]$zX!g%RX~P!0SO!]/yO!Y)PX~P#/sO!g/{O~O!Y/}O~OpkO(T0OO~P.iOh%VOr0TO!g#vO!l%eO(r'pO~O!g+iO~Oa%nO!]0XO'z%nO~O!^0ZO~P!5iO!c0[O!d0[O(U!lO~P#$`Os!nO!S0]O(VTO(YUO(e!mO~O#[0_O~Og%aa!]%aa#`%aa$O%aa~P!1WOg%ca!]%ca#`%ca$O%ca~P!1WOj%dOk%dOl%dO(T&ZOg'mX!]'mX~O!]*yOg(^a~Og0hO~On0jO#`0iOg(_a!](_a~OR0kO!Q0kO!S0lO#S$dOn}a'y}a(y}a(z}a!]}a#`}a~Og}a$O}a~P$(cO!Q*OO'y*POn$sa(y$sa(z$sa!]$sa#`$sa~Og$sa$O$sa~P$)_O!Q*OO'y*POn$ua(y$ua(z$ua!]$ua#`$ua~Og$ua$O$ua~P$*QO#k0oO~Og%Ta!]%Ta#`%Ta$O%Ta~P!1WO!g#vO~O#k0rO~O!]+^Oa)Ta'z)Ta~OR#zO!Q#yO!S#{O!l#xO(aVOP!ri[!rij!rir!ri!]!ri!p!ri#R!ri#n!ri#o!ri#p!ri#q!ri#r!ri#s!ri#t!ri#u!ri#v!ri#x!ri#z!ri#{!ri(r!ri(y!ri(z!ri~Oa!ri'z!ri'w!ri!Y!ri!k!riv!ri!_!ri%i!ri!g!ri~P$+oOh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op0{O%]0|O(T0zO~P$.VO!g+iOa(]a!_(]a'z(]a!](]a~O#k1SO~O[]X!]fX!^fX~O!]1TO!^)XX~O!^1VO~O[1WO~Ob1YO(T+qO(VTO(YUO~O!_&PO(T%gO`'uX!]'uX~O!]+vO`)Wa~O!k1]O~P!:tO[1`O~O`1aO~O#`1fO~On1iO!_$|O~O(e(|O!^)UP~Oh%VOn1rO!_1oO%i1qO~O[1|O!]1zO!^)VX~O!^1}O~O`2POa%nO'z%nO~O(T#nO(VTO(YUO~O#S$dO#`$eO$Q$eOP(gXR(gX[(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~Oj2SO&[2TOa(gX~P$3pOj2SO#`$eO&[2TO~Oa2VO~P%[Oa2XO~O&e2[OP&ciQ&ciS&ciY&cia&cid&cie&cil&cip&cir&cis&cit&ciz&ci|&ci!O&ci!S&ci!W&ci!X&ci!_&ci!i&ci!l&ci!o&ci!p&ci!q&ci!s&ci!u&ci!x&ci!|&ci$W&ci$n&ci%h&ci%j&ci%l&ci%m&ci%n&ci%q&ci%s&ci%v&ci%w&ci%y&ci&W&ci&^&ci&`&ci&b&ci&d&ci&g&ci&m&ci&s&ci&u&ci&w&ci&y&ci&{&ci'w&ci(T&ci(V&ci(Y&ci(a&ci(o&ci!^&cib&ci&j&ci~Ob2bO!^2`O&j2aO~P`O!_XO!l2dO~O&q,{OP&liQ&liS&liY&lia&lid&lie&lil&lip&lir&lis&lit&liz&li|&li!O&li!S&li!W&li!X&li!_&li!i&li!l&li!o&li!p&li!q&li!s&li!u&li!x&li!|&li$W&li$n&li%h&li%j&li%l&li%m&li%n&li%q&li%s&li%v&li%w&li%y&li&W&li&^&li&`&li&b&li&d&li&g&li&m&li&s&li&u&li&w&li&y&li&{&li'w&li(T&li(V&li(Y&li(a&li(o&li!^&li&e&lib&li&j&li~O!Y2jO~O!]!aa!^!aa~P#BwOs!nO!S!oO![2pO(e!mO!]'XX!^'XX~P@nO!]-]O!^(ia~O!]'_X!^'_X~P!9|O!]-`O!^(xa~O!^2wO~P'_Oa%nO#`3QO'z%nO~Oa%nO!g#vO#`3QO'z%nO~Oa%nO!g#vO!p3UO#`3QO'z%nO(r'pO~Oa%nO'z%nO~P!:tO!]$_Ov$qa~O!Y'Wi!]'Wi~P!:tO!](VO!Y(hi~O!](^O!Y(vi~O!Y(wi!](wi~P!:tO!](ti!k(tia(ti'z(ti~P!:tO#`3WO!](ti!k(tia(ti'z(ti~O!](jO!k(si~O!S%hO!_%iO!|]O#i3]O#j3[O(T%gO~O!S%hO!_%iO#j3[O(T%gO~On3dO!_'`O%i3cO~Oh%VOn3dO!_'`O%i3cO~O#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aav%aa!_%aa%i%aa!g%aa~P#L{O#k%caP%caR%ca[%caa%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%cav%ca!_%ca%i%ca!g%ca~P#MnO#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!]%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aa#`%aav%aa!_%aa%i%aa!g%aa~P#/sO#k%caP%caR%ca[%caa%caj%car%ca!S%ca!]%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%ca#`%cav%ca!_%ca%i%ca!g%ca~P#/sO#k}aP}a[}aa}aj}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a'z}a(a}a(r}a!k}a!Y}a'w}av}a!_}a%i}a!g}a~P$(cO#k$saP$saR$sa[$saa$saj$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa'z$sa(a$sa(r$sa!k$sa!Y$sa'w$sav$sa!_$sa%i$sa!g$sa~P$)_O#k$uaP$uaR$ua[$uaa$uaj$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua'z$ua(a$ua(r$ua!k$ua!Y$ua'w$uav$ua!_$ua%i$ua!g$ua~P$*QO#k%TaP%TaR%Ta[%Taa%Taj%Tar%Ta!S%Ta!]%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta'z%Ta(a%Ta(r%Ta!k%Ta!Y%Ta'w%Ta#`%Tav%Ta!_%Ta%i%Ta!g%Ta~P#/sOa#cq!]#cq'z#cq'w#cq!Y#cq!k#cqv#cq!_#cq%i#cq!g#cq~P!:tO![3lO!]'YX!k'YX~P%[O!].tO!k(ka~O!].tO!k(ka~P!:tO!Y3oO~O$O!na!^!na~PKlO$O!ja!]!ja!^!ja~P#BwO$O!ra!^!ra~P!=[O$O!ta!^!ta~P!?rOg']X!]']X~P!,TO!]/POg(pa~OSfO!_4TO$d4UO~O!^4YO~Ov4ZO~P#/sOa$mq!]$mq'z$mq'w$mq!Y$mq!k$mqv$mq!_$mq%i$mq!g$mq~P!:tO!Y4]O~P!&zO!S4^O~O!Q*OO'y*PO(z%POn'ia(y'ia!]'ia#`'ia~Og'ia$O'ia~P%-fO!Q*OO'y*POn'ka(y'ka(z'ka!]'ka#`'ka~Og'ka$O'ka~P%.XO(r$YO~P#/sO!YfX!Y$zX!]fX!]$zX!g%RX#`fX~P!0SOp%WO(T=WO~P!1uOp4bO!S%hO![4aO!_%iO(T%gO!]'eX!k'eX~O!]/pO!k)Oa~O!]/pO!g#vO!k)Oa~O!]/pO!g#vO(r'pO!k)Oa~Og$|i!]$|i#`$|i$O$|i~P!1WO![4jO!Y'gX!]'gX~P!3tO!]/yO!Y)Pa~O!]/yO!Y)Pa~P#/sOP]XR]X[]Xj]Xr]X!Q]X!S]X!Y]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~Oj%YX!g%YX~P%2OOj4oO!g#vO~Oh%VO!g#vO!l%eO~Oh%VOr4tO!l%eO(r'pO~Or4yO!g#vO(r'pO~Os!nO!S4zO(VTO(YUO(e!mO~O(y$}On%ai!Q%ai'y%ai(z%ai!]%ai#`%ai~Og%ai$O%ai~P%5oO(z%POn%ci!Q%ci'y%ci(y%ci!]%ci#`%ci~Og%ci$O%ci~P%6bOg(_i!](_i~P!1WO#`5QOg(_i!](_i~P!1WO!k5VO~Oa$oq!]$oq'z$oq'w$oq!Y$oq!k$oqv$oq!_$oq%i$oq!g$oq~P!:tO!Y5ZO~O!]5[O!_)QX~P#/sOa$zX!_$zX%^]X'z$zX!]$zX~P!0SO%^5_OaoX!_oX'zoX!]oX~P$#OOp5`O(T#nO~O%^5_O~Ob5fO%j5gO(T+qO(VTO(YUO!]'tX!^'tX~O!]1TO!^)Xa~O[5kO~O`5lO~O[5pO~Oa%nO'z%nO~P#/sO!]5uO#`5wO!^)UX~O!^5xO~Or6OOs!nO!S*iO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!pO#W!pO#X!pO#[5}O#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O!^5|O~P%;eOn6TO!_1oO%i6SO~Oh%VOn6TO!_1oO%i6SO~Ob6[O(T#nO(VTO(YUO!]'sX!^'sX~O!]1zO!^)Va~O(VTO(YUO(e6^O~O`6bO~Oj6eO&[6fO~PNXO!k6gO~P%[Oa6iO~Oa6iO~P%[Ob2bO!^6nO&j2aO~P`O!g6pO~O!g6rOh(ji!](ji!^(ji!g(ji!l(jir(ji(r(ji~O!]#hi!^#hi~P#BwO#`6sO!]#hi!^#hi~O!]!ai!^!ai~P#BwOa%nO#`6|O'z%nO~Oa%nO!g#vO#`6|O'z%nO~O!](tq!k(tqa(tq'z(tq~P!:tO!](jO!k(sq~O!S%hO!_%iO#j7TO(T%gO~O!_'`O%i7WO~On7[O!_'`O%i7WO~O#k'iaP'iaR'ia['iaa'iaj'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia'z'ia(a'ia(r'ia!k'ia!Y'ia'w'iav'ia!_'ia%i'ia!g'ia~P%-fO#k'kaP'kaR'ka['kaa'kaj'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka'z'ka(a'ka(r'ka!k'ka!Y'ka'w'kav'ka!_'ka%i'ka!g'ka~P%.XO#k$|iP$|iR$|i[$|ia$|ij$|ir$|i!S$|i!]$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i'z$|i(a$|i(r$|i!k$|i!Y$|i'w$|i#`$|iv$|i!_$|i%i$|i!g$|i~P#/sO#k%aiP%aiR%ai[%aia%aij%air%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai'z%ai(a%ai(r%ai!k%ai!Y%ai'w%aiv%ai!_%ai%i%ai!g%ai~P%5oO#k%ciP%ciR%ci[%cia%cij%cir%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci'z%ci(a%ci(r%ci!k%ci!Y%ci'w%civ%ci!_%ci%i%ci!g%ci~P%6bO!]'Ya!k'Ya~P!:tO!].tO!k(ki~O$O#ci!]#ci!^#ci~P#BwOP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mij#mir#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#n#mi~P%NdO#n<_O~P%NdOP$[OR#zOr<kO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO[#mij#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#r#mi~P&!lO#r<aO~P&!lOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO(aVO#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#v#mi~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO(aVO(z#}O#z#mi#{#mi$O#mi(r#mi(y#mi!]#mi!^#mi~O#x<eO~P&&uO#x#mi~P&&uO#v<cO~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO(aVO(y#|O(z#}O#{#mi$O#mi(r#mi!]#mi!^#mi~O#z#mi~P&)UO#z<gO~P&)UOa#|y!]#|y'z#|y'w#|y!Y#|y!k#|yv#|y!_#|y%i#|y!g#|y~P!:tO[#mij#mir#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi!]#mi!^#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO(y#mi(z#mi~P&,QOn>^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOr<QO!g#vO(r'pO~Ov(fX~P1qO!Q%rO~P!)[O(U!lO~P!)[O!YfX!]fX#`fX~P%2OOP]XR]X[]Xj]Xr]X!Q]X!S]X!]]X!]fX!l]X!p]X#R]X#S]X#`]X#`fX#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~O!gfX!k]X!kfX(rfX~P'LTOP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_XO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]<iO!^$qa~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<tO!S${O!_$|O!i>WO!l$xO#j<zO$W%`O$t<vO$v<xO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Ol)dO~P(!yOr!eX(r!eX~P#!iOr(jX(r(jX~P##[O!^]X!^fX~P'LTO!YfX!Y$zX!]fX!]$zX#`fX~P!0SO#k<^O~O!g#vO#k<^O~O#`<nO~Oj<bO~O#`=OO!](wX!^(wX~O#`<nO!](uX!^(uX~O#k=PO~Og=RO~P!1WO#k=XO~O#k=YO~Og=RO(T&ZO~O!g#vO#k=ZO~O!g#vO#k=PO~O$O=[O~P#BwO#k=]O~O#k=^O~O#k=cO~O#k=dO~O#k=eO~O#k=fO~O$O=gO~P!1WO$O=hO~P!1WOl=sO~P7eOk#S#T#U#W#X#[#i#j#u$n$t$v$y%]%^%h%i%j%q%s%v%w%y%{~(OT#o!X'|(U#ps#n#qr!Q'}$]'}(T$_(e~\",goto:\"$9Y)]PPPPPP)^PP)aP)rP+W/]PPPP6mPP7TPP=QPPP@tPA^PA^PPPA^PCfPA^PA^PA^PCjPCoPD^PIWPPPI[PPPPI[L_PPPLeMVPI[PI[PP! eI[PPPI[PI[P!#lI[P!'S!(X!(bP!)U!)Y!)U!,gPPPPPPP!-W!(XPP!-h!/YP!2iI[I[!2n!5z!:h!:h!>gPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#<e#<k#<n)aP#<q)aP#<z#<z#<zP)aP)aP)aP)aPP)aP#=Q#=TP#=T)aP#=XP#=[P)aP)aP)aP)aP)aP)a)aPP#=b#=h#=s#=y#>P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{<Y%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_S#q]<V!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU+P%]<s<tQ+t&PQ,f&gQ,m&oQ0x+gQ0}+iQ1Y+uQ2R,kQ3`.gQ5`0|Q5f1TQ6[1zQ7Y3dQ8`5gR9e7['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>R>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o>U<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hW%Ti%V*y>PS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^T)z$u){V+P%]<s<tW'[!e%i*Z-`S(}#y#zQ+c%rQ+y&SS.b(m(nQ1j,XQ5T0kR8i5u'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vS(o#p'iQ)P#zS+b%q.|S.c(n(pR3^.d'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS#q]<VQ&t!XQ&u!YQ&w![Q&x!]R2Z,vQ'a!hQ+e%wQ-h'cS.e(q+hQ2x-gW3b.h.i0w0yQ6w2yW7U3_3a3e5^U9a7V7X7ZU:q9c9d9fS;b:p:sQ;p;cR;x;qU!wQ'`-eT5y1o5{!Q_OXZ`st!V!Z#d#h%e%m&i&k&r&t&u&w(j,s,x.[2[2_]!pQ!r'`-e1o5{T#q]<V%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S(}#y#zS.b(m(n!s=l$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uS<P;|;}R<S<QQ#wbQ's!uS(e#g2US(g#m+WQ+Y%fQ+j%xQ+p&OU-r'k't'wQ.W(fU/r*]*`/wQ0S*jQ0V*lQ1O+kQ1u,aS3R-s-vQ3Z.`S4e/s/tQ4n0PS4q0R0^Q4u0WQ6W1vQ7P3US7q4`4bQ7u4fU7|4r4x4{Q8P4wQ8v6XS9q7r7sQ9u7yQ9}8RQ:O8SQ:c8wQ:y9rS:z9v9xQ;S:QQ;^:dS;f:{;PS;r;g;hS;z;s;uS<O;{;}Q<R<PQ<T<SQ=o=jQ={=tR=|=uV!wQ'`-e%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S#wz!j!r=i$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!P<d)^)q-Z.|2k2n3p3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!f$Vc#Y%q(S(Y(t(y)W)X)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!T<f)^)q-Z.|2k2n3p3v3w3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!^$Zc#Y%q(S(Y(t(y)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<WQ4_/kz>S)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^Q+T%aQ/c*Oo4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!U$yi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n=r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hQ=w>TQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hnoOXst!Z#d%m&r&t&u&w,s,x2[2_S*f${*YQ-R'OQ-S'QR4i/y%[%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f<o#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<p<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!d=S(u)c*[*e.j.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f<q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!h=U(u)c*[*e.k.l.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|<jQ-|<WR<j)qQ/q*]W4c/q4d7t9sU4d/r/s/tS7t4e4fR9s7u$e*Q$v(u)c)e*[*e*t*u+Q+R+V.l.m.o.p.q/_/g/i/k/v/|0d0e0v1e3f3g3h3}4R4[4g4h4l4|5O5R5S5W5r7]7^7_7`7e7f7h7i7j7p7w7z8U8X8Z9h9i9j9t9|:R:S:t:u:v:w:x:};R;e;j;v;y=p=}>O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.l<oQ.m<qQ.o<uQ.p<wQ.q<yQ/_)yQ/g*RQ/i*TQ/k*VQ/v*aS/|*g/mQ0d*wQ0e*xl0v+f,V.f1i1q3c6S7W8q9b:`:r;[;dQ1e,SQ3f=SQ3g=UQ3h=XS3}<l<mQ4R/PS4[/d4^Q4g/xQ4h/yQ4l/{Q4|0`Q5O0bQ5R0iQ5S0jQ5W0oQ5r1fQ7]=]Q7^=_Q7_=aQ7`=cQ7e<pQ7f<rQ7h<vQ7i<xQ7j<zQ7p4_Q7w4jQ7z4oQ8U5QQ8X5[Q8Z5_Q9h=YQ9i=TQ9j=VQ9t7vQ9|8QQ:R8VQ:S8[Q:t=^Q:u=`Q:v=bQ:w=dQ:x9pQ:}9yQ;R:PQ;e=gQ;j;QQ;v;kQ;y=hQ=p>PQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.n<sR7g<tnpOXst!Z#d%m&r&t&u&w,s,x2[2_Q!fPS#fZ#oQ&|!`W'h!o*i0]4zQ(P#SQ)Q#{Q)r$nS,l&k&nQ,q&oQ-O&{S-T'T/nQ-g'bQ.x)OQ/[)sQ0s+]Q0y+gQ2W,pQ2y-iQ3a.gQ4W/VQ5U0lQ6Q1rQ6c2SQ6d2TQ6h2VQ6j2XQ6o2aQ7Z3dQ7m4TQ8s6TQ9P6eQ9Q6fQ9S6iQ9f7[Q:a8tR:k9T#[cOPXZst!Z!`!o#d#o#{%m&k&n&o&r&t&u&w&{'T'b)O*i+]+g,p,s,x-i.g/n0]0l1r2S2T2V2X2[2_2a3d4z6T6e6f6i7[8t9TQ#YWQ#eYQ%quQ%svS%uw!gS(S#W(VQ(Y#ZQ(t#uQ(y#xQ)R$OQ)S$PQ)T$QQ)U$RQ)V$SQ)W$TQ)X$UQ)Y$VQ)Z$WQ)[$XQ)^$ZQ)`$_Q)b$aQ)g$eW)q$n)s/V4TQ+d%tQ+x&RS-Z'X2pQ-x'rS-}(T.PQ.S(]Q.U(dQ.s(xQ.v(zQ.z<UQ.|<XQ.}<YQ/O<]Q/b)}Q0p+XQ2k-UQ2n-XQ3O-qQ3V.VQ3k.tQ3p<^Q3q<_Q3r<`Q3s<aQ3t<bQ3u<cQ3v<dQ3w<eQ3x<fQ3y<gQ3z<hQ3{.{Q3|<kQ4P<nQ4Q<{Q4X<iQ5X0rQ5c1SQ6u=OQ6{3QQ7Q3WQ7a3lQ7b=PQ7k=RQ7l=ZQ8k5wQ9X6sQ9]6|Q9g=[Q9m=eQ9n=fQ:o9_Q;W:ZQ;`:mQ<W#SR=v>SR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i<VR)f$dY!uQ'`-e1o5{Q'k!rS'u!v!yS'w!z5}S-t'l'mQ-v'nR3T-uT#kZ%eS#jZ%eS%km,oU(g#h#i#lS.Y(h(iQ.^(jQ0t+^Q3Y.ZU3Z.[.]._S7S3[3]R9`7Td#^W#W#Z%h(T(^*Y+Z.T/mr#gZm#h#i#l%e(h(i(j+^.Z.[.]._3[3]7TS*]$x*bQ/t*^Q2U,oQ2l-VQ4`/pQ6q2dQ7s4aQ9W6rT=m'X+[V#aW%h*YU#`W%h*YS(U#W(^U(Z#Z+Z/mS-['X+[T.O(T.TV'^!e%i*ZQ$lfR)x$qT)m$l)nR4V/UT*_$x*bT*h${*YQ0w+fQ1g,VQ3_.fQ5t1iQ6P1qQ7X3cQ8r6SQ9c7WQ:^8qQ:p9bQ;Z:`Q;c:rQ;n;[R;q;dnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&l!VR,h&itmOXst!U!V!Z#d%m&i&r&t&u&w,s,x2[2_R,o&oT%lm,oR1k,XR,g&gQ&U|S+}&V&WR1^,OR+s&PT&p!W&sT&q!W&sT2^,x2_\",nodeNames:\"\\u26A0 ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem\",maxTerm:380,context:dx,nodeProps:[[\"isolate\",-8,5,6,14,37,39,51,53,55,\"\"],[\"group\",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,\"Statement\",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,\"Expression\",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,\"Type\",-3,88,103,109,\"ClassItem\"],[\"openedBy\",23,\"<\",38,\"InterpolationStart\",56,\"[\",60,\"{\",73,\"(\",160,\"JSXStartCloseTag\"],[\"closedBy\",-2,24,168,\">\",40,\"InterpolationEnd\",50,\"]\",61,\"}\",74,\")\",165,\"JSXEndTag\"]],propSources:[gx],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:\"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$i&j(Wp(Z!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$i&j(Z!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$i&j(o%1l(Wp(Z!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$i&j(Wp(Z!b$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$i&j(Wp(Z!b$]#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$i&j(Wp(Z!b#p(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$i&j$Q(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(z+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$i&j#z(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(Y';W$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$i&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$d`$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(WpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$d`(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!l/.^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!k!Lf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$i&j(Wp(Z!b(U%&f#q(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$i&j(Wp(Z!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$i&j(Wp(Z!br+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!]+Jf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$i&j(Wp(Z!b!Q.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_![!L^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$i&j(Wp(Z!b#o(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$i&j(Z!b!X7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$i&j!X7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$i&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$i&j(Wp!X7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$i&j(Wp!X7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Wp!X7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Wp!X7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(WpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$i&j(WpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$i&j(Wp(Z!b!X7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Wp(Z!b!X7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Wp(Z!b!X7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Wp(Z!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$i&j(Wp(Z!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$i&j(Wp(Z!b(O0/l!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$i&j(Wp(Z!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$i&j(Z!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$i&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(Z!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$i&j(WpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(WpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Wp(Z!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$i&j$Q(Ch(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Z#t$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-<U(Wp(Z!b$n7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$k&j(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#r(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$Q(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#s(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#`*!Y$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#k(Cl$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#s(Ch$f#|$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#s(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(r(Ct$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$i&j#{(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!|$Ip$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!S0,v$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$i&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$i&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$i&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$i&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$i&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!Y#)l$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#x(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$i&j(Wp(Z!b(a+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$i&j(Wp(Z!b(T,2j$_#t(e$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$i&j(Wp(Z!b$_#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!_#Hb(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(y+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr\",tokenizers:[Qx,$x,px,mx,2,3,4,5,6,7,8,9,10,11,12,13,14,ux,new kt(\"$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~\",141,340),new kt(\"j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~\",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:O=>Px[O]||-1},{term:343,get:O=>Sx[O]||-1},{term:95,get:O=>Xx[O]||-1}],tokenPrec:15201});var lp=[W(\"function ${name}(${params}) {\\n\t${}\\n}\",{label:\"function\",detail:\"definition\",type:\"keyword\"}),W(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\t${}\\n}\",{label:\"for\",detail:\"loop\",type:\"keyword\"}),W(\"for (let ${name} of ${collection}) {\\n\t${}\\n}\",{label:\"for\",detail:\"of loop\",type:\"keyword\"}),W(\"do {\\n\t${}\\n} while (${})\",{label:\"do\",detail:\"loop\",type:\"keyword\"}),W(\"while (${}) {\\n\t${}\\n}\",{label:\"while\",detail:\"loop\",type:\"keyword\"}),W(`try {\n\t\\${}\n} catch (\\${error}) {\n\t\\${}\n}`,{label:\"try\",detail:\"/ catch block\",type:\"keyword\"}),W(\"if (${}) {\\n\t${}\\n}\",{label:\"if\",detail:\"block\",type:\"keyword\"}),W(`if (\\${}) {\n\t\\${}\n} else {\n\t\\${}\n}`,{label:\"if\",detail:\"/ else block\",type:\"keyword\"}),W(`class \\${name} {\n\tconstructor(\\${params}) {\n\t\t\\${}\n\t}\n}`,{label:\"class\",detail:\"definition\",type:\"keyword\"}),W('import {${names}} from \"${module}\"\\n${}',{label:\"import\",detail:\"named\",type:\"keyword\"}),W('import ${name} from \"${module}\"\\n${}',{label:\"import\",detail:\"default\",type:\"keyword\"})],Tx=lp.concat([W(\"interface ${name} {\\n\t${}\\n}\",{label:\"interface\",detail:\"definition\",type:\"keyword\"}),W(\"type ${name} = ${type}\",{label:\"type\",detail:\"definition\",type:\"keyword\"}),W(\"enum ${name} {\\n\t${}\\n}\",{label:\"enum\",detail:\"definition\",type:\"keyword\"})]),sp=new Tt,cp=new Set([\"Script\",\"Block\",\"FunctionExpression\",\"FunctionDeclaration\",\"ArrowFunction\",\"MethodDeclaration\",\"ForStatement\"]);function kr(O){return(e,t)=>{let i=e.node.getChild(\"VariableDefinition\");return i&&t(i,O),!0}}var bx=[\"FunctionDeclaration\"],yx={FunctionDeclaration:kr(\"function\"),ClassDeclaration:kr(\"class\"),ClassExpression:()=>!0,EnumDeclaration:kr(\"constant\"),TypeAliasDeclaration:kr(\"type\"),NamespaceDeclaration:kr(\"namespace\"),VariableDefinition(O,e){O.matchContext(bx)||e(O,\"variable\")},TypeDefinition(O,e){e(O,\"type\")},__proto__:null};function hp(O,e){let t=sp.get(e);if(t)return t;let i=[],r=!0;function n(s,a){let o=O.sliceString(s.from,s.to);i.push({label:o,type:a})}return e.cursor(C.IncludeAnonymous).iterate(s=>{if(r)r=!1;else if(s.name){let a=yx[s.name];if(a&&a(s,n)||cp.has(s.name))return!1}else if(s.to-s.from>8192){for(let a of hp(O,s.node))i.push(a);return!1}}),sp.set(e,i),i}var ap=/^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/,fp=[\"TemplateString\",\"String\",\"RegExp\",\"LineComment\",\"BlockComment\",\"VariableDefinition\",\"TypeDefinition\",\"Label\",\"PropertyDefinition\",\"PropertyName\",\"PrivatePropertyDefinition\",\"PrivatePropertyName\",\"JSXText\",\"JSXAttributeValue\",\"JSXOpenTag\",\"JSXCloseTag\",\"JSXSelfClosingTag\",\".\",\"?.\"];function xx(O){let e=U(O.state).resolveInner(O.pos,-1);if(fp.indexOf(e.name)>-1)return null;let t=e.name==\"VariableName\"||e.to-e.from<20&&ap.test(O.state.sliceDoc(e.from,e.to));if(!t&&!O.explicit)return null;let i=[];for(let r=e;r;r=r.parent)cp.has(r.name)&&(i=i.concat(hp(O.state.doc,r)));return{options:i,from:t?e.from:O.pos,validFor:ap}}var pt=ne.define({name:\"javascript\",parser:np.configure({props:[se.add({IfStatement:le({except:/^\\s*({|else\\b)/}),TryStatement:le({except:/^\\s*({|catch\\b|finally\\b)/}),LabeledStatement:sO,SwitchBody:O=>{let e=O.textAfter,t=/^\\s*\\}/.test(e),i=/^\\s*(case|default)\\b/.test(e);return O.baseIndent+(t?0:i?1:2)*O.unit},Block:be({closing:\"}\"}),ArrowFunction:O=>O.baseIndent+O.unit,\"TemplateString BlockComment\":()=>null,\"Statement Property\":le({except:/^\\s*{/}),JSXElement(O){let e=/^\\s*<\\//.test(O.textAfter);return O.lineIndent(O.node.from)+(e?0:O.unit)},JSXEscape(O){let e=/\\s*\\}/.test(O.textAfter);return O.lineIndent(O.node.from)+(e?0:O.unit)},\"JSXOpenTag JSXSelfClosingTag\"(O){return O.column(O.node.from)+O.unit}}),te.add({\"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\":me,BlockComment(O){return{from:O.from+2,to:O.to-2}}})]}),languageData:{closeBrackets:{brackets:[\"(\",\"[\",\"{\",\"'\",'\"',\"`\"]},commentTokens:{line:\"//\",block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*(?:case |default:|\\{|\\}|<\\/)$/,wordChars:\"$\"}}),dp={test:O=>/^JSX/.test(O.name),facet:or({commentTokens:{block:{open:\"{/*\",close:\"*/}\"}}})},hc=pt.configure({dialect:\"ts\"},\"typescript\"),fc=pt.configure({dialect:\"jsx\",props:[Dn.add(O=>O.isTop?[dp]:void 0)]}),dc=pt.configure({dialect:\"jsx ts\",props:[Dn.add(O=>O.isTop?[dp]:void 0)]},\"typescript\"),up=O=>({label:O,type:\"keyword\"}),Qp=\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(up),kx=Qp.concat([\"declare\",\"implements\",\"private\",\"protected\",\"public\"].map(up));function ks(O={}){let e=O.jsx?O.typescript?dc:fc:O.typescript?hc:pt,t=O.typescript?Tx.concat(kx):lp.concat(Qp);return new J(e,[pt.data.of({autocomplete:cO(fp,zt(t))}),pt.data.of({autocomplete:xx}),O.jsx?vx:[]])}function wx(O){for(;;){if(O.name==\"JSXOpenTag\"||O.name==\"JSXSelfClosingTag\"||O.name==\"JSXFragmentTag\")return O;if(O.name==\"JSXEscape\"||!O.parent)return null;O=O.parent}}function op(O,e,t=O.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name==\"JSXIdentifier\"||i.name==\"JSXBuiltin\"||i.name==\"JSXNamespacedName\"||i.name==\"JSXMemberExpression\")return O.sliceString(i.from,Math.min(i.to,t));return\"\"}var Zx=typeof navigator==\"object\"&&/Android\\b/.test(navigator.userAgent),vx=T.inputHandler.of((O,e,t,i,r)=>{if((Zx?O.composing:O.compositionStarted)||O.state.readOnly||e!=t||i!=\">\"&&i!=\"/\"||!pt.isActiveAt(O.state,e,-1))return!1;let n=r(),{state:s}=n,a=s.changeByRange(o=>{var l;let{head:c}=o,h=U(s).resolveInner(c-1,-1),f;if(h.name==\"JSXStartTag\"&&(h=h.parent),!(s.doc.sliceString(c-1,c)!=i||h.name==\"JSXAttributeValue\"&&h.to>c)){if(i==\">\"&&h.name==\"JSXFragmentTag\")return{range:o,changes:{from:c,insert:\"</>\"}};if(i==\"/\"&&h.name==\"JSXStartCloseTag\"){let u=h.parent,Q=u.parent;if(Q&&u.from==c-2&&((f=op(s.doc,Q.firstChild,c))||((l=Q.firstChild)===null||l===void 0?void 0:l.name)==\"JSXFragmentTag\")){let $=`${f}>`;return{range:S.cursor(c+$.length,-1),changes:{from:c,insert:$}}}}else if(i==\">\"){let u=wx(h);if(u&&u.name==\"JSXOpenTag\"&&!/^\\/?>|^<\\//.test(s.doc.sliceString(c,c+2))&&(f=op(s.doc,u,c)))return{range:o,changes:{from:c,insert:`</${f}>`}}}}return{range:o}});return a.changes.empty?!1:(O.dispatch([n,s.update(a,{userEvent:\"input.complete\",scrollIntoView:!0})]),!0)});var wr=[\"_blank\",\"_self\",\"_top\",\"_parent\"],uc=[\"ascii\",\"utf-8\",\"utf-16\",\"latin1\",\"latin1\"],Qc=[\"get\",\"post\",\"put\",\"delete\"],$c=[\"application/x-www-form-urlencoded\",\"multipart/form-data\",\"text/plain\"],Ke=[\"true\",\"false\"],_={},Yx={a:{attrs:{href:null,ping:null,type:null,media:null,target:wr,hreflang:null}},abbr:_,address:_,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[\"default\",\"rect\",\"circle\",\"poly\"]}},article:_,aside:_,audio:{attrs:{src:null,mediagroup:null,crossorigin:[\"anonymous\",\"use-credentials\"],preload:[\"none\",\"metadata\",\"auto\"],autoplay:[\"autoplay\"],loop:[\"loop\"],controls:[\"controls\"]}},b:_,base:{attrs:{href:null,target:wr}},bdi:_,bdo:_,blockquote:{attrs:{cite:null}},body:_,br:_,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[\"autofocus\"],disabled:[\"autofocus\"],formenctype:$c,formmethod:Qc,formnovalidate:[\"novalidate\"],formtarget:wr,type:[\"submit\",\"reset\",\"button\"]}},canvas:{attrs:{width:null,height:null}},caption:_,center:_,cite:_,code:_,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[\"command\",\"checkbox\",\"radio\"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[\"disabled\"],checked:[\"checked\"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[\"disabled\"],multiple:[\"multiple\"]}},datalist:{attrs:{data:null}},dd:_,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[\"open\"]}},dfn:_,div:_,dl:_,dt:_,em:_,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[\"disabled\"],form:null,name:null}},figcaption:_,figure:_,footer:_,form:{attrs:{action:null,name:null,\"accept-charset\":uc,autocomplete:[\"on\",\"off\"],enctype:$c,method:Qc,novalidate:[\"novalidate\"],target:wr}},h1:_,h2:_,h3:_,h4:_,h5:_,h6:_,head:{children:[\"title\",\"base\",\"link\",\"style\",\"meta\",\"script\",\"noscript\",\"command\"]},header:_,hgroup:_,hr:_,html:{attrs:{manifest:null}},i:_,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[\"allow-top-navigation\",\"allow-same-origin\",\"allow-forms\",\"allow-scripts\"],seamless:[\"seamless\"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[\"anonymous\",\"use-credentials\"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[\"audio/*\",\"video/*\",\"image/*\"],autocomplete:[\"on\",\"off\"],autofocus:[\"autofocus\"],checked:[\"checked\"],disabled:[\"disabled\"],formenctype:$c,formmethod:Qc,formnovalidate:[\"novalidate\"],formtarget:wr,multiple:[\"multiple\"],readonly:[\"readonly\"],required:[\"required\"],type:[\"hidden\",\"text\",\"search\",\"tel\",\"url\",\"email\",\"password\",\"datetime\",\"date\",\"month\",\"week\",\"time\",\"datetime-local\",\"number\",\"range\",\"color\",\"checkbox\",\"radio\",\"file\",\"submit\",\"image\",\"reset\",\"button\"]}},ins:{attrs:{cite:null,datetime:null}},kbd:_,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[\"autofocus\"],disabled:[\"disabled\"],keytype:[\"RSA\"]}},label:{attrs:{for:null,form:null}},legend:_,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[\"all\",\"16x16\",\"16x16 32x32\",\"16x16 32x32 64x64\"]}},map:{attrs:{name:null}},mark:_,menu:{attrs:{label:null,type:[\"list\",\"context\",\"toolbar\"]}},meta:{attrs:{content:null,charset:uc,name:[\"viewport\",\"application-name\",\"author\",\"description\",\"generator\",\"keywords\"],\"http-equiv\":[\"content-language\",\"content-type\",\"default-style\",\"refresh\"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:_,noscript:_,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[\"typemustmatch\"]}},ol:{attrs:{reversed:[\"reversed\"],start:null,type:[\"1\",\"a\",\"A\",\"i\",\"I\"]},children:[\"li\",\"script\",\"template\",\"ul\",\"ol\"]},optgroup:{attrs:{disabled:[\"disabled\"],label:null}},option:{attrs:{disabled:[\"disabled\"],label:null,selected:[\"selected\"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:_,param:{attrs:{name:null,value:null}},pre:_,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:_,rt:_,ruby:_,samp:_,script:{attrs:{type:[\"text/javascript\"],src:null,async:[\"async\"],defer:[\"defer\"],charset:uc}},section:_,select:{attrs:{form:null,name:null,size:null,autofocus:[\"autofocus\"],disabled:[\"disabled\"],multiple:[\"multiple\"]}},slot:{attrs:{name:null}},small:_,source:{attrs:{src:null,type:null,media:null}},span:_,strong:_,style:{attrs:{type:[\"text/css\"],media:null,scoped:null}},sub:_,summary:_,sup:_,table:_,tbody:_,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:_,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[\"autofocus\"],disabled:[\"disabled\"],readonly:[\"readonly\"],required:[\"required\"],wrap:[\"soft\",\"hard\"]}},tfoot:_,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[\"row\",\"col\",\"rowgroup\",\"colgroup\"]}},thead:_,time:{attrs:{datetime:null}},title:_,tr:_,track:{attrs:{src:null,label:null,default:null,kind:[\"subtitles\",\"captions\",\"descriptions\",\"chapters\",\"metadata\"],srclang:null}},ul:{children:[\"li\",\"script\",\"template\",\"ul\",\"ol\"]},var:_,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[\"anonymous\",\"use-credentials\"],preload:[\"auto\",\"metadata\",\"none\"],autoplay:[\"autoplay\"],mediagroup:[\"movie\"],muted:[\"muted\"],controls:[\"controls\"]}},wbr:_},gp={accesskey:null,class:null,contenteditable:Ke,contextmenu:null,dir:[\"ltr\",\"rtl\",\"auto\"],draggable:[\"true\",\"false\",\"auto\"],dropzone:[\"copy\",\"move\",\"link\",\"string:\",\"file:\"],hidden:[\"hidden\"],id:null,inert:[\"inert\"],itemid:null,itemprop:null,itemref:null,itemscope:[\"itemscope\"],itemtype:null,lang:[\"ar\",\"bn\",\"de\",\"en-GB\",\"en-US\",\"es\",\"fr\",\"hi\",\"id\",\"ja\",\"pa\",\"pt\",\"ru\",\"tr\",\"zh\"],spellcheck:Ke,autocorrect:Ke,autocapitalize:Ke,style:null,tabindex:null,title:null,translate:[\"yes\",\"no\"],rel:[\"stylesheet\",\"alternate\",\"author\",\"bookmark\",\"help\",\"license\",\"next\",\"nofollow\",\"noreferrer\",\"prefetch\",\"prev\",\"search\",\"tag\"],role:\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\"aria-activedescendant\":null,\"aria-atomic\":Ke,\"aria-autocomplete\":[\"inline\",\"list\",\"both\",\"none\"],\"aria-busy\":Ke,\"aria-checked\":[\"true\",\"false\",\"mixed\",\"undefined\"],\"aria-controls\":null,\"aria-describedby\":null,\"aria-disabled\":Ke,\"aria-dropeffect\":null,\"aria-expanded\":[\"true\",\"false\",\"undefined\"],\"aria-flowto\":null,\"aria-grabbed\":[\"true\",\"false\",\"undefined\"],\"aria-haspopup\":Ke,\"aria-hidden\":Ke,\"aria-invalid\":[\"true\",\"false\",\"grammar\",\"spelling\"],\"aria-label\":null,\"aria-labelledby\":null,\"aria-level\":null,\"aria-live\":[\"off\",\"polite\",\"assertive\"],\"aria-multiline\":Ke,\"aria-multiselectable\":Ke,\"aria-owns\":null,\"aria-posinset\":null,\"aria-pressed\":[\"true\",\"false\",\"mixed\",\"undefined\"],\"aria-readonly\":Ke,\"aria-relevant\":null,\"aria-required\":Ke,\"aria-selected\":[\"true\",\"false\",\"undefined\"],\"aria-setsize\":null,\"aria-sort\":[\"ascending\",\"descending\",\"none\",\"other\"],\"aria-valuemax\":null,\"aria-valuemin\":null,\"aria-valuenow\":null,\"aria-valuetext\":null},Pp=\"beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload\".split(\" \").map(O=>\"on\"+O);for(let O of Pp)gp[O]=null;var qO=class{constructor(e,t){this.tags={...Yx,...e},this.globalAttrs={...gp,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};qO.default=new qO;function Si(O,e,t=O.length){if(!e)return\"\";let i=e.firstChild,r=i&&i.getChild(\"TagName\");return r?O.sliceString(r.from,Math.min(r.to,t)):\"\"}function Xi(O,e=!1){for(;O;O=O.parent)if(O.name==\"Element\")if(e)e=!1;else return O;return null}function Sp(O,e,t){let i=t.tags[Si(O,Xi(e))];return i?.children||t.allTags}function pc(O,e){let t=[];for(let i=Xi(e);i&&!i.type.isTop;i=Xi(i.parent)){let r=Si(O,i);if(r&&i.lastChild.name==\"CloseTag\")break;r&&t.indexOf(r)<0&&(e.name==\"EndTag\"||e.from>=i.firstChild.to)&&t.push(r)}return t}var Xp=/^[:\\-\\.\\w\\u00b7-\\uffff]*$/;function $p(O,e,t,i,r){let n=/\\s*>/.test(O.sliceDoc(r,r+5))?\"\":\">\",s=Xi(t,t.name==\"StartTag\"||t.name==\"TagName\");return{from:i,to:r,options:Sp(O.doc,s,e).map(a=>({label:a,type:\"type\"})).concat(pc(O.doc,t).map((a,o)=>({label:\"/\"+a,apply:\"/\"+a+n,type:\"type\",boost:99-o}))),validFor:/^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/}}function pp(O,e,t,i){let r=/\\s*>/.test(O.sliceDoc(i,i+5))?\"\":\">\";return{from:t,to:i,options:pc(O.doc,e).map((n,s)=>({label:n,apply:n+r,type:\"type\",boost:99-s})),validFor:Xp}}function _x(O,e,t,i){let r=[],n=0;for(let s of Sp(O.doc,t,e))r.push({label:\"<\"+s,type:\"type\"});for(let s of pc(O.doc,t))r.push({label:\"</\"+s+\">\",type:\"type\",boost:99-n++});return{from:i,to:i,options:r,validFor:/^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/}}function Rx(O,e,t,i,r){let n=Xi(t),s=n?e.tags[Si(O.doc,n)]:null,a=s&&s.attrs?Object.keys(s.attrs):[],o=s&&s.globalAttrs===!1?a:a.length?a.concat(e.globalAttrNames):e.globalAttrNames;return{from:i,to:r,options:o.map(l=>({label:l,type:\"property\"})),validFor:Xp}}function Vx(O,e,t,i,r){var n;let s=(n=t.parent)===null||n===void 0?void 0:n.getChild(\"AttributeName\"),a=[],o;if(s){let l=O.sliceDoc(s.from,s.to),c=e.globalAttrs[l];if(!c){let h=Xi(t),f=h?e.tags[Si(O.doc,h)]:null;c=f?.attrs&&f.attrs[l]}if(c){let h=O.sliceDoc(i,r).toLowerCase(),f='\"',u='\"';/^['\"]/.test(h)?(o=h[0]=='\"'?/^[^\"]*$/:/^[^']*$/,f=\"\",u=O.sliceDoc(r,r+1)==h[0]?\"\":h[0],h=h.slice(1),i++):o=/^[^\\s<>='\"]*$/;for(let Q of c)a.push({label:Q,apply:f+Q+u,type:\"constant\"})}}return{from:i,to:r,options:a,validFor:o}}function Tp(O,e){let{state:t,pos:i}=e,r=U(t).resolveInner(i,-1),n=r.resolve(i);for(let s=i,a;n==r&&(a=r.childBefore(s));){let o=a.lastChild;if(!o||!o.type.isError||o.from<o.to)break;n=r=a,s=o.from}return r.name==\"TagName\"?r.parent&&/CloseTag$/.test(r.parent.name)?pp(t,r,r.from,i):$p(t,O,r,r.from,i):r.name==\"StartTag\"||r.name==\"IncompleteTag\"?$p(t,O,r,i,i):r.name==\"StartCloseTag\"||r.name==\"IncompleteCloseTag\"?pp(t,r,i,i):r.name==\"OpenTag\"||r.name==\"SelfClosingTag\"||r.name==\"AttributeName\"?Rx(t,O,r,r.name==\"AttributeName\"?r.from:i,i):r.name==\"Is\"||r.name==\"AttributeValue\"||r.name==\"UnquotedAttributeValue\"?Vx(t,O,r,r.name==\"Is\"?i:r.from,i):e.explicit&&(n.name==\"Element\"||n.name==\"Text\"||n.name==\"Document\")?_x(t,O,r,i):null}function bp(O){return Tp(qO.default,O)}function qx(O){let{extraTags:e,extraGlobalAttributes:t}=O,i=t||e?new qO(e,t):qO.default;return r=>Tp(i,r)}var zx=pt.parser.configure({top:\"SingleExpression\"}),yp=[{tag:\"script\",attrs:O=>O.type==\"text/typescript\"||O.lang==\"ts\",parser:hc.parser},{tag:\"script\",attrs:O=>O.type==\"text/babel\"||O.type==\"text/jsx\",parser:fc.parser},{tag:\"script\",attrs:O=>O.type==\"text/typescript-jsx\",parser:dc.parser},{tag:\"script\",attrs(O){return/^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(O.type)},parser:zx},{tag:\"script\",attrs(O){return!O.type||/^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(O.type)},parser:pt.parser},{tag:\"style\",attrs(O){return(!O.lang||O.lang==\"css\")&&(!O.type||/^(text\\/)?(x-)?(stylesheet|css)$/i.test(O.type))},parser:xr.parser}],xp=[{name:\"style\",parser:xr.parser.configure({top:\"Styles\"})}].concat(Pp.map(O=>({name:O,parser:pt.parser}))),kp=ne.define({name:\"html\",parser:tp.configure({props:[se.add({Element(O){let e=/^(\\s*)(<\\/)?/.exec(O.textAfter);return O.node.to<=O.pos+e[0].length?O.continue():O.lineIndent(O.node.from)+(e[2]?0:O.unit)},\"OpenTag CloseTag SelfClosingTag\"(O){return O.column(O.node.from)+O.unit},Document(O){if(O.pos+/\\s*/.exec(O.textAfter)[0].length<O.node.to)return O.continue();let e=null,t;for(let i=O.node;;){let r=i.lastChild;if(!r||r.name!=\"Element\"||r.to!=i.to)break;e=i=r}return e&&!((t=e.lastChild)&&(t.name==\"CloseTag\"||t.name==\"SelfClosingTag\"))?O.lineIndent(e.from)+O.unit:null}}),te.add({Element(O){let e=O.firstChild,t=O.lastChild;return!e||e.name!=\"OpenTag\"?null:{from:e.to,to:t.name==\"CloseTag\"?t.from:O.to}}}),hr.add({\"OpenTag CloseTag\":O=>O.getChild(\"TagName\")})]}),languageData:{commentTokens:{block:{open:\"<!--\",close:\"-->\"}},indentOnInput:/^\\s*<\\/\\w+\\W$/,wordChars:\"-_\"}}),ws=kp.configure({wrap:ac(yp,xp)});function Ti(O={}){let e=\"\",t;O.matchClosingTags===!1&&(e=\"noMatch\"),O.selfClosingTags===!0&&(e=(e?e+\" \":\"\")+\"selfClosing\"),(O.nestedLanguages&&O.nestedLanguages.length||O.nestedAttributes&&O.nestedAttributes.length)&&(t=ac((O.nestedLanguages||[]).concat(yp),(O.nestedAttributes||[]).concat(xp)));let i=t?kp.configure({wrap:t,dialect:e}):e?ws.configure({dialect:e}):ws;return new J(i,[ws.data.of({autocomplete:qx(O)}),O.autoCloseTags!==!1?Ux:[],ks().support,ys().support])}var mp=new Set(\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \")),Ux=T.inputHandler.of((O,e,t,i,r)=>{if(O.composing||O.state.readOnly||e!=t||i!=\">\"&&i!=\"/\"||!ws.isActiveAt(O.state,e,-1))return!1;let n=r(),{state:s}=n,a=s.changeByRange(o=>{var l,c,h;let f=s.doc.sliceString(o.from-1,o.to)==i,{head:u}=o,Q=U(s).resolveInner(u,-1),$;if(f&&i==\">\"&&Q.name==\"EndTag\"){let p=Q.parent;if(((c=(l=p.parent)===null||l===void 0?void 0:l.lastChild)===null||c===void 0?void 0:c.name)!=\"CloseTag\"&&($=Si(s.doc,p.parent,u))&&!mp.has($)){let m=u+(s.doc.sliceString(u,u+1)===\">\"?1:0),g=`</${$}>`;return{range:o,changes:{from:u,to:m,insert:g}}}}else if(f&&i==\"/\"&&Q.name==\"IncompleteCloseTag\"){let p=Q.parent;if(Q.from==u-2&&((h=p.lastChild)===null||h===void 0?void 0:h.name)!=\"CloseTag\"&&($=Si(s.doc,p,u))&&!mp.has($)){let m=u+(s.doc.sliceString(u,u+1)===\">\"?1:0),g=`${$}>`;return{range:S.cursor(u+g.length,-1),changes:{from:u,to:m,insert:g}}}}return{range:o}});return a.changes.empty?!1:(O.dispatch([n,s.update(a,{userEvent:\"input.complete\",scrollIntoView:!0})]),!0)});var Wx=F({null:d.null,instanceof:d.operatorKeyword,this:d.self,\"new super assert open to with void\":d.keyword,\"class interface extends implements enum var\":d.definitionKeyword,\"module package import\":d.moduleKeyword,\"switch while for if else case default do break continue return try catch finally throw\":d.controlKeyword,\"requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws\":d.modifier,IntegerLiteral:d.integer,FloatingPointLiteral:d.float,\"StringLiteral TextBlock\":d.string,CharacterLiteral:d.character,LineComment:d.lineComment,BlockComment:d.blockComment,BooleanLiteral:d.bool,PrimitiveType:d.standard(d.typeName),TypeName:d.typeName,Identifier:d.variableName,\"MethodName/Identifier\":d.function(d.variableName),Definition:d.definition(d.variableName),ArithOp:d.arithmeticOperator,LogicOp:d.logicOperator,BitOp:d.bitwiseOperator,CompareOp:d.compareOperator,AssignOp:d.definitionOperator,UpdateOp:d.updateOperator,Asterisk:d.punctuation,Label:d.labelName,\"( )\":d.paren,\"[ ]\":d.squareBracket,\"{ }\":d.brace,\".\":d.derefOperator,\", ;\":d.separator}),jx={__proto__:null,true:34,false:34,null:42,void:46,byte:48,short:48,int:48,long:48,char:48,float:48,double:48,boolean:48,extends:62,super:64,class:76,this:78,new:84,public:100,protected:102,private:104,abstract:106,static:108,final:110,strictfp:112,default:114,synchronized:116,native:118,transient:120,volatile:122,throws:150,implements:160,interface:166,enum:176,instanceof:238,open:267,module:269,requires:274,transitive:276,exports:278,to:280,opens:282,uses:284,provides:286,with:288,package:292,import:296,if:308,else:310,while:314,for:318,var:325,assert:332,switch:336,case:342,do:346,break:350,continue:354,return:358,throw:364,try:368,catch:372,finally:380},wp=Oe.deserialize({version:14,states:\"##jQ]QPOOQ$wQPOOO(bQQO'#H^O*iQQO'#CbOOQO'#Cb'#CbO*pQPO'#CaO*xOSO'#CpOOQO'#Hc'#HcOOQO'#Cu'#CuO,eQPO'#D_O-OQQO'#HmOOQO'#Hm'#HmO/gQQO'#HhO/nQQO'#HhOOQO'#Hh'#HhOOQO'#Hg'#HgO1rQPO'#DUO2PQPO'#GnO4wQPO'#D_O5OQPO'#DzO*pQPO'#E[O5qQPO'#E[OOQO'#DV'#DVO7SQQO'#HaO9^QQO'#EeO9eQPO'#EdO9jQPO'#EfOOQO'#Hb'#HbO7jQQO'#HbO:pQQO'#FhO:wQPO'#ExO:|QPO'#E}O:|QPO'#FPOOQO'#Ha'#HaOOQO'#HY'#HYOOQO'#Gh'#GhOOQO'#HX'#HXO<^QPO'#FiOOQO'#HW'#HWOOQO'#Gg'#GgQ]QPOOOOQO'#Hs'#HsO<cQPO'#HsO<hQPO'#D{O<hQPO'#EVO<hQPO'#EQO<pQPO'#HpO=RQQO'#EfO*pQPO'#C`O=ZQPO'#C`O*pQPO'#FcO=`QPO'#FeO=kQPO'#FkO=kQPO'#FnO<hQPO'#FsO=pQPO'#FpO:|QPO'#FwO=kQPO'#FyO]QPO'#GOO=uQPO'#GQO>QQPO'#GSO>]QPO'#GUO=kQPO'#GWO:|QPO'#GXO>dQPO'#GZO?QQQO'#HiO?mQQO'#CuO?tQPO'#HxO@SQPO'#D_O@rQPO'#DpO?wQPO'#DqO@|QPO'#HxOA_QPO'#DpOAgQPO'#IROAlQPO'#E`OOQO'#Hr'#HrOOQO'#Gm'#GmQ$wQPOOOAtQPO'#HsOOQO'#H^'#H^OCsQQO,58{OOQO'#H['#H[OOOO'#Gi'#GiOEfOSO,59[OOQO,59[,59[OOQO'#Hi'#HiOFVQPO,59eOGXQPO,59yOOQO-E:f-E:fO*pQPO,58zOG{QPO,58zO*pQPO,5;}OHQQPO'#DQOHVQPO'#DQOOQO'#Gk'#GkOIVQQO,59jOOQO'#Dm'#DmOJqQPO'#HuOJ{QPO'#DlOKZQPO'#HtOKcQPO,5<_OKhQPO,59^OLRQPO'#CxOOQO,59c,59cOLYQPO,59bOLeQQO'#H^ONgQQO'#CbO!!iQPO'#D_O!#nQQO'#HmO!$OQQO,59pO!$VQPO'#DvO!$eQPO'#H|O!$mQPO,5:`O!$rQPO,5:`O!%YQPO,5;nO!%eQPO'#ITO!%pQPO,5;eO!%uQPO,5=YOOQO-E:l-E:lOOQO,5:f,5:fO!']QPO,5:fO!'dQPO,5:vO?tQPO,5<_O*pQPO,5:vO<hQPO,5:gO<hQPO,5:qO<hQPO,5:lO<hQPO,5<_O!'zQPO,59qO:|QPO,5:}O!(RQPO,5;QO:|QPO,59TO!(aQPO'#DXOOQO,5;O,5;OOOQO'#El'#ElOOQO'#Eo'#EoO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;UO:|QPO,5;fOOQO,5;i,5;iOOQO,5<S,5<SO!(hQPO,5;bO!(yQPO,5;dO!(hQPO'#CyO!)QQQO'#HmO!)`QQO,5;kO]QPO,5<TOOQO-E:e-E:eOOQO,5>_,5>_O!*sQPO,5:gO!+RQPO,5:qO!+ZQPO,5:lO!+fQPO,5>[O!$VQPO,5>[O!'iQPO,59UO!+qQQO,58zO!+yQQO,5;}O!,RQQO,5<PO*pQPO,5<PO:|QPO'#DUO]QPO,5<VO]QPO,5<YO!,ZQPO'#FrO]QPO,5<[O]QPO,5<aO!,kQQO,5<cO!,uQPO,5<eO!,zQPO,5<jOOQO'#Fj'#FjOOQO,5<l,5<lO!-PQPO,5<lOOQO,5<n,5<nO!-UQPO,5<nO!-ZQQO,5<pOOQO,5<p,5<pO>gQPO,5<rO!-bQQO,5<sO!-iQPO'#GdO!.oQPO,5<uO>gQPO,5<}O!2mQPO,59jO!2zQPO'#HuO!3RQPO,59xO!3WQPO,5>dO?tQPO,59xO!3cQPO,5:[OAlQPO,5:zO!3kQPO'#DrO?wQPO'#DrO!3vQPO'#HyO!4OQPO,5:]O?tQPO,5>dO!(hQPO,5>dOAgQPO,5>mOOQO,5:[,5:[O!$rQPO'#DtOOQO,5>m,5>mO!4TQPO'#EaOOQO,5:z,5:zO!7UQPO,5:zO!(hQPO'#DxOOQO-E:k-E:kOOQO,5:y,5:yO*pQPO,58}O!7ZQPO'#ChOOQO1G.k1G.kOOOO-E:g-E:gOOQO1G.v1G.vO!+qQQO1G.fO*pQPO1G.fO!7eQQO1G1iOOQO,59l,59lO!7mQPO,59lOOQO-E:i-E:iO!7rQPO,5>aO!8ZQPO,5:WO<hQPO'#GpO!8bQPO,5>`OOQO1G1y1G1yOOQO1G.x1G.xO!8{QPO'#CyO!9kQPO'#HmO!9uQPO'#CzO!:TQPO'#HlO!:]QPO,59dOOQO1G.|1G.|OLYQPO1G.|O!:sQPO,59eO!;QQQO'#H^O!;cQQO'#CbOOQO,5:b,5:bO<hQPO,5:cOOQO,5:a,5:aO!;tQQO,5:aOOQO1G/[1G/[O!;yQPO,5:bO!<[QPO'#GsO!<oQPO,5>hOOQO1G/z1G/zO!<wQPO'#DvO!=YQPO1G/zO!(hQPO'#GqO!=_QPO1G1YO:|QPO1G1YO<hQPO'#GyO!=gQPO,5>oOOQO1G1P1G1POOQO1G0Q1G0QO!=oQPO'#E]OOQO1G0b1G0bO!>`QPO1G1yO!'dQPO1G0bO!*sQPO1G0RO!+RQPO1G0]O!+ZQPO1G0WOOQO1G/]1G/]O!>eQQO1G.pO9eQPO1G0jO*pQPO1G0jO<pQPO'#HpO!@[QQO1G.pOOQO1G.p1G.pO!@aQQO1G0iOOQO1G0l1G0lO!@hQPO1G0lO!@sQQO1G.oO!AZQQO'#HqO!AhQPO,59sO!BzQQO1G0pO!DfQQO1G0pO!DmQQO1G0pO!FUQQO1G0pO!F]QQO1G0pO!GbQQO1G0pO!I]QQO1G0pO!IdQQO1G0pO!IkQQO1G0pO!IuQQO1G1QO!I|QQO'#HmOOQO1G0|1G0|O!KSQQO1G1OOOQO1G1O1G1OOOQO1G1o1G1oO!KjQPO'#D[O!(hQPO'#D|O!(hQPO'#D}OOQO1G0R1G0RO!KqQPO1G0RO!KvQPO1G0RO!LOQPO1G0RO!LZQPO'#EXOOQO1G0]1G0]O!LnQPO1G0]O!LsQPO'#ETO!(hQPO'#ESOOQO1G0W1G0WO!MmQPO1G0WO!MrQPO1G0WO!MzQPO'#EhO!NRQPO'#EhOOQO'#Gx'#GxO!NZQQO1G0mO# }QQO1G3vO9eQPO1G3vO#$PQPO'#FXOOQO1G.f1G.fOOQO1G1i1G1iO#$WQPO1G1kOOQO1G1k1G1kO#$cQQO1G1kO#$kQPO1G1qOOQO1G1t1G1tO+QQPO'#D_O-OQQO,5<bO#(cQPO,5<bO#(tQPO,5<^O#({QPO,5<^OOQO1G1v1G1vOOQO1G1{1G1{OOQO1G1}1G1}O:|QPO1G1}O#,oQPO'#F{OOQO1G2P1G2PO=kQPO1G2UOOQO1G2W1G2WOOQO1G2Y1G2YOOQO1G2[1G2[OOQO1G2^1G2^OOQO1G2_1G2_O#,vQQO'#H^O#-aQQO'#CbO-OQQO'#HmO#-zQQOOO#.hQQO'#EeO#.VQQO'#HbO!$VQPO'#GeO#.oQPO,5=OOOQO'#HQ'#HQO#.wQPO1G2aO#2uQPO'#G]O>gQPO'#GaOOQO1G2a1G2aO#2zQPO1G2iO#6xQPO,5>gOOQO1G/d1G/dOOQO1G4O1G4OO#7ZQPO1G/dOOQO1G/v1G/vOOQO1G0f1G0fO!7UQPO1G0fOOQO,5:^,5:^O!(hQPO'#DsO#7`QPO,5:^O?wQPO'#GrO#7kQPO,5>eOOQO1G/w1G/wOAgQPO'#H{O#7sQPO1G4OO?tQPO1G4OOOQO1G4X1G4XO!#YQPO'#DvO!!iQPO'#D_OOQO,5:{,5:{O#8OQPO,5:{O#8OQPO,5:{O#8VQQO'#HaO#9hQQO'#HbO#9rQQO'#EbO#9}QPO'#EbO#:VQPO'#IOOOQO,5:d,5:dOOQO1G.i1G.iO#:bQQO'#EeO#:rQQO'#H`O#;SQPO'#FTOOQO'#H`'#H`O#;^QPO'#H`O#;{QPO'#IWO#<TQPO,59SOOQO7+$Q7+$QO!+qQQO7+$QOOQO7+'T7+'TOOQO1G/W1G/WO#<YQPO'#DoO#<dQQO'#HvOOQO'#Hv'#HvOOQO1G/r1G/rOOQO,5=[,5=[OOQO-E:n-E:nO#<tQWO,58{O#<{QPO,59fOOQO,59f,59fO!(hQPO'#HoOKmQPO'#GjO#=ZQPO,5>WOOQO1G/O1G/OOOQO7+$h7+$hOOQO1G/{1G/{O#=cQQO1G/{OOQO1G/}1G/}O#=hQPO1G/{OOQO1G/|1G/|O<hQPO1G/}OOQO,5=_,5=_OOQO-E:q-E:qOOQO7+%f7+%fOOQO,5=],5=]OOQO-E:o-E:oO:|QPO7+&tOOQO7+&t7+&tOOQO,5=e,5=eOOQO-E:w-E:wO#=mQPO'#EUO#={QPO'#EUOOQO'#Gw'#GwO#>dQPO,5:wOOQO,5:w,5:wOOQO7+'e7+'eOOQO7+%|7+%|OOQO7+%m7+%mO!KqQPO7+%mO!KvQPO7+%mO!LOQPO7+%mOOQO7+%w7+%wO!LnQPO7+%wOOQO7+%r7+%rO!MmQPO7+%rO!MrQPO7+%rOOQO7+&U7+&UOOQO'#Ee'#EeO9eQPO7+&UO9eQPO,5>[O#?TQPO7+$[OOQO7+&T7+&TOOQO7+&W7+&WO:|QPO'#GlO#?cQPO,5>]OOQO1G/_1G/_O:|QPO7+&lO#?nQQO,59eO#@tQPO,59vOOQO,59v,59vOOQO,5:h,5:hOOQO'#EP'#EPOOQO,5:i,5:iO#@{QPO'#EYO<hQPO'#EYO#A^QPO'#IPO#AiQPO,5:sO?tQPO'#HxO!(hQPO'#HxO#AqQPO'#DpOOQO'#Gu'#GuO#AxQPO,5:oOOQO,5:o,5:oOOQO,5:n,5:nOOQO,5;S,5;SO#BrQQO,5;SO#ByQPO,5;SOOQO-E:v-E:vOOQO7+&X7+&XOOQO7+)b7+)bO#CQQQO7+)bOOQO'#G|'#G|O#DqQPO,5;sOOQO,5;s,5;sO#DxQPO'#FYO*pQPO'#FYO*pQPO'#FYO*pQPO'#FYO#EWQPO7+'VO#E]QPO7+'VOOQO7+'V7+'VO]QPO7+']O#EhQPO1G1|O?tQPO1G1|O#EvQQO1G1xO!(aQPO1G1xO#E}QPO1G1xO#FUQQO7+'iOOQO'#HP'#HPO#F]QPO,5<gOOQO,5<g,5<gO#FdQPO'#HsO:|QPO'#F|O#FlQPO7+'pO#FqQPO,5=PO?tQPO,5=PO#FvQPO1G2jO#HPQPO1G2jOOQO1G2j1G2jOOQO-E;O-E;OOOQO7+'{7+'{O!<[QPO'#G_O>gQPO,5<wOOQO,5<{,5<{O#HXQPO7+(TOOQO7+(T7+(TO#LVQPO1G4ROOQO7+%O7+%OOOQO7+&Q7+&QO#LhQPO,5:_OOQO1G/x1G/xOOQO,5=^,5=^OOQO-E:p-E:pOOQO7+)j7+)jO#LsQPO7+)jO!:bQPO,5:aOOQO1G0g1G0gO#MOQPO1G0gO#MVQPO,59qO#MkQPO,5:|O9eQPO,5:|O!(hQPO'#GtO#MpQPO,5>jO#M{QPO,59TO#NSQPO'#IVO#N[QPO,5;oO*pQPO'#G{O#NaQPO,5>rOOQO1G.n1G.nOOQO<<Gl<<GlO#NiQPO'#HwO#NqQPO,5:ZOOQO1G/Q1G/QOOQO,5>Z,5>ZOOQO,5=U,5=UOOQO-E:h-E:hO#NvQPO7+%gOOQO7+%g7+%gOOQO7+%i7+%iOOQO<<J`<<J`O$ ^QPO'#H^O$ eQPO'#CbO$ lQPO,5:pO$ qQPO,5:xO#=mQPO,5:pOOQO-E:u-E:uOOQO1G0c1G0cOOQO<<IX<<IXO!KqQPO<<IXO!KvQPO<<IXOOQO<<Ic<<IcOOQO<<I^<<I^O!MmQPO<<I^OOQO<<Ip<<IpO$ vQQO<<GvO9eQPO<<IpO*pQPO<<IpOOQO<<Gv<<GvO$#mQQO,5=WOOQO-E:j-E:jO$#zQQO<<JWOOQO1G/b1G/bOOQO,5:t,5:tO$$bQPO,5:tO$$pQPO,5:tO$%RQPO'#GvO$%iQPO,5>kO$%tQPO'#EZOOQO1G0_1G0_O$%{QPO1G0_O?tQPO,5:pOOQO-E:s-E:sOOQO1G0Z1G0ZOOQO1G0n1G0nO$&QQQO1G0nOOQO<<L|<<L|OOQO-E:z-E:zOOQO1G1_1G1_O$&XQQO,5;tOOQO'#G}'#G}O#DxQPO,5;tOOQO'#IX'#IXO$&aQQO,5;tO$&rQQO,5;tOOQO<<Jq<<JqO$&zQPO<<JqOOQO<<Jw<<JwO:|QPO7+'hO$'PQPO7+'hO!(aQPO7+'dO$'_QPO7+'dO$'dQQO7+'dOOQO<<KT<<KTOOQO-E:}-E:}OOQO1G2R1G2ROOQO,5<h,5<hO$'kQQO,5<hOOQO<<K[<<K[O:|QPO1G2kO$'rQPO1G2kOOQO,5=n,5=nOOQO7+(U7+(UO$'wQPO7+(UOOQO-E;Q-E;QO$)fQWO'#HhO$)QQWO'#HhO$)mQPO'#G`O<hQPO,5<yO!$VQPO,5<yOOQO1G2c1G2cOOQO<<Ko<<KoO$*OQPO1G/yOOQO<<MU<<MUOOQO7+&R7+&RO$*ZQPO1G0jO$*fQQO1G0hOOQO1G0h1G0hO$*nQPO1G0hOOQO,5=`,5=`OOQO-E:r-E:rO$*sQQO1G.oOOQO1G1[1G1[O$*}QPO'#GzO$+[QPO,5>qOOQO1G1Z1G1ZO$+dQPO'#FUOOQO,5=g,5=gOOQO-E:y-E:yO$+iQPO'#GoO$+vQPO,5>cOOQO1G/u1G/uOOQO<<IR<<IROOQO1G0[1G0[O$,OQPO1G0dO$,TQPO1G0[O$,YQPO1G0dOOQOAN>sAN>sO!KqQPOAN>sOOQOAN>xAN>xOOQOAN?[AN?[O9eQPOAN?[OOQO1G0`1G0`O$,_QPO1G0`OOQO,5=b,5=bOOQO-E:t-E:tO$,mQPO,5:uOOQO7+%y7+%yOOQO7+&Y7+&YOOQO1G1`1G1`O$,tQQO1G1`OOQO-E:{-E:{O$,|QQO'#IYO$,wQPO1G1`O$&gQPO1G1`O*pQPO1G1`OOQOAN@]AN@]O$-XQQO<<KSO:|QPO<<KSO$-`QPO<<KOOOQO<<KO<<KOO!(aQPO<<KOOOQO1G2S1G2SO$-eQQO7+(VO:|QPO7+(VOOQO<<Kp<<KpP!-iQPO'#HSO!$VQPO'#HRO$-oQPO,5<zO$-zQPO1G2eO<hQPO1G2eO9eQPO7+&SO$.PQPO7+&SOOQO7+&S7+&SOOQO,5=f,5=fOOQO-E:x-E:xO#M{QPO,5;pOOQO,5=Z,5=ZOOQO-E:m-E:mO$.UQPO7+&OOOQO7+%v7+%vO$.dQPO7+&OOOQOG24_G24_OOQOG24vG24vOOQO7+%z7+%zOOQO7+&z7+&zO*pQPO'#HOO$.iQPO,5>tO$.qQPO7+&zO$.vQQO'#IZOOQOAN@nAN@nO$/RQQOAN@nOOQOAN@jAN@jO$/YQPOAN@jO$/_QQO<<KqO$/iQPO,5=mOOQO-E;P-E;POOQO7+(P7+(PO$/zQPO7+(PO$0PQPO<<InOOQO<<In<<InO$0UQPO<<IjOOQO<<Ij<<IjO#M{QPO<<IjO$0UQPO<<IjO$0dQQO,5=jOOQO-E:|-E:|OOQO<<Jf<<JfO$0oQPO,5>uOOQOG26YG26YOOQOG26UG26UOOQO<<Kk<<KkOOQOAN?YAN?YOOQOAN?UAN?UO#M{QPOAN?UO$0wQPOAN?UO$0|QPOAN?UO$1[QPOG24pOOQOG24pG24pO#M{QPOG24pOOQOLD*[LD*[O$1aQPOLD*[OOQO!$'Mv!$'MvO*pQPO'#CaO$1fQQO'#H^O$1yQQO'#CbO!(hQPO'#Cy\",stateData:\"$2i~OPOSQOS%yOS~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POv{OwkOz!OO}cO!PvO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO![!`O!]yO!^yO!_yO!u}O!z|O#fpO#roO#tpO#upO#y!RO#z!QO$W!SO$Y!TO$`!UO$c!VO$e!XO$h!WO$l!YO$n!ZO$s![O$u!]O$w!^O$y!_O$|!aO%O!bO%}TO&PRO&RQO&XUO&tdO~Og^Oh^Ov{O}cO!P!mO!SyO!TyO!UyO!VyO!W!pO!XyO!YyO!ZzO!]yO!^yO!_yO!u}O!z|O%}TO&P!cO&R!dO&_!hO&tdO~OWiXW&QXZ&QXuiXu&QX!P&QX!b&QX#]&QX#_&QX#a&QX#b&QX#d&QX#e&QX#f&QX#g&QX#h&QX#i&QX#k&QX#o&QX#r&QX%}iX&PiX&RiX&^&QX&_iX&_&QX&n&QX&viX&v&QX&x!aX~O#p$^X~P&bOWUXW&]XZUXuUXu&]X!PUX!bUX#]UX#_UX#aUX#bUX#dUX#eUX#fUX#gUX#hUX#iUX#kUX#oUX#rUX%}&]X&P&]X&R&]X&^UX&_UX&_&]X&nUX&vUX&v&]X&x!aX~O#p$^X~P(iO&PSO&R!qO~O&W!vO&Y!tO~Og^Oh^O!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yO%}TO&P!wO&RWOg!RXh!RX$h!RX&P!RX&R!RX~O#y!|O#z!{O$W!}Ov!RX!u!RX!z!RX&t!RX~P+QOW#XOu#OO%}TO&P#SO&R#SO&v&aX~OW#[Ou&[X%}&[X&P&[X&R&[X&v&[XY&[Xw&[X&n&[X&q&[XZ&[Xq&[X&^&[X!P&[X#_&[X#a&[X#b&[X#d&[X#e&[X#f&[X#g&[X#h&[X#i&[X#k&[X#o&[X#r&[X}&[X!r&[X#p&[Xs&[X|&[X~O&_#YO~P-dO&_&[X~P-dOZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yO#fpO#roO#tpO#upO%}TO&XUO~O&P#^O&R#]OY&pP~P/uO%}TOg%bXh%bXv%bX!S%bX!T%bX!U%bX!V%bX!W%bX!X%bX!Y%bX!Z%bX!]%bX!^%bX!_%bX!u%bX!z%bX$h%bX&P%bX&R%bX&t%bX&_%bX~O!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yOg!RXh!RXv!RX!u!RX!z!RX&P!RX&R!RX&t!RX&_!RX~O$h!RX~P3gO|#kO~P]Og^Oh^Ov#pO!u#rO!z#qO&P!wO&RWO&t#oO~O$h#sO~P5VOu#uO&v#vO!P&TX#_&TX#a&TX#b&TX#d&TX#e&TX#f&TX#g&TX#h&TX#i&TX#k&TX#o&TX#r&TX&^&TX&_&TX&n&TX~OW#tOY&TX#p&TXs&TXq&TX|&TX~P5xO!b#wO#]#wOW&UXu&UX!P&UX#_&UX#a&UX#b&UX#d&UX#e&UX#f&UX#g&UX#h&UX#i&UX#k&UX#o&UX#r&UX&^&UX&_&UX&n&UX&v&UXY&UX#p&UXs&UXq&UX|&UX~OZ#XX~P7jOZ#xO~O&v#vO~O#_#|O#a#}O#b$OO#d$QO#e$RO#f$SO#g$TO#h$UO#i$UO#k$YO#o$VO#r$WO&^#zO&_#zO&n#{O~O!P$XO~P9oO&x$ZO~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO#fpO#roO#tpO#upO%}TO&P0qO&R0pO&XUO~O#p$_O~O![$aO~O&P#SO&R#SO~Og^Oh^O&P!wO&RWO&_#YO~OW$gO&v#vO~O#z!{O~O!W$kO&PSO&R!qO~OZ$lO~OZ$oO~O!P$vO&P$uO&R$uO~O!P$xO&P$uO&R$uO~O!P${O~P:|OZ%OO}cO~OW&]Xu&]X%}&]X&P&]X&R&]X&_&]X~OZ!aX~P>lOWiXuiX%}iX&PiX&RiX&_iX~OZ!aX~P?XOu#OO%}TO&P#SO&R#SO~O%}TO~P3gOg^Oh^Ov#pO!u#rO!z#qO&_!hO&t#oO~O&P!cO&R!dO~P@ZOg^Oh^O%}TO&P!cO&R!dO~O}cO!P%aO~OZ%bO~O}%dO!m%gO~O}cOg&gXh&gXv&gX!S&gX!T&gX!U&gX!V&gX!W&gX!X&gX!Y&gX!Z&gX!]&gX!^&gX!_&gX!u&gX!z&gX%}&gX&P&gX&R&gX&_&gX&t&gX~OW%jOZ%kOgTahTa%}Ta&PTa&RTa~OvTa!STa!TTa!UTa!VTa!WTa!XTa!YTa!ZTa!]Ta!^Ta!_Ta!uTa!zTa#yTa#zTa$WTa$hTa&tTa&_TauTaYTaqTa|Ta!PTa~PC[O&W%nO&Y!tO~Ou#OO%}TOqma&^maYma&nma!Pma~O&vma}ma!rma~PEnO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!ZzO!]yO!^yO!_yO~Og!Rah!Rav!Ra!u!Ra!z!Ra$h!Ra&P!Ra&R!Ra&t!Ra&_!Ra~PFdO#z%pO~Os%rO~Ou%sO%}TO~Ou#OO%}ra&Pra&Rra&vraYrawra&nra&qra!Pra&^raqra~OWra#_ra#ara#bra#dra#era#fra#gra#hra#ira#kra#ora#rra&_ra#prasra|ra~PH_Ou#OO%}TOq&iX!P&iX!b&iX~OY&iX#p&iX~PJ`O!b%vOq!`X!P!`XY!`X~Oq%wO!P&hX~O!P%yO~Ov%zO~Og^Oh^O%}0oO&P!wO&RWO&b%}O~O&^&`P~PKmO%}TO&P!wO&RWO~OW&QXYiXY!aXY&QXZ&QXq!aXu&QXwiX!b&QX#]&QX#_&QX#a&QX#b&QX#d&QX#e&QX#f&QX#g&QX#h&QX#i&QX#k&QX#o&QX#r&QX&^&QX&_&QX&niX&n&QX&qiX&viX&v&QX&x!aX~P?XOWUXYUXY!aXY&]XZUXq!aXuUXw&]X!bUX#]UX#_UX#aUX#bUX#dUX#eUX#fUX#gUX#hUX#iUX#kUX#oUX#rUX&^UX&_UX&nUX&n&]X&q&]X&vUX&v&]X&x!aX~P>lOg^Oh^O%}TO&P!wO&RWOg!RXh!RX&P!RX&R!RX~PFdOu#OOw&XO%}TO&P&UO&R&TO&q&WO~OW#XOY&aX&n&aX&v&aX~P!#YOY&ZO~P9oOg^Oh^O&P!wO&RWO~Oq&]OY&pX~OY&_O~Og^Oh^O%}TO&P!wO&RWOY&pP~PFdOY&dO&n&bO&v#vO~Oq&eO&x$ZOY&wX~OY&gO~O%}TOg%bah%bav%ba!S%ba!T%ba!U%ba!V%ba!W%ba!X%ba!Y%ba!Z%ba!]%ba!^%ba!_%ba!u%ba!z%ba$h%ba&P%ba&R%ba&t%ba&_%ba~O|&hO~P]O}&iO~Op&uOw&vO&PSO&R!qO&_#YO~Oz&tO~P!'iOz&xO&PSO&R!qO&_#YO~OY&eP~P:|Og^Oh^O%}TO&P!wO&RWO~O}cO~P:|OW#XOu#OO%}TO&v&aX~O#r$WO!P#sa#_#sa#a#sa#b#sa#d#sa#e#sa#f#sa#g#sa#h#sa#i#sa#k#sa#o#sa&^#sa&_#sa&n#saY#sa#p#sas#saq#sa|#sa~Oo'_O}'^O!r'`O&_!hO~O}'eO!r'`O~Oo'iO}'hO&_!hO~OZ#xOu'mO%}TO~OW%jO}'sO~OW%jO!P'uO~OW'vO!P'wO~O$h!WO&P0qO&R0pO!P&eP~P/uO!P(SO#p(TO~P9oO}(UO~O$c(WO~O!P(XO~O!P(YO~O!P(ZO~P9oO!P(]O~P9oOZ$lO_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO%}TO&P(_O&R(^O&XUO~PFdO%Q(hO%U(iOZ$}a_$}a`$}aa$}ab$}ac$}ae$}ag$}ah$}ap$}av$}aw$}az$}a}$}a!P$}a!S$}a!T$}a!U$}a!V$}a!W$}a!X$}a!Y$}a!Z$}a![$}a!]$}a!^$}a!_$}a!u$}a!z$}a#f$}a#r$}a#t$}a#u$}a#y$}a#z$}a$W$}a$Y$}a$`$}a$c$}a$e$}a$h$}a$l$}a$n$}a$s$}a$u$}a$w$}a$y$}a$|$}a%O$}a%w$}a%}$}a&P$}a&R$}a&X$}a&t$}a|$}a$a$}a$q$}a~O}ra!rra'Ora~PH_OZ%bO~PJ`O!P(mO~O!m%gO}&la!P&la~O}cO!P(pO~Oo(tOq!fX&^!fX~Oq(vO&^&mX~O&^(xO~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op)UOv{Ow)TOz!OO|)PO}cO!PvO![!`O!u}O!z|O#fpO#roO#tpO#upO#y!RO#z!QO$W!SO$Y!TO$`!UO$c!VO$e!XO$h!WO$l!YO$n!ZO$s![O$u!]O$w!^O$y!_O$|!aO%O!bO%}TO&PRO&RQO&XUO&_#YO&tdO~PFdO}%dO~O})]OY&zP~P:|OW%jO!P)dO~Os)eO~Ou#OO%}TOq&ia!P&ia!b&iaY&ia#p&ia~O})fO~P:|Oq%wO!P&ha~Og^Oh^O%}0oO&P!wO&RWO~O&b)mO~P!8jOu#OO%}TOq&aX&^&aXY&aX&n&aX!P&aX~O}&aX!r&aX~P!9SOo)oOp)oOqnX&^nX~Oq)pO&^&`X~O&^)rO~Ou#OOw)tO%}TO&PSO&R!qO~OYma&nma&vma~P!:bOW&QXY!aXq!aXu!aX%}!aX~OWUXY!aXq!aXu!aX%}!aX~OW)wO~Ou#OO%}TO&P#SO&R#SO&q)yO~Og^Oh^O%}TO&P!wO&RWO~PFdOq&]OY&pa~Ou#OO%}TO&P#SO&R#SO&q&WO~OY)|O~OY*PO&n&bO~Oq&eOY&wa~Og^Oh^Ov{O|*XO!u}O%}TO&P!wO&RWO&tdO~PFdO!P*YO~OW^iZ#XXu^i!P^i!b^i#]^i#_^i#a^i#b^i#d^i#e^i#f^i#g^i#h^i#i^i#k^i#o^i#r^i&^^i&_^i&n^i&v^iY^i#p^is^iq^i|^i~OW*iO~Os*jO~P9oOz*kO&PSO&R!qO~O!P]iY]i#p]is]iq]i|]i~P9oOq*lOY&eX!P&eX~P9oOY*nO~O#f$SO#g$TO#k$YO#r$WO!P#^i#_#^i#a#^i#b#^i#d#^i#e#^i#o#^i&^#^i&_#^i&n#^iY#^i#p#^is#^iq#^i|#^i~O#h$UO#i$UO~P!AmO#_#|O#d$QO#e$RO#f$SO#g$TO#h$UO#i$UO#k$YO#r$WO&^#zO&_#zO&n#{O!P#^i#b#^i#o#^iY#^i#p#^is#^iq#^i|#^i~O#a#^i~P!CUO#a#}O~P!CUO#_#|O#f$SO#g$TO#h$UO#i$UO#k$YO#r$WO&^#zO&_#zO!P#^i#a#^i#b#^i#d#^i#e#^i#o#^iY#^i#p#^is#^iq#^i|#^i~O&n#^i~P!DtO&n#{O~P!DtO#f$SO#g$TO#k$YO#r$WO!P#^i#a#^i#b#^i#e#^i#o#^iY#^i#p#^is#^iq#^i|#^i~O#_#|O#d$QO#h$UO#i$UO&^#zO&_#zO&n#{O~P!FdO#k$YO#r$WO!P#^i#_#^i#a#^i#b#^i#d#^i#e#^i#f#^i#h#^i#i#^i#o#^i&^#^i&_#^i&n#^iY#^i#p#^is#^iq#^i|#^i~O#g$TO~P!G{O#g#^i~P!G{O#h#^i#i#^i~P!AmO#p*oO~P9oO#_&aX#a&aX#b&aX#d&aX#e&aX#f&aX#g&aX#h&aX#i&aX#k&aX#o&aX#r&aX&_&aX#p&aXs&aX|&aX~P!9SO!P#liY#li#p#lis#liq#li|#li~P9oO|*rO~P$wO}'^O~O}'^O!r'`O~Oo'_O}'^O!r'`O~O%}TO&P#SO&R#SO|&sP!P&sP~PFdO}'eO~Og^Oh^Ov{O|+PO!P*}O!u}O!z|O%}TO&P!wO&RWO&_!hO&tdO~PFdO}'hO~Oo'iO}'hO~Os+RO~P:|Ou+TO%}TO~Ou'mO})fO%}TOW#Zi!P#Zi#_#Zi#a#Zi#b#Zi#d#Zi#e#Zi#f#Zi#g#Zi#h#Zi#i#Zi#k#Zi#o#Zi#r#Zi&^#Zi&_#Zi&n#Zi&v#ZiY#Zi#p#Zis#Ziq#Zi|#Zi~O}'^OW&diu&di!P&di#_&di#a&di#b&di#d&di#e&di#f&di#g&di#h&di#i&di#k&di#o&di#r&di&^&di&_&di&n&di&v&diY&di#p&dis&diq&di|&di~O#}+]O$P+^O$R+^O$S+_O$T+`O~O|+[O~P##nO$Z+aO&PSO&R!qO~OW+bO!P+cO~O$a+dOZ$_i_$_i`$_ia$_ib$_ic$_ie$_ig$_ih$_ip$_iv$_iw$_iz$_i}$_i!P$_i!S$_i!T$_i!U$_i!V$_i!W$_i!X$_i!Y$_i!Z$_i![$_i!]$_i!^$_i!_$_i!u$_i!z$_i#f$_i#r$_i#t$_i#u$_i#y$_i#z$_i$W$_i$Y$_i$`$_i$c$_i$e$_i$h$_i$l$_i$n$_i$s$_i$u$_i$w$_i$y$_i$|$_i%O$_i%w$_i%}$_i&P$_i&R$_i&X$_i&t$_i|$_i$q$_i~Og^Oh^O$h#sO&P!wO&RWO~O!P+hO~P:|O!P+iO~OZ`O_VO`VOaVObVOcVOeVOg^Oh^Op!POv{OwkOz!OO}cO!PvO!SyO!TyO!UyO!VyO!WyO!XyO!YyO!Z+nO![!`O!]yO!^yO!_yO!u}O!z|O#fpO#roO#tpO#upO#y!RO#z!QO$W!SO$Y!TO$`!UO$c!VO$e!XO$h!WO$l!YO$n!ZO$q+oO$s![O$u!]O$w!^O$y!_O$|!aO%O!bO%}TO&PRO&RQO&XUO&tdO~O|+mO~P#)QOW&QXY&QXZ&QXu&QX!P&QX&viX&v&QX~P?XOWUXYUXZUXuUX!PUX&vUX&v&]X~P>lOW#tOu#uO&v#vO~OW&UXY%XXu&UX!P%XX&v&UX~OZ#XX~P#.VOY+uO!P+sO~O%Q(hO%U(iOZ$}i_$}i`$}ia$}ib$}ic$}ie$}ig$}ih$}ip$}iv$}iw$}iz$}i}$}i!P$}i!S$}i!T$}i!U$}i!V$}i!W$}i!X$}i!Y$}i!Z$}i![$}i!]$}i!^$}i!_$}i!u$}i!z$}i#f$}i#r$}i#t$}i#u$}i#y$}i#z$}i$W$}i$Y$}i$`$}i$c$}i$e$}i$h$}i$l$}i$n$}i$s$}i$u$}i$w$}i$y$}i$|$}i%O$}i%w$}i%}$}i&P$}i&R$}i&X$}i&t$}i|$}i$a$}i$q$}i~OZ+xO~O%Q(hO%U(iOZ%Vi_%Vi`%Via%Vib%Vic%Vie%Vig%Vih%Vip%Viv%Viw%Viz%Vi}%Vi!P%Vi!S%Vi!T%Vi!U%Vi!V%Vi!W%Vi!X%Vi!Y%Vi!Z%Vi![%Vi!]%Vi!^%Vi!_%Vi!u%Vi!z%Vi#f%Vi#r%Vi#t%Vi#u%Vi#y%Vi#z%Vi$W%Vi$Y%Vi$`%Vi$c%Vi$e%Vi$h%Vi$l%Vi$n%Vi$s%Vi$u%Vi$w%Vi$y%Vi$|%Vi%O%Vi%w%Vi%}%Vi&P%Vi&R%Vi&X%Vi&t%Vi|%Vi$a%Vi$q%Vi~Ou#OO%}TO}&oa!P&oa!m&oa~O!P,OO~Oo(tOq!fa&^!fa~Oq(vO&^&ma~O!m%gO}&li!P&li~O|,XO~P]OW,ZO~P5xOW&UXu&UX#_&UX#a&UX#b&UX#d&UX#e&UX#f&UX#g&UX#h&UX#i&UX#k&UX#o&UX#r&UX&^&UX&_&UX&n&UX&v&UX~OZ#xO!P&UX~P#8^OW$gOZ#xO&v#vO~Op,]Ow,]O~Oq,^O}&rX!P&rX~O!b,`O#]#wOY&UXZ#XX~P#8^OY&SXq&SX|&SX!P&SX~P9oO})]O|&yP~P:|OY&SXg%[Xh%[X%}%[X&P%[X&R%[Xq&SX|&SX!P&SX~Oq,cOY&zX~OY,eO~O})fO|&kP~P:|Oq&jX!P&jX|&jXY&jX~P9oO&bTa~PC[Oo)oOp)oOqna&^na~Oq)pO&^&`a~OW,mO~Ow,nO~Ou#OO%}TO&P,rO&R,qO~Og^Oh^Ov#pO!u#rO&P!wO&RWO&t#oO~Og^Oh^Ov{O|,wO!u}O%}TO&P!wO&RWO&tdO~PFdOw-SO&PSO&R!qO&_#YO~Oq*lOY&ea!P&ea~O#_ma#ama#bma#dma#ema#fma#gma#hma#ima#kma#oma#rma&_ma#pmasma|ma~PEnO|-WO~P$wOZ#xO}'^Oq!|X|!|X!P!|X~Oq-[O|&sX!P&sX~O|-_O!P-^O~O&_!hO~P5VOg^Oh^Ov{O|-cO!P*}O!u}O!z|O%}TO&P!wO&RWO&_!hO&tdO~PFdOs-dO~P9oOs-dO~P:|O}'^OW&dqu&dq!P&dq#_&dq#a&dq#b&dq#d&dq#e&dq#f&dq#g&dq#h&dq#i&dq#k&dq#o&dq#r&dq&^&dq&_&dq&n&dq&v&dqY&dq#p&dqs&dqq&dq|&dq~O|-hO~P##nO!W-lO$O-lO&PSO&R!qO~O!P-oO~O$Z-pO&PSO&R!qO~O!b%vO#p-rOq!`X!P!`X~O!P-tO~P9oO!P-tO~P:|O!P-wO~P9oO|-yO~P#)QO![$aO#p-zO~O!P-|O~O!b-}O~OY.QOZ$lO_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO%}TO&P(_O&R(^O&XUO~PFdOY.QO!P.RO~O%Q(hO%U(iOZ%Vq_%Vq`%Vqa%Vqb%Vqc%Vqe%Vqg%Vqh%Vqp%Vqv%Vqw%Vqz%Vq}%Vq!P%Vq!S%Vq!T%Vq!U%Vq!V%Vq!W%Vq!X%Vq!Y%Vq!Z%Vq![%Vq!]%Vq!^%Vq!_%Vq!u%Vq!z%Vq#f%Vq#r%Vq#t%Vq#u%Vq#y%Vq#z%Vq$W%Vq$Y%Vq$`%Vq$c%Vq$e%Vq$h%Vq$l%Vq$n%Vq$s%Vq$u%Vq$w%Vq$y%Vq$|%Vq%O%Vq%w%Vq%}%Vq&P%Vq&R%Vq&X%Vq&t%Vq|%Vq$a%Vq$q%Vq~Ou#OO%}TO}&oi!P&oi!m&oi~O&n&bOq!ga&^!ga~O!m%gO}&lq!P&lq~O|.^O~P]Op.`Ow&vOz&tO&PSO&R!qO&_#YO~O!P.aO~Oq,^O}&ra!P&ra~O})]O~P:|Oq.gO|&yX~O|.iO~Oq,cOY&za~Oq.mO|&kX~O|.oO~Ow.pO~Oq!aXu!aX!P!aX!b!aX%}!aX~OZ&QX~P#N{OZUX~P#N{O!P.qO~OZ.rO~OW^yZ#XXu^y!P^y!b^y#]^y#_^y#a^y#b^y#d^y#e^y#f^y#g^y#h^y#i^y#k^y#o^y#r^y&^^y&_^y&n^y&v^yY^y#p^ys^yq^y|^y~OY%`aq%`a!P%`a~P9oO!P#nyY#ny#p#nys#nyq#ny|#ny~P9oO}'^Oq!|a|!|a!P!|a~OZ#xO}'^Oq!|a|!|a!P!|a~O%}TO&P#SO&R#SOq%jX|%jX!P%jX~PFdOq-[O|&sa!P&sa~O|!}X~P$wO|/PO~Os/QO~P9oOW%jO!P/RO~OW%jO$Q/WO&PSO&R!qO!P&|P~OW%jO$U/XO~O!P/YO~O!b%vO#p/[Oq!`X!P!`X~OY/^O~O!P/_O~P9oO#p/`O~P9oO!b/bO~OY/cOZ$lO_VO`VOaVObVOcVOeVOg^Oh^Op!POwkOz!OO%}TO&P(_O&R(^O&XUO~PFdOW#[Ou&[X%}&[X&P&[X&R&[X'O&[X~O&_#YO~P$)QOu#OO%}TO'O/eO&P%SX&R%SX~O&n&bOq!gi&^!gi~Op/iO&PSO&R!qO~OW*iOZ#xO~O!P/kO~OY&SXq&SX~P9oO})]Oq%nX|%nX~P:|Oq.gO|&ya~O!b/nO~O})fOq%cX|%cX~P:|Oq.mO|&ka~OY/qO~O!P/rO~OZ/sO~O}'^Oq!|i|!|i!P!|i~O|!}a~P$wOW%jO!P/wO~OW%jOq/xO!P&|X~OY/|O~P9oOY0OO~OY%Xq!P%Xq~P9oO'O/eO&P%Sa&R%Sa~OY0TO~O!P0WO~Ou#OO!P0YO!Z0ZO%}TO~OY0[O~Oq/xO!P&|a~O!P0_O~OW%jOq/xO!P&}X~OY0aO~P9oOY0bO~OY%Xy!P%Xy~P9oOu#OO%}TO&P%ua&R%ua'O%ua~OY0cO~O!P0dO~Ou#OO!P0eO!Z0fO%}TO~OW%jOq%ra!P%ra~Oq/xO!P&}a~O!P0jO~Ou#OO!P0jO!Z0kO%}TO~O!P0lO~O!P0nO~O#p&QXY&QXs&QXq&QX|&QX~P&bO#pUXYUXsUXqUX|UX~P(iO`Q_P#g%y&P&Xc&X~\",goto:\"#+S'OPPPP'P'd*x.OP'dPP.d.h0PPPPPP1nP3ZPP4v7l:[<z=d?[PPP?bPA{PPPBu3ZPDqPPElPFcFkPPPPPPPPPPPPGvH_PKjKrLOLjLpLvNiNmNmNuP! U!!^!#R!#]P!#r!!^P!#x!$S!!y!$cP!%S!%^!%d!!^!%g!%mFcFc!%q!%{!&O3Z!'m3Z3Z!)iP.hP!)mPP!*_PPPPPP.hP.h!+O.hPP.hP.hPP.h!,g!,qPP!,w!-QPPPPPPPP'PP'PPP!-U!-U!-i!-UPP!-UP!-UP!.S!.VP!-U!.m!-UP!-UP!.p!.sP!-UP!-UP!-UP!-UP!-U!-UP!-UP!.wP!.}!/Q!/WP!-U!/d!/gP!/o!0R!4T!4Z!4a!5g!5m!5{!7R!7X!7_!7i!7o!7u!7{!8R!8X!8_!8e!8k!8q!8w!8}!9T!9_!9e!9o!9uPPP!9{!-U!:pP!>WP!?[P!Ap!BW!E]3ZPPP!F|!Jm!MaPP#!P#!SP#$`#$f#&V#&f#&n#'p#(Y#)T#)^#)a#)oP#)r#*OP#*V#*^P#*aP#*lP#*o#*r#*u#*y#+PstOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y'urOPXY`acopx!Y![!_!a!e!f!h!i!o!x#P#T#Y#[#_#`#e#i#l#n#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$]$_$e$l$m$n$o$p$q%O%S%V%Z%^%_%b%d%g%k%u%v%{%|&R&S&[&]&`&b&d&i'X'^'_'`'e'h'i'm'n'p'{'|(O(T(U(`(l(t(v({(})O)Q)R)])f)o)p*P*T*W*l*o*p*q*z*{+O+T+d+f+h+i+l+o+r+s+x+},W,Y,^,`,u-[-^-a-r-t-}.R.V.g.m/O/[/_/b/d/n/q0R0X0Z0[0f0h0k0r#xhO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kt!sT!Q!S!T!{!}$k%p+]+^+_+`-k-m/W/X/x0oQ#mdS&Y#`(}Q&l#oU&q#t$g,ZQ&x#vW(b%O+s.R/dU)Y%j'v+bQ)Z%kS)u&S,WU*f&s-R._Q*k&yQ,t*TQ-P*iQ.j,cR.t,uu!sT!Q!S!T!{!}$k%p+]+^+_+`-k-m/W/X/x0oT%l!r)l#{qO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0k#zlO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kX(c%O+s.R/d$TVO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0k$TkO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0k&O[OPX`ceopx!O!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s,Y,^,`-^-r-t-}.R.g.m/O/[/_/b/d/n0Z0f0k0rQ&Q#[Q)s&RV.T+x.X/e&O[OPX`ceopx!O!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s,Y,^,`-^-r-t-}.R.g.m/O/[/_/b/d/n0Z0f0k0rV.T+x.X/e&O]OPX`ceopx!O!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s,Y,^,`-^-r-t-}.R.g.m/O/[/_/b/d/n0Z0f0k0rV.U+x.X/eS#Z[.TS$f!O&tS&s#t$gQ&y#vQ)V%dQ-R*iR._,Z$kZO`copx!Y![!_!a#Y#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$_$l$m$n$o$p$q%O%d%g%k%v&b&d'_'`'i'm(O(T(U(t)Q)R)])f)o)p*P*l*o+T+d+h+i+l+o+s,Y,^,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kQ&O#YR,k)p&P_OPX`ceopx!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s+x,Y,^,`-^-r-t-}.R.X.g.m/O/[/_/b/d/e/n0Z0f0k0r!o#QY!e!x#R#T#`#n$]%R%S%V%^%u%|&S&[&`'X'|(`(l({(}*T*p*z+f+r+},W,u-a.V/q0R0X0[0h$SkO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kQ$m!UQ$n!VQ$s!ZQ$|!`R+p(WQ#yiS'q$e*hQ*e&rQ+X'rS,[)T)UQ-O*gQ-Y*vQ.b,]Q.x-QQ.{-ZQ/j.`Q/u.yR0V/iQ'a$bW*[&m'b'c'dQ+W'qU,x*]*^*_Q-X*vQ-f+XS.u,y,zS.z-Y-ZQ/t.vR/v.{]!mP!o'^*q-^/OreOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!gP!o'^*q-^/OW#b`#e%b&]Q'}$oW(d%O+s.R/dS*U&i*WS*w'e-[S*|'h+OR.X+xh#VY!W!e#n#s%V'|*T*z+f,u-aQ)j%wQ)v&WR,o)y#xnOcopx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0k^!kP!g!o'^*q-^/Ov#TY!W#`#n#s%w&W&[&`'|(`(})y*T+f+r,u.W/hQ#g`Q$b{Q$c|Q$d}W%S!e%V*z-aS%Y!h(vQ%`!iQ&m#pQ&n#qQ&o#rQ(u%ZS(y%^({Q*R&eS*v'e-[R-Z*wU)h%v)f.mR+V'p[!mP!o'^*q-^/OT*}'h+O^!iP!g!o'^*q-^/OQ'd$bQ'l$dQ*_&mQ*d&oV*{'h*|+OQ%[!hR,S(vQ(s%YR,R(u#znO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kQ%c!kS(l%S(yR(|%`T#e`%bU#c`#e%bR)z&]Q%f!lQ(n%UQ(r%XQ,U(zR.],VrvOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!mP!o'^*q-^/OQ%P!bQ%a!jQ%i!pQ'[$ZQ([$|Q(k%QQ(p%WQ+z(iR.Y+yrtOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!mP!o'^*q-^/OS*V&i*WT*}'h+OQ'c$bS*^&m'dR,z*_Q'b$bQ'g$cU*]&m'c'dQ*a&nS,y*^*_R.v,zQ*u'`R+Q'iQ'k$dS*c&o'lR,}*dQ'j$dU*b&o'k'lS,|*c*dR.w,}rtOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!mP!o'^*q-^/OT*}'h+OQ'f$cS*`&n'gR,{*aQ*x'eR.|-[R-`*yQ&j#mR*Z&lT*V&i*WQ%e!lS(q%X%fR,P(rR)R%dWk%O+s.R/d#{lO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0k$SiO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kU&r#t$g,ZS*g&s._Q-Q*iR.y-RT'o$e'p!_#|m#a$r$z$}&w&z&{'O'P'Q'R'S'W'Z)[)g+S+g+j-T-V-e-v-{.e/Z/a/}0Q!]$Pm#a$r$z$}&w&z&{'O'P'R'S'W'Z)[)g+S+g+j-T-V-e-v-{.e/Z/a/}0Q#{nO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0ka)^%k)],`.g/n0Z0f0kQ)`%kR.k,cQ't$hQ)b%oR,f)cT+Y's+ZsvOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YruOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YQ$w!]R$y!^R$p!XrvOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YR(O$oR$q!XR(V$sT+k(U+lX(f%P(g(k+{R+y(hQ.W+xR/h.XQ(j%PQ+w(gQ+|(kR.Z+{R%Q!bQ(e%OV.P+s.R/dQxOQ#lcW$`x#l)Q,YQ)Q%dR,Y)RrXOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Yn!fP!o#e&]&i'^'e'h*W*q+O+x-[-^/Ol!zX!f#P#_#i$[%Z%_%{&R'n'{)O0r!j#PY!e!x#T#`#n$]%S%V%^%u%|&S&[&`'X'|(`(l({(}*T*p*z+f+r+},W,u-a.V/q0R0X0[0hQ#_`Q#ia#d$[op!Y!_!a#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$l%g%k%v&b&d'_'`'i'm(O(T(t)])f)o*P*l*o+T+h+i+o,^,`-r-t-}.g.m/[/_/b/n0Z0f0kS%Z!h(vS%_!i*{S%{#Y)pQ&R#[S'n$e'pY'{$o%O+s.R/dQ)O%bR0r$YQ!uUR%m!uQ)q&OR,l)q^#RY#`$]'X'|(`*px%R!e!x#n%V%^%|&S&[&`({(}*T*z+f+r,W,u-a.V0R[%t#R%R%u+}0X0hS%u#T%SQ+}(lQ0X/qR0h0[Q*m&{R-U*mQ!oPU%h!o*q/OQ*q'^R/O-^!pbOP`cx![!o#e#l$_$m$n$o$p$q%O%b%d&]&i'^'e'h(U)Q)R*W*q+O+d+l+s+x,Y-[-^.R/O/dY!yX!f#_'{)OT#jb!yQ.n,gR/p.nQ%x#VR)k%xQ&c#fS*O&c.[R.[,QQ(w%[R,T(wQ&^#cR){&^Q,_)WR.d,_Q+O'hR-b+OQ-]*xR.}-]Q*W&iR,v*WQ'p$eR+U'pQ&f#gR*S&fQ.h,aR/m.hQ,d)`R.l,dQ+Z'sR-g+ZQ-k+]R/T-kQ/y/US0^/y0`R0`/{Q+l(UR-x+lQ(g%PS+v(g+{R+{(kQ/f.VR0S/fQ+t(eR.S+t`wOcx#l%d)Q)R,YQ$t![Q']$_Q'y$mQ'z$nQ(Q$pQ(R$qS+k(U+lR-q+d'dsOPXY`acopx!Y![!_!a!e!f!h!i!o!x#P#T#Y#[#_#`#e#i#l#n#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$]$_$e$l$m$n$o$p$q%O%S%V%Z%^%_%b%d%g%u%v%{%|&R&S&[&]&`&b&d&i'X'^'_'`'e'h'i'm'n'p'{'|(O(T(U(`(l(t(v({(})O)Q)R)f)o)p*P*T*W*l*o*p*q*z*{+O+T+d+f+h+i+l+o+r+s+x+},W,Y,^,u-[-^-a-r-t-}.R.V.m/O/[/_/b/d/q0R0X0[0h0ra)_%k)],`.g/n0Z0f0kQ!rTQ$h!QQ$i!SQ$j!TQ%o!{Q%q!}Q'x$kQ)c%pQ)l0oS-i+]+_Q-m+^Q-n+`Q/S-kS/U-m/WQ/{/XR0]/x%uSOT`cdopx!Q!S!T!Y![!_!a!{!}#`#l#o#t#u#v#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$g$k$l$m$n$o$p$q%O%d%j%k%p%v&S&d&s&y'm'v(O(T(U(})Q)R)])f*P*T*i*l*o+T+]+^+_+`+b+d+h+i+l+o+s,W,Y,Z,`,c,u-R-k-m-r-t-}.R._.g.m/W/X/[/_/b/d/n/x0Z0f0k0oQ)a%kQ,a)]S.f,`/nQ/l.gQ0g0ZQ0i0fR0m0krmOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,YS#a`$lQ$WoQ$^pQ$r!YQ$z!_Q$}!aQ&w#uQ&z#wY&{#x$o+h-t/_Q&}#|Q'O#}Q'P$OQ'Q$PQ'R$QQ'S$RQ'T$SQ'U$TQ'V$UQ'W$VQ'Z$Z^)[%k)].g/n0Z0f0kU)g%v)f.mQ*Q&dQ+S'mQ+g(OQ+j(TQ,p*PQ-T*lQ-V*oQ-e+TQ-v+iQ-{+oQ.e,`Q/Z-rQ/a-}Q/}/[R0Q/b#xgO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o,Y,`-r-t-}.g.m/[/_/b/n0Z0f0kW(a%O+s.R/dR)S%drYOcx![#l$_$m$n$p$q%d(U)Q)R+d+l,Y[!eP!o'^*q-^/OW!xX$[%{'{Q#``Q#ne#S$]op!Y!_!a#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$l%k%v&d'm(O(T)])f*P*l*o+T+h+i+o,`-r-t-}.g.m/[/_/b/n0Z0f0kQ%V!gS%^!i*{d%|#Y%g&b'_'`'i(t)o)p,^Q&S#_Q&[#bS&`#e&]Q'X$YQ'|$oW(`%O+s.R/dQ({%_Q(}%bS*T&i*WQ*p0rS*z'h+OQ+f'}Q+r(dQ,W)OQ,u*UQ-a*|S.V+x.XR0R/e&O_OPX`ceopx!Y![!_!a!g!i!o#Y#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$l$m$n$o$p$q%O%_%b%d%g%k%v%{&]&b&d&i'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s+x,Y,^,`-^-r-t-}.R.X.g.m/O/[/_/b/d/e/n0Z0f0k0rQ$e!OQ'r$fR*h&t&ZWOPX`ceopx!O!Y![!_!a!g!i!o#Y#[#_#b#e#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Y$Z$[$_$f$l$m$n$o$p$q%O%_%b%d%g%k%v%{&R&]&b&d&i&t'^'_'`'h'i'm'{'}(O(T(U(d(t)O)Q)R)])f)o)p*P*U*W*l*o*q*{*|+O+T+d+h+i+l+o+s+x,Y,^,`-^-r-t-}.R.X.g.m/O/[/_/b/d/e/n0Z0f0k0rR&P#Y$QjOcopx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kQ#f`Q&O#YQ'Y$YU)W%g'`'iQ)}&bQ*s'_Q,Q(tQ,j)oQ,k)pR.c,^Q)n%}R,i)m$SfO`copx!Y![!_!a#l#u#w#x#|#}$O$P$Q$R$S$T$U$V$Z$_$l$m$n$o$p$q%O%d%k%v&d'm(O(T(U)Q)R)])f*P*l*o+T+d+h+i+l+o+s,Y,`-r-t-}.R.g.m/[/_/b/d/n0Z0f0kT&p#t,ZQ&|#xQ(P$oQ-u+hQ/]-tR0P/_]!nP!o'^*q-^/O#PaOPX`bcx![!f!o!y#_#e#l$_$m$n$o$p$q%O%b%d&]&i'^'e'h'{(U)O)Q)R*W*q+O+d+l+s+x,Y-[-^.R/O/dU#WY!W'|Q%T!eU&k#n#s+fQ(o%VS,s*T*zT.s,u-aj#UY!W!e#n#s%V%w&W)y*T*z,u-aU&V#`&`(}Q)x&[Q+e'|Q+q(`Q-s+fQ.O+rQ/g.WR0U/hQ)i%vQ,g)fR/o.mR,h)f`!jP!o'^'h*q+O-^/OT%W!g*|R%]!hW%U!e%V*z-aQ(z%^R,V({S#d`%bR&a#eQ)X%gT*t'`'iR*y'e[!lP!o'^*q-^/OR%X!gR#h`R,b)]R)a%kT-j+]-kQ/V-mR/z/WR/z/X\",nodeNames:\"\\u26A0 LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList AssignmentExpression FieldAccess IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral TextBlock null ClassLiteral void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType ] Dimension [ class this ParenthesizedExpression ObjectCreationExpression new ArgumentList } { ClassBody ; FieldDeclaration Modifiers public protected private abstract static final strictfp default synchronized native transient volatile VariableDeclarator Definition AssignOp ArrayInitializer MethodDeclaration TypeParameters TypeParameter TypeBound FormalParameters ReceiverParameter FormalParameter SpreadParameter Throws throws Block ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension AssignOp BinaryExpression CompareOp CompareOp LogicOp LogicOp BitOp BitOp BitOp ArithOp ArithOp ArithOp BitOp InstanceofExpression instanceof LambdaExpression InferredParameters TernaryExpression LogicOp : UpdateExpression UpdateOp UnaryExpression LogicOp BitOp CastExpression ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration var EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchLabel case DoStatement do BreakStatement break ContinueStatement continue ReturnStatement return SynchronizedStatement ThrowStatement throw TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource ClassContent\",maxTerm:276,nodeProps:[[\"isolate\",-4,1,2,18,19,\"\"],[\"group\",-26,4,47,76,77,82,87,92,145,147,150,151,153,156,158,161,163,165,167,172,174,176,178,180,181,183,191,\"Statement\",-25,6,13,14,15,16,17,18,19,20,21,22,39,40,41,99,100,102,103,106,118,120,122,125,127,130,\"Expression\",-7,23,24,25,26,27,29,34,\"Type\"],[\"openedBy\",10,\"(\",44,\"{\"],[\"closedBy\",11,\")\",45,\"}\"]],propSources:[Wx],skippedNodes:[0,1,2],repeatNodeCount:28,tokenData:\"#'f_R!_OX%QXY'fYZ)bZ^'f^p%Qpq'fqr*|rs,^st%Qtu4euv5zvw7[wx8rxyAZyzAwz{Be{|CZ|}Dq}!OE_!O!PFx!P!Q! r!Q!R!,h!R![!0`![!]!>p!]!^!@Q!^!_!@n!_!`!BX!`!a!B{!a!b!Di!b!c!EX!c!}!LT!}#O!Mj#O#P%Q#P#Q!NW#Q#R!Nt#R#S4e#S#T%Q#T#o4e#o#p# h#p#q#!U#q#r##n#r#s#$[#s#y%Q#y#z'f#z$f%Q$f$g'f$g#BY4e#BY#BZ#$x#BZ$IS4e$IS$I_#$x$I_$I|4e$I|$JO#$x$JO$JT4e$JT$JU#$x$JU$KV4e$KV$KW#$x$KW&FU4e&FU&FV#$x&FV;'S4e;'S;=`5t<%lO4eS%VV&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS%qO&YSS%tVOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZS&^VOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QS&vP;=`<%l%QS&|UOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZS'cP;=`<%l&Z_'mk&YS%yZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qs#y%Q#y#z'f#z$f%Q$f$g'f$g#BY%Q#BY#BZ'f#BZ$IS%Q$IS$I_'f$I_$I|%Q$I|$JO'f$JO$JT%Q$JT$JU'f$JU$KV%Q$KV$KW'f$KW&FU%Q&FU&FV'f&FV;'S%Q;'S;=`&s<%lO%Q_)iY&YS%yZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XZ*^Y%yZX^*Xpq*X#y#z*X$f$g*X#BY#BZ*X$IS$I_*X$I|$JO*X$JT$JU*X$KV$KW*X&FU&FV*XV+TX#tP&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QU+wV#_Q&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT,aXOY,|YZ%lZr,|rs3Ys#O,|#O#P2d#P;'S,|;'S;=`3S<%lO,|T-PXOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`2|<%lO-lT-qX&YSOY-lYZ%lZr-lrs.^s#O-l#O#P.x#P;'S-l;'S;=`2|<%lO-lT.cVcPOY&ZYZ%lZr&Zrs&ys;'S&Z;'S;=`'`<%lO&ZT.}V&YSOY-lYZ/dZr-lrs1]s;'S-l;'S;=`2|<%lO-lT/iW&YSOY0RZr0Rrs0ns#O0R#O#P0s#P;'S0R;'S;=`1V<%lO0RP0UWOY0RZr0Rrs0ns#O0R#O#P0s#P;'S0R;'S;=`1V<%lO0RP0sOcPP0vTOY0RYZ0RZ;'S0R;'S;=`1V<%lO0RP1YP;=`<%l0RT1`XOY,|YZ%lZr,|rs1{s#O,|#O#P2d#P;'S,|;'S;=`3S<%lO,|T2QUcPOY&ZYZ%lZr&Zs;'S&Z;'S;=`'`<%lO&ZT2gVOY-lYZ/dZr-lrs1]s;'S-l;'S;=`2|<%lO-lT3PP;=`<%l-lT3VP;=`<%l,|T3_VcPOY&ZYZ%lZr&Zrs3ts;'S&Z;'S;=`'`<%lO&ZT3yR&WSXY4SYZ4`pq4SP4VRXY4SYZ4`pq4SP4eO&XP_4lb&YS&PZOY%QYZ%lZr%Qrs%qst%Qtu4eu!Q%Q!Q![4e![!c%Q!c!}4e!}#R%Q#R#S4e#S#T%Q#T#o4e#o$g%Q$g;'S4e;'S;=`5t<%lO4e_5wP;=`<%l4eU6RX#hQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QU6uV#]Q&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV7cZ&nR&YSOY%QYZ%lZr%Qrs%qsv%Qvw8Uw!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QU8]V#aQ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT8wZ&YSOY9jYZ%lZr9jrs:xsw9jwx%Qx#O9j#O#P<S#P;'S9j;'S;=`AT<%lO9jT9oX&YSOY%QYZ%lZr%Qrs%qsw%Qwx:[x;'S%Q;'S;=`&s<%lO%QT:cVbP&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT:{XOY&ZYZ%lZr&Zrs&ysw&Zwx;hx;'S&Z;'S;=`'`<%lO&ZT;mVbPOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT<XZ&YSOY<zYZ%lZr<zrs=rsw<zwx9jx#O<z#O#P9j#P;'S<z;'S;=`?^<%lO<zT=PZ&YSOY<zYZ%lZr<zrs=rsw<zwx:[x#O<z#O#P%Q#P;'S<z;'S;=`?^<%lO<zT=uZOY>hYZ%lZr>hrs?dsw>hwx;hx#O>h#O#P&Z#P;'S>h;'S;=`@}<%lO>hT>kZOY<zYZ%lZr<zrs=rsw<zwx:[x#O<z#O#P%Q#P;'S<z;'S;=`?^<%lO<zT?aP;=`<%l<zT?gZOY>hYZ%lZr>hrs@Ysw>hwx;hx#O>h#O#P&Z#P;'S>h;'S;=`@}<%lO>hP@]VOY@YZw@Ywx@rx#O@Y#P;'S@Y;'S;=`@w<%lO@YP@wObPP@zP;=`<%l@YTAQP;=`<%l>hTAWP;=`<%l9j_AbVZZ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVBOVYR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVBnX$ZP&YS#gQOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QVCbZ#fR&YSOY%QYZ%lZr%Qrs%qs{%Q{|DT|!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QVD[V#rR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVDxVqR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QVEf[#fR&YSOY%QYZ%lZr%Qrs%qs}%Q}!ODT!O!_%Q!_!`6n!`!aF[!a;'S%Q;'S;=`&s<%lO%QVFcV&xR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_GPZWY&YSOY%QYZ%lZr%Qrs%qs!O%Q!O!PGr!P!Q%Q!Q![IQ![;'S%Q;'S;=`&s<%lO%QVGwX&YSOY%QYZ%lZr%Qrs%qs!O%Q!O!PHd!P;'S%Q;'S;=`&s<%lO%QVHkV&qR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTIXc&YS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![IQ![!f%Q!f!gJd!g!hKQ!h!iJd!i#R%Q#R#SNz#S#W%Q#W#XJd#X#YKQ#Y#ZJd#Z;'S%Q;'S;=`&s<%lO%QTJkV&YS`POY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QTKV]&YSOY%QYZ%lZr%Qrs%qs{%Q{|LO|}%Q}!OLO!O!Q%Q!Q![Lp![;'S%Q;'S;=`&s<%lO%QTLTX&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Lp![;'S%Q;'S;=`&s<%lO%QTLwc&YS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![Lp![!f%Q!f!gJd!g!h%Q!h!iJd!i#R%Q#R#SNS#S#W%Q#W#XJd#X#Y%Q#Y#ZJd#Z;'S%Q;'S;=`&s<%lO%QTNXZ&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![Lp![#R%Q#R#SNS#S;'S%Q;'S;=`&s<%lO%QT! PZ&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![IQ![#R%Q#R#SNz#S;'S%Q;'S;=`&s<%lO%Q_! y]&YS#gQOY%QYZ%lZr%Qrs%qsz%Qz{!!r{!P%Q!P!Q!)e!Q!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%Q_!!wX&YSOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{;'S!!r;'S;=`!'s<%lO!!r_!#iT&YSOz!#xz{!$[{;'S!#x;'S;=`!$y<%lO!#xZ!#{TOz!#xz{!$[{;'S!#x;'S;=`!$y<%lO!#xZ!$_VOz!#xz{!$[{!P!#x!P!Q!$t!Q;'S!#x;'S;=`!$y<%lO!#xZ!$yOQZZ!$|P;=`<%l!#x_!%SXOY!%oYZ!#dZr!%ors!'ysz!%oz{!(i{;'S!%o;'S;=`!)_<%lO!%o_!%rXOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{;'S!!r;'S;=`!'s<%lO!!r_!&dZ&YSOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{!P!!r!P!Q!'V!Q;'S!!r;'S;=`!'s<%lO!!r_!'^V&YSQZOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!'vP;=`<%l!!r_!'|XOY!%oYZ!#dZr!%ors!#xsz!%oz{!(i{;'S!%o;'S;=`!)_<%lO!%o_!(lZOY!!rYZ!#dZr!!rrs!%Psz!!rz{!&_{!P!!r!P!Q!'V!Q;'S!!r;'S;=`!'s<%lO!!r_!)bP;=`<%l!%o_!)lV&YSPZOY!)eYZ%lZr!)ers!*Rs;'S!)e;'S;=`!+X<%lO!)e_!*WVPZOY!*mYZ%lZr!*mrs!+_s;'S!*m;'S;=`!,b<%lO!*m_!*rVPZOY!)eYZ%lZr!)ers!*Rs;'S!)e;'S;=`!+X<%lO!)e_!+[P;=`<%l!)e_!+dVPZOY!*mYZ%lZr!*mrs!+ys;'S!*m;'S;=`!,b<%lO!*mZ!,OSPZOY!+yZ;'S!+y;'S;=`!,[<%lO!+yZ!,_P;=`<%l!+y_!,eP;=`<%l!*mT!,ou&YS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!/S!P!Q%Q!Q![!0`![!d%Q!d!e!3j!e!f%Q!f!gJd!g!hKQ!h!iJd!i!n%Q!n!o!2U!o!q%Q!q!r!5h!r!z%Q!z!{!7`!{#R%Q#R#S!2r#S#U%Q#U#V!3j#V#W%Q#W#XJd#X#YKQ#Y#ZJd#Z#`%Q#`#a!2U#a#c%Q#c#d!5h#d#l%Q#l#m!7`#m;'S%Q;'S;=`&s<%lO%QT!/Za&YS`POY%QYZ%lZr%Qrs%qs!Q%Q!Q![IQ![!f%Q!f!gJd!g!hKQ!h!iJd!i#W%Q#W#XJd#X#YKQ#Y#ZJd#Z;'S%Q;'S;=`&s<%lO%QT!0gi&YS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!/S!P!Q%Q!Q![!0`![!f%Q!f!gJd!g!hKQ!h!iJd!i!n%Q!n!o!2U!o#R%Q#R#S!2r#S#W%Q#W#XJd#X#YKQ#Y#ZJd#Z#`%Q#`#a!2U#a;'S%Q;'S;=`&s<%lO%QT!2]V&YS_POY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT!2wZ&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!0`![#R%Q#R#S!2r#S;'S%Q;'S;=`&s<%lO%QT!3oY&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!4_!R!S!4_!S;'S%Q;'S;=`&s<%lO%QT!4f`&YS_POY%QYZ%lZr%Qrs%qs!Q%Q!Q!R!4_!R!S!4_!S!n%Q!n!o!2U!o#R%Q#R#S!3j#S#`%Q#`#a!2U#a;'S%Q;'S;=`&s<%lO%QT!5mX&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q!Y!6Y!Y;'S%Q;'S;=`&s<%lO%QT!6a_&YS_POY%QYZ%lZr%Qrs%qs!Q%Q!Q!Y!6Y!Y!n%Q!n!o!2U!o#R%Q#R#S!5h#S#`%Q#`#a!2U#a;'S%Q;'S;=`&s<%lO%QT!7e_&YSOY%QYZ%lZr%Qrs%qs!O%Q!O!P!8d!P!Q%Q!Q![!:r![!c%Q!c!i!:r!i#T%Q#T#Z!:r#Z;'S%Q;'S;=`&s<%lO%QT!8i]&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9b![!c%Q!c!i!9b!i#T%Q#T#Z!9b#Z;'S%Q;'S;=`&s<%lO%QT!9gc&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9b![!c%Q!c!i!9b!i!r%Q!r!sKQ!s#R%Q#R#S!8d#S#T%Q#T#Z!9b#Z#d%Q#d#eKQ#e;'S%Q;'S;=`&s<%lO%QT!:yi&YS_POY%QYZ%lZr%Qrs%qs!O%Q!O!P!<h!P!Q%Q!Q![!:r![!c%Q!c!i!:r!i!n%Q!n!o!2U!o!r%Q!r!sKQ!s#R%Q#R#S!=r#S#T%Q#T#Z!:r#Z#`%Q#`#a!2U#a#d%Q#d#eKQ#e;'S%Q;'S;=`&s<%lO%QT!<ma&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!9b![!c%Q!c!i!9b!i!r%Q!r!sKQ!s#T%Q#T#Z!9b#Z#d%Q#d#eKQ#e;'S%Q;'S;=`&s<%lO%QT!=w]&YSOY%QYZ%lZr%Qrs%qs!Q%Q!Q![!:r![!c%Q!c!i!:r!i#T%Q#T#Z!:r#Z;'S%Q;'S;=`&s<%lO%QV!>wX#pR&YSOY%QYZ%lZr%Qrs%qs![%Q![!]!?d!];'S%Q;'S;=`&s<%lO%QV!?kV&vR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!@XV!PR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!@uY&_Z&YSOY%QYZ%lZr%Qrs%qs!^%Q!^!_!Ae!_!`+p!`;'S%Q;'S;=`&s<%lO%QU!AlX#iQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QV!B`X!bR&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`;'S%Q;'S;=`&s<%lO%QV!CSY&^R&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`+p!`!a!Cr!a;'S%Q;'S;=`&s<%lO%QU!CyY#iQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`!a!Ae!a;'S%Q;'S;=`&s<%lO%Q_!DrV&bX#oQ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!E`X%}Z&YSOY%QYZ%lZr%Qrs%qs#]%Q#]#^!E{#^;'S%Q;'S;=`&s<%lO%QV!FQX&YSOY%QYZ%lZr%Qrs%qs#b%Q#b#c!Fm#c;'S%Q;'S;=`&s<%lO%QV!FrX&YSOY%QYZ%lZr%Qrs%qs#h%Q#h#i!G_#i;'S%Q;'S;=`&s<%lO%QV!GdX&YSOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!HP#Y;'S%Q;'S;=`&s<%lO%QV!HUX&YSOY%QYZ%lZr%Qrs%qs#f%Q#f#g!Hq#g;'S%Q;'S;=`&s<%lO%QV!HvX&YSOY%QYZ%lZr%Qrs%qs#Y%Q#Y#Z!Ic#Z;'S%Q;'S;=`&s<%lO%QV!IhX&YSOY%QYZ%lZr%Qrs%qs#T%Q#T#U!JT#U;'S%Q;'S;=`&s<%lO%QV!JYX&YSOY%QYZ%lZr%Qrs%qs#V%Q#V#W!Ju#W;'S%Q;'S;=`&s<%lO%QV!JzX&YSOY%QYZ%lZr%Qrs%qs#X%Q#X#Y!Kg#Y;'S%Q;'S;=`&s<%lO%QV!KnV&tR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_!L[b&RZ&YSOY%QYZ%lZr%Qrs%qst%Qtu!LTu!Q%Q!Q![!LT![!c%Q!c!}!LT!}#R%Q#R#S!LT#S#T%Q#T#o!LT#o$g%Q$g;'S!LT;'S;=`!Md<%lO!LT_!MgP;=`<%l!LT_!MqVuZ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV!N_VsR&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QU!N{X#eQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`;'S%Q;'S;=`&s<%lO%QV# oV}R&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#!_Z'OX#dQ&YSOY%QYZ%lZr%Qrs%qs!_%Q!_!`6n!`#p%Q#p#q##Q#q;'S%Q;'S;=`&s<%lO%QU##XV#bQ&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QV##uV|R&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%QT#$cV#uP&YSOY%QYZ%lZr%Qrs%qs;'S%Q;'S;=`&s<%lO%Q_#%Ru&YS%yZ&PZOX%QXY'fYZ)bZ^'f^p%Qpq'fqr%Qrs%qst%Qtu4eu!Q%Q!Q![4e![!c%Q!c!}4e!}#R%Q#R#S4e#S#T%Q#T#o4e#o#y%Q#y#z'f#z$f%Q$f$g'f$g#BY4e#BY#BZ#$x#BZ$IS4e$IS$I_#$x$I_$I|4e$I|$JO#$x$JO$JT4e$JT$JU#$x$JU$KV4e$KV$KW#$x$KW&FU4e&FU&FV#$x&FV;'S4e;'S;=`5t<%lO4e\",tokenizers:[0,1,2,3],topRules:{Program:[0,3],ClassContent:[1,194]},dynamicPrecedences:{27:1,232:-1,243:-1},specialized:[{term:231,get:O=>jx[O]||-1}],tokenPrec:7144});var Cx=ne.define({name:\"java\",parser:wp.configure({props:[se.add({IfStatement:le({except:/^\\s*({|else\\b)/}),TryStatement:le({except:/^\\s*({|catch|finally)\\b/}),LabeledStatement:sO,SwitchBlock:O=>{let e=O.textAfter,t=/^\\s*\\}/.test(e),i=/^\\s*(case|default)\\b/.test(e);return O.baseIndent+(t?0:i?1:2)*O.unit},Block:be({closing:\"}\"}),BlockComment:()=>null,Statement:le({except:/^{/})}),te.add({\"Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer\":me,BlockComment(O){return{from:O.from+2,to:O.to-2}}})]}),languageData:{commentTokens:{line:\"//\",block:{open:\"/*\",close:\"*/\"}},indentOnInput:/^\\s*(?:case |default:|\\{|\\})$/}});function Zp(){return new J(Cx)}var Gx=F({String:d.string,Number:d.number,\"True False\":d.bool,PropertyName:d.propertyName,Null:d.null,\", :\":d.separator,\"[ ]\":d.squareBracket,\"{ }\":d.brace}),vp=Oe.deserialize({version:14,states:\"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l\",stateData:\"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O\",goto:\"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R\",nodeNames:\"\\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array\",maxTerm:25,nodeProps:[[\"isolate\",-2,6,11,\"\"],[\"openedBy\",7,\"{\",14,\"[\"],[\"closedBy\",8,\"}\",15,\"]\"]],propSources:[Gx],skippedNodes:[0],repeatNodeCount:2,tokenData:\"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~\",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var Ex=ne.define({name:\"json\",parser:vp.configure({props:[se.add({Object:le({except:/^\\s*\\}/}),Array:le({except:/^\\s*\\]/})}),te.add({\"Object Array\":me})]}),languageData:{closeBrackets:{brackets:[\"[\",\"{\",'\"']},indentOnInput:/^\\s*[\\}\\]]$/}});function Yp(){return new J(Ex)}var Ys=class O{static create(e,t,i,r,n){let s=r+(r<<8)+e+(t<<4)|0;return new O(e,t,i,s,n,[],[])}constructor(e,t,i,r,n,s,a){this.type=e,this.value=t,this.from=i,this.hash=r,this.end=n,this.children=s,this.positions=a,this.hashProp=[[R.contextHash,r]]}addChild(e,t){e.prop(R.contextHash)!=this.hash&&(e=new D(e.type,e.children,e.positions,e.length,this.hashProp)),this.children.push(e),this.positions.push(t)}toTree(e,t=this.end){let i=this.children.length-1;return i>=0&&(t=Math.max(t,this.positions[i]+this.children[i].length+this.from)),new D(e.types[this.type],this.children,this.positions,t-this.from).balance({makeTree:(r,n,s)=>new D(ue.none,r,n,s,this.hashProp)})}},b;(function(O){O[O.Document=1]=\"Document\",O[O.CodeBlock=2]=\"CodeBlock\",O[O.FencedCode=3]=\"FencedCode\",O[O.Blockquote=4]=\"Blockquote\",O[O.HorizontalRule=5]=\"HorizontalRule\",O[O.BulletList=6]=\"BulletList\",O[O.OrderedList=7]=\"OrderedList\",O[O.ListItem=8]=\"ListItem\",O[O.ATXHeading1=9]=\"ATXHeading1\",O[O.ATXHeading2=10]=\"ATXHeading2\",O[O.ATXHeading3=11]=\"ATXHeading3\",O[O.ATXHeading4=12]=\"ATXHeading4\",O[O.ATXHeading5=13]=\"ATXHeading5\",O[O.ATXHeading6=14]=\"ATXHeading6\",O[O.SetextHeading1=15]=\"SetextHeading1\",O[O.SetextHeading2=16]=\"SetextHeading2\",O[O.HTMLBlock=17]=\"HTMLBlock\",O[O.LinkReference=18]=\"LinkReference\",O[O.Paragraph=19]=\"Paragraph\",O[O.CommentBlock=20]=\"CommentBlock\",O[O.ProcessingInstructionBlock=21]=\"ProcessingInstructionBlock\",O[O.Escape=22]=\"Escape\",O[O.Entity=23]=\"Entity\",O[O.HardBreak=24]=\"HardBreak\",O[O.Emphasis=25]=\"Emphasis\",O[O.StrongEmphasis=26]=\"StrongEmphasis\",O[O.Link=27]=\"Link\",O[O.Image=28]=\"Image\",O[O.InlineCode=29]=\"InlineCode\",O[O.HTMLTag=30]=\"HTMLTag\",O[O.Comment=31]=\"Comment\",O[O.ProcessingInstruction=32]=\"ProcessingInstruction\",O[O.Autolink=33]=\"Autolink\",O[O.HeaderMark=34]=\"HeaderMark\",O[O.QuoteMark=35]=\"QuoteMark\",O[O.ListMark=36]=\"ListMark\",O[O.LinkMark=37]=\"LinkMark\",O[O.EmphasisMark=38]=\"EmphasisMark\",O[O.CodeMark=39]=\"CodeMark\",O[O.CodeText=40]=\"CodeText\",O[O.CodeInfo=41]=\"CodeInfo\",O[O.LinkTitle=42]=\"LinkTitle\",O[O.LinkLabel=43]=\"LinkLabel\",O[O.URL=44]=\"URL\"})(b||(b={}));var Pc=class{constructor(e,t){this.start=e,this.content=t,this.marks=[],this.parsers=[]}},Sc=class{constructor(){this.text=\"\",this.baseIndent=0,this.basePos=0,this.depth=0,this.markers=[],this.pos=0,this.indent=0,this.next=-1}forward(){this.basePos>this.pos&&this.forwardInner()}forwardInner(){let e=this.skipSpace(this.basePos);this.indent=this.countIndent(e,this.pos,this.indent),this.pos=e,this.next=e==this.text.length?-1:this.text.charCodeAt(e)}skipSpace(e){return vr(this.text,e)}reset(e){for(this.text=e,this.baseIndent=this.basePos=this.pos=this.indent=0,this.forwardInner(),this.depth=1;this.markers.length;)this.markers.pop()}moveBase(e){this.basePos=e,this.baseIndent=this.countIndent(e,this.pos,this.indent)}moveBaseColumn(e){this.baseIndent=e,this.basePos=this.findColumn(e)}addMarker(e){this.markers.push(e)}countIndent(e,t=0,i=0){for(let r=t;r<e;r++)i+=this.text.charCodeAt(r)==9?4-i%4:1;return i}findColumn(e){let t=0;for(let i=0;t<this.text.length&&i<e;t++)i+=this.text.charCodeAt(t)==9?4-i%4:1;return t}scrub(){if(!this.baseIndent)return this.text;let e=\"\";for(let t=0;t<this.basePos;t++)e+=\" \";return e+this.text.slice(this.basePos)}};function _p(O,e,t){if(t.pos==t.text.length||O!=e.block&&t.indent>=e.stack[t.depth+1].value+t.baseIndent)return!0;if(t.indent>=t.baseIndent+4)return!1;let i=(O.type==b.OrderedList?Rc:_c)(t,e,!1);return i>0&&(O.type!=b.BulletList||Yc(t,e,!1)<0)&&t.text.charCodeAt(t.pos+i-1)==O.value}var Ap={[b.Blockquote](O,e,t){return t.next!=62?!1:(t.markers.push(L(b.QuoteMark,e.lineStart+t.pos,e.lineStart+t.pos+1)),t.moveBase(t.pos+(ot(t.text.charCodeAt(t.pos+1))?2:1)),O.end=e.lineStart+t.text.length,!0)},[b.ListItem](O,e,t){return t.indent<t.baseIndent+O.value&&t.next>-1?!1:(t.moveBaseColumn(t.baseIndent+O.value),!0)},[b.OrderedList]:_p,[b.BulletList]:_p,[b.Document](){return!0}};function ot(O){return O==32||O==9||O==10||O==13}function vr(O,e=0){for(;e<O.length&&ot(O.charCodeAt(e));)e++;return e}function Rp(O,e,t){for(;e>t&&ot(O.charCodeAt(e-1));)e--;return e}function Lp(O){if(O.next!=96&&O.next!=126)return-1;let e=O.pos+1;for(;e<O.text.length&&O.text.charCodeAt(e)==O.next;)e++;if(e<O.pos+3)return-1;if(O.next==96){for(let t=e;t<O.text.length;t++)if(O.text.charCodeAt(t)==96)return-1}return e}function Mp(O){return O.next!=62?-1:O.text.charCodeAt(O.pos+1)==32?2:1}function Yc(O,e,t){if(O.next!=42&&O.next!=45&&O.next!=95)return-1;let i=1;for(let r=O.pos+1;r<O.text.length;r++){let n=O.text.charCodeAt(r);if(n==O.next)i++;else if(!ot(n))return-1}return t&&O.next==45&&Bp(O)>-1&&O.depth==e.stack.length&&e.parser.leafBlockParsers.indexOf(Kp.SetextHeading)>-1||i<3?-1:1}function Dp(O,e){for(let t=O.stack.length-1;t>=0;t--)if(O.stack[t].type==e)return!0;return!1}function _c(O,e,t){return(O.next==45||O.next==43||O.next==42)&&(O.pos==O.text.length-1||ot(O.text.charCodeAt(O.pos+1)))&&(!t||Dp(e,b.BulletList)||O.skipSpace(O.pos+2)<O.text.length)?1:-1}function Rc(O,e,t){let i=O.pos,r=O.next;for(;r>=48&&r<=57;){i++;if(i==O.text.length)return-1;r=O.text.charCodeAt(i)}return i==O.pos||i>O.pos+9||r!=46&&r!=41||i<O.text.length-1&&!ot(O.text.charCodeAt(i+1))||t&&!Dp(e,b.OrderedList)&&(O.skipSpace(i+1)==O.text.length||i>O.pos+1||O.next!=49)?-1:i+1-O.pos}function Ip(O){if(O.next!=35)return-1;let e=O.pos+1;for(;e<O.text.length&&O.text.charCodeAt(e)==35;)e++;if(e<O.text.length&&O.text.charCodeAt(e)!=32)return-1;let t=e-O.pos;return t>6?-1:t}function Bp(O){if(O.next!=45&&O.next!=61||O.indent>=O.baseIndent+4)return-1;let e=O.pos+1;for(;e<O.text.length&&O.text.charCodeAt(e)==O.next;)e++;let t=e;for(;e<O.text.length&&ot(O.text.charCodeAt(e));)e++;return e==O.text.length?t:-1}var Xc=/^[ \\t]*$/,Np=/-->/,Fp=/\\?>/,Tc=[[/^<(?:script|pre|style)(?:\\s|>|$)/i,/<\\/(?:script|pre|style)>/i],[/^\\s*<!--/,Np],[/^\\s*<\\?/,Fp],[/^\\s*<![A-Z]/,/>/],[/^\\s*<!\\[CDATA\\[/,/\\]\\]>/],[/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i,Xc],[/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i,Xc]];function Hp(O,e,t){if(O.next!=60)return-1;let i=O.text.slice(O.pos);for(let r=0,n=Tc.length-(t?1:0);r<n;r++)if(Tc[r][0].test(i))return r;return-1}function Vp(O,e){let t=O.countIndent(e,O.pos,O.indent),i=O.countIndent(O.skipSpace(e),e,t);return i>=t+5?t+1:i}function fO(O,e,t){let i=O.length-1;i>=0&&O[i].to==e&&O[i].type==b.CodeText?O[i].to=t:O.push(L(b.CodeText,e,t))}var Zs={LinkReference:void 0,IndentedCode(O,e){let t=e.baseIndent+4;if(e.indent<t)return!1;let i=e.findColumn(t),r=O.lineStart+i,n=O.lineStart+e.text.length,s=[],a=[];for(fO(s,r,n);O.nextLine()&&e.depth>=O.stack.length;)if(e.pos==e.text.length){fO(a,O.lineStart-1,O.lineStart);for(let o of e.markers)a.push(o)}else{if(e.indent<t)break;{if(a.length){for(let l of a)l.type==b.CodeText?fO(s,l.from,l.to):s.push(l);a=[]}fO(s,O.lineStart-1,O.lineStart);for(let l of e.markers)s.push(l);n=O.lineStart+e.text.length;let o=O.lineStart+e.findColumn(e.baseIndent+4);o<n&&fO(s,o,n)}}return a.length&&(a=a.filter(o=>o.type!=b.CodeText),a.length&&(e.markers=a.concat(e.markers))),O.addNode(O.buffer.writeElements(s,-r).finish(b.CodeBlock,n-r),r),!0},FencedCode(O,e){let t=Lp(e);if(t<0)return!1;let i=O.lineStart+e.pos,r=e.next,n=t-e.pos,s=e.skipSpace(t),a=Rp(e.text,e.text.length,s),o=[L(b.CodeMark,i,i+n)];s<a&&o.push(L(b.CodeInfo,O.lineStart+s,O.lineStart+a));for(let l=!0,c=!0,h=!1;O.nextLine()&&e.depth>=O.stack.length;l=!1){let f=e.pos;if(e.indent-e.baseIndent<4)for(;f<e.text.length&&e.text.charCodeAt(f)==r;)f++;if(f-e.pos>=n&&e.skipSpace(f)==e.text.length){for(let u of e.markers)o.push(u);c&&h&&fO(o,O.lineStart-1,O.lineStart),o.push(L(b.CodeMark,O.lineStart+e.pos,O.lineStart+f)),O.nextLine();break}else{h=!0,l||(fO(o,O.lineStart-1,O.lineStart),c=!1);for(let $ of e.markers)o.push($);let u=O.lineStart+e.basePos,Q=O.lineStart+e.text.length;u<Q&&(fO(o,u,Q),c=!1)}}return O.addNode(O.buffer.writeElements(o,-i).finish(b.FencedCode,O.prevLineEnd()-i),i),!0},Blockquote(O,e){let t=Mp(e);return t<0?!1:(O.startContext(b.Blockquote,e.pos),O.addNode(b.QuoteMark,O.lineStart+e.pos,O.lineStart+e.pos+1),e.moveBase(e.pos+t),null)},HorizontalRule(O,e){if(Yc(e,O,!1)<0)return!1;let t=O.lineStart+e.pos;return O.nextLine(),O.addNode(b.HorizontalRule,t),!0},BulletList(O,e){let t=_c(e,O,!1);if(t<0)return!1;O.block.type!=b.BulletList&&O.startContext(b.BulletList,e.basePos,e.next);let i=Vp(e,e.pos+1);return O.startContext(b.ListItem,e.basePos,i-e.baseIndent),O.addNode(b.ListMark,O.lineStart+e.pos,O.lineStart+e.pos+t),e.moveBaseColumn(i),null},OrderedList(O,e){let t=Rc(e,O,!1);if(t<0)return!1;O.block.type!=b.OrderedList&&O.startContext(b.OrderedList,e.basePos,e.text.charCodeAt(e.pos+t-1));let i=Vp(e,e.pos+t);return O.startContext(b.ListItem,e.basePos,i-e.baseIndent),O.addNode(b.ListMark,O.lineStart+e.pos,O.lineStart+e.pos+t),e.moveBaseColumn(i),null},ATXHeading(O,e){let t=Ip(e);if(t<0)return!1;let i=e.pos,r=O.lineStart+i,n=Rp(e.text,e.text.length,i),s=n;for(;s>i&&e.text.charCodeAt(s-1)==e.next;)s--;(s==n||s==i||!ot(e.text.charCodeAt(s-1)))&&(s=e.text.length);let a=O.buffer.write(b.HeaderMark,0,t).writeElements(O.parser.parseInline(e.text.slice(i+t+1,s),r+t+1),-r);s<e.text.length&&a.write(b.HeaderMark,s-i,n-i);let o=a.finish(b.ATXHeading1-1+t,e.text.length-i);return O.nextLine(),O.addNode(o,r),!0},HTMLBlock(O,e){let t=Hp(e,O,!1);if(t<0)return!1;let i=O.lineStart+e.pos,r=Tc[t][1],n=[],s=r!=Xc;for(;!r.test(e.text)&&O.nextLine();){if(e.depth<O.stack.length){s=!1;break}for(let l of e.markers)n.push(l)}s&&O.nextLine();let a=r==Np?b.CommentBlock:r==Fp?b.ProcessingInstructionBlock:b.HTMLBlock,o=O.prevLineEnd();return O.addNode(O.buffer.writeElements(n,-i).finish(a,o-i),i),!0},SetextHeading:void 0},bc=class{constructor(e){this.stage=0,this.elts=[],this.pos=0,this.start=e.start,this.advance(e.content)}nextLine(e,t,i){if(this.stage==-1)return!1;let r=i.content+`\n`+t.scrub(),n=this.advance(r);return n>-1&&n<r.length?this.complete(e,i,n):!1}finish(e,t){return(this.stage==2||this.stage==3)&&vr(t.content,this.pos)==t.content.length?this.complete(e,t,t.content.length):!1}complete(e,t,i){return e.addLeafElement(t,L(b.LinkReference,this.start,this.start+i,this.elts)),!0}nextStage(e){return e?(this.pos=e.to-this.start,this.elts.push(e),this.stage++,!0):(e===!1&&(this.stage=-1),!1)}advance(e){for(;;){if(this.stage==-1)return-1;if(this.stage==0){if(!this.nextStage(nm(e,this.pos,this.start,!0)))return-1;if(e.charCodeAt(this.pos)!=58)return this.stage=-1;this.elts.push(L(b.LinkMark,this.pos+this.start,this.pos+this.start+1)),this.pos++}else if(this.stage==1){if(!this.nextStage(im(e,vr(e,this.pos),this.start)))return-1}else if(this.stage==2){let t=vr(e,this.pos),i=0;if(t>this.pos){let r=rm(e,t,this.start);if(r){let n=mc(e,r.to-this.start);n>0&&(this.nextStage(r),i=n)}}return i||(i=mc(e,this.pos)),i>0&&i<e.length?i:-1}else return mc(e,this.pos)}}};function mc(O,e){for(;e<O.length;e++){let t=O.charCodeAt(e);if(t==10)break;if(!ot(t))return-1}return e}var yc=class{nextLine(e,t,i){let r=t.depth<e.stack.length?-1:Bp(t),n=t.next;if(r<0)return!1;let s=L(b.HeaderMark,e.lineStart+t.pos,e.lineStart+r);return e.nextLine(),e.addLeafElement(i,L(n==61?b.SetextHeading1:b.SetextHeading2,i.start,e.prevLineEnd(),[...e.parser.parseInline(i.content,i.start),s])),!0}finish(){return!1}},Kp={LinkReference(O,e){return e.content.charCodeAt(0)==91?new bc(e):null},SetextHeading(){return new yc}},Ax=[(O,e)=>Ip(e)>=0,(O,e)=>Lp(e)>=0,(O,e)=>Mp(e)>=0,(O,e)=>_c(e,O,!0)>=0,(O,e)=>Rc(e,O,!0)>=0,(O,e)=>Yc(e,O,!0)>=0,(O,e)=>Hp(e,O,!0)>=0],Lx={text:\"\",end:0},xc=class{constructor(e,t,i,r){this.parser=e,this.input=t,this.ranges=r,this.line=new Sc,this.atEnd=!1,this.reusePlaceholders=new Map,this.stoppedAt=null,this.rangeI=0,this.to=r[r.length-1].to,this.lineStart=this.absoluteLineStart=this.absoluteLineEnd=r[0].from,this.block=Ys.create(b.Document,0,this.lineStart,0,0),this.stack=[this.block],this.fragments=i.length?new Zc(i,t):null,this.readLine()}get parsedPos(){return this.absoluteLineStart}advance(){if(this.stoppedAt!=null&&this.absoluteLineStart>this.stoppedAt)return this.finish();let{line:e}=this;for(;;){for(let i=0;;){let r=e.depth<this.stack.length?this.stack[this.stack.length-1]:null;for(;i<e.markers.length&&(!r||e.markers[i].from<r.end);){let n=e.markers[i++];this.addNode(n.type,n.from,n.to)}if(!r)break;this.finishContext()}if(e.pos<e.text.length)break;if(!this.nextLine())return this.finish()}if(this.fragments&&this.reuseFragment(e.basePos))return null;e:for(;;){for(let i of this.parser.blockParsers)if(i){let r=i(this,e);if(r!=!1){if(r==!0)return null;e.forward();continue e}}break}let t=new Pc(this.lineStart+e.pos,e.text.slice(e.pos));for(let i of this.parser.leafBlockParsers)if(i){let r=i(this,t);r&&t.parsers.push(r)}e:for(;this.nextLine()&&e.pos!=e.text.length;){if(e.indent<e.baseIndent+4){for(let i of this.parser.endLeafBlock)if(i(this,e,t))break e}for(let i of t.parsers)if(i.nextLine(this,e,t))return null;t.content+=`\n`+e.scrub();for(let i of e.markers)t.marks.push(i)}return this.finishLeaf(t),null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw new RangeError(\"Can't move stoppedAt forward\");this.stoppedAt=e}reuseFragment(e){if(!this.fragments.moveTo(this.absoluteLineStart+e,this.absoluteLineStart)||!this.fragments.matches(this.block.hash))return!1;let t=this.fragments.takeNodes(this);return t?(this.absoluteLineStart+=t,this.lineStart=sm(this.absoluteLineStart,this.ranges),this.moveRangeI(),this.absoluteLineStart<this.to?(this.lineStart++,this.absoluteLineStart++,this.readLine()):(this.atEnd=!0,this.readLine()),!0):!1}get depth(){return this.stack.length}parentType(e=this.depth-1){return this.parser.nodeSet.types[this.stack[e].type]}nextLine(){return this.lineStart+=this.line.text.length,this.absoluteLineEnd>=this.to?(this.absoluteLineStart=this.absoluteLineEnd,this.atEnd=!0,this.readLine(),!1):(this.lineStart++,this.absoluteLineStart=this.absoluteLineEnd+1,this.moveRangeI(),this.readLine(),!0)}peekLine(){return this.scanLine(this.absoluteLineEnd+1).text}moveRangeI(){for(;this.rangeI<this.ranges.length-1&&this.absoluteLineStart>=this.ranges[this.rangeI].to;)this.rangeI++,this.absoluteLineStart=Math.max(this.absoluteLineStart,this.ranges[this.rangeI].from)}scanLine(e){let t=Lx;if(t.end=e,e>=this.to)t.text=\"\";else if(t.text=this.lineChunkAt(e),t.end+=t.text.length,this.ranges.length>1){let i=this.absoluteLineStart,r=this.rangeI;for(;this.ranges[r].to<t.end;){r++;let n=this.ranges[r].from,s=this.lineChunkAt(n);t.end=n+s.length,t.text=t.text.slice(0,this.ranges[r-1].to-i)+s,i=t.end-t.text.length}}return t}readLine(){let{line:e}=this,{text:t,end:i}=this.scanLine(this.absoluteLineStart);for(this.absoluteLineEnd=i,e.reset(t);e.depth<this.stack.length;e.depth++){let r=this.stack[e.depth],n=this.parser.skipContextMarkup[r.type];if(!n)throw new Error(\"Unhandled block context \"+b[r.type]);let s=this.line.markers.length;if(!n(r,this,e)){this.line.markers.length>s&&(r.end=this.line.markers[this.line.markers.length-1].to),e.forward();break}e.forward()}}lineChunkAt(e){let t=this.input.chunk(e),i;if(this.input.lineChunks)i=t==`\n`?\"\":t;else{let r=t.indexOf(`\n`);i=r<0?t:t.slice(0,r)}return e+i.length>this.to?i.slice(0,this.to-e):i}prevLineEnd(){return this.atEnd?this.lineStart:this.lineStart-1}startContext(e,t,i=0){this.block=Ys.create(e,i,this.lineStart+t,this.block.hash,this.lineStart+this.line.text.length),this.stack.push(this.block)}startComposite(e,t,i=0){this.startContext(this.parser.getNodeType(e),t,i)}addNode(e,t,i){typeof e==\"number\"&&(e=new D(this.parser.nodeSet.types[e],bi,bi,(i??this.prevLineEnd())-t)),this.block.addChild(e,t-this.block.from)}addElement(e){this.block.addChild(e.toTree(this.parser.nodeSet),e.from-this.block.from)}addLeafElement(e,t){this.addNode(this.buffer.writeElements(wc(t.children,e.marks),-t.from).finish(t.type,t.to-t.from),t.from)}finishContext(){let e=this.stack.pop(),t=this.stack[this.stack.length-1];t.addChild(e.toTree(this.parser.nodeSet),e.from-t.from),this.block=t}finish(){for(;this.stack.length>1;)this.finishContext();return this.addGaps(this.block.toTree(this.parser.nodeSet,this.lineStart))}addGaps(e){return this.ranges.length>1?Jp(this.ranges,0,e.topNode,this.ranges[0].from,this.reusePlaceholders):e}finishLeaf(e){for(let i of e.parsers)if(i.finish(this,e))return;let t=wc(this.parser.parseInline(e.content,e.start),e.marks);this.addNode(this.buffer.writeElements(t,-e.start).finish(b.Paragraph,e.content.length),e.start)}elt(e,t,i,r){return typeof e==\"string\"?L(this.parser.getNodeType(e),t,i,r):new Rs(e,t)}get buffer(){return new _s(this.parser.nodeSet)}};function Jp(O,e,t,i,r){let n=O[e].to,s=[],a=[],o=t.from+i;function l(c,h){for(;h?c>=n:c>n;){let f=O[e+1].from-n;i+=f,c+=f,e++,n=O[e].to}}for(let c=t.firstChild;c;c=c.nextSibling){l(c.from+i,!0);let h=c.from+i,f,u=r.get(c.tree);u?f=u:c.to+i>n?(f=Jp(O,e,c,i,r),l(c.to+i,!1)):f=c.toTree(),s.push(f),a.push(h-o)}return l(t.to+i,!1),new D(t.type,s,a,t.to+i-o,t.tree?t.tree.propValues:void 0)}var _r=class O extends eO{constructor(e,t,i,r,n,s,a,o,l){super(),this.nodeSet=e,this.blockParsers=t,this.leafBlockParsers=i,this.blockNames=r,this.endLeafBlock=n,this.skipContextMarkup=s,this.inlineParsers=a,this.inlineNames=o,this.wrappers=l,this.nodeTypes=Object.create(null);for(let c of e.types)this.nodeTypes[c.name]=c.id}createParse(e,t,i){let r=new xc(this,e,t,i);for(let n of this.wrappers)r=n(r,e,t,i);return r}configure(e){let t=kc(e);if(!t)return this;let{nodeSet:i,skipContextMarkup:r}=this,n=this.blockParsers.slice(),s=this.leafBlockParsers.slice(),a=this.blockNames.slice(),o=this.inlineParsers.slice(),l=this.inlineNames.slice(),c=this.endLeafBlock.slice(),h=this.wrappers;if(Zr(t.defineNodes)){r=Object.assign({},r);let f=i.types.slice(),u;for(let Q of t.defineNodes){let{name:$,block:p,composite:m,style:g}=typeof Q==\"string\"?{name:Q}:Q;if(f.some(X=>X.name==$))continue;m&&(r[f.length]=(X,x,k)=>m(x,k,X.value));let P=f.length,y=m?[\"Block\",\"BlockContext\"]:p?P>=b.ATXHeading1&&P<=b.SetextHeading2?[\"Block\",\"LeafBlock\",\"Heading\"]:[\"Block\",\"LeafBlock\"]:void 0;f.push(ue.define({id:P,name:$,props:y&&[[R.group,y]]})),g&&(u||(u={}),Array.isArray(g)||g instanceof Be?u[$]=g:Object.assign(u,g))}i=new Kt(f),u&&(i=i.extend(F(u)))}if(Zr(t.props)&&(i=i.extend(...t.props)),Zr(t.remove))for(let f of t.remove){let u=this.blockNames.indexOf(f),Q=this.inlineNames.indexOf(f);u>-1&&(n[u]=s[u]=void 0),Q>-1&&(o[Q]=void 0)}if(Zr(t.parseBlock))for(let f of t.parseBlock){let u=a.indexOf(f.name);if(u>-1)n[u]=f.parse,s[u]=f.leaf;else{let Q=f.before?vs(a,f.before):f.after?vs(a,f.after)+1:a.length-1;n.splice(Q,0,f.parse),s.splice(Q,0,f.leaf),a.splice(Q,0,f.name)}f.endLeaf&&c.push(f.endLeaf)}if(Zr(t.parseInline))for(let f of t.parseInline){let u=l.indexOf(f.name);if(u>-1)o[u]=f.parse;else{let Q=f.before?vs(l,f.before):f.after?vs(l,f.after)+1:l.length-1;o.splice(Q,0,f.parse),l.splice(Q,0,f.name)}}return t.wrap&&(h=h.concat(t.wrap)),new O(i,n,s,a,c,r,o,l,h)}getNodeType(e){let t=this.nodeTypes[e];if(t==null)throw new RangeError(`Unknown node type '${e}'`);return t}parseInline(e,t){let i=new Vr(this,e,t);e:for(let r=t;r<i.end;){let n=i.char(r);for(let s of this.inlineParsers)if(s){let a=s(i,n,r);if(a>=0){r=a;continue e}}r++}return i.resolveMarkers(0)}};function Zr(O){return O!=null&&O.length>0}function kc(O){if(!Array.isArray(O))return O;if(O.length==0)return null;let e=kc(O[0]);if(O.length==1)return e;let t=kc(O.slice(1));if(!t||!e)return e||t;let i=(s,a)=>(s||bi).concat(a||bi),r=e.wrap,n=t.wrap;return{props:i(e.props,t.props),defineNodes:i(e.defineNodes,t.defineNodes),parseBlock:i(e.parseBlock,t.parseBlock),parseInline:i(e.parseInline,t.parseInline),remove:i(e.remove,t.remove),wrap:r?n?(s,a,o,l)=>r(n(s,a,o,l),a,o,l):r:n}}function vs(O,e){let t=O.indexOf(e);if(t<0)throw new RangeError(`Position specified relative to unknown parser ${e}`);return t}var em=[ue.none];for(let O=1,e;e=b[O];O++)em[O]=ue.define({id:O,name:e,props:O>=b.Escape?[]:[[R.group,O in Ap?[\"Block\",\"BlockContext\"]:[\"Block\",\"LeafBlock\"]]],top:e==\"Document\"});var bi=[],_s=class{constructor(e){this.nodeSet=e,this.content=[],this.nodes=[]}write(e,t,i,r=0){return this.content.push(e,t,i,4+r*4),this}writeElements(e,t=0){for(let i of e)i.writeTo(this,t);return this}finish(e,t){return D.build({buffer:this.content,nodeSet:this.nodeSet,reused:this.nodes,topID:e,length:t})}},UO=class{constructor(e,t,i,r=bi){this.type=e,this.from=t,this.to=i,this.children=r}writeTo(e,t){let i=e.content.length;e.writeElements(this.children,t),e.content.push(this.type,this.from+t,this.to+t,e.content.length+4-i)}toTree(e){return new _s(e).writeElements(this.children,-this.from).finish(this.type,this.to-this.from)}},Rs=class{constructor(e,t){this.tree=e,this.from=t}get to(){return this.from+this.tree.length}get type(){return this.tree.type.id}get children(){return bi}writeTo(e,t){e.nodes.push(this.tree),e.content.push(e.nodes.length-1,this.from+t,this.to+t,-1)}toTree(){return this.tree}};function L(O,e,t,i){return new UO(O,e,t,i)}var tm={resolve:\"Emphasis\",mark:\"EmphasisMark\"},Om={resolve:\"Emphasis\",mark:\"EmphasisMark\"},zO={},Vs={},Ve=class{constructor(e,t,i,r){this.type=e,this.from=t,this.to=i,this.side=r}},qp=\"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\",Rr=/[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/;try{Rr=new RegExp(\"[\\\\p{S}|\\\\p{P}]\",\"u\")}catch{}var gc={Escape(O,e,t){if(e!=92||t==O.end-1)return-1;let i=O.char(t+1);for(let r=0;r<qp.length;r++)if(qp.charCodeAt(r)==i)return O.append(L(b.Escape,t,t+2));return-1},Entity(O,e,t){if(e!=38)return-1;let i=/^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(O.slice(t+1,t+31));return i?O.append(L(b.Entity,t,t+1+i[0].length)):-1},InlineCode(O,e,t){if(e!=96||t&&O.char(t-1)==96)return-1;let i=t+1;for(;i<O.end&&O.char(i)==96;)i++;let r=i-t,n=0;for(;i<O.end;i++)if(O.char(i)==96){if(n++,n==r&&O.char(i+1)!=96)return O.append(L(b.InlineCode,t,i+1,[L(b.CodeMark,t,t+r),L(b.CodeMark,i+1-r,i+1)]))}else n=0;return-1},HTMLTag(O,e,t){if(e!=60||t==O.end-1)return-1;let i=O.slice(t+1,O.end),r=/^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(i);if(r)return O.append(L(b.Autolink,t,t+1+r[0].length,[L(b.LinkMark,t,t+1),L(b.URL,t+1,t+r[0].length),L(b.LinkMark,t+r[0].length,t+1+r[0].length)]));let n=/^!--[^>](?:-[^-]|[^-])*?-->/i.exec(i);if(n)return O.append(L(b.Comment,t,t+1+n[0].length));let s=/^\\?[^]*?\\?>/.exec(i);if(s)return O.append(L(b.ProcessingInstruction,t,t+1+s[0].length));let a=/^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(i);return a?O.append(L(b.HTMLTag,t,t+1+a[0].length)):-1},Emphasis(O,e,t){if(e!=95&&e!=42)return-1;let i=t+1;for(;O.char(i)==e;)i++;let r=O.slice(t-1,t),n=O.slice(i,i+1),s=Rr.test(r),a=Rr.test(n),o=/\\s|^$/.test(r),l=/\\s|^$/.test(n),c=!l&&(!a||o||s),h=!o&&(!s||l||a),f=c&&(e==42||!h||s),u=h&&(e==42||!c||a);return O.append(new Ve(e==95?tm:Om,t,i,(f?1:0)|(u?2:0)))},HardBreak(O,e,t){if(e==92&&O.char(t+1)==10)return O.append(L(b.HardBreak,t,t+2));if(e==32){let i=t+1;for(;O.char(i)==32;)i++;if(O.char(i)==10&&i>=t+2)return O.append(L(b.HardBreak,t,i+1))}return-1},Link(O,e,t){return e==91?O.append(new Ve(zO,t,t+1,1)):-1},Image(O,e,t){return e==33&&O.char(t+1)==91?O.append(new Ve(Vs,t,t+2,1)):-1},LinkEnd(O,e,t){if(e!=93)return-1;for(let i=O.parts.length-1;i>=0;i--){let r=O.parts[i];if(r instanceof Ve&&(r.type==zO||r.type==Vs)){if(!r.side||O.skipSpace(r.to)==t&&!/[(\\[]/.test(O.slice(t+1,t+2)))return O.parts[i]=null,-1;let n=O.takeContent(i),s=O.parts[i]=Mx(O,n,r.type==zO?b.Link:b.Image,r.from,t+1);if(r.type==zO)for(let a=0;a<i;a++){let o=O.parts[a];o instanceof Ve&&o.type==zO&&(o.side=0)}return s.to}}return-1}};function Mx(O,e,t,i,r){let{text:n}=O,s=O.char(r),a=r;if(e.unshift(L(b.LinkMark,i,i+(t==b.Image?2:1))),e.push(L(b.LinkMark,r-1,r)),s==40){let o=O.skipSpace(r+1),l=im(n,o-O.offset,O.offset),c;l&&(o=O.skipSpace(l.to),o!=l.to&&(c=rm(n,o-O.offset,O.offset),c&&(o=O.skipSpace(c.to)))),O.char(o)==41&&(e.push(L(b.LinkMark,r,r+1)),a=o+1,l&&e.push(l),c&&e.push(c),e.push(L(b.LinkMark,o,a)))}else if(s==91){let o=nm(n,r-O.offset,O.offset,!1);o&&(e.push(o),a=o.to)}return L(t,i,a,e)}function im(O,e,t){if(O.charCodeAt(e)==60){for(let r=e+1;r<O.length;r++){let n=O.charCodeAt(r);if(n==62)return L(b.URL,e+t,r+1+t);if(n==60||n==10)return!1}return null}else{let r=0,n=e;for(let s=!1;n<O.length;n++){let a=O.charCodeAt(n);if(ot(a))break;if(s)s=!1;else if(a==40)r++;else if(a==41){if(!r)break;r--}else a==92&&(s=!0)}return n>e?L(b.URL,e+t,n+t):n==O.length?null:!1}}function rm(O,e,t){let i=O.charCodeAt(e);if(i!=39&&i!=34&&i!=40)return!1;let r=i==40?41:i;for(let n=e+1,s=!1;n<O.length;n++){let a=O.charCodeAt(n);if(s)s=!1;else{if(a==r)return L(b.LinkTitle,e+t,n+1+t);a==92&&(s=!0)}}return null}function nm(O,e,t,i){for(let r=!1,n=e+1,s=Math.min(O.length,n+999);n<s;n++){let a=O.charCodeAt(n);if(r)r=!1;else{if(a==93)return i?!1:L(b.LinkLabel,e+t,n+1+t);if(i&&!ot(a)&&(i=!1),a==91)return!1;a==92&&(r=!0)}}return null}var Vr=class{constructor(e,t,i){this.parser=e,this.text=t,this.offset=i,this.parts=[]}char(e){return e>=this.end?-1:this.text.charCodeAt(e-this.offset)}get end(){return this.offset+this.text.length}slice(e,t){return this.text.slice(e-this.offset,t-this.offset)}append(e){return this.parts.push(e),e.to}addDelimiter(e,t,i,r,n){return this.append(new Ve(e,t,i,(r?1:0)|(n?2:0)))}get hasOpenLink(){for(let e=this.parts.length-1;e>=0;e--){let t=this.parts[e];if(t instanceof Ve&&(t.type==zO||t.type==Vs))return!0}return!1}addElement(e){return this.append(e)}resolveMarkers(e){for(let i=e;i<this.parts.length;i++){let r=this.parts[i];if(!(r instanceof Ve&&r.type.resolve&&r.side&2))continue;let n=r.type==tm||r.type==Om,s=r.to-r.from,a,o=i-1;for(;o>=e;o--){let $=this.parts[o];if($ instanceof Ve&&$.side&1&&$.type==r.type&&!(n&&(r.side&1||$.side&2)&&($.to-$.from+s)%3==0&&(($.to-$.from)%3||s%3))){a=$;break}}if(!a)continue;let l=r.type.resolve,c=[],h=a.from,f=r.to;if(n){let $=Math.min(2,a.to-a.from,s);h=a.to-$,f=r.from+$,l=$==1?\"Emphasis\":\"StrongEmphasis\"}a.type.mark&&c.push(this.elt(a.type.mark,h,a.to));for(let $=o+1;$<i;$++)this.parts[$]instanceof UO&&c.push(this.parts[$]),this.parts[$]=null;r.type.mark&&c.push(this.elt(r.type.mark,r.from,f));let u=this.elt(l,h,f,c);this.parts[o]=n&&a.from!=h?new Ve(a.type,a.from,h,a.side):null,(this.parts[i]=n&&r.to!=f?new Ve(r.type,f,r.to,r.side):null)?this.parts.splice(i,0,u):this.parts[i]=u}let t=[];for(let i=e;i<this.parts.length;i++){let r=this.parts[i];r instanceof UO&&t.push(r)}return t}findOpeningDelimiter(e){for(let t=this.parts.length-1;t>=0;t--){let i=this.parts[t];if(i instanceof Ve&&i.type==e&&i.side&1)return t}return null}takeContent(e){let t=this.resolveMarkers(e);return this.parts.length=e,t}getDelimiterAt(e){let t=this.parts[e];return t instanceof Ve?t:null}skipSpace(e){return vr(this.text,e-this.offset)+this.offset}elt(e,t,i,r){return typeof e==\"string\"?L(this.parser.getNodeType(e),t,i,r):new Rs(e,t)}};Vr.linkStart=zO;Vr.imageStart=Vs;function wc(O,e){if(!e.length)return O;if(!O.length)return e;let t=O.slice(),i=0;for(let r of e){for(;i<t.length&&t[i].to<r.to;)i++;if(i<t.length&&t[i].from<r.from){let n=t[i];n instanceof UO&&(t[i]=new UO(n.type,n.from,n.to,wc(n.children,[r])))}else t.splice(i++,0,r)}return t}var Dx=[b.CodeBlock,b.ListItem,b.OrderedList,b.BulletList],Zc=class{constructor(e,t){this.fragments=e,this.input=t,this.i=0,this.fragment=null,this.fragmentEnd=-1,this.cursor=null,e.length&&(this.fragment=e[this.i++])}nextFragment(){this.fragment=this.i<this.fragments.length?this.fragments[this.i++]:null,this.cursor=null,this.fragmentEnd=-1}moveTo(e,t){for(;this.fragment&&this.fragment.to<=e;)this.nextFragment();if(!this.fragment||this.fragment.from>(e?e-1:0))return!1;if(this.fragmentEnd<0){let n=this.fragment.to;for(;n>0&&this.input.read(n-1,n)!=`\n`;)n--;this.fragmentEnd=n?n-1:0}let i=this.cursor;i||(i=this.cursor=this.fragment.tree.cursor(),i.firstChild());let r=e+this.fragment.offset;for(;i.to<=r;)if(!i.parent())return!1;for(;;){if(i.from>=r)return this.fragment.from<=t;if(!i.childAfter(r))return!1}}matches(e){let t=this.cursor.tree;return t&&t.prop(R.contextHash)==e}takeNodes(e){let t=this.cursor,i=this.fragment.offset,r=this.fragmentEnd-(this.fragment.openEnd?1:0),n=e.absoluteLineStart,s=n,a=e.block.children.length,o=s,l=a;for(;;){if(t.to-i>r){if(t.type.isAnonymous&&t.firstChild())continue;break}let c=sm(t.from-i,e.ranges);if(t.to-i<=e.ranges[e.rangeI].to)e.addNode(t.tree,c);else{let h=new D(e.parser.nodeSet.types[b.Paragraph],[],[],0,e.block.hashProp);e.reusePlaceholders.set(h,t.tree),e.addNode(h,c)}if(t.type.is(\"Block\")&&(Dx.indexOf(t.type.id)<0?(s=t.to-i,a=e.block.children.length):(s=o,a=l,o=t.to-i,l=e.block.children.length)),!t.nextSibling())break}for(;e.block.children.length>a;)e.block.children.pop(),e.block.positions.pop();return s-n}};function sm(O,e){let t=O;for(let i=1;i<e.length;i++){let r=e[i-1].to,n=e[i].from;r<O&&(t-=n-r)}return t}var Ix=F({\"Blockquote/...\":d.quote,HorizontalRule:d.contentSeparator,\"ATXHeading1/... SetextHeading1/...\":d.heading1,\"ATXHeading2/... SetextHeading2/...\":d.heading2,\"ATXHeading3/...\":d.heading3,\"ATXHeading4/...\":d.heading4,\"ATXHeading5/...\":d.heading5,\"ATXHeading6/...\":d.heading6,\"Comment CommentBlock\":d.comment,Escape:d.escape,Entity:d.character,\"Emphasis/...\":d.emphasis,\"StrongEmphasis/...\":d.strong,\"Link/... Image/...\":d.link,\"OrderedList/... BulletList/...\":d.list,\"BlockQuote/...\":d.quote,\"InlineCode CodeText\":d.monospace,\"URL Autolink\":d.url,\"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\":d.processingInstruction,\"CodeInfo LinkLabel\":d.labelName,LinkTitle:d.string,Paragraph:d.content}),am=new _r(new Kt(em).extend(Ix),Object.keys(Zs).map(O=>Zs[O]),Object.keys(Zs).map(O=>Kp[O]),Object.keys(Zs),Ax,Ap,Object.keys(gc).map(O=>gc[O]),Object.keys(gc),[]);function Bx(O,e,t){let i=[];for(let r=O.firstChild,n=e;;r=r.nextSibling){let s=r?r.from:t;if(s>n&&i.push({from:n,to:s}),!r)break;n=r.to}return i}function om(O){let{codeParser:e,htmlParser:t}=O;return{wrap:xO((r,n)=>{let s=r.type.id;if(e&&(s==b.CodeBlock||s==b.FencedCode)){let a=\"\";if(s==b.FencedCode){let l=r.node.getChild(b.CodeInfo);l&&(a=n.read(l.from,l.to))}let o=e(a);if(o)return{parser:o,overlay:l=>l.type.id==b.CodeText,bracketed:s==b.FencedCode}}else if(t&&(s==b.HTMLBlock||s==b.HTMLTag||s==b.CommentBlock))return{parser:t,overlay:Bx(r.node,r.from,r.to)};return null})}}var Nx={resolve:\"Strikethrough\",mark:\"StrikethroughMark\"},Fx={defineNodes:[{name:\"Strikethrough\",style:{\"Strikethrough/...\":d.strikethrough}},{name:\"StrikethroughMark\",style:d.processingInstruction}],parseInline:[{name:\"Strikethrough\",parse(O,e,t){if(e!=126||O.char(t+1)!=126||O.char(t+2)==126)return-1;let i=O.slice(t-1,t),r=O.slice(t+2,t+3),n=/\\s|^$/.test(i),s=/\\s|^$/.test(r),a=Rr.test(i),o=Rr.test(r);return O.addDelimiter(Nx,t,t+2,!s&&(!o||n||a),!n&&(!a||s||o))},after:\"Emphasis\"}]};function Yr(O,e,t=0,i,r=0){let n=0,s=!0,a=-1,o=-1,l=!1,c=()=>{i.push(O.elt(\"TableCell\",r+a,r+o,O.parser.parseInline(e.slice(a,o),r+a)))};for(let h=t;h<e.length;h++){let f=e.charCodeAt(h);f==124&&!l?((!s||a>-1)&&n++,s=!1,i&&(a>-1&&c(),i.push(O.elt(\"TableDelimiter\",h+r,h+r+1))),a=o=-1):(l||f!=32&&f!=9)&&(a<0&&(a=h),o=h+1),l=!l&&f==92}return a>-1&&(n++,i&&c()),n}function zp(O,e){for(let t=e;t<O.length;t++){let i=O.charCodeAt(t);if(i==124)return!0;i==92&&t++}return!1}var lm=/^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/,qs=class{constructor(){this.rows=null}nextLine(e,t,i){if(this.rows==null){this.rows=!1;let r;if((t.next==45||t.next==58||t.next==124)&&lm.test(r=t.text.slice(t.pos))){let n=[];Yr(e,i.content,0,n,i.start)==Yr(e,r,t.pos)&&(this.rows=[e.elt(\"TableHeader\",i.start,i.start+i.content.length,n),e.elt(\"TableDelimiter\",e.lineStart+t.pos,e.lineStart+t.text.length)])}}else if(this.rows){let r=[];Yr(e,t.text,t.pos,r,e.lineStart),this.rows.push(e.elt(\"TableRow\",e.lineStart+t.pos,e.lineStart+t.text.length,r))}return!1}finish(e,t){return this.rows?(e.addLeafElement(t,e.elt(\"Table\",t.start,t.start+t.content.length,this.rows)),!0):!1}},Hx={defineNodes:[{name:\"Table\",block:!0},{name:\"TableHeader\",style:{\"TableHeader/...\":d.heading}},\"TableRow\",{name:\"TableCell\",style:d.content},{name:\"TableDelimiter\",style:d.processingInstruction}],parseBlock:[{name:\"Table\",leaf(O,e){return zp(e.content,0)?new qs:null},endLeaf(O,e,t){if(t.parsers.some(r=>r instanceof qs)||!zp(e.text,e.basePos))return!1;let i=O.peekLine();return lm.test(i)&&Yr(O,e.text,e.basePos)==Yr(O,i,e.basePos)},before:\"SetextHeading\"}]},vc=class{nextLine(){return!1}finish(e,t){return e.addLeafElement(t,e.elt(\"Task\",t.start,t.start+t.content.length,[e.elt(\"TaskMarker\",t.start,t.start+3),...e.parser.parseInline(t.content.slice(3),t.start+3)])),!0}},Kx={defineNodes:[{name:\"Task\",block:!0,style:d.list},{name:\"TaskMarker\",style:d.atom}],parseBlock:[{name:\"TaskList\",leaf(O,e){return/^\\[[ xX]\\][ \\t]/.test(e.content)&&O.parentType().name==\"ListItem\"?new vc:null},after:\"SetextHeading\"}]},Up=/(www\\.)|(https?:\\/\\/)|([\\w.+-]{1,100}@)|(mailto:|xmpp:)/gy,Wp=/[\\w-]+(\\.[\\w-]+)+(\\/[^\\s<]*)?/gy,Jx=/[\\w-]+\\.[\\w-]+($|\\/)/,jp=/[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy,Cp=/\\/[a-zA-Z\\d@.]+/gy;function Gp(O,e,t,i){let r=0;for(let n=e;n<t;n++)O[n]==i&&r++;return r}function ek(O,e){Wp.lastIndex=e;let t=Wp.exec(O);if(!t||Jx.exec(t[0])[0].indexOf(\"_\")>-1)return-1;let i=e+t[0].length;for(;;){let r=O[i-1],n;if(/[?!.,:*_~]/.test(r)||r==\")\"&&Gp(O,e,i,\")\")>Gp(O,e,i,\"(\"))i--;else if(r==\";\"&&(n=/&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(O.slice(e,i))))i=e+n.index;else break}return i}function Ep(O,e){jp.lastIndex=e;let t=jp.exec(O);if(!t)return-1;let i=t[0][t[0].length-1];return i==\"_\"||i==\"-\"?-1:e+t[0].length-(i==\".\"?1:0)}var tk={parseInline:[{name:\"Autolink\",parse(O,e,t){let i=t-O.offset;if(i&&/\\w/.test(O.text[i-1]))return-1;Up.lastIndex=i;let r=Up.exec(O.text),n=-1;if(!r)return-1;if(r[1]||r[2]){if(n=ek(O.text,i+r[0].length),n>-1&&O.hasOpenLink){let s=/([^\\[\\]]|\\[[^\\]]*\\])*/.exec(O.text.slice(i,n));n=i+s[0].length}}else r[3]?n=Ep(O.text,i):(n=Ep(O.text,i+r[0].length),n>-1&&r[0]==\"xmpp:\"&&(Cp.lastIndex=n,r=Cp.exec(O.text),r&&(n=r.index+r[0].length)));return n<0?-1:(O.addElement(O.elt(\"URL\",t,n+O.offset)),n+O.offset)}}]},cm=[Hx,Kx,Fx,tk];function hm(O,e,t){return(i,r,n)=>{if(r!=O||i.char(n+1)==O)return-1;let s=[i.elt(t,n,n+1)];for(let a=n+1;a<i.end;a++){let o=i.char(a);if(o==O)return i.addElement(i.elt(e,n,a+1,s.concat(i.elt(t,a,a+1))));if(o==92&&s.push(i.elt(\"Escape\",a,a+++2)),ot(o))break}return-1}}var fm={defineNodes:[{name:\"Superscript\",style:d.special(d.content)},{name:\"SuperscriptMark\",style:d.processingInstruction}],parseInline:[{name:\"Superscript\",parse:hm(94,\"Superscript\",\"SuperscriptMark\")}]},dm={defineNodes:[{name:\"Subscript\",style:d.special(d.content)},{name:\"SubscriptMark\",style:d.processingInstruction}],parseInline:[{name:\"Subscript\",parse:hm(126,\"Subscript\",\"SubscriptMark\")}]},um={defineNodes:[{name:\"Emoji\",style:d.character}],parseInline:[{name:\"Emoji\",parse(O,e,t){let i;return e!=58||!(i=/^[a-zA-Z_0-9]+:/.exec(O.slice(t+1,O.end)))?-1:O.addElement(O.elt(\"Emoji\",t,t+1+i[0].length))}}]};var pm=or({commentTokens:{block:{open:\"<!--\",close:\"-->\"}}}),mm=new R,gm=am.configure({props:[te.add(O=>!O.is(\"Block\")||O.is(\"Document\")||zc(O)!=null||Ok(O)?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),mm.add(zc),se.add({Document:()=>null}),iO.add({Document:pm})]});function zc(O){let e=/^(?:ATX|Setext)Heading(\\d)$/.exec(O.name);return e?+e[1]:void 0}function Ok(O){return O.name==\"OrderedList\"||O.name==\"BulletList\"}function ik(O,e){let t=O;for(;;){let i=t.nextSibling,r;if(!i||(r=zc(i.type))!=null&&r<=e)break;t=i}return t.to}var rk=Ho.of((O,e,t)=>{for(let i=U(O).resolveInner(t,-1);i&&!(i.from<e);i=i.parent){let r=i.type.prop(mm);if(r==null)continue;let n=ik(i,r);if(n>t)return{from:t,to:n}}return null});function Uc(O){return new Re(pm,O,[],\"markdown\")}var nk=Uc(gm),sk=gm.configure([cm,dm,fm,um,{props:[te.add({Table:(O,e)=>({from:e.doc.lineAt(O.from).to,to:O.to})})]}]),zs=Uc(sk);function ak(O,e){return t=>{if(t&&O){let i=null;if(t=/\\S*/.exec(t)[0],typeof O==\"function\"?i=O(t):i=ar.matchLanguageName(O,t,!0),i instanceof ar)return i.support?i.support.language.parser:nr.getSkippingParser(i.load());if(i)return i.parser}return e?e.parser:null}}var qr=class{constructor(e,t,i,r,n,s,a){this.node=e,this.from=t,this.to=i,this.spaceBefore=r,this.spaceAfter=n,this.type=s,this.item=a}blank(e,t=!0){let i=this.spaceBefore+(this.node.name==\"Blockquote\"?\">\":\"\");if(e!=null){for(;i.length<e;)i+=\" \";return i}else{for(let r=this.to-this.from-i.length-this.spaceAfter.length;r>0;r--)i+=\" \";return i+(t?this.spaceAfter:\"\")}}marker(e,t){let i=this.node.name==\"OrderedList\"?String(+Sm(this.item,e)[2]+t):\"\";return this.spaceBefore+i+this.type+this.spaceAfter}};function Pm(O,e){let t=[],i=[];for(let r=O;r;r=r.parent){if(r.name==\"FencedCode\")return i;(r.name==\"ListItem\"||r.name==\"Blockquote\")&&t.push(r)}for(let r=t.length-1;r>=0;r--){let n=t[r],s,a=e.lineAt(n.from),o=n.from-a.from;if(n.name==\"Blockquote\"&&(s=/^ *>( ?)/.exec(a.text.slice(o))))i.push(new qr(n,o,o+s[0].length,\"\",s[1],\">\",null));else if(n.name==\"ListItem\"&&n.parent.name==\"OrderedList\"&&(s=/^( *)\\d+([.)])( *)/.exec(a.text.slice(o)))){let l=s[3],c=s[0].length;l.length>=4&&(l=l.slice(0,l.length-4),c-=4),i.push(new qr(n.parent,o,o+c,s[1],l,s[2],n))}else if(n.name==\"ListItem\"&&n.parent.name==\"BulletList\"&&(s=/^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(a.text.slice(o)))){let l=s[4],c=s[0].length;l.length>4&&(l=l.slice(0,l.length-4),c-=4);let h=s[2];s[3]&&(h+=s[3].replace(/[xX]/,\" \")),i.push(new qr(n.parent,o,o+c,s[1],l,h,n))}}return i}function Sm(O,e){return/^(\\s*)(\\d+)(?=[.)])/.exec(e.sliceString(O.from,O.from+10))}function Vc(O,e,t,i=0){for(let r=-1,n=O;;){if(n.name==\"ListItem\"){let a=Sm(n,e),o=+a[2];if(r>=0){if(o!=r+1)return;t.push({from:n.from+a[1].length,to:n.from+a[0].length,insert:String(r+2+i)})}r=o}let s=n.nextSibling;if(!s)break;n=s}}function Wc(O,e){let t=/^[ \\t]*/.exec(O)[0].length;if(!t||e.facet(nO)!=\"\t\")return O;let i=ve(O,4,t),r=\"\";for(let n=i;n>0;)n>=4?(r+=\"\t\",n-=4):(r+=\" \",n--);return r+O.slice(t)}var ok=(O={})=>({state:e,dispatch:t})=>{let i=U(e),{doc:r}=e,n=null,s=e.changeByRange(a=>{if(!a.empty||!zs.isActiveAt(e,a.from,-1)&&!zs.isActiveAt(e,a.from,1))return n={range:a};let o=a.from,l=r.lineAt(o),c=Pm(i.resolveInner(o,-1),r);for(;c.length&&c[c.length-1].from>o-l.from;)c.pop();if(!c.length)return n={range:a};let h=c[c.length-1];if(h.to-h.spaceAfter.length>o-l.from)return n={range:a};let f=o>=h.to-h.spaceAfter.length&&!/\\S/.test(l.text.slice(h.to));if(h.item&&f){let m=h.node.firstChild,g=h.node.getChild(\"ListItem\",\"ListItem\");if(m.to>=o||g&&g.to<o||l.from>0&&!/[^\\s>]/.test(r.lineAt(l.from-1).text)||O.nonTightLists===!1){let P=c.length>1?c[c.length-2]:null,y,X=\"\";P&&P.item?(y=l.from+P.from,X=P.marker(r,1)):y=l.from+(P?P.to:0);let x=[{from:y,to:o,insert:X}];return h.node.name==\"OrderedList\"&&Vc(h.item,r,x,-2),P&&P.node.name==\"OrderedList\"&&Vc(P.item,r,x),{range:S.cursor(y+X.length),changes:x}}else{let P=$m(c,e,l);return{range:S.cursor(o+P.length+1),changes:{from:l.from,insert:P+e.lineBreak}}}}if(h.node.name==\"Blockquote\"&&f&&l.from){let m=r.lineAt(l.from-1),g=/>\\s*$/.exec(m.text);if(g&&g.index==h.from){let P=e.changes([{from:m.from+g.index,to:m.to},{from:l.from+h.from,to:l.to}]);return{range:a.map(P),changes:P}}}let u=[];h.node.name==\"OrderedList\"&&Vc(h.item,r,u);let Q=h.item&&h.item.from<l.from,$=\"\";if(!Q||/^[\\s\\d.)\\-+*>]*/.exec(l.text)[0].length>=h.to)for(let m=0,g=c.length-1;m<=g;m++)$+=m==g&&!Q?c[m].marker(r,1):c[m].blank(m<g?ve(l.text,4,c[m+1].from)-$.length:null);let p=o;for(;p>l.from&&/\\s/.test(l.text.charAt(p-l.from-1));)p--;return $=Wc($,e),ck(h.node,e.doc)&&($=$m(c,e,l)+e.lineBreak+$),u.push({from:p,to:o,insert:e.lineBreak+$}),{range:S.cursor(p+$.length+1),changes:u}});return n?!1:(t(e.update(s,{scrollIntoView:!0,userEvent:\"input\"})),!0)},lk=ok();function Qm(O){return O.name==\"QuoteMark\"||O.name==\"ListMark\"}function ck(O,e){if(O.name!=\"OrderedList\"&&O.name!=\"BulletList\")return!1;let t=O.firstChild,i=O.getChild(\"ListItem\",\"ListItem\");if(!i)return!1;let r=e.lineAt(t.to),n=e.lineAt(i.from),s=/^[\\s>]*$/.test(r.text);return r.number+(s?0:1)<n.number}function $m(O,e,t){let i=\"\";for(let r=0,n=O.length-2;r<=n;r++)i+=O[r].blank(r<n?ve(t.text,4,O[r+1].from)-i.length:null,r<n);return Wc(i,e)}function hk(O,e){let t=O.resolveInner(e,-1),i=e;Qm(t)&&(i=t.from,t=t.parent);for(let r;r=t.childBefore(i);)if(Qm(r))i=r.from;else if(r.name==\"OrderedList\"||r.name==\"BulletList\")t=r.lastChild,i=t.to;else break;return t}var fk=({state:O,dispatch:e})=>{let t=U(O),i=null,r=O.changeByRange(n=>{let s=n.from,{doc:a}=O;if(n.empty&&zs.isActiveAt(O,n.from)){let o=a.lineAt(s),l=Pm(hk(t,s),a);if(l.length){let c=l[l.length-1],h=c.to-c.spaceAfter.length+(c.spaceAfter?1:0);if(s-o.from>h&&!/\\S/.test(o.text.slice(h,s-o.from)))return{range:S.cursor(o.from+h),changes:{from:o.from+h,to:s}};if(s-o.from==h&&(!c.item||o.from<=c.item.from||!/\\S/.test(o.text.slice(0,c.to)))){let f=o.from+c.from;if(c.item&&c.node.from<c.item.from&&/\\S/.test(o.text.slice(c.from,c.to))){let u=c.blank(ve(o.text,4,c.to)-ve(o.text,4,c.from));return f==o.from&&(u=Wc(u,O)),{range:S.cursor(f+u.length),changes:{from:f,to:o.from+c.to,insert:u}}}if(f<s)return{range:S.cursor(f),changes:{from:f,to:s}}}}}return i={range:n}});return i?!1:(e(O.update(r,{scrollIntoView:!0,userEvent:\"delete\"})),!0)},dk=[{key:\"Enter\",run:lk},{key:\"Backspace\",run:fk}],Xm=Ti({matchClosingTags:!1});function Tm(O={}){let{codeLanguages:e,defaultCodeLanguage:t,addKeymap:i=!0,base:{parser:r}=nk,completeHTMLTags:n=!0,pasteURLAsLink:s=!0,htmlTagLanguage:a=Xm}=O;if(!(r instanceof _r))throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\");let o=O.extensions?[O.extensions]:[],l=[a.support,rk],c;s&&l.push(pk),t instanceof J?(l.push(t.support),c=t.language):t&&(c=t);let h=e||c?ak(e,c):void 0;o.push(om({codeParser:h,htmlParser:a.language.parser})),i&&l.push(ze.high(Xt.of(dk)));let f=Uc(r.configure(o));return n&&l.push(f.data.of({autocomplete:uk})),new J(f,l)}function uk(O){let{state:e,pos:t}=O,i=/<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(e.sliceDoc(t-25,t));if(!i)return null;let r=U(e).resolveInner(t,-1);for(;r&&!r.type.isTop;){if(r.name==\"CodeBlock\"||r.name==\"FencedCode\"||r.name==\"ProcessingInstructionBlock\"||r.name==\"CommentBlock\"||r.name==\"Link\"||r.name==\"Image\")return null;r=r.parent}return{from:t-i[0].length,to:t,options:Qk(),validFor:/^<[:\\-\\.\\w\\u00b7-\\uffff]*$/}}var qc=null;function Qk(){if(qc)return qc;let O=bp(new $i(I.create({extensions:Xm}),0,!0));return qc=O?O.options:[]}var $k=/code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i,pk=T.domEventHandlers({paste:(O,e)=>{var t;let{main:i}=e.state.selection;if(i.empty)return!1;let r=(t=O.clipboardData)===null||t===void 0?void 0:t.getData(\"text/plain\");if(!r||!/^(https?:\\/\\/|mailto:|xmpp:|www\\.)/.test(r)||(/^www\\./.test(r)&&(r=\"https://\"+r),!zs.isActiveAt(e.state,i.from,1)))return!1;let n=U(e.state),s=!1;return n.iterate({from:i.from,to:i.to,enter:a=>{(a.from>i.from||$k.test(a.name))&&(s=!0)},leave:a=>{a.to<i.to&&(s=!0)}}),s?!1:(e.dispatch({changes:[{from:i.from,insert:\"[\"},{from:i.to,insert:`](${r})`}],userEvent:\"input.paste\",scrollIntoView:!0}),!0)}});var mk=1,gk=2,Pk=275,Sk=3,Xk=276,bm=277,Tk=278,bk=4,yk=5,xk=6,kk=7,ym=8,wk=9,Zk=10,vk=11,Yk=12,_k=13,Rk=14,Vk=15,qk=16,zk=17,Uk=18,Wk=19,jk=20,Ck=21,Gk=22,Ek=23,Ak=24,Lk=25,Mk=26,Dk=27,Ik=28,Bk=29,Nk=30,Fk=31,Hk=32,Kk=33,Jk=34,ew=35,tw=36,Ow=37,iw=38,rw=39,nw=40,sw=41,aw=42,ow=43,lw=44,cw=45,hw=46,fw=47,dw=48,uw=49,Qw=50,$w=51,pw=52,mw=53,gw=54,Pw=55,Sw=56,Xw=57,Tw=58,bw=59,yw=60,xw=61,kw=62,jc=63,ww=64,Zw=65,vw=66,Yw={abstract:bk,and:yk,array:xk,as:kk,true:ym,false:ym,break:wk,case:Zk,catch:vk,clone:Yk,const:_k,continue:Rk,declare:qk,default:Vk,do:zk,echo:Uk,else:Wk,elseif:jk,enddeclare:Ck,endfor:Gk,endforeach:Ek,endif:Ak,endswitch:Lk,endwhile:Mk,enum:Dk,extends:Ik,final:Bk,finally:Nk,fn:Fk,for:Hk,foreach:Kk,from:Jk,function:ew,global:tw,goto:Ow,if:iw,implements:rw,include:nw,include_once:sw,instanceof:aw,insteadof:ow,interface:lw,list:cw,match:hw,namespace:fw,new:dw,null:uw,or:Qw,print:$w,readonly:pw,require:mw,require_once:gw,return:Pw,switch:Sw,throw:Xw,trait:Tw,try:bw,unset:yw,use:xw,var:kw,public:jc,private:jc,protected:jc,while:ww,xor:Zw,yield:vw,__proto__:null};function xm(O){let e=Yw[O.toLowerCase()];return e??-1}function km(O){return O==9||O==10||O==13||O==32}function wm(O){return O>=97&&O<=122||O>=65&&O<=90}function zr(O){return O==95||O>=128||wm(O)}function Cc(O){return O>=48&&O<=55||O>=97&&O<=102||O>=65&&O<=70}var _w={int:!0,integer:!0,bool:!0,boolean:!0,float:!0,double:!0,real:!0,string:!0,array:!0,object:!0,unset:!0,__proto__:null},Rw=new z(O=>{if(O.next==40){O.advance();let e=0;for(;km(O.peek(e));)e++;let t=\"\",i;for(;wm(i=O.peek(e));)t+=String.fromCharCode(i),e++;for(;km(O.peek(e));)e++;O.peek(e)==41&&_w[t.toLowerCase()]&&O.acceptToken(mk)}else if(O.next==60&&O.peek(1)==60&&O.peek(2)==60){for(let i=0;i<3;i++)O.advance();for(;O.next==32||O.next==9;)O.advance();let e=O.next==39;if(e&&O.advance(),!zr(O.next))return;let t=String.fromCharCode(O.next);for(;O.advance(),!(!zr(O.next)&&!(O.next>=48&&O.next<=55));)t+=String.fromCharCode(O.next);if(e){if(O.next!=39)return;O.advance()}if(O.next!=10&&O.next!=13)return;for(;;){let i=O.next==10||O.next==13;if(O.advance(),O.next<0)return;if(i){for(;O.next==32||O.next==9;)O.advance();let r=!0;for(let n=0;n<t.length;n++){if(O.next!=t.charCodeAt(n)){r=!1;break}O.advance()}if(r)return O.acceptToken(gk)}}}}),Vw=new z(O=>{O.next<0&&O.acceptToken(Tk)}),qw=new z((O,e)=>{O.next==63&&e.canShift(bm)&&O.peek(1)==62&&O.acceptToken(bm)});function zw(O){let e=O.peek(1);if(e==110||e==114||e==116||e==118||e==101||e==102||e==92||e==36||e==34||e==123)return 2;if(e>=48&&e<=55){let t=2,i;for(;t<5&&(i=O.peek(t))>=48&&i<=55;)t++;return t}if(e==120&&Cc(O.peek(2)))return Cc(O.peek(3))?4:3;if(e==117&&O.peek(2)==123)for(let t=3;;t++){let i=O.peek(t);if(i==125)return t==2?0:t+1;if(!Cc(i))break}return 0}var Uw=new z((O,e)=>{let t=!1;for(;!(O.next==34||O.next<0||O.next==36&&(zr(O.peek(1))||O.peek(1)==123)||O.next==123&&O.peek(1)==36);t=!0){if(O.next==92){let i=zw(O);if(i){if(t)break;return O.acceptToken(Sk,i)}}else if(!t&&(O.next==91||O.next==45&&O.peek(1)==62&&zr(O.peek(2))||O.next==63&&O.peek(1)==45&&O.peek(2)==62&&zr(O.peek(3)))&&e.canShift(Xk))break;O.advance()}t&&O.acceptToken(Pk)}),Ww=F({\"Visibility abstract final static\":d.modifier,\"for foreach while do if else elseif switch try catch finally return throw break continue default case\":d.controlKeyword,\"endif endfor endforeach endswitch endwhile declare enddeclare goto match\":d.controlKeyword,\"and or xor yield unset clone instanceof insteadof\":d.operatorKeyword,\"function fn class trait implements extends const enum global interface use var\":d.definitionKeyword,\"include include_once require require_once namespace\":d.moduleKeyword,\"new from echo print array list as\":d.keyword,null:d.null,Boolean:d.bool,VariableName:d.variableName,\"NamespaceName/...\":d.namespace,\"NamedType/...\":d.typeName,Name:d.name,\"CallExpression/Name\":d.function(d.variableName),\"LabelStatement/Name\":d.labelName,\"MemberExpression/Name\":d.propertyName,\"MemberExpression/VariableName\":d.special(d.propertyName),\"ScopedExpression/ClassMemberName/Name\":d.propertyName,\"ScopedExpression/ClassMemberName/VariableName\":d.special(d.propertyName),\"CallExpression/MemberExpression/Name\":d.function(d.propertyName),\"CallExpression/ScopedExpression/ClassMemberName/Name\":d.function(d.propertyName),\"MethodDeclaration/Name\":d.function(d.definition(d.variableName)),\"FunctionDefinition/Name\":d.function(d.definition(d.variableName)),\"ClassDeclaration/Name\":d.definition(d.className),UpdateOp:d.updateOperator,ArithOp:d.arithmeticOperator,\"LogicOp IntersectionType/&\":d.logicOperator,BitOp:d.bitwiseOperator,CompareOp:d.compareOperator,ControlOp:d.controlOperator,AssignOp:d.definitionOperator,\"$ ConcatOp\":d.operator,LineComment:d.lineComment,BlockComment:d.blockComment,Integer:d.integer,Float:d.float,String:d.string,ShellExpression:d.special(d.string),\"=> ->\":d.punctuation,\"( )\":d.paren,\"#[ [ ]\":d.squareBracket,\"${ { }\":d.brace,\"-> ?->\":d.derefOperator,\", ; :: : \\\\\":d.separator,\"PhpOpen PhpClose\":d.processingInstruction}),jw={__proto__:null,static:325,STATIC:325,class:351,CLASS:351},Zm=Oe.deserialize({version:14,states:\"%#[Q`OWOOQhQaOOP%oO`OOOOO#t'#Hh'#HhO%tO#|O'#DuOOO#u'#Dx'#DxQ&SOWO'#DxO&XO$VOOOOQ#u'#Dy'#DyO&lQaO'#D}O'[QdO'#EQO+QQdO'#IqO+_QdO'#ERO-RQaO'#EXO/bQ`O'#EUO/gQ`O'#E_O2UQaO'#E_O2]Q`O'#EgO2bQ`O'#EqO-RQaO'#EqO2mQpO'#FOO2rQ`O'#FOOOQS'#Iq'#IqO2wQ`O'#ExOOQS'#Ih'#IhO5SQdO'#IeO9UQeO'#F]O-RQaO'#FlO-RQaO'#FmO-RQaO'#FnO-RQaO'#FoO-RQaO'#FoO-RQaO'#FrOOQO'#Ir'#IrO9cQ`O'#FxOOQO'#Ht'#HtO9kQ`O'#HXO:VQ`O'#FsO:bQ`O'#HfO:mQ`O'#GPO:uQaO'#GQO-RQaO'#G`O-RQaO'#GcO;bOrO'#GfOOQS'#JP'#JPOOQS'#JO'#JOOOQS'#Ie'#IeO/bQ`O'#GmO/bQ`O'#GoO/bQ`O'#GtOhQaO'#GvO;iQ`O'#GwO;nQ`O'#GzO:]Q`O'#G}O;sQeO'#HOO;sQeO'#HPO;sQeO'#HQO;}Q`O'#HRO<SQ`O'#HTO<XQaO'#HUO>hQ`O'#HVO:]Q`O'#HWO>mQ`O'#HWO;}Q`O'#HXO:]Q`O'#HZO:]Q`O'#H[O:]Q`O'#H]O>rQ`O'#H`O>}Q`O'#HaO<XQaO'#HeOOQ#u'#Ic'#IcOOQ#u'#Hj'#HjQhQaOOO:]Q`O'#HYO:QQ`O'#HYO?]O#|O'#DsPOOO)CDT)CDTOOO#t-E;f-E;fOOO#u,5:d,5:dOOO#u'#Hi'#HiO&XO$VOOO?hQ$VO'#IbOOOO'#Ib'#IbQOOOOOOOQ#y,5:i,5:iO?oQaO,5:iOOQ#u,5:k,5:kO?vQaO,5:nO?}QaO,5;VO@UQpO,5;WOBsQaO'#EuOOQS,5;`,5;`OBzQ`O,5;pOOQP'#Fd'#FdO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xO-RQaO,5;xOOQ#u'#Iv'#IvOOQS,5<z,5<zOOQ#u,5:m,5:mODsQ`O,5:sODzQ`O'#FsOESQ`O'#FsOE[Q`O,5:pOEaQaO'#E`OOQS,5:y,5:yOGeQ`O'#IjO<XQaO'#EbO<XQaO'#IjOOQS'#Ij'#IjOGlQ`O'#IiOGtQ`O,5:yO/lQaO,5:yOGyQaO'#EhOOQS,5;R,5;ROOQS,5;],5;]OHTQ`O,5;]OHsQdO'#FQOJxQ`O'#HrO2mQpO,5;jOOQS,5;j,5;jOJ}QpO,5;jOKSQtO'#EQOKaQpO,5;dO2wQ`O'#E|OOQS'#E}'#E}OOQS'#Ip'#IpOKlQaO,5:xO-RQaO,5;uOOQS,5;w,5;wO-RQaO,5;wOKsQdO,5<WOLTQdO,5<XOLeQdO,5<YOLuQdO,5<ZON|QdO,5<ZO! TQdO,5<^O! eQ`O'#FyO! pQ`O'#IuO! xQ`O,5<dOOQO-E;r-E;rO! }Q`O'#I}O:]Q`O,5=rO!!VQ`O,5=rO;}Q`O,5=sO:]Q`O,5=wO:]Q`O,5=tO!![Q`O,5=tOOQS'#EQ'#EQO!!aQ`O'#FuO!!wQ`O,5<_O!#SQ`O,5<_O!#[Q`O,5?iO!#aQ`O,5<_O!#iQ`O,5<kO!#qQdO'#GYO!$PQdO'#I|O!$[QdO,5>QO!$dQ`O,5<kO!#[Q`O,5<kO!$lQdO,5<lO!$|Q`O,5<lO!%[Q`O,5<lO!%rQdO,5<zO!'wQdO,5<}O!(XOrO'#IPOOOQ'#JS'#JSO-RQaO'#GkOOOQ'#IP'#IPO!(yOrO,5=QOOQS,5=Q,5=QO!)QQaO,5=XO!)XQ`O,5=ZO!)aQeO,5=`O!)kQ`O,5=bO!)pQaO'#GxO!)aQeO,5=cO<XQaO'#G{O!)aQeO,5=fO!$[QdO,5=iO+_QdO,5=jOOQ#u,5=j,5=jO+_QdO,5=kOOQ#u,5=k,5=kO+_QdO,5=lOOQ#u,5=l,5=lO!)wQ`O,5=mO:]Q`O,5=oO!*PQdO'#JUOOQS'#JU'#JUO!$[QdO,5=pO!+iQaO,5=qO!-xQ`O'#GWO!-}QdO'#I{O!$[QdO,5=rOOQ#u,5=s,5=sO!.YQ`O,5=uO!.]Q`O,5=vO!.bQ`O,5=wO!.mQdO,5=zOOQ#u,5=z,5=zO2mQpO,5={O!.xQ`O,5={O!.}QdO'#JVO!$[QdO,5={O!/]Q`O,5={O!/eQdO'#IgO!$[QdO,5>POOQ#u-E;h-E;hO!1QQ`O,5=tOOO#u,5:_,5:_O!1]O#|O,5:_OOO#u-E;g-E;gOOOO,5>|,5>|OOQ#y1G0T1G0TO!1eQ`O1G0YO-RQaO1G0YO!2wQ`O1G0qOOQS1G0q1G0qOOQS'#Eo'#EoOOQS'#Il'#IlO-RQaO'#IlOOQS1G0r1G0rO!4ZQ`O'#IoO!5pQ`O'#IqO!5}QaO'#EwOOQO'#Io'#IoO!6XQ`O'#InO!6aQ`O,5;aO-RQaO'#FXOOQS'#FW'#FWOOQS1G1[1G1[O!6fQdO1G1dO!8kQdO1G1dO!:WQdO1G1dO!;sQdO1G1dO!=`QdO1G1dO!>{QdO1G1dO!@hQdO1G1dO!BTQdO1G1dO!CpQdO1G1dO!E]QdO1G1dO!FxQdO1G1dO!HeQdO1G1dO!JQQdO1G1dO!KmQdO1G1dO!MYQdO1G1dO!NuQdO1G1dOOQT1G0_1G0_O!#[Q`O,5<_O#!bQaO'#EYOOQS1G0[1G0[O#!iQ`O,5:zOEdQaO,5:zO#!nQaO,5;OO#!uQdO,5:|O#$tQdO,5?UO#&sQaO'#HmO#'TQ`O,5?TOOQS1G0e1G0eO#']Q`O1G0eO#'bQ`O'#IkO#(zQ`O'#IkO#)SQ`O,5;SOG|QaO,5;SOOQS1G0w1G0wOOQO,5>^,5>^OOQO-E;p-E;pOOQS1G1U1G1UO#)pQdO'#FQO#+uQ`O'#HsOJ}QpO1G1UO2wQ`O'#HpO#+zQtO,5;eO2wQ`O'#HqO#,iQtO,5;gO#-WQaO1G1OOOQS,5;h,5;hO#/gQtO'#FQO#/tQdO1G0dO-RQaO1G0dO#1aQdO1G1aO#2|QdO1G1cOOQO,5<e,5<eO#3^Q`O'#HuO#3lQ`O,5?aOOQO1G2O1G2OO:]Q`O,5?iO!$[QdO1G3^O:]Q`O1G3^OOQ#u1G3_1G3_O#3tQ`O1G3cO!1QQ`O1G3`O:]Q`O1G3`O#4PQpO'#FvO#4_Q`O'#FvO#4oQ`O'#FvO#4zQ`O'#FvO#5SQ`O'#FzO#5XQ`O'#F{OOQO'#It'#ItO#5`Q`O'#IsO#5hQ`O,5<aOOQS1G1y1G1yO2wQ`O1G1yO#5mQ`O1G1yO#5rQ`O1G1yO!#[Q`O1G5TO#5}QdO1G5TO!#[Q`O1G1yO#6]Q`O1G2VO!#[Q`O1G2VO<XQaO,5<tO#6eQdO'#H}O#6sQdO,5?hOOQ#u1G3l1G3lO-RQaO1G2VO2wQ`O1G2VO#7OQdO1G2WO9cQ`O'#GSO9cQ`O'#GTO#9bQ`O'#GUOOQS1G2W1G2WO!.]Q`O1G2WO!1TQ`O1G2WO!1QQ`O1G2WO!$|Q`O1G2WO:]O`O,5=RO#:[O`O,5=RO#:gO!bO,5=SO#:uQ`O,5=VOOOQ-E;}-E;}OOQS1G2l1G2lO#:|QaO'#GnO#;gQ$VO1G2sO#@gQ`O1G2sO#@rQ`O'#GpO#@}Q`O'#GsOOQ#u1G2u1G2uO#AYQ`O1G2uOOQ#u'#Gu'#GuOOQ#u'#JT'#JTOOQ#u1G2z1G2zO#A_Q`O1G2zO/bQ`O1G2|O#AdQaO,5=dO#AkQ`O,5=dOOQ#u1G2}1G2}O#ApQ`O1G2}O#AuQ`O,5=gOOQ#u1G3Q1G3QO#CXQ`O1G3QOOQ#u1G3T1G3TOOQ#u1G3U1G3UOOQ#u1G3V1G3VOOQ#u1G3W1G3WO#C^Q`O'#IUO;}Q`O'#IUO#CcQ$VO1G3XO#HiQ`O1G3ZO<XQaO'#ITO#HnQdO,5=eOOQ#u1G3[1G3[O#HyQ`O1G3]O<XQaO,5<rO#IOQdO'#H|O#I^QdO,5?gOOQ#u1G3^1G3^OOQ#u1G3a1G3aO!.]Q`O1G3aOOQ#u1G3b1G3bO#IiQ`O'#H^OOQ#u1G3c1G3cO#JfQ`O1G3cO#JkQ`O1G3cOOQ#u1G3f1G3fO#J|Q`O1G3gO#KRQpO1G3gO#KZQdO'#IWO#KlQdO,5?qO:]Q`O,5?qOOQ#u1G3g1G3gO2mQpO1G3gO#KwQ`O1G3gO!$[QdO1G3gO#K|QeO'#HkO#L^QdO,5?ROOQ#u1G3k1G3kOOQ#u1G3`1G3`O!.]Q`O1G3`O!1TQ`O1G3`OOO#u1G/y1G/yO-RQaO7+%tO#LlQdO7+%tOOQS7+&]7+&]O#NXQ`O,5?WO!+iQaO,5;bO#N`Q`O,5;cO$ uQaO'#HoO$!PQ`O,5?YOOQS1G0{1G0{O$!XQ`O,5;sO$!`Q`O'#EZO$!eQ`O'#IfO$!mQ`O,5:tOOQS1G0f1G0fO$!rQ`O1G0fO$!wQ`O1G0jO<XQaO1G0jOOQO,5>X,5>XOOQO-E;k-E;kOOQS7+&P7+&PO!+iQaO,5;TO$$^QaO'#HnO$$hQ`O,5?VOOQS1G0n1G0nO$$pQ`O1G0nPOQO'#FQ'#FQOOQO,5>_,5>_OOQO-E;q-E;qOOQS7+&p7+&pOOQS,5>[,5>[OOQS-E;n-E;nO$$uQtO,5>]OOQS-E;o-E;oO$%dQdO7+&jO$'iQtO'#FQO$'vQdO7+&OOOQS1G0j1G0jOOQO,5>a,5>aOOQO-E;s-E;sOOQ#u7+(x7+(xO!$[QdO7+(xOOQ#u7+(}7+(}O#JfQ`O7+(}O#JkQ`O7+(}OOQ#u7+(z7+(zO!.]Q`O7+(zO!1TQ`O7+(zO!1QQ`O7+(zO$)cQ`O,5<bO$)mQ`O,5<bO$)xQ`O,5<fO$)}QpO,5<bO$*]Q`O,5<bO!+iQaO,5<bOOQO,5<f,5<fO$*eQpO,5<gO$*pQ`O,5<gO$+OQ`O'#HwO$+iQ`O,5?_OOQS1G1{1G1{O$+qQpO7+'eO$+|Q`O'#GOO$,XQ`O7+'eOOQS7+'e7+'eO2wQ`O7+'eO#5mQ`O7+'eO$,aQdO7+*oO2wQ`O7+*oO$,oQ`O7+'eO-RQaO7+'qO2wQ`O7+'qO$,zQ`O7+'qO$-SQdO1G2`OOQS,5>i,5>iOOQS-E;{-E;{O$.lQdO7+'qO$.|QpO7+'qO$/XQdO'#IxOOQO,5<n,5<nOOQO,5<o,5<oO$/jQpO'#GXO$/uQ`O'#GXOOQO'#Iz'#IzOOQO'#H{'#H{O$0iQ`O'#GXO#JkQ`O'#GVO$1YQdO'#GXO!.mQdO'#GZO9cQ`O'#G[OOQO'#Iy'#IyOOQO'#Hz'#HzO$1eQ`O,5<pOOQ#y,5<p,5<pOOQS7+'r7+'rO!.]Q`O7+'rO!1TQ`O7+'rO!1QQ`O7+'rOOOQ1G2m1G2mO:]O`O1G2mO$2_O!bO1G2nO$2mO`O'#GiO$2rO`O1G2nOOOQ1G2q1G2qO$2wQaO,5=YO/bQ`O'#IQO$3bQ$VO7+(_OhQaO7+(_O/bQ`O'#IRO$8bQ`O7+(_O!$[QdO7+(_O$8mQ`O7+(_O$8rQaO'#GqO$;RQ`O'#GrOOQO'#IS'#ISO$;ZQ`O,5=[OOQ#u,5=[,5=[O$;fQ`O,5=_O!$[QdO7+(aO!$[QdO7+(fO!$[QdO7+(hO$;qQaO1G3OO$;xQ`O1G3OO$;}QaO1G3OO!$[QdO7+(iO<XQaO1G3RO!$[QdO7+(lO2wQ`O'#HSO;}Q`O,5>pOOQ#u,5>p,5>pOOQ#u-E<S-E<SO$<UQaO7+(uO$<mQdO,5>oOOQS-E<R-E<RO!$[QdO7+(wO$>VQdO1G2^OOQS,5>h,5>hOOQS-E;z-E;zOOQ#u7+({7+({O$?oQ`O'#GXO:]Q`O'#H_OOQO'#IV'#IVO$@fQ`O,5=xOOQ#u,5=x,5=xO$AcQ!bO'#EQO$AzQ!bO7+(}O$BYQpO7+)RO#KRQpO7+)RO$BbQ`O'#HbO!$[QdO7+)RO$BpQdO,5>rOOQS-E<U-E<UO$COQdO1G5]O$CZQ`O7+)RO#KRQpO7+)ROOQ#u7+)R7+)RO$C`QdO,5>VOOQS-E;i-E;iO$D{QdO<<I`OOQS1G4r1G4rO$FhQ`O1G0|OOQO,5>Z,5>ZOOQO-E;m-E;mOOQS1G1_1G1_O$8rQaO,5:uO$G}QaO'#HlO$H[Q`O,5?QOOQS1G0`1G0`OOQS7+&Q7+&QO$HdQ`O7+&UO$IyQ`O1G0oO$K`Q`O,5>YOOQO,5>Y,5>YOOQO-E;l-E;lOOQS7+&Y7+&YOOQS7+&U7+&UOOQ#u<<Ld<<LdOOQ#u<<Li<<LiO$AzQ!bO<<LiOOQ#u<<Lf<<LfO!.]Q`O<<LfO!1TQ`O<<LfO$LxQ`O1G1|O$MTQ`O1G2QO!+iQaO1G1|OOQO1G2Q1G2QO$MYQ`O1G1|O$MdQ`O1G1|O$NyQ`O1G2RO% XQ`O'#F|O!+iQaO1G2ROOQO1G2R1G2ROOQO,5>c,5>cOOQO-E;u-E;uOOQS<<KP<<KPO% aQ`O'#IwO% iQ`O'#IwO% nQ`O,5<jO2wQ`O<<KPO$+qQpO<<KPO% sQ`O<<KPO2wQ`O<<NZO% {QtO<<NZO#5mQ`O<<KPO%!^QdO<<K]O%!nQpO<<K]O-RQaO<<K]O2wQ`O<<K]O%!yQdO'#HyO%#bQdO,5?dO$1YQdO,5<sO$/jQpO,5<sO%#sQ`O,5<sO#JkQ`O,5<qO!.mQdO,5<uOOQO-E;y-E;yO%$dQ!bO,5<qO%$oQ!bO'#IqO!$[QdO,5<qOOQO,5<s,5<sOOQO,5<u,5<uO%$}QdO,5<vOOQO-E;x-E;xOOQ#y1G2[1G2[OOQS<<K^<<K^O!.]Q`O<<K^O!1TQ`O<<K^OOOQ7+(X7+(XO%%YO`O7+(YOOOO,5=T,5=TOOOQ7+(Y7+(YOhQaO,5>lOOQ#u-E<O-E<OOhQaO<<KyOOQ#u<<Ky<<KyO$8mQ`O,5>mOOQO-E<P-E<PO!$[QdO<<KyO$8mQ`O<<KyO%%_Q`O<<KyO%%dQ`O,5=]O%&yQaO,5=^OOQO-E<Q-E<QOOQ#u1G2v1G2vOOQ#u<<K{<<K{OOQ#u<<LQ<<LQOOQ#u<<LS<<LSOOQT7+(j7+(jO%'ZQ`O7+(jO%'`QaO7+(jO%'gQ`O7+(jOOQ#u<<LT<<LTO%'lQ`O7+(mO%)RQ`O7+(mOOQ#u<<LW<<LWO%)WQpO,5=nOOQ#u1G4[1G4[O%)fQ`O<<LaOOQ#u<<Lc<<LcO:]Q`O,5=yO%)kQdO,5=yOOQO-E<T-E<TOOQ#u1G3d1G3dO%)vQ!bO,5;eO%*XQ!bO,5;gO#JfQ`O<<LiO%*jQ!bO'#FQP%+OQpO<<LmO!$[QdO<<LmO%+WQ`O'#HcO9cQ`O'#HcO%+cQ`O'#JWO%+kQ`O,5=|OOQ#u<<Lm<<LmO:]Q`O1G4^O%+pQdO7+*wO$BYQpO<<LmO#KRQpO<<LmO%+{Q`O1G0aOOQO,5>W,5>WOOQO-E;j-E;jO!+iQaO,5;UOOQ#uANBTANBTO#JfQ`OANBTOOQ#uANBQANBQO!.]Q`OANBQO!+iQaO7+'hOOQO7+'l7+'lO%-bQ`O7+'hO%.wQ`O7+'hO%/SQ`O7+'lO!+iQaO7+'mOOQO7+'m7+'mO%/XQdO'#F}OOQO'#Hv'#HvO%/jQ`O,5<hOOQO,5<h,5<hO%/rQ`O7+'mO%1XQ`O'#HxO%1gQ`O,5?cO%1gQ`O,5?cOOQO1G2U1G2UO$+qQpOAN@kOOQSAN@kAN@kO2wQ`OAN@kO%1oQtOANCuO%2QQ`OAN@kO-RQaOAN@wO%2YQdOAN@wO%2jQpOAN@wOOQS,5>e,5>eOOQS-E;w-E;wOOQO1G2_1G2_O$1YQdO1G2_O$/jQpO1G2_O#JkQ`O1G2]O!.mQdO1G2aO%$dQ!bO1G2]O!$[QdO1G2]OOQO1G2a1G2aOOQO1G2]1G2]O%2uQaO'#G]OOQO1G2b1G2bOOQSAN@xAN@xO!.]Q`OAN@xOOOQ<<Kt<<KtOOQ#u1G4W1G4WOOQ#uANAeANAeOOQO1G4X1G4XO%4tQ`OANAeO!$[QdOANAeO%4yQaO1G2wO%5ZQaO1G2xOOQT<<LU<<LUO%5kQ`O<<LUO%5pQaO<<LUO-RQaO,5=hOOQT<<LX<<LXOOQO1G3Y1G3YO%5wQ`O1G3YO!)aQeOANA{O%5|QdO1G3eOOQO1G3e1G3eO%6XQ`O1G3eO%6aQ!bO,5>]O%6rQ!bO'#FQO!$[QdOANBXOOQ#uANBXANBXO:]Q`O,5=}O%7WQ`O,5=}O%7cQ`O'#IXO%7wQ`O,5?rOOQS1G3h1G3hOOQS7+)x7+)xP%+OQpOANBXO%8PQ`O1G0pOOQ#uG27oG27oOOQ#uG27lG27lO%9fQ`O<<KSO!+iQaO<<KSOOQO<<KW<<KWO%:{Q`O<<KXOOQO,5<i,5<iO-RQaO,5<iO%<bQ`O,5<iOOQO-E;t-E;tOOQO1G2S1G2SOOQO,5>d,5>dO%<jQ`O,5>dOOQO-E;v-E;vO%<oQ`O1G4}OOQSG26VG26VO$+qQpOG26VO2wQ`OG26VO%<wQdOG26cO-RQaOG26cOOQO7+'y7+'yO$1YQdO7+'yO%$dQ!bO7+'wO!$[QdO7+'wOOQO7+'{7+'{OOQO7+'w7+'wO%=XQ`OLD+}O%>hQ`O'#IqO%>rQ`O'#IhO!$[QdO'#IOO%@lQaO,5<wOOQO,5<w,5<wOOQSG26dG26dO!$[QdOG27POOQ#uG27PG27PO%BkQaO7+(cOOQTANApANApO%B{Q`OANApO%CQQ`O1G3SOOQO7+(t7+(tOOQ#uG27gG27gO%CXQ`OG27gOOQO7+)P7+)PO%C^Q`O7+)PO!$[QdO7+)POOQ#uG27sG27sOOQO1G3i1G3iO:]Q`O1G3iO%CfQ`O'#HdO9cQ`O'#HdOOQO,5>s,5>sOOQO-E<V-E<VP!$[QdOG27sO%CqQ`OAN@nO+_QdO1G2TOOQO1G2T1G2TO-RQaO1G2TOOQO1G4O1G4OOOQSLD+qLD+qO$+qQpOLD+qO%EWQdOLD+}OOQO<<Ke<<KeO!$[QdO<<KcOOQO<<Kc<<KcO:]Q`O,5<xO%EhQ`O,5<yOOQP,5>j,5>jOOQP-E;|-E;|OOQO1G2c1G2cOOQ#uLD,kLD,kOOQTG27[G27[O!$[QdOLD-RO!$[QdO<<LkOOQO<<Lk<<LkOOQO7+)T7+)TO:]Q`O,5>OO%EpQ`O,5>OPOQ#uLD-_LD-_OOQO7+'o7+'oO+_QdO7+'oOOQS!$( ]!$( ]OOQOAN@}AN@}OOQS1G2d1G2dOOQS1G2e1G2eO%E{QdO1G2eOOQ#u!$(!m!$(!mOOQOANBVANBVOOQO1G3j1G3jO:]Q`O1G3jOOQO<<KZ<<KZOOQS7+(P7+(POOQO7+)U7+)UO%FWQpO'#FOO%F]QpO'#FOO%FWQpO,5;jO%F]QpO,5;jO%FbQpO,5;jO%FgQpO,5;jO#JkQ`O'#E|O%FlQdO,5<lO%HbQaO,5;OO%FbQpO1G1UO%FgQpO1G1UO#JkQ`O'#HpO#JkQ`O'#HqO-RQaO1G0jO%HiQ`O'#FOO%HnQ`O'#FOO%HsQaO'#GQO#-WQaO'#G`O#-WQaO'#GcO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO#-WQaO,5;xO%H}QdO'#IjO%JmQdO'#IjO#-WQaO'#EbO#-WQaO'#IjO%LrQaO,5:xO#-WQaO,5;uO#-WQaO,5;wO%LyQdO,5<WO%NoQdO,5<XO&!eQdO,5<YO&$ZQdO,5<ZO&&PQdO,5<ZO&&aQdO,5<^O&(VQdO,5<}O#-WQaO1G0YO&){QdO1G1dO&+qQdO1G1dO&-gQdO1G1dO&/]QdO1G1dO&1RQdO1G1dO&2wQdO1G1dO&4mQdO1G1dO&6cQdO1G1dO&8XQdO1G1dO&9}QdO1G1dO&;sQdO1G1dO&=iQdO1G1dO&?_QdO1G1dO&ATQdO1G1dO&ByQdO1G1dO&DoQdO,5:|O&FeQdO,5?UO&HZQdO1G0dO#-WQaO1G0dO&JPQdO1G1aO&KuQdO1G1cO#-WQaO1G2VO#-WQaO7+%tO&MkQdO7+%tO' aQdO7+&OO#-WQaO7+'qO'#VQdO7+'qO'${QdO<<I`O'&qQdO<<K]O#-WQaO<<K]O#-WQaOAN@wO'(gQdOAN@wO'*]QdOG26cO#-WQaOG26cO',RQdOLD+}O'-wQaO,5;OO'/vQaO1G0jO'1rQdO'#IeO'2PQeO'#F]O'5vQeO'#F]O#-WQaO'#FlO'/vQaO'#FlO#-WQaO'#FmO'/vQaO'#FmO#-WQaO'#FnO'/vQaO'#FnO#-WQaO'#FoO'/vQaO'#FoO#-WQaO'#FoO'/vQaO'#FoO#-WQaO'#FrO'/vQaO'#FrO'9|QaO,5:nO':TQ`O,5<kO':]Q`O1G0YO'/vQaO1G1OO';oQ`O1G2VO';wQ`O7+'qO'<PQpO7+'qO'<[QpO<<K]O'<gQpOAN@wO'<rQaO'#GQO'/vQaO'#G`O'/vQaO'#GcO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO,5;xO'/vQaO'#EbO'/vQaO'#IjO'>tQaO,5:xO'/vQaO,5;uO'/vQaO,5;wO'@sQdO,5<WO'BxQdO,5<XO'D}QdO,5<YO'GSQdO,5<ZO'IXQdO,5<ZO'IxQdO,5<^O'K}QdO,5<}O'/vQaO1G0YO'NSQdO1G1dO(!XQdO1G1dO($^QdO1G1dO(&cQdO1G1dO((hQdO1G1dO(*mQdO1G1dO(,rQdO1G1dO(.wQdO1G1dO(0|QdO1G1dO(3RQdO1G1dO(5WQdO1G1dO(7]QdO1G1dO(9bQdO1G1dO(;gQdO1G1dO(=lQdO1G1dO(?qQdO,5:|O(AvQdO,5?UO(C{QdO1G0dO'/vQaO1G0dO(FQQdO1G1aO(HVQdO1G1cO'/vQaO1G2VO'/vQaO7+%tO(J[QdO7+%tO(LaQdO7+&OO'/vQaO7+'qO(NfQdO7+'qO)!kQdO<<I`O)$pQdO<<K]O'/vQaO<<K]O'/vQaOAN@wO)&uQdOAN@wO)(zQdOG26cO'/vQaOG26cO)+PQdOLD+}O)-UQaO,5;OO#-WQaO1G0jO)-]Q`O'#GPO)-eQpO,5;dO)-pQ`O,5<kO!#[Q`O,5<kO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O7+'qO2wQ`O<<K]O)-xQdO,5<lO)/}QdO'#IjO)1vQdO'#IeO)2dQaO,5:nO)2kQ`O,5<kO)2sQ`O1G0YO)4VQ`O1G2VO)4_Q`O7+'qO)4gQpO7+'qO)4rQpO<<K]O)4}QpOAN@wO2wQ`O'#ExO<XQaO'#FlO<XQaO'#FmO<XQaO'#FnO<XQaO'#FoO<XQaO'#FoO<XQaO'#FrO)5YQaO'#GQO<XQaO'#G`O<XQaO'#GcO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO<XQaO,5;xO)5dQ`O'#FsO-RQaO'#EbO-RQaO'#IjO)5lQaO,5:xO<XQaO,5;uO<XQaO,5;wO)5sQdO,5<WO)7rQdO,5<XO)9qQdO,5<YO);pQdO,5<ZO)=oQdO,5<ZO)>YQdO,5<^O)@XQdO,5<lO)BWQdO,5<}O)DVQ`O'#JUO)ElQ`O'#IgO<XQaO1G0YO)GRQdO1G1dO)IQQdO1G1dO)KPQdO1G1dO)MOQdO1G1dO)N}QdO1G1dO*!|QdO1G1dO*${QdO1G1dO*&zQdO1G1dO*(yQdO1G1dO**xQdO1G1dO*,wQdO1G1dO*.vQdO1G1dO*0uQdO1G1dO*2tQdO1G1dO*4sQdO1G1dO*6rQaO,5;OO*6yQdO,5:|O*7ZQdO,5?UO*7kQaO'#HmO*7{Q`O,5?TO*8TQdO1G0dO<XQaO1G0dO*:SQdO1G1aO*<RQdO1G1cO<XQaO1G2VO!+iQaO'#ITO*>QQ`O,5=eO*>YQaO'#HkO*>dQ`O,5?RO<XQaO7+%tO*>lQdO7+%tO*@kQ`O1G0jO!+iQaO1G0jO*BQQdO7+&OO<XQaO7+'qO*DPQdO7+'qO*FOQ`O,5>oO*GeQ`O,5>VO*HzQdO<<I`O*JyQ`O7+&UO*L`QdO<<K]O<XQaO<<K]O<XQaOAN@wO*N_QdOAN@wO+!^QdOG26cO<XQaOG26cO+$]QdOLD+}O+&[QaO,5;OO<XQaO1G0jO+&cQdO'#IjO+'PQ`O'#GPO+'XQ`O,5<kO!#[Q`O,5<kO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O7+'qO2wQ`O<<K]O+'aQdO'#IeO+'}QeO'#F]O+(nQeO'#F]O+*jQaO'#F]O+,SQaO'#F]O!+iQaO'#FlO!+iQaO'#FmO!+iQaO'#FnO!+iQaO'#FoO!+iQaO'#FoO!+iQaO'#FrO+-rQaO'#GQO!+iQaO'#G`O!+iQaO'#GcO+-|QaO,5:nO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO!+iQaO,5;xO+.TQ`O'#IjO$8rQaO'#EbO+/mQaOG26cO$8rQaO'#IjO+1iQ`O'#IiO+1qQaO,5:xO!+iQaO,5;uO!+iQaO,5;wO+1xQ`O,5<WO+3_Q`O,5<XO+4tQ`O,5<YO+6ZQ`O,5<ZO+7pQ`O,5<ZO+9VQ`O,5<^O+:lQ`O,5<kO+:tQ`O,5<lO+<ZQ`O,5<}O+=pQ`O1G0YO!+iQaO1G0YO+?SQ`O1G1dO+@iQ`O1G1dO+BOQ`O1G1dO+CeQ`O1G1dO+DzQ`O1G1dO+FaQ`O1G1dO+GvQ`O1G1dO+I]Q`O1G1dO+JrQ`O1G1dO+LXQ`O1G1dO+MnQ`O1G1dO, TQ`O1G1dO,!jQ`O1G1dO,$PQ`O1G1dO,%fQ`O1G1dO,&{Q`O1G0dO!+iQaO1G0dO,(bQ`O1G1aO,)wQ`O1G1cO,+^Q`O1G2VO$8rQaO,5<tO!+iQaO1G2VO!+iQaO7+%tO,+fQ`O7+%tO,,{Q`O7+&OO!+iQaO7+'qO,.bQ`O7+'qO,.jQ`O7+'qO,0PQpO7+'qO,0[Q`O<<I`O,1qQ`O<<K]O,3WQpO<<K]O!+iQaO<<K]O!+iQaOAN@wO,3cQ`OAN@wO,4xQpOAN@wO,5TQ`OG26cO!+iQaOG26cO,6jQ`OLD+}O,8PQaO,5;OO!+iQaO1G0jO,8WQ`O'#IjO$8rQaO'#FlO$8rQaO'#FmO$8rQaO'#FnO$8rQaO'#FoO$8rQaO'#FoO+/mQaO'#FoO$8rQaO'#FrO,9pQaO'#GQO,9zQaO'#GQO$8rQaO'#G`O+/mQaO'#G`O$8rQaO'#GcO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO$8rQaO,5;xO+/mQaO,5;xO,;|Q`O'#FsO!+iQaO'#EbO!+iQaO'#IjO,<UQaO,5:xO,<]QaO,5:xO$8rQaO,5;uO+/mQaO,5;uO$8rQaO,5;wO,>[QdO,5<WO,?}QdO,5<XO,ApQdO,5<YO,CcQdO,5<ZO,EUQdO,5<ZO,FwQ`O,5<ZO,HWQdO,5<^O,IyQdO,5<lO%=XQ`O,5<lO,KlQdO,5<}O$8rQaO1G0YO+/mQaO1G0YO,M_QdO1G1dO- QQ`O1G1dO-!aQdO1G1dO-$SQ`O1G1dO-%cQdO1G1dO-'UQ`O1G1dO-(eQdO1G1dO-*WQ`O1G1dO-+gQdO1G1dO--YQ`O1G1dO-.iQdO1G1dO-0[Q`O1G1dO-1kQdO1G1dO-3^Q`O1G1dO-4mQdO1G1dO-6`Q`O1G1dO-7oQdO1G1dO-9bQ`O1G1dO-:qQdO1G1dO-<dQ`O1G1dO-=sQdO1G1dO-?fQ`O1G1dO-@uQdO1G1dO-BhQ`O1G1dO-CwQdO1G1dO-EjQ`O1G1dO-FyQdO1G1dO-HlQ`O1G1dO-I{QdO1G1dO-KnQ`O1G1dO-L}Q`O,5:|O-NdQ`O,5?UO. yQdO1G0dO.#lQ`O1G0dO$8rQaO1G0dO+/mQaO1G0dO.${QdO1G1aO.&nQ`O1G1aO.'}QdO1G1cO$8rQaO1G2VO$8rQaO7+%tO+/mQaO7+%tO.)pQdO7+%tO.+cQ`O7+%tO.,rQdO7+&OO..eQ`O7+&OO$8rQaO7+'qO./tQdO7+'qO.1gQdO<<I`O.3YQ`O<<I`O.4iQdO<<K]O$8rQaO<<K]O$8rQaOAN@wO.6[QdOAN@wO.7}QdOG26cO$8rQaOG26cO.9pQdOLD+}O.;cQaO,5;OO.;jQaO,5;OO$8rQaO1G0jO+/mQaO1G0jO.=iQ`O'#IjO.>{QdO'#IjO.BbQ`O'#IeO.BoQ`O'#GPO.BwQaO,5:nO.COQ`O,5<kO.CWQdO'#GYO.CiQ`O,5<kO!#[Q`O,5<kO.CqQ`O1G0YO.ETQdO,5:|O.FvQdO,5?UO.HiQ`O1G2VO!#[Q`O1G2VO.HqQdO'#H}O.ISQdO,5?hO2wQ`O1G2VO2wQ`O7+'qO.IbQ`O7+'qO.IjQdO1G2`O.KVQpO7+'qO.KbQpO<<K]O2wQ`O<<K]O.KmQpOAN@wO.KxQdO'#IeO.LcQ`O'#IeO.NVQaO,5:nO.N^QaO,5:nO.NeQ`O,5<kO.NmQ`O7+'qO.NuQ`O1G0YO/!XQ`O1G0YO/#kQ`O1G2VO/#sQ`O7+'qO/#{QpO7+'qO/$WQpOAN@wO/$cQpO<<K]O/$nQpOAN@wO/$yQ`O'#GPO/%RQ`O'#FsO/%ZQ`O,5<kO/%cQdO'#I|O!#[Q`O,5<kO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O7+'qO2wQ`O<<K]O/%qQ`O'#GPO/%yQ`O,5<kO/&RQ`O,5<kO!#[Q`O,5<kO!#[Q`O1G2VO!#[Q`O1G2VO2wQ`O1G2VO2wQ`O<<K]O2wQ`O7+'qO2wQ`O<<K]O/&ZQ`O'#FsO/&cQ`O'#FsO/&kQ`O'#Fs\",stateData:\"/'Q~O!eOS!fOS'SOS!hQQ~O!jTO'TRO~OPgOQ|OS!lOU_OW}OX!XO[mO]!_O^!WO`![Oa!SOb!]Ok!dOm!lOowOp!TOq!UOsuOt!gOu!VOv!POxkOykO|!bO}aO!O^O!P!eO!QxO!R}O!TpO!VlO!WlO!X!YO!Y!QO!ZzO![!cO!]!ZO!^!^O!_!fO!a!`O!b!RO!djO!nWO!pXO!z]O#X`O#dhO#fbO#gcO#sdO$[oO$dnO$eoO$hqO$krO$u!kO%TyO%U!OO%W}O%X}O%`|O'WYO'u{O~O!h!mO~O'TRO!j!iX&|!iX'Q!iX~O!j!pO~O!e!qO!f!qO!h!mO'Q!tO'S!qO~PhO!o!vO~PhO!n!tX#T!tX#s#vX'P!tX!y!tX#P!tX!p!tX~OT!tXz!tX!S!tX!c!tX!r!tX!w!tX!z!tX#X!tX#a!tX#b!tX#y!tX$R!tX$S!tX$T!tX$U!tX$V!tX$X!tX$Y!tX$Z!tX$[!tX$]!tX$^!tX$_!tX%T!tX#O!tX#Y!tX!o!tXV!tX#|!tX$O!tXw!tX{!tX~P&sOT'eXz'eX!S'eX!c'eX!w'eX!z'eX#T'eX#X'eX#a'eX#b'eX#y'eX$R'eX$S'eX$T'eX$U'eX$V'eX$X'eX$Y'eX$Z'eX$['eX$]'eX$^'eX$_'eX%T'eX~O!r!xO!n'eX'P'eX~P)dOT#SOz#QO!S#TO!c#UO!n#bO!w!yO!z!|O#T#PO#X!zO#a!{O#b!{O#y#OO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO'P#bO~OPgOQ|OU_OW}O[mOowOs#fOxkOykO}aO!O^O!QxO!R}O!TpO!VlO!WlO!ZzO!djO!z]O#X`O#dhO#fbO#gcO#sdO$[oO$dnO$eoO$hqO%TyO%U!OO%W}O%X}O%`|O'WYO'u{O~O!z]O~O!z#iO~OP7wOQ|OU_OW}O[7zOo>uOs#fOx7xOy7xO}aO!O^O!Q8OO!R}O!T7}O!V7yO!W7yO!Z8QO!d:QO!z]O#T#mO#V#lO#X`O#dhO#fbO#gcO#sdO$[7|O$d7{O$e7|O$hqO%T8PO%U!OO%W}O%X}O%`|O'WYO'u{O#Y']P~O#O#qO~P/lO!z#rO~O#d#tO#fbO#gcO~O'a#vO~O#s#zO~OU$OO!R$OO!w#}O#s3hO'W#{O~OT'XXz'XX!S'XX!c'XX!n'XX!w'XX!z'XX#T'XX#X'XX#a'XX#b'XX#y'XX$R'XX$S'XX$T'XX$U'XX$V'XX$X'XX$Y'XX$Z'XX$['XX$]'XX$^'XX$_'XX%T'XX'P'XX!y'XX!o'XX~O#|$QO$O$RO~P3YOP7wOQ|OU_OW}O[7zOo>uOs#fOx7xOy7xO}aO!O^O!Q8OO!R}O!T7}O!V7yO!W7yO!Z8QO!d:QO!z]O#X`O#dhO#fbO#gcO#sdO$[7|O$d7{O$e7|O$hqO%T8PO%U!OO%W}O%X}O%`|O'WYO'u{OT$PXz$PX!S$PX!c$PX!n$PX!w$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX'P$PX!y$PX!o$PX~Or$TO#T8eO#V8dO~P5^O#sdO'WYO~OS$fO]$aOk$dOm$fOs$`O!a$bO$krO$u$eO~O!z$hO#T$jO'W$gO~Oo$mOs$lO#d$nO~O!z$hO#T$rO~O!U$uO$u$tO~P-ROR${O!p$zO#d$yO#g$zO&}${O~O't$}O~P;PO!z%SO~O!z%UO~O!n#bO'P#bO~P-RO!pXO~O!z%`O~OP7wOQ|OU_OW}O[7zOo>uOs#fOx7xOy7xO}aO!O^O!Q8OO!R}O!T7}O!V7yO!W7yO!Z8QO!d:QO!z]O#X`O#dhO#fbO#gcO#sdO$[7|O$d7{O$e7|O$hqO%T8PO%U!OO%W}O%X}O%`|O'WYO'u{O~O!z%dO~O]$aO~O!pXO#sdO'WYO~O]%rOs%rO#s%nO'WYO~O!j%wO'Q%wO'TRO~O'Q%zO~PhO!o%{O~PhO!r%}O~P<XO#Y&PO~P<XO!p&SO#d&RO'a&QO~OPgOQ|OU_OW}O[:WOo?jOs#fOx:UOy:UO}aO!O^O!Q:[O!R}O!T:ZO!V:VO!W:VO!Z:^O!d:TO!z]O#V&WO#X`O#dhO#fbO#gcO#sdO$[:YO$d:XO$e:YO$hqO%T:]O%U!OO%W}O%X}O%`|O'WYO'u{O~O!y'bP~P@aO!p&[O#d&]O'W$gO~OT#SOz#QO!S#TO!c#UO!w!yO!z!|O#T#PO#X!zO#a!{O#b!{O#y#OO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO~O!y&oO~PCVO!z$hO#T&pO~Oo$mOs$lO~O!p&qO~O#O&tO#T=PO#V=OO!y']P~P<XOT8TOz8RO!S8UO!c8VO!w:_O!z!|O#T#PO#X!zO#a!{O#b!{O#y#OO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O'^X#Y'^X~O#P&uO~PEqO#O&xO#Y']X~O#Y&zO~O#O'PO!y'_P~P<XO!o'QO~PCVO!n#uX#T#uX#s#tX'P#uX!y#uX#P#uX!p#uX~OT#uXz#uX!S#uX!c#uX!w#uX!z#uX#X#uX#a#uX#b#uX#y#uX$R#uX$S#uX$T#uX$U#uX$V#uX$X#uX$Y#uX$Z#uX$[#uX$]#uX$^#uX$_#uX%T#uX#O#uX#Y#uX!o#uXV#uX!r#uX#|#uX$O#uXw#uX~PH[O#s'RO~O'a'UO~O#n!tX#V!tX#d!tX~P&sO!y']O#T'ZO#n'XO~O#T'aO~P-RO!n$`a'P$`a!y$`a!o$`a~PCVO!n$aa'P$aa!y$aa!o$aa~PCVO!n$ba'P$ba!y$ba!o$ba~PCVO!n$ca'P$ca!y$ca!o$ca~PCVO!z!|O#X!zO#a!{O#b!{O#y#OO%T#cOT$ca!S$ca!c$ca!n$ca!w$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca'P$ca!y$ca!o$ca~Oz#QO~PMVO!n$fa'P$fa!y$fa!o$fa~PCVO!z!|O#O$mX#Y$mX~O#O'eO#Y'iX~O#Y'gO~O#T'hO'W$gO~O]'jO~O$u'nO~O!a'tO#T'rO#V'sO#d'qO$krO!y'gP~P2wO!_'zO!pXO!r'yO~O!z$hO'W$gO~O!z$hO~O!z$hO#T(OO~O!z$hO#T(QO~O#|(RO!n$|X#O$|X'P$|X~O#O(SO!n'pX'P'pX~O!n#bO'P#bO~O!r(WO#P(VO~O!n$ta'P$ta!y$ta!o$ta~PCVOl(YOw(ZO!p([O!z!|O~O$u(aO~O!z!|O#X!zO#a!{O#b!{O#y#OO~OT%Saz%Sa!S%Sa!c%Sa!n%Sa!w%Sa#T%Sa$R%Sa$S%Sa$T%Sa$U%Sa$V%Sa$X%Sa$Y%Sa$Z%Sa$[%Sa$]%Sa$^%Sa$_%Sa%T%Sa'P%Sa!y%Sa#O%Sa#P%Sa#Y%Sa!o%Sa!r%SaV%Sa#|%Sa$O%Sa!p%Sa~P!%aO!n%Va'P%Va!y%Va!o%Va~PCVO#X(dO#a(bO#b(bO'O(cOR&sX!p&sX#d&sX#g&sX&}&sX't&sX~O't(gO~P;PO!r(hO~PhO!p(kO!r(lO~O!r(hO'P(oO~PhO!b(sO~O!n(tO~P<XOZ)POn)QO~OT8TOz8RO!S8UO!c8VO!w:_O#O)TO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'xX'P'xX~P!%aOPgOQ|OU_OW}O[:WOo?jOs#fOx:UOy:UO}aO!O^O!Q:[O!R}O!T:ZO!V:VO!W:VO!Z:^O!d:TO!z]O#X`O#dhO#fbO#gcO#sdO$[:YO$d:XO$e:YO$hqO%T:]O%U!OO%W}O%X}O%`|O'WYO'u{O~O#|)XO~O#O)YO!n'oX'P'oX~Ol(YO!p([O~Ow(ZO!p)`O!r)cO~O!n#bO!pXO'P#bO~O#s)fO~OV)iO#O)gO!n'yX'P'yX~O#s)kO'WYO~OT8TOz8RO!S8UO!c8VO!w:_O#O)nO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'ZX'P'ZX#P'ZX~P!%aOl(YOw(ZO!p([O~O!j)tO'Q)tO~OT8TOz8RO!S8UO!c8VO!r)uO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO#Y)wO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'cX#O'cX~P!%aO!r)yO!y'eX#O'eX~P)dO!y#kX#O#kX~P!+iO#O){O!y'bX~O!y)}O~O%T#cOT$Qiz$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi$_$Qi'P$Qi!y$Qi#O$Qi#P$Qi#Y$Qi!o$Qi!r$QiV$Qi#|$Qi$O$Qi!p$Qi~P!%aOz#QO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi'P$Qi!y$Qi!o$Qi~P!%aOT#SOz#QO!c#UO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO!S$Qi!n$Qi'P$Qi!y$Qi!o$Qi~P!%aOT#SOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cO!S$Qi!c$Qi!n$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi$T$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO#T#PO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$[#_O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$Z#^O$[#_O$^#aO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi'P$Qi!y$Qi!o$Qi~P!%aOz#QO$_#aO%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi'P$Qi!y$Qi!o$Qi~P!%aO_*PO~P<XO!y*SO~O#T*VO~P<XOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O#Ua#Y#Ua#P#Ua!n#Ua'P#Ua!r#Ua!y#Ua!o#UaV#Ua!p#Ua~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O'^a#Y'^a#P'^a!n'^a'P'^a!r'^a!y'^a!o'^aV'^a!p'^a~P!%aO#T#mO#V#lO#O&aX#Y&aX~P<XO#O&xO#Y']a~O#Y*YO~OT8TOz8RO!S8UO!c8VO!w:_O#O*[O#P*ZO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y'_X~P!%aO#O*[O!y'_X~O!y*^O~O!n#wX#T#wX#s#tX'P#wX!y#wX#P#wX!p#wX~OT#wXz#wX!S#wX!c#wX!w#wX!z#wX#X#wX#a#wX#b#wX#y#wX$R#wX$S#wX$T#wX$U#wX$V#wX$X#wX$Y#wX$Z#wX$[#wX$]#wX$^#wX$_#wX%T#wX#O#wX#Y#wX!o#wXV#wX!r#wX#|#wX$O#wXw#wX~P#)XO#s*aO~O#n'XO!y#ma#T#ma#V#ma#d#ma!p#ma#P#ma!n#ma'P#ma~O#T'ZO!y#oa#n#oa#V#oa#d#oa!p#oa#P#oa!n#oa'P#oa~OPgOQ|OU_OW}O[5jOo7dOs#fOx5fOy5fO}aO!O^O!Q3xO!R}O!T5pO!V5hO!W5hO!Z3zO!d5dO!z]O#X`O#dhO#fbO#gcO#sdO$[5nO$d5lO$e5nO$hqO%T3yO%U!OO%W}O%X}O%`|O'WYO'u{O~O#n#uX#V#uX#d#uX~PH[Oz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT#Qi!S#Qi!c#Qi!n#Qi'P#Qi!y#Qi!o#Qi~P!%aOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT#}i!S#}i!c#}i!n#}i'P#}i!y#}i!o#}i~P!%aO!n$Pi'P$Pi!y$Pi!o$Pi~PCVO#sdO'WYO#O&iX#Y&iX~O#O'eO#Y'ia~Ow(ZO!p)`O!r*rO~O#T*wO#V*yO#d*xO#n'XO~O#T*{O#V*yO#d*xO$krO~P2wO#|*|O!y$jX#O$jX~O#V*yO#d*xO~O#d*}O~O#d+PO~P2wO#O+QO!y'gX~O!y+SO~O!z+UO~O!_+YO!pXO!r+XO~O!r+[O!p'qi!n'qi'P'qi~O!r+_O#P+^O~O#d$nO!n&qX#O&qX'P&qX~O#O(SO!n'pa'P'pa~OT$tiz$ti!S$ti!c$ti!n$ti!w$ti!z$ti#T$ti#X$ti#a$ti#b$ti#y$ti#|#ha$O#ha$R$ti$S$ti$T$ti$U$ti$V$ti$X$ti$Y$ti$Z$ti$[$ti$]$ti$^$ti$_$ti%T$ti'P$ti!y$ti#O$ti#P$ti#Y$ti!o$ti!r$tiV$ti!p$ti~OS+kO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o+uO#d>xO$hqO$krO~P2wO#X+|O#a+{O#b+{O~O#d,OO%W,OO%^+}O'W$gO~O!o,PO~PCVOc%bXd%bXh%bXj%bXf%bXg%bXe%bX~PhOc,TOd,ROP%aiQ%aiS%aiU%aiW%aiX%ai[%ai]%ai^%ai`%aia%aib%aik%aim%aio%aip%aiq%ais%ait%aiu%aiv%aix%aiy%ai|%ai}%ai!O%ai!P%ai!Q%ai!R%ai!T%ai!V%ai!W%ai!X%ai!Y%ai!Z%ai![%ai!]%ai!^%ai!_%ai!a%ai!b%ai!d%ai!n%ai!p%ai!z%ai#X%ai#d%ai#f%ai#g%ai#s%ai$[%ai$d%ai$e%ai$h%ai$k%ai$u%ai%T%ai%U%ai%W%ai%X%ai%`%ai&|%ai'W%ai'u%ai'Q%ai!o%aih%aij%aif%aig%aiY%ai_%aii%aie%ai~Oc,XOd,UOh,WO~OY,YO_,ZO!o,^O~OY,YO_,ZOi%gX~Oi,`O~Oj,aO~O!n,cO~P<XO!n,eO~Of,fO~OT8TOV,gOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOg,hO~O!z,iO~OZ)POn)QOP%uiQ%uiS%uiU%uiW%uiX%ui[%ui]%ui^%ui`%uia%uib%uik%uim%uio%uip%uiq%uis%uit%uiu%uiv%uix%uiy%ui|%ui}%ui!O%ui!P%ui!Q%ui!R%ui!T%ui!V%ui!W%ui!X%ui!Y%ui!Z%ui![%ui!]%ui!^%ui!_%ui!a%ui!b%ui!d%ui!n%ui!p%ui!z%ui#X%ui#d%ui#f%ui#g%ui#s%ui$[%ui$d%ui$e%ui$h%ui$k%ui$u%ui%T%ui%U%ui%W%ui%X%ui%`%ui&|%ui'W%ui'u%ui'Q%ui!o%uic%uid%uih%uij%uif%uig%uiY%ui_%uii%uie%ui~O#|,mO~O#O)TO!n%ma'P%ma~O!y,pO~O'W$gO!n&pX#O&pX'P&pX~O#O)YO!n'oa'P'oa~OS+kOY,vO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o,yO#d>xO$hqO$krO~P2wO!p)`O~OU$OO!R$OO!w3nO#s3iO'W,zO~O#s,|O~O!p-OO'a'UO~O#sdO'WYO!n&zX#O&zX'P&zX~O#O)gO!n'ya'P'ya~O#s-UO~O!n&_X#O&_X'P&_X#P&_X~P<XO#O)nO!n'Za'P'Za#P'Za~Oz#QO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT!vq!S!vq!c!vq!n!vq!w!vq'P!vq!y!vq!o!vq~P!%aO!o-ZO~PCVOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#ka#O#ka~P!%aO!y&cX#O&cX~P@aO#O){O!y'ba~O!o-_O~PCVO#P-`O~O#O-aO!o'YX~O!o-cO~O!y-dO~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O#Wi#Y#Wi~P!%aO!y&bX#O&bX~P<XO#O*[O!y'_a~O!y-jO~O#n'XO!y&ea#T&ea#V&ea#d&ea!p&ea#P&ea!n&ea'P&ea~OT#lqz#lq!S#lq!c#lq!n#lq!w#lq#T#lq#|#lq$O#lq$R#lq$S#lq$T#lq$U#lq$V#lq$X#lq$Y#lq$Z#lq$[#lq$]#lq$^#lq$_#lq%T#lq'P#lq!y#lq#O#lq#P#lq#Y#lq!o#lq!r#lqV#lq!p#lq~P!%aO#n#wX#V#wX#d#wX~P#)XOz#QO!w!yO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT#Qq!S#Qq!c#Qq!n#Qq'P#Qq!y#Qq!o#Qq~P!%aO#V-sO#d-rO~P2wO#|-tO!y$ja#O$ja~O#d-uO~O#T-vO#V-sO#d-rO#n'XO~O#V-sO#d-rO~O#T'ZO#d-xO#n'XO~O!p-yO#|-zO!y$oa#O$oa~O!a'tO#T'rO#V'sO#d'qO$krO!y&kX#O&kX~P2wO#O+QO!y'ga~O!pXO#T'ZO#n'XO~O#T.QO#d.PO!y'kP~O!pXO!r.SO~O!r.VO!p'qq!n'qq'P'qq~O!_.XO!pXO!r.SO~O!r.]O#P.[O~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n$|i#O$|i'P$|i~P!%aO!n$sq'P$sq!y$sq!o$sq~PCVO#P.[O#T'ZO#n'XO~O#O.^Ow'lX!p'lX!n'lX'P'lX~O#T'ZO#d>xO#n'XO~OS+kO].cOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO$krO~P2wOS+kO].cOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO~P2wO!n#bO!p-yO'P#bO~OS+kO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o.mO#d>xO$hqO$krO~P2wO#d.rO%W.rO%^+}O'W$gO~O%W.sO~O#Y.tO~Oc%bad%bah%baj%baf%bag%bae%ba~PhOc.wOd,ROP%aqQ%aqS%aqU%aqW%aqX%aq[%aq]%aq^%aq`%aqa%aqb%aqk%aqm%aqo%aqp%aqq%aqs%aqt%aqu%aqv%aqx%aqy%aq|%aq}%aq!O%aq!P%aq!Q%aq!R%aq!T%aq!V%aq!W%aq!X%aq!Y%aq!Z%aq![%aq!]%aq!^%aq!_%aq!a%aq!b%aq!d%aq!n%aq!p%aq!z%aq#X%aq#d%aq#f%aq#g%aq#s%aq$[%aq$d%aq$e%aq$h%aq$k%aq$u%aq%T%aq%U%aq%W%aq%X%aq%`%aq&|%aq'W%aq'u%aq'Q%aq!o%aqh%aqj%aqf%aqg%aqY%aq_%aqi%aqe%aq~Oc.|Od,UOh.{O~O!r(hO~OP7wOQ|OU_OW}O[<ROo?sOs#fOx<POy<PO}aO!O^O!Q<WO!R}O!T<VO!V<QO!W<QO!Z<[O!d:RO!z]O#X`O#dhO#fbO#gcO#sdO$[<TO$d<SO$e<TO$hqO%T<YO%U!OO%W}O%X}O%`|O'WYO'u{O~O!n/PO!r/PO~OY,YO_,ZO!o/RO~OY,YO_,ZOi%ga~O!y/VO~P!+iO!n/XO~O!n/XO~P<XOQ|OW}O!R}O%W}O%X}O%`|O'u{O~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n&wa#O&wa'P&wa~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n$zi#O$zi'P$zi~P!%aOS+kOY/cO].cOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO$krO~P2wOS+kOY,vO]+nOm+kOs$`O!U+kO!_+qO!`+kO!a+kO!o/fO#d>xO$hqO$krO~P2wOw!tX!p!tX#T!tX#n!tX#s#vX#|!tX'W!tX~Ow(ZO!p)`O#T3tO#n3sO~O!p-OO'a&fa~O]/nOs/nO#sdO'WYO~OV/rO!n&za#O&za'P&za~O#O)gO!n'yi'P'yi~O#s/tO~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n&_a#O&_a'P&_a#P&_a~P!%aOz#QO#T#PO$R#RO$S#VO$T#WO$U#XO$V#YO$X#[O$Y#]O$Z#^O$[#_O$]#`O$^#aO$_#aO%T#cOT!vy!S!vy!c!vy!n!vy!w!vy'P!vy!y!vy!o!vy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#ji#O#ji~P!%aO_*PO!o&`X#O&`X~P<XO#O-aO!o'Ya~OT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O#Wq#Y#Wq~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#]i#O#]i~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#P/yO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y&ba#O&ba~P!%aO#|0OO!y$ji#O$ji~O#d0PO~O#V0SO#d0RO~P2wOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ji#O$ji~P!%aO!p-yO#|0TO!y$oi#O$oi~O!o0YO'W$gO~O#O0[O!y'kX~O#d0^O~O!y0_O~O!pXO!r0bO~O#T'ZO#n'XO!p'qy!n'qy'P'qy~O!n$sy'P$sy!y$sy!o$sy~PCVO#P0eO#T'ZO#n'XO~O#sdO'WYOw&mX!p&mX#O&mX!n&mX'P&mX~O#O.^Ow'la!p'la!n'la'P'la~OS+kO]0mOm+kOs$`O!U+kO!`+kO!a+kO#d>xO$hqO~P2wO#T3tO#n3sO'W$gO~O#|)XO#T'eX#n'eX'W'eX~O!n#bO!p0sO'P#bO~O#Y0wO~Oh0|O~OT<aOz<]O!S<cO!c<eO!n0}O!r0}O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO~P!%aOY%fa_%fa!o%fai%fa~PhO!y1PO~O!y1PO~P!+iO!n1RO~OT8TOz8RO!S8UO!c8VO!w:_O!y1TO#P1SO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!y1TO~O!y1UO#T'ZO#d1VO#n'XO~O!y1WO~O!n#bO#|1ZO'P#bO~O#n3sOw#ma!p#ma#T#ma'W#ma~O#T3tOw#oa!p#oa#n#oa'W#oa~Ow#uX!p#uX#T#uX#n#uX#s#tX'W#uX~O!p-OO'a*`O~OV1`O!o&VX#O&VX~O#O1bO!o'zX~O!o1dO~O#O)gO!n'yq'P'yq~OT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!o!}i#O!}i~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$jq#O$jq~P!%aO#|1kO!y$jq#O$jq~O#d1lO~O!n#bO!pXO!z$hO#P1oO'P#bO~O!o1rO'W$gO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$oq#O$oq~P!%aO#T1tO#d1sO!y&lX#O&lX~O#O0[O!y'ka~O#T'ZO#n'XO!p'q!R!n'q!R'P'q!R~O!pXO!r1yO~O!n$s!R'P$s!R!y$s!R!o$s!R~PCVO#P1{O#T'ZO#n'XO~OP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!o2XO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOh2ZO~OY%ei_%ei!o%eii%ei~PhOY%fi_%fi!o%fii%fi~PhO!y2^O~O!y2^O~P!+iO!y2aO~O!n#bO#|2eO'P#bO~O%W2fO%`2fO~O#n3sOw&ea!p&ea#T&ea'W&ea~Ow#wX!p#wX#T#wX#n#wX#s#tX'W#wX~OV2iO!o&Va#O&Va~O]2kOs2kO#sdO'WYO!o&{X#O&{X~O#O1bO!o'za~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#^i#O#^i~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$jy#O$jy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$oy#O$oy~P!%aO!pXO#P2rO~O#d2sO~O#O0[O!y'ki~O!n$s!Z'P$s!Z!y$s!Z!o$s!Z~PCVOT<bOz<^O!S<dO!c<fO!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cO~P!%aOV2{O{2zO~P)dOV2{O{2zOT'[Xz'[X!S'[X!c'[X!w'[X!z'[X#T'[X#X'[X#a'[X#b'[X#y'[X#|'[X$O'[X$R'[X$S'[X$T'[X$U'[X$V'[X$X'[X$Y'[X$Z'[X$['[X$]'[X$^'[X$_'[X%T'[X~OP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!o3OO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOY%eq_%eq!o%eqi%eq~PhO!y3QO~O!y%pi~PCVOe3RO~O%W3SO%`3SO~OV3VO!o&WX#O&WX~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$j!R#O$j!R~P!%aO!n$s!c'P$s!c!y$s!c!o$s!c~PCVO!a3`O'W$gO~OV3dO!o&Wa#O&Wa~O'W$gO!n%Ri'P%Ri~O'a'_O~O'a/jO~O'a*iO~O'a1]O~OT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$ta#|$ta$O$ta'P$ta!y$ta!o$ta#O$ta~P!%aO#T3uO~P-RO#s3lO~O#s3mO~O!U$uO$u$tO~P#-WOT8TOz8RO!S8UO!c8VO!w:_O#P3pO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'^X'P'^X!y'^X!o'^X~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#P5aO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O'^X#Y'^X#|'^X$O'^X!n'^X'P'^X!r'^X!y'^X!o'^XV'^X!p'^X~P!%aO#T5OO~P#-WOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$`a#|$`a$O$`a'P$`a!y$`a!o$`a#O$`a~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$aa#|$aa$O$aa'P$aa!y$aa!o$aa#O$aa~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$ba#|$ba$O$ba'P$ba!y$ba!o$ba#O$ba~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$ca#|$ca$O$ca'P$ca!y$ca!o$ca#O$ca~P!%aOz3{O#|$ca$O$ca#O$ca~PMVOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$fa#|$fa$O$fa'P$fa!y$fa!o$fa#O$fa~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n%Va#|%Va$O%Va'P%Va!y%Va!o%Va#O%Va~P!%aOz3{O#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOT3}Oz3{O!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!S$Qi!n$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOT3}Oz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!S$Qi!c$Qi!n$Qi#|$Qi$O$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O#T#PO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$[4YO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$Z4XO$[4YO$^4[O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOz3{O$_4[O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!w$Qi#T$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi'P$Qi!y$Qi!o$Qi#O$Qi~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n#Ua#|#Ua$O#Ua'P#Ua!y#Ua!o#Ua#O#Ua~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n'^a#|'^a$O'^a'P'^a!y'^a!o'^a#O'^a~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT#Qi!S#Qi!c#Qi!n#Qi#|#Qi$O#Qi'P#Qi!y#Qi!o#Qi#O#Qi~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT#}i!S#}i!c#}i!n#}i#|#}i$O#}i'P#}i!y#}i!o#}i#O#}i~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$Pi#|$Pi$O$Pi'P$Pi!y$Pi!o$Pi#O$Pi~P!%aOz3{O#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT!vq!S!vq!c!vq!n!vq!w!vq#|!vq$O!vq'P!vq!y!vq!o!vq#O!vq~P!%aOz3{O!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT#Qq!S#Qq!c#Qq!n#Qq#|#Qq$O#Qq'P#Qq!y#Qq!o#Qq#O#Qq~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$sq#|$sq$O$sq'P$sq!y$sq!o$sq#O$sq~P!%aOz3{O#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cOT!vy!S!vy!c!vy!n!vy!w!vy#|!vy$O!vy'P!vy!y!vy!o!vy#O!vy~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$sy#|$sy$O$sy'P$sy!y$sy!o$sy#O$sy~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$s!R#|$s!R$O$s!R'P$s!R!y$s!R!o$s!R#O$s!R~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$s!Z#|$s!Z$O$s!Z'P$s!Z!y$s!Z!o$s!Z#O$s!Z~P!%aOT3}Oz3{O!S4OO!c4PO!w5rO#T#PO$R3|O$S4QO$T4RO$U4SO$V4TO$X4VO$Y4WO$Z4XO$[4YO$]4ZO$^4[O$_4[O%T#cO!n$s!c#|$s!c$O$s!c'P$s!c!y$s!c!o$s!c#O$s!c~P!%aOP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T5bO#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYO~P$<UOP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYO~P$<UO#|4aO$O4bO#O'XX~P3YOP7wOU_O[5kOo9xOr4cOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T4`O#V4_O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYOT$PXz$PX!S$PX!c$PX!n$PX!w$PX#a$PX#b$PX#y$PX#|$PX$O$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX'P$PX!y$PX!o$PX#O$PX~P$<UOP7wOU_O[5kOo9xOr6dOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T6aO#V6`O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYOT$PXz$PX!S$PX!c$PX!w$PX#O$PX#P$PX#Y$PX#a$PX#b$PX#y$PX#|$PX$O$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX!n$PX'P$PX!r$PX!y$PX!o$PXV$PX!p$PX~P$<UO!r4kO~P<XO!r7iO#P5RO~OT8TOz8RO!S8UO!c8VO!r5SO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!r7jO#P5VO~O!r7kO#P5ZO~O#P5ZO#T'ZO#n'XO~O#P5[O#T'ZO#n'XO~O#P5_O#T'ZO#n'XO~OP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!U$uO!V5iO!W5iO!Z5}O!d5eO!z]O#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO$u$tO%T5|O%U!OO'WYO~P$<UOP7wOU_O[5kOo9xOs#fOx5gOy5gO}aO!O^O!Q5{O!T5qO!V5iO!W5iO!Z5}O!d5eO!z]O#T7PO#X`O#dhO#fbO#gcO#sdO$[5oO$d5mO$e5oO$hqO%T5|O%U!OO'WYO~P$<UOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$`a#P$`a#Y$`a#|$`a$O$`a!n$`a'P$`a!r$`a!y$`a!o$`aV$`a!p$`a~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$aa#P$aa#Y$aa#|$aa$O$aa!n$aa'P$aa!r$aa!y$aa!o$aaV$aa!p$aa~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$ba#P$ba#Y$ba#|$ba$O$ba!n$ba'P$ba!r$ba!y$ba!o$baV$ba!p$ba~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$ca#P$ca#Y$ca#|$ca$O$ca!n$ca'P$ca!r$ca!y$ca!o$caV$ca!p$ca~P!%aOz6OO#O$ca#P$ca#Y$ca#|$ca$O$ca!r$caV$ca!p$ca~PMVOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$fa#P$fa#Y$fa#|$fa$O$fa!n$fa'P$fa!r$fa!y$fa!o$faV$fa!p$fa~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O%Va#P%Va#Y%Va#|%Va$O%Va!n%Va'P%Va!r%Va!y%Va!o%VaV%Va!p%Va~P!%aOz6OO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT6QOz6OO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO!S$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT6QOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO#T#PO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$[6]O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$Z6[O$[6]O$^6_O$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz6OO$_6_O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi#|$Qi$O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O#Ua#P#Ua#Y#Ua#|#Ua$O#Ua!n#Ua'P#Ua!r#Ua!y#Ua!o#UaV#Ua!p#Ua~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O'^a#P'^a#Y'^a#|'^a$O'^a!n'^a'P'^a!r'^a!y'^a!o'^aV'^a!p'^a~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT#Qi!S#Qi!c#Qi#O#Qi#P#Qi#Y#Qi#|#Qi$O#Qi!n#Qi'P#Qi!r#Qi!y#Qi!o#QiV#Qi!p#Qi~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT#}i!S#}i!c#}i#O#}i#P#}i#Y#}i#|#}i$O#}i!n#}i'P#}i!r#}i!y#}i!o#}iV#}i!p#}i~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$Pi#P$Pi#Y$Pi#|$Pi$O$Pi!n$Pi'P$Pi!r$Pi!y$Pi!o$PiV$Pi!p$Pi~P!%aOz6OO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT!vq!S!vq!c!vq!w!vq#O!vq#P!vq#Y!vq#|!vq$O!vq!n!vq'P!vq!r!vq!y!vq!o!vqV!vq!p!vq~P!%aOz6OO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT#Qq!S#Qq!c#Qq#O#Qq#P#Qq#Y#Qq#|#Qq$O#Qq!n#Qq'P#Qq!r#Qq!y#Qq!o#QqV#Qq!p#Qq~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$sq#P$sq#Y$sq#|$sq$O$sq!n$sq'P$sq!r$sq!y$sq!o$sqV$sq!p$sq~P!%aOz6OO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cOT!vy!S!vy!c!vy!w!vy#O!vy#P!vy#Y!vy#|!vy$O!vy!n!vy'P!vy!r!vy!y!vy!o!vyV!vy!p!vy~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$sy#P$sy#Y$sy#|$sy$O$sy!n$sy'P$sy!r$sy!y$sy!o$syV$sy!p$sy~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$s!R#P$s!R#Y$s!R#|$s!R$O$s!R!n$s!R'P$s!R!r$s!R!y$s!R!o$s!RV$s!R!p$s!R~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$s!Z#P$s!Z#Y$s!Z#|$s!Z$O$s!Z!n$s!Z'P$s!Z!r$s!Z!y$s!Z!o$s!ZV$s!Z!p$s!Z~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$s!c#P$s!c#Y$s!c#|$s!c$O$s!c!n$s!c'P$s!c!r$s!c!y$s!c!o$s!cV$s!c!p$s!c~P!%aO#T7cO~P#-WO!z$hO#T7gO~O!y5uO#T'ZO#n'XO~O!z$hO#T7hO~OT6QOz6OO!S6RO!c6SO!w7oO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO#O$ta#P$ta#Y$ta#|$ta$O$ta!n$ta'P$ta!r$ta!y$ta!o$taV$ta!p$ta~P!%aOT6QOz6OO!S6RO!c6SO!w7oO#P7bO#T#PO$R6PO$S6TO$T6UO$U6VO$V6WO$X6YO$Y6ZO$Z6[O$[6]O$]6^O$^6_O$_6_O%T#cO!n'^X#|'^X$O'^X'P'^X!y'^X!o'^X#O'^X~P!%aO#|6bO$O6cO#O'XX#P'XX#Y'XX!r'XXV'XX!p'XX~P3YO!r6lO~P<XO!r9|O#P7SO~OT8TOz8RO!S8UO!c8VO!r7TO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!r9}O#P7WO~O!r:OO#P7[O~O#P7[O#T'ZO#n'XO~O#P7]O#T'ZO#n'XO~O#P7`O#T'ZO#n'XO~O!U$uO$u$tO~P<XOo7fOs$lO~O#T9ZO~P<XOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$`a#P$`a#Y$`a!n$`a'P$`a!r$`a!y$`a!o$`aV$`a!p$`a~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$aa#P$aa#Y$aa!n$aa'P$aa!r$aa!y$aa!o$aaV$aa!p$aa~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$ba#P$ba#Y$ba!n$ba'P$ba!r$ba!y$ba!o$baV$ba!p$ba~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$ca#P$ca#Y$ca!n$ca'P$ca!r$ca!y$ca!o$caV$ca!p$ca~P!%aOz8RO#O$ca#P$ca#Y$ca!r$caV$ca!p$ca~PMVOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$fa#P$fa#Y$fa!n$fa'P$fa!r$fa!y$fa!o$faV$fa!p$fa~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$ta#P$ta#Y$ta!n$ta'P$ta!r$ta!y$ta!o$taV$ta!p$ta~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O%Va#P%Va#Y%Va!n%Va'P%Va!r%Va!y%Va!o%VaV%Va!p%Va~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#O9_O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'xX~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#O9aO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'ZX~P!%aOz8RO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT8TOz8RO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!S$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOT8TOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!S$Qi!c$Qi#O$Qi#P$Qi#Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi$T$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO#T#PO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$[8`O$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$Z8_O$[8`O$^8bO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aOz8RO$_8bO%T#cOT$Qi!S$Qi!c$Qi!w$Qi#O$Qi#P$Qi#T$Qi#Y$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi!n$Qi'P$Qi!r$Qi!y$Qi!o$QiV$Qi!p$Qi~P!%aO#T9fO~P!+iO!n#Ua'P#Ua!y#Ua!o#Ua~PCVO!n'^a'P'^a!y'^a!o'^a~PCVO#T=PO#V=OO!y&aX#O&aX~P<XO#O9WO!y']a~Oz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT#Qi!S#Qi!c#Qi#O#Qi#P#Qi#Y#Qi!n#Qi'P#Qi!r#Qi!y#Qi!o#QiV#Qi!p#Qi~P!%aOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT#}i!S#}i!c#}i#O#}i#P#}i#Y#}i!n#}i'P#}i!r#}i!y#}i!o#}iV#}i!p#}i~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$Pi#P$Pi#Y$Pi!n$Pi'P$Pi!r$Pi!y$Pi!o$PiV$Pi!p$Pi~P!%aO#O9_O!y%ma~O!y&_X#O&_X~P!+iO#O9aO!y'Za~Oz8RO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT!vq!S!vq!c!vq!w!vq#O!vq#P!vq#Y!vq!n!vq'P!vq!r!vq!y!vq!o!vqV!vq!p!vq~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#Wi#O#Wi~P!%aOz8RO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT#Qq!S#Qq!c#Qq#O#Qq#P#Qq#Y#Qq!n#Qq'P#Qq!r#Qq!y#Qq!o#QqV#Qq!p#Qq~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$sq#P$sq#Y$sq!n$sq'P$sq!r$sq!y$sq!o$sqV$sq!p$sq~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y&wa#O&wa~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y&_a#O&_a~P!%aOz8RO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cOT!vy!S!vy!c!vy!w!vy#O!vy#P!vy#Y!vy!n!vy'P!vy!r!vy!y!vy!o!vyV!vy!p!vy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#Wq#O#Wq~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$sy#P$sy#Y$sy!n$sy'P$sy!r$sy!y$sy!o$syV$sy!p$sy~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$s!R#P$s!R#Y$s!R!n$s!R'P$s!R!r$s!R!y$s!R!o$s!RV$s!R!p$s!R~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$s!Z#P$s!Z#Y$s!Z!n$s!Z'P$s!Z!r$s!Z!y$s!Z!o$s!ZV$s!Z!p$s!Z~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO#O$s!c#P$s!c#Y$s!c!n$s!c'P$s!c!r$s!c!y$s!c!o$s!cV$s!c!p$s!c~P!%aO#T9vO~P<XO#P9uO!n'^X'P'^X!r'^X!y'^X!o'^XV'^X!p'^X~PEqO!z$hO#T9zO~O!z$hO#T9{O~O#|8fO$O8gO#O'XX#P'XX#Y'XX!r'XXV'XX!p'XX~P3YOr8hO#T#mO#V#lO#O$PX#P$PX#Y$PX!r$PXV$PX!p$PX~P5^Or=UO#T:sO#V:qOT$PXz$PX!S$PX!c$PX!n$PX!r$PX!w$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX!o$PX#O$PX!p$PX'P$PX~P<XOr:rO#T:rO#V:rOT$PXz$PX!S$PX!c$PX!w$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX~P<XOr:wO#T=PO#V=OOT$PXz$PX!S$PX!c$PX!w$PX!y$PX#O$PX#a$PX#b$PX#y$PX$R$PX$S$PX$T$PX$U$PX$V$PX$X$PX$Y$PX$Z$PX$]$PX$^$PX$_$PX~P<XO!U$uO$u$tO~P!+iO!r8sO~P<XOT8TOz8RO!S8UO!c8VO!w:_O#P9TO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y'^X#O'^X~P!%aOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UO#O9WO!y']X~O#T;eO~P!+iOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$`a#O$`a~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$aa#O$aa~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ba#O$ba~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ca#O$ca~P!%aOz:`O%T#cOT$ca!S$ca!c$ca!w$ca!y$ca#O$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$fa#O$fa~P!%aO!r?SO#P9^O~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$ta#O$ta~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y%Va#O%Va~P!%aOT8TOz8RO!S8UO!c8VO!r9cO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOz:`O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!y$Qi#O$Qi~P!%aOT:bOz:`O!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!S$Qi!y$Qi#O$Qi~P!%aOT:bOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!S$Qi!c$Qi!y$Qi#O$Qi~P!%aOz:`O#T#PO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi~P!%aOz:`O#T#PO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi$T$Qi~P!%aOz:`O#T#PO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi$T$Qi$U$Qi~P!%aOz:`O#T#PO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz:`O$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz:`O$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi~P!%aOz:`O$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi~P!%aOz:`O$[:mO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi~P!%aOz:`O$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi~P!%aOz:`O$Z:lO$[:mO$^:oO$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi~P!%aOz:`O$_:oO%T#cOT$Qi!S$Qi!c$Qi!w$Qi!y$Qi#O$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT#Qi!S#Qi!c#Qi!y#Qi#O#Qi~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT#}i!S#}i!c#}i!y#}i#O#}i~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$Pi#O$Pi~P!%aO!r?TO#P9hO~Oz:`O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT!vq!S!vq!c!vq!w!vq!y!vq#O!vq~P!%aOz:`O!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT#Qq!S#Qq!c#Qq!y#Qq#O#Qq~P!%aO!r?YO#P9oO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$sq#O$sq~P!%aO#P9oO#T'ZO#n'XO~Oz:`O#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cOT!vy!S!vy!c!vy!w!vy!y!vy#O!vy~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$sy#O$sy~P!%aO#P9pO#T'ZO#n'XO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$s!R#O$s!R~P!%aO#P9sO#T'ZO#n'XO~OT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$s!Z#O$s!Z~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y$s!c#O$s!c~P!%aO#T;}O~P!+iOT8TOz8RO!S8UO!c8VO!w:_O#P;|O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!y'^X#O'^X~P!%aO!U$uO$u$tO~P$8rOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!U$uO!V:rO!W:rO!Z:rO!d:SO!z]O#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO$u$tO%T<ZO%U!OO'WYO~P$<UOo9yOs$lO~O#T>VO~P$8rOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!z]O#T>WO#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$`a!r$`a!o$`a#O$`a!p$`a'P$`a~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$aa!r$aa!o$aa#O$aa!p$aa'P$aa~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$ba!r$ba!o$ba#O$ba!p$ba'P$ba~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$ca!r$ca!o$ca#O$ca!p$ca'P$ca~P!%aOz<]O%T#cOT$ca!S$ca!c$ca!n$ca!r$ca!w$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca!o$ca#O$ca!p$ca'P$ca~P!%aOz<^O%T#cOT$ca!S$ca!c$ca!w$ca#T$ca$R$ca$S$ca$T$ca$U$ca$V$ca$X$ca$Y$ca$Z$ca$[$ca$]$ca$^$ca$_$ca~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$fa!r$fa!o$fa#O$fa!p$fa'P$fa~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$ta!r$ta!o$ta#O$ta!p$ta'P$ta~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n%Va!r%Va!o%Va#O%Va!p%Va'P%Va~P!%aOz<]O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi~P!%aOT<aOz<]O!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!S$Qi!n$Qi!r$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOT<bOz<^O!c<fO!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cO!S$Qi~P!%aOT<aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!S$Qi!c$Qi!n$Qi!r$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOT<bOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cO!S$Qi!c$Qi~P!%aOz<]O#T#PO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi~P!%aOz<]O#T#PO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi$T$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi$T$Qi~P!%aOz<]O#T#PO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi~P!%aOz<]O#T#PO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O#T#PO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz<]O$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi~P!%aOz<]O$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi~P!%aOz<]O$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi~P!%aOz<]O$[<wO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$[<xO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$]$Qi~P!%aOz<]O$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi~P!%aOz<]O$Z<uO$[<wO$^<{O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$Z<vO$[<xO$^<|O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$]$Qi~P!%aOz<]O$_<{O%T#cOT$Qi!S$Qi!c$Qi!n$Qi!r$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi!o$Qi#O$Qi!p$Qi'P$Qi~P!%aOz<^O$_<|O%T#cOT$Qi!S$Qi!c$Qi!w$Qi#T$Qi$R$Qi$S$Qi$T$Qi$U$Qi$V$Qi$X$Qi$Y$Qi$Z$Qi$[$Qi$]$Qi$^$Qi~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y#Ua#O#Ua~P!%aOT:bOz:`O!S:cO!c:dO!w>vO#T#PO$R:aO$S:eO$T:fO$U:gO$V:hO$X:jO$Y:kO$Z:lO$[:mO$]:nO$^:oO$_:oO%T#cO!y'^a#O'^a~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT#Qi!S#Qi!c#Qi!n#Qi!r#Qi!o#Qi#O#Qi!p#Qi'P#Qi~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT#Qi!S#Qi!c#Qi~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT#}i!S#}i!c#}i!n#}i!r#}i!o#}i#O#}i!p#}i'P#}i~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT#}i!S#}i!c#}i~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$Pi!r$Pi!o$Pi#O$Pi!p$Pi'P$Pi~P!%aOz<]O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT!vq!S!vq!c!vq!n!vq!r!vq!w!vq!o!vq#O!vq!p!vq'P!vq~P!%aOz<^O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT!vq!S!vq!c!vq!w!vq~P!%aOz<]O!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT#Qq!S#Qq!c#Qq!n#Qq!r#Qq!o#Qq#O#Qq!p#Qq'P#Qq~P!%aOz<^O!w?_O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT#Qq!S#Qq!c#Qq~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$sq!r$sq!o$sq#O$sq!p$sq'P$sq~P!%aOz<]O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cOT!vy!S!vy!c!vy!n!vy!r!vy!w!vy!o!vy#O!vy!p!vy'P!vy~P!%aOz<^O#T#PO$R<`O$S<hO$T<jO$U<lO$V<nO$X<rO$Y<tO$Z<vO$[<xO$]<zO$^<|O$_<|O%T#cOT!vy!S!vy!c!vy!w!vy~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$sy!r$sy!o$sy#O$sy!p$sy'P$sy~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$s!R!r$s!R!o$s!R#O$s!R!p$s!R'P$s!R~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$s!Z!r$s!Z!o$s!Z#O$s!Z!p$s!Z'P$s!Z~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$s!c!r$s!c!o$s!c#O$s!c!p$s!c'P$s!c~P!%aO#T>pO~P$8rOP7wOU_O[:rOo?tOs#fOx:rOy:rO}aO!O^O!Q<XO!T:rO!V:rO!W:rO!Z:rO!d:SO!z]O#T>qO#X`O#dhO#fbO#gcO#sdO$[<UO$d:rO$e<UO$hqO%T<ZO%U!OO'WYO~P$<UOT8TOz8RO!S8UO!c8VO!w:_O#P>oO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT8TOz8RO!S8UO!c8VO!w:_O#P>nO#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO!n'^X!r'^X!o'^X#O'^X!p'^X'P'^X~P!%aOT'XXz'XX!S'XX!c'XX!w'XX!z'XX#O'XX#T'XX#X'XX#a'XX#b'XX#y'XX$R'XX$S'XX$T'XX$U'XX$V'XX$X'XX$Y'XX$Z'XX$['XX$]'XX$^'XX$_'XX%T'XX~O#|:uO$O:vO!y'XX~P.@qO!z$hO#T>zO~O!r;SO~P<XO!z$hO#T?PO~O#|;iO!n$|X!p$|X#O$|X'P$|X~O!r?pO#P;jO~OT8TOz8RO!S8UO!c8VO!r;kO!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n#Ua!r#Ua!o#Ua#O#Ua!p#Ua'P#Ua~P!%aOT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n'^a!r'^a!o'^a#O'^a!p'^a'P'^a~P!%aO!r?qO#P;nO~O#d>xO!n&qX!p&qX#O&qX'P&qX~O#O?QO!n'pa!p'pa'P'pa~O!r?rO#P;uO~OT<aOz<]O!S<cO!c<eO!w?^O#T#PO$R<_O$S<gO$T<iO$U<kO$V<mO$X<qO$Y<sO$Z<uO$[<wO$]<yO$^<{O$_<{O%T#cO!n$|i!p$|i#O$|i'P$|i~P!%aO#P;uO#T'ZO#n'XO~O#P;vO#T'ZO#n'XO~O#P;zO#T'ZO#n'XO~O#|=QO$O=SO!n'XX!r'XX!o'XX!p'XX'P'XX~P.@qO#|=RO$O=TOT'XXz'XX!S'XX!c'XX!w'XX!z'XX#T'XX#X'XX#a'XX#b'XX#y'XX$R'XX$S'XX$T'XX$U'XX$V'XX$X'XX$Y'XX$Z'XX$['XX$]'XX$^'XX$_'XX%T'XX~O!r=aO~P<XO!r=bO~P<XO!r?yO#P>[O~O!r?zO#P:rO~OT8TOz8RO!S8UO!c8VO!r>]O!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aOT8TOz8RO!S8UO!c8VO!r>^O!w:_O#T#PO$R8SO$S8WO$T8XO$U8YO$V8ZO$X8]O$Y8^O$Z8_O$[8`O$]8aO$^8bO$_8bO%T#cO~P!%aO!r?{O#P>cO~O!r?|O#P>hO~O#P>hO#T'ZO#n'XO~O#P:rO#T'ZO#n'XO~O#P>iO#T'ZO#n'XO~O#P>lO#T'ZO#n'XO~O!z$hO#T?nO~Oo>wOs$lO~O!z$hO#T?oO~O#O?QO!n'pX!p'pX'P'pX~O!z$hO#T?vO~O!z$hO#T?wO~O!z$hO#T?xO~Oo?lOs$lO~Oo?uOs$lO~Oo?tOs$lO~O%X$]%W$k!e$^#d%`#g'u'W#f~\",goto:\"%1O'{PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP'|P(TPP(Z(^PPP(vP(^*o(^6cP6cPP>cFxF{PP6cGR! RP! UP! UPPGR! e! h! lGRGRPP! oP! rPPGR!)u!0q!0qGR!0uP!0u!0u!0u!2PP!;g!<T!<a!FP!F_P!Na!NdP6cP6c6cPPPPP!NgPPPPPPP6c6c6c6cPP6c6cP#&T#'|P#(Q#(t#'|#'|#(z#)^#)b6c6cP#)k#*R#*|#,Q#,W#,Q#,f#,Q#,Q#,z#,}#,}6cPP6cPP#-R#5S#5S#5WP#5^P(^#5b(^#5z#5}#5}#6T(^#6W(^(^#6^#6a(^#6j#6m(^(^(^(^(^#6p(^(^(^(^(^(^(^(^(^#6s#7V(^(^#7Z#7k#7n(^(^P#7q#7x#8O#8k#8u#8{#9V#9^#9d#:h#;j#;z#<d#=`#=f#=l#=r#=|#>S#>Y#>h#>n#>x#?O#?U#?[#?b#?l#?v#?|#@S#@^PPPPPPPP#@d#@hP#A^$(h$(k$(u$1R$1_$1t$1zP$1}$2Q$2W$5[$?Y$Gr$Gu$G{$HO$Kb$Ke$Kn$Kv$LQ$Li$MP$Mz%'}PP%0O%0S%0`%0u%0{Q!nQT!qV!rQUOR%x!mRVO}!hPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]|!hPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]Q%_!ZQ%h!aQ%m!eQ'k$cQ'x$iQ)d%lQ+W'{Q,k)QU.O+T+V+]Q.j+pQ/`,jS0a.T.UQ0q.dQ1n0VS1w0`0dQ2Q0nQ2q1pQ2t1xR3[2u|ZPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]2lf]`cgjklmnoprxyz!W!X!Y!]!e!f!g!y!z#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r#}$Q$R$T$h$z%S%U%d%r%}&S&W&[&q&t&u&x'P'X'Z']'a'e'p't'y(R(V(W(Y(Z([(t)T)X)`)c)g)n)u)y*V*Z*[*r*w*|+Q+X+[+^+_+j+m+q+t,Y,c,e,g,i,u,x-O-`-a-t-v-z.S.V.[.].^.b/X/n/y0O0T0b0e1R1S1b1k1o1y1{2k2r3n3p3s3t3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7i7j7k7o7w7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v9|9}:O:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?S?T?Y?^?_?p?q?r?y?z?{?|S$ku$`Q%W!V^%e!_$a'j)Y.f0o2OQ%i!bQ%j!cQ%k!dQ%v!kS&V!|){Q&]#OQ'l$dQ'm$eS'|$j'hQ)S%`Q*v'nQ+z(bQ,O(dQ-S)iU.g+n.c0mQ.q+{Q.r+|Q/d,vS0V-y0XQ1X/cQ1e/rS2T0s2WQ2h1`Q3U2iQ3^2zQ3_2{Q3c3VQ3f3`R3g3d0{!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_0z!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_Q#h^Q%O!PQ%P!QQ%Q!RQ,b(sQ.u,RR.y,UR&r#hQ*Q&qR/w-a0{hPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_R#j_k#n`j#i#q&t&x5d5e9W:Q:R:S:TR#saT&}#r'PR-h*[R&R!{0zhPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_R#tb-x!}[#e#k#u$U$V$W$X$Y$Z$v$w%X%Z%]%a%s%|&O&U&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&n&v&w&|'`'b'c(e(x)v)x)z*O*U*h*j+a+d,n,q-W-Y-[-e-f-g-w.Y/O/[/v0Q0Z0f1g1j1m1z2S2`2o2p2v3Z4]4^4d4e4f4g4h4i4j4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4{4|4}5P5Q5T5U5W5X5Y5]5^5`5t6e6f6g6h6i6j6k6m6n6o6p6q6r6s6t6u6v6w6x6y6z6{6|6}7O7Q7R7U7V7X7Y7Z7^7_7a7m7q8i8j8k8l8m8n8p8q8r8t8u8v8w8x8y8z8{8|8}9O9P9Q9R9S9U9V9Y9[9]9d9e9g9i9j9k9l9m9n9q9r9t9w:p:x:y:z:{:|:};Q;R;T;U;V;W;X;Y;Z;[;];^;_;`;a;b;c;d;f;g;l;m;p;r;s;w;y;{<O=V=W=X=Y=Z=[=]=`=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z={=|=}>O>P>Q>R>S>T>U>X>Y>Z>_>`>a>b>d>e>f>g>j>k>m>r>s>{>|>}?V?b?cQ'd$[Y(X$s8o;P=^=_S(]3o7lQ(`$tR+y(aT&X!|){#a$Pg#}$h'X'Z'p't'y(W([)`)c*r*w+Q+X+[+_+j+m+n+t,i,u,x-v.S.V.].b.c0b0m1y3n3s3t7i7j7k7w9|9}:O?S?T?Y?p?q?r?y?z?{?|3yfPVX]`cgjklmnoprxyz!S!W!X!Y!]!e!f!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r#}$Q$R$T$h$z%O%Q%S%T%U%V%d%r%}&S&W&[&q&t&u&x'P'X'Z']'a'e'p't'y(R(V(W(Y(Z([(h(t)T)X)`)c)g)n)u)y){*V*Z*[*r*w*|+Q+X+[+^+_+j+m+n+q+t,Q,T,Y,c,e,g,i,u,x-O-`-a-t-v-z.S.V.[.].^.b.c.u.w/P/X/n/y0O0T0b0e0m0s0}1O1R1S1W1b1k1o1y1{2W2]2k2r3n3p3s3t3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7i7j7k7o7w7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v9|9}:O:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?S?T?Y?^?_?p?q?r?y?z?{?|[#wd#x3h3i3j3kh'V#z'W)f,}-U/k/u1f3l3m3q3rQ)e%nR-T)kY#yd%n)k3h3iV'T#x3j3k1dePVX]`cjklmnoprxyz!S!W!X!Y!]!e!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a'e(R(V(Y(Z(h(t)T)X)g)n)u)y){*V*Z*[*|+^+q,Q,T,Y,c,e,g-O-`-a-t-z.[.^.u.w/P/X/n/y0O0T0e0s0}1O1R1S1W1b1k1o1{2W2]2k2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_Q%o!fQ)l%r#O3vg#}$h'X'Z'p't'y(W([)`*w+Q+X+[+_+j+m+t,i,u,x-v.S.V.].b0b1y7i7j7k7w9|9}:O?S?T?Y?p?q?r?y?z?{?|a3w)c*r+n.c0m3n3s3tY'T#z)f-U3l3mZ*c'W,}/u3q3r0vhPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0}1O1R1S1W1k1o1{2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_T2U0s2WR&^#OR&]#O!r#Z[#e#u$U$V$W$X$Z$s$w%X%Z%]&`&a&b&c&d&e&f&g'`'b'c(e)v)x*O*j+d-Y.Y0f1z2`2p2v3Z9U9V!Y4U3o4d4e4f4g4i4j4l4m4n4o4p4q4r4s4{4|4}5P5Q5T5U5W5X5Y5]5^5`!^6X4^6e6f6g6h6j6k6m6n6o6p6q6r6s6t6|6}7O7Q7R7U7V7X7Y7Z7^7_7a7l7m#b8[#k%a%s%|&O&v&w&|(x*U+a,n,q-W-e-g/[4]5t7q8i8j8k8l8n8o8p8t8u8v8w8x8y8z8{9Y9[9]9d9g9i9l9n9q9r9t9w:p;R<O>r>s>{?b?c!|:i&U)z-[-f-w0Q0Z1g1j1m2o8q8r9e9j9k9m:x:y:z:{:};P;Q;T;U;V;W;X;Y;Z;[;d;f;g;l;m;p;r;s;w;y;{>R>S!`<o/O/v=V=W=X=Y=]=^=`=c=e=g=i=k=m=o=q>T>X>Z>_>a>d>e>g>j>k>m>|>}?Vo<p2S=_=d=f=h=j=l=n=p=r>U>Y>`>b>fS$iu#fQ$qwU'{$j$l&pQ'}$kS(P$m$rQ+Z'|Q+](OQ+`(QQ1p0VQ5s7dS5v7f7gQ5w7hQ7p9xS7r9y9zQ7s9{Q;O>uS;h>w>zQ;o?PQ>y?jS?O?l?nQ?U?oQ?`?sS?a?t?wS?d?u?vR?e?xT'u$h+Q!csPVXt!S!j!r!s!w$h%O%Q%T%V'p([(h)`+Q+j+t,Q,T,u,x.u.w/P0}1O1W2]Q$]rR*l'eQ-{+PQ.i+oQ0U-xQ0j.`Q1|0kR2w1}T0W-y0XQ+V'zQ.U+YR0d.XQ(_$tQ)^%iQ)s%vQ*u'mS+x(`(aQ-q*vR.p+yQ(^$tQ)b%kQ)r%vQ*q'lS*t'm)sU+w(_(`(aS-p*u*vS.o+x+yQ/i,{Q/{-nQ/}-qR0v.pQ(]$tQ)]%iQ)_%jQ)q%vU*s'm)r)sW+v(^(_(`(aQ,t)^U-o*t*u*vU.n+w+x+yS/|-p-qS0u.o.pQ1i/}R2Y0vX+r([)`+t,xb%f!_$a'j+n.c.f0m0o2OR,r)YQ$ovS+b(S?Qg?m([)`+i+j+m+t,u,x.a.b0lR0t.kT2V0s2W0}|PVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g,m-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_T$y{$|Q,O(dR.r+|T${{$|Q(j%OQ(r%QQ(w%TQ(z%VQ.},XQ0z.yQ0{.|R2c1WR(m%PX,[(k(l,],_R(n%PX(p%Q%T%V1WR%T!T_%b!]%S(t,c,e/X1RR%V!UR/],gR,j)PQ)a%kS*p'l)bS-m*q,{S/z-n/iR1h/{T,w)`,xQ-P)fU/l,|,}-UU1^/k/t/uR2n1fR/o-OR2l1bSSO!mR!oSQ!rVR%y!rQ!jPS!sV!rQ!wX[%u!j!s!w,Q1O2]Q,Q(hQ1O/PR2]0}Q)o%sS-X)o9bR9b8rQ-b*QR/x-bQ&y#oS*X&y9XR9X:tS*]&|&}R-i*]Q)|&YR-^)|!j'Y#|'o*f*z+O+T+e+i.T.W.Z.a/_0`0c0g0l1x2u5x5y5z7e7t7u7v;q;t;x?W?X?Z?f?g?h?iS*e'Y/g]/g,{-n.f0o1[2O!h'[#|'o*z+O+T+e+i.T.W.Z.a/_0`0c0g0l1x2u5x5y5z7e7t7u7v;q;t;x?W?X?Z?f?g?h?iS*g'[/hZ/h,{-n.f0o2OU#xd%n)kU'S#x3j3kQ3j3hR3k3iQ'W#z^*b'W,}/k/u1f3q3rQ,})fQ/u-UQ3q3lR3r3m|tPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]W$_t'p+j,uS'p$h+QS+j([+tT,u)`,xQ'f$]R*m'fQ0X-yR1q0XQ+R'vR-}+RQ0].PS1u0]1vR1v0^Q._+fR0i._Q+t([R.l+tW+m([)`+t,xS.b+j,uT.e+m.bQ)Z%fR,s)ZQ(T$oS+c(T?RR?R?mQ2W0sR2}2WQ$|{R(f$|Q,S(iR.v,SQ,V(jR.z,VQ,](kQ,_(lT/Q,],_Q)U%aS,o)U9`R9`8qQ)R%_R,l)RQ,x)`R/e,xQ)h%pS-R)h/sR/s-SQ1c/oR2m1cT!uV!rj!iPVX!j!r!s!w(h,Q/P0}1O2]Q%R!SQ(i%OW(p%Q%T%V1WQ.x,TQ0x.uR0y.w|[PVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]Q#e]U#k`#q&xQ#ucQ$UkQ$VlQ$WmQ$XnQ$YoQ$ZpQ$sx^$vy3y5|8P:]<Y<ZQ$wzQ%X!WQ%Z!XQ%]!YW%a!]%S(t,eU%s!g&q-aQ%|!yQ&O!zS&U!|){^&_#Q3{6O8R:`<]<^Q&`#RQ&a#SQ&b#TQ&c#UQ&d#VQ&e#WQ&f#XQ&g#YQ&h#ZQ&i#[Q&j#]Q&k#^Q&l#_Q&m#`Q&n#aQ&v#lQ&w#mS&|#r'PQ'`$QQ'b$RQ'c$TQ(e$zQ(x%UQ)v%}Q)x&SQ)z&WQ*O&[Q*U&uS*h']5uQ*j'a^*k3p5a7b9u;|>n>oQ+a(RQ+d(VQ,n)TQ,q)XQ-W)nQ-Y)uQ-[)yQ-e*VQ-f*ZQ-g*[^-k3u5b7c9v;}>p>qQ-w*|Q.Y+^Q/O,YQ/[,gQ/v-`Q0Q-tQ0Z-zQ0f.[Q1g/yQ1j0OQ1m0TQ1z0eU2S0s2W:rQ2`1SQ2o1kQ2p1oQ2v1{Q3Z2rQ3o3xQ4]jQ4^5eQ4d5fQ4e5hQ4f5jQ4g5lQ4h5nQ4i5pQ4j3zQ4l3|Q4m3}Q4n4OQ4o4PQ4p4QQ4q4RQ4r4SQ4s4TQ4t4UQ4u4VQ4v4WQ4w4XQ4x4YQ4y4ZQ4z4[Q4{4_Q4|4`Q4}4aQ5P4bQ5Q4cQ5T4kQ5U5OQ5W5RQ5X5SQ5Y5VQ5]5ZQ5^5[Q5`5_Q5t5rQ6e5gQ6f5iQ6g5kQ6h5mQ6i5oQ6j5qQ6k5}Q6m6PQ6n6QQ6o6RQ6p6SQ6q6TQ6r6UQ6s6VQ6t6WQ6u6XQ6v6YQ6w6ZQ6x6[Q6y6]Q6z6^Q6{6_Q6|6`Q6}6aQ7O6bQ7Q6cQ7R6dQ7U6lQ7V7PQ7X7SQ7Y7TQ7Z7WQ7^7[Q7_7]Q7a7`Q7l5{Q7m5dQ7q7oQ8i7xQ8j7yQ8k7zQ8l7{Q8m7|Q8n7}Q8o8OQ8p8QU8q,c/X1RQ8r%dQ8t8SQ8u8TQ8v8UQ8w8VQ8x8WQ8y8XQ8z8YQ8{8ZQ8|8[Q8}8]Q9O8^Q9P8_Q9Q8`Q9R8aQ9S8bQ9U8dQ9V8eQ9Y8fQ9[8gQ9]8hQ9d8sQ9e9TQ9g9ZQ9i9^Q9j9_Q9k9aQ9l9cQ9m9fQ9n9hQ9q9oQ9r9pQ9t9sQ9w:QU:p#i&t9WQ:x:UQ:y:VQ:z:WQ:{:XQ:|:YQ:}:ZQ;P:[Q;Q:^Q;R:_Q;T:aQ;U:bQ;V:cQ;W:dQ;X:eQ;Y:fQ;Z:gQ;[:hQ;]:iQ;^:jQ;_:kQ;`:lQ;a:mQ;b:nQ;c:oQ;d:uQ;f:vQ;g:wQ;l;SQ;m;eQ;p;jQ;r;kQ;s;nQ;w;uQ;y;vQ;{;zQ<O:TQ=V<PQ=W<QQ=X<RQ=Y<SQ=Z<TQ=[<UQ=]<VQ=^<WQ=_<XQ=`<[Q=c<_Q=d<`Q=e<aQ=f<bQ=g<cQ=h<dQ=i<eQ=j<fQ=k<gQ=l<hQ=m<iQ=n<jQ=o<kQ=p<lQ=q<mQ=r<nQ=s<oQ=t<pQ=u<qQ=v<rQ=w<sQ=x<tQ=y<uQ=z<vQ={<wQ=|<xQ=}<yQ>O<zQ>P<{Q>Q<|Q>R=OQ>S=PQ>T=QQ>U=RQ>X=SQ>Y=TQ>Z=UQ>_=aQ>`=bQ>a>VQ>b>WQ>d>[Q>e>]Q>f>^Q>g>cQ>j>hQ>k>iQ>m>lQ>r:SQ>s:RQ>{>vQ>|:qQ>}:sQ?V;iQ?b?^R?c?_R*R&qQ%t!gQ)W%dT*P&q-a$WiPVX]cklmnopxyz!S!W!X!Y!j!r!s!w#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a$Q$R$T$z%O%Q%T%V%}&S&['a(V(h)u+^,Q,T.[.u.w/P0e0}1O1S1W1o1{2]2r3p3u8d8e!t5c']3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5f5h5j5l5n5p7b7c!x7n5a5b5d5e5g5i5k5m5o5q5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`$`:P`j!]!g!y!z#i#l#m#q#r%S%U&q&t&u&x'P(R(t)T)X)n*V*[,e,g-a5r7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8f8g8h8s9W9Z9^9c9h9o9p9s9u9v:Q:R:S:T:_>v?^?_#l>t!|%d&W)y){*Z*|,c-t-z/X/y0O0T1R1k9T9_9a9f:U:V:W:X:Y:Z:[:]:^:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:u:v:w;S;e;j;k;n;u;v;z;|;}=O=P!x?[,Y-`:q:s;i<P<Q<R<S<T<V<W<Y<[<]<_<a<c<e<g<i<k<m<o<q<s<u<w<y<{=Q=S=U=a>V>[>]>c>h>i>l>n>p!]?]0s2W:r<U<X<Z<^<`<b<d<f<h<j<l<n<p<r<t<v<x<z<|=R=T=b>W>^>o>qQ#p`Q&s#iQ&{#qR*T&tS#o`#q^$Sj5d5e:Q:R:S:TS*W&x9WT:t#i&tQ'O#rR*_'PR&T!{R&Z!|Q&Y!|R-]){Q#|gS'^#}3nS'o$h+QS*d'X3sU*f'Z*w-vQ*z'pQ+O'tQ+T'yQ+e(WW+i([)`+t,xQ,{)cQ-n*rQ.T+XQ.W+[Q.Z+_U.a+j+m,uQ.f+nQ/_,iQ0`.SQ0c.VQ0g.]Q0l.bQ0o.cQ1[3tQ1x0bQ2O0mQ2u1yQ5x7iQ5y7jQ5z7kQ7e7wQ7t9|Q7u9}Q7v:OQ;q?SQ;t?TQ;x?YQ?W?pQ?X?qQ?Z?rQ?f?yQ?g?zQ?h?{R?i?|0z!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_#`$Og#}$h'X'Z'p't'y(W([)`)c*r*w+Q+X+[+_+j+m+n+t,i,u,x-v.S.V.].b.c0b0m1y3n3s3t7i7j7k7w9|9}:O?S?T?Y?p?q?r?y?z?{?|S$[r'eQ%l!eS%p!f%rU+f(Y(Z+qQ-Q)gQ/m-OQ0h.^Q1a/nQ2j1bR3W2k|vPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]#Y#g]cklmnopxyz!W!X!Y#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a$Q$R$T$z%}&S&['a(V)u+^.[0e1S1o1{2r3p3u8d8e`+k([)`+j+m+t,u,x.b!t8c']3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5f5h5j5l5n5p7b7c!x<}5a5b5d5e5g5i5k5m5o5q5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`$`?k`j!]!g!y!z#i#l#m#q#r%S%U&q&t&u&x'P(R(t)T)X)n*V*[,e,g-a5r7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8f8g8h8s9W9Z9^9c9h9o9p9s9u9v:Q:R:S:T:_>v?^?_#l?}!|%d&W)y){*Z*|,c-t-z/X/y0O0T1R1k9T9_9a9f:U:V:W:X:Y:Z:[:]:^:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:u:v:w;S;e;j;k;n;u;v;z;|;}=O=P!x@O,Y-`:q:s;i<P<Q<R<S<T<V<W<Y<[<]<_<a<c<e<g<i<k<m<o<q<s<u<w<y<{=Q=S=U=a>V>[>]>c>h>i>l>n>p!]@P0s2W:r<U<X<Z<^<`<b<d<f<h<j<l<n<p<r<t<v<x<z<|=R=T=b>W>^>o>qR'w$hQ'v$hR-|+QR$^rQ#d[Q%Y!WQ%[!XQ%^!YQ(U$pQ({%WQ(|%XQ(}%ZQ)O%]Q)V%cQ)[%gQ)d%lQ)j%qQ)p%tQ*n'iQ-V)mQ-l*oQ.i+oQ.j+pQ.x,WQ/S,`Q/T,aQ/U,bQ/Z,fQ/^,hQ/b,pQ/q-PQ0j.`Q0q.dQ0r.hQ0t.kQ0y.{Q1Y/dQ1_/lQ1n0VQ1|0kQ2Q0nQ2R0pQ2[0|Q2d1XQ2g1^Q2w1}Q2y2PQ2|2VQ3P2ZQ3T2fQ3X2nQ3Y2pQ3]2xQ3a3RQ3b3SR3e3ZR.R+UQ+g(YQ+h(ZR.k+qS+s([+tT,w)`,xa+l([)`+j+m+t,u,x.bQ%g!_Q'i$aQ*o'jQ.h+nS0p.c.fS2P0m0oR2x2OQ$pvW+o([)`+t,xW.`+i+j+m,uS0k.a.bR1}0l|!aPVX!S!j!r!s!w%O%Q%T%V(h,Q,T.u.w/P0}1O1W2]Q$ctW+p([)`+t,xU.d+j+m,uR0n.b0z!OPVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_R/a,m0}}PVX]`cjklmnopxyz!S!W!X!Y!]!g!j!r!s!w!y!z!|#Q#R#S#T#U#V#W#X#Y#Z#[#]#^#_#`#a#i#l#m#q#r$Q$R$T$z%O%Q%S%T%U%V%d%}&S&W&[&q&t&u&x'P']'a(R(V(h(t)T)X)n)u)y){*V*Z*[*|+^,Q,T,Y,c,e,g,m-`-a-t-z.[.u.w/P/X/y0O0T0e0s0}1O1R1S1W1k1o1{2W2]2r3p3u3x3y3z3{3|3}4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4_4`4a4b4c4k5O5R5S5V5Z5[5_5a5b5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5u5{5|5}6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6]6^6_6`6a6b6c6d6l7P7S7T7W7[7]7`7b7c7o7x7y7z7{7|7}8O8P8Q8R8S8T8U8V8W8X8Y8Z8[8]8^8_8`8a8b8d8e8f8g8h8s9T9W9Z9^9_9a9c9f9h9o9p9s9u9v:Q:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:q:r:s:u:v:w;S;e;i;j;k;n;u;v;z;|;}<P<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z<{<|=O=P=Q=R=S=T=U=a=b>V>W>[>]>^>c>h>i>l>n>o>p>q>v?^?_T$x{$|Q(q%QQ(v%TQ(y%VR2b1WQ%c!]Q(u%SQ,d(tQ/W,cQ/Y,eQ1Q/XR2_1RQ%q!fR)m%rR/p-O\",nodeNames:\"\\u26A0 ( HeredocString EscapeSequence abstract LogicOp array as Boolean break case catch clone const continue default declare do echo else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final finally fn for foreach from function global goto if implements include include_once LogicOp insteadof interface list match namespace new null LogicOp print readonly require require_once return switch throw trait try unset use var Visibility while LogicOp yield LineComment BlockComment TextInterpolation PhpClose Text PhpOpen Template TextInterpolation EmptyStatement ; } { Block : LabelStatement Name ExpressionStatement ConditionalExpression LogicOp MatchExpression ) ( ParenthesizedExpression MatchBlock MatchArm , => AssignmentExpression ArrayExpression ValueList & VariadicUnpacking ... Pair [ ] ListExpression ValueList Pair Pair SubscriptExpression MemberExpression -> ?-> Name VariableName DynamicVariable $ ${ CallExpression ArgList NamedArgument SpreadArgument CastExpression UnionType LogicOp IntersectionType OptionalType NamedType QualifiedName \\\\ NamespaceName Name NamespaceName Name ScopedExpression :: ClassMemberName DynamicMemberName AssignOp UpdateExpression UpdateOp YieldExpression BinaryExpression LogicOp LogicOp LogicOp BitOp BitOp BitOp CompareOp CompareOp BitOp ArithOp ConcatOp ArithOp ArithOp IncludeExpression RequireExpression CloneExpression UnaryExpression ControlOp LogicOp PrintIntrinsic FunctionExpression static ParamList Parameter #[ Attributes Attribute VariadicParameter PropertyParameter PropertyHooks PropertyHook UseList ArrowFunction NewExpression class BaseClause ClassInterfaceClause DeclarationList ConstDeclaration VariableDeclarator PropertyDeclaration VariableDeclarator MethodDeclaration UseDeclaration UseList UseInsteadOfClause UseAsClause UpdateExpression ArithOp ShellExpression ThrowExpression Integer Float String MemberExpression SubscriptExpression UnaryExpression ArithOp Interpolation String IfStatement ColonBlock SwitchStatement Block CaseStatement DefaultStatement ColonBlock WhileStatement EmptyStatement DoStatement ForStatement ForSpec SequenceExpression ForeachStatement ForSpec Pair GotoStatement ContinueStatement BreakStatement ReturnStatement TryStatement CatchDeclarator DeclareStatement EchoStatement UnsetStatement ConstDeclaration FunctionDefinition ClassDeclaration InterfaceDeclaration TraitDeclaration EnumDeclaration EnumBody EnumCase NamespaceDefinition NamespaceUseDeclaration UseGroup UseClause UseClause GlobalDeclaration FunctionStaticDeclaration Program\",maxTerm:318,nodeProps:[[\"group\",-36,2,8,49,82,84,86,89,94,95,103,107,108,112,113,116,120,126,132,137,139,140,154,155,156,157,160,161,173,174,188,190,191,192,193,194,200,\"Expression\",-28,75,79,81,83,201,203,208,210,211,214,217,218,219,220,221,223,224,225,226,227,228,229,230,231,234,235,239,240,\"Statement\",-4,121,123,124,125,\"Type\"],[\"isolate\",-4,67,68,71,200,\"\"],[\"openedBy\",70,\"phpOpen\",77,\"{\",87,\"(\",102,\"#[\"],[\"closedBy\",72,\"phpClose\",78,\"}\",88,\")\",165,\"]\"]],propSources:[Ww],skippedNodes:[0],repeatNodeCount:32,tokenData:\"!GQ_R!]OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^qr)Rrs+Pst+otu2buv5evw6rwx8Vxy>]yz>yz{?g{|@}|}Bb}!OCO!O!PDh!P!QKT!Q!R!!o!R![!$q![!]!,P!]!^!-a!^!_!-}!_!`!1S!`!a!2d!a!b!3t!b!c!7^!c!d!7z!d!e!9Y!e!}!7z!}#O!;b#O#P!<O#P#Q!<l#Q#R!=Y#R#S!7z#S#T!=y#T#U!7z#U#V!9Y#V#o!7z#o#p!Cs#p#q!Da#q#r!Ev#r#s!Fd#s$f$z$f$g&^$g&j!7z&j$I_$z$I_$I`&^$I`$KW$z$KW$KX&^$KX;'S$z;'S;=`&W<%l?HT$z?HT?HU&^?HUO$zP%PV'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zP%kO'TPP%nWOY$zYZ%fZ!a$z!b;'S$z;'S;=`&W<%l~$z~O$z~~%fP&ZP;=`<%l$z_&ed'TP'S^OX$zXY&^YZ'sZ]$z]^&^^p$zpq&^q!^$z!^!_%k!_$f$z$f$g&^$g$I_$z$I_$I`&^$I`$KW$z$KW$KX&^$KX;'S$z;'S;=`&W<%l?HT$z?HT?HU&^?HUO$z_'zW'TP'S^XY(dYZ(d]^(dpq(d$f$g(d$I_$I`(d$KW$KX(d?HT?HU(d^(iW'S^XY(dYZ(d]^(dpq(d$f$g(d$I_$I`(d$KW$KX(d?HT?HU(dR)YW$eQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`;'S$z;'S;=`&W<%lO$zR)yW$XQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`*c!`;'S$z;'S;=`&W<%lO$zR*jV$XQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV+YV'tS'TP'uQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_+v]'TP!e^OY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b!},o!}#O1f#O;'S,o;'S;=`/s<%lO,o_,vZ'TP!e^OY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b;'S,o;'S;=`/s<%lO,o_-nZ!e^OY,oYZ%fZ],o]^$z^!a,o!a!b.a!b;'S,o;'S;=`/s<%l~,o~O,o~~%f^.dWOY.|YZ/nZ].|]^/n^!`.|!a;'S.|;'S;=`/h<%lO.|^/RV!e^OY.|Z].|^!a.|!a!b.a!b;'S.|;'S;=`/h<%lO.|^/kP;=`<%l.|^/sO!e^_/vP;=`<%l,o_0OZ'TPOY,oYZ0qZ],o]^0x^!^,o!^!_-i!_!`,o!`!a$z!a;'S,o;'S;=`/s<%lO,o_0xO'TP!e^_1PV'TP!e^OY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_1oZ'TP$kQ!e^OY,oYZ%fZ],o]^$z^!^,o!^!_-i!_!a,o!a!b/y!b;'S,o;'S;=`/s<%lO,o_2i`'TP#fQOY$zYZ%fZ!^$z!^!_%k!_!c$z!c!}3k!}#R$z#R#S3k#S#T$z#T#o3k#o#p4w#p$g$z$g&j3k&j;'S$z;'S;=`&W<%lO$z_3ra'TP#d^OY$zYZ%fZ!Q$z!Q![3k![!^$z!^!_%k!_!c$z!c!}3k!}#R$z#R#S3k#S#T$z#T#o3k#o$g$z$g&j3k&j;'S$z;'S;=`&W<%lO$zV5OV'TP#gUOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR5lW'TP$^QOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR6]V$OQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_6yY#T^'TPOY$zYZ%fZv$zvw7iw!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR7pV$TQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR8^Z'TP%`QOY8VYZ9PZw8Vwx;_x!^8V!^!_;{!_#O8V#O#P<y#P;'S8V;'S;=`>V<%lO8VR9WV'TP%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ9rV%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X<%lO9mQ:^O%`QQ:aRO;'S9m;'S;=`:j;=`O9mQ:oW%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l9m<%lO9mQ;[P;=`<%l9mR;fV'TP%`QOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR<Q]%`QOY8VYZ9PZw8Vwx;_x!a8V!a!b9m!b#O8V#O#P<y#P;'S8V;'S;=`>V<%l~8V~O8V~~%fR=OW'TPOY8VYZ9PZ!^8V!^!_;{!_;'S8V;'S;=`=h;=`<%l9m<%lO8VR=mW%`QOw9mwx:Xx#O9m#O#P:^#P;'S9m;'S;=`;X;=`<%l8V<%lO9mR>YP;=`<%l8VR>dV!zQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV?QV!yU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR?nY'TP$^QOY$zYZ%fZz$zz{@^{!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR@eW$_Q'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRAUY$[Q'TPOY$zYZ%fZ{$z{|At|!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zRA{V%TQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRBiV#OQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_CXZ$[Q%^W'TPOY$zYZ%fZ}$z}!OAt!O!^$z!^!_%k!_!`6U!`!aCz!a;'S$z;'S;=`&W<%lO$zVDRV#aU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVDo['TP$]QOY$zYZ%fZ!O$z!O!PEe!P!Q$z!Q![Fs![!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zVEjX'TPOY$zYZ%fZ!O$z!O!PFV!P!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zVF^V#VU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRFz_'TP%XQOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#SJc#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zRHO]'TPOY$zYZ%fZ{$z{|Hw|}$z}!OHw!O!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRH|X'TPOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zRIpZ'TP%XQOY$zYZ%fZ!Q$z!Q![Ii![!^$z!^!_%k!_#R$z#R#SHw#S;'S$z;'S;=`&W<%lO$zRJhX'TPOY$zYZ%fZ!Q$z!Q![Fs![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_K[['TP$^QOY$zYZ%fZz$zz{LQ{!P$z!P!Q,o!Q!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$z_LVX'TPOYLQYZLrZzLQz{N_{!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQ_LwT'TPOzMWz{Mj{;'SMW;'S;=`NX<%lOMW^MZTOzMWz{Mj{;'SMW;'S;=`NX<%lOMW^MmVOzMWz{Mj{!PMW!P!QNS!Q;'SMW;'S;=`NX<%lOMW^NXO!f^^N[P;=`<%lMW_NdZ'TPOYLQYZLrZzLQz{N_{!PLQ!P!Q! V!Q!^LQ!^!_! s!_;'SLQ;'S;=`!!i<%lOLQ_! ^V!f^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_! vZOYLQYZLrZzLQz{N_{!aLQ!a!bMW!b;'SLQ;'S;=`!!i<%l~LQ~OLQ~~%f_!!lP;=`<%lLQZ!!vm'TP%WYOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!d$z!d!e!&o!e!g$z!g!hGy!h!q$z!q!r!(a!r!z$z!z!{!){!{#R$z#R#S!%}#S#U$z#U#V!&o#V#X$z#X#YGy#Y#c$z#c#d!(a#d#l$z#l#m!){#m;'S$z;'S;=`&W<%lO$zZ!$xa'TP%WYOY$zYZ%fZ!O$z!O!PFs!P!Q$z!Q![!$q![!^$z!^!_%k!_!g$z!g!hGy!h#R$z#R#S!%}#S#X$z#X#YGy#Y;'S$z;'S;=`&W<%lO$zZ!&SX'TPOY$zYZ%fZ!Q$z!Q![!$q![!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!&tY'TPOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!'k['TP%WYOY$zYZ%fZ!Q$z!Q!R!'d!R!S!'d!S!^$z!^!_%k!_#R$z#R#S!&o#S;'S$z;'S;=`&W<%lO$zZ!(fX'TPOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zZ!)YZ'TP%WYOY$zYZ%fZ!Q$z!Q!Y!)R!Y!^$z!^!_%k!_#R$z#R#S!(a#S;'S$z;'S;=`&W<%lO$zZ!*Q]'TPOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zZ!+Q_'TP%WYOY$zYZ%fZ!Q$z!Q![!*y![!^$z!^!_%k!_!c$z!c!i!*y!i#R$z#R#S!){#S#T$z#T#Z!*y#Z;'S$z;'S;=`&W<%lO$zR!,WX!rQ'TPOY$zYZ%fZ![$z![!]!,s!]!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!,zV#yQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!-hV!nU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!.S[$YQOY$zYZ%fZ!^$z!^!_!.x!_!`!/i!`!a*c!a!b!0]!b;'S$z;'S;=`&W<%l~$z~O$z~~%fR!/PW$ZQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!/pX$YQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a*c!a;'S$z;'S;=`&W<%lO$zP!0bR!jP!_!`!0k!r!s!0p#d#e!0pP!0pO!jPP!0sQ!j!k!0y#[#]!0yP!0|Q!r!s!0k#d#e!0k_!1ZX#|Y'TPOY$zYZ%fZ!^$z!^!_%k!_!`)r!`!a!1v!a;'S$z;'S;=`&W<%lO$zV!1}V#PU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!2kX$YQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`!3W!`!a!.x!a;'S$z;'S;=`&W<%lO$zR!3_V$YQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!3{[!wQ'TPOY$zYZ%fZ}$z}!O!4q!O!^$z!^!_%k!_!`$z!`!a!6P!a!b!6m!b;'S$z;'S;=`&W<%lO$zV!4vX'TPOY$zYZ%fZ!^$z!^!_%k!_!`$z!`!a!5c!a;'S$z;'S;=`&W<%lO$zV!5jV#bU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!6WV!h^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!6tW$RQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!7eV$dQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!8Ta'aS'TP'WYOY$zYZ%fZ!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$z_!9ce'aS'TP'WYOY$zYZ%fZr$zrs!:tsw$zwx8Vx!Q$z!Q![!7z![!^$z!^!_%k!_!c$z!c!}!7z!}#R$z#R#S!7z#S#T$z#T#o!7z#o$g$z$g&j!7z&j;'S$z;'S;=`&W<%lO$zR!:{V'TP'uQOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zV!;iV#XU'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!<VV#s^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!<sV#YQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!=aW$VQ'TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`;'S$z;'S;=`&W<%lO$zR!>OZ'TPOY!=yYZ!>qZ!^!=y!^!_!@y!_#O!=y#O#P!Au#P#S!=y#S#T!CP#T;'S!=y;'S;=`!Cm<%lO!=yR!>vV'TPO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s<%lO!?]Q!?`VO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s<%lO!?]Q!?xRO;'S!?];'S;=`!@R;=`O!?]Q!@UWO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s;=`<%l!?]<%lO!?]Q!@sO%UQQ!@vP;=`<%l!?]R!@|]OY!=yYZ!>qZ!a!=y!a!b!?]!b#O!=y#O#P!Au#P#S!=y#S#T!CP#T;'S!=y;'S;=`!Cm<%l~!=y~O!=y~~%fR!AzW'TPOY!=yYZ!>qZ!^!=y!^!_!@y!_;'S!=y;'S;=`!Bd;=`<%l!?]<%lO!=yR!BgWO#O!?]#O#P!?u#P#S!?]#S#T!@n#T;'S!?];'S;=`!@s;=`<%l!=y<%lO!?]R!CWV%UQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!CpP;=`<%l!=y_!CzV!p^'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z_!DjY$UQ#n['TPOY$zYZ%fZ!^$z!^!_%k!_!`6U!`#p$z#p#q!EY#q;'S$z;'S;=`&W<%lO$zR!EaV$SQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!E}V!oQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$zR!FkV$eQ'TPOY$zYZ%fZ!^$z!^!_%k!_;'S$z;'S;=`&W<%lO$z\",tokenizers:[Rw,Uw,qw,0,1,2,3,Vw],topRules:{Template:[0,73],Program:[1,241]},dynamicPrecedences:{298:1},specialized:[{term:284,get:(O,e)=>xm(O)<<1,external:xm},{term:284,get:O=>jw[O]||-1}],tokenPrec:29889});var Cw=ne.define({name:\"php\",parser:Zm.configure({props:[se.add({IfStatement:le({except:/^\\s*({|else\\b|elseif\\b|endif\\b)/}),TryStatement:le({except:/^\\s*({|catch\\b|finally\\b)/}),SwitchBody:O=>{let e=O.textAfter,t=/^\\s*\\}/.test(e),i=/^\\s*(case|default)\\b/.test(e);return O.baseIndent+(t?0:i?1:2)*O.unit},ColonBlock:O=>O.baseIndent+O.unit,\"Block EnumBody DeclarationList\":be({closing:\"}\"}),ArrowFunction:O=>O.baseIndent+O.unit,\"String BlockComment\":()=>null,Statement:le({except:/^({|end(for|foreach|switch|while)\\b)/})}),te.add({\"Block EnumBody DeclarationList SwitchBody ArrayExpression ValueList\":me,ColonBlock(O){return{from:O.from+1,to:O.to}},BlockComment(O){return{from:O.from+2,to:O.to-2}}})]}),languageData:{commentTokens:{block:{open:\"/*\",close:\"*/\"},line:\"//\"},indentOnInput:/^\\s*(?:case |default:|end(?:if|for(?:each)?|switch|while)|else(?:if)?|\\{|\\})$/,wordChars:\"$\",closeBrackets:{stringPrefixes:[\"b\",\"B\"]}}});function vm(O={}){let e=[],t;if(O.baseLanguage!==null)if(O.baseLanguage)t=O.baseLanguage;else{let i=Ti({matchClosingTags:!1});e.push(i.support),t=i.language}return new J(Cw.configure({wrap:t&&xO(i=>i.type.isTop?{parser:t.parser,overlay:r=>r.name==\"Text\"}:null),top:O.plain?\"Program\":\"Template\"}),e)}var Gw=1,zm=194,Um=195,Ew=196,Ym=197,Aw=198,Lw=199,Mw=200,Dw=2,Wm=3,_m=201,Iw=24,Bw=25,Nw=49,Fw=50,Hw=55,Kw=56,Jw=57,eZ=59,tZ=60,OZ=61,iZ=62,rZ=63,nZ=65,sZ=238,aZ=71,oZ=241,lZ=242,cZ=243,hZ=244,fZ=245,dZ=246,uZ=247,QZ=248,jm=72,$Z=249,pZ=250,mZ=251,gZ=252,PZ=253,SZ=254,XZ=255,TZ=256,bZ=73,yZ=77,xZ=263,kZ=112,wZ=130,ZZ=151,vZ=152,YZ=155,WO=10,Ur=13,Lc=32,js=9,Mc=35,_Z=40,RZ=46,Ac=123,Rm=125,Cm=39,Gm=34,Vm=92,VZ=111,qZ=120,zZ=78,UZ=117,WZ=85,jZ=new Set([Bw,Nw,Fw,xZ,nZ,wZ,Kw,Jw,sZ,iZ,rZ,jm,bZ,yZ,tZ,OZ,ZZ,vZ,YZ,kZ]);function Gc(O){return O==WO||O==Ur}function Ec(O){return O>=48&&O<=57||O>=65&&O<=70||O>=97&&O<=102}var CZ=new z((O,e)=>{let t;if(O.next<0)O.acceptToken(Lw);else if(e.context.flags&Us)Gc(O.next)&&O.acceptToken(Aw,1);else if(((t=O.peek(-1))<0||Gc(t))&&e.canShift(Ym)){let i=0;for(;O.next==Lc||O.next==js;)O.advance(),i++;(O.next==WO||O.next==Ur||O.next==Mc)&&O.acceptToken(Ym,-i)}else Gc(O.next)&&O.acceptToken(Ew,1)},{contextual:!0}),GZ=new z((O,e)=>{let t=e.context;if(t.flags)return;let i=O.peek(-1);if(i==WO||i==Ur){let r=0,n=0;for(;;){if(O.next==Lc)r++;else if(O.next==js)r+=8-r%8;else break;O.advance(),n++}r!=t.indent&&O.next!=WO&&O.next!=Ur&&O.next!=Mc&&(r<t.indent?O.acceptToken(Um,-n):O.acceptToken(zm))}}),Us=1,Em=2,jt=4,Ct=8,Gt=16,Et=32;function Ws(O,e,t){this.parent=O,this.indent=e,this.flags=t,this.hash=(O?O.hash+O.hash<<8:0)+e+(e<<4)+t+(t<<6)}var EZ=new Ws(null,0,0);function AZ(O){let e=0;for(let t=0;t<O.length;t++)e+=O.charCodeAt(t)==js?8-e%8:1;return e}var qm=new Map([[oZ,0],[lZ,jt],[cZ,Ct],[hZ,Ct|jt],[fZ,Gt],[dZ,Gt|jt],[uZ,Gt|Ct],[QZ,Gt|Ct|jt],[$Z,Et],[pZ,Et|jt],[mZ,Et|Ct],[gZ,Et|Ct|jt],[PZ,Et|Gt],[SZ,Et|Gt|jt],[XZ,Et|Gt|Ct],[TZ,Et|Gt|Ct|jt]].map(([O,e])=>[O,e|Em])),LZ=new Ge({start:EZ,reduce(O,e,t,i){return O.flags&Us&&jZ.has(e)||(e==aZ||e==jm)&&O.flags&Em?O.parent:O},shift(O,e,t,i){return e==zm?new Ws(O,AZ(i.read(i.pos,t.pos)),0):e==Um?O.parent:e==Iw||e==Hw||e==eZ||e==Wm?new Ws(O,0,Us):qm.has(e)?new Ws(O,0,qm.get(e)|O.flags&Us):O},hash(O){return O.hash}}),MZ=new z(O=>{for(let e=0;e<5;e++){if(O.next!=\"print\".charCodeAt(e))return;O.advance()}if(!/\\w/.test(String.fromCharCode(O.next)))for(let e=0;;e++){let t=O.peek(e);if(!(t==Lc||t==js)){t!=_Z&&t!=RZ&&t!=WO&&t!=Ur&&t!=Mc&&O.acceptToken(Gw);return}}}),DZ=new z((O,e)=>{let{flags:t}=e.context,i=t&jt?Gm:Cm,r=(t&Ct)>0,n=!(t&Gt),s=(t&Et)>0,a=O.pos;for(;!(O.next<0);)if(s&&O.next==Ac)if(O.peek(1)==Ac)O.advance(2);else{if(O.pos==a){O.acceptToken(Wm,1);return}break}else if(n&&O.next==Vm){if(O.pos==a){O.advance();let o=O.next;o>=0&&(O.advance(),IZ(O,o)),O.acceptToken(Dw);return}break}else if(O.next==Vm&&!n&&O.peek(1)>-1)O.advance(2);else if(O.next==i&&(!r||O.peek(1)==i&&O.peek(2)==i)){if(O.pos==a){O.acceptToken(_m,r?3:1);return}break}else if(O.next==WO){if(r)O.advance();else if(O.pos==a){O.acceptToken(_m);return}break}else O.advance();O.pos>a&&O.acceptToken(Mw)});function IZ(O,e){if(e==VZ)for(let t=0;t<2&&O.next>=48&&O.next<=55;t++)O.advance();else if(e==qZ)for(let t=0;t<2&&Ec(O.next);t++)O.advance();else if(e==UZ)for(let t=0;t<4&&Ec(O.next);t++)O.advance();else if(e==WZ)for(let t=0;t<8&&Ec(O.next);t++)O.advance();else if(e==zZ&&O.next==Ac){for(O.advance();O.next>=0&&O.next!=Rm&&O.next!=Cm&&O.next!=Gm&&O.next!=WO;)O.advance();O.next==Rm&&O.advance()}}var BZ=F({'async \"*\" \"**\" FormatConversion FormatSpec':d.modifier,\"for while if elif else try except finally return raise break continue with pass assert await yield match case\":d.controlKeyword,\"in not and or is del\":d.operatorKeyword,\"from def class global nonlocal lambda\":d.definitionKeyword,import:d.moduleKeyword,\"with as print\":d.keyword,Boolean:d.bool,None:d.null,VariableName:d.variableName,\"CallExpression/VariableName\":d.function(d.variableName),\"FunctionDefinition/VariableName\":d.function(d.definition(d.variableName)),\"ClassDefinition/VariableName\":d.definition(d.className),PropertyName:d.propertyName,\"CallExpression/MemberExpression/PropertyName\":d.function(d.propertyName),Comment:d.lineComment,Number:d.number,String:d.string,FormatString:d.special(d.string),Escape:d.escape,UpdateOp:d.updateOperator,\"ArithOp!\":d.arithmeticOperator,BitOp:d.bitwiseOperator,CompareOp:d.compareOperator,AssignOp:d.definitionOperator,Ellipsis:d.punctuation,At:d.meta,\"( )\":d.paren,\"[ ]\":d.squareBracket,\"{ }\":d.brace,\".\":d.derefOperator,\", ;\":d.separator}),NZ={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},Am=Oe.deserialize({version:14,states:\"##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyO<POWO,5:aOOQS,5:a,5:aO<[QdO'#HwOOOW'#Dw'#DwOOOW'#Fz'#FzO<lOWO,5:bOOQS,5:b,5:bOOQS'#F}'#F}O<zQtO,5:iO?lQtO,5=`O@VQ#xO,5=`O@vQtO,5=`OOQS,5:},5:}OA_QeO'#GWOBqQdO,5;^OOQV,5=^,5=^OB|QtO'#IPOCkQdO,5;tOOQS-E:[-E:[OOQV,5;s,5;sO4dQdO'#FQOOQV-E9o-E9oOCsQtO,59]OEzQtO,59iOFeQdO'#HVOFpQdO'#HVO1XQdO'#HVOF{QdO'#DTOGTQdO,59mOGYQdO'#HZO'vQdO'#HZO0rQdO,5=tOOQS,5=t,5=tO0rQdO'#EROOQS'#ES'#ESOGwQdO'#GPOHXQdO,58|OHXQdO,58|O*xQdO,5:oOHgQtO'#H]OOQS,5:r,5:rOOQS,5:z,5:zOHzQdO,5;OOI]QdO'#IOO1XQdO'#H}OOQS,5;Q,5;QOOQS'#GT'#GTOIqQtO,5;QOJPQdO,5;QOJUQdO'#IQOOQS,5;T,5;TOJdQdO'#H|OOQS,5;W,5;WOJuQdO,5;YO4iQdO,5;`O4iQdO,5;cOJ}QtO'#ITO'vQdO'#ITOKXQdO,5;eO4VQdO,5;eO0rQdO,5;jO1XQdO,5;lOK^QeO'#EuOLjQgO,5;fO!!kQdO'#IUO4iQdO,5;jO!!vQdO,5;lO!#OQdO,5;qO!#ZQtO,5;vO'vQdO,5;vPOOO,5=[,5=[P!#bOSO,5=[P!#jOdO,5=[O!&bQtO1G.jO!&iQtO1G.jO!)YQtO1G.jO!)dQtO1G.jO!+}QtO1G.jO!,bQtO1G.jO!,uQdO'#HcO!-TQtO'#GuO0rQdO'#HcO!-_QdO'#HbOOQS,5:Z,5:ZO!-gQdO,5:ZO!-lQdO'#HeO!-wQdO'#HeO!.[QdO,5>OOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5<jOOQS,5<j,5<jOOQS-E9|-E9|OOQS,5<r,5<rOOQS-E:U-E:UOOQV1G0x1G0xO1XQdO'#GRO!7dQtO,5>kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5<k,5<kOOQS-E9}-E9}O!9wQdO1G.hOOQS1G0Z1G0ZO!:VQdO,5=wO!:gQdO,5=wO0rQdO1G0jO0rQdO1G0jO!:xQdO,5>jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!<RQdO,5>lO!<aQdO,5>lO!<oQdO,5>hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5<m,5<mOOQS-E:P-E:POOQS7+&z7+&zOOQS1G3]1G3]OOQS,5<^,5<^OOQS-E9p-E9pOOQS7+$s7+$sO#)bQdO,5=`O#){QdO,5=`O#*^QtO,5<aO#*qQdO1G3cOOQS-E9s-E9sOOQS7+&U7+&UO#+RQdO7+&UO#+aQdO,5<nO#+uQdO1G4UOOQS-E:Q-E:QO#,WQdO1G4UOOQS1G4T1G4TOOQS7+&W7+&WO#,iQdO7+&WOOQS,5<p,5<pO#,tQdO1G4WOOQS-E:S-E:SOOQS,5<l,5<lO#-SQdO1G4SOOQS-E:O-E:OO1XQdO'#EqO#-jQdO'#EqO#-uQdO'#IRO#-}QdO,5;[OOQS7+&`7+&`O0rQdO7+&`O#.SQgO7+&fO!JmQdO'#GXO4iQdO7+&fO4iQdO7+&iO#2QQtO,5<tO'vQdO,5<tO#2[QdO1G4ZOOQS-E:W-E:WO#2fQdO1G4ZO4iQdO7+&kO0rQdO7+&kOOQV7+&p7+&pO!KrQ!fO7+&rO!KzQdO7+&rO`QeO1G0{OOQV-E:X-E:XO4iQdO7+&lO4iQdO7+&lOOQV,5<u,5<uO#2nQdO,5<uO!JmQdO,5<uOOQV7+&l7+&lO#2yQgO7+&lO#6tQdO,5<vO#7PQdO1G4[OOQS-E:Y-E:YO#7^QdO1G4[O#7fQdO'#IWO#7tQdO'#IWO1XQdO'#IWOOQS'#IW'#IWO#8PQdO'#IVOOQS,5;n,5;nO#8XQdO,5;nO0rQdO'#FUOOQV7+&r7+&rO4iQdO7+&rOOQV7+&w7+&wO4iQdO7+&wO#8^QfO,5;xOOQV7+&|7+&|POOO7+(b7+(bO#8cQdO1G3iOOQS,5<c,5<cO#8qQdO1G3hOOQS-E9u-E9uO#9UQdO,5<dO#9aQdO,5<dO#9tQdO1G3kOOQS-E9v-E9vO#:UQdO1G3kO#:^QdO1G3kO#:nQdO1G3kO#:UQdO1G3kOOQS<<H[<<H[O#:yQtO1G1zOOQS<<Hk<<HkP#;WQdO'#FtO8vQdO1G3bO#;eQdO1G3bO#;jQdO<<HkOOQS<<Hl<<HlO#;zQdO7+)QOOQS<<Hs<<HsO#<[QtO1G1yP#<{QdO'#FsO#=YQdO7+)RO#=jQdO7+)RO#=rQdO<<HwO#=wQdO7+({OOQS<<Hy<<HyO#>nQdO,5<bO'vQdO,5<bOOQS-E9t-E9tOOQS<<Hw<<HwOOQS,5<g,5<gO0rQdO,5<gO#>sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<<IpO1XQdO1G2YP1XQdO'#GSO#AOQdO7+)pO#AaQdO7+)pOOQS<<Ir<<IrP1XQdO'#GUP0rQdO'#GQOOQS,5;],5;]O#ArQdO,5>mO#BQQdO,5>mOOQS1G0v1G0vOOQS<<Iz<<IzOOQV-E:V-E:VO4iQdO<<JQOOQV,5<s,5<sO4iQdO,5<sOOQV<<JQ<<JQOOQV<<JT<<JTO#BYQtO1G2`P#BdQdO'#GYO#BkQdO7+)uO#BuQgO<<JVO4iQdO<<JVOOQV<<J^<<J^O4iQdO<<J^O!KrQ!fO<<J^O#FpQgO7+&gOOQV<<JW<<JWO#FzQgO<<JWOOQV1G2a1G2aO1XQdO1G2aO#JuQdO1G2aO4iQdO<<JWO1XQdO1G2bP0rQdO'#G[O#KQQdO7+)vO#K_QdO7+)vOOQS'#FT'#FTO0rQdO,5>rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<<Jc<<JcO#LhQdO1G1dOOQS7+)T7+)TP#LmQdO'#FwO#L}QdO1G2OO#MbQdO1G2OO#MrQdO1G2OP#M}QdO'#FxO#N[QdO7+)VO#NlQdO7+)VO#NlQdO7+)VO#NtQdO7+)VO$ UQdO7+(|O8vQdO7+(|OOQSAN>VAN>VO$ oQdO<<LmOOQSAN>cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<<MT<<MTO$#nQdO7+(fOOQSAN?[AN?[OOQS7+'t7+'tO$$XQdO<<M[OOQS,5<q,5<qO$$jQdO1G4XOOQS-E:T-E:TOOQVAN?lAN?lOOQV1G2_1G2_O4iQdOAN?qO$$xQgOAN?qOOQVAN?xAN?xO4iQdOAN?xOOQV<<JR<<JRO4iQdOAN?rO4iQdO7+'{OOQV7+'{7+'{O1XQdO7+'{OOQVAN?rAN?rOOQS7+'|7+'|O$(sQdO<<MbOOQS1G4^1G4^O0rQdO1G4^OOQS,5<w,5<wO$)QQdO1G4]OOQS-E:Z-E:ZOOQU'#G_'#G_O$)cQfO7+'OO$)nQdO'#F_O$*uQdO7+'jO$+VQdO7+'jOOQS7+'j7+'jO$+bQdO<<LqO$+rQdO<<LqO$+rQdO<<LqO$+zQdO'#H^OOQS<<Lh<<LhO$,UQdO<<LhOOQS7+'h7+'hOOQS'#D|'#D|OOOO1G4R1G4RO$,oQdO1G4RO$,wQdO1G4RP!=hQdO'#GVOOQVG25]G25]O4iQdOG25]OOQVG25dG25dOOQVG25^G25^OOQV<<Kg<<KgO4iQdO<<KgOOQS7+)x7+)xP$-SQdO'#G]OOQU-E:]-E:]OOQV<<Jj<<JjO$-vQtO'#FaOOQS'#Fc'#FcO$.WQdO'#FbO$.xQdO'#FbOOQS'#Fb'#FbO$.}QdO'#IYO$)nQdO'#FiO$)nQdO'#FiO$/fQdO'#FjO$)nQdO'#FkO$/mQdO'#IZOOQS'#IZ'#IZO$0[QdO,5;yOOQS<<KU<<KUO$0dQdO<<KUO$0tQdOANB]O$1UQdOANB]O$1^QdO'#H_OOQS'#H_'#H_O1sQdO'#DcO$1wQdO,5=xOOQSANBSANBSOOOO7+)m7+)mO$2`QdO7+)mOOQVLD*wLD*wOOQVANARANARO5uQ!fO'#GaO$2hQtO,5<SO$)nQdO'#FmOOQS,5<W,5<WOOQS'#Fd'#FdO$3YQdO,5;|O$3_QdO,5;|OOQS'#Fg'#FgO$)nQdO'#G`O$4PQdO,5<QO$4kQdO,5>tO$4{QdO,5>tO1XQdO,5<PO$5^QdO,5<TO$5cQdO,5<TO$)nQdO'#I[O$5hQdO'#I[O$5mQdO,5<UOOQS,5<V,5<VO0rQdO'#FpOOQU1G1e1G1eO4iQdO1G1eOOQSAN@pAN@pO$5rQdOG27wO$6SQdO,59}OOQS1G3d1G3dOOOO<<MX<<MXOOQS,5<{,5<{OOQS-E:_-E:_O$6XQtO'#FaO$6`QdO'#I]O$6nQdO'#I]O$6vQdO,5<XOOQS1G1h1G1hO$6{QdO1G1hO$7QQdO,5<zOOQS-E:^-E:^O$7lQdO,5=OO$8TQdO1G4`OOQS-E:b-E:bOOQS1G1k1G1kOOQS1G1o1G1oO$8eQdO,5>vO$)nQdO,5>vOOQS1G1p1G1pOOQS,5<[,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5<YO$8sQdO,5>wO$8zQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9SQdO1G4bO$9^QdO1G4bO$9fQdO1G4bOOQS7+%T7+%TO$9tQdO1G1tO$:SQtO'#FaO$:ZQdO,5<}OOQS,5<},5<}O$:iQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:pQdO,5<|O$:uQdO7+)|OOQS-E:`-E:`O$;PQdO7+)|O$)nQdO,5<ZP$)nQdO'#GcO$;XQdO1G2hO$)nQdO1G2hP$;gQdO'#GbO$;nQdO<<MhO$;xQdO1G1uO$<WQdO7+(SO8vQdO'#C}O8vQdO,59bO8vQdO,59bO8vQdO,59bO$<fQtO,5=`O8vQdO1G.|O0rQdO1G/XO0rQdO7+$pP$<yQdO'#GOO'vQdO'#GtO$=WQdO,59bO$=]QdO,59bO$=dQdO,59mO$=iQdO1G/UO1sQdO'#DRO8vQdO,59j\",stateData:\"$>S~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~Og'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~\",goto:\"!=j'QPPPPPP'RP'Z*s+[+t,_,y-fP.SP'Z.r.r'ZPPP'Z2[PPPPPP2[5PPP5PP7b7k=sPP=v>h>kPP'Z'ZPP>zPP'Z'ZPP'Z'Z'Z'Z'Z?O?w'ZP?zP@QDXGuGyPG|HWH['ZPPPH_Hk'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHqH}IVPI^IdPI^PI^I^PPPI^PKrPK{LVL]KrPI^LfPI^PLmLsPLwM]MzNeLwLwNkNxLwLwLwLw! ^! d! g! l! o! y!!P!!]!!o!!u!#P!#V!#s!#y!$P!$Z!$a!$g!$y!%T!%Z!%a!%k!%q!%w!%}!&T!&Z!&e!&k!&u!&{!'U!'[!'k!'s!'}!(UPPPPPPPPPPP!([!(_!(e!(n!(x!)TPPPPPPPPPPPP!-u!/Z!3^!6oPP!6w!7W!7a!8Y!8P!8c!8i!8l!8o!8r!8z!9jPPPPPPPPPPPPPPPPP!9m!9q!9wP!:]!:a!:m!:v!;S!;j!;m!;p!;v!;|!<S!<VP!<_!<h!=d!=g]eOn#g$j)t,P'}`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r{!cQ#c#p$R$d$p%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g}!dQ#c#p$R$d$p$u%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!P!eQ#c#p$R$d$p$u$v%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!R!fQ#c#p$R$d$p$u$v$w%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!T!gQ#c#p$R$d$p$u$v$w$x%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!V!hQ#c#p$R$d$p$u$v$w$x$y%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g!Z!hQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0g'}TOTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r&eVOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0n0r%oXOYZ[dnrxy}!P!Q!U!i!k#[#d#g#y#{#}$Q$h$j$}%S%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/V/Z0i0j0kQ#vqQ/[.kR0o0q't`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rh#jhz{$W$Z&l&q)S)X+f+g-RW#rq&].k0qQ$]|Q$a!OQ$n!VQ$o!WW$|!i'm*d,gS&[#s#tQ'S$iQ(s&UQ)U&nU)Y&s)Z+jW)a&w+m-T-{Q*Q']W*R'_,`-h.TQ+l)`S,_*S*TQ-Q+eQ-_,TQ-c,WQ.R-al.W-l.^._.a.z.|/R/j/o/t/y0U0Z0^Q/S.`Q/a.tQ/l/OU0P/u0S0[X0V/z0W0_0`R&Z#r!_!wYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZR%^!vQ!{YQ%x#[Q&d#}Q&g$QR,{+YT.j-s/s!Y!jQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0gQ&X#kQ'c$oR*^'dR'l$|Q%V!mR/_.r'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rS#a_#b!P.[-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rT#a_#bT#^^#_R(o%xa(l%x(n(o+`,{-y-z.oT+[(k+]R-z,{Q$PsQ+l)aQ,^*RR-e,_X#}s$O$P&fQ&y$aQ'a$nQ'd$oR)s'SQ)b&wV-S+m-T-{ZgOn$j)t,PXkOn)t,PQ$k!TQ&z$bQ&{$cQ'^$mQ'b$oQ)q'RQ)x'WQ){'XQ)|'YQ*Z'`S*]'c'dQ+s)gQ+u)hQ+v)iQ+z)oS+|)r*[Q,Q)vQ,R)wS,S)y)zQ,d*^Q-V+rQ-W+tQ-Y+{S-Z+},OQ-`,UQ-b,VQ-|-XQ.O-[Q.P-^Q.Q-_Q.p-}Q.q.RQ/W.dR/r/XWkOn)t,PR#mjQ'`$nS)r'S'aR,O)sQ,]*RR-f,^Q*['`Q+})rR-[,OZiOjn)t,PQ'f$pR*`'gT-j,e-ku.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^t.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^Q/S.`X0V/z0W0_0`!P.Z-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`Q.w.YR/f.xg.z.].{/b/i/n/|0O0Q0]0a0bu.b-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^X.u.W.b/a0PR/c.tV0R/u0S0[R/X.dQnOS#on,PR,P)tQ&^#uR(x&^S%m#R#wS(_%m(bT(b%p&`Q%a!yQ%h!}W(P%a%h(U(YQ(U%eR(Y%jQ&i$RR)O&iQ(e%qQ*{(`T+R(e*{Q'n%OR*e'nS'q%R%SY*i'q*j,m-q.hU*j'r's'tU,m*k*l*mS-q,n,oR.h-rQ#Y]R%t#YQ#_^R%y#_Q(h%vS+W(h+XR+X(iQ+](kR,|+]Q#b_R%{#bQ#ebQ%}#cW&Q#e%}({+bQ({&cR+b0gQ$OsS&e$O&fR&f$PQ&v$_R)_&vQ&V#jR(t&VQ&m$VS)T&m+hR+h)UQ$Z{R&p$ZQ&t$]R)[&tQ+n)bR-U+nQ#hfR&S#hQ)f&zR+q)fQ&}$dS)m&})nR)n'OQ'V$kR)u'VQ'[$lS*P'[,ZR,Z*QQ,a*VR-i,aWjOn)t,PR#ljQ-k,eR.U-kd.{.]/b/i/n/|0O0Q0]0a0bR/h.{U.s.W/a0PR/`.sQ/{/nS0X/{0YR0Y/|S/v/b/cR0T/vQ.}.]R/k.}R!ZPXmOn)t,PWlOn)t,PR'T$jYfOn$j)t,PR&R#g[sOn#g$j)t,PR&d#}&dQOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0n0rQ!nTQ#caQ#poU$Rt%c(SS$d!R$gQ$p!XQ$u!cQ$v!dQ$w!eQ$x!fQ$y!gQ$z!hQ%e!zQ%j#OQ%p#SQ%q#TQ&`#xQ'O$eQ'g$qQ(q&OU(|&h(}+cW)j&|)l+x+yQ*o'|Q*x(]Q+w)kQ,v+QR0g0lQ!yYQ!}ZQ$b!PQ$c!QQ%R!kQ't%S^'{%`%g(O(W*q*t*v^*f'p*h,k,l-p.g/ZQ*l'rQ*m'sQ+t)gQ,j*gQ,n*kQ-n,hQ-o,iQ-r,oQ.e-mR/Y.f[bOn#g$j)t,P!^!vYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZQ#R[Q#fdS#wrxQ$UyW$_}$Q'P)pS$l!U$hW${!i'm*d,gS%v#[+Y`&P#d%|(p(r(z+a-O0kQ&a#yQ&b#{Q&c#}Q'j$}Q'z%^W([%l(^*y*}Q(`%nQ(i%wQ(v&ZS(y&_0iQ)P&jQ)Q&kU)]&u)^+kQ)d&xQ)y'WY)}'Z*O,X,Y-dQ*b'lS*n'w0jW+P(d*z,s,wW+T(g+V,y,zQ+p)eQ,U)zQ,c*YQ,x+UQ-P+dQ-e,]Q-v,uQ.S-fR/q/VhUOn#d#g$j%|&_'w(p(r)t,P%U!uYZ[drxy}!P!Q!U!i!k#[#y#{#}$Q$h$}%S%^%`%g%l%n%w&Z&j&k&u&x'P'W'Z'l'm'p'r's(O(W(^(d(g(z)^)e)g)p)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/V/Z0i0j0kQ#qpW%W!o!s0d0nQ%X!pQ%Y!qQ%[!tQ%f0cS'v%Z0hQ'x0eQ'y0fQ,p*rQ-u,qS.i-s/sR0p0rU#uq.k0qR(w&][cOn#g$j)t,PZ!xY#[#}$Q+YQ#W[Q#zrR$TxQ%b!yQ%i!}Q%o#RQ'j${Q(V%eQ(Z%jQ(c%pQ(f%qQ*|(`Q,f*bQ-t,pQ.m-uR/].lQ$StQ(R%cR*s(SQ.l-sR/}/sR#QZR#V[R%Q!iQ%O!iV*c'm*d,g!Z!lQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v0gR%T!kT#]^#_Q%x#[R,{+YQ(m%xS+_(n(oQ,}+`Q-x,{S.n-y-zR/^.oT+Z(k+]Q$`}Q&g$QQ)o'PR+{)pQ$XzQ)W&qR+i)XQ$XzQ&o$WQ)W&qR+i)XQ#khW$Vz$W&q)XQ$[{Q&r$ZZ)R&l)S+f+g-RR$^|R)c&wXlOn)t,PQ$f!RR'Q$gQ$m!UR'R$hR*X'_Q*V'_V-g,`-h.TQ.d-lQ/P.^R/Q._U.]-l.^._Q/U.aQ/b.tQ/g.zU/i.|/j/yQ/n/RQ/|/oQ0O/tU0Q/u0S0[Q0]0UQ0a0ZR0b0^R/T.`R/d.t\",nodeNames:\"\\u26A0 print Escape { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard\",maxTerm:277,context:LZ,nodeProps:[[\"isolate\",-5,4,71,72,73,77,\"\"],[\"group\",-15,6,85,87,88,90,92,94,96,98,99,100,102,105,108,110,\"Statement Statement\",-22,8,18,21,25,40,49,50,56,57,60,61,62,63,64,67,70,71,72,79,80,81,82,\"Expression\",-10,114,116,119,121,122,126,128,133,135,138,\"Statement\",-9,143,144,147,148,150,151,152,153,154,\"Pattern\"],[\"openedBy\",23,\"(\",54,\"[\",58,\"{\"],[\"closedBy\",24,\")\",55,\"]\",59,\"}\"]],propSources:[BZ],skippedNodes:[0,4],repeatNodeCount:34,tokenData:\"!2|~R!`OX%TXY%oY[%T[]%o]p%Tpq%oqr'ars)Yst*xtu%Tuv,dvw-hwx.Uxy/tyz0[z{0r{|2S|}2p}!O3W!O!P4_!P!Q:Z!Q!R;k!R![>_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T\",tokenizers:[MZ,GZ,CZ,DZ,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:O=>NZ[O]||-1}],tokenPrec:7668});var Lm=new Tt,Dm=new Set([\"Script\",\"Body\",\"FunctionDefinition\",\"ClassDefinition\",\"LambdaExpression\",\"ForStatement\",\"MatchClause\"]);function Cs(O){return(e,t,i)=>{if(i)return!1;let r=e.node.getChild(\"VariableName\");return r&&t(r,O),!0}}var FZ={FunctionDefinition:Cs(\"function\"),ClassDefinition:Cs(\"class\"),ForStatement(O,e,t){if(t){for(let i=O.node.firstChild;i;i=i.nextSibling)if(i.name==\"VariableName\")e(i,\"variable\");else if(i.name==\"in\")break}},ImportStatement(O,e){var t,i;let{node:r}=O,n=((t=r.firstChild)===null||t===void 0?void 0:t.name)==\"from\";for(let s=r.getChild(\"import\");s;s=s.nextSibling)s.name==\"VariableName\"&&((i=s.nextSibling)===null||i===void 0?void 0:i.name)!=\"as\"&&e(s,n?\"variable\":\"namespace\")},AssignStatement(O,e){for(let t=O.node.firstChild;t;t=t.nextSibling)if(t.name==\"VariableName\")e(t,\"variable\");else if(t.name==\":\"||t.name==\"AssignOp\")break},ParamList(O,e){for(let t=null,i=O.node.firstChild;i;i=i.nextSibling)i.name==\"VariableName\"&&(!t||!/\\*|AssignOp/.test(t.name))&&e(i,\"variable\"),t=i},CapturePattern:Cs(\"variable\"),AsPattern:Cs(\"variable\"),__proto__:null};function Im(O,e){let t=Lm.get(e);if(t)return t;let i=[],r=!0;function n(s,a){let o=O.sliceString(s.from,s.to);i.push({label:o,type:a})}return e.cursor(C.IncludeAnonymous).iterate(s=>{if(s.name){let a=FZ[s.name];if(a&&a(s,n,r)||!r&&Dm.has(s.name))return!1;r=!1}else if(s.to-s.from>8192){for(let a of Im(O,s.node))i.push(a);return!1}}),Lm.set(e,i),i}var Mm=/^[\\w\\xa1-\\uffff][\\w\\d\\xa1-\\uffff]*$/,Bm=[\"String\",\"FormatString\",\"Comment\",\"PropertyName\"];function HZ(O){let e=U(O.state).resolveInner(O.pos,-1);if(Bm.indexOf(e.name)>-1)return null;let t=e.name==\"VariableName\"||e.to-e.from<20&&Mm.test(O.state.sliceDoc(e.from,e.to));if(!t&&!O.explicit)return null;let i=[];for(let r=e;r;r=r.parent)Dm.has(r.name)&&(i=i.concat(Im(O.state.doc,r)));return{options:i,from:t?e.from:O.pos,validFor:Mm}}var KZ=[\"__annotations__\",\"__builtins__\",\"__debug__\",\"__doc__\",\"__import__\",\"__name__\",\"__loader__\",\"__package__\",\"__spec__\",\"False\",\"None\",\"True\"].map(O=>({label:O,type:\"constant\"})).concat([\"ArithmeticError\",\"AssertionError\",\"AttributeError\",\"BaseException\",\"BlockingIOError\",\"BrokenPipeError\",\"BufferError\",\"BytesWarning\",\"ChildProcessError\",\"ConnectionAbortedError\",\"ConnectionError\",\"ConnectionRefusedError\",\"ConnectionResetError\",\"DeprecationWarning\",\"EOFError\",\"Ellipsis\",\"EncodingWarning\",\"EnvironmentError\",\"Exception\",\"FileExistsError\",\"FileNotFoundError\",\"FloatingPointError\",\"FutureWarning\",\"GeneratorExit\",\"IOError\",\"ImportError\",\"ImportWarning\",\"IndentationError\",\"IndexError\",\"InterruptedError\",\"IsADirectoryError\",\"KeyError\",\"KeyboardInterrupt\",\"LookupError\",\"MemoryError\",\"ModuleNotFoundError\",\"NameError\",\"NotADirectoryError\",\"NotImplemented\",\"NotImplementedError\",\"OSError\",\"OverflowError\",\"PendingDeprecationWarning\",\"PermissionError\",\"ProcessLookupError\",\"RecursionError\",\"ReferenceError\",\"ResourceWarning\",\"RuntimeError\",\"RuntimeWarning\",\"StopAsyncIteration\",\"StopIteration\",\"SyntaxError\",\"SyntaxWarning\",\"SystemError\",\"SystemExit\",\"TabError\",\"TimeoutError\",\"TypeError\",\"UnboundLocalError\",\"UnicodeDecodeError\",\"UnicodeEncodeError\",\"UnicodeError\",\"UnicodeTranslateError\",\"UnicodeWarning\",\"UserWarning\",\"ValueError\",\"Warning\",\"ZeroDivisionError\"].map(O=>({label:O,type:\"type\"}))).concat([\"bool\",\"bytearray\",\"bytes\",\"classmethod\",\"complex\",\"float\",\"frozenset\",\"int\",\"list\",\"map\",\"memoryview\",\"object\",\"range\",\"set\",\"staticmethod\",\"str\",\"super\",\"tuple\",\"type\"].map(O=>({label:O,type:\"class\"}))).concat([\"abs\",\"aiter\",\"all\",\"anext\",\"any\",\"ascii\",\"bin\",\"breakpoint\",\"callable\",\"chr\",\"compile\",\"delattr\",\"dict\",\"dir\",\"divmod\",\"enumerate\",\"eval\",\"exec\",\"exit\",\"filter\",\"format\",\"getattr\",\"globals\",\"hasattr\",\"hash\",\"help\",\"hex\",\"id\",\"input\",\"isinstance\",\"issubclass\",\"iter\",\"len\",\"license\",\"locals\",\"max\",\"min\",\"next\",\"oct\",\"open\",\"ord\",\"pow\",\"print\",\"property\",\"quit\",\"repr\",\"reversed\",\"round\",\"setattr\",\"slice\",\"sorted\",\"sum\",\"vars\",\"zip\"].map(O=>({label:O,type:\"function\"}))),JZ=[W(\"def ${name}(${params}):\\n\t${}\",{label:\"def\",detail:\"function\",type:\"keyword\"}),W(\"for ${name} in ${collection}:\\n\t${}\",{label:\"for\",detail:\"loop\",type:\"keyword\"}),W(\"while ${}:\\n\t${}\",{label:\"while\",detail:\"loop\",type:\"keyword\"}),W(\"try:\\n\t${}\\nexcept ${error}:\\n\t${}\",{label:\"try\",detail:\"/ except block\",type:\"keyword\"}),W(`if \\${}:\n\t\n`,{label:\"if\",detail:\"block\",type:\"keyword\"}),W(\"if ${}:\\n\t${}\\nelse:\\n\t${}\",{label:\"if\",detail:\"/ else block\",type:\"keyword\"}),W(\"class ${name}:\\n\tdef __init__(self, ${params}):\\n\t\t\t${}\",{label:\"class\",detail:\"definition\",type:\"keyword\"}),W(\"import ${module}\",{label:\"import\",detail:\"statement\",type:\"keyword\"}),W(\"from ${module} import ${names}\",{label:\"from\",detail:\"import\",type:\"keyword\"})],ev=cO(Bm,zt(KZ.concat(JZ)));function Dc(O){let{node:e,pos:t}=O,i=O.lineIndent(t,-1),r=null;for(;;){let n=e.childBefore(t);if(n)if(n.name==\"Comment\")t=n.from;else if(n.name==\"Body\"||n.name==\"MatchBody\")O.baseIndentFor(n)+O.unit<=i&&(r=n),e=n;else if(n.name==\"MatchClause\")e=n;else if(n.type.is(\"Statement\"))e=n;else break;else break}return r}function Ic(O,e){let t=O.baseIndentFor(e),i=O.lineAt(O.pos,-1),r=i.from+i.text.length;return/^\\s*($|#)/.test(i.text)&&O.node.to<r+100&&!/\\S/.test(O.state.sliceDoc(r,O.node.to))&&O.lineIndent(O.pos,-1)<=t||/^\\s*(else:|elif |except |finally:|case\\s+[^=:]+:)/.test(O.textAfter)&&O.lineIndent(O.pos,-1)>t?null:t+O.unit}var Bc=ne.define({name:\"python\",parser:Am.configure({props:[se.add({Body:O=>{var e;let t=/^\\s*(#|$)/.test(O.textAfter)&&Dc(O)||O.node;return(e=Ic(O,t))!==null&&e!==void 0?e:O.continue()},MatchBody:O=>{var e;let t=Dc(O);return(e=Ic(O,t||O.node))!==null&&e!==void 0?e:O.continue()},IfStatement:O=>/^\\s*(else:|elif )/.test(O.textAfter)?O.baseIndent:O.continue(),\"ForStatement WhileStatement\":O=>/^\\s*else:/.test(O.textAfter)?O.baseIndent:O.continue(),TryStatement:O=>/^\\s*(except[ :]|finally:|else:)/.test(O.textAfter)?O.baseIndent:O.continue(),MatchStatement:O=>/^\\s*case /.test(O.textAfter)?O.baseIndent+O.unit:O.continue(),\"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression\":be({closing:\")\"}),\"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression\":be({closing:\"}\"}),\"ArrayExpression ArrayComprehensionExpression\":be({closing:\"]\"}),MemberExpression:O=>O.baseIndent+O.unit,\"String FormatString\":()=>null,Script:O=>{var e;let t=Dc(O);return(e=t&&Ic(O,t))!==null&&e!==void 0?e:O.continue()}}),te.add({\"ArrayExpression DictionaryExpression SetExpression TupleExpression\":me,Body:(O,e)=>({from:O.from+1,to:O.to-(O.to==e.doc.length?0:1)}),\"String FormatString\":(O,e)=>({from:e.doc.lineAt(O.from).to,to:O.to})})]}),languageData:{closeBrackets:{brackets:[\"(\",\"[\",\"{\",\"'\",'\"',\"'''\",'\"\"\"'],stringPrefixes:[\"f\",\"fr\",\"rf\",\"r\",\"u\",\"b\",\"br\",\"rb\",\"F\",\"FR\",\"RF\",\"R\",\"U\",\"B\",\"BR\",\"RB\"]},commentTokens:{line:\"#\"},indentOnInput:/^\\s*([\\}\\]\\)]|else:|elif |except |finally:|case\\s+[^:]*:?)$/}});function Nm(){return new J(Bc,[Bc.data.of({autocomplete:HZ}),Bc.data.of({autocomplete:ev})])}var tv=36,Fm=1,Ov=2,yi=3,Nc=4,iv=5,rv=6,nv=7,sv=8,av=9,ov=10,lv=11,cv=12,hv=13,fv=14,dv=15,uv=16,Qv=17,Hm=18,$v=19,ng=20,sg=21,Km=22,pv=23,mv=24;function Hc(O){return O>=65&&O<=90||O>=97&&O<=122||O>=48&&O<=57}function gv(O){return O>=48&&O<=57||O>=97&&O<=102||O>=65&&O<=70}function CO(O,e,t){for(let i=!1;;){if(O.next<0)return;if(O.next==e&&!i){O.advance();return}i=t&&!i&&O.next==92,O.advance()}}function Pv(O,e){e:for(;;){if(O.next<0)return;if(O.next==36){O.advance();for(let t=0;t<e.length;t++){if(O.next!=e.charCodeAt(t))continue e;O.advance()}if(O.next==36){O.advance();return}}else O.advance()}}function Sv(O,e){let t=\"[{<(\".indexOf(String.fromCharCode(e)),i=t<0?e:\"]}>)\".charCodeAt(t);for(;;){if(O.next<0)return;if(O.next==i&&O.peek(1)==39){O.advance(2);return}O.advance()}}function Kc(O,e){for(;!(O.next!=95&&!Hc(O.next));)e!=null&&(e+=String.fromCharCode(O.next)),O.advance();return e}function Xv(O){if(O.next==39||O.next==34||O.next==96){let e=O.next;O.advance(),CO(O,e,!1)}else Kc(O)}function Jm(O,e){for(;O.next==48||O.next==49;)O.advance();e&&O.next==e&&O.advance()}function eg(O,e){for(;;){if(O.next==46){if(e)break;e=!0}else if(O.next<48||O.next>57)break;O.advance()}if(O.next==69||O.next==101)for(O.advance(),(O.next==43||O.next==45)&&O.advance();O.next>=48&&O.next<=57;)O.advance()}function tg(O){for(;!(O.next<0||O.next==10);)O.advance()}function jO(O,e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)==O)return!0;return!1}var Fc=` \t\\r\n`;function ag(O,e,t){let i=Object.create(null);i.true=i.false=iv,i.null=i.unknown=rv;for(let r of O.split(\" \"))r&&(i[r]=ng);for(let r of e.split(\" \"))r&&(i[r]=sg);for(let r of(t||\"\").split(\" \"))r&&(i[r]=mv);return i}var GO=\"array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying \",EO=\"absolute action add after all allocate alter and any are as asc assertion at authorization before begin between both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone \",Jc={backslashEscapes:!1,hashComments:!1,spaceAfterDashes:!1,slashComments:!1,doubleQuotedStrings:!1,doubleDollarQuotedStrings:!1,unquotedBitLiterals:!1,treatBitsAsBytes:!1,charSetCasts:!1,plsqlQuotingMechanism:!1,operatorChars:\"*+-%<>!=&|~^/\",specialVar:\"?\",identifierQuotes:'\"',caseInsensitiveIdentifiers:!1,words:ag(EO,GO)};function Tv(O,e,t,i){let r={};for(let n in Jc)r[n]=(O.hasOwnProperty(n)?O:Jc)[n];return e&&(r.words=ag(e,t||\"\",i)),r}function og(O){return new z(e=>{var t;let{next:i}=e;if(e.advance(),jO(i,Fc)){for(;jO(e.next,Fc);)e.advance();e.acceptToken(tv)}else if(i==36&&O.doubleDollarQuotedStrings){let r=Kc(e,\"\");e.next==36&&(e.advance(),Pv(e,r),e.acceptToken(yi))}else if(i==39||i==34&&O.doubleQuotedStrings)CO(e,i,O.backslashEscapes),e.acceptToken(yi);else if(i==35&&O.hashComments||i==47&&e.next==47&&O.slashComments)tg(e),e.acceptToken(Fm);else if(i==45&&e.next==45&&(!O.spaceAfterDashes||e.peek(1)==32))tg(e),e.acceptToken(Fm);else if(i==47&&e.next==42){e.advance();for(let r=1;;){let n=e.next;if(e.next<0)break;if(e.advance(),n==42&&e.next==47){if(r--,e.advance(),!r)break}else n==47&&e.next==42&&(r++,e.advance())}e.acceptToken(Ov)}else if((i==101||i==69)&&e.next==39)e.advance(),CO(e,39,!0),e.acceptToken(yi);else if((i==110||i==78)&&e.next==39&&O.charSetCasts)e.advance(),CO(e,39,O.backslashEscapes),e.acceptToken(yi);else if(i==95&&O.charSetCasts)for(let r=0;;r++){if(e.next==39&&r>1){e.advance(),CO(e,39,O.backslashEscapes),e.acceptToken(yi);break}if(!Hc(e.next))break;e.advance()}else if(O.plsqlQuotingMechanism&&(i==113||i==81)&&e.next==39&&e.peek(1)>0&&!jO(e.peek(1),Fc)){let r=e.peek(1);e.advance(2),Sv(e,r),e.acceptToken(yi)}else if(jO(i,O.identifierQuotes)){let r=i==91?93:i;CO(e,r,!1),e.acceptToken($v)}else if(i==40)e.acceptToken(nv);else if(i==41)e.acceptToken(sv);else if(i==123)e.acceptToken(av);else if(i==125)e.acceptToken(ov);else if(i==91)e.acceptToken(lv);else if(i==93)e.acceptToken(cv);else if(i==59)e.acceptToken(hv);else if(O.unquotedBitLiterals&&i==48&&e.next==98)e.advance(),Jm(e),e.acceptToken(Km);else if((i==98||i==66)&&(e.next==39||e.next==34)){let r=e.next;e.advance(),O.treatBitsAsBytes?(CO(e,r,O.backslashEscapes),e.acceptToken(pv)):(Jm(e,r),e.acceptToken(Km))}else if(i==48&&(e.next==120||e.next==88)||(i==120||i==88)&&e.next==39){let r=e.next==39;for(e.advance();gv(e.next);)e.advance();r&&e.next==39&&e.advance(),e.acceptToken(Nc)}else if(i==46&&e.next>=48&&e.next<=57)eg(e,!0),e.acceptToken(Nc);else if(i==46)e.acceptToken(fv);else if(i>=48&&i<=57)eg(e,!1),e.acceptToken(Nc);else if(jO(i,O.operatorChars)){for(;jO(e.next,O.operatorChars);)e.advance();e.acceptToken(dv)}else if(jO(i,O.specialVar))e.next==i&&e.advance(),Xv(e),e.acceptToken(Qv);else if(i==58||i==44)e.acceptToken(uv);else if(Hc(i)){let r=Kc(e,String.fromCharCode(i));e.acceptToken(e.next==46||e.peek(-r.length-1)==46?Hm:(t=O.words[r.toLowerCase()])!==null&&t!==void 0?t:Hm)}})}var lg=og(Jc),bv=Oe.deserialize({version:14,states:\"%vQ]QQOOO#wQRO'#DSO$OQQO'#CwO%eQQO'#CxO%lQQO'#CyO%sQQO'#CzOOQQ'#DS'#DSOOQQ'#C}'#C}O'UQRO'#C{OOQQ'#Cv'#CvOOQQ'#C|'#C|Q]QQOOQOQQOOO'`QQO'#DOO(xQRO,59cO)PQQO,59cO)UQQO'#DSOOQQ,59d,59dO)cQQO,59dOOQQ,59e,59eO)jQQO,59eOOQQ,59f,59fO)qQQO,59fOOQQ-E6{-E6{OOQQ,59b,59bOOQQ-E6z-E6zOOQQ,59j,59jOOQQ-E6|-E6|O+VQRO1G.}O+^QQO,59cOOQQ1G/O1G/OOOQQ1G/P1G/POOQQ1G/Q1G/QP+kQQO'#C}O+rQQO1G.}O)PQQO,59cO,PQQO'#Cw\",stateData:\",[~OtOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O^]ORvXSvXTvXUvXVvXXvXZvX]vX_vX`vXavXbvXcvXdvXevXfvXgvXhvX~OsvX~P!jOa_Ob_Oc_O~ORUOSUOTUOUUOVROXSOZTO^tO_UO`UOa`Ob`Oc`OdUOeUOfUOgUOhUO~OWaO~P$ZOYcO~P$ZO[eO~P$ZORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O]hOsoX~P%zOajObjOcjO~O^]ORkaSkaTkaUkaVkaXkaZka]ka_ka`kaakabkackadkaekafkagkahka~Oska~P'kO^]O~OWvXYvX[vX~P!jOWnO~P$ZOYoO~P$ZO[pO~P$ZO^]ORkiSkiTkiUkiVkiXkiZki]ki_ki`kiakibkickidkiekifkigkihki~Oski~P)xOWkaYka[ka~P'kO]hO~P$ZOWkiYki[ki~P)xOasObsOcsO~O\",goto:\"#hwPPPPPPPPPPPPPPPPPPPPPPPPPPx||||!Y!^!d!xPPP#[TYOZeUORSTWZbdfqT[OZQZORiZSWOZQbRQdSQfTZgWbdfqQ^PWk^lmrQl_Qm`RrseVORSTWZbdfq\",nodeNames:\"\\u26A0 LineComment BlockComment String Number Bool Null ( ) { } [ ] ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Bits Bytes Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement\",maxTerm:38,nodeProps:[[\"isolate\",-4,1,2,3,19,\"\"]],skippedNodes:[0,1,2],repeatNodeCount:3,tokenData:\"RORO\",tokenizers:[0,lg],topRules:{Script:[0,25]},tokenPrec:0});function eh(O){let e=O.cursor().moveTo(O.from,-1);for(;/Comment/.test(e.name);)e.moveTo(e.from,-1);return e.node}function Wr(O,e){let t=O.sliceString(e.from,e.to),i=/^([`'\"\\[])(.*)([`'\"\\]])$/.exec(t);return i?i[2]:t}function Gs(O){return O&&(O.name==\"Identifier\"||O.name==\"QuotedIdentifier\")}function yv(O,e){if(e.name==\"CompositeIdentifier\"){let t=[];for(let i=e.firstChild;i;i=i.nextSibling)Gs(i)&&t.push(Wr(O,i));return t}return[Wr(O,e)]}function Og(O,e){for(let t=[];;){if(!e||e.name!=\".\")return t;let i=eh(e);if(!Gs(i))return t;t.unshift(Wr(O,i)),e=eh(i)}}function xv(O,e){let t=U(O).resolveInner(e,-1),i=wv(O.doc,t);return t.name==\"Identifier\"||t.name==\"QuotedIdentifier\"||t.name==\"Keyword\"?{from:t.from,quoted:t.name==\"QuotedIdentifier\"?O.doc.sliceString(t.from,t.from+1):null,parents:Og(O.doc,eh(t)),aliases:i}:t.name==\".\"?{from:e,quoted:null,parents:Og(O.doc,t),aliases:i}:{from:e,quoted:null,parents:[],empty:!0,aliases:i}}var kv=new Set(\"where group having order union intersect except all distinct limit offset fetch for\".split(\" \"));function wv(O,e){let t;for(let r=e;!t;r=r.parent){if(!r)return null;r.name==\"Statement\"&&(t=r)}let i=null;for(let r=t.firstChild,n=!1,s=null;r;r=r.nextSibling){let a=r.name==\"Keyword\"?O.sliceString(r.from,r.to).toLowerCase():null,o=null;if(!n)n=a==\"from\";else if(a==\"as\"&&s&&Gs(r.nextSibling))o=Wr(O,r.nextSibling);else{if(a&&kv.has(a))break;s&&Gs(r)&&(o=Wr(O,r))}o&&(i||(i=Object.create(null)),i[o]=yv(O,s)),s=/Identifier$/.test(r.name)?r:null}return i}function Zv(O,e,t){return t.map(i=>({...i,label:i.label[0]==O?i.label:O+i.label+e,apply:void 0}))}var vv=/^\\w*$/,Yv=/^[`'\"\\[]?\\w*[`'\"\\]]?$/;function ig(O){return O.self&&typeof O.self.label==\"string\"}var th=class O{constructor(e,t){this.idQuote=e,this.idCaseInsensitive=t,this.list=[],this.children=void 0}child(e){let t=this.children||(this.children=Object.create(null)),i=t[e];return i||(e&&!this.list.some(r=>r.label==e)&&this.list.push(rg(e,\"type\",this.idQuote,this.idCaseInsensitive)),t[e]=new O(this.idQuote,this.idCaseInsensitive))}maybeChild(e){return this.children?this.children[e]:null}addCompletion(e){let t=this.list.findIndex(i=>i.label==e.label);t>-1?this.list[t]=e:this.list.push(e)}addCompletions(e){for(let t of e)this.addCompletion(typeof t==\"string\"?rg(t,\"property\",this.idQuote,this.idCaseInsensitive):t)}addNamespace(e){Array.isArray(e)?this.addCompletions(e):ig(e)?this.addNamespace(e.children):this.addNamespaceObject(e)}addNamespaceObject(e){for(let t of Object.keys(e)){let i=e[t],r=null,n=t.replace(/\\\\?\\./g,a=>a==\".\"?\"\\0\":a).split(\"\\0\"),s=this;ig(i)&&(r=i.self,i=i.children);for(let a=0;a<n.length;a++)r&&a==n.length-1&&s.addCompletion(r),s=s.child(n[a].replace(/\\\\\\./g,\".\"));s.addNamespace(i)}}};function rg(O,e,t,i){return new RegExp(\"^[a-z_][a-z_\\\\d]*$\",i?\"i\":\"\").test(O)?{label:O,type:e}:{label:O,type:e,apply:t+O+cg(t)}}function cg(O){return O===\"[\"?\"]\":O}function _v(O,e,t,i,r,n){var s;let a=((s=n?.spec.identifierQuotes)===null||s===void 0?void 0:s[0])||'\"',o=new th(a,!!n?.spec.caseInsensitiveIdentifiers),l=r?o.child(r):null;return o.addNamespace(O),e&&(l||o).addCompletions(e),t&&o.addCompletions(t),l&&o.addCompletions(l.list),i&&o.addCompletions((l||o).child(i).list),c=>{let{parents:h,from:f,quoted:u,empty:Q,aliases:$}=xv(c.state,c.pos);if(Q&&!c.explicit)return null;$&&h.length==1&&(h=$[h[0]]||h);let p=o;for(let g of h){for(;!p.children||!p.children[g];)if(p==o&&l)p=l;else if(p==l&&i)p=p.child(i);else return null;let P=p.maybeChild(g);if(!P)return null;p=P}let m=p.list;if(p==o&&$&&(m=m.concat(Object.keys($).map(g=>({label:g,type:\"constant\"})))),u){let g=u[0],P=cg(g),y=c.state.sliceDoc(c.pos,c.pos+1)==P;return{from:f,to:y?c.pos+1:void 0,options:Zv(g,P,m),validFor:Yv}}else return{from:f,options:m,validFor:vv}}}function Rv(O){return O==sg?\"type\":O==ng?\"keyword\":\"variable\"}function Vv(O,e,t){let i=Object.keys(O).map(r=>t(e?r.toUpperCase():r,Rv(O[r])));return cO([\"QuotedIdentifier\",\"String\",\"LineComment\",\"BlockComment\",\".\"],zt(i))}var qv=bv.configure({props:[se.add({Statement:le()}),te.add({Statement(O,e){return{from:Math.min(O.from+100,e.doc.lineAt(O.from).to),to:O.to}},BlockComment(O){return{from:O.from+2,to:O.to-2}}}),F({Keyword:d.keyword,Type:d.typeName,Builtin:d.standard(d.name),Bits:d.number,Bytes:d.string,Bool:d.bool,Null:d.null,Number:d.number,String:d.string,Identifier:d.name,QuotedIdentifier:d.special(d.string),SpecialVar:d.special(d.name),LineComment:d.lineComment,BlockComment:d.blockComment,Operator:d.operator,\"Semi Punctuation\":d.punctuation,\"( )\":d.paren,\"{ }\":d.brace,\"[ ]\":d.squareBracket})]}),wt=class O{constructor(e,t,i){this.dialect=e,this.language=t,this.spec=i}get extension(){return this.language.extension}configureLanguage(e,t){return new O(this.dialect,this.language.configure(e,t),this.spec)}static define(e){let t=Tv(e,e.keywords,e.types,e.builtin),i=ne.define({name:\"sql\",parser:qv.configure({tokenizers:[{from:lg,to:og(t)}]}),languageData:{commentTokens:{line:\"--\",block:{open:\"/*\",close:\"*/\"}},closeBrackets:{brackets:[\"(\",\"[\",\"{\",\"'\",'\"',\"`\"]}}});return new O(t,i,e)}};function zv(O,e){return{label:O,type:e,boost:-1}}function Uv(O,e=!1,t){return Vv(O.dialect.words,e,t||zv)}function Wv(O){return O.schema?_v(O.schema,O.tables,O.schemas,O.defaultTable,O.defaultSchema,O.dialect||Oh):()=>null}function jv(O){return O.schema?(O.dialect||Oh).language.data.of({autocomplete:Wv(O)}):[]}function hg(O={}){let e=O.dialect||Oh;return new J(e.language,[jv(O),e.language.data.of({autocomplete:Uv(e,O.upperCaseKeywords,O.keywordCompletion)})])}var Oh=wt.define({}),q5=wt.define({charSetCasts:!0,doubleDollarQuotedStrings:!0,operatorChars:\"+-*/<>=~!@#%^&|`?\",specialVar:\"\",keywords:EO+\"abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes\",types:GO+\"bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text timetz timestamptz tsquery tsvector txid_snapshot uuid xml\"}),fg=\"accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill\",dg=GO+\"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime unsigned signed\",ug=\"charset clear edit ego help nopager notee nowarning pager print prompt quit rehash source status system tee\",z5=wt.define({operatorChars:\"*+-%<>!=&|^\",charSetCasts:!0,doubleQuotedStrings:!0,unquotedBitLiterals:!0,hashComments:!0,spaceAfterDashes:!0,specialVar:\"@?\",identifierQuotes:\"`\",keywords:EO+\"group_concat \"+fg,types:dg,builtin:ug}),U5=wt.define({operatorChars:\"*+-%<>!=&|^\",charSetCasts:!0,doubleQuotedStrings:!0,unquotedBitLiterals:!0,hashComments:!0,spaceAfterDashes:!0,specialVar:\"@?\",identifierQuotes:\"`\",keywords:EO+\"always generated groupby_concat hard persistent shutdown soft virtual \"+fg,types:dg,builtin:ug}),Cv=\"approx_count_distinct approx_percentile_cont approx_percentile_disc avg checksum_agg count count_big grouping grouping_id max min product stdev stdevp sum var varp ai_generate_embeddings ai_generate_chunks cume_dist first_value lag last_value lead percentile_cont percentile_disc percent_rank left_shift right_shift bit_count get_bit set_bit collationproperty tertiary_weights @@datefirst @@dbts @@langid @@language @@lock_timeout @@max_connections @@max_precision @@nestlevel @@options @@remserver @@servername @@servicename @@spid @@textsize @@version cast convert parse try_cast try_convert try_parse asymkey_id asymkeyproperty certproperty cert_id crypt_gen_random decryptbyasymkey decryptbycert decryptbykey decryptbykeyautoasymkey decryptbykeyautocert decryptbypassphrase encryptbyasymkey encryptbycert encryptbykey encryptbypassphrase hashbytes is_objectsigned key_guid key_id key_name signbyasymkey signbycert symkeyproperty verifysignedbycert verifysignedbyasymkey @@cursor_rows @@fetch_status cursor_status datalength ident_current ident_incr ident_seed identity sql_variant_property @@datefirst current_timestamp current_timezone current_timezone_id date_bucket dateadd datediff datediff_big datefromparts datename datepart datetime2fromparts datetimefromparts datetimeoffsetfromparts datetrunc day eomonth getdate getutcdate isdate month smalldatetimefromparts switchoffset sysdatetime sysdatetimeoffset sysutcdatetime timefromparts todatetimeoffset year edit_distance edit_distance_similarity jaro_winkler_distance jaro_winkler_similarity edge_id_from_parts graph_id_from_edge_id graph_id_from_node_id node_id_from_parts object_id_from_edge_id object_id_from_node_id json isjson json_array json_contains json_modify json_object json_path_exists json_query json_value regexp_like regexp_replace regexp_substr regexp_instr regexp_count regexp_matches regexp_split_to_table abs acos asin atan atn2 ceiling cos cot degrees exp floor log log10 pi power radians rand round sign sin sqrt square tan choose greatest iif least @@procid app_name applock_mode applock_test assemblyproperty col_length col_name columnproperty databasepropertyex db_id db_name file_id file_idex file_name filegroup_id filegroup_name filegroupproperty fileproperty filepropertyex fulltextcatalogproperty fulltextserviceproperty index_col indexkey_property indexproperty next value for object_definition object_id object_name object_schema_name objectproperty objectpropertyex original_db_name parsename schema_id schema_name scope_identity serverproperty stats_date type_id type_name typeproperty dense_rank ntile rank row_number publishingservername certenclosed certprivatekey current_user database_principal_id has_dbaccess has_perms_by_name is_member is_rolemember is_srvrolemember loginproperty original_login permissions pwdencrypt pwdcompare session_user sessionproperty suser_id suser_name suser_sid suser_sname system_user user user_id user_name ascii char charindex concat concat_ws difference format left len lower ltrim nchar patindex quotename replace replicate reverse right rtrim soundex space str string_agg string_escape stuff substring translate trim unicode upper $partition @@error @@identity @@pack_received @@rowcount @@trancount binary_checksum checksum compress connectionproperty context_info current_request_id current_transaction_id decompress error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big session_context xact_state @@connections @@cpu_busy @@idle @@io_busy @@pack_sent @@packet_errors @@timeticks @@total_errors @@total_read @@total_write textptr textvalid columns_updated eventdata trigger_nestlevel vector_distance vectorproperty vector_search generate_series opendatasource openjson openquery openrowset openxml predict string_split coalesce nullif apply catch filter force include keep keepfixed modify optimize parameterization parameters partition recompile sequence set\",W5=wt.define({keywords:EO+\"add external procedure all fetch public alter file raiserror and fillfactor read any for readtext as foreign reconfigure asc freetext references authorization freetexttable replication backup from restore begin full restrict between function return break goto revert browse grant revoke bulk group right by having rollback cascade holdlock rowcount case identity rowguidcol check identity_insert rule checkpoint identitycol save close if schema clustered in securityaudit coalesce index select collate inner semantickeyphrasetable column insert semanticsimilaritydetailstable commit intersect semanticsimilaritytable compute into session_user constraint is set contains join setuser containstable key shutdown continue kill some convert left statistics create like system_user cross lineno table current load tablesample current_date merge textsize current_time national then current_timestamp nocheck to current_user nonclustered top cursor not tran database null transaction dbcc nullif trigger deallocate of truncate declare off try_convert default offsets tsequal delete on union deny open unique desc opendatasource unpivot disk openquery update distinct openrowset updatetext distributed openxml use double option user drop or values dump order varying else outer view end over waitfor errlvl percent when escape pivot where except plan while exec precision with execute primary within group exists print writetext exit proc noexpand index forceseek forcescan holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot spatial_window_max_cells tablock tablockx updlock xlock keepidentity keepdefaults ignore_constraints ignore_triggers\",types:GO+\"smalldatetime datetimeoffset datetime2 datetime bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image hierarchyid uniqueidentifier sql_variant xml\",builtin:Cv,operatorChars:\"*+-%<>!=^&|/\",specialVar:\"@\",identifierQuotes:'\"['}),j5=wt.define({keywords:EO+\"abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual\",types:GO+\"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 unsigned signed real\",builtin:\"auth backup bail changes clone databases dbinfo dump echo eqp explain fullschema headers help import imposter indexes iotrace lint load log mode nullvalue once print prompt quit restore save scanstats separator shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width\",operatorChars:\"*+-%<>!=&|/~\",identifierQuotes:'`\"',specialVar:\"@:?$\"}),C5=wt.define({keywords:\"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN\",types:GO+\"ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint\",slashComments:!0}),G5=wt.define({keywords:EO+\"abort accept access add all alter and any arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body by case cast char_base check close cluster clusters colauth column comment commit compress connected constant constraint crash create current currval cursor data_base database dba deallocate debugoff debugon declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry exception exception_init exchange exclusive exists external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base of off offline on online only option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw rebuild record ref references refresh rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work\",builtin:\"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define echo editfile embedded feedback flagger flush heading headsep instance linesize lno loboffset logsource longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar repfooter repheader serveroutput shiftinout show showmode spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout timing trimout trimspool ttitle underline verify version wrap\",types:GO+\"ascii bfile bfilename bigserial bit blob dec long number nvarchar nvarchar2 serial smallint string text uid varchar2 xml\",operatorChars:\"*/+-%<>!=~\",doubleQuotedStrings:!0,charSetCasts:!0,plsqlQuotingMechanism:!0});var ih=1,Gv=2,Ev=3,Av=4,Lv=5,Mv=36,Dv=37,Iv=38,Bv=11,Nv=13;function Fv(O){return O==45||O==46||O==58||O>=65&&O<=90||O==95||O>=97&&O<=122||O>=161}function Hv(O){return O==9||O==10||O==13||O==32}var Qg=null,$g=null,pg=0;function rh(O,e){let t=O.pos+e;if($g==O&&pg==t)return Qg;for(;Hv(O.peek(e));)e++;let i=\"\";for(;;){let r=O.peek(e);if(!Fv(r))break;i+=String.fromCharCode(r),e++}return $g=O,pg=t,Qg=i||null}function mg(O,e){this.name=O,this.parent=e}var Kv=new Ge({start:null,shift(O,e,t,i){return e==ih?new mg(rh(i,1)||\"\",O):O},reduce(O,e){return e==Bv&&O?O.parent:O},reuse(O,e,t,i){let r=e.type.id;return r==ih||r==Nv?new mg(rh(i,1)||\"\",O):O},strict:!1}),Jv=new z((O,e)=>{if(O.next==60){if(O.advance(),O.next==47){O.advance();let t=rh(O,0);if(!t)return O.acceptToken(Lv);if(e.context&&t==e.context.name)return O.acceptToken(Gv);for(let i=e.context;i;i=i.parent)if(i.name==t)return O.acceptToken(Ev,-2);O.acceptToken(Av)}else if(O.next!=33&&O.next!=63)return O.acceptToken(ih)}},{contextual:!0});function nh(O,e){return new z(t=>{let i=0,r=e.charCodeAt(0);e:for(;!(t.next<0);t.advance(),i++)if(t.next==r){for(let n=1;n<e.length;n++)if(t.peek(n)!=e.charCodeAt(n))continue e;break}i&&t.acceptToken(O)})}var eY=nh(Mv,\"-->\"),tY=nh(Dv,\"?>\"),OY=nh(Iv,\"]]>\"),iY=F({Text:d.content,\"StartTag StartCloseTag EndTag SelfCloseEndTag\":d.angleBracket,TagName:d.tagName,\"MismatchedCloseTag/TagName\":[d.tagName,d.invalid],AttributeName:d.attributeName,AttributeValue:d.attributeValue,Is:d.definitionOperator,\"EntityReference CharacterReference\":d.character,Comment:d.blockComment,ProcessingInst:d.processingInstruction,DoctypeDecl:d.documentMeta,Cdata:d.special(d.string)}),gg=Oe.deserialize({version:14,states:\",lOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DT'#DTOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C|'#C|O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C}'#C}O$dOrO,59^OOOP,59^,59^OOOS'#DO'#DOO$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6z-E6zOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6{-E6{OOOP1G.x1G.xOOOS-E6|-E6|OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'mO!bO,59eOOOO-E6w-E6wO'{OpO1G.uO'{OpO1G.uOOOP1G.u1G.uO(TOpO7+$fOOOP7+$f7+$fO(]O!bO<<GuOOOP<<Gu<<GuOOOP<<G}<<G}O'bOpO1G.qO'bOpO1G.qO(hO#tO'#CnO(vO&jO'#CnOOOO1G.q1G.qO)UOpO7+$aOOOP7+$a7+$aOOOP<<HQ<<HQOOOPAN=aAN=aOOOPAN=iAN=iO'bOpO7+$]OOOO7+$]7+$]OOOO'#Cz'#CzO)^O#tO,59YOOOO,59Y,59YOOOO'#C{'#C{O)lO&jO,59YOOOP<<G{<<G{OOOO<<Gw<<GwOOOO-E6x-E6xOOOO1G.t1G.tOOOO-E6y-E6y\",stateData:\")z~OPQOSVOTWOVWOWWOXWOiXOyPO!QTO!SUO~OvZOx]O~O^`Oz^O~OPQOQcOSVOTWOVWOWWOXWOyPO!QTO!SUO~ORdO~P!SOteO!PgO~OuhO!RjO~O^lOz^O~OvZOxoO~O^qOz^O~O[vO`sOdwOz^O~ORyO~P!SO^{Oz^O~OteO!P}O~OuhO!R!PO~O^!QOz^O~O[!SOz^O~O[!VO`sOd!WOz^O~Oa!YOz^O~Oz^O[mX`mXdmX~O[!VO`sOd!WO~O^!]Oz^O~O[!_Oz^O~O[!aOz^O~O[!cO`sOd!dOz^O~O[!cO`sOd!dO~Oa!eOz^O~Oz^O{!gO}!hO~Oz^O[ma`madma~O[!kOz^O~O[!lOz^O~O[!mO`sOd!nO~OW!qOX!qO{!sO|!qO~OW!tOX!tO}!sO!O!tO~O[!vOz^O~OW!qOX!qO{!yO|!qO~OW!tOX!tO}!yO!O!tO~O\",goto:\"%cxPPPPPPPPPPyyP!PP!VPP!`!jP!pyyyP!v!|#S$[$k$q$w$}%TPPPP%ZXWORYbXRORYb_t`qru!T!U!bQ!i!YS!p!e!fR!w!oQdRRybXSORYbQYORmYQ[PRn[Q_QQkVjp_krz!R!T!X!Z!^!`!f!j!oQr`QzcQ!RlQ!TqQ!XsQ!ZtQ!^{Q!`!QQ!f!YQ!j!]R!o!eQu`S!UqrU![u!U!bR!b!TQ!r!gR!x!rQ!u!hR!z!uQbRRxbQfTR|fQiUR!OiSXOYTaRb\",nodeNames:\"\\u26A0 StartTag StartCloseTag MissingCloseTag StartCloseTag StartCloseTag Document Text EntityReference CharacterReference Cdata Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue CloseTag SelfCloseEndTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl\",maxTerm:50,context:Kv,nodeProps:[[\"closedBy\",1,\"SelfCloseEndTag EndTag\",13,\"CloseTag MissingCloseTag\"],[\"openedBy\",12,\"StartTag StartCloseTag\",19,\"OpenTag\",20,\"StartTag\"],[\"isolate\",-6,13,18,19,21,22,24,\"\"]],propSources:[iY],skippedNodes:[0],repeatNodeCount:9,tokenData:\"!)v~R!YOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs*vsv$qvw+fwx/ix}$q}!O0[!O!P$q!P!Q2z!Q![$q![!]4n!]!^$q!^!_8U!_!`!#t!`!a!$l!a!b!%d!b!c$q!c!}4n!}#P$q#P#Q!'W#Q#R$q#R#S4n#S#T$q#T#o4n#o%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U$q4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qi$zXVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qa%nVVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%gP&YTVPOv&Tw!^&T!_;'S&T;'S;=`&i<%lO&TP&lP;=`<%l&T`&tS!O`Ov&ox;'S&o;'S;=`'Q<%lO&o`'TP;=`<%l&oa'ZP;=`<%l%gX'eWVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^W(ST|WOr'}sv'}w;'S'};'S;=`(c<%lO'}W(fP;=`<%l'}X(lP;=`<%l'^h(vV|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oh)`P;=`<%l(oi)fP;=`<%l$qo)t`VP|W!O`zUOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk+PV{YVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%g~+iast,n![!]-r!c!}-r#R#S-r#T#o-r%W%o-r%p&a-r&b1p-r4U4d-r4e$IS-r$I`$Ib-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~,qQ!Q![,w#l#m-V~,zQ!Q![,w!]!^-Q~-VOX~~-YR!Q![-c!c!i-c#T#Z-c~-fS!Q![-c!]!^-Q!c!i-c#T#Z-c~-ug}!O-r!O!P-r!Q![-r![!]-r!]!^/^!c!}-r#R#S-r#T#o-r$}%O-r%W%o-r%p&a-r&b1p-r1p4U-r4U4d-r4e$IS-r$I`$Ib-r$Je$Jg-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~/cOW~~/fP;=`<%l-rk/rW}bVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^k0eZVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O1W!O!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk1aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a2S!a;'S$q;'S;=`)c<%lO$qk2_X!PQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qm3TZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a3v!a;'S$q;'S;=`)c<%lO$qm4RXdSVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo4{!P`S^QVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O4n!O!P4n!P!Q$q!Q![4n![!]4n!]!^$q!^!_(o!_!c$q!c!}4n!}#R$q#R#S4n#S#T$q#T#o4n#o$}$q$}%O4n%O%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U4n4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Je$q$Je$Jg4n$Jg$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qo8RP;=`<%l4ni8]Y|W!O`Oq(oqr8{rs&osv(owx'}x!a(o!a!b!#U!b;'S(o;'S;=`)]<%lO(oi9S_|W!O`Or(ors&osv(owx'}x}(o}!O:R!O!f(o!f!g;e!g!}(o!}#ODh#O#W(o#W#XLp#X;'S(o;'S;=`)]<%lO(oi:YX|W!O`Or(ors&osv(owx'}x}(o}!O:u!O;'S(o;'S;=`)]<%lO(oi;OV!QP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oi;lX|W!O`Or(ors&osv(owx'}x!q(o!q!r<X!r;'S(o;'S;=`)]<%lO(oi<`X|W!O`Or(ors&osv(owx'}x!e(o!e!f<{!f;'S(o;'S;=`)]<%lO(oi=SX|W!O`Or(ors&osv(owx'}x!v(o!v!w=o!w;'S(o;'S;=`)]<%lO(oi=vX|W!O`Or(ors&osv(owx'}x!{(o!{!|>c!|;'S(o;'S;=`)]<%lO(oi>jX|W!O`Or(ors&osv(owx'}x!r(o!r!s?V!s;'S(o;'S;=`)]<%lO(oi?^X|W!O`Or(ors&osv(owx'}x!g(o!g!h?y!h;'S(o;'S;=`)]<%lO(oi@QY|W!O`Or?yrs@psv?yvwA[wxBdx!`?y!`!aCr!a;'S?y;'S;=`Db<%lO?ya@uV!O`Ov@pvxA[x!`@p!`!aAy!a;'S@p;'S;=`B^<%lO@pPA_TO!`A[!`!aAn!a;'SA[;'S;=`As<%lOA[PAsOiPPAvP;=`<%lA[aBQSiP!O`Ov&ox;'S&o;'S;=`'Q<%lO&oaBaP;=`<%l@pXBiX|WOrBdrsA[svBdvwA[w!`Bd!`!aCU!a;'SBd;'S;=`Cl<%lOBdXC]TiP|WOr'}sv'}w;'S'};'S;=`(c<%lO'}XCoP;=`<%lBdiC{ViP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiDeP;=`<%l?yiDoZ|W!O`Or(ors&osv(owx'}x!e(o!e!fEb!f#V(o#V#WIr#W;'S(o;'S;=`)]<%lO(oiEiX|W!O`Or(ors&osv(owx'}x!f(o!f!gFU!g;'S(o;'S;=`)]<%lO(oiF]X|W!O`Or(ors&osv(owx'}x!c(o!c!dFx!d;'S(o;'S;=`)]<%lO(oiGPX|W!O`Or(ors&osv(owx'}x!v(o!v!wGl!w;'S(o;'S;=`)]<%lO(oiGsX|W!O`Or(ors&osv(owx'}x!c(o!c!dH`!d;'S(o;'S;=`)]<%lO(oiHgX|W!O`Or(ors&osv(owx'}x!}(o!}#OIS#O;'S(o;'S;=`)]<%lO(oiI]V|W!O`yPOr(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiIyX|W!O`Or(ors&osv(owx'}x#W(o#W#XJf#X;'S(o;'S;=`)]<%lO(oiJmX|W!O`Or(ors&osv(owx'}x#T(o#T#UKY#U;'S(o;'S;=`)]<%lO(oiKaX|W!O`Or(ors&osv(owx'}x#h(o#h#iK|#i;'S(o;'S;=`)]<%lO(oiLTX|W!O`Or(ors&osv(owx'}x#T(o#T#UH`#U;'S(o;'S;=`)]<%lO(oiLwX|W!O`Or(ors&osv(owx'}x#c(o#c#dMd#d;'S(o;'S;=`)]<%lO(oiMkX|W!O`Or(ors&osv(owx'}x#V(o#V#WNW#W;'S(o;'S;=`)]<%lO(oiN_X|W!O`Or(ors&osv(owx'}x#h(o#h#iNz#i;'S(o;'S;=`)]<%lO(oi! RX|W!O`Or(ors&osv(owx'}x#m(o#m#n! n#n;'S(o;'S;=`)]<%lO(oi! uX|W!O`Or(ors&osv(owx'}x#d(o#d#e!!b#e;'S(o;'S;=`)]<%lO(oi!!iX|W!O`Or(ors&osv(owx'}x#X(o#X#Y?y#Y;'S(o;'S;=`)]<%lO(oi!#_V!SP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(ok!$PXaQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo!$wX[UVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!%mZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!&`!a;'S$q;'S;=`)c<%lO$qk!&kX!RQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!'aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_#P$q#P#Q!(S#Q;'S$q;'S;=`)c<%lO$qk!(]ZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!)O!a;'S$q;'S;=`)c<%lO$qk!)ZXxQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$q\",tokenizers:[Jv,eY,tY,OY,0,1,2,3,4],topRules:{Document:[0,6]},tokenPrec:0});function Es(O,e){let t=e&&e.getChild(\"TagName\");return t?O.sliceString(t.from,t.to):\"\"}function sh(O,e){let t=e&&e.firstChild;return!t||t.name!=\"OpenTag\"?\"\":Es(O,t)}function rY(O,e,t){let i=e&&e.getChildren(\"Attribute\").find(n=>n.from<=t&&n.to>=t),r=i&&i.getChild(\"AttributeName\");return r?O.sliceString(r.from,r.to):\"\"}function ah(O){for(let e=O&&O.parent;e;e=e.parent)if(e.name==\"Element\")return e;return null}function nY(O,e){var t;let i=U(O).resolveInner(e,-1),r=null;for(let n=i;!r&&n.parent;n=n.parent)(n.name==\"OpenTag\"||n.name==\"CloseTag\"||n.name==\"SelfClosingTag\"||n.name==\"MismatchedCloseTag\")&&(r=n);if(r&&(r.to>e||r.lastChild.type.isError)){let n=r.parent;if(i.name==\"TagName\")return r.name==\"CloseTag\"||r.name==\"MismatchedCloseTag\"?{type:\"closeTag\",from:i.from,context:n}:{type:\"openTag\",from:i.from,context:ah(n)};if(i.name==\"AttributeName\")return{type:\"attrName\",from:i.from,context:r};if(i.name==\"AttributeValue\")return{type:\"attrValue\",from:i.from,context:r};let s=i==r||i.name==\"Attribute\"?i.childBefore(e):i;return s?.name==\"StartTag\"?{type:\"openTag\",from:e,context:ah(n)}:s?.name==\"StartCloseTag\"&&s.to<=e?{type:\"closeTag\",from:e,context:n}:s?.name==\"Is\"?{type:\"attrValue\",from:e,context:r}:s?{type:\"attrName\",from:e,context:r}:null}else if(i.name==\"StartCloseTag\")return{type:\"closeTag\",from:e,context:i.parent};for(;i.parent&&i.to==e&&!(!((t=i.lastChild)===null||t===void 0)&&t.type.isError);)i=i.parent;return i.name==\"Element\"||i.name==\"Text\"||i.name==\"Document\"?{type:\"tag\",from:e,context:i.name==\"Element\"?i:ah(i)}:null}var lh=class{constructor(e,t,i){this.attrs=t,this.attrValues=i,this.children=[],this.name=e.name,this.completion=Object.assign(Object.assign({type:\"type\"},e.completion||{}),{label:this.name}),this.openCompletion=Object.assign(Object.assign({},this.completion),{label:\"<\"+this.name}),this.closeCompletion=Object.assign(Object.assign({},this.completion),{label:\"</\"+this.name+\">\",boost:2}),this.closeNameCompletion=Object.assign(Object.assign({},this.completion),{label:this.name+\">\"}),this.text=e.textContent?e.textContent.map(r=>({label:r,type:\"text\"})):[]}},oh=/^[:\\-\\.\\w\\u00b7-\\uffff]*$/;function Pg(O){return Object.assign(Object.assign({type:\"property\"},O.completion||{}),{label:O.name})}function Sg(O){return typeof O==\"string\"?{label:`\"${O}\"`,type:\"constant\"}:/^\"/.test(O.label)?O:Object.assign(Object.assign({},O),{label:`\"${O.label}\"`})}function sY(O,e){let t=[],i=[],r=Object.create(null);for(let o of e){let l=Pg(o);t.push(l),o.global&&i.push(l),o.values&&(r[o.name]=o.values.map(Sg))}let n=[],s=[],a=Object.create(null);for(let o of O){let l=i,c=r;o.attributes&&(l=l.concat(o.attributes.map(f=>typeof f==\"string\"?t.find(u=>u.label==f)||{label:f,type:\"property\"}:(f.values&&(c==r&&(c=Object.create(c)),c[f.name]=f.values.map(Sg)),Pg(f)))));let h=new lh(o,l,c);a[h.name]=h,n.push(h),o.top&&s.push(h)}s.length||(s=n);for(let o=0;o<n.length;o++){let l=O[o],c=n[o];if(l.children)for(let h of l.children)a[h]&&c.children.push(a[h]);else c.children=n}return o=>{var l;let{doc:c}=o.state,h=nY(o.state,o.pos);if(!h||h.type==\"tag\"&&!o.explicit)return null;let{type:f,from:u,context:Q}=h;if(f==\"openTag\"){let $=s,p=sh(c,Q);if(p){let m=a[p];$=m?.children||n}return{from:u,options:$.map(m=>m.completion),validFor:oh}}else if(f==\"closeTag\"){let $=sh(c,Q);return $?{from:u,to:o.pos+(c.sliceString(o.pos,o.pos+1)==\">\"?1:0),options:[((l=a[$])===null||l===void 0?void 0:l.closeNameCompletion)||{label:$+\">\",type:\"type\"}],validFor:oh}:null}else if(f==\"attrName\"){let $=a[Es(c,Q)];return{from:u,options:$?.attrs||i,validFor:oh}}else if(f==\"attrValue\"){let $=rY(c,Q,u);if(!$)return null;let p=a[Es(c,Q)],m=(p?.attrValues||r)[$];return!m||!m.length?null:{from:u,to:o.pos+(c.sliceString(o.pos,o.pos+1)=='\"'?1:0),options:m,validFor:/^\"[^\"]*\"?$/}}else if(f==\"tag\"){let $=sh(c,Q),p=a[$],m=[],g=Q&&Q.lastChild;$&&(!g||g.name!=\"CloseTag\"||Es(c,g)!=$)&&m.push(p?p.closeCompletion:{label:\"</\"+$+\">\",type:\"type\",boost:2});let P=m.concat((p?.children||(Q?n:s)).map(y=>y.openCompletion));if(Q&&p?.text.length){let y=Q.firstChild;y.to>o.pos-20&&!/\\S/.test(o.state.sliceDoc(y.to,o.pos))&&(P=P.concat(p.text))}return{from:u,options:P,validFor:/^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/}}else return null}}var ch=ne.define({name:\"xml\",parser:gg.configure({props:[se.add({Element(O){let e=/^\\s*<\\//.test(O.textAfter);return O.lineIndent(O.node.from)+(e?0:O.unit)},\"OpenTag CloseTag SelfClosingTag\"(O){return O.column(O.node.from)+O.unit}}),te.add({Element(O){let e=O.firstChild,t=O.lastChild;return!e||e.name!=\"OpenTag\"?null:{from:e.to,to:t.name==\"CloseTag\"?t.from:O.to}}}),hr.add({\"OpenTag CloseTag\":O=>O.getChild(\"TagName\")})]}),languageData:{commentTokens:{block:{open:\"<!--\",close:\"-->\"}},indentOnInput:/^\\s*<\\/$/}});function Tg(O={}){let e=[ch.data.of({autocomplete:sY(O.elements||[],O.attributes||[])})];return O.autoCloseTags!==!1&&e.push(aY),new J(ch,e)}function Xg(O,e,t=O.length){if(!e)return\"\";let i=e.firstChild,r=i&&i.getChild(\"TagName\");return r?O.sliceString(r.from,Math.min(r.to,t)):\"\"}var aY=T.inputHandler.of((O,e,t,i,r)=>{if(O.composing||O.state.readOnly||e!=t||i!=\">\"&&i!=\"/\"||!ch.isActiveAt(O.state,e,-1))return!1;let n=r(),{state:s}=n,a=s.changeByRange(o=>{var l,c,h;let{head:f}=o,u=s.doc.sliceString(f-1,f)==i,Q=U(s).resolveInner(f,-1),$;if(u&&i==\">\"&&Q.name==\"EndTag\"){let p=Q.parent;if(((c=(l=p.parent)===null||l===void 0?void 0:l.lastChild)===null||c===void 0?void 0:c.name)!=\"CloseTag\"&&($=Xg(s.doc,p.parent,f))){let m=f+(s.doc.sliceString(f,f+1)===\">\"?1:0),g=`</${$}>`;return{range:o,changes:{from:f,to:m,insert:g}}}}else if(u&&i==\"/\"&&Q.name==\"StartCloseTag\"){let p=Q.parent;if(Q.from==f-2&&((h=p.lastChild)===null||h===void 0?void 0:h.name)!=\"CloseTag\"&&($=Xg(s.doc,p,f))){let m=f+(s.doc.sliceString(f,f+1)===\">\"?1:0),g=`${$}>`;return{range:S.cursor(f+g.length,-1),changes:{from:f,to:m,insert:g}}}}return{range:o}});return a.changes.empty?!1:(O.dispatch([n,s.update(a,{userEvent:\"input.complete\",scrollIntoView:!0})]),!0)});var xi=63,bg=64,oY=1,lY=2,kg=3,cY=4,wg=5,hY=6,fY=7,Zg=65,dY=66,uY=8,QY=9,$Y=10,pY=11,mY=12,vg=13,gY=19,PY=20,SY=29,XY=33,TY=34,bY=47,yY=0,$h=1,fh=2,Cr=3,dh=4,At=class{constructor(e,t,i){this.parent=e,this.depth=t,this.type=i,this.hash=(e?e.hash+e.hash<<8:0)+t+(t<<4)+i}};At.top=new At(null,-1,yY);function jr(O,e){for(let t=0,i=e-O.pos-1;;i--,t++){let r=O.peek(i);if(Lt(r)||r==-1)return t}}function uh(O){return O==32||O==9}function Lt(O){return O==10||O==13}function Yg(O){return uh(O)||Lt(O)}function AO(O){return O<0||Yg(O)}var xY=new Ge({start:At.top,reduce(O,e){return O.type==Cr&&(e==PY||e==TY)?O.parent:O},shift(O,e,t,i){if(e==kg)return new At(O,jr(i,i.pos),$h);if(e==Zg||e==wg)return new At(O,jr(i,i.pos),fh);if(e==xi)return O.parent;if(e==gY||e==XY)return new At(O,0,Cr);if(e==vg&&O.type==dh)return O.parent;if(e==bY){let r=/[1-9]/.exec(i.read(i.pos,t.pos));if(r)return new At(O,O.depth+ +r[0],dh)}return O},hash(O){return O.hash}});function ki(O,e,t=0){return O.peek(t)==e&&O.peek(t+1)==e&&O.peek(t+2)==e&&AO(O.peek(t+3))}var kY=new z((O,e)=>{if(O.next==-1&&e.canShift(bg))return O.acceptToken(bg);let t=O.peek(-1);if((Lt(t)||t<0)&&e.context.type!=Cr){if(ki(O,45))if(e.canShift(xi))O.acceptToken(xi);else return O.acceptToken(oY,3);if(ki(O,46))if(e.canShift(xi))O.acceptToken(xi);else return O.acceptToken(lY,3);let i=0;for(;O.next==32;)i++,O.advance();(i<e.context.depth||i==e.context.depth&&e.context.type==$h&&(O.next!=45||!AO(O.peek(1))))&&O.next!=-1&&!Lt(O.next)&&O.next!=35&&O.acceptToken(xi,-i)}},{contextual:!0}),wY=new z((O,e)=>{if(e.context.type==Cr){O.next==63&&(O.advance(),AO(O.next)&&O.acceptToken(fY));return}if(O.next==45)O.advance(),AO(O.next)&&O.acceptToken(e.context.type==$h&&e.context.depth==jr(O,O.pos-1)?cY:kg);else if(O.next==63)O.advance(),AO(O.next)&&O.acceptToken(e.context.type==fh&&e.context.depth==jr(O,O.pos-1)?hY:wg);else{let t=O.pos;for(;;)if(uh(O.next)){if(O.pos==t)return;O.advance()}else if(O.next==33)_g(O);else if(O.next==38)Qh(O);else if(O.next==42){Qh(O);break}else if(O.next==39||O.next==34){if(ph(O,!0))break;return}else if(O.next==91||O.next==123){if(!vY(O))return;break}else{Rg(O,!0,!1,0);break}for(;uh(O.next);)O.advance();if(O.next==58){if(O.pos==t&&e.canShift(SY))return;let i=O.peek(1);AO(i)&&O.acceptTokenTo(e.context.type==fh&&e.context.depth==jr(O,t)?dY:Zg,t)}}},{contextual:!0});function ZY(O){return O>32&&O<127&&O!=34&&O!=37&&O!=44&&O!=60&&O!=62&&O!=92&&O!=94&&O!=96&&O!=123&&O!=124&&O!=125}function yg(O){return O>=48&&O<=57||O>=97&&O<=102||O>=65&&O<=70}function xg(O,e){return O.next==37?(O.advance(),yg(O.next)&&O.advance(),yg(O.next)&&O.advance(),!0):ZY(O.next)||e&&O.next==44?(O.advance(),!0):!1}function _g(O){if(O.advance(),O.next==60){for(O.advance();;)if(!xg(O,!0)){O.next==62&&O.advance();break}}else for(;xg(O,!1););}function Qh(O){for(O.advance();!AO(O.next)&&As(O.tag)!=\"f\";)O.advance()}function ph(O,e){let t=O.next,i=!1,r=O.pos;for(O.advance();;){let n=O.next;if(n<0)break;if(O.advance(),n==t)if(n==39)if(O.next==39)O.advance();else break;else break;else if(n==92&&t==34)O.next>=0&&O.advance();else if(Lt(n)){if(e)return!1;i=!0}else if(e&&O.pos>=r+1024)return!1}return!i}function vY(O){for(let e=[],t=O.pos+1024;;)if(O.next==91||O.next==123)e.push(O.next),O.advance();else if(O.next==39||O.next==34){if(!ph(O,!0))return!1}else if(O.next==93||O.next==125){if(e[e.length-1]!=O.next-2)return!1;if(e.pop(),O.advance(),!e.length)return!0}else{if(O.next<0||O.pos>t||Lt(O.next))return!1;O.advance()}}var YY=\"iiisiiissisfissssssssssssisssiiissssssssssssssssssssssssssfsfssissssssssssssssssssssssssssfif\";function As(O){return O<33?\"u\":O>125?\"s\":YY[O-33]}function hh(O,e){let t=As(O);return t!=\"u\"&&!(e&&t==\"f\")}function Rg(O,e,t,i){if(As(O.next)==\"s\"||(O.next==63||O.next==58||O.next==45)&&hh(O.peek(1),t))O.advance();else return!1;let r=O.pos;for(;;){let n=O.next,s=0,a=i+1;for(;Yg(n);){if(Lt(n)){if(e)return!1;a=0}else a++;n=O.peek(++s)}if(!(n>=0&&(n==58?hh(O.peek(s+1),t):n==35?O.peek(s-1)!=32:hh(n,t)))||!t&&a<=i||a==0&&!t&&(ki(O,45,s)||ki(O,46,s)))break;if(e&&As(n)==\"f\")return!1;for(let l=s;l>=0;l--)O.advance();if(e&&O.pos>r+1024)return!1}return!0}var _Y=new z((O,e)=>{if(O.next==33)_g(O),O.acceptToken(mY);else if(O.next==38||O.next==42){let t=O.next==38?$Y:pY;Qh(O),O.acceptToken(t)}else O.next==39||O.next==34?(ph(O,!1),O.acceptToken(QY)):Rg(O,!1,e.context.type==Cr,e.context.depth)&&O.acceptToken(uY)}),RY=new z((O,e)=>{let t=e.context.type==dh?e.context.depth:-1,i=O.pos;e:for(;;){let r=0,n=O.next;for(;n==32;)n=O.peek(++r);if(!r&&(ki(O,45,r)||ki(O,46,r))||!Lt(n)&&(t<0&&(t=Math.max(e.context.depth+1,r)),r<t))break;for(;;){if(O.next<0)break e;let s=Lt(O.next);if(O.advance(),s)continue e;i=O.pos}}O.acceptTokenTo(vg,i)}),VY=F({DirectiveName:d.keyword,DirectiveContent:d.attributeValue,\"DirectiveEnd DocEnd\":d.meta,QuotedLiteral:d.string,BlockLiteralHeader:d.special(d.string),BlockLiteralContent:d.content,Literal:d.content,\"Key/Literal Key/QuotedLiteral\":d.definition(d.propertyName),\"Anchor Alias\":d.labelName,Tag:d.typeName,Comment:d.lineComment,\": , -\":d.separator,\"?\":d.punctuation,\"[ ]\":d.squareBracket,\"{ }\":d.brace}),Vg=Oe.deserialize({version:14,states:\"5lQ!ZQgOOO#PQfO'#CpO#uQfO'#DOOOQR'#Dv'#DvO$qQgO'#DRO%gQdO'#DUO%nQgO'#DUO&ROaO'#D[OOQR'#Du'#DuO&{QgO'#D^O'rQgO'#D`OOQR'#Dt'#DtO(iOqO'#DbOOQP'#Dj'#DjO(zQaO'#CmO)YQgO'#CmOOQP'#Cm'#CmQ)jQaOOQ)uQgOOQ]QgOOO*PQdO'#CrO*nQdO'#CtOOQO'#Dw'#DwO+]Q`O'#CxO+hQdO'#CwO+rQ`O'#CwOOQO'#Cv'#CvO+wQdO'#CvOOQO'#Cq'#CqO,UQ`O,59[O,^QfO,59[OOQR,59[,59[OOQO'#Cx'#CxO,eQ`O'#DPO,pQdO'#DPOOQO'#Dx'#DxO,zQdO'#DxO-XQ`O,59jO-aQfO,59jOOQR,59j,59jOOQR'#DS'#DSO-hQcO,59mO-sQgO'#DVO.TQ`O'#DVO.YQcO,59pOOQR'#DX'#DXO#|QfO'#DWO.hQcO'#DWOOQR,59v,59vO.yOWO,59vO/OOaO,59vO/WOaO,59vO/cQgO'#D_OOQR,59x,59xO0VQgO'#DaOOQR,59z,59zOOQP,59|,59|O0yOaO,59|O1ROaO,59|O1aOqO,59|OOQP-E7h-E7hO1oQgO,59XOOQP,59X,59XO2PQaO'#DeO2_QgO'#DeO2oQgO'#DkOOQP'#Dk'#DkQ)jQaOOO3PQdO'#CsOOQO,59^,59^O3kQdO'#CuOOQO,59`,59`OOQO,59c,59cO4VQdO,59cO4aQdO'#CzO4kQ`O'#CzOOQO,59b,59bOOQU,5:Q,5:QOOQR1G.v1G.vO4pQ`O1G.vOOQU-E7d-E7dO4xQdO,59kOOQO,59k,59kO5SQdO'#DQO5^Q`O'#DQOOQO,5:d,5:dOOQU,5:R,5:ROOQR1G/U1G/UO5cQ`O1G/UOOQU-E7e-E7eO5kQgO'#DhO5xQcO1G/XOOQR1G/X1G/XOOQR,59q,59qO6TQgO,59qO6eQdO'#DiO6lQgO'#DiO7PQcO1G/[OOQR1G/[1G/[OOQR,59r,59rO#|QfO,59rOOQR1G/b1G/bO7_OWO1G/bO7dOaO1G/bOOQR,59y,59yOOQR,59{,59{OOQP1G/h1G/hO7lOaO1G/hO7tOaO1G/hO8POaO1G/hOOQP1G.s1G.sO8_QgO,5:POOQP,5:P,5:POOQP,5:V,5:VOOQP-E7i-E7iOOQO,59_,59_OOQO,59a,59aOOQO1G.}1G.}OOQO,59f,59fO8oQdO,59fOOQR7+$b7+$bP,XQ`O'#DfOOQO1G/V1G/VOOQO,59l,59lO8yQdO,59lOOQR7+$p7+$pP9TQ`O'#DgOOQR'#DT'#DTOOQR,5:S,5:SOOQR-E7f-E7fOOQR7+$s7+$sOOQR1G/]1G/]O9YQgO'#DYO9jQ`O'#DYOOQR,5:T,5:TO#|QfO'#DZO9oQcO'#DZOOQR-E7g-E7gOOQR7+$v7+$vOOQR1G/^1G/^OOQR7+$|7+$|O:QOWO7+$|OOQP7+%S7+%SO:VOaO7+%SO:_OaO7+%SOOQP1G/k1G/kOOQO1G/Q1G/QOOQO1G/W1G/WOOQR,59t,59tO:jQgO,59tOOQR,59u,59uO#|QfO,59uOOQR<<Hh<<HhOOQP<<Hn<<HnO:zOaO<<HnOOQR1G/`1G/`OOQR1G/a1G/aOOQPAN>YAN>Y\",stateData:\";S~O!fOS!gOS^OS~OP_OQbORSOTUOWROXROYYOZZO[XOcPOqQO!PVO!V[O!cTO~O`cO~P]OVkOWROXROYeOZfO[dOcPOmhOqQO~OboO~P!bOVtOWROXROYeOZfO[dOcPOmrOqQO~OpwO~P#WORSOTUOWROXROYYOZZO[XOcPOqQO!PVO!cTO~OSvP!avP!bvP~P#|OWROXROYeOZfO[dOcPOqQO~OmzO~P%OOm!OOUzP!azP!bzP!dzP~P#|O^!SO!b!QO!f!TO!g!RO~ORSOTUOWROXROcPOqQO!PVO!cTO~OY!UOP!QXQ!QX!V!QX!`!QXS!QX!a!QX!b!QXU!QXm!QX!d!QX~P&aO[!WOP!SXQ!SX!V!SX!`!SXS!SX!a!SX!b!SXU!SXm!SX!d!SX~P&aO^!ZO!W![O!b!YO!f!]O!g!YO~OP!_O!V[OQaX!`aX~OPaXQaX!VaX!`aX~P#|OP!bOQ!cO!V[O~OP_O!V[O~P#|OWROXROY!fOcPOqQObfXmfXofXpfX~OWROXRO[!hOcPOqQObhXmhXohXphX~ObeXmlXoeX~ObkXokX~P%OOm!kO~Om!lObnPonP~P%OOb!pOo!oO~Ob!pO~P!bOm!sOosXpsX~OosXpsX~P%OOm!uOotPptP~P%OOo!xOp!yO~Op!yO~P#WOS!|O!a#OO!b#OO~OUyX!ayX!byX!dyX~P#|Om#QO~OU#SO!a#UO!b#UO!d#RO~Om#WOUzX!azX!bzX!dzX~O]#XO~O!b#XO!g#YO~O^#ZO!b#XO!g#YO~OP!RXQ!RX!V!RX!`!RXS!RX!a!RX!b!RXU!RXm!RX!d!RX~P&aOP!TXQ!TX!V!TX!`!TXS!TX!a!TX!b!TXU!TXm!TX!d!TX~P&aO!b#^O!g#^O~O^#_O!b#^O!f#`O!g#^O~O^#_O!W#aO!b#^O!g#^O~OPaaQaa!Vaa!`aa~P#|OP#cO!V[OQ!XX!`!XX~OP!XXQ!XX!V!XX!`!XX~P#|OP_O!V[OQ!_X!`!_X~P#|OWROXROcPOqQObgXmgXogXpgX~OWROXROcPOqQObiXmiXoiXpiX~Obkaoka~P%OObnXonX~P%OOm#kO~Ob#lOo!oO~Oosapsa~P%OOotXptX~P%OOm#pO~Oo!xOp#qO~OSwP!awP!bwP~P#|OS!|O!a#vO!b#vO~OUya!aya!bya!dya~P#|Om#xO~P%OOm#{OU}P!a}P!b}P!d}P~P#|OU#SO!a$OO!b$OO!d#RO~O]$QO~O!b$QO!g$RO~O!b$SO!g$SO~O^$TO!b$SO!g$SO~O^$TO!b$SO!f$UO!g$SO~OP!XaQ!Xa!V!Xa!`!Xa~P#|Obnaona~P%OOotapta~P%OOo!xO~OU|X!a|X!b|X!d|X~P#|Om$ZO~Om$]OU}X!a}X!b}X!d}X~O]$^O~O!b$_O!g$_O~O^$`O!b$_O!g$_O~OU|a!a|a!b|a!d|a~P#|O!b$cO!g$cO~O\",goto:\",]!mPPPPPPPPPPPPPPPPP!nPP!v#v#|$`#|$c$f$j$nP%VPPP!v%Y%^%a%{&O%a&R&U&X&_&b%aP&e&{&e'O'RPP']'a'g'm's'y(XPPPPPPPP(_)e*X+c,VUaObcR#e!c!{ROPQSTUXY_bcdehknrtvz!O!U!W!_!b!c!f!h!k!l!s!u!|#Q#R#S#W#c#k#p#x#{$Z$]QmPR!qnqfPQThknrtv!k!l!s!u#R#k#pR!gdR!ieTlPnTjPnSiPnSqQvQ{TQ!mkQ!trQ!vtR#y#RR!nkTsQvR!wt!RWOSUXY_bcz!O!U!W!_!b!c!|#Q#S#W#c#x#{$Z$]RySR#t!|R|TR|UQ!PUR#|#SR#z#RR#z#SyZOSU_bcz!O!_!b!c!|#Q#S#W#c#x#{$Z$]R!VXR!XYa]O^abc!a!c!eT!da!eQnPR!rnQvQR!{vQ!}yR#u!}Q#T|R#}#TW^Obc!cS!^^!aT!aa!eQ!eaR#f!eW`Obc!cQxSS}U#SQ!`_Q#PzQ#V!OQ#b!_Q#d!bQ#s!|Q#w#QQ$P#WQ$V#cQ$Y#xQ$[#{Q$a$ZR$b$]xZOSU_bcz!O!_!b!c!|#Q#S#W#c#x#{$Z$]Q!VXQ!XYQ#[!UR#]!W!QWOSUXY_bcz!O!U!W!_!b!c!|#Q#S#W#c#x#{$Z$]pfPQThknrtv!k!l!s!u#R#k#pQ!gdQ!ieQ#g!fR#h!hSgPn^pQTkrtv#RQ!jhQ#i!kQ#j!lQ#n!sQ#o!uQ$W#kR$X#pQuQR!zv\",nodeNames:\"\\u26A0 DirectiveEnd DocEnd - - ? ? ? Literal QuotedLiteral Anchor Alias Tag BlockLiteralContent Comment Stream BOM Document ] [ FlowSequence Item Tagged Anchored Anchored Tagged FlowMapping Pair Key : Pair , } { FlowMapping Pair Pair BlockSequence Item Item BlockMapping Pair Pair Key Pair Pair BlockLiteral BlockLiteralHeader Tagged Anchored Anchored Tagged Directive DirectiveName DirectiveContent Document\",maxTerm:74,context:xY,nodeProps:[[\"isolate\",-3,8,9,14,\"\"],[\"openedBy\",18,\"[\",32,\"{\"],[\"closedBy\",19,\"]\",33,\"}\"]],propSources:[VY],skippedNodes:[0],repeatNodeCount:6,tokenData:\"-Y~RnOX#PXY$QYZ$]Z]#P]^$]^p#Ppq$Qqs#Pst$btu#Puv$yv|#P|}&e}![#P![!]'O!]!`#P!`!a'i!a!}#P!}#O*g#O#P#P#P#Q+Q#Q#o#P#o#p+k#p#q'i#q#r,U#r;'S#P;'S;=`#z<%l?HT#P?HT?HU,o?HUO#PQ#UU!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PQ#kTOY#PZs#Pt;'S#P;'S;=`#z<%lO#PQ#}P;=`<%l#P~$VQ!f~XY$Qpq$Q~$bO!g~~$gS^~OY$bZ;'S$b;'S;=`$s<%lO$b~$vP;=`<%l$bR%OX!WQOX%kXY#PZ]%k]^#P^p%kpq#hq;'S%k;'S;=`&_<%lO%kR%rX!WQ!VPOX%kXY#PZ]%k]^#P^p%kpq#hq;'S%k;'S;=`&_<%lO%kR&bP;=`<%l%kR&lUoP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR'VUmP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR'p[!PP!WQOY#PZp#Ppq#hq{#P{|(f|}#P}!O(f!O!R#P!R![)p![;'S#P;'S;=`#z<%lO#PR(mW!PP!WQOY#PZp#Ppq#hq!R#P!R![)V![;'S#P;'S;=`#z<%lO#PR)^U!PP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR)wY!PP!WQOY#PZp#Ppq#hq{#P{|)V|}#P}!O)V!O;'S#P;'S;=`#z<%lO#PR*nUcP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR+XUbP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR+rUqP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR,]UpP!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#PR,vU`P!WQOY#PZp#Ppq#hq;'S#P;'S;=`#z<%lO#P\",tokenizers:[kY,wY,_Y,RY,0,1],topRules:{Stream:[0,15]},tokenPrec:0});var qY=Oe.deserialize({version:14,states:\"!vOQOPOOO]OPO'#C_OhOPO'#C^OOOO'#Cc'#CcOpOPO'#CaQOOOOOO{OPOOOOOO'#Cb'#CbO!WOPO'#C`O!`OPO,58xOOOO-E6a-E6aOOOO-E6`-E6`OOOO'#C_'#C_OOOO1G.d1G.d\",stateData:\"!h~OXPOYROWTP~OWVXXRXYRX~OYVOXSP~OXROYROWTX~OXROYROWTP~OYVOXSX~OX[O~OXY~\",goto:\"vWPPX[beioRUOQQOR]XRXQTTOUQWQRZWSSOURYS\",nodeNames:\"\\u26A0 Document Frontmatter DashLine FrontmatterContent Body\",maxTerm:10,skippedNodes:[0],repeatNodeCount:2,tokenData:\"$z~RXOYnYZ!^Z]n]^!^^}n}!O!i!O;'Sn;'S;=`!c<%lOn~qXOYnYZ!^Z]n]^!^^;'Sn;'S;=`!c<%l~n~On~~!^~!cOY~~!fP;=`<%ln~!lZOYnYZ!^Z]n]^!^^}n}!O#_!O;'Sn;'S;=`!c<%l~n~On~~!^~#bZOYnYZ!^Z]n]^!^^}n}!O$T!O;'Sn;'S;=`!c<%l~n~On~~!^~$WXOYnYZ$sZ]n]^$s^;'Sn;'S;=`!c<%l~n~On~~$s~$zOX~Y~\",tokenizers:[0],topRules:{Document:[0,1]},tokenPrec:67}),zY=ne.define({name:\"yaml\",parser:Vg.configure({props:[se.add({Stream:O=>{for(let e=O.node.resolve(O.pos,-1);e&&e.to>=O.pos;e=e.parent){if(e.name==\"BlockLiteralContent\"&&e.from<e.to)return O.baseIndentFor(e);if(e.name==\"BlockLiteral\")return O.baseIndentFor(e)+O.unit;if(e.name==\"BlockSequence\"||e.name==\"BlockMapping\")return O.column(e.from,1);if(e.name==\"QuotedLiteral\")return null;if(e.name==\"Literal\"){let t=O.column(e.from,1);if(t==O.lineIndent(e.from,1))return t;if(e.to>O.pos)return null}}return null},FlowMapping:be({closing:\"}\"}),FlowSequence:be({closing:\"]\"})}),te.add({\"FlowMapping FlowSequence\":me,\"Item Pair BlockLiteral\":(O,e)=>({from:e.doc.lineAt(O.from).to,to:O.to})})]}),languageData:{commentTokens:{line:\"#\"},indentOnInput:/^\\s*[\\]\\}]$/}});function qg(){return new J(zY)}var nV=ne.define({name:\"yaml-frontmatter\",parser:qY.configure({props:[F({DashLine:d.meta})]})});function UY({canWrap:O,isDisabled:e,isLive:t,isLiveDebounced:i,isLiveOnBlur:r,liveDebounce:n,language:s,state:a}){return{editor:null,themeCompartment:new FO,isDocChanged:!1,state:a,init(){let o=this.getLanguageExtension(),l=Alpine.debounce(()=>this.$wire.commit(),n??300);this.editor=new T({parent:this.$refs.editor,state:I.create({doc:this.state,extensions:[t$,Xt.of([QQ]),...O?[T.lineWrapping]:[],I.readOnly.of(e),T.editable.of(!e),T.updateListener.of(c=>{c.docChanged&&(this.isDocChanged=!0,this.state=c.state.doc.toString(),!r&&(t||i)&&l())}),T.domEventHandlers({blur:(c,h)=>{r&&this.isDocChanged&&this.$wire.$commit()}}),...o?[o]:[],this.themeCompartment.of(this.getThemeExtensions())]})}),this.$watch(\"state\",()=>{this.state!==void 0&&this.editor.state.doc.toString()!==this.state&&this.editor.dispatch({changes:{from:0,to:this.editor.state.doc.length,insert:this.state}})}),this.themeObserver=new MutationObserver(()=>{this.editor.dispatch({effects:this.themeCompartment.reconfigure(this.getThemeExtensions())})}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[\"class\"]})},isDarkMode(){return document.documentElement.classList.contains(\"dark\")},getThemeExtensions(){return this.isDarkMode()?[a$]:[]},getLanguageExtension(){return s&&{cpp:g$,css:ys,go:W$,html:Ti,java:Zp,javascript:ks,json:Yp,markdown:Tm,php:vm,python:Nm,sql:hg,xml:Tg,yaml:qg}[s]?.()||null},destroy(){this.themeObserver&&(this.themeObserver.disconnect(),this.themeObserver=null),this.editor&&(this.editor.destroy(),this.editor=null)}}}export{UY as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/color-picker.js",
    "content": "var c=(e,t=0,r=1)=>e>r?r:e<t?t:e,a=(e,t=0,r=Math.pow(10,t))=>Math.round(r*e)/r;var at={grad:360/400,turn:360,rad:360/(Math.PI*2)},F=e=>G(v(e)),v=e=>(e[0]===\"#\"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?a(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?a(parseInt(e.substring(6,8),16)/255,2):1}),nt=(e,t=\"deg\")=>Number(e)*(at[t]||1),it=e=>{let r=/hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?lt({h:nt(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:r[5]===void 0?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},J=it,lt=({h:e,s:t,l:r,a:o})=>(t*=(r<50?r:100-r)/100,{h:e,s:t>0?2*t/(r+t)*100:0,v:r+t,a:o}),X=e=>ct(A(e)),Y=({h:e,s:t,v:r,a:o})=>{let s=(200-t)*r/100;return{h:a(e),s:a(s>0&&s<200?t*r/100/(s<=100?s:200-s)*100:0),l:a(s/2),a:a(o,2)}};var d=e=>{let{h:t,s:r,l:o}=Y(e);return`hsl(${t}, ${r}%, ${o}%)`},$=e=>{let{h:t,s:r,l:o,a:s}=Y(e);return`hsla(${t}, ${r}%, ${o}%, ${s})`},A=({h:e,s:t,v:r,a:o})=>{e=e/360*6,t=t/100,r=r/100;let s=Math.floor(e),n=r*(1-t),i=r*(1-(e-s)*t),l=r*(1-(1-e+s)*t),q=s%6;return{r:a([r,i,n,n,l,r][q]*255),g:a([l,r,r,i,n,n][q]*255),b:a([n,n,l,r,r,i][q]*255),a:a(o,2)}},B=e=>{let{r:t,g:r,b:o}=A(e);return`rgb(${t}, ${r}, ${o})`},D=e=>{let{r:t,g:r,b:o,a:s}=A(e);return`rgba(${t}, ${r}, ${o}, ${s})`};var I=e=>{let r=/rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i.exec(e);return r?G({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:r[7]===void 0?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},U=I,b=e=>{let t=e.toString(16);return t.length<2?\"0\"+t:t},ct=({r:e,g:t,b:r,a:o})=>{let s=o<1?b(a(o*255)):\"\";return\"#\"+b(e)+b(t)+b(r)+s},G=({r:e,g:t,b:r,a:o})=>{let s=Math.max(e,t,r),n=s-Math.min(e,t,r),i=n?s===e?(t-r)/n:s===t?2+(r-e)/n:4+(e-t)/n:0;return{h:a(60*(i<0?i+6:i)),s:a(s?n/s*100:0),v:a(s/255*100),a:o}};var L=(e,t)=>{if(e===t)return!0;for(let r in e)if(e[r]!==t[r])return!1;return!0},h=(e,t)=>e.replace(/\\s/g,\"\")===t.replace(/\\s/g,\"\"),K=(e,t)=>e.toLowerCase()===t.toLowerCase()?!0:L(v(e),v(t));var Q={},S=e=>{let t=Q[e];return t||(t=document.createElement(\"template\"),t.innerHTML=e,Q[e]=t),t},f=(e,t,r)=>{e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:r}))};var m=!1,O=e=>\"touches\"in e,pt=e=>m&&!O(e)?!1:(m||(m=O(e)),!0),W=(e,t)=>{let r=O(t)?t.touches[0]:t,o=e.el.getBoundingClientRect();f(e.el,\"move\",e.getMove({x:c((r.pageX-(o.left+window.pageXOffset))/o.width),y:c((r.pageY-(o.top+window.pageYOffset))/o.height)}))},ut=(e,t)=>{let r=t.keyCode;r>40||e.xy&&r<37||r<33||(t.preventDefault(),f(e.el,\"move\",e.getMove({x:r===39?.01:r===37?-.01:r===34?.05:r===33?-.05:r===35?1:r===36?-1:0,y:r===40?.01:r===38?-.01:0},!0)))},u=class{constructor(t,r,o,s){let n=S(`<div role=\"slider\" tabindex=\"0\" part=\"${r}\" ${o}><div part=\"${r}-pointer\"></div></div>`);t.appendChild(n.content.cloneNode(!0));let i=t.querySelector(`[part=${r}]`);i.addEventListener(\"mousedown\",this),i.addEventListener(\"touchstart\",this),i.addEventListener(\"keydown\",this),this.el=i,this.xy=s,this.nodes=[i.firstChild,i]}set dragging(t){let r=t?document.addEventListener:document.removeEventListener;r(m?\"touchmove\":\"mousemove\",this),r(m?\"touchend\":\"mouseup\",this)}handleEvent(t){switch(t.type){case\"mousedown\":case\"touchstart\":if(t.preventDefault(),!pt(t)||!m&&t.button!=0)return;this.el.focus(),W(this,t),this.dragging=!0;break;case\"mousemove\":case\"touchmove\":t.preventDefault(),W(this,t);break;case\"mouseup\":case\"touchend\":this.dragging=!1;break;case\"keydown\":ut(this,t);break}}style(t){t.forEach((r,o)=>{for(let s in r)this.nodes[o].style.setProperty(s,r[s])})}};var H=class extends u{constructor(t){super(t,\"hue\",'aria-label=\"Hue\" aria-valuemin=\"0\" aria-valuemax=\"360\"',!1)}update({h:t}){this.h=t,this.style([{left:`${t/360*100}%`,color:d({h:t,s:100,v:100,a:1})}]),this.el.setAttribute(\"aria-valuenow\",`${a(t)}`)}getMove(t,r){return{h:r?c(this.h+t.x*360,0,360):360*t.x}}};var w=class extends u{constructor(t){super(t,\"saturation\",'aria-label=\"Color\"',!0)}update(t){this.hsva=t,this.style([{top:`${100-t.v}%`,left:`${t.s}%`,color:d(t)},{\"background-color\":d({h:t.h,s:100,v:100,a:1})}]),this.el.setAttribute(\"aria-valuetext\",`Saturation ${a(t.s)}%, Brightness ${a(t.v)}%`)}getMove(t,r){return{s:r?c(this.hsva.s+t.x*100,0,100):t.x*100,v:r?c(this.hsva.v-t.y*100,0,100):Math.round(100-t.y*100)}}};var Z=':host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:\"\";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}';var tt=\"[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}\";var rt=\"[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}\";var T=Symbol(\"same\"),R=Symbol(\"color\"),et=Symbol(\"hsva\"),_=Symbol(\"update\"),ot=Symbol(\"parts\"),g=Symbol(\"css\"),x=Symbol(\"sliders\"),p=class extends HTMLElement{static get observedAttributes(){return[\"color\"]}get[g](){return[Z,tt,rt]}get[x](){return[w,H]}get color(){return this[R]}set color(t){if(!this[T](t)){let r=this.colorModel.toHsva(t);this[_](r),this[R]=t}}constructor(){super();let t=S(`<style>${this[g].join(\"\")}</style>`),r=this.attachShadow({mode:\"open\"});r.appendChild(t.content.cloneNode(!0)),r.addEventListener(\"move\",this),this[ot]=this[x].map(o=>new o(r))}connectedCallback(){if(this.hasOwnProperty(\"color\")){let t=this.color;delete this.color,this.color=t}else this.color||(this.color=this.colorModel.defaultColor)}attributeChangedCallback(t,r,o){let s=this.colorModel.fromAttr(o);this[T](s)||(this.color=s)}handleEvent(t){let r=this[et],o={...r,...t.detail};this[_](o);let s;!L(o,r)&&!this[T](s=this.colorModel.fromHsva(o))&&(this[R]=s,f(this,\"color-changed\",{value:s}))}[T](t){return this.color&&this.colorModel.equal(t,this.color)}[_](t){this[et]=t,this[ot].forEach(r=>r.update(t))}};var dt={defaultColor:\"#000\",toHsva:F,fromHsva:({h:e,s:t,v:r})=>X({h:e,s:t,v:r,a:1}),equal:K,fromAttr:e=>e},y=class extends p{get colorModel(){return dt}};var P=class extends y{};customElements.define(\"hex-color-picker\",P);var ht={defaultColor:\"hsl(0, 0%, 0%)\",toHsva:J,fromHsva:d,equal:h,fromAttr:e=>e},M=class extends p{get colorModel(){return ht}};var z=class extends M{};customElements.define(\"hsl-string-color-picker\",z);var mt={defaultColor:\"rgb(0, 0, 0)\",toHsva:U,fromHsva:B,equal:h,fromAttr:e=>e},k=class extends p{get colorModel(){return mt}};var V=class extends k{};customElements.define(\"rgb-string-color-picker\",V);var C=class extends u{constructor(t){super(t,\"alpha\",'aria-label=\"Alpha\" aria-valuemin=\"0\" aria-valuemax=\"1\"',!1)}update(t){this.hsva=t;let r=$({...t,a:0}),o=$({...t,a:1}),s=t.a*100;this.style([{left:`${s}%`,color:$(t)},{\"--gradient\":`linear-gradient(90deg, ${r}, ${o}`}]);let n=a(s);this.el.setAttribute(\"aria-valuenow\",`${n}`),this.el.setAttribute(\"aria-valuetext\",`${n}%`)}getMove(t,r){return{a:r?c(this.hsva.a+t.x):t.x}}};var st=`[part=alpha]{flex:0 0 24px}[part=alpha]::after{display:block;content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;border-radius:inherit;background-image:var(--gradient);box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part^=alpha]{background-color:#fff;background-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill-opacity=\".05\"><rect x=\"8\" width=\"8\" height=\"8\"/><rect y=\"8\" width=\"8\" height=\"8\"/></svg>')}[part=alpha-pointer]{top:50%}`;var E=class extends p{get[g](){return[...super[g],st]}get[x](){return[...super[x],C]}};var ft={defaultColor:\"rgba(0, 0, 0, 1)\",toHsva:I,fromHsva:D,equal:h,fromAttr:e=>e},N=class extends E{get colorModel(){return ft}};var j=class extends N{};customElements.define(\"rgba-string-color-picker\",j);function gt({isAutofocused:e,isDisabled:t,isLive:r,isLiveDebounced:o,isLiveOnBlur:s,liveDebounce:n,state:i}){return{state:i,init(){this.state===null||this.state===\"\"||this.setState(this.state),e&&this.togglePanelVisibility(this.$refs.input),this.$watch(\"state\",Alpine.debounce(l=>{CSS.supports(\"color\",l)&&(this.$refs.picker.color=l)},200)),this.$refs.input.addEventListener(\"change\",l=>{this.setState(l.target.value)}),this.$refs.panel.addEventListener(\"color-changed\",l=>{this.setState(l.detail.value),!(s||!(r||o))&&setTimeout(()=>{this.state===l.detail.value&&this.commitState()},o?n:250)}),(r||o||s)&&new MutationObserver(()=>this.isOpen()?null:this.commitState()).observe(this.$refs.panel,{attributes:!0,childList:!0})},togglePanelVisibility(){t||this.$refs.panel.toggle(this.$refs.input)},setState(l){this.state=l,this.$refs.input.value=l,this.$refs.picker.color=l},isOpen(){return this.$refs.panel.style.display===\"block\"},commitState(){JSON.stringify(this.$wire.__instance.canonical)!==JSON.stringify(this.$wire.__instance.ephemeral)&&this.$wire.$commit()}}}export{gt as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/date-time-picker.js",
    "content": "var Gi=Object.create;var Hn=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var Zi=Object.getOwnPropertyNames;var Vi=Object.getPrototypeOf,Ki=Object.prototype.hasOwnProperty;var v=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports);var Qi=(n,t,a,i)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let e of Zi(t))!Ki.call(n,e)&&e!==a&&Hn(n,e,{get:()=>t[e],enumerable:!(i=Ri(t,e))||i.enumerable});return n};var oe=(n,t,a)=>(a=n!=null?Gi(Vi(n)):{},Qi(t||!n||!n.__esModule?Hn(a,\"default\",{value:n,enumerable:!0}):a,n));var En=v((He,je)=>{(function(n,t){typeof He==\"object\"&&typeof je<\"u\"?je.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_plugin_advancedFormat=t()})(He,(function(){\"use strict\";return function(n,t){var a=t.prototype,i=a.format;a.format=function(e){var r=this,s=this.$locale();if(!this.isValid())return i.bind(this)(e);var _=this.$utils(),d=(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(u){switch(u){case\"Q\":return Math.ceil((r.$M+1)/3);case\"Do\":return s.ordinal(r.$D);case\"gggg\":return r.weekYear();case\"GGGG\":return r.isoWeekYear();case\"wo\":return s.ordinal(r.week(),\"W\");case\"w\":case\"ww\":return _.s(r.week(),u===\"w\"?1:2,\"0\");case\"W\":case\"WW\":return _.s(r.isoWeek(),u===\"W\"?1:2,\"0\");case\"k\":case\"kk\":return _.s(String(r.$H===0?24:r.$H),u===\"k\"?1:2,\"0\");case\"X\":return Math.floor(r.$d.getTime()/1e3);case\"x\":return r.$d.getTime();case\"z\":return\"[\"+r.offsetName()+\"]\";case\"zzz\":return\"[\"+r.offsetName(\"long\")+\"]\";default:return u}}));return i.bind(this)(d)}}}))});var Jn=v((Te,we)=>{(function(n,t){typeof Te==\"object\"&&typeof we<\"u\"?we.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_plugin_customParseFormat=t()})(Te,(function(){\"use strict\";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\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,a=/\\d/,i=/\\d\\d/,e=/\\d\\d?/,r=/\\d*[^-_:/,()\\s\\d]+/,s={},_=function(c){return(c=+c)+(c>68?1900:2e3)},d=function(c){return function(y){this[c]=+y}},u=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(c){(this.zone||(this.zone={})).offset=(function(y){if(!y||y===\"Z\")return 0;var D=y.match(/([+-]|\\d\\d)/g),L=60*D[1]+(+D[2]||0);return L===0?0:D[0]===\"+\"?-L:L})(c)}],o=function(c){var y=s[c];return y&&(y.indexOf?y:y.s.concat(y.f))},f=function(c,y){var D,L=s.meridiem;if(L){for(var w=1;w<=24;w+=1)if(c.indexOf(L(w,0,y))>-1){D=w>12;break}}else D=c===(y?\"pm\":\"PM\");return D},l={A:[r,function(c){this.afternoon=f(c,!1)}],a:[r,function(c){this.afternoon=f(c,!0)}],Q:[a,function(c){this.month=3*(c-1)+1}],S:[a,function(c){this.milliseconds=100*+c}],SS:[i,function(c){this.milliseconds=10*+c}],SSS:[/\\d{3}/,function(c){this.milliseconds=+c}],s:[e,d(\"seconds\")],ss:[e,d(\"seconds\")],m:[e,d(\"minutes\")],mm:[e,d(\"minutes\")],H:[e,d(\"hours\")],h:[e,d(\"hours\")],HH:[e,d(\"hours\")],hh:[e,d(\"hours\")],D:[e,d(\"day\")],DD:[i,d(\"day\")],Do:[r,function(c){var y=s.ordinal,D=c.match(/\\d+/);if(this.day=D[0],y)for(var L=1;L<=31;L+=1)y(L).replace(/\\[|\\]/g,\"\")===c&&(this.day=L)}],w:[e,d(\"week\")],ww:[i,d(\"week\")],M:[e,d(\"month\")],MM:[i,d(\"month\")],MMM:[r,function(c){var y=o(\"months\"),D=(o(\"monthsShort\")||y.map((function(L){return L.slice(0,3)}))).indexOf(c)+1;if(D<1)throw new Error;this.month=D%12||D}],MMMM:[r,function(c){var y=o(\"months\").indexOf(c)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\\d+/,d(\"year\")],YY:[i,function(c){this.year=_(c)}],YYYY:[/\\d{4}/,d(\"year\")],Z:u,ZZ:u};function m(c){var y,D;y=c,D=s&&s.formats;for(var L=(c=y.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function($,j,U){var W=U&&U.toUpperCase();return j||D[U]||n[U]||D[W].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(g,M,h){return M||h.slice(1)}))}))).match(t),w=L.length,b=0;b<w;b+=1){var C=L[b],A=l[C],I=A&&A[0],x=A&&A[1];L[b]=x?{regex:I,parser:x}:C.replace(/^\\[|\\]$/g,\"\")}return function($){for(var j={},U=0,W=0;U<w;U+=1){var g=L[U];if(typeof g==\"string\")W+=g.length;else{var M=g.regex,h=g.parser,p=$.slice(W),Y=M.exec(p)[0];h.call(j,Y),$=$.replace(Y,\"\")}}return(function(S){var H=S.afternoon;if(H!==void 0){var T=S.hours;H?T<12&&(S.hours+=12):T===12&&(S.hours=0),delete S.afternoon}})(j),j}}return function(c,y,D){D.p.customParseFormat=!0,c&&c.parseTwoDigitYear&&(_=c.parseTwoDigitYear);var L=y.prototype,w=L.parse;L.parse=function(b){var C=b.date,A=b.utc,I=b.args;this.$u=A;var x=I[1];if(typeof x==\"string\"){var $=I[2]===!0,j=I[3]===!0,U=$||j,W=I[2];j&&(W=I[2]),s=this.$locale(),!$&&W&&(s=D.Ls[W]),this.$d=(function(p,Y,S,H){try{if([\"x\",\"X\"].indexOf(Y)>-1)return new Date((Y===\"X\"?1e3:1)*p);var T=m(Y)(p),q=T.year,N=T.month,F=T.day,P=T.hours,B=T.minutes,Q=T.seconds,ae=T.milliseconds,Z=T.zone,J=T.week,R=new Date,X=F||(q||N?1:R.getDate()),ee=q||R.getFullYear(),fe=0;q&&!N||(fe=N>0?N-1:R.getMonth());var me,pe=P||0,Le=B||0,De=Q||0,ve=ae||0;return Z?new Date(Date.UTC(ee,fe,X,pe,Le,De,ve+60*Z.offset*1e3)):S?new Date(Date.UTC(ee,fe,X,pe,Le,De,ve)):(me=new Date(ee,fe,X,pe,Le,De,ve),J&&(me=H(me).week(J).toDate()),me)}catch{return new Date(\"\")}})(C,x,A,D),this.init(),W&&W!==!0&&(this.$L=this.locale(W).$L),U&&C!=this.format(x)&&(this.$d=new Date(\"\")),s={}}else if(x instanceof Array)for(var g=x.length,M=1;M<=g;M+=1){I[1]=x[M-1];var h=D.apply(this,I);if(h.isValid()){this.$d=h.$d,this.$L=h.$L,this.init();break}M===g&&(this.$d=new Date(\"\"))}else w.call(this,b)}}}))});var Un=v(($e,Ce)=>{(function(n,t){typeof $e==\"object\"&&typeof Ce<\"u\"?Ce.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_plugin_localeData=t()})($e,(function(){\"use strict\";return function(n,t,a){var i=t.prototype,e=function(u){return u&&(u.indexOf?u:u.s)},r=function(u,o,f,l,m){var c=u.name?u:u.$locale(),y=e(c[o]),D=e(c[f]),L=y||D.map((function(b){return b.slice(0,l)}));if(!m)return L;var w=c.weekStart;return L.map((function(b,C){return L[(C+(w||0))%7]}))},s=function(){return a.Ls[a.locale()]},_=function(u,o){return u.formats[o]||(function(f){return f.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(l,m,c){return m||c.slice(1)}))})(u.formats[o.toUpperCase()])},d=function(){var u=this;return{months:function(o){return o?o.format(\"MMMM\"):r(u,\"months\")},monthsShort:function(o){return o?o.format(\"MMM\"):r(u,\"monthsShort\",\"months\",3)},firstDayOfWeek:function(){return u.$locale().weekStart||0},weekdays:function(o){return o?o.format(\"dddd\"):r(u,\"weekdays\")},weekdaysMin:function(o){return o?o.format(\"dd\"):r(u,\"weekdaysMin\",\"weekdays\",2)},weekdaysShort:function(o){return o?o.format(\"ddd\"):r(u,\"weekdaysShort\",\"weekdays\",3)},longDateFormat:function(o){return _(u.$locale(),o)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};i.localeData=function(){return d.bind(this)()},a.localeData=function(){var u=s();return{firstDayOfWeek:function(){return u.weekStart||0},weekdays:function(){return a.weekdays()},weekdaysShort:function(){return a.weekdaysShort()},weekdaysMin:function(){return a.weekdaysMin()},months:function(){return a.months()},monthsShort:function(){return a.monthsShort()},longDateFormat:function(o){return _(u,o)},meridiem:u.meridiem,ordinal:u.ordinal}},a.months=function(){return r(s(),\"months\")},a.monthsShort=function(){return r(s(),\"monthsShort\",\"months\",3)},a.weekdays=function(u){return r(s(),\"weekdays\",null,null,u)},a.weekdaysShort=function(u){return r(s(),\"weekdaysShort\",\"weekdays\",3,u)},a.weekdaysMin=function(u){return r(s(),\"weekdaysMin\",\"weekdays\",2,u)}}}))});var Wn=v((Oe,ze)=>{(function(n,t){typeof Oe==\"object\"&&typeof ze<\"u\"?ze.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_plugin_timezone=t()})(Oe,(function(){\"use strict\";var n={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(a,i,e){var r,s=function(o,f,l){l===void 0&&(l={});var m=new Date(o),c=(function(y,D){D===void 0&&(D={});var L=D.timeZoneName||\"short\",w=y+\"|\"+L,b=t[w];return b||(b=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:y,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:L}),t[w]=b),b})(f,l);return c.formatToParts(m)},_=function(o,f){for(var l=s(o,f),m=[],c=0;c<l.length;c+=1){var y=l[c],D=y.type,L=y.value,w=n[D];w>=0&&(m[w]=parseInt(L,10))}var b=m[3],C=b===24?0:b,A=m[0]+\"-\"+m[1]+\"-\"+m[2]+\" \"+C+\":\"+m[4]+\":\"+m[5]+\":000\",I=+o;return(e.utc(A).valueOf()-(I-=I%1e3))/6e4},d=i.prototype;d.tz=function(o,f){o===void 0&&(o=r);var l,m=this.utcOffset(),c=this.toDate(),y=c.toLocaleString(\"en-US\",{timeZone:o}),D=Math.round((c-new Date(y))/1e3/60),L=15*-Math.round(c.getTimezoneOffset()/15)-D;if(!Number(L))l=this.utcOffset(0,f);else if(l=e(y,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(L,!0),f){var w=l.utcOffset();l=l.add(m-w,\"minute\")}return l.$x.$timezone=o,l},d.offsetName=function(o){var f=this.$x.$timezone||e.tz.guess(),l=s(this.valueOf(),f,{timeZoneName:o}).find((function(m){return m.type.toLowerCase()===\"timezonename\"}));return l&&l.value};var u=d.startOf;d.startOf=function(o,f){if(!this.$x||!this.$x.$timezone)return u.call(this,o,f);var l=e(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return u.call(l,o,f).tz(this.$x.$timezone,!0)},e.tz=function(o,f,l){var m=l&&f,c=l||f||r,y=_(+e(),c);if(typeof o!=\"string\")return e(o).tz(c);var D=(function(C,A,I){var x=C-60*A*1e3,$=_(x,I);if(A===$)return[x,A];var j=_(x-=60*($-A)*1e3,I);return $===j?[x,$]:[C-60*Math.min($,j)*1e3,Math.max($,j)]})(e.utc(o,m).valueOf(),y,c),L=D[0],w=D[1],b=e(L).utcOffset(w);return b.$x.$timezone=c,b},e.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},e.tz.setDefault=function(o){r=o}}}))});var Pn=v((Ae,qe)=>{(function(n,t){typeof Ae==\"object\"&&typeof qe<\"u\"?qe.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_plugin_utc=t()})(Ae,(function(){\"use strict\";var n=\"minute\",t=/[+-]\\d\\d(?::?\\d\\d)?/g,a=/([+-]|\\d\\d)/g;return function(i,e,r){var s=e.prototype;r.utc=function(m){var c={date:m,utc:!0,args:arguments};return new e(c)},s.utc=function(m){var c=r(this.toDate(),{locale:this.$L,utc:!0});return m?c.add(this.utcOffset(),n):c},s.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var _=s.parse;s.parse=function(m){m.utc&&(this.$u=!0),this.$utils().u(m.$offset)||(this.$offset=m.$offset),_.call(this,m)};var d=s.init;s.init=function(){if(this.$u){var m=this.$d;this.$y=m.getUTCFullYear(),this.$M=m.getUTCMonth(),this.$D=m.getUTCDate(),this.$W=m.getUTCDay(),this.$H=m.getUTCHours(),this.$m=m.getUTCMinutes(),this.$s=m.getUTCSeconds(),this.$ms=m.getUTCMilliseconds()}else d.call(this)};var u=s.utcOffset;s.utcOffset=function(m,c){var y=this.$utils().u;if(y(m))return this.$u?0:y(this.$offset)?u.call(this):this.$offset;if(typeof m==\"string\"&&(m=(function(b){b===void 0&&(b=\"\");var C=b.match(t);if(!C)return null;var A=(\"\"+C[0]).match(a)||[\"-\",0,0],I=A[0],x=60*+A[1]+ +A[2];return x===0?0:I===\"+\"?x:-x})(m),m===null))return this;var D=Math.abs(m)<=16?60*m:m;if(D===0)return this.utc(c);var L=this.clone();if(c)return L.$offset=D,L.$u=!1,L;var w=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(L=this.local().add(D+w,n)).$offset=D,L.$x.$localOffset=w,L};var o=s.format;s.format=function(m){var c=m||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return o.call(this,c)},s.valueOf=function(){var m=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*m},s.isUTC=function(){return!!this.$u},s.toISOString=function(){return this.toDate().toISOString()},s.toString=function(){return this.toDate().toUTCString()};var f=s.toDate;s.toDate=function(m){return m===\"s\"&&this.$offset?r(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():f.call(this)};var l=s.diff;s.diff=function(m,c,y){if(m&&this.$u===m.$u)return l.call(this,m,c,y);var D=this.local(),L=r(m).local();return l.call(D,L,c,y)}}}))});var k=v((Ie,xe)=>{(function(n,t){typeof Ie==\"object\"&&typeof xe<\"u\"?xe.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs=t()})(Ie,(function(){\"use strict\";var n=1e3,t=6e4,a=36e5,i=\"millisecond\",e=\"second\",r=\"minute\",s=\"hour\",_=\"day\",d=\"week\",u=\"month\",o=\"quarter\",f=\"year\",l=\"date\",m=\"Invalid Date\",c=/^(\\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,D={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(g){var M=[\"th\",\"st\",\"nd\",\"rd\"],h=g%100;return\"[\"+g+(M[(h-20)%10]||M[h]||M[0])+\"]\"}},L=function(g,M,h){var p=String(g);return!p||p.length>=M?g:\"\"+Array(M+1-p.length).join(h)+g},w={s:L,z:function(g){var M=-g.utcOffset(),h=Math.abs(M),p=Math.floor(h/60),Y=h%60;return(M<=0?\"+\":\"-\")+L(p,2,\"0\")+\":\"+L(Y,2,\"0\")},m:function g(M,h){if(M.date()<h.date())return-g(h,M);var p=12*(h.year()-M.year())+(h.month()-M.month()),Y=M.clone().add(p,u),S=h-Y<0,H=M.clone().add(p+(S?-1:1),u);return+(-(p+(h-Y)/(S?Y-H:H-Y))||0)},a:function(g){return g<0?Math.ceil(g)||0:Math.floor(g)},p:function(g){return{M:u,y:f,w:d,d:_,D:l,h:s,m:r,s:e,ms:i,Q:o}[g]||String(g||\"\").toLowerCase().replace(/s$/,\"\")},u:function(g){return g===void 0}},b=\"en\",C={};C[b]=D;var A=\"$isDayjsObject\",I=function(g){return g instanceof U||!(!g||!g[A])},x=function g(M,h,p){var Y;if(!M)return b;if(typeof M==\"string\"){var S=M.toLowerCase();C[S]&&(Y=S),h&&(C[S]=h,Y=S);var H=M.split(\"-\");if(!Y&&H.length>1)return g(H[0])}else{var T=M.name;C[T]=M,Y=T}return!p&&Y&&(b=Y),Y||!p&&b},$=function(g,M){if(I(g))return g.clone();var h=typeof M==\"object\"?M:{};return h.date=g,h.args=arguments,new U(h)},j=w;j.l=x,j.i=I,j.w=function(g,M){return $(g,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var U=(function(){function g(h){this.$L=x(h.locale,null,!0),this.parse(h),this.$x=this.$x||h.x||{},this[A]=!0}var M=g.prototype;return M.parse=function(h){this.$d=(function(p){var Y=p.date,S=p.utc;if(Y===null)return new Date(NaN);if(j.u(Y))return new Date;if(Y instanceof Date)return new Date(Y);if(typeof Y==\"string\"&&!/Z$/i.test(Y)){var H=Y.match(c);if(H){var T=H[2]-1||0,q=(H[7]||\"0\").substring(0,3);return S?new Date(Date.UTC(H[1],T,H[3]||1,H[4]||0,H[5]||0,H[6]||0,q)):new Date(H[1],T,H[3]||1,H[4]||0,H[5]||0,H[6]||0,q)}}return new Date(Y)})(h),this.init()},M.init=function(){var h=this.$d;this.$y=h.getFullYear(),this.$M=h.getMonth(),this.$D=h.getDate(),this.$W=h.getDay(),this.$H=h.getHours(),this.$m=h.getMinutes(),this.$s=h.getSeconds(),this.$ms=h.getMilliseconds()},M.$utils=function(){return j},M.isValid=function(){return this.$d.toString()!==m},M.isSame=function(h,p){var Y=$(h);return this.startOf(p)<=Y&&Y<=this.endOf(p)},M.isAfter=function(h,p){return $(h)<this.startOf(p)},M.isBefore=function(h,p){return this.endOf(p)<$(h)},M.$g=function(h,p,Y){return j.u(h)?this[p]:this.set(Y,h)},M.unix=function(){return Math.floor(this.valueOf()/1e3)},M.valueOf=function(){return this.$d.getTime()},M.startOf=function(h,p){var Y=this,S=!!j.u(p)||p,H=j.p(h),T=function(Z,J){var R=j.w(Y.$u?Date.UTC(Y.$y,J,Z):new Date(Y.$y,J,Z),Y);return S?R:R.endOf(_)},q=function(Z,J){return j.w(Y.toDate()[Z].apply(Y.toDate(\"s\"),(S?[0,0,0,0]:[23,59,59,999]).slice(J)),Y)},N=this.$W,F=this.$M,P=this.$D,B=\"set\"+(this.$u?\"UTC\":\"\");switch(H){case f:return S?T(1,0):T(31,11);case u:return S?T(1,F):T(0,F+1);case d:var Q=this.$locale().weekStart||0,ae=(N<Q?N+7:N)-Q;return T(S?P-ae:P+(6-ae),F);case _:case l:return q(B+\"Hours\",0);case s:return q(B+\"Minutes\",1);case r:return q(B+\"Seconds\",2);case e:return q(B+\"Milliseconds\",3);default:return this.clone()}},M.endOf=function(h){return this.startOf(h,!1)},M.$set=function(h,p){var Y,S=j.p(h),H=\"set\"+(this.$u?\"UTC\":\"\"),T=(Y={},Y[_]=H+\"Date\",Y[l]=H+\"Date\",Y[u]=H+\"Month\",Y[f]=H+\"FullYear\",Y[s]=H+\"Hours\",Y[r]=H+\"Minutes\",Y[e]=H+\"Seconds\",Y[i]=H+\"Milliseconds\",Y)[S],q=S===_?this.$D+(p-this.$W):p;if(S===u||S===f){var N=this.clone().set(l,1);N.$d[T](q),N.init(),this.$d=N.set(l,Math.min(this.$D,N.daysInMonth())).$d}else T&&this.$d[T](q);return this.init(),this},M.set=function(h,p){return this.clone().$set(h,p)},M.get=function(h){return this[j.p(h)]()},M.add=function(h,p){var Y,S=this;h=Number(h);var H=j.p(p),T=function(F){var P=$(S);return j.w(P.date(P.date()+Math.round(F*h)),S)};if(H===u)return this.set(u,this.$M+h);if(H===f)return this.set(f,this.$y+h);if(H===_)return T(1);if(H===d)return T(7);var q=(Y={},Y[r]=t,Y[s]=a,Y[e]=n,Y)[H]||1,N=this.$d.getTime()+h*q;return j.w(N,this)},M.subtract=function(h,p){return this.add(-1*h,p)},M.format=function(h){var p=this,Y=this.$locale();if(!this.isValid())return Y.invalidDate||m;var S=h||\"YYYY-MM-DDTHH:mm:ssZ\",H=j.z(this),T=this.$H,q=this.$m,N=this.$M,F=Y.weekdays,P=Y.months,B=Y.meridiem,Q=function(J,R,X,ee){return J&&(J[R]||J(p,S))||X[R].slice(0,ee)},ae=function(J){return j.s(T%12||12,J,\"0\")},Z=B||function(J,R,X){var ee=J<12?\"AM\":\"PM\";return X?ee.toLowerCase():ee};return S.replace(y,(function(J,R){return R||(function(X){switch(X){case\"YY\":return String(p.$y).slice(-2);case\"YYYY\":return j.s(p.$y,4,\"0\");case\"M\":return N+1;case\"MM\":return j.s(N+1,2,\"0\");case\"MMM\":return Q(Y.monthsShort,N,P,3);case\"MMMM\":return Q(P,N);case\"D\":return p.$D;case\"DD\":return j.s(p.$D,2,\"0\");case\"d\":return String(p.$W);case\"dd\":return Q(Y.weekdaysMin,p.$W,F,2);case\"ddd\":return Q(Y.weekdaysShort,p.$W,F,3);case\"dddd\":return F[p.$W];case\"H\":return String(T);case\"HH\":return j.s(T,2,\"0\");case\"h\":return ae(1);case\"hh\":return ae(2);case\"a\":return Z(T,q,!0);case\"A\":return Z(T,q,!1);case\"m\":return String(q);case\"mm\":return j.s(q,2,\"0\");case\"s\":return String(p.$s);case\"ss\":return j.s(p.$s,2,\"0\");case\"SSS\":return j.s(p.$ms,3,\"0\");case\"Z\":return H}return null})(J)||H.replace(\":\",\"\")}))},M.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},M.diff=function(h,p,Y){var S,H=this,T=j.p(p),q=$(h),N=(q.utcOffset()-this.utcOffset())*t,F=this-q,P=function(){return j.m(H,q)};switch(T){case f:S=P()/12;break;case u:S=P();break;case o:S=P()/3;break;case d:S=(F-N)/6048e5;break;case _:S=(F-N)/864e5;break;case s:S=F/a;break;case r:S=F/t;break;case e:S=F/n;break;default:S=F}return Y?S:j.a(S)},M.daysInMonth=function(){return this.endOf(u).$D},M.$locale=function(){return C[this.$L]},M.locale=function(h,p){if(!h)return this.$L;var Y=this.clone(),S=x(h,p,!0);return S&&(Y.$L=S),Y},M.clone=function(){return j.w(this.$d,this)},M.toDate=function(){return new Date(this.valueOf())},M.toJSON=function(){return this.isValid()?this.toISOString():null},M.toISOString=function(){return this.$d.toISOString()},M.toString=function(){return this.$d.toUTCString()},g})(),W=U.prototype;return $.prototype=W,[[\"$ms\",i],[\"$s\",e],[\"$m\",r],[\"$H\",s],[\"$W\",_],[\"$M\",u],[\"$y\",f],[\"$D\",l]].forEach((function(g){W[g[1]]=function(M){return this.$g(M,g[0],g[1])}})),$.extend=function(g,M){return g.$i||(g(M,U,$),g.$i=!0),$},$.locale=x,$.isDayjs=I,$.unix=function(g){return $(1e3*g)},$.en=C[b],$.Ls=C,$.p={},$}))});var Gn=v((Ne,Fe)=>{(function(n,t){typeof Ne==\"object\"&&typeof Fe<\"u\"?Fe.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_am=t(n.dayjs)})(Ne,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"am\",weekdays:\"\\u12A5\\u1211\\u12F5_\\u1230\\u129E_\\u121B\\u12AD\\u1230\\u129E_\\u1228\\u1261\\u12D5_\\u1210\\u1219\\u1235_\\u12A0\\u122D\\u1265_\\u1245\\u12F3\\u121C\".split(\"_\"),weekdaysShort:\"\\u12A5\\u1211\\u12F5_\\u1230\\u129E_\\u121B\\u12AD\\u1230_\\u1228\\u1261\\u12D5_\\u1210\\u1219\\u1235_\\u12A0\\u122D\\u1265_\\u1245\\u12F3\\u121C\".split(\"_\"),weekdaysMin:\"\\u12A5\\u1211_\\u1230\\u129E_\\u121B\\u12AD_\\u1228\\u1261_\\u1210\\u1219_\\u12A0\\u122D_\\u1245\\u12F3\".split(\"_\"),months:\"\\u1303\\u1295\\u12CB\\u122A_\\u134C\\u1265\\u122F\\u122A_\\u121B\\u122D\\u127D_\\u12A4\\u1355\\u122A\\u120D_\\u121C\\u12ED_\\u1301\\u1295_\\u1301\\u120B\\u12ED_\\u12A6\\u1308\\u1235\\u1275_\\u1234\\u1355\\u1274\\u121D\\u1260\\u122D_\\u12A6\\u12AD\\u1276\\u1260\\u122D_\\u1296\\u126C\\u121D\\u1260\\u122D_\\u12F2\\u1234\\u121D\\u1260\\u122D\".split(\"_\"),monthsShort:\"\\u1303\\u1295\\u12CB_\\u134C\\u1265\\u122F_\\u121B\\u122D\\u127D_\\u12A4\\u1355\\u122A_\\u121C\\u12ED_\\u1301\\u1295_\\u1301\\u120B\\u12ED_\\u12A6\\u1308\\u1235_\\u1234\\u1355\\u1274_\\u12A6\\u12AD\\u1276_\\u1296\\u126C\\u121D_\\u12F2\\u1234\\u121D\".split(\"_\"),weekStart:1,yearStart:4,relativeTime:{future:\"\\u1260%s\",past:\"%s \\u1260\\u134A\\u1275\",s:\"\\u1325\\u1242\\u1275 \\u1230\\u12A8\\u1295\\u12F6\\u127D\",m:\"\\u12A0\\u1295\\u12F5 \\u12F0\\u1242\\u1243\",mm:\"%d \\u12F0\\u1242\\u1243\\u12CE\\u127D\",h:\"\\u12A0\\u1295\\u12F5 \\u1230\\u12D3\\u1275\",hh:\"%d \\u1230\\u12D3\\u1273\\u1275\",d:\"\\u12A0\\u1295\\u12F5 \\u1240\\u1295\",dd:\"%d \\u1240\\u1293\\u1275\",M:\"\\u12A0\\u1295\\u12F5 \\u12C8\\u122D\",MM:\"%d \\u12C8\\u122B\\u1275\",y:\"\\u12A0\\u1295\\u12F5 \\u12D3\\u1218\\u1275\",yy:\"%d \\u12D3\\u1218\\u1273\\u1275\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"MMMM D \\u1363 YYYY\",LLL:\"MMMM D \\u1363 YYYY HH:mm\",LLLL:\"dddd \\u1363 MMMM D \\u1363 YYYY HH:mm\"},ordinal:function(e){return e+\"\\u129B\"}};return a.default.locale(i,null,!0),i}))});var Rn=v((Ee,Je)=>{(function(n,t){typeof Ee==\"object\"&&typeof Je<\"u\"?Je.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ar=t(n.dayjs)})(Ee,(function(n){\"use strict\";function t(f){return f&&typeof f==\"object\"&&\"default\"in f?f:{default:f}}var a=t(n),i=\"\\u064A\\u0646\\u0627\\u064A\\u0631_\\u0641\\u0628\\u0631\\u0627\\u064A\\u0631_\\u0645\\u0627\\u0631\\u0633_\\u0623\\u0628\\u0631\\u064A\\u0644_\\u0645\\u0627\\u064A\\u0648_\\u064A\\u0648\\u0646\\u064A\\u0648_\\u064A\\u0648\\u0644\\u064A\\u0648_\\u0623\\u063A\\u0633\\u0637\\u0633_\\u0633\\u0628\\u062A\\u0645\\u0628\\u0631_\\u0623\\u0643\\u062A\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0641\\u0645\\u0628\\u0631_\\u062F\\u064A\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),e={1:\"\\u0661\",2:\"\\u0662\",3:\"\\u0663\",4:\"\\u0664\",5:\"\\u0665\",6:\"\\u0666\",7:\"\\u0667\",8:\"\\u0668\",9:\"\\u0669\",0:\"\\u0660\"},r={\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u0660\":\"0\"},s=/[١٢٣٤٥٦٧٨٩٠]/g,_=/،/g,d=/\\d/g,u=/,/g,o={name:\"ar\",weekdays:\"\\u0627\\u0644\\u0623\\u062D\\u062F_\\u0627\\u0644\\u0625\\u062B\\u0646\\u064A\\u0646_\\u0627\\u0644\\u062B\\u0644\\u0627\\u062B\\u0627\\u0621_\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u0627\\u0644\\u062E\\u0645\\u064A\\u0633_\\u0627\\u0644\\u062C\\u0645\\u0639\\u0629_\\u0627\\u0644\\u0633\\u0628\\u062A\".split(\"_\"),weekdaysShort:\"\\u0623\\u062D\\u062F_\\u0625\\u062B\\u0646\\u064A\\u0646_\\u062B\\u0644\\u0627\\u062B\\u0627\\u0621_\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621_\\u062E\\u0645\\u064A\\u0633_\\u062C\\u0645\\u0639\\u0629_\\u0633\\u0628\\u062A\".split(\"_\"),weekdaysMin:\"\\u062D_\\u0646_\\u062B_\\u0631_\\u062E_\\u062C_\\u0633\".split(\"_\"),months:i,monthsShort:i,weekStart:6,meridiem:function(f){return f>12?\"\\u0645\":\"\\u0635\"},relativeTime:{future:\"\\u0628\\u0639\\u062F %s\",past:\"\\u0645\\u0646\\u0630 %s\",s:\"\\u062B\\u0627\\u0646\\u064A\\u0629 \\u0648\\u0627\\u062D\\u062F\\u0629\",m:\"\\u062F\\u0642\\u064A\\u0642\\u0629 \\u0648\\u0627\\u062D\\u062F\\u0629\",mm:\"%d \\u062F\\u0642\\u0627\\u0626\\u0642\",h:\"\\u0633\\u0627\\u0639\\u0629 \\u0648\\u0627\\u062D\\u062F\\u0629\",hh:\"%d \\u0633\\u0627\\u0639\\u0627\\u062A\",d:\"\\u064A\\u0648\\u0645 \\u0648\\u0627\\u062D\\u062F\",dd:\"%d \\u0623\\u064A\\u0627\\u0645\",M:\"\\u0634\\u0647\\u0631 \\u0648\\u0627\\u062D\\u062F\",MM:\"%d \\u0623\\u0634\\u0647\\u0631\",y:\"\\u0639\\u0627\\u0645 \\u0648\\u0627\\u062D\\u062F\",yy:\"%d \\u0623\\u0639\\u0648\\u0627\\u0645\"},preparse:function(f){return f.replace(s,(function(l){return r[l]})).replace(_,\",\")},postformat:function(f){return f.replace(d,(function(l){return e[l]})).replace(u,\"\\u060C\")},ordinal:function(f){return f},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/\\u200FM/\\u200FYYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"}};return a.default.locale(o,null,!0),o}))});var Zn=v((Ue,We)=>{(function(n,t){typeof Ue==\"object\"&&typeof We<\"u\"?We.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_bs=t(n.dayjs)})(Ue,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"bs\",weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_\\u010Detvrtak_petak_subota\".split(\"_\"),months:\"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\".split(\"_\"),weekStart:1,weekdaysShort:\"ned._pon._uto._sri._\\u010Det._pet._sub.\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_\\u010De_pe_su\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"}};return a.default.locale(i,null,!0),i}))});var Vn=v((Pe,Ge)=>{(function(n,t){typeof Pe==\"object\"&&typeof Ge<\"u\"?Ge.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ca=t(n.dayjs)})(Pe,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"ca\",weekdays:\"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte\".split(\"_\"),weekdaysShort:\"Dg._Dl._Dt._Dc._Dj._Dv._Ds.\".split(\"_\"),weekdaysMin:\"Dg_Dl_Dt_Dc_Dj_Dv_Ds\".split(\"_\"),months:\"Gener_Febrer_Mar\\xE7_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre\".split(\"_\"),monthsShort:\"Gen._Febr._Mar\\xE7_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.\".split(\"_\"),weekStart:1,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",LLL:\"D MMMM [de] YYYY [a les] H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a les] H:mm\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY, H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},relativeTime:{future:\"d'aqu\\xED %s\",past:\"fa %s\",s:\"uns segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},ordinal:function(e){return\"\"+e+(e===1||e===3?\"r\":e===2?\"n\":e===4?\"t\":\"\\xE8\")}};return a.default.locale(i,null,!0),i}))});var Re=v((ye,Kn)=>{(function(n,t){typeof ye==\"object\"&&typeof Kn<\"u\"?t(ye,k()):typeof define==\"function\"&&define.amd?define([\"exports\",\"dayjs\"],t):t((n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ku={},n.dayjs)})(ye,(function(n,t){\"use strict\";function a(d){return d&&typeof d==\"object\"&&\"default\"in d?d:{default:d}}var i=a(t),e={1:\"\\u0661\",2:\"\\u0662\",3:\"\\u0663\",4:\"\\u0664\",5:\"\\u0665\",6:\"\\u0666\",7:\"\\u0667\",8:\"\\u0668\",9:\"\\u0669\",0:\"\\u0660\"},r={\"\\u0661\":\"1\",\"\\u0662\":\"2\",\"\\u0663\":\"3\",\"\\u0664\":\"4\",\"\\u0665\":\"5\",\"\\u0666\":\"6\",\"\\u0667\":\"7\",\"\\u0668\":\"8\",\"\\u0669\":\"9\",\"\\u0660\":\"0\"},s=[\"\\u06A9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06CC \\u062F\\u0648\\u0648\\u06D5\\u0645\",\"\\u0634\\u0648\\u0628\\u0627\\u062A\",\"\\u0626\\u0627\\u062F\\u0627\\u0631\",\"\\u0646\\u06CC\\u0633\\u0627\\u0646\",\"\\u0626\\u0627\\u06CC\\u0627\\u0631\",\"\\u062D\\u0648\\u0632\\u06D5\\u06CC\\u0631\\u0627\\u0646\",\"\\u062A\\u06D5\\u0645\\u0645\\u0648\\u0648\\u0632\",\"\\u0626\\u0627\\u0628\",\"\\u0626\\u06D5\\u06CC\\u0644\\u0648\\u0648\\u0644\",\"\\u062A\\u0634\\u0631\\u06CC\\u0646\\u06CC \\u06CC\\u06D5\\u06A9\\u06D5\\u0645\",\"\\u062A\\u0634\\u0631\\u06CC\\u0646\\u06CC \\u062F\\u0648\\u0648\\u06D5\\u0645\",\"\\u06A9\\u0627\\u0646\\u0648\\u0648\\u0646\\u06CC \\u06CC\\u06D5\\u06A9\\u06D5\\u0645\"],_={name:\"ku\",months:s,monthsShort:s,weekdays:\"\\u06CC\\u06D5\\u06A9\\u0634\\u06D5\\u0645\\u0645\\u06D5_\\u062F\\u0648\\u0648\\u0634\\u06D5\\u0645\\u0645\\u06D5_\\u0633\\u06CE\\u0634\\u06D5\\u0645\\u0645\\u06D5_\\u0686\\u0648\\u0627\\u0631\\u0634\\u06D5\\u0645\\u0645\\u06D5_\\u067E\\u06CE\\u0646\\u062C\\u0634\\u06D5\\u0645\\u0645\\u06D5_\\u0647\\u06D5\\u06CC\\u0646\\u06CC_\\u0634\\u06D5\\u0645\\u0645\\u06D5\".split(\"_\"),weekdaysShort:\"\\u06CC\\u06D5\\u06A9\\u0634\\u06D5\\u0645_\\u062F\\u0648\\u0648\\u0634\\u06D5\\u0645_\\u0633\\u06CE\\u0634\\u06D5\\u0645_\\u0686\\u0648\\u0627\\u0631\\u0634\\u06D5\\u0645_\\u067E\\u06CE\\u0646\\u062C\\u0634\\u06D5\\u0645_\\u0647\\u06D5\\u06CC\\u0646\\u06CC_\\u0634\\u06D5\\u0645\\u0645\\u06D5\".split(\"_\"),weekStart:6,weekdaysMin:\"\\u06CC_\\u062F_\\u0633_\\u0686_\\u067E_\\u0647\\u0640_\\u0634\".split(\"_\"),preparse:function(d){return d.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(u){return r[u]})).replace(/،/g,\",\")},postformat:function(d){return d.replace(/\\d/g,(function(u){return e[u]})).replace(/,/g,\"\\u060C\")},ordinal:function(d){return d},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiem:function(d){return d<12?\"\\u067E.\\u0646\":\"\\u062F.\\u0646\"},relativeTime:{future:\"\\u0644\\u06D5 %s\",past:\"\\u0644\\u06D5\\u0645\\u06D5\\u0648\\u067E\\u06CE\\u0634 %s\",s:\"\\u0686\\u06D5\\u0646\\u062F \\u0686\\u0631\\u06A9\\u06D5\\u06CC\\u06D5\\u06A9\",m:\"\\u06CC\\u06D5\\u06A9 \\u062E\\u0648\\u0644\\u06D5\\u06A9\",mm:\"%d \\u062E\\u0648\\u0644\\u06D5\\u06A9\",h:\"\\u06CC\\u06D5\\u06A9 \\u06A9\\u0627\\u062A\\u0698\\u0645\\u06CE\\u0631\",hh:\"%d \\u06A9\\u0627\\u062A\\u0698\\u0645\\u06CE\\u0631\",d:\"\\u06CC\\u06D5\\u06A9 \\u0695\\u06C6\\u0698\",dd:\"%d \\u0695\\u06C6\\u0698\",M:\"\\u06CC\\u06D5\\u06A9 \\u0645\\u0627\\u0646\\u06AF\",MM:\"%d \\u0645\\u0627\\u0646\\u06AF\",y:\"\\u06CC\\u06D5\\u06A9 \\u0633\\u0627\\u06B5\",yy:\"%d \\u0633\\u0627\\u06B5\"}};i.default.locale(_,null,!0),n.default=_,n.englishToArabicNumbersMap=e,Object.defineProperty(n,\"__esModule\",{value:!0})}))});var Qn=v((Ze,Ve)=>{(function(n,t){typeof Ze==\"object\"&&typeof Ve<\"u\"?Ve.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_cs=t(n.dayjs)})(Ze,(function(n){\"use strict\";function t(s){return s&&typeof s==\"object\"&&\"default\"in s?s:{default:s}}var a=t(n);function i(s){return s>1&&s<5&&~~(s/10)!=1}function e(s,_,d,u){var o=s+\" \";switch(d){case\"s\":return _||u?\"p\\xE1r sekund\":\"p\\xE1r sekundami\";case\"m\":return _?\"minuta\":u?\"minutu\":\"minutou\";case\"mm\":return _||u?o+(i(s)?\"minuty\":\"minut\"):o+\"minutami\";case\"h\":return _?\"hodina\":u?\"hodinu\":\"hodinou\";case\"hh\":return _||u?o+(i(s)?\"hodiny\":\"hodin\"):o+\"hodinami\";case\"d\":return _||u?\"den\":\"dnem\";case\"dd\":return _||u?o+(i(s)?\"dny\":\"dn\\xED\"):o+\"dny\";case\"M\":return _||u?\"m\\u011Bs\\xEDc\":\"m\\u011Bs\\xEDcem\";case\"MM\":return _||u?o+(i(s)?\"m\\u011Bs\\xEDce\":\"m\\u011Bs\\xEDc\\u016F\"):o+\"m\\u011Bs\\xEDci\";case\"y\":return _||u?\"rok\":\"rokem\";case\"yy\":return _||u?o+(i(s)?\"roky\":\"let\"):o+\"lety\"}}var r={name:\"cs\",weekdays:\"ned\\u011Ble_pond\\u011Bl\\xED_\\xFAter\\xFD_st\\u0159eda_\\u010Dtvrtek_p\\xE1tek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_\\xFAt_st_\\u010Dt_p\\xE1_so\".split(\"_\"),weekdaysMin:\"ne_po_\\xFAt_st_\\u010Dt_p\\xE1_so\".split(\"_\"),months:\"leden_\\xFAnor_b\\u0159ezen_duben_kv\\u011Bten_\\u010Derven_\\u010Dervenec_srpen_z\\xE1\\u0159\\xED_\\u0159\\xEDjen_listopad_prosinec\".split(\"_\"),monthsShort:\"led_\\xFAno_b\\u0159e_dub_kv\\u011B_\\u010Dvn_\\u010Dvc_srp_z\\xE1\\u0159_\\u0159\\xEDj_lis_pro\".split(\"_\"),weekStart:1,yearStart:4,ordinal:function(s){return s+\".\"},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},relativeTime:{future:\"za %s\",past:\"p\\u0159ed %s\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return a.default.locale(r,null,!0),r}))});var Xn=v((Ke,Qe)=>{(function(n,t){typeof Ke==\"object\"&&typeof Qe<\"u\"?Qe.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_cy=t(n.dayjs)})(Ke,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"cy\",weekdays:\"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn\".split(\"_\"),months:\"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr\".split(\"_\"),weekStart:1,weekdaysShort:\"Sul_Llun_Maw_Mer_Iau_Gwe_Sad\".split(\"_\"),monthsShort:\"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag\".split(\"_\"),weekdaysMin:\"Su_Ll_Ma_Me_Ia_Gw_Sa\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},relativeTime:{future:\"mewn %s\",past:\"%s yn \\xF4l\",s:\"ychydig eiliadau\",m:\"munud\",mm:\"%d munud\",h:\"awr\",hh:\"%d awr\",d:\"diwrnod\",dd:\"%d diwrnod\",M:\"mis\",MM:\"%d mis\",y:\"blwyddyn\",yy:\"%d flynedd\"}};return a.default.locale(i,null,!0),i}))});var Bn=v((Xe,Be)=>{(function(n,t){typeof Xe==\"object\"&&typeof Be<\"u\"?Be.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_da=t(n.dayjs)})(Xe,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"da\",weekdays:\"s\\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\\xF8rdag\".split(\"_\"),weekdaysShort:\"s\\xF8n._man._tirs._ons._tors._fre._l\\xF8r.\".split(\"_\"),weekdaysMin:\"s\\xF8._ma._ti._on._to._fr._l\\xF8.\".split(\"_\"),months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.\".split(\"_\"),weekStart:1,yearStart:4,ordinal:function(e){return e+\".\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"f\\xE5 sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en m\\xE5ned\",MM:\"%d m\\xE5neder\",y:\"et \\xE5r\",yy:\"%d \\xE5r\"}};return a.default.locale(i,null,!0),i}))});var ei=v((et,tt)=>{(function(n,t){typeof et==\"object\"&&typeof tt<\"u\"?tt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_de=t(n.dayjs)})(et,(function(n){\"use strict\";function t(s){return s&&typeof s==\"object\"&&\"default\"in s?s:{default:s}}var a=t(n),i={s:\"ein paar Sekunden\",m:[\"eine Minute\",\"einer Minute\"],mm:\"%d Minuten\",h:[\"eine Stunde\",\"einer Stunde\"],hh:\"%d Stunden\",d:[\"ein Tag\",\"einem Tag\"],dd:[\"%d Tage\",\"%d Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[\"%d Monate\",\"%d Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[\"%d Jahre\",\"%d Jahren\"]};function e(s,_,d){var u=i[d];return Array.isArray(u)&&(u=u[_?0:1]),u.replace(\"%d\",s)}var r={name:\"de\",weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),months:\"Januar_Februar_M\\xE4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._M\\xE4rz_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),ordinal:function(s){return s+\".\"},weekStart:1,yearStart:4,formats:{LTS:\"HH:mm:ss\",LT:\"HH:mm\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e}};return a.default.locale(r,null,!0),r}))});var ti=v((nt,it)=>{(function(n,t){typeof nt==\"object\"&&typeof it<\"u\"?it.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_el=t(n.dayjs)})(nt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"el\",weekdays:\"\\u039A\\u03C5\\u03C1\\u03B9\\u03B1\\u03BA\\u03AE_\\u0394\\u03B5\\u03C5\\u03C4\\u03AD\\u03C1\\u03B1_\\u03A4\\u03C1\\u03AF\\u03C4\\u03B7_\\u03A4\\u03B5\\u03C4\\u03AC\\u03C1\\u03C4\\u03B7_\\u03A0\\u03AD\\u03BC\\u03C0\\u03C4\\u03B7_\\u03A0\\u03B1\\u03C1\\u03B1\\u03C3\\u03BA\\u03B5\\u03C5\\u03AE_\\u03A3\\u03AC\\u03B2\\u03B2\\u03B1\\u03C4\\u03BF\".split(\"_\"),weekdaysShort:\"\\u039A\\u03C5\\u03C1_\\u0394\\u03B5\\u03C5_\\u03A4\\u03C1\\u03B9_\\u03A4\\u03B5\\u03C4_\\u03A0\\u03B5\\u03BC_\\u03A0\\u03B1\\u03C1_\\u03A3\\u03B1\\u03B2\".split(\"_\"),weekdaysMin:\"\\u039A\\u03C5_\\u0394\\u03B5_\\u03A4\\u03C1_\\u03A4\\u03B5_\\u03A0\\u03B5_\\u03A0\\u03B1_\\u03A3\\u03B1\".split(\"_\"),months:\"\\u0399\\u03B1\\u03BD\\u03BF\\u03C5\\u03AC\\u03C1\\u03B9\\u03BF\\u03C2_\\u03A6\\u03B5\\u03B2\\u03C1\\u03BF\\u03C5\\u03AC\\u03C1\\u03B9\\u03BF\\u03C2_\\u039C\\u03AC\\u03C1\\u03C4\\u03B9\\u03BF\\u03C2_\\u0391\\u03C0\\u03C1\\u03AF\\u03BB\\u03B9\\u03BF\\u03C2_\\u039C\\u03AC\\u03B9\\u03BF\\u03C2_\\u0399\\u03BF\\u03CD\\u03BD\\u03B9\\u03BF\\u03C2_\\u0399\\u03BF\\u03CD\\u03BB\\u03B9\\u03BF\\u03C2_\\u0391\\u03CD\\u03B3\\u03BF\\u03C5\\u03C3\\u03C4\\u03BF\\u03C2_\\u03A3\\u03B5\\u03C0\\u03C4\\u03AD\\u03BC\\u03B2\\u03C1\\u03B9\\u03BF\\u03C2_\\u039F\\u03BA\\u03C4\\u03CE\\u03B2\\u03C1\\u03B9\\u03BF\\u03C2_\\u039D\\u03BF\\u03AD\\u03BC\\u03B2\\u03C1\\u03B9\\u03BF\\u03C2_\\u0394\\u03B5\\u03BA\\u03AD\\u03BC\\u03B2\\u03C1\\u03B9\\u03BF\\u03C2\".split(\"_\"),monthsShort:\"\\u0399\\u03B1\\u03BD_\\u03A6\\u03B5\\u03B2_\\u039C\\u03B1\\u03C1_\\u0391\\u03C0\\u03C1_\\u039C\\u03B1\\u03B9_\\u0399\\u03BF\\u03C5\\u03BD_\\u0399\\u03BF\\u03C5\\u03BB_\\u0391\\u03C5\\u03B3_\\u03A3\\u03B5\\u03C0\\u03C4_\\u039F\\u03BA\\u03C4_\\u039D\\u03BF\\u03B5_\\u0394\\u03B5\\u03BA\".split(\"_\"),ordinal:function(e){return e},weekStart:1,relativeTime:{future:\"\\u03C3\\u03B5 %s\",past:\"\\u03C0\\u03C1\\u03B9\\u03BD %s\",s:\"\\u03BC\\u03B5\\u03C1\\u03B9\\u03BA\\u03AC \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C0\\u03C4\\u03B1\",m:\"\\u03AD\\u03BD\\u03B1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC\",mm:\"%d \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC\",h:\"\\u03BC\\u03AF\\u03B1 \\u03CE\\u03C1\\u03B1\",hh:\"%d \\u03CE\\u03C1\\u03B5\\u03C2\",d:\"\\u03BC\\u03AF\\u03B1 \\u03BC\\u03AD\\u03C1\\u03B1\",dd:\"%d \\u03BC\\u03AD\\u03C1\\u03B5\\u03C2\",M:\"\\u03AD\\u03BD\\u03B1 \\u03BC\\u03AE\\u03BD\\u03B1\",MM:\"%d \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2\",y:\"\\u03AD\\u03BD\\u03B1 \\u03C7\\u03C1\\u03CC\\u03BD\\u03BF\",yy:\"%d \\u03C7\\u03C1\\u03CC\\u03BD\\u03B9\\u03B1\"},formats:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"}};return a.default.locale(i,null,!0),i}))});var ni=v((rt,at)=>{(function(n,t){typeof rt==\"object\"&&typeof at<\"u\"?at.exports=t():typeof define==\"function\"&&define.amd?define(t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_en=t()})(rt,(function(){\"use strict\";return{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(n){var t=[\"th\",\"st\",\"nd\",\"rd\"],a=n%100;return\"[\"+n+(t[(a-20)%10]||t[a]||t[0])+\"]\"}}}))});var ii=v((st,ut)=>{(function(n,t){typeof st==\"object\"&&typeof ut<\"u\"?ut.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_es=t(n.dayjs)})(st,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"es\",monthsShort:\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),weekdays:\"domingo_lunes_martes_mi\\xE9rcoles_jueves_viernes_s\\xE1bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mi\\xE9._jue._vie._s\\xE1b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_s\\xE1\".split(\"_\"),months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),weekStart:1,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un d\\xEDa\",dd:\"%d d\\xEDas\",M:\"un mes\",MM:\"%d meses\",y:\"un a\\xF1o\",yy:\"%d a\\xF1os\"},ordinal:function(e){return e+\"\\xBA\"}};return a.default.locale(i,null,!0),i}))});var ri=v((dt,ot)=>{(function(n,t){typeof dt==\"object\"&&typeof ot<\"u\"?ot.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_et=t(n.dayjs)})(dt,(function(n){\"use strict\";function t(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var a=t(n);function i(r,s,_,d){var u={s:[\"m\\xF5ne sekundi\",\"m\\xF5ni sekund\",\"paar sekundit\"],m:[\"\\xFChe minuti\",\"\\xFCks minut\"],mm:[\"%d minuti\",\"%d minutit\"],h:[\"\\xFChe tunni\",\"tund aega\",\"\\xFCks tund\"],hh:[\"%d tunni\",\"%d tundi\"],d:[\"\\xFChe p\\xE4eva\",\"\\xFCks p\\xE4ev\"],M:[\"kuu aja\",\"kuu aega\",\"\\xFCks kuu\"],MM:[\"%d kuu\",\"%d kuud\"],y:[\"\\xFChe aasta\",\"aasta\",\"\\xFCks aasta\"],yy:[\"%d aasta\",\"%d aastat\"]};return s?(u[_][2]?u[_][2]:u[_][1]).replace(\"%d\",r):(d?u[_][0]:u[_][1]).replace(\"%d\",r)}var e={name:\"et\",weekdays:\"p\\xFChap\\xE4ev_esmasp\\xE4ev_teisip\\xE4ev_kolmap\\xE4ev_neljap\\xE4ev_reede_laup\\xE4ev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),months:\"jaanuar_veebruar_m\\xE4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_m\\xE4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),ordinal:function(r){return r+\".\"},weekStart:1,relativeTime:{future:\"%s p\\xE4rast\",past:\"%s tagasi\",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:\"%d p\\xE4eva\",M:i,MM:i,y:i,yy:i},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"}};return a.default.locale(e,null,!0),e}))});var ai=v((_t,lt)=>{(function(n,t){typeof _t==\"object\"&&typeof lt<\"u\"?lt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_fa=t(n.dayjs)})(_t,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"fa\",weekdays:\"\\u06CC\\u06A9\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062F\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200C\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067E\\u0646\\u062C\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062C\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split(\"_\"),weekdaysShort:\"\\u06CC\\u06A9\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062F\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200C\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067E\\u0646\\u062C\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062C\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split(\"_\"),weekdaysMin:\"\\u06CC_\\u062F_\\u0633_\\u0686_\\u067E_\\u062C_\\u0634\".split(\"_\"),weekStart:6,months:\"\\u0698\\u0627\\u0646\\u0648\\u06CC\\u0647_\\u0641\\u0648\\u0631\\u06CC\\u0647_\\u0645\\u0627\\u0631\\u0633_\\u0622\\u0648\\u0631\\u06CC\\u0644_\\u0645\\u0647_\\u0698\\u0648\\u0626\\u0646_\\u0698\\u0648\\u0626\\u06CC\\u0647_\\u0627\\u0648\\u062A_\\u0633\\u067E\\u062A\\u0627\\u0645\\u0628\\u0631_\\u0627\\u06A9\\u062A\\u0628\\u0631_\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631_\\u062F\\u0633\\u0627\\u0645\\u0628\\u0631\".split(\"_\"),monthsShort:\"\\u0698\\u0627\\u0646\\u0648\\u06CC\\u0647_\\u0641\\u0648\\u0631\\u06CC\\u0647_\\u0645\\u0627\\u0631\\u0633_\\u0622\\u0648\\u0631\\u06CC\\u0644_\\u0645\\u0647_\\u0698\\u0648\\u0626\\u0646_\\u0698\\u0648\\u0626\\u06CC\\u0647_\\u0627\\u0648\\u062A_\\u0633\\u067E\\u062A\\u0627\\u0645\\u0628\\u0631_\\u0627\\u06A9\\u062A\\u0628\\u0631_\\u0646\\u0648\\u0627\\u0645\\u0628\\u0631_\\u062F\\u0633\\u0627\\u0645\\u0628\\u0631\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},relativeTime:{future:\"\\u062F\\u0631 %s\",past:\"%s \\u067E\\u06CC\\u0634\",s:\"\\u0686\\u0646\\u062F \\u062B\\u0627\\u0646\\u06CC\\u0647\",m:\"\\u06CC\\u06A9 \\u062F\\u0642\\u06CC\\u0642\\u0647\",mm:\"%d \\u062F\\u0642\\u06CC\\u0642\\u0647\",h:\"\\u06CC\\u06A9 \\u0633\\u0627\\u0639\\u062A\",hh:\"%d \\u0633\\u0627\\u0639\\u062A\",d:\"\\u06CC\\u06A9 \\u0631\\u0648\\u0632\",dd:\"%d \\u0631\\u0648\\u0632\",M:\"\\u06CC\\u06A9 \\u0645\\u0627\\u0647\",MM:\"%d \\u0645\\u0627\\u0647\",y:\"\\u06CC\\u06A9 \\u0633\\u0627\\u0644\",yy:\"%d \\u0633\\u0627\\u0644\"}};return a.default.locale(i,null,!0),i}))});var si=v((ft,mt)=>{(function(n,t){typeof ft==\"object\"&&typeof mt<\"u\"?mt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_fi=t(n.dayjs)})(ft,(function(n){\"use strict\";function t(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var a=t(n);function i(r,s,_,d){var u={s:\"muutama sekunti\",m:\"minuutti\",mm:\"%d minuuttia\",h:\"tunti\",hh:\"%d tuntia\",d:\"p\\xE4iv\\xE4\",dd:\"%d p\\xE4iv\\xE4\\xE4\",M:\"kuukausi\",MM:\"%d kuukautta\",y:\"vuosi\",yy:\"%d vuotta\",numbers:\"nolla_yksi_kaksi_kolme_nelj\\xE4_viisi_kuusi_seitsem\\xE4n_kahdeksan_yhdeks\\xE4n\".split(\"_\")},o={s:\"muutaman sekunnin\",m:\"minuutin\",mm:\"%d minuutin\",h:\"tunnin\",hh:\"%d tunnin\",d:\"p\\xE4iv\\xE4n\",dd:\"%d p\\xE4iv\\xE4n\",M:\"kuukauden\",MM:\"%d kuukauden\",y:\"vuoden\",yy:\"%d vuoden\",numbers:\"nollan_yhden_kahden_kolmen_nelj\\xE4n_viiden_kuuden_seitsem\\xE4n_kahdeksan_yhdeks\\xE4n\".split(\"_\")},f=d&&!s?o:u,l=f[_];return r<10?l.replace(\"%d\",f.numbers[r]):l.replace(\"%d\",r)}var e={name:\"fi\",weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\\xE4kuu_hein\\xE4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kes\\xE4_hein\\xE4_elo_syys_loka_marras_joulu\".split(\"_\"),ordinal:function(r){return r+\".\"},weekStart:1,yearStart:4,relativeTime:{future:\"%s p\\xE4\\xE4st\\xE4\",past:\"%s sitten\",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},formats:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM[ta] YYYY\",LLL:\"D. MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, D. MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"D. MMM YYYY\",lll:\"D. MMM YYYY, [klo] HH.mm\",llll:\"ddd, D. MMM YYYY, [klo] HH.mm\"}};return a.default.locale(e,null,!0),e}))});var ui=v((ct,ht)=>{(function(n,t){typeof ct==\"object\"&&typeof ht<\"u\"?ht.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_fr=t(n.dayjs)})(ct,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"fr\",weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),months:\"janvier_f\\xE9vrier_mars_avril_mai_juin_juillet_ao\\xFBt_septembre_octobre_novembre_d\\xE9cembre\".split(\"_\"),monthsShort:\"janv._f\\xE9vr._mars_avr._mai_juin_juil._ao\\xFBt_sept._oct._nov._d\\xE9c.\".split(\"_\"),weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},ordinal:function(e){return\"\"+e+(e===1?\"er\":\"\")}};return a.default.locale(i,null,!0),i}))});var di=v((Mt,Yt)=>{(function(n,t){typeof Mt==\"object\"&&typeof Yt<\"u\"?Yt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_he=t(n.dayjs)})(Mt,(function(n){\"use strict\";function t(s){return s&&typeof s==\"object\"&&\"default\"in s?s:{default:s}}var a=t(n),i={s:\"\\u05DE\\u05E1\\u05E4\\u05E8 \\u05E9\\u05E0\\u05D9\\u05D5\\u05EA\",ss:\"%d \\u05E9\\u05E0\\u05D9\\u05D5\\u05EA\",m:\"\\u05D3\\u05E7\\u05D4\",mm:\"%d \\u05D3\\u05E7\\u05D5\\u05EA\",h:\"\\u05E9\\u05E2\\u05D4\",hh:\"%d \\u05E9\\u05E2\\u05D5\\u05EA\",hh2:\"\\u05E9\\u05E2\\u05EA\\u05D9\\u05D9\\u05DD\",d:\"\\u05D9\\u05D5\\u05DD\",dd:\"%d \\u05D9\\u05DE\\u05D9\\u05DD\",dd2:\"\\u05D9\\u05D5\\u05DE\\u05D9\\u05D9\\u05DD\",M:\"\\u05D7\\u05D5\\u05D3\\u05E9\",MM:\"%d \\u05D7\\u05D5\\u05D3\\u05E9\\u05D9\\u05DD\",MM2:\"\\u05D7\\u05D5\\u05D3\\u05E9\\u05D9\\u05D9\\u05DD\",y:\"\\u05E9\\u05E0\\u05D4\",yy:\"%d \\u05E9\\u05E0\\u05D9\\u05DD\",yy2:\"\\u05E9\\u05E0\\u05EA\\u05D9\\u05D9\\u05DD\"};function e(s,_,d){return(i[d+(s===2?\"2\":\"\")]||i[d]).replace(\"%d\",s)}var r={name:\"he\",weekdays:\"\\u05E8\\u05D0\\u05E9\\u05D5\\u05DF_\\u05E9\\u05E0\\u05D9_\\u05E9\\u05DC\\u05D9\\u05E9\\u05D9_\\u05E8\\u05D1\\u05D9\\u05E2\\u05D9_\\u05D7\\u05DE\\u05D9\\u05E9\\u05D9_\\u05E9\\u05D9\\u05E9\\u05D9_\\u05E9\\u05D1\\u05EA\".split(\"_\"),weekdaysShort:\"\\u05D0\\u05F3_\\u05D1\\u05F3_\\u05D2\\u05F3_\\u05D3\\u05F3_\\u05D4\\u05F3_\\u05D5\\u05F3_\\u05E9\\u05F3\".split(\"_\"),weekdaysMin:\"\\u05D0\\u05F3_\\u05D1\\u05F3_\\u05D2\\u05F3_\\u05D3\\u05F3_\\u05D4\\u05F3_\\u05D5_\\u05E9\\u05F3\".split(\"_\"),months:\"\\u05D9\\u05E0\\u05D5\\u05D0\\u05E8_\\u05E4\\u05D1\\u05E8\\u05D5\\u05D0\\u05E8_\\u05DE\\u05E8\\u05E5_\\u05D0\\u05E4\\u05E8\\u05D9\\u05DC_\\u05DE\\u05D0\\u05D9_\\u05D9\\u05D5\\u05E0\\u05D9_\\u05D9\\u05D5\\u05DC\\u05D9_\\u05D0\\u05D5\\u05D2\\u05D5\\u05E1\\u05D8_\\u05E1\\u05E4\\u05D8\\u05DE\\u05D1\\u05E8_\\u05D0\\u05D5\\u05E7\\u05D8\\u05D5\\u05D1\\u05E8_\\u05E0\\u05D5\\u05D1\\u05DE\\u05D1\\u05E8_\\u05D3\\u05E6\\u05DE\\u05D1\\u05E8\".split(\"_\"),monthsShort:\"\\u05D9\\u05E0\\u05D5_\\u05E4\\u05D1\\u05E8_\\u05DE\\u05E8\\u05E5_\\u05D0\\u05E4\\u05E8_\\u05DE\\u05D0\\u05D9_\\u05D9\\u05D5\\u05E0_\\u05D9\\u05D5\\u05DC_\\u05D0\\u05D5\\u05D2_\\u05E1\\u05E4\\u05D8_\\u05D0\\u05D5\\u05E7_\\u05E0\\u05D5\\u05D1_\\u05D3\\u05E6\\u05DE\".split(\"_\"),relativeTime:{future:\"\\u05D1\\u05E2\\u05D5\\u05D3 %s\",past:\"\\u05DC\\u05E4\\u05E0\\u05D9 %s\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},ordinal:function(s){return s},format:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [\\u05D1]MMMM YYYY\",LLL:\"D [\\u05D1]MMMM YYYY HH:mm\",LLLL:\"dddd, D [\\u05D1]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [\\u05D1]MMMM YYYY\",LLL:\"D [\\u05D1]MMMM YYYY HH:mm\",LLLL:\"dddd, D [\\u05D1]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"}};return a.default.locale(r,null,!0),r}))});var oi=v((yt,pt)=>{(function(n,t){typeof yt==\"object\"&&typeof pt<\"u\"?pt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_hi=t(n.dayjs)})(yt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"hi\",weekdays:\"\\u0930\\u0935\\u093F\\u0935\\u093E\\u0930_\\u0938\\u094B\\u092E\\u0935\\u093E\\u0930_\\u092E\\u0902\\u0917\\u0932\\u0935\\u093E\\u0930_\\u092C\\u0941\\u0927\\u0935\\u093E\\u0930_\\u0917\\u0941\\u0930\\u0942\\u0935\\u093E\\u0930_\\u0936\\u0941\\u0915\\u094D\\u0930\\u0935\\u093E\\u0930_\\u0936\\u0928\\u093F\\u0935\\u093E\\u0930\".split(\"_\"),months:\"\\u091C\\u0928\\u0935\\u0930\\u0940_\\u092B\\u093C\\u0930\\u0935\\u0930\\u0940_\\u092E\\u093E\\u0930\\u094D\\u091A_\\u0905\\u092A\\u094D\\u0930\\u0948\\u0932_\\u092E\\u0908_\\u091C\\u0942\\u0928_\\u091C\\u0941\\u0932\\u093E\\u0908_\\u0905\\u0917\\u0938\\u094D\\u0924_\\u0938\\u093F\\u0924\\u092E\\u094D\\u092C\\u0930_\\u0905\\u0915\\u094D\\u091F\\u0942\\u092C\\u0930_\\u0928\\u0935\\u092E\\u094D\\u092C\\u0930_\\u0926\\u093F\\u0938\\u092E\\u094D\\u092C\\u0930\".split(\"_\"),weekdaysShort:\"\\u0930\\u0935\\u093F_\\u0938\\u094B\\u092E_\\u092E\\u0902\\u0917\\u0932_\\u092C\\u0941\\u0927_\\u0917\\u0941\\u0930\\u0942_\\u0936\\u0941\\u0915\\u094D\\u0930_\\u0936\\u0928\\u093F\".split(\"_\"),monthsShort:\"\\u091C\\u0928._\\u092B\\u093C\\u0930._\\u092E\\u093E\\u0930\\u094D\\u091A_\\u0905\\u092A\\u094D\\u0930\\u0948._\\u092E\\u0908_\\u091C\\u0942\\u0928_\\u091C\\u0941\\u0932._\\u0905\\u0917._\\u0938\\u093F\\u0924._\\u0905\\u0915\\u094D\\u091F\\u0942._\\u0928\\u0935._\\u0926\\u093F\\u0938.\".split(\"_\"),weekdaysMin:\"\\u0930_\\u0938\\u094B_\\u092E\\u0902_\\u092C\\u0941_\\u0917\\u0941_\\u0936\\u0941_\\u0936\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"A h:mm \\u092C\\u091C\\u0947\",LTS:\"A h:mm:ss \\u092C\\u091C\\u0947\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm \\u092C\\u091C\\u0947\",LLLL:\"dddd, D MMMM YYYY, A h:mm \\u092C\\u091C\\u0947\"},relativeTime:{future:\"%s \\u092E\\u0947\\u0902\",past:\"%s \\u092A\\u0939\\u0932\\u0947\",s:\"\\u0915\\u0941\\u091B \\u0939\\u0940 \\u0915\\u094D\\u0937\\u0923\",m:\"\\u090F\\u0915 \\u092E\\u093F\\u0928\\u091F\",mm:\"%d \\u092E\\u093F\\u0928\\u091F\",h:\"\\u090F\\u0915 \\u0918\\u0902\\u091F\\u093E\",hh:\"%d \\u0918\\u0902\\u091F\\u0947\",d:\"\\u090F\\u0915 \\u0926\\u093F\\u0928\",dd:\"%d \\u0926\\u093F\\u0928\",M:\"\\u090F\\u0915 \\u092E\\u0939\\u0940\\u0928\\u0947\",MM:\"%d \\u092E\\u0939\\u0940\\u0928\\u0947\",y:\"\\u090F\\u0915 \\u0935\\u0930\\u094D\\u0937\",yy:\"%d \\u0935\\u0930\\u094D\\u0937\"}};return a.default.locale(i,null,!0),i}))});var _i=v((Lt,Dt)=>{(function(n,t){typeof Lt==\"object\"&&typeof Dt<\"u\"?Dt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_hu=t(n.dayjs)})(Lt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"hu\",weekdays:\"vas\\xE1rnap_h\\xE9tf\\u0151_kedd_szerda_cs\\xFCt\\xF6rt\\xF6k_p\\xE9ntek_szombat\".split(\"_\"),weekdaysShort:\"vas_h\\xE9t_kedd_sze_cs\\xFCt_p\\xE9n_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),months:\"janu\\xE1r_febru\\xE1r_m\\xE1rcius_\\xE1prilis_m\\xE1jus_j\\xFAnius_j\\xFAlius_augusztus_szeptember_okt\\xF3ber_november_december\".split(\"_\"),monthsShort:\"jan_feb_m\\xE1rc_\\xE1pr_m\\xE1j_j\\xFAn_j\\xFAl_aug_szept_okt_nov_dec\".split(\"_\"),ordinal:function(e){return e+\".\"},weekStart:1,relativeTime:{future:\"%s m\\xFAlva\",past:\"%s\",s:function(e,r,s,_){return\"n\\xE9h\\xE1ny m\\xE1sodperc\"+(_||r?\"\":\"e\")},m:function(e,r,s,_){return\"egy perc\"+(_||r?\"\":\"e\")},mm:function(e,r,s,_){return e+\" perc\"+(_||r?\"\":\"e\")},h:function(e,r,s,_){return\"egy \"+(_||r?\"\\xF3ra\":\"\\xF3r\\xE1ja\")},hh:function(e,r,s,_){return e+\" \"+(_||r?\"\\xF3ra\":\"\\xF3r\\xE1ja\")},d:function(e,r,s,_){return\"egy \"+(_||r?\"nap\":\"napja\")},dd:function(e,r,s,_){return e+\" \"+(_||r?\"nap\":\"napja\")},M:function(e,r,s,_){return\"egy \"+(_||r?\"h\\xF3nap\":\"h\\xF3napja\")},MM:function(e,r,s,_){return e+\" \"+(_||r?\"h\\xF3nap\":\"h\\xF3napja\")},y:function(e,r,s,_){return\"egy \"+(_||r?\"\\xE9v\":\"\\xE9ve\")},yy:function(e,r,s,_){return e+\" \"+(_||r?\"\\xE9v\":\"\\xE9ve\")}},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"}};return a.default.locale(i,null,!0),i}))});var li=v((vt,gt)=>{(function(n,t){typeof vt==\"object\"&&typeof gt<\"u\"?gt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_hy_am=t(n.dayjs)})(vt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"hy-am\",weekdays:\"\\u056F\\u056B\\u0580\\u0561\\u056F\\u056B_\\u0565\\u0580\\u056F\\u0578\\u0582\\u0577\\u0561\\u0562\\u0569\\u056B_\\u0565\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056B_\\u0579\\u0578\\u0580\\u0565\\u0584\\u0577\\u0561\\u0562\\u0569\\u056B_\\u0570\\u056B\\u0576\\u0563\\u0577\\u0561\\u0562\\u0569\\u056B_\\u0578\\u0582\\u0580\\u0562\\u0561\\u0569_\\u0577\\u0561\\u0562\\u0561\\u0569\".split(\"_\"),months:\"\\u0570\\u0578\\u0582\\u0576\\u057E\\u0561\\u0580\\u056B_\\u0583\\u0565\\u057F\\u0580\\u057E\\u0561\\u0580\\u056B_\\u0574\\u0561\\u0580\\u057F\\u056B_\\u0561\\u057A\\u0580\\u056B\\u056C\\u056B_\\u0574\\u0561\\u0575\\u056B\\u057D\\u056B_\\u0570\\u0578\\u0582\\u0576\\u056B\\u057D\\u056B_\\u0570\\u0578\\u0582\\u056C\\u056B\\u057D\\u056B_\\u0585\\u0563\\u0578\\u057D\\u057F\\u0578\\u057D\\u056B_\\u057D\\u0565\\u057A\\u057F\\u0565\\u0574\\u0562\\u0565\\u0580\\u056B_\\u0570\\u0578\\u056F\\u057F\\u0565\\u0574\\u0562\\u0565\\u0580\\u056B_\\u0576\\u0578\\u0575\\u0565\\u0574\\u0562\\u0565\\u0580\\u056B_\\u0564\\u0565\\u056F\\u057F\\u0565\\u0574\\u0562\\u0565\\u0580\\u056B\".split(\"_\"),weekStart:1,weekdaysShort:\"\\u056F\\u0580\\u056F_\\u0565\\u0580\\u056F_\\u0565\\u0580\\u0584_\\u0579\\u0580\\u0584_\\u0570\\u0576\\u0563_\\u0578\\u0582\\u0580\\u0562_\\u0577\\u0562\\u0569\".split(\"_\"),monthsShort:\"\\u0570\\u0576\\u057E_\\u0583\\u057F\\u0580_\\u0574\\u0580\\u057F_\\u0561\\u057A\\u0580_\\u0574\\u0575\\u057D_\\u0570\\u0576\\u057D_\\u0570\\u056C\\u057D_\\u0585\\u0563\\u057D_\\u057D\\u057A\\u057F_\\u0570\\u056F\\u057F_\\u0576\\u0574\\u0562_\\u0564\\u056F\\u057F\".split(\"_\"),weekdaysMin:\"\\u056F\\u0580\\u056F_\\u0565\\u0580\\u056F_\\u0565\\u0580\\u0584_\\u0579\\u0580\\u0584_\\u0570\\u0576\\u0563_\\u0578\\u0582\\u0580\\u0562_\\u0577\\u0562\\u0569\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0569.\",LLL:\"D MMMM YYYY \\u0569., HH:mm\",LLLL:\"dddd, D MMMM YYYY \\u0569., HH:mm\"},relativeTime:{future:\"%s \\u0570\\u0565\\u057F\\u0578\",past:\"%s \\u0561\\u057C\\u0561\\u057B\",s:\"\\u0574\\u056B \\u0584\\u0561\\u0576\\u056B \\u057E\\u0561\\u0575\\u0580\\u056F\\u0575\\u0561\\u0576\",m:\"\\u0580\\u0578\\u057A\\u0565\",mm:\"%d \\u0580\\u0578\\u057A\\u0565\",h:\"\\u056A\\u0561\\u0574\",hh:\"%d \\u056A\\u0561\\u0574\",d:\"\\u0585\\u0580\",dd:\"%d \\u0585\\u0580\",M:\"\\u0561\\u0574\\u056B\\u057D\",MM:\"%d \\u0561\\u0574\\u056B\\u057D\",y:\"\\u057F\\u0561\\u0580\\u056B\",yy:\"%d \\u057F\\u0561\\u0580\\u056B\"}};return a.default.locale(i,null,!0),i}))});var fi=v((bt,St)=>{(function(n,t){typeof bt==\"object\"&&typeof St<\"u\"?St.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_id=t(n.dayjs)})(bt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"id\",weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),weekStart:1,formats:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},ordinal:function(e){return e+\".\"}};return a.default.locale(i,null,!0),i}))});var mi=v((kt,Ht)=>{(function(n,t){typeof kt==\"object\"&&typeof Ht<\"u\"?Ht.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_it=t(n.dayjs)})(kt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"it\",weekdays:\"domenica_luned\\xEC_marted\\xEC_mercoled\\xEC_gioved\\xEC_venerd\\xEC_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),weekStart:1,monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},relativeTime:{future:\"tra %s\",past:\"%s fa\",s:\"qualche secondo\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},ordinal:function(e){return e+\"\\xBA\"}};return a.default.locale(i,null,!0),i}))});var ci=v((jt,Tt)=>{(function(n,t){typeof jt==\"object\"&&typeof Tt<\"u\"?Tt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ja=t(n.dayjs)})(jt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"ja\",weekdays:\"\\u65E5\\u66DC\\u65E5_\\u6708\\u66DC\\u65E5_\\u706B\\u66DC\\u65E5_\\u6C34\\u66DC\\u65E5_\\u6728\\u66DC\\u65E5_\\u91D1\\u66DC\\u65E5_\\u571F\\u66DC\\u65E5\".split(\"_\"),weekdaysShort:\"\\u65E5_\\u6708_\\u706B_\\u6C34_\\u6728_\\u91D1_\\u571F\".split(\"_\"),weekdaysMin:\"\\u65E5_\\u6708_\\u706B_\\u6C34_\\u6728_\\u91D1_\\u571F\".split(\"_\"),months:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),ordinal:function(e){return e+\"\\u65E5\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5E74M\\u6708D\\u65E5\",LLL:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",LLLL:\"YYYY\\u5E74M\\u6708D\\u65E5 dddd HH:mm\",l:\"YYYY/MM/DD\",ll:\"YYYY\\u5E74M\\u6708D\\u65E5\",lll:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",llll:\"YYYY\\u5E74M\\u6708D\\u65E5(ddd) HH:mm\"},meridiem:function(e){return e<12?\"\\u5348\\u524D\":\"\\u5348\\u5F8C\"},relativeTime:{future:\"%s\\u5F8C\",past:\"%s\\u524D\",s:\"\\u6570\\u79D2\",m:\"1\\u5206\",mm:\"%d\\u5206\",h:\"1\\u6642\\u9593\",hh:\"%d\\u6642\\u9593\",d:\"1\\u65E5\",dd:\"%d\\u65E5\",M:\"1\\u30F6\\u6708\",MM:\"%d\\u30F6\\u6708\",y:\"1\\u5E74\",yy:\"%d\\u5E74\"}};return a.default.locale(i,null,!0),i}))});var hi=v((wt,$t)=>{(function(n,t){typeof wt==\"object\"&&typeof $t<\"u\"?$t.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ka=t(n.dayjs)})(wt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"ka\",weekdays:\"\\u10D9\\u10D5\\u10D8\\u10E0\\u10D0_\\u10DD\\u10E0\\u10E8\\u10D0\\u10D1\\u10D0\\u10D7\\u10D8_\\u10E1\\u10D0\\u10DB\\u10E8\\u10D0\\u10D1\\u10D0\\u10D7\\u10D8_\\u10DD\\u10D7\\u10EE\\u10E8\\u10D0\\u10D1\\u10D0\\u10D7\\u10D8_\\u10EE\\u10E3\\u10D7\\u10E8\\u10D0\\u10D1\\u10D0\\u10D7\\u10D8_\\u10DE\\u10D0\\u10E0\\u10D0\\u10E1\\u10D9\\u10D4\\u10D5\\u10D8_\\u10E8\\u10D0\\u10D1\\u10D0\\u10D7\\u10D8\".split(\"_\"),weekdaysShort:\"\\u10D9\\u10D5\\u10D8_\\u10DD\\u10E0\\u10E8_\\u10E1\\u10D0\\u10DB_\\u10DD\\u10D7\\u10EE_\\u10EE\\u10E3\\u10D7_\\u10DE\\u10D0\\u10E0_\\u10E8\\u10D0\\u10D1\".split(\"_\"),weekdaysMin:\"\\u10D9\\u10D5_\\u10DD\\u10E0_\\u10E1\\u10D0_\\u10DD\\u10D7_\\u10EE\\u10E3_\\u10DE\\u10D0_\\u10E8\\u10D0\".split(\"_\"),months:\"\\u10D8\\u10D0\\u10DC\\u10D5\\u10D0\\u10E0\\u10D8_\\u10D7\\u10D4\\u10D1\\u10D4\\u10E0\\u10D5\\u10D0\\u10DA\\u10D8_\\u10DB\\u10D0\\u10E0\\u10E2\\u10D8_\\u10D0\\u10DE\\u10E0\\u10D8\\u10DA\\u10D8_\\u10DB\\u10D0\\u10D8\\u10E1\\u10D8_\\u10D8\\u10D5\\u10DC\\u10D8\\u10E1\\u10D8_\\u10D8\\u10D5\\u10DA\\u10D8\\u10E1\\u10D8_\\u10D0\\u10D2\\u10D5\\u10D8\\u10E1\\u10E2\\u10DD_\\u10E1\\u10D4\\u10E5\\u10E2\\u10D4\\u10DB\\u10D1\\u10D4\\u10E0\\u10D8_\\u10DD\\u10E5\\u10E2\\u10DD\\u10DB\\u10D1\\u10D4\\u10E0\\u10D8_\\u10DC\\u10DD\\u10D4\\u10DB\\u10D1\\u10D4\\u10E0\\u10D8_\\u10D3\\u10D4\\u10D9\\u10D4\\u10DB\\u10D1\\u10D4\\u10E0\\u10D8\".split(\"_\"),monthsShort:\"\\u10D8\\u10D0\\u10DC_\\u10D7\\u10D4\\u10D1_\\u10DB\\u10D0\\u10E0_\\u10D0\\u10DE\\u10E0_\\u10DB\\u10D0\\u10D8_\\u10D8\\u10D5\\u10DC_\\u10D8\\u10D5\\u10DA_\\u10D0\\u10D2\\u10D5_\\u10E1\\u10D4\\u10E5_\\u10DD\\u10E5\\u10E2_\\u10DC\\u10DD\\u10D4_\\u10D3\\u10D4\\u10D9\".split(\"_\"),weekStart:1,formats:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},relativeTime:{future:\"%s \\u10E8\\u10D4\\u10DB\\u10D3\\u10D4\\u10D2\",past:\"%s \\u10EC\\u10D8\\u10DC\",s:\"\\u10EC\\u10D0\\u10DB\\u10D8\",m:\"\\u10EC\\u10E3\\u10D7\\u10D8\",mm:\"%d \\u10EC\\u10E3\\u10D7\\u10D8\",h:\"\\u10E1\\u10D0\\u10D0\\u10D7\\u10D8\",hh:\"%d \\u10E1\\u10D0\\u10D0\\u10D7\\u10D8\\u10E1\",d:\"\\u10D3\\u10E6\\u10D4\\u10E1\",dd:\"%d \\u10D3\\u10E6\\u10D8\\u10E1 \\u10D2\\u10D0\\u10DC\\u10DB\\u10D0\\u10D5\\u10DA\\u10DD\\u10D1\\u10D0\\u10E8\\u10D8\",M:\"\\u10D7\\u10D5\\u10D8\\u10E1\",MM:\"%d \\u10D7\\u10D5\\u10D8\\u10E1\",y:\"\\u10EC\\u10D4\\u10DA\\u10D8\",yy:\"%d \\u10EC\\u10DA\\u10D8\\u10E1\"},ordinal:function(e){return e}};return a.default.locale(i,null,!0),i}))});var Mi=v((Ct,Ot)=>{(function(n,t){typeof Ct==\"object\"&&typeof Ot<\"u\"?Ot.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_km=t(n.dayjs)})(Ct,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"km\",weekdays:\"\\u17A2\\u17B6\\u1791\\u17B7\\u178F\\u17D2\\u1799_\\u1785\\u17D0\\u1793\\u17D2\\u1791_\\u17A2\\u1784\\u17D2\\u1782\\u17B6\\u179A_\\u1796\\u17BB\\u1792_\\u1796\\u17D2\\u179A\\u17A0\\u179F\\u17D2\\u1794\\u178F\\u17B7\\u17CD_\\u179F\\u17BB\\u1780\\u17D2\\u179A_\\u179F\\u17C5\\u179A\\u17CD\".split(\"_\"),months:\"\\u1798\\u1780\\u179A\\u17B6_\\u1780\\u17BB\\u1798\\u17D2\\u1797\\u17C8_\\u1798\\u17B8\\u1793\\u17B6_\\u1798\\u17C1\\u179F\\u17B6_\\u17A7\\u179F\\u1797\\u17B6_\\u1798\\u17B7\\u1790\\u17BB\\u1793\\u17B6_\\u1780\\u1780\\u17D2\\u1780\\u178A\\u17B6_\\u179F\\u17B8\\u17A0\\u17B6_\\u1780\\u1789\\u17D2\\u1789\\u17B6_\\u178F\\u17BB\\u179B\\u17B6_\\u179C\\u17B7\\u1785\\u17D2\\u1786\\u17B7\\u1780\\u17B6_\\u1792\\u17D2\\u1793\\u17BC\".split(\"_\"),weekStart:1,weekdaysShort:\"\\u17A2\\u17B6_\\u1785_\\u17A2_\\u1796_\\u1796\\u17D2\\u179A_\\u179F\\u17BB_\\u179F\".split(\"_\"),monthsShort:\"\\u1798\\u1780\\u179A\\u17B6_\\u1780\\u17BB\\u1798\\u17D2\\u1797\\u17C8_\\u1798\\u17B8\\u1793\\u17B6_\\u1798\\u17C1\\u179F\\u17B6_\\u17A7\\u179F\\u1797\\u17B6_\\u1798\\u17B7\\u1790\\u17BB\\u1793\\u17B6_\\u1780\\u1780\\u17D2\\u1780\\u178A\\u17B6_\\u179F\\u17B8\\u17A0\\u17B6_\\u1780\\u1789\\u17D2\\u1789\\u17B6_\\u178F\\u17BB\\u179B\\u17B6_\\u179C\\u17B7\\u1785\\u17D2\\u1786\\u17B7\\u1780\\u17B6_\\u1792\\u17D2\\u1793\\u17BC\".split(\"_\"),weekdaysMin:\"\\u17A2\\u17B6_\\u1785_\\u17A2_\\u1796_\\u1796\\u17D2\\u179A_\\u179F\\u17BB_\\u179F\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},relativeTime:{future:\"%s\\u1791\\u17C0\\u178F\",past:\"%s\\u1798\\u17BB\\u1793\",s:\"\\u1794\\u17C9\\u17BB\\u1793\\u17D2\\u1798\\u17B6\\u1793\\u179C\\u17B7\\u1793\\u17B6\\u1791\\u17B8\",m:\"\\u1798\\u17BD\\u1799\\u1793\\u17B6\\u1791\\u17B8\",mm:\"%d \\u1793\\u17B6\\u1791\\u17B8\",h:\"\\u1798\\u17BD\\u1799\\u1798\\u17C9\\u17C4\\u1784\",hh:\"%d \\u1798\\u17C9\\u17C4\\u1784\",d:\"\\u1798\\u17BD\\u1799\\u1790\\u17D2\\u1784\\u17C3\",dd:\"%d \\u1790\\u17D2\\u1784\\u17C3\",M:\"\\u1798\\u17BD\\u1799\\u1781\\u17C2\",MM:\"%d \\u1781\\u17C2\",y:\"\\u1798\\u17BD\\u1799\\u1786\\u17D2\\u1793\\u17B6\\u17C6\",yy:\"%d \\u1786\\u17D2\\u1793\\u17B6\\u17C6\"}};return a.default.locale(i,null,!0),i}))});var Yi=v((zt,At)=>{(function(n,t){typeof zt==\"object\"&&typeof At<\"u\"?At.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_lt=t(n.dayjs)})(zt,(function(n){\"use strict\";function t(d){return d&&typeof d==\"object\"&&\"default\"in d?d:{default:d}}var a=t(n),i=\"sausio_vasario_kovo_baland\\u017Eio_gegu\\u017E\\u0117s_bir\\u017Eelio_liepos_rugpj\\u016B\\u010Dio_rugs\\u0117jo_spalio_lapkri\\u010Dio_gruod\\u017Eio\".split(\"_\"),e=\"sausis_vasaris_kovas_balandis_gegu\\u017E\\u0117_bir\\u017Eelis_liepa_rugpj\\u016Btis_rugs\\u0117jis_spalis_lapkritis_gruodis\".split(\"_\"),r=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,s=function(d,u){return r.test(u)?i[d.month()]:e[d.month()]};s.s=e,s.f=i;var _={name:\"lt\",weekdays:\"sekmadienis_pirmadienis_antradienis_tre\\u010Diadienis_ketvirtadienis_penktadienis_\\u0161e\\u0161tadienis\".split(\"_\"),weekdaysShort:\"sek_pir_ant_tre_ket_pen_\\u0161e\\u0161\".split(\"_\"),weekdaysMin:\"s_p_a_t_k_pn_\\u0161\".split(\"_\"),months:s,monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),ordinal:function(d){return d+\".\"},weekStart:1,relativeTime:{future:\"u\\u017E %s\",past:\"prie\\u0161 %s\",s:\"kelias sekundes\",m:\"minut\\u0119\",mm:\"%d minutes\",h:\"valand\\u0105\",hh:\"%d valandas\",d:\"dien\\u0105\",dd:\"%d dienas\",M:\"m\\u0117nes\\u012F\",MM:\"%d m\\u0117nesius\",y:\"metus\",yy:\"%d metus\"},format:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"}};return a.default.locale(_,null,!0),_}))});var yi=v((qt,It)=>{(function(n,t){typeof qt==\"object\"&&typeof It<\"u\"?It.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_lv=t(n.dayjs)})(qt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"lv\",weekdays:\"sv\\u0113tdiena_pirmdiena_otrdiena_tre\\u0161diena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),months:\"janv\\u0101ris_febru\\u0101ris_marts_apr\\u012Blis_maijs_j\\u016Bnijs_j\\u016Blijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),weekStart:1,weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_j\\u016Bn_j\\u016Bl_aug_sep_okt_nov_dec\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},relativeTime:{future:\"p\\u0113c %s\",past:\"pirms %s\",s:\"da\\u017E\\u0101m sekund\\u0113m\",m:\"min\\u016Btes\",mm:\"%d min\\u016Bt\\u0113m\",h:\"stundas\",hh:\"%d stund\\u0101m\",d:\"dienas\",dd:\"%d dien\\u0101m\",M:\"m\\u0113ne\\u0161a\",MM:\"%d m\\u0113ne\\u0161iem\",y:\"gada\",yy:\"%d gadiem\"}};return a.default.locale(i,null,!0),i}))});var pi=v((xt,Nt)=>{(function(n,t){typeof xt==\"object\"&&typeof Nt<\"u\"?Nt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ms=t(n.dayjs)})(xt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"ms\",weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekStart:1,formats:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH.mm\",LLLL:\"dddd, D MMMM YYYY HH.mm\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},ordinal:function(e){return e+\".\"}};return a.default.locale(i,null,!0),i}))});var Li=v((Ft,Et)=>{(function(n,t){typeof Ft==\"object\"&&typeof Et<\"u\"?Et.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_my=t(n.dayjs)})(Ft,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"my\",weekdays:\"\\u1010\\u1014\\u1004\\u103A\\u1039\\u1002\\u1014\\u103D\\u1031_\\u1010\\u1014\\u1004\\u103A\\u1039\\u101C\\u102C_\\u1021\\u1004\\u103A\\u1039\\u1002\\u102B_\\u1017\\u102F\\u1012\\u1039\\u1013\\u101F\\u1030\\u1038_\\u1000\\u103C\\u102C\\u101E\\u1015\\u1010\\u1031\\u1038_\\u101E\\u1031\\u102C\\u1000\\u103C\\u102C_\\u1005\\u1014\\u1031\".split(\"_\"),months:\"\\u1007\\u1014\\u103A\\u1014\\u101D\\u102B\\u101B\\u102E_\\u1016\\u1031\\u1016\\u1031\\u102C\\u103A\\u101D\\u102B\\u101B\\u102E_\\u1019\\u1010\\u103A_\\u1027\\u1015\\u103C\\u102E_\\u1019\\u1031_\\u1007\\u103D\\u1014\\u103A_\\u1007\\u1030\\u101C\\u102D\\u102F\\u1004\\u103A_\\u101E\\u103C\\u1002\\u102F\\u1010\\u103A_\\u1005\\u1000\\u103A\\u1010\\u1004\\u103A\\u1018\\u102C_\\u1021\\u1031\\u102C\\u1000\\u103A\\u1010\\u102D\\u102F\\u1018\\u102C_\\u1014\\u102D\\u102F\\u101D\\u1004\\u103A\\u1018\\u102C_\\u1012\\u102E\\u1007\\u1004\\u103A\\u1018\\u102C\".split(\"_\"),weekStart:1,weekdaysShort:\"\\u1014\\u103D\\u1031_\\u101C\\u102C_\\u1002\\u102B_\\u101F\\u1030\\u1038_\\u1000\\u103C\\u102C_\\u101E\\u1031\\u102C_\\u1014\\u1031\".split(\"_\"),monthsShort:\"\\u1007\\u1014\\u103A_\\u1016\\u1031_\\u1019\\u1010\\u103A_\\u1015\\u103C\\u102E_\\u1019\\u1031_\\u1007\\u103D\\u1014\\u103A_\\u101C\\u102D\\u102F\\u1004\\u103A_\\u101E\\u103C_\\u1005\\u1000\\u103A_\\u1021\\u1031\\u102C\\u1000\\u103A_\\u1014\\u102D\\u102F_\\u1012\\u102E\".split(\"_\"),weekdaysMin:\"\\u1014\\u103D\\u1031_\\u101C\\u102C_\\u1002\\u102B_\\u101F\\u1030\\u1038_\\u1000\\u103C\\u102C_\\u101E\\u1031\\u102C_\\u1014\\u1031\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},relativeTime:{future:\"\\u101C\\u102C\\u1019\\u100A\\u103A\\u1037 %s \\u1019\\u103E\\u102C\",past:\"\\u101C\\u103D\\u1014\\u103A\\u1001\\u1032\\u1037\\u101E\\u1031\\u102C %s \\u1000\",s:\"\\u1005\\u1000\\u1039\\u1000\\u1014\\u103A.\\u1021\\u1014\\u100A\\u103A\\u1038\\u1004\\u101A\\u103A\",m:\"\\u1010\\u1005\\u103A\\u1019\\u102D\\u1014\\u1005\\u103A\",mm:\"%d \\u1019\\u102D\\u1014\\u1005\\u103A\",h:\"\\u1010\\u1005\\u103A\\u1014\\u102C\\u101B\\u102E\",hh:\"%d \\u1014\\u102C\\u101B\\u102E\",d:\"\\u1010\\u1005\\u103A\\u101B\\u1000\\u103A\",dd:\"%d \\u101B\\u1000\\u103A\",M:\"\\u1010\\u1005\\u103A\\u101C\",MM:\"%d \\u101C\",y:\"\\u1010\\u1005\\u103A\\u1014\\u103E\\u1005\\u103A\",yy:\"%d \\u1014\\u103E\\u1005\\u103A\"}};return a.default.locale(i,null,!0),i}))});var Di=v((Jt,Ut)=>{(function(n,t){typeof Jt==\"object\"&&typeof Ut<\"u\"?Ut.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_nb=t(n.dayjs)})(Jt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"nb\",weekdays:\"s\\xF8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\\xF8rdag\".split(\"_\"),weekdaysShort:\"s\\xF8._ma._ti._on._to._fr._l\\xF8.\".split(\"_\"),weekdaysMin:\"s\\xF8_ma_ti_on_to_fr_l\\xF8\".split(\"_\"),months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),ordinal:function(e){return e+\".\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",M:\"en m\\xE5ned\",MM:\"%d m\\xE5neder\",y:\"ett \\xE5r\",yy:\"%d \\xE5r\"}};return a.default.locale(i,null,!0),i}))});var vi=v((Wt,Pt)=>{(function(n,t){typeof Wt==\"object\"&&typeof Pt<\"u\"?Pt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_nl=t(n.dayjs)})(Wt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"nl\",weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),ordinal:function(e){return\"[\"+e+(e===1||e===8||e>=20?\"ste\":\"de\")+\"]\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",m:\"een minuut\",mm:\"%d minuten\",h:\"een uur\",hh:\"%d uur\",d:\"een dag\",dd:\"%d dagen\",M:\"een maand\",MM:\"%d maanden\",y:\"een jaar\",yy:\"%d jaar\"}};return a.default.locale(i,null,!0),i}))});var gi=v((Gt,Rt)=>{(function(n,t){typeof Gt==\"object\"&&typeof Rt<\"u\"?Rt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_pl=t(n.dayjs)})(Gt,(function(n){\"use strict\";function t(o){return o&&typeof o==\"object\"&&\"default\"in o?o:{default:o}}var a=t(n);function i(o){return o%10<5&&o%10>1&&~~(o/10)%10!=1}function e(o,f,l){var m=o+\" \";switch(l){case\"m\":return f?\"minuta\":\"minut\\u0119\";case\"mm\":return m+(i(o)?\"minuty\":\"minut\");case\"h\":return f?\"godzina\":\"godzin\\u0119\";case\"hh\":return m+(i(o)?\"godziny\":\"godzin\");case\"MM\":return m+(i(o)?\"miesi\\u0105ce\":\"miesi\\u0119cy\");case\"yy\":return m+(i(o)?\"lata\":\"lat\")}}var r=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\\u015Bnia_pa\\u017Adziernika_listopada_grudnia\".split(\"_\"),s=\"stycze\\u0144_luty_marzec_kwiecie\\u0144_maj_czerwiec_lipiec_sierpie\\u0144_wrzesie\\u0144_pa\\u017Adziernik_listopad_grudzie\\u0144\".split(\"_\"),_=/D MMMM/,d=function(o,f){return _.test(f)?r[o.month()]:s[o.month()]};d.s=s,d.f=r;var u={name:\"pl\",weekdays:\"niedziela_poniedzia\\u0142ek_wtorek_\\u015Broda_czwartek_pi\\u0105tek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_\\u015Br_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_\\u015Ar_Cz_Pt_So\".split(\"_\"),months:d,monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\\u017A_lis_gru\".split(\"_\"),ordinal:function(o){return o+\".\"},weekStart:1,yearStart:4,relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",m:e,mm:e,h:e,hh:e,d:\"1 dzie\\u0144\",dd:\"%d dni\",M:\"miesi\\u0105c\",MM:e,y:\"rok\",yy:e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"}};return a.default.locale(u,null,!0),u}))});var bi=v((Zt,Vt)=>{(function(n,t){typeof Zt==\"object\"&&typeof Vt<\"u\"?Vt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_pt=t(n.dayjs)})(Zt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"pt\",weekdays:\"domingo_segunda-feira_ter\\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\\xE1bado\".split(\"_\"),weekdaysShort:\"dom_seg_ter_qua_qui_sex_sab\".split(\"_\"),weekdaysMin:\"Do_2\\xAA_3\\xAA_4\\xAA_5\\xAA_6\\xAA_Sa\".split(\"_\"),months:\"janeiro_fevereiro_mar\\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),ordinal:function(e){return e+\"\\xBA\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [\\xE0s] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [\\xE0s] HH:mm\"},relativeTime:{future:\"em %s\",past:\"h\\xE1 %s\",s:\"alguns segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um m\\xEAs\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"}};return a.default.locale(i,null,!0),i}))});var Si=v((Kt,Qt)=>{(function(n,t){typeof Kt==\"object\"&&typeof Qt<\"u\"?Qt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_pt_br=t(n.dayjs)})(Kt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"pt-br\",weekdays:\"domingo_segunda-feira_ter\\xE7a-feira_quarta-feira_quinta-feira_sexta-feira_s\\xE1bado\".split(\"_\"),weekdaysShort:\"dom_seg_ter_qua_qui_sex_s\\xE1b\".split(\"_\"),weekdaysMin:\"Do_2\\xAA_3\\xAA_4\\xAA_5\\xAA_6\\xAA_S\\xE1\".split(\"_\"),months:\"janeiro_fevereiro_mar\\xE7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),ordinal:function(e){return e+\"\\xBA\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [\\xE0s] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [\\xE0s] HH:mm\"},relativeTime:{future:\"em %s\",past:\"h\\xE1 %s\",s:\"poucos segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um m\\xEAs\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"}};return a.default.locale(i,null,!0),i}))});var ki=v((Xt,Bt)=>{(function(n,t){typeof Xt==\"object\"&&typeof Bt<\"u\"?Bt.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ro=t(n.dayjs)})(Xt,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"ro\",weekdays:\"Duminic\\u0103_Luni_Mar\\u021Bi_Miercuri_Joi_Vineri_S\\xE2mb\\u0103t\\u0103\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_S\\xE2m\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_S\\xE2\".split(\"_\"),months:\"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie\".split(\"_\"),monthsShort:\"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.\".split(\"_\"),weekStart:1,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},relativeTime:{future:\"peste %s\",past:\"acum %s\",s:\"c\\xE2teva secunde\",m:\"un minut\",mm:\"%d minute\",h:\"o or\\u0103\",hh:\"%d ore\",d:\"o zi\",dd:\"%d zile\",M:\"o lun\\u0103\",MM:\"%d luni\",y:\"un an\",yy:\"%d ani\"},ordinal:function(e){return e}};return a.default.locale(i,null,!0),i}))});var Hi=v((en,tn)=>{(function(n,t){typeof en==\"object\"&&typeof tn<\"u\"?tn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ru=t(n.dayjs)})(en,(function(n){\"use strict\";function t(l){return l&&typeof l==\"object\"&&\"default\"in l?l:{default:l}}var a=t(n),i=\"\\u044F\\u043D\\u0432\\u0430\\u0440\\u044F_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043B\\u044F_\\u043C\\u0430\\u0440\\u0442\\u0430_\\u0430\\u043F\\u0440\\u0435\\u043B\\u044F_\\u043C\\u0430\\u044F_\\u0438\\u044E\\u043D\\u044F_\\u0438\\u044E\\u043B\\u044F_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442\\u0430_\\u0441\\u0435\\u043D\\u0442\\u044F\\u0431\\u0440\\u044F_\\u043E\\u043A\\u0442\\u044F\\u0431\\u0440\\u044F_\\u043D\\u043E\\u044F\\u0431\\u0440\\u044F_\\u0434\\u0435\\u043A\\u0430\\u0431\\u0440\\u044F\".split(\"_\"),e=\"\\u044F\\u043D\\u0432\\u0430\\u0440\\u044C_\\u0444\\u0435\\u0432\\u0440\\u0430\\u043B\\u044C_\\u043C\\u0430\\u0440\\u0442_\\u0430\\u043F\\u0440\\u0435\\u043B\\u044C_\\u043C\\u0430\\u0439_\\u0438\\u044E\\u043D\\u044C_\\u0438\\u044E\\u043B\\u044C_\\u0430\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0441\\u0435\\u043D\\u0442\\u044F\\u0431\\u0440\\u044C_\\u043E\\u043A\\u0442\\u044F\\u0431\\u0440\\u044C_\\u043D\\u043E\\u044F\\u0431\\u0440\\u044C_\\u0434\\u0435\\u043A\\u0430\\u0431\\u0440\\u044C\".split(\"_\"),r=\"\\u044F\\u043D\\u0432._\\u0444\\u0435\\u0432\\u0440._\\u043C\\u0430\\u0440._\\u0430\\u043F\\u0440._\\u043C\\u0430\\u044F_\\u0438\\u044E\\u043D\\u044F_\\u0438\\u044E\\u043B\\u044F_\\u0430\\u0432\\u0433._\\u0441\\u0435\\u043D\\u0442._\\u043E\\u043A\\u0442._\\u043D\\u043E\\u044F\\u0431._\\u0434\\u0435\\u043A.\".split(\"_\"),s=\"\\u044F\\u043D\\u0432._\\u0444\\u0435\\u0432\\u0440._\\u043C\\u0430\\u0440\\u0442_\\u0430\\u043F\\u0440._\\u043C\\u0430\\u0439_\\u0438\\u044E\\u043D\\u044C_\\u0438\\u044E\\u043B\\u044C_\\u0430\\u0432\\u0433._\\u0441\\u0435\\u043D\\u0442._\\u043E\\u043A\\u0442._\\u043D\\u043E\\u044F\\u0431._\\u0434\\u0435\\u043A.\".split(\"_\"),_=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/;function d(l,m,c){var y,D;return c===\"m\"?m?\"\\u043C\\u0438\\u043D\\u0443\\u0442\\u0430\":\"\\u043C\\u0438\\u043D\\u0443\\u0442\\u0443\":l+\" \"+(y=+l,D={mm:m?\"\\u043C\\u0438\\u043D\\u0443\\u0442\\u0430_\\u043C\\u0438\\u043D\\u0443\\u0442\\u044B_\\u043C\\u0438\\u043D\\u0443\\u0442\":\"\\u043C\\u0438\\u043D\\u0443\\u0442\\u0443_\\u043C\\u0438\\u043D\\u0443\\u0442\\u044B_\\u043C\\u0438\\u043D\\u0443\\u0442\",hh:\"\\u0447\\u0430\\u0441_\\u0447\\u0430\\u0441\\u0430_\\u0447\\u0430\\u0441\\u043E\\u0432\",dd:\"\\u0434\\u0435\\u043D\\u044C_\\u0434\\u043D\\u044F_\\u0434\\u043D\\u0435\\u0439\",MM:\"\\u043C\\u0435\\u0441\\u044F\\u0446_\\u043C\\u0435\\u0441\\u044F\\u0446\\u0430_\\u043C\\u0435\\u0441\\u044F\\u0446\\u0435\\u0432\",yy:\"\\u0433\\u043E\\u0434_\\u0433\\u043E\\u0434\\u0430_\\u043B\\u0435\\u0442\"}[c].split(\"_\"),y%10==1&&y%100!=11?D[0]:y%10>=2&&y%10<=4&&(y%100<10||y%100>=20)?D[1]:D[2])}var u=function(l,m){return _.test(m)?i[l.month()]:e[l.month()]};u.s=e,u.f=i;var o=function(l,m){return _.test(m)?r[l.month()]:s[l.month()]};o.s=s,o.f=r;var f={name:\"ru\",weekdays:\"\\u0432\\u043E\\u0441\\u043A\\u0440\\u0435\\u0441\\u0435\\u043D\\u044C\\u0435_\\u043F\\u043E\\u043D\\u0435\\u0434\\u0435\\u043B\\u044C\\u043D\\u0438\\u043A_\\u0432\\u0442\\u043E\\u0440\\u043D\\u0438\\u043A_\\u0441\\u0440\\u0435\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433_\\u043F\\u044F\\u0442\\u043D\\u0438\\u0446\\u0430_\\u0441\\u0443\\u0431\\u0431\\u043E\\u0442\\u0430\".split(\"_\"),weekdaysShort:\"\\u0432\\u0441\\u043A_\\u043F\\u043D\\u0434_\\u0432\\u0442\\u0440_\\u0441\\u0440\\u0434_\\u0447\\u0442\\u0432_\\u043F\\u0442\\u043D_\\u0441\\u0431\\u0442\".split(\"_\"),weekdaysMin:\"\\u0432\\u0441_\\u043F\\u043D_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043F\\u0442_\\u0441\\u0431\".split(\"_\"),months:u,monthsShort:o,weekStart:1,yearStart:4,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0433.\",LLL:\"D MMMM YYYY \\u0433., H:mm\",LLLL:\"dddd, D MMMM YYYY \\u0433., H:mm\"},relativeTime:{future:\"\\u0447\\u0435\\u0440\\u0435\\u0437 %s\",past:\"%s \\u043D\\u0430\\u0437\\u0430\\u0434\",s:\"\\u043D\\u0435\\u0441\\u043A\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\",m:d,mm:d,h:\"\\u0447\\u0430\\u0441\",hh:d,d:\"\\u0434\\u0435\\u043D\\u044C\",dd:d,M:\"\\u043C\\u0435\\u0441\\u044F\\u0446\",MM:d,y:\"\\u0433\\u043E\\u0434\",yy:d},ordinal:function(l){return l},meridiem:function(l){return l<4?\"\\u043D\\u043E\\u0447\\u0438\":l<12?\"\\u0443\\u0442\\u0440\\u0430\":l<17?\"\\u0434\\u043D\\u044F\":\"\\u0432\\u0435\\u0447\\u0435\\u0440\\u0430\"}};return a.default.locale(f,null,!0),f}))});var ji=v((nn,rn)=>{(function(n,t){typeof nn==\"object\"&&typeof rn<\"u\"?rn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_sl=t(n.dayjs)})(nn,(function(n){\"use strict\";function t(_){return _&&typeof _==\"object\"&&\"default\"in _?_:{default:_}}var a=t(n);function i(_){return _%100==2}function e(_){return _%100==3||_%100==4}function r(_,d,u,o){var f=_+\" \";switch(u){case\"s\":return d||o?\"nekaj sekund\":\"nekaj sekundami\";case\"m\":return d?\"ena minuta\":\"eno minuto\";case\"mm\":return i(_)?f+(d||o?\"minuti\":\"minutama\"):e(_)?f+(d||o?\"minute\":\"minutami\"):f+(d||o?\"minut\":\"minutami\");case\"h\":return d?\"ena ura\":\"eno uro\";case\"hh\":return i(_)?f+(d||o?\"uri\":\"urama\"):e(_)?f+(d||o?\"ure\":\"urami\"):f+(d||o?\"ur\":\"urami\");case\"d\":return d||o?\"en dan\":\"enim dnem\";case\"dd\":return i(_)?f+(d||o?\"dneva\":\"dnevoma\"):f+(d||o?\"dni\":\"dnevi\");case\"M\":return d||o?\"en mesec\":\"enim mesecem\";case\"MM\":return i(_)?f+(d||o?\"meseca\":\"mesecema\"):e(_)?f+(d||o?\"mesece\":\"meseci\"):f+(d||o?\"mesecev\":\"meseci\");case\"y\":return d||o?\"eno leto\":\"enim letom\";case\"yy\":return i(_)?f+(d||o?\"leti\":\"letoma\"):e(_)?f+(d||o?\"leta\":\"leti\"):f+(d||o?\"let\":\"leti\")}}var s={name:\"sl\",weekdays:\"nedelja_ponedeljek_torek_sreda_\\u010Detrtek_petek_sobota\".split(\"_\"),months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),weekStart:1,weekdaysShort:\"ned._pon._tor._sre._\\u010Det._pet._sob.\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_\\u010De_pe_so\".split(\"_\"),ordinal:function(_){return _+\".\"},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},relativeTime:{future:\"\\u010Dez %s\",past:\"pred %s\",s:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r}};return a.default.locale(s,null,!0),s}))});var Ti=v((an,sn)=>{(function(n,t){typeof an==\"object\"&&typeof sn<\"u\"?sn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_sr_cyrl=t(n.dayjs)})(an,(function(n){\"use strict\";function t(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var a=t(n),i={words:{m:[\"\\u0458\\u0435\\u0434\\u0430\\u043D \\u043C\\u0438\\u043D\\u0443\\u0442\",\"\\u0458\\u0435\\u0434\\u043D\\u043E\\u0433 \\u043C\\u0438\\u043D\\u0443\\u0442\\u0430\"],mm:[\"%d \\u043C\\u0438\\u043D\\u0443\\u0442\",\"%d \\u043C\\u0438\\u043D\\u0443\\u0442\\u0430\",\"%d \\u043C\\u0438\\u043D\\u0443\\u0442\\u0430\"],h:[\"\\u0458\\u0435\\u0434\\u0430\\u043D \\u0441\\u0430\\u0442\",\"\\u0458\\u0435\\u0434\\u043D\\u043E\\u0433 \\u0441\\u0430\\u0442\\u0430\"],hh:[\"%d \\u0441\\u0430\\u0442\",\"%d \\u0441\\u0430\\u0442\\u0430\",\"%d \\u0441\\u0430\\u0442\\u0438\"],d:[\"\\u0458\\u0435\\u0434\\u0430\\u043D \\u0434\\u0430\\u043D\",\"\\u0458\\u0435\\u0434\\u043D\\u043E\\u0433 \\u0434\\u0430\\u043D\\u0430\"],dd:[\"%d \\u0434\\u0430\\u043D\",\"%d \\u0434\\u0430\\u043D\\u0430\",\"%d \\u0434\\u0430\\u043D\\u0430\"],M:[\"\\u0458\\u0435\\u0434\\u0430\\u043D \\u043C\\u0435\\u0441\\u0435\\u0446\",\"\\u0458\\u0435\\u0434\\u043D\\u043E\\u0433 \\u043C\\u0435\\u0441\\u0435\\u0446\\u0430\"],MM:[\"%d \\u043C\\u0435\\u0441\\u0435\\u0446\",\"%d \\u043C\\u0435\\u0441\\u0435\\u0446\\u0430\",\"%d \\u043C\\u0435\\u0441\\u0435\\u0446\\u0438\"],y:[\"\\u0458\\u0435\\u0434\\u043D\\u0443 \\u0433\\u043E\\u0434\\u0438\\u043D\\u0443\",\"\\u0458\\u0435\\u0434\\u043D\\u0435 \\u0433\\u043E\\u0434\\u0438\\u043D\\u0435\"],yy:[\"%d \\u0433\\u043E\\u0434\\u0438\\u043D\\u0443\",\"%d \\u0433\\u043E\\u0434\\u0438\\u043D\\u0435\",\"%d \\u0433\\u043E\\u0434\\u0438\\u043D\\u0430\"]},correctGrammarCase:function(r,s){return r%10>=1&&r%10<=4&&(r%100<10||r%100>=20)?r%10==1?s[0]:s[1]:s[2]},relativeTimeFormatter:function(r,s,_,d){var u=i.words[_];if(_.length===1)return _===\"y\"&&s?\"\\u0458\\u0435\\u0434\\u043D\\u0430 \\u0433\\u043E\\u0434\\u0438\\u043D\\u0430\":d||s?u[0]:u[1];var o=i.correctGrammarCase(r,u);return _===\"yy\"&&s&&o===\"%d \\u0433\\u043E\\u0434\\u0438\\u043D\\u0443\"?r+\" \\u0433\\u043E\\u0434\\u0438\\u043D\\u0430\":o.replace(\"%d\",r)}},e={name:\"sr-cyrl\",weekdays:\"\\u041D\\u0435\\u0434\\u0435\\u0459\\u0430_\\u041F\\u043E\\u043D\\u0435\\u0434\\u0435\\u0459\\u0430\\u043A_\\u0423\\u0442\\u043E\\u0440\\u0430\\u043A_\\u0421\\u0440\\u0435\\u0434\\u0430_\\u0427\\u0435\\u0442\\u0432\\u0440\\u0442\\u0430\\u043A_\\u041F\\u0435\\u0442\\u0430\\u043A_\\u0421\\u0443\\u0431\\u043E\\u0442\\u0430\".split(\"_\"),weekdaysShort:\"\\u041D\\u0435\\u0434._\\u041F\\u043E\\u043D._\\u0423\\u0442\\u043E._\\u0421\\u0440\\u0435._\\u0427\\u0435\\u0442._\\u041F\\u0435\\u0442._\\u0421\\u0443\\u0431.\".split(\"_\"),weekdaysMin:\"\\u043D\\u0435_\\u043F\\u043E_\\u0443\\u0442_\\u0441\\u0440_\\u0447\\u0435_\\u043F\\u0435_\\u0441\\u0443\".split(\"_\"),months:\"\\u0408\\u0430\\u043D\\u0443\\u0430\\u0440_\\u0424\\u0435\\u0431\\u0440\\u0443\\u0430\\u0440_\\u041C\\u0430\\u0440\\u0442_\\u0410\\u043F\\u0440\\u0438\\u043B_\\u041C\\u0430\\u0458_\\u0408\\u0443\\u043D_\\u0408\\u0443\\u043B_\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442_\\u0421\\u0435\\u043F\\u0442\\u0435\\u043C\\u0431\\u0430\\u0440_\\u041E\\u043A\\u0442\\u043E\\u0431\\u0430\\u0440_\\u041D\\u043E\\u0432\\u0435\\u043C\\u0431\\u0430\\u0440_\\u0414\\u0435\\u0446\\u0435\\u043C\\u0431\\u0430\\u0440\".split(\"_\"),monthsShort:\"\\u0408\\u0430\\u043D._\\u0424\\u0435\\u0431._\\u041C\\u0430\\u0440._\\u0410\\u043F\\u0440._\\u041C\\u0430\\u0458_\\u0408\\u0443\\u043D_\\u0408\\u0443\\u043B_\\u0410\\u0432\\u0433._\\u0421\\u0435\\u043F._\\u041E\\u043A\\u0442._\\u041D\\u043E\\u0432._\\u0414\\u0435\\u0446.\".split(\"_\"),weekStart:1,relativeTime:{future:\"\\u0437\\u0430 %s\",past:\"\\u043F\\u0440\\u0435 %s\",s:\"\\u043D\\u0435\\u043A\\u043E\\u043B\\u0438\\u043A\\u043E \\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\\u0438\",m:i.relativeTimeFormatter,mm:i.relativeTimeFormatter,h:i.relativeTimeFormatter,hh:i.relativeTimeFormatter,d:i.relativeTimeFormatter,dd:i.relativeTimeFormatter,M:i.relativeTimeFormatter,MM:i.relativeTimeFormatter,y:i.relativeTimeFormatter,yy:i.relativeTimeFormatter},ordinal:function(r){return r+\".\"},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"}};return a.default.locale(e,null,!0),e}))});var wi=v((un,dn)=>{(function(n,t){typeof un==\"object\"&&typeof dn<\"u\"?dn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_sr=t(n.dayjs)})(un,(function(n){\"use strict\";function t(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var a=t(n),i={words:{m:[\"jedan minut\",\"jednog minuta\"],mm:[\"%d minut\",\"%d minuta\",\"%d minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"%d sat\",\"%d sata\",\"%d sati\"],d:[\"jedan dan\",\"jednog dana\"],dd:[\"%d dan\",\"%d dana\",\"%d dana\"],M:[\"jedan mesec\",\"jednog meseca\"],MM:[\"%d mesec\",\"%d meseca\",\"%d meseci\"],y:[\"jednu godinu\",\"jedne godine\"],yy:[\"%d godinu\",\"%d godine\",\"%d godina\"]},correctGrammarCase:function(r,s){return r%10>=1&&r%10<=4&&(r%100<10||r%100>=20)?r%10==1?s[0]:s[1]:s[2]},relativeTimeFormatter:function(r,s,_,d){var u=i.words[_];if(_.length===1)return _===\"y\"&&s?\"jedna godina\":d||s?u[0]:u[1];var o=i.correctGrammarCase(r,u);return _===\"yy\"&&s&&o===\"%d godinu\"?r+\" godina\":o.replace(\"%d\",r)}},e={name:\"sr\",weekdays:\"Nedelja_Ponedeljak_Utorak_Sreda_\\u010Cetvrtak_Petak_Subota\".split(\"_\"),weekdaysShort:\"Ned._Pon._Uto._Sre._\\u010Cet._Pet._Sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_\\u010De_pe_su\".split(\"_\"),months:\"Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar\".split(\"_\"),monthsShort:\"Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.\".split(\"_\"),weekStart:1,relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",m:i.relativeTimeFormatter,mm:i.relativeTimeFormatter,h:i.relativeTimeFormatter,hh:i.relativeTimeFormatter,d:i.relativeTimeFormatter,dd:i.relativeTimeFormatter,M:i.relativeTimeFormatter,MM:i.relativeTimeFormatter,y:i.relativeTimeFormatter,yy:i.relativeTimeFormatter},ordinal:function(r){return r+\".\"},formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"}};return a.default.locale(e,null,!0),e}))});var $i=v((on,_n)=>{(function(n,t){typeof on==\"object\"&&typeof _n<\"u\"?_n.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_sv=t(n.dayjs)})(on,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"sv\",weekdays:\"s\\xF6ndag_m\\xE5ndag_tisdag_onsdag_torsdag_fredag_l\\xF6rdag\".split(\"_\"),weekdaysShort:\"s\\xF6n_m\\xE5n_tis_ons_tor_fre_l\\xF6r\".split(\"_\"),weekdaysMin:\"s\\xF6_m\\xE5_ti_on_to_fr_l\\xF6\".split(\"_\"),months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekStart:1,yearStart:4,ordinal:function(e){var r=e%10;return\"[\"+e+(r===1||r===2?\"a\":\"e\")+\"]\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},relativeTime:{future:\"om %s\",past:\"f\\xF6r %s sedan\",s:\"n\\xE5gra sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en m\\xE5nad\",MM:\"%d m\\xE5nader\",y:\"ett \\xE5r\",yy:\"%d \\xE5r\"}};return a.default.locale(i,null,!0),i}))});var Ci=v((ln,fn)=>{(function(n,t){typeof ln==\"object\"&&typeof fn<\"u\"?fn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_th=t(n.dayjs)})(ln,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"th\",weekdays:\"\\u0E2D\\u0E32\\u0E17\\u0E34\\u0E15\\u0E22\\u0E4C_\\u0E08\\u0E31\\u0E19\\u0E17\\u0E23\\u0E4C_\\u0E2D\\u0E31\\u0E07\\u0E04\\u0E32\\u0E23_\\u0E1E\\u0E38\\u0E18_\\u0E1E\\u0E24\\u0E2B\\u0E31\\u0E2A\\u0E1A\\u0E14\\u0E35_\\u0E28\\u0E38\\u0E01\\u0E23\\u0E4C_\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\".split(\"_\"),weekdaysShort:\"\\u0E2D\\u0E32\\u0E17\\u0E34\\u0E15\\u0E22\\u0E4C_\\u0E08\\u0E31\\u0E19\\u0E17\\u0E23\\u0E4C_\\u0E2D\\u0E31\\u0E07\\u0E04\\u0E32\\u0E23_\\u0E1E\\u0E38\\u0E18_\\u0E1E\\u0E24\\u0E2B\\u0E31\\u0E2A_\\u0E28\\u0E38\\u0E01\\u0E23\\u0E4C_\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\".split(\"_\"),weekdaysMin:\"\\u0E2D\\u0E32._\\u0E08._\\u0E2D._\\u0E1E._\\u0E1E\\u0E24._\\u0E28._\\u0E2A.\".split(\"_\"),months:\"\\u0E21\\u0E01\\u0E23\\u0E32\\u0E04\\u0E21_\\u0E01\\u0E38\\u0E21\\u0E20\\u0E32\\u0E1E\\u0E31\\u0E19\\u0E18\\u0E4C_\\u0E21\\u0E35\\u0E19\\u0E32\\u0E04\\u0E21_\\u0E40\\u0E21\\u0E29\\u0E32\\u0E22\\u0E19_\\u0E1E\\u0E24\\u0E29\\u0E20\\u0E32\\u0E04\\u0E21_\\u0E21\\u0E34\\u0E16\\u0E38\\u0E19\\u0E32\\u0E22\\u0E19_\\u0E01\\u0E23\\u0E01\\u0E0E\\u0E32\\u0E04\\u0E21_\\u0E2A\\u0E34\\u0E07\\u0E2B\\u0E32\\u0E04\\u0E21_\\u0E01\\u0E31\\u0E19\\u0E22\\u0E32\\u0E22\\u0E19_\\u0E15\\u0E38\\u0E25\\u0E32\\u0E04\\u0E21_\\u0E1E\\u0E24\\u0E28\\u0E08\\u0E34\\u0E01\\u0E32\\u0E22\\u0E19_\\u0E18\\u0E31\\u0E19\\u0E27\\u0E32\\u0E04\\u0E21\".split(\"_\"),monthsShort:\"\\u0E21.\\u0E04._\\u0E01.\\u0E1E._\\u0E21\\u0E35.\\u0E04._\\u0E40\\u0E21.\\u0E22._\\u0E1E.\\u0E04._\\u0E21\\u0E34.\\u0E22._\\u0E01.\\u0E04._\\u0E2A.\\u0E04._\\u0E01.\\u0E22._\\u0E15.\\u0E04._\\u0E1E.\\u0E22._\\u0E18.\\u0E04.\".split(\"_\"),formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY \\u0E40\\u0E27\\u0E25\\u0E32 H:mm\",LLLL:\"\\u0E27\\u0E31\\u0E19dddd\\u0E17\\u0E35\\u0E48 D MMMM YYYY \\u0E40\\u0E27\\u0E25\\u0E32 H:mm\"},relativeTime:{future:\"\\u0E2D\\u0E35\\u0E01 %s\",past:\"%s\\u0E17\\u0E35\\u0E48\\u0E41\\u0E25\\u0E49\\u0E27\",s:\"\\u0E44\\u0E21\\u0E48\\u0E01\\u0E35\\u0E48\\u0E27\\u0E34\\u0E19\\u0E32\\u0E17\\u0E35\",m:\"1 \\u0E19\\u0E32\\u0E17\\u0E35\",mm:\"%d \\u0E19\\u0E32\\u0E17\\u0E35\",h:\"1 \\u0E0A\\u0E31\\u0E48\\u0E27\\u0E42\\u0E21\\u0E07\",hh:\"%d \\u0E0A\\u0E31\\u0E48\\u0E27\\u0E42\\u0E21\\u0E07\",d:\"1 \\u0E27\\u0E31\\u0E19\",dd:\"%d \\u0E27\\u0E31\\u0E19\",M:\"1 \\u0E40\\u0E14\\u0E37\\u0E2D\\u0E19\",MM:\"%d \\u0E40\\u0E14\\u0E37\\u0E2D\\u0E19\",y:\"1 \\u0E1B\\u0E35\",yy:\"%d \\u0E1B\\u0E35\"},ordinal:function(e){return e+\".\"}};return a.default.locale(i,null,!0),i}))});var Oi=v((mn,cn)=>{(function(n,t){typeof mn==\"object\"&&typeof cn<\"u\"?cn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_tr=t(n.dayjs)})(mn,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"tr\",weekdays:\"Pazar_Pazartesi_Sal\\u0131_\\xC7ar\\u015Famba_Per\\u015Fembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pts_Sal_\\xC7ar_Per_Cum_Cts\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_\\xC7a_Pe_Cu_Ct\".split(\"_\"),months:\"Ocak_\\u015Eubat_Mart_Nisan_May\\u0131s_Haziran_Temmuz_A\\u011Fustos_Eyl\\xFCl_Ekim_Kas\\u0131m_Aral\\u0131k\".split(\"_\"),monthsShort:\"Oca_\\u015Eub_Mar_Nis_May_Haz_Tem_A\\u011Fu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekStart:1,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},relativeTime:{future:\"%s sonra\",past:\"%s \\xF6nce\",s:\"birka\\xE7 saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir g\\xFCn\",dd:\"%d g\\xFCn\",M:\"bir ay\",MM:\"%d ay\",y:\"bir y\\u0131l\",yy:\"%d y\\u0131l\"},ordinal:function(e){return e+\".\"}};return a.default.locale(i,null,!0),i}))});var zi=v((hn,Mn)=>{(function(n,t){typeof hn==\"object\"&&typeof Mn<\"u\"?Mn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_uk=t(n.dayjs)})(hn,(function(n){\"use strict\";function t(u){return u&&typeof u==\"object\"&&\"default\"in u?u:{default:u}}var a=t(n),i=\"\\u0441\\u0456\\u0447\\u043D\\u044F_\\u043B\\u044E\\u0442\\u043E\\u0433\\u043E_\\u0431\\u0435\\u0440\\u0435\\u0437\\u043D\\u044F_\\u043A\\u0432\\u0456\\u0442\\u043D\\u044F_\\u0442\\u0440\\u0430\\u0432\\u043D\\u044F_\\u0447\\u0435\\u0440\\u0432\\u043D\\u044F_\\u043B\\u0438\\u043F\\u043D\\u044F_\\u0441\\u0435\\u0440\\u043F\\u043D\\u044F_\\u0432\\u0435\\u0440\\u0435\\u0441\\u043D\\u044F_\\u0436\\u043E\\u0432\\u0442\\u043D\\u044F_\\u043B\\u0438\\u0441\\u0442\\u043E\\u043F\\u0430\\u0434\\u0430_\\u0433\\u0440\\u0443\\u0434\\u043D\\u044F\".split(\"_\"),e=\"\\u0441\\u0456\\u0447\\u0435\\u043D\\u044C_\\u043B\\u044E\\u0442\\u0438\\u0439_\\u0431\\u0435\\u0440\\u0435\\u0437\\u0435\\u043D\\u044C_\\u043A\\u0432\\u0456\\u0442\\u0435\\u043D\\u044C_\\u0442\\u0440\\u0430\\u0432\\u0435\\u043D\\u044C_\\u0447\\u0435\\u0440\\u0432\\u0435\\u043D\\u044C_\\u043B\\u0438\\u043F\\u0435\\u043D\\u044C_\\u0441\\u0435\\u0440\\u043F\\u0435\\u043D\\u044C_\\u0432\\u0435\\u0440\\u0435\\u0441\\u0435\\u043D\\u044C_\\u0436\\u043E\\u0432\\u0442\\u0435\\u043D\\u044C_\\u043B\\u0438\\u0441\\u0442\\u043E\\u043F\\u0430\\u0434_\\u0433\\u0440\\u0443\\u0434\\u0435\\u043D\\u044C\".split(\"_\"),r=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/;function s(u,o,f){var l,m;return f===\"m\"?o?\"\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\\u0430\":\"\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\\u0443\":f===\"h\"?o?\"\\u0433\\u043E\\u0434\\u0438\\u043D\\u0430\":\"\\u0433\\u043E\\u0434\\u0438\\u043D\\u0443\":u+\" \"+(l=+u,m={ss:o?\"\\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\\u0430_\\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\\u0438_\\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\":\"\\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\\u0443_\\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\\u0438_\\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\",mm:o?\"\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\\u0430_\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\\u0438_\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\":\"\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\\u0443_\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\\u0438_\\u0445\\u0432\\u0438\\u043B\\u0438\\u043D\",hh:o?\"\\u0433\\u043E\\u0434\\u0438\\u043D\\u0430_\\u0433\\u043E\\u0434\\u0438\\u043D\\u0438_\\u0433\\u043E\\u0434\\u0438\\u043D\":\"\\u0433\\u043E\\u0434\\u0438\\u043D\\u0443_\\u0433\\u043E\\u0434\\u0438\\u043D\\u0438_\\u0433\\u043E\\u0434\\u0438\\u043D\",dd:\"\\u0434\\u0435\\u043D\\u044C_\\u0434\\u043D\\u0456_\\u0434\\u043D\\u0456\\u0432\",MM:\"\\u043C\\u0456\\u0441\\u044F\\u0446\\u044C_\\u043C\\u0456\\u0441\\u044F\\u0446\\u0456_\\u043C\\u0456\\u0441\\u044F\\u0446\\u0456\\u0432\",yy:\"\\u0440\\u0456\\u043A_\\u0440\\u043E\\u043A\\u0438_\\u0440\\u043E\\u043A\\u0456\\u0432\"}[f].split(\"_\"),l%10==1&&l%100!=11?m[0]:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?m[1]:m[2])}var _=function(u,o){return r.test(o)?i[u.month()]:e[u.month()]};_.s=e,_.f=i;var d={name:\"uk\",weekdays:\"\\u043D\\u0435\\u0434\\u0456\\u043B\\u044F_\\u043F\\u043E\\u043D\\u0435\\u0434\\u0456\\u043B\\u043E\\u043A_\\u0432\\u0456\\u0432\\u0442\\u043E\\u0440\\u043E\\u043A_\\u0441\\u0435\\u0440\\u0435\\u0434\\u0430_\\u0447\\u0435\\u0442\\u0432\\u0435\\u0440_\\u043F\\u2019\\u044F\\u0442\\u043D\\u0438\\u0446\\u044F_\\u0441\\u0443\\u0431\\u043E\\u0442\\u0430\".split(\"_\"),weekdaysShort:\"\\u043D\\u0434\\u043B_\\u043F\\u043D\\u0434_\\u0432\\u0442\\u0440_\\u0441\\u0440\\u0434_\\u0447\\u0442\\u0432_\\u043F\\u0442\\u043D_\\u0441\\u0431\\u0442\".split(\"_\"),weekdaysMin:\"\\u043D\\u0434_\\u043F\\u043D_\\u0432\\u0442_\\u0441\\u0440_\\u0447\\u0442_\\u043F\\u0442_\\u0441\\u0431\".split(\"_\"),months:_,monthsShort:\"\\u0441\\u0456\\u0447_\\u043B\\u044E\\u0442_\\u0431\\u0435\\u0440_\\u043A\\u0432\\u0456\\u0442_\\u0442\\u0440\\u0430\\u0432_\\u0447\\u0435\\u0440\\u0432_\\u043B\\u0438\\u043F_\\u0441\\u0435\\u0440\\u043F_\\u0432\\u0435\\u0440_\\u0436\\u043E\\u0432\\u0442_\\u043B\\u0438\\u0441\\u0442_\\u0433\\u0440\\u0443\\u0434\".split(\"_\"),weekStart:1,relativeTime:{future:\"\\u0437\\u0430 %s\",past:\"%s \\u0442\\u043E\\u043C\\u0443\",s:\"\\u0434\\u0435\\u043A\\u0456\\u043B\\u044C\\u043A\\u0430 \\u0441\\u0435\\u043A\\u0443\\u043D\\u0434\",m:s,mm:s,h:s,hh:s,d:\"\\u0434\\u0435\\u043D\\u044C\",dd:s,M:\"\\u043C\\u0456\\u0441\\u044F\\u0446\\u044C\",MM:s,y:\"\\u0440\\u0456\\u043A\",yy:s},ordinal:function(u){return u},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY \\u0440.\",LLL:\"D MMMM YYYY \\u0440., HH:mm\",LLLL:\"dddd, D MMMM YYYY \\u0440., HH:mm\"}};return a.default.locale(d,null,!0),d}))});var Ai=v((Yn,yn)=>{(function(n,t){typeof Yn==\"object\"&&typeof yn<\"u\"?yn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_ur=t(n.dayjs)})(Yn,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"ur\",weekdays:\"\\u0627\\u062A\\u0648\\u0627\\u0631_\\u067E\\u06CC\\u0631_\\u0645\\u0646\\u06AF\\u0644_\\u0628\\u062F\\u06BE_\\u062C\\u0645\\u0639\\u0631\\u0627\\u062A_\\u062C\\u0645\\u0639\\u06C1_\\u06C1\\u0641\\u062A\\u06C1\".split(\"_\"),months:\"\\u062C\\u0646\\u0648\\u0631\\u06CC_\\u0641\\u0631\\u0648\\u0631\\u06CC_\\u0645\\u0627\\u0631\\u0686_\\u0627\\u067E\\u0631\\u06CC\\u0644_\\u0645\\u0626\\u06CC_\\u062C\\u0648\\u0646_\\u062C\\u0648\\u0644\\u0627\\u0626\\u06CC_\\u0627\\u06AF\\u0633\\u062A_\\u0633\\u062A\\u0645\\u0628\\u0631_\\u0627\\u06A9\\u062A\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0645\\u0628\\u0631_\\u062F\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),weekStart:1,weekdaysShort:\"\\u0627\\u062A\\u0648\\u0627\\u0631_\\u067E\\u06CC\\u0631_\\u0645\\u0646\\u06AF\\u0644_\\u0628\\u062F\\u06BE_\\u062C\\u0645\\u0639\\u0631\\u0627\\u062A_\\u062C\\u0645\\u0639\\u06C1_\\u06C1\\u0641\\u062A\\u06C1\".split(\"_\"),monthsShort:\"\\u062C\\u0646\\u0648\\u0631\\u06CC_\\u0641\\u0631\\u0648\\u0631\\u06CC_\\u0645\\u0627\\u0631\\u0686_\\u0627\\u067E\\u0631\\u06CC\\u0644_\\u0645\\u0626\\u06CC_\\u062C\\u0648\\u0646_\\u062C\\u0648\\u0644\\u0627\\u0626\\u06CC_\\u0627\\u06AF\\u0633\\u062A_\\u0633\\u062A\\u0645\\u0628\\u0631_\\u0627\\u06A9\\u062A\\u0648\\u0628\\u0631_\\u0646\\u0648\\u0645\\u0628\\u0631_\\u062F\\u0633\\u0645\\u0628\\u0631\".split(\"_\"),weekdaysMin:\"\\u0627\\u062A\\u0648\\u0627\\u0631_\\u067E\\u06CC\\u0631_\\u0645\\u0646\\u06AF\\u0644_\\u0628\\u062F\\u06BE_\\u062C\\u0645\\u0639\\u0631\\u0627\\u062A_\\u062C\\u0645\\u0639\\u06C1_\\u06C1\\u0641\\u062A\\u06C1\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd\\u060C D MMMM YYYY HH:mm\"},relativeTime:{future:\"%s \\u0628\\u0639\\u062F\",past:\"%s \\u0642\\u0628\\u0644\",s:\"\\u0686\\u0646\\u062F \\u0633\\u06CC\\u06A9\\u0646\\u0688\",m:\"\\u0627\\u06CC\\u06A9 \\u0645\\u0646\\u0679\",mm:\"%d \\u0645\\u0646\\u0679\",h:\"\\u0627\\u06CC\\u06A9 \\u06AF\\u06BE\\u0646\\u0679\\u06C1\",hh:\"%d \\u06AF\\u06BE\\u0646\\u0679\\u06D2\",d:\"\\u0627\\u06CC\\u06A9 \\u062F\\u0646\",dd:\"%d \\u062F\\u0646\",M:\"\\u0627\\u06CC\\u06A9 \\u0645\\u0627\\u06C1\",MM:\"%d \\u0645\\u0627\\u06C1\",y:\"\\u0627\\u06CC\\u06A9 \\u0633\\u0627\\u0644\",yy:\"%d \\u0633\\u0627\\u0644\"}};return a.default.locale(i,null,!0),i}))});var qi=v((pn,Ln)=>{(function(n,t){typeof pn==\"object\"&&typeof Ln<\"u\"?Ln.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_vi=t(n.dayjs)})(pn,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"vi\",weekdays:\"ch\\u1EE7 nh\\u1EADt_th\\u1EE9 hai_th\\u1EE9 ba_th\\u1EE9 t\\u01B0_th\\u1EE9 n\\u0103m_th\\u1EE9 s\\xE1u_th\\u1EE9 b\\u1EA3y\".split(\"_\"),months:\"th\\xE1ng 1_th\\xE1ng 2_th\\xE1ng 3_th\\xE1ng 4_th\\xE1ng 5_th\\xE1ng 6_th\\xE1ng 7_th\\xE1ng 8_th\\xE1ng 9_th\\xE1ng 10_th\\xE1ng 11_th\\xE1ng 12\".split(\"_\"),weekStart:1,weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),monthsShort:\"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [n\\u0103m] YYYY\",LLL:\"D MMMM [n\\u0103m] YYYY HH:mm\",LLLL:\"dddd, D MMMM [n\\u0103m] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},relativeTime:{future:\"%s t\\u1EDBi\",past:\"%s tr\\u01B0\\u1EDBc\",s:\"v\\xE0i gi\\xE2y\",m:\"m\\u1ED9t ph\\xFAt\",mm:\"%d ph\\xFAt\",h:\"m\\u1ED9t gi\\u1EDD\",hh:\"%d gi\\u1EDD\",d:\"m\\u1ED9t ng\\xE0y\",dd:\"%d ng\\xE0y\",M:\"m\\u1ED9t th\\xE1ng\",MM:\"%d th\\xE1ng\",y:\"m\\u1ED9t n\\u0103m\",yy:\"%d n\\u0103m\"}};return a.default.locale(i,null,!0),i}))});var Ii=v((Dn,vn)=>{(function(n,t){typeof Dn==\"object\"&&typeof vn<\"u\"?vn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_zh_cn=t(n.dayjs)})(Dn,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"zh-cn\",weekdays:\"\\u661F\\u671F\\u65E5_\\u661F\\u671F\\u4E00_\\u661F\\u671F\\u4E8C_\\u661F\\u671F\\u4E09_\\u661F\\u671F\\u56DB_\\u661F\\u671F\\u4E94_\\u661F\\u671F\\u516D\".split(\"_\"),weekdaysShort:\"\\u5468\\u65E5_\\u5468\\u4E00_\\u5468\\u4E8C_\\u5468\\u4E09_\\u5468\\u56DB_\\u5468\\u4E94_\\u5468\\u516D\".split(\"_\"),weekdaysMin:\"\\u65E5_\\u4E00_\\u4E8C_\\u4E09_\\u56DB_\\u4E94_\\u516D\".split(\"_\"),months:\"\\u4E00\\u6708_\\u4E8C\\u6708_\\u4E09\\u6708_\\u56DB\\u6708_\\u4E94\\u6708_\\u516D\\u6708_\\u4E03\\u6708_\\u516B\\u6708_\\u4E5D\\u6708_\\u5341\\u6708_\\u5341\\u4E00\\u6708_\\u5341\\u4E8C\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),ordinal:function(e,r){return r===\"W\"?e+\"\\u5468\":e+\"\\u65E5\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5E74M\\u6708D\\u65E5\",LLL:\"YYYY\\u5E74M\\u6708D\\u65E5Ah\\u70B9mm\\u5206\",LLLL:\"YYYY\\u5E74M\\u6708D\\u65E5ddddAh\\u70B9mm\\u5206\",l:\"YYYY/M/D\",ll:\"YYYY\\u5E74M\\u6708D\\u65E5\",lll:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",llll:\"YYYY\\u5E74M\\u6708D\\u65E5dddd HH:mm\"},relativeTime:{future:\"%s\\u5185\",past:\"%s\\u524D\",s:\"\\u51E0\\u79D2\",m:\"1 \\u5206\\u949F\",mm:\"%d \\u5206\\u949F\",h:\"1 \\u5C0F\\u65F6\",hh:\"%d \\u5C0F\\u65F6\",d:\"1 \\u5929\",dd:\"%d \\u5929\",M:\"1 \\u4E2A\\u6708\",MM:\"%d \\u4E2A\\u6708\",y:\"1 \\u5E74\",yy:\"%d \\u5E74\"},meridiem:function(e,r){var s=100*e+r;return s<600?\"\\u51CC\\u6668\":s<900?\"\\u65E9\\u4E0A\":s<1100?\"\\u4E0A\\u5348\":s<1300?\"\\u4E2D\\u5348\":s<1800?\"\\u4E0B\\u5348\":\"\\u665A\\u4E0A\"}};return a.default.locale(i,null,!0),i}))});var xi=v((gn,bn)=>{(function(n,t){typeof gn==\"object\"&&typeof bn<\"u\"?bn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_zh_hk=t(n.dayjs)})(gn,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"zh-hk\",months:\"\\u4E00\\u6708_\\u4E8C\\u6708_\\u4E09\\u6708_\\u56DB\\u6708_\\u4E94\\u6708_\\u516D\\u6708_\\u4E03\\u6708_\\u516B\\u6708_\\u4E5D\\u6708_\\u5341\\u6708_\\u5341\\u4E00\\u6708_\\u5341\\u4E8C\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),weekdays:\"\\u661F\\u671F\\u65E5_\\u661F\\u671F\\u4E00_\\u661F\\u671F\\u4E8C_\\u661F\\u671F\\u4E09_\\u661F\\u671F\\u56DB_\\u661F\\u671F\\u4E94_\\u661F\\u671F\\u516D\".split(\"_\"),weekdaysShort:\"\\u9031\\u65E5_\\u9031\\u4E00_\\u9031\\u4E8C_\\u9031\\u4E09_\\u9031\\u56DB_\\u9031\\u4E94_\\u9031\\u516D\".split(\"_\"),weekdaysMin:\"\\u65E5_\\u4E00_\\u4E8C_\\u4E09_\\u56DB_\\u4E94_\\u516D\".split(\"_\"),ordinal:function(e,r){return r===\"W\"?e+\"\\u9031\":e+\"\\u65E5\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5E74M\\u6708D\\u65E5\",LLL:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",LLLL:\"YYYY\\u5E74M\\u6708D\\u65E5dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY\\u5E74M\\u6708D\\u65E5\",lll:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",llll:\"YYYY\\u5E74M\\u6708D\\u65E5dddd HH:mm\"},relativeTime:{future:\"%s\\u5167\",past:\"%s\\u524D\",s:\"\\u5E7E\\u79D2\",m:\"\\u4E00\\u5206\\u9418\",mm:\"%d \\u5206\\u9418\",h:\"\\u4E00\\u5C0F\\u6642\",hh:\"%d \\u5C0F\\u6642\",d:\"\\u4E00\\u5929\",dd:\"%d \\u5929\",M:\"\\u4E00\\u500B\\u6708\",MM:\"%d \\u500B\\u6708\",y:\"\\u4E00\\u5E74\",yy:\"%d \\u5E74\"},meridiem:function(e,r){var s=100*e+r;return s<600?\"\\u51CC\\u6668\":s<900?\"\\u65E9\\u4E0A\":s<1100?\"\\u4E0A\\u5348\":s<1300?\"\\u4E2D\\u5348\":s<1800?\"\\u4E0B\\u5348\":\"\\u665A\\u4E0A\"}};return a.default.locale(i,null,!0),i}))});var Ni=v((Sn,kn)=>{(function(n,t){typeof Sn==\"object\"&&typeof kn<\"u\"?kn.exports=t(k()):typeof define==\"function\"&&define.amd?define([\"dayjs\"],t):(n=typeof globalThis<\"u\"?globalThis:n||self).dayjs_locale_zh_tw=t(n.dayjs)})(Sn,(function(n){\"use strict\";function t(e){return e&&typeof e==\"object\"&&\"default\"in e?e:{default:e}}var a=t(n),i={name:\"zh-tw\",weekdays:\"\\u661F\\u671F\\u65E5_\\u661F\\u671F\\u4E00_\\u661F\\u671F\\u4E8C_\\u661F\\u671F\\u4E09_\\u661F\\u671F\\u56DB_\\u661F\\u671F\\u4E94_\\u661F\\u671F\\u516D\".split(\"_\"),weekdaysShort:\"\\u9031\\u65E5_\\u9031\\u4E00_\\u9031\\u4E8C_\\u9031\\u4E09_\\u9031\\u56DB_\\u9031\\u4E94_\\u9031\\u516D\".split(\"_\"),weekdaysMin:\"\\u65E5_\\u4E00_\\u4E8C_\\u4E09_\\u56DB_\\u4E94_\\u516D\".split(\"_\"),months:\"\\u4E00\\u6708_\\u4E8C\\u6708_\\u4E09\\u6708_\\u56DB\\u6708_\\u4E94\\u6708_\\u516D\\u6708_\\u4E03\\u6708_\\u516B\\u6708_\\u4E5D\\u6708_\\u5341\\u6708_\\u5341\\u4E00\\u6708_\\u5341\\u4E8C\\u6708\".split(\"_\"),monthsShort:\"1\\u6708_2\\u6708_3\\u6708_4\\u6708_5\\u6708_6\\u6708_7\\u6708_8\\u6708_9\\u6708_10\\u6708_11\\u6708_12\\u6708\".split(\"_\"),ordinal:function(e,r){return r===\"W\"?e+\"\\u9031\":e+\"\\u65E5\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY\\u5E74M\\u6708D\\u65E5\",LLL:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",LLLL:\"YYYY\\u5E74M\\u6708D\\u65E5dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY\\u5E74M\\u6708D\\u65E5\",lll:\"YYYY\\u5E74M\\u6708D\\u65E5 HH:mm\",llll:\"YYYY\\u5E74M\\u6708D\\u65E5dddd HH:mm\"},relativeTime:{future:\"%s\\u5167\",past:\"%s\\u524D\",s:\"\\u5E7E\\u79D2\",m:\"1 \\u5206\\u9418\",mm:\"%d \\u5206\\u9418\",h:\"1 \\u5C0F\\u6642\",hh:\"%d \\u5C0F\\u6642\",d:\"1 \\u5929\",dd:\"%d \\u5929\",M:\"1 \\u500B\\u6708\",MM:\"%d \\u500B\\u6708\",y:\"1 \\u5E74\",yy:\"%d \\u5E74\"},meridiem:function(e,r){var s=100*e+r;return s<600?\"\\u51CC\\u6668\":s<900?\"\\u65E9\\u4E0A\":s<1100?\"\\u4E0A\\u5348\":s<1300?\"\\u4E2D\\u5348\":s<1800?\"\\u4E0B\\u5348\":\"\\u665A\\u4E0A\"}};return a.default.locale(i,null,!0),i}))});var jn=60,Tn=jn*60,wn=Tn*24,Xi=wn*7,se=1e3,ce=jn*se,ge=Tn*se,$n=wn*se,Cn=Xi*se,_e=\"millisecond\",te=\"second\",ne=\"minute\",ie=\"hour\",V=\"day\",de=\"week\",G=\"month\",he=\"quarter\",K=\"year\",re=\"date\",On=\"YYYY-MM-DDTHH:mm:ssZ\",be=\"Invalid Date\",zn=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,An=/\\[([^\\]]+)]|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;var In={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 a=[\"th\",\"st\",\"nd\",\"rd\"],i=t%100;return\"[\"+t+(a[(i-20)%10]||a[i]||a[0])+\"]\"}};var Se=function(t,a,i){var e=String(t);return!e||e.length>=a?t:\"\"+Array(a+1-e.length).join(i)+t},Bi=function(t){var a=-t.utcOffset(),i=Math.abs(a),e=Math.floor(i/60),r=i%60;return(a<=0?\"+\":\"-\")+Se(e,2,\"0\")+\":\"+Se(r,2,\"0\")},er=function n(t,a){if(t.date()<a.date())return-n(a,t);var i=(a.year()-t.year())*12+(a.month()-t.month()),e=t.clone().add(i,G),r=a-e<0,s=t.clone().add(i+(r?-1:1),G);return+(-(i+(a-e)/(r?e-s:s-e))||0)},tr=function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},nr=function(t){var a={M:G,y:K,w:de,d:V,D:re,h:ie,m:ne,s:te,ms:_e,Q:he};return a[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},ir=function(t){return t===void 0},xn={s:Se,z:Bi,m:er,a:tr,p:nr,u:ir};var le=\"en\",ue={};ue[le]=In;var Nn=\"$isDayjsObject\",ke=function(t){return t instanceof Ye||!!(t&&t[Nn])},Me=function n(t,a,i){var e;if(!t)return le;if(typeof t==\"string\"){var r=t.toLowerCase();ue[r]&&(e=r),a&&(ue[r]=a,e=r);var s=t.split(\"-\");if(!e&&s.length>1)return n(s[0])}else{var _=t.name;ue[_]=t,e=_}return!i&&e&&(le=e),e||!i&&le},E=function(t,a){if(ke(t))return t.clone();var i=typeof a==\"object\"?a:{};return i.date=t,i.args=arguments,new Ye(i)},rr=function(t,a){return E(t,{locale:a.$L,utc:a.$u,x:a.$x,$offset:a.$offset})},z=xn;z.l=Me;z.i=ke;z.w=rr;var ar=function(t){var a=t.date,i=t.utc;if(a===null)return new Date(NaN);if(z.u(a))return new Date;if(a instanceof Date)return new Date(a);if(typeof a==\"string\"&&!/Z$/i.test(a)){var e=a.match(zn);if(e){var r=e[2]-1||0,s=(e[7]||\"0\").substring(0,3);return i?new Date(Date.UTC(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,s)):new Date(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,s)}}return new Date(a)},Ye=(function(){function n(a){this.$L=Me(a.locale,null,!0),this.parse(a),this.$x=this.$x||a.x||{},this[Nn]=!0}var t=n.prototype;return t.parse=function(i){this.$d=ar(i),this.init()},t.init=function(){var i=this.$d;this.$y=i.getFullYear(),this.$M=i.getMonth(),this.$D=i.getDate(),this.$W=i.getDay(),this.$H=i.getHours(),this.$m=i.getMinutes(),this.$s=i.getSeconds(),this.$ms=i.getMilliseconds()},t.$utils=function(){return z},t.isValid=function(){return this.$d.toString()!==be},t.isSame=function(i,e){var r=E(i);return this.startOf(e)<=r&&r<=this.endOf(e)},t.isAfter=function(i,e){return E(i)<this.startOf(e)},t.isBefore=function(i,e){return this.endOf(e)<E(i)},t.$g=function(i,e,r){return z.u(i)?this[e]:this.set(r,i)},t.unix=function(){return Math.floor(this.valueOf()/1e3)},t.valueOf=function(){return this.$d.getTime()},t.startOf=function(i,e){var r=this,s=z.u(e)?!0:e,_=z.p(i),d=function(L,w){var b=z.w(r.$u?Date.UTC(r.$y,w,L):new Date(r.$y,w,L),r);return s?b:b.endOf(V)},u=function(L,w){var b=[0,0,0,0],C=[23,59,59,999];return z.w(r.toDate()[L].apply(r.toDate(\"s\"),(s?b:C).slice(w)),r)},o=this.$W,f=this.$M,l=this.$D,m=\"set\"+(this.$u?\"UTC\":\"\");switch(_){case K:return s?d(1,0):d(31,11);case G:return s?d(1,f):d(0,f+1);case de:{var c=this.$locale().weekStart||0,y=(o<c?o+7:o)-c;return d(s?l-y:l+(6-y),f)}case V:case re:return u(m+\"Hours\",0);case ie:return u(m+\"Minutes\",1);case ne:return u(m+\"Seconds\",2);case te:return u(m+\"Milliseconds\",3);default:return this.clone()}},t.endOf=function(i){return this.startOf(i,!1)},t.$set=function(i,e){var r,s=z.p(i),_=\"set\"+(this.$u?\"UTC\":\"\"),d=(r={},r[V]=_+\"Date\",r[re]=_+\"Date\",r[G]=_+\"Month\",r[K]=_+\"FullYear\",r[ie]=_+\"Hours\",r[ne]=_+\"Minutes\",r[te]=_+\"Seconds\",r[_e]=_+\"Milliseconds\",r)[s],u=s===V?this.$D+(e-this.$W):e;if(s===G||s===K){var o=this.clone().set(re,1);o.$d[d](u),o.init(),this.$d=o.set(re,Math.min(this.$D,o.daysInMonth())).$d}else d&&this.$d[d](u);return this.init(),this},t.set=function(i,e){return this.clone().$set(i,e)},t.get=function(i){return this[z.p(i)]()},t.add=function(i,e){var r=this,s;i=Number(i);var _=z.p(e),d=function(l){var m=E(r);return z.w(m.date(m.date()+Math.round(l*i)),r)};if(_===G)return this.set(G,this.$M+i);if(_===K)return this.set(K,this.$y+i);if(_===V)return d(1);if(_===de)return d(7);var u=(s={},s[ne]=ce,s[ie]=ge,s[te]=se,s)[_]||1,o=this.$d.getTime()+i*u;return z.w(o,this)},t.subtract=function(i,e){return this.add(i*-1,e)},t.format=function(i){var e=this,r=this.$locale();if(!this.isValid())return r.invalidDate||be;var s=i||On,_=z.z(this),d=this.$H,u=this.$m,o=this.$M,f=r.weekdays,l=r.months,m=r.meridiem,c=function(b,C,A,I){return b&&(b[C]||b(e,s))||A[C].slice(0,I)},y=function(b){return z.s(d%12||12,b,\"0\")},D=m||function(w,b,C){var A=w<12?\"AM\":\"PM\";return C?A.toLowerCase():A},L=function(b){switch(b){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return z.s(e.$y,4,\"0\");case\"M\":return o+1;case\"MM\":return z.s(o+1,2,\"0\");case\"MMM\":return c(r.monthsShort,o,l,3);case\"MMMM\":return c(l,o);case\"D\":return e.$D;case\"DD\":return z.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return c(r.weekdaysMin,e.$W,f,2);case\"ddd\":return c(r.weekdaysShort,e.$W,f,3);case\"dddd\":return f[e.$W];case\"H\":return String(d);case\"HH\":return z.s(d,2,\"0\");case\"h\":return y(1);case\"hh\":return y(2);case\"a\":return D(d,u,!0);case\"A\":return D(d,u,!1);case\"m\":return String(u);case\"mm\":return z.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return z.s(e.$s,2,\"0\");case\"SSS\":return z.s(e.$ms,3,\"0\");case\"Z\":return _;default:break}return null};return s.replace(An,function(w,b){return b||L(w)||_.replace(\":\",\"\")})},t.utcOffset=function(){return-Math.round(this.$d.getTimezoneOffset()/15)*15},t.diff=function(i,e,r){var s=this,_=z.p(e),d=E(i),u=(d.utcOffset()-this.utcOffset())*ce,o=this-d,f=function(){return z.m(s,d)},l;switch(_){case K:l=f()/12;break;case G:l=f();break;case he:l=f()/3;break;case de:l=(o-u)/Cn;break;case V:l=(o-u)/$n;break;case ie:l=o/ge;break;case ne:l=o/ce;break;case te:l=o/se;break;default:l=o;break}return r?l:z.a(l)},t.daysInMonth=function(){return this.endOf(G).$D},t.$locale=function(){return ue[this.$L]},t.locale=function(i,e){if(!i)return this.$L;var r=this.clone(),s=Me(i,e,!0);return s&&(r.$L=s),r},t.clone=function(){return z.w(this.$d,this)},t.toDate=function(){return new Date(this.valueOf())},t.toJSON=function(){return this.isValid()?this.toISOString():null},t.toISOString=function(){return this.$d.toISOString()},t.toString=function(){return this.$d.toUTCString()},n})(),Fn=Ye.prototype;E.prototype=Fn;[[\"$ms\",_e],[\"$s\",te],[\"$m\",ne],[\"$H\",ie],[\"$W\",V],[\"$M\",G],[\"$y\",K],[\"$D\",re]].forEach(function(n){Fn[n[1]]=function(t){return this.$g(t,n[0],n[1])}});E.extend=function(n,t){return n.$i||(n(t,Ye,E),n.$i=!0),E};E.locale=Me;E.isDayjs=ke;E.unix=function(n){return E(n*1e3)};E.en=ue[le];E.Ls=ue;E.p={};var O=E;var Ei=oe(En(),1),Ji=oe(Jn(),1),Ui=oe(Un(),1),Wi=oe(Wn(),1),Pi=oe(Pn(),1);O.extend(Ei.default);O.extend(Ji.default);O.extend(Ui.default);O.extend(Wi.default);O.extend(Pi.default);window.dayjs=O;function sr({defaultFocusedDate:n,displayFormat:t,firstDayOfWeek:a,isAutofocused:i,locale:e,shouldCloseOnDateSelection:r,state:s}){let _=O.tz.guess();return{daysInFocusedMonth:[],displayText:\"\",emptyDaysInFocusedMonth:[],focusedDate:null,focusedMonth:null,focusedYear:null,hour:null,isClearingState:!1,minute:null,second:null,state:s,defaultFocusedDate:n,dayLabels:[],months:[],init(){O.locale(Fi[e]??Fi.en),this.$nextTick(()=>{this.focusedDate??(this.focusedDate=(this.getDefaultFocusedDate()??O()).tz(_)),this.focusedMonth??(this.focusedMonth=this.focusedDate.month()),this.focusedYear??(this.focusedYear=this.focusedDate.year())});let d=this.getSelectedDate()??this.getDefaultFocusedDate()??O().tz(_).hour(0).minute(0).second(0);(this.getMaxDate()!==null&&d.isAfter(this.getMaxDate())||this.getMinDate()!==null&&d.isBefore(this.getMinDate()))&&(d=null),this.hour=d?.hour()??0,this.minute=d?.minute()??0,this.second=d?.second()??0,this.setDisplayText(),this.setMonths(),this.setDayLabels(),i&&this.$nextTick(()=>this.togglePanelVisibility(this.$refs.button)),this.$watch(\"focusedMonth\",()=>{this.focusedMonth=+this.focusedMonth,this.focusedDate.month()!==this.focusedMonth&&(this.focusedDate=this.focusedDate.month(this.focusedMonth))}),this.$watch(\"focusedYear\",()=>{if(this.focusedYear?.length>4&&(this.focusedYear=this.focusedYear.substring(0,4)),!this.focusedYear||this.focusedYear?.length!==4)return;let u=+this.focusedYear;Number.isInteger(u)||(u=O().tz(_).year(),this.focusedYear=u),this.focusedDate.year()!==u&&(this.focusedDate=this.focusedDate.year(u))}),this.$watch(\"focusedDate\",()=>{let u=this.focusedDate.month(),o=this.focusedDate.year();this.focusedMonth!==u&&(this.focusedMonth=u),this.focusedYear!==o&&(this.focusedYear=o),this.setupDaysGrid()}),this.$watch(\"hour\",()=>{let u=+this.hour;if(Number.isInteger(u)?u>23?this.hour=0:u<0?this.hour=23:this.hour=u:this.hour=0,this.isClearingState)return;let o=this.getSelectedDate()??this.focusedDate;this.setState(o.hour(this.hour??0))}),this.$watch(\"minute\",()=>{let u=+this.minute;if(Number.isInteger(u)?u>59?this.minute=0:u<0?this.minute=59:this.minute=u:this.minute=0,this.isClearingState)return;let o=this.getSelectedDate()??this.focusedDate;this.setState(o.minute(this.minute??0))}),this.$watch(\"second\",()=>{let u=+this.second;if(Number.isInteger(u)?u>59?this.second=0:u<0?this.second=59:this.second=u:this.second=0,this.isClearingState)return;let o=this.getSelectedDate()??this.focusedDate;this.setState(o.second(this.second??0))}),this.$watch(\"state\",()=>{if(this.state===void 0)return;let u=this.getSelectedDate();if(u===null){this.clearState();return}this.getMaxDate()!==null&&u?.isAfter(this.getMaxDate())&&(u=null),this.getMinDate()!==null&&u?.isBefore(this.getMinDate())&&(u=null);let o=u?.hour()??0;this.hour!==o&&(this.hour=o);let f=u?.minute()??0;this.minute!==f&&(this.minute=f);let l=u?.second()??0;this.second!==l&&(this.second=l),this.setDisplayText()})},clearState(){this.isClearingState=!0,this.setState(null),this.hour=0,this.minute=0,this.second=0,this.$nextTick(()=>this.isClearingState=!1)},dateIsDisabled(d){return!!(this.$refs?.disabledDates&&JSON.parse(this.$refs.disabledDates.value??[]).some(u=>(u=O(u),u.isValid()?u.isSame(d,\"day\"):!1))||this.getMaxDate()&&d.isAfter(this.getMaxDate(),\"day\")||this.getMinDate()&&d.isBefore(this.getMinDate(),\"day\"))},dayIsDisabled(d){return this.focusedDate??(this.focusedDate=O().tz(_)),this.dateIsDisabled(this.focusedDate.date(d))},dayIsSelected(d){let u=this.getSelectedDate();return u===null?!1:(this.focusedDate??(this.focusedDate=O().tz(_)),u.date()===d&&u.month()===this.focusedDate.month()&&u.year()===this.focusedDate.year())},dayIsToday(d){let u=O().tz(_);return this.focusedDate??(this.focusedDate=u),u.date()===d&&u.month()===this.focusedDate.month()&&u.year()===this.focusedDate.year()},focusPreviousDay(){this.focusedDate??(this.focusedDate=O().tz(_)),this.focusedDate=this.focusedDate.subtract(1,\"day\")},focusPreviousWeek(){this.focusedDate??(this.focusedDate=O().tz(_)),this.focusedDate=this.focusedDate.subtract(1,\"week\")},focusNextDay(){this.focusedDate??(this.focusedDate=O().tz(_)),this.focusedDate=this.focusedDate.add(1,\"day\")},focusNextWeek(){this.focusedDate??(this.focusedDate=O().tz(_)),this.focusedDate=this.focusedDate.add(1,\"week\")},getDayLabels(){let d=O.weekdaysShort();return a===0?d:[...d.slice(a),...d.slice(0,a)]},getMaxDate(){let d=O(this.$refs.maxDate?.value);return d.isValid()?d:null},getMinDate(){let d=O(this.$refs.minDate?.value);return d.isValid()?d:null},getSelectedDate(){if(this.state===void 0||this.state===null)return null;let d=O(this.state);return d.isValid()?d:null},getDefaultFocusedDate(){if(this.defaultFocusedDate===null)return null;let d=O(this.defaultFocusedDate);return d.isValid()?d:null},togglePanelVisibility(){this.isOpen()||(this.focusedDate=this.getSelectedDate()??this.focusedDate??this.getMinDate()??O().tz(_),this.setupDaysGrid()),this.$refs.panel.toggle(this.$refs.button)},selectDate(d=null){d&&this.setFocusedDay(d),this.focusedDate??(this.focusedDate=O().tz(_)),this.setState(this.focusedDate),r&&this.togglePanelVisibility()},setDisplayText(){this.displayText=this.getSelectedDate()?this.getSelectedDate().format(t):\"\"},setMonths(){this.months=O.months()},setDayLabels(){this.dayLabels=this.getDayLabels()},setupDaysGrid(){this.focusedDate??(this.focusedDate=O().tz(_)),this.emptyDaysInFocusedMonth=Array.from({length:this.focusedDate.date(8-a).day()},(d,u)=>u+1),this.daysInFocusedMonth=Array.from({length:this.focusedDate.daysInMonth()},(d,u)=>u+1)},setFocusedDay(d){this.focusedDate=(this.focusedDate??O().tz(_)).date(d)},setState(d){if(d===null){this.state=null,this.setDisplayText();return}this.dateIsDisabled(d)||(this.state=d.hour(this.hour??0).minute(this.minute??0).second(this.second??0).format(\"YYYY-MM-DD HH:mm:ss\"),this.setDisplayText())},isOpen(){return this.$refs.panel?.style.display===\"block\"}}}var Fi={am:Gn(),ar:Rn(),bs:Zn(),ca:Vn(),ckb:Re(),cs:Qn(),cy:Xn(),da:Bn(),de:ei(),el:ti(),en:ni(),es:ii(),et:ri(),fa:ai(),fi:si(),fr:ui(),he:di(),hi:oi(),hu:_i(),hy:li(),id:fi(),it:mi(),ja:ci(),ka:hi(),km:Mi(),ku:Re(),lt:Yi(),lv:yi(),ms:pi(),my:Li(),nb:Di(),nl:vi(),pl:gi(),pt:bi(),pt_BR:Si(),ro:ki(),ru:Hi(),sl:ji(),sr_Cyrl:Ti(),sr_Latn:wi(),sv:$i(),th:Ci(),tr:Oi(),uk:zi(),ur:Ai(),vi:qi(),zh_CN:Ii(),zh_HK:xi(),zh_TW:Ni()};export{sr as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/file-upload.js",
    "content": "var vr=Object.defineProperty;var xr=(e,t)=>{for(var i in t)vr(e,i,{get:t[i],enumerable:!0})};var na={};xr(na,{FileOrigin:()=>Bt,FileStatus:()=>Tt,OptionTypes:()=>Gi,Status:()=>ll,create:()=>ft,destroy:()=>ht,find:()=>Hi,getOptions:()=>Wi,parse:()=>Ui,registerPlugin:()=>ve,setOptions:()=>Dt,supported:()=>Vi});var yr=e=>e instanceof HTMLElement,Rr=(e,t=[],i=[])=>{let a={...e},n=[],l=[],o=()=>({...a}),r=()=>{let g=[...n];return n.length=0,g},s=()=>{let g=[...l];l.length=0,g.forEach(({type:f,data:h})=>{p(f,h)})},p=(g,f,h)=>{if(h&&!document.hidden){l.push({type:g,data:f});return}u[g]&&u[g](f),n.push({type:g,data:f})},c=(g,...f)=>m[g]?m[g](...f):null,d={getState:o,processActionQueue:r,processDispatchQueue:s,dispatch:p,query:c},m={};t.forEach(g=>{m={...g(a),...m}});let u={};return i.forEach(g=>{u={...g(p,c,a),...u}}),d},Sr=(e,t,i)=>{if(typeof i==\"function\"){e[t]=i;return}Object.defineProperty(e,t,{...i})},te=(e,t)=>{for(let i in e)e.hasOwnProperty(i)&&t(i,e[i])},He=e=>{let t={};return te(e,i=>{Sr(t,i,e[i])}),t},se=(e,t,i=null)=>{if(i===null)return e.getAttribute(t)||e.hasAttribute(t);e.setAttribute(t,i)},_r=\"http://www.w3.org/2000/svg\",wr=[\"svg\",\"path\"],Pa=e=>wr.includes(e),li=(e,t,i={})=>{typeof t==\"object\"&&(i=t,t=null);let a=Pa(e)?document.createElementNS(_r,e):document.createElement(e);return t&&(Pa(e)?se(a,\"class\",t):a.className=t),te(i,(n,l)=>{se(a,n,l)}),a},Lr=e=>(t,i)=>{typeof i<\"u\"&&e.children[i]?e.insertBefore(t,e.children[i]):e.appendChild(t)},Mr=(e,t)=>(i,a)=>(typeof a<\"u\"?t.splice(a,0,i):t.push(i),i),Ar=(e,t)=>i=>(t.splice(t.indexOf(i),1),i.element.parentNode&&e.removeChild(i.element),i),zr=typeof window<\"u\"&&typeof window.document<\"u\",En=()=>zr,Pr=En()?li(\"svg\"):{},Fr=\"children\"in Pr?e=>e.children.length:e=>e.childNodes.length,Tn=(e,t,i,a)=>{let n=i[0]||e.left,l=i[1]||e.top,o=n+e.width,r=l+e.height*(a[1]||1),s={element:{...e},inner:{left:e.left,top:e.top,right:e.right,bottom:e.bottom},outer:{left:n,top:l,right:o,bottom:r}};return t.filter(p=>!p.isRectIgnored()).map(p=>p.rect).forEach(p=>{Fa(s.inner,{...p.inner}),Fa(s.outer,{...p.outer})}),Oa(s.inner),s.outer.bottom+=s.element.marginBottom,s.outer.right+=s.element.marginRight,Oa(s.outer),s},Fa=(e,t)=>{t.top+=e.top,t.right+=e.left,t.bottom+=e.top,t.left+=e.left,t.bottom>e.bottom&&(e.bottom=t.bottom),t.right>e.right&&(e.right=t.right)},Oa=e=>{e.width=e.right-e.left,e.height=e.bottom-e.top},Xe=e=>typeof e==\"number\",Or=(e,t,i,a=.001)=>Math.abs(e-t)<a&&Math.abs(i)<a,Dr=({stiffness:e=.5,damping:t=.75,mass:i=10}={})=>{let a=null,n=null,l=0,o=!1,p=He({interpolate:(c,d)=>{if(o)return;if(!(Xe(a)&&Xe(n))){o=!0,l=0;return}let m=-(n-a)*e;l+=m/i,n+=l,l*=t,Or(n,a,l)||d?(n=a,l=0,o=!0,p.onupdate(n),p.oncomplete(n)):p.onupdate(n)},target:{set:c=>{if(Xe(c)&&!Xe(n)&&(n=c),a===null&&(a=c,n=c),a=c,n===a||typeof a>\"u\"){o=!0,l=0,p.onupdate(n),p.oncomplete(n);return}o=!1},get:()=>a},resting:{get:()=>o},onupdate:c=>{},oncomplete:c=>{}});return p};var Cr=e=>e<.5?2*e*e:-1+(4-2*e)*e,Br=({duration:e=500,easing:t=Cr,delay:i=0}={})=>{let a=null,n,l,o=!0,r=!1,s=null,c=He({interpolate:(d,m)=>{o||s===null||(a===null&&(a=d),!(d-a<i)&&(n=d-a-i,n>=e||m?(n=1,l=r?0:1,c.onupdate(l*s),c.oncomplete(l*s),o=!0):(l=n/e,c.onupdate((n>=0?t(r?1-l:l):0)*s))))},target:{get:()=>r?0:s,set:d=>{if(s===null){s=d,c.onupdate(d),c.oncomplete(d);return}d<s?(s=1,r=!0):(r=!1,s=d),o=!1,a=null}},resting:{get:()=>o},onupdate:d=>{},oncomplete:d=>{}});return c},Da={spring:Dr,tween:Br},kr=(e,t,i)=>{let a=e[t]&&typeof e[t][i]==\"object\"?e[t][i]:e[t]||e,n=typeof a==\"string\"?a:a.type,l=typeof a==\"object\"?{...a}:{};return Da[n]?Da[n](l):null},ji=(e,t,i,a=!1)=>{t=Array.isArray(t)?t:[t],t.forEach(n=>{e.forEach(l=>{let o=l,r=()=>i[l],s=p=>i[l]=p;typeof l==\"object\"&&(o=l.key,r=l.getter||r,s=l.setter||s),!(n[o]&&!a)&&(n[o]={get:r,set:s})})})},Nr=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a})=>{let n={...t},l=[];return te(e,(o,r)=>{let s=kr(r);if(!s)return;s.onupdate=c=>{t[o]=c},s.target=n[o],ji([{key:o,setter:c=>{s.target!==c&&(s.target=c)},getter:()=>t[o]}],[i,a],t,!0),l.push(s)}),{write:o=>{let r=document.hidden,s=!0;return l.forEach(p=>{p.resting||(s=!1),p.interpolate(o,r)}),s},destroy:()=>{}}},Vr=e=>(t,i)=>{e.addEventListener(t,i)},Gr=e=>(t,i)=>{e.removeEventListener(t,i)},Ur=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,viewState:n,view:l})=>{let o=[],r=Vr(l.element),s=Gr(l.element);return a.on=(p,c)=>{o.push({type:p,fn:c}),r(p,c)},a.off=(p,c)=>{o.splice(o.findIndex(d=>d.type===p&&d.fn===c),1),s(p,c)},{write:()=>!0,destroy:()=>{o.forEach(p=>{s(p.type,p.fn)})}}},Hr=({mixinConfig:e,viewProps:t,viewExternalAPI:i})=>{ji(e,i,t)},ue=e=>e!=null,Wr={opacity:1,scaleX:1,scaleY:1,translateX:0,translateY:0,rotateX:0,rotateY:0,rotateZ:0,originX:0,originY:0},jr=({mixinConfig:e,viewProps:t,viewInternalAPI:i,viewExternalAPI:a,view:n})=>{let l={...t},o={};ji(e,[i,a],t);let r=()=>[t.translateX||0,t.translateY||0],s=()=>[t.scaleX||0,t.scaleY||0],p=()=>n.rect?Tn(n.rect,n.childViews,r(),s()):null;return i.rect={get:p},a.rect={get:p},e.forEach(c=>{t[c]=typeof l[c]>\"u\"?Wr[c]:l[c]}),{write:()=>{if(Yr(o,t))return qr(n.element,t),Object.assign(o,{...t}),!0},destroy:()=>{}}},Yr=(e,t)=>{if(Object.keys(e).length!==Object.keys(t).length)return!0;for(let i in t)if(t[i]!==e[i])return!0;return!1},qr=(e,{opacity:t,perspective:i,translateX:a,translateY:n,scaleX:l,scaleY:o,rotateX:r,rotateY:s,rotateZ:p,originX:c,originY:d,width:m,height:u})=>{let g=\"\",f=\"\";(ue(c)||ue(d))&&(f+=`transform-origin: ${c||0}px ${d||0}px;`),ue(i)&&(g+=`perspective(${i}px) `),(ue(a)||ue(n))&&(g+=`translate3d(${a||0}px, ${n||0}px, 0) `),(ue(l)||ue(o))&&(g+=`scale3d(${ue(l)?l:1}, ${ue(o)?o:1}, 1) `),ue(p)&&(g+=`rotateZ(${p}rad) `),ue(r)&&(g+=`rotateX(${r}rad) `),ue(s)&&(g+=`rotateY(${s}rad) `),g.length&&(f+=`transform:${g};`),ue(t)&&(f+=`opacity:${t};`,t===0&&(f+=\"visibility:hidden;\"),t<1&&(f+=\"pointer-events:none;\")),ue(u)&&(f+=`height:${u}px;`),ue(m)&&(f+=`width:${m}px;`);let h=e.elementCurrentStyle||\"\";(f.length!==h.length||f!==h)&&(e.style.cssText=f,e.elementCurrentStyle=f)},$r={styles:jr,listeners:Ur,animations:Nr,apis:Hr},Ca=(e={},t={},i={})=>(t.layoutCalculated||(e.paddingTop=parseInt(i.paddingTop,10)||0,e.marginTop=parseInt(i.marginTop,10)||0,e.marginRight=parseInt(i.marginRight,10)||0,e.marginBottom=parseInt(i.marginBottom,10)||0,e.marginLeft=parseInt(i.marginLeft,10)||0,t.layoutCalculated=!0),e.left=t.offsetLeft||0,e.top=t.offsetTop||0,e.width=t.offsetWidth||0,e.height=t.offsetHeight||0,e.right=e.left+e.width,e.bottom=e.top+e.height,e.scrollTop=t.scrollTop,e.hidden=t.offsetParent===null,e),le=({tag:e=\"div\",name:t=null,attributes:i={},read:a=()=>{},write:n=()=>{},create:l=()=>{},destroy:o=()=>{},filterFrameActionsForChild:r=(u,g)=>g,didCreateView:s=()=>{},didWriteView:p=()=>{},ignoreRect:c=!1,ignoreRectUpdate:d=!1,mixins:m=[]}={})=>(u,g={})=>{let f=li(e,`filepond--${t}`,i),h=window.getComputedStyle(f,null),I=Ca(),b=null,E=!1,v=[],y=[],T={},_={},x=[n],R=[a],P=[o],z=()=>f,A=()=>v.concat(),B=()=>T,w=V=>(W,$)=>W(V,$),F=()=>b||(b=Tn(I,v,[0,0],[1,1]),b),S=()=>h,L=()=>{b=null,v.forEach($=>$._read()),!(d&&I.width&&I.height)&&Ca(I,f,h);let W={root:Z,props:g,rect:I};R.forEach($=>$(W))},D=(V,W,$)=>{let ie=W.length===0;return x.forEach(ee=>{ee({props:g,root:Z,actions:W,timestamp:V,shouldOptimize:$})===!1&&(ie=!1)}),y.forEach(ee=>{ee.write(V)===!1&&(ie=!1)}),v.filter(ee=>!!ee.element.parentNode).forEach(ee=>{ee._write(V,r(ee,W),$)||(ie=!1)}),v.forEach((ee,pt)=>{ee.element.parentNode||(Z.appendChild(ee.element,pt),ee._read(),ee._write(V,r(ee,W),$),ie=!1)}),E=ie,p({props:g,root:Z,actions:W,timestamp:V}),ie},O=()=>{y.forEach(V=>V.destroy()),P.forEach(V=>{V({root:Z,props:g})}),v.forEach(V=>V._destroy())},U={element:{get:z},style:{get:S},childViews:{get:A}},C={...U,rect:{get:F},ref:{get:B},is:V=>t===V,appendChild:Lr(f),createChildView:w(u),linkView:V=>(v.push(V),V),unlinkView:V=>{v.splice(v.indexOf(V),1)},appendChildView:Mr(f,v),removeChildView:Ar(f,v),registerWriter:V=>x.push(V),registerReader:V=>R.push(V),registerDestroyer:V=>P.push(V),invalidateLayout:()=>f.layoutCalculated=!1,dispatch:u.dispatch,query:u.query},X={element:{get:z},childViews:{get:A},rect:{get:F},resting:{get:()=>E},isRectIgnored:()=>c,_read:L,_write:D,_destroy:O},K={...U,rect:{get:()=>I}};Object.keys(m).sort((V,W)=>V===\"styles\"?1:W===\"styles\"?-1:0).forEach(V=>{let W=$r[V]({mixinConfig:m[V],viewProps:g,viewState:_,viewInternalAPI:C,viewExternalAPI:X,view:He(K)});W&&y.push(W)});let Z=He(C);l({root:Z,props:g});let ce=Fr(f);return v.forEach((V,W)=>{Z.appendChild(V.element,ce+W)}),s(Z),He(X)},Xr=(e,t,i=60)=>{let a=\"__framePainter\";if(window[a]){window[a].readers.push(e),window[a].writers.push(t);return}window[a]={readers:[e],writers:[t]};let n=window[a],l=1e3/i,o=null,r=null,s=null,p=null,c=()=>{document.hidden?(s=()=>window.setTimeout(()=>d(performance.now()),l),p=()=>window.clearTimeout(r)):(s=()=>window.requestAnimationFrame(d),p=()=>window.cancelAnimationFrame(r))};document.addEventListener(\"visibilitychange\",()=>{p&&p(),c(),d(performance.now())});let d=m=>{r=s(d),o||(o=m);let u=m-o;u<=l||(o=m-u%l,n.readers.forEach(g=>g()),n.writers.forEach(g=>g(m)))};return c(),d(performance.now()),{pause:()=>{p(r)}}},fe=(e,t)=>({root:i,props:a,actions:n=[],timestamp:l,shouldOptimize:o})=>{n.filter(r=>e[r.type]).forEach(r=>e[r.type]({root:i,props:a,action:r.data,timestamp:l,shouldOptimize:o})),t&&t({root:i,props:a,actions:n,timestamp:l,shouldOptimize:o})},Ba=(e,t)=>t.parentNode.insertBefore(e,t),ka=(e,t)=>t.parentNode.insertBefore(e,t.nextSibling),ci=e=>Array.isArray(e),Ve=e=>e==null,Kr=e=>e.trim(),di=e=>\"\"+e,Zr=(e,t=\",\")=>Ve(e)?[]:ci(e)?e:di(e).split(t).map(Kr).filter(i=>i.length),In=e=>typeof e==\"boolean\",vn=e=>In(e)?e:e===\"true\",ge=e=>typeof e==\"string\",xn=e=>Xe(e)?e:ge(e)?di(e).replace(/[a-z]+/gi,\"\"):0,ni=e=>parseInt(xn(e),10),Na=e=>parseFloat(xn(e)),Et=e=>Xe(e)&&isFinite(e)&&Math.floor(e)===e,Va=(e,t=1e3)=>{if(Et(e))return e;let i=di(e).trim();return/MB$/i.test(i)?(i=i.replace(/MB$i/,\"\").trim(),ni(i)*t*t):/KB/i.test(i)?(i=i.replace(/KB$i/,\"\").trim(),ni(i)*t):ni(i)},Ke=e=>typeof e==\"function\",Qr=e=>{let t=self,i=e.split(\".\"),a=null;for(;a=i.shift();)if(t=t[a],!t)return null;return t},Ga={process:\"POST\",patch:\"PATCH\",revert:\"DELETE\",fetch:\"GET\",restore:\"GET\",load:\"GET\"},Jr=e=>{let t={};return t.url=ge(e)?e:e.url||\"\",t.timeout=e.timeout?parseInt(e.timeout,10):0,t.headers=e.headers?e.headers:{},te(Ga,i=>{t[i]=es(i,e[i],Ga[i],t.timeout,t.headers)}),t.process=e.process||ge(e)||e.url?t.process:null,t.remove=e.remove||null,delete t.headers,t},es=(e,t,i,a,n)=>{if(t===null)return null;if(typeof t==\"function\")return t;let l={url:i===\"GET\"||i===\"PATCH\"?`?${e}=`:\"\",method:i,headers:n,withCredentials:!1,timeout:a,onload:null,ondata:null,onerror:null};if(ge(t))return l.url=t,l;if(Object.assign(l,t),ge(l.headers)){let o=l.headers.split(/:(.+)/);l.headers={header:o[0],value:o[1]}}return l.withCredentials=vn(l.withCredentials),l},ts=e=>Jr(e),is=e=>e===null,de=e=>typeof e==\"object\"&&e!==null,as=e=>de(e)&&ge(e.url)&&de(e.process)&&de(e.revert)&&de(e.restore)&&de(e.fetch),Pi=e=>ci(e)?\"array\":is(e)?\"null\":Et(e)?\"int\":/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(e)?\"bytes\":as(e)?\"api\":typeof e,ns=e=>e.replace(/{\\s*'/g,'{\"').replace(/'\\s*}/g,'\"}').replace(/'\\s*:/g,'\":').replace(/:\\s*'/g,':\"').replace(/,\\s*'/g,',\"').replace(/'\\s*,/g,'\",'),ls={array:Zr,boolean:vn,int:e=>Pi(e)===\"bytes\"?Va(e):ni(e),number:Na,float:Na,bytes:Va,string:e=>Ke(e)?e:di(e),function:e=>Qr(e),serverapi:ts,object:e=>{try{return JSON.parse(ns(e))}catch{return null}}},os=(e,t)=>ls[t](e),yn=(e,t,i)=>{if(e===t)return e;let a=Pi(e);if(a!==i){let n=os(e,i);if(a=Pi(n),n===null)throw`Trying to assign value with incorrect type to \"${option}\", allowed type: \"${i}\"`;e=n}return e},rs=(e,t)=>{let i=e;return{enumerable:!0,get:()=>i,set:a=>{i=yn(a,e,t)}}},ss=e=>{let t={};return te(e,i=>{let a=e[i];t[i]=rs(a[0],a[1])}),He(t)},cs=e=>({items:[],listUpdateTimeout:null,itemUpdateTimeout:null,processingQueue:[],options:ss(e)}),pi=(e,t=\"-\")=>e.split(/(?=[A-Z])/).map(i=>i.toLowerCase()).join(t),ds=(e,t)=>{let i={};return te(t,a=>{i[a]={get:()=>e.getState().options[a],set:n=>{e.dispatch(`SET_${pi(a,\"_\").toUpperCase()}`,{value:n})}}}),i},ps=e=>(t,i,a)=>{let n={};return te(e,l=>{let o=pi(l,\"_\").toUpperCase();n[`SET_${o}`]=r=>{try{a.options[l]=r.value}catch{}t(`DID_SET_${o}`,{value:a.options[l]})}}),n},ms=e=>t=>{let i={};return te(e,a=>{i[`GET_${pi(a,\"_\").toUpperCase()}`]=n=>t.options[a]}),i},Re={API:1,DROP:2,BROWSE:3,PASTE:4,NONE:5},Yi=()=>Math.random().toString(36).substring(2,11),qi=(e,t)=>e.splice(t,1),us=(e,t)=>{t?e():document.hidden?Promise.resolve(1).then(e):setTimeout(e,0)},mi=()=>{let e=[],t=(a,n)=>{qi(e,e.findIndex(l=>l.event===a&&(l.cb===n||!n)))},i=(a,n,l)=>{e.filter(o=>o.event===a).map(o=>o.cb).forEach(o=>us(()=>o(...n),l))};return{fireSync:(a,...n)=>{i(a,n,!0)},fire:(a,...n)=>{i(a,n,!1)},on:(a,n)=>{e.push({event:a,cb:n})},onOnce:(a,n)=>{e.push({event:a,cb:(...l)=>{t(a,n),n(...l)}})},off:t}},Rn=(e,t,i)=>{Object.getOwnPropertyNames(e).filter(a=>!i.includes(a)).forEach(a=>Object.defineProperty(t,a,Object.getOwnPropertyDescriptor(e,a)))},gs=[\"fire\",\"process\",\"revert\",\"load\",\"on\",\"off\",\"onOnce\",\"retryLoad\",\"extend\",\"archive\",\"archived\",\"release\",\"released\",\"requestProcessing\",\"freeze\"],he=e=>{let t={};return Rn(e,t,gs),t},fs=e=>{e.forEach((t,i)=>{t.released&&qi(e,i)})},H={INIT:1,IDLE:2,PROCESSING_QUEUED:9,PROCESSING:3,PROCESSING_COMPLETE:5,PROCESSING_ERROR:6,PROCESSING_REVERT_ERROR:10,LOADING:7,LOAD_ERROR:8},re={INPUT:1,LIMBO:2,LOCAL:3},Sn=e=>/[^0-9]+/.exec(e),_n=()=>Sn(1.1.toLocaleString())[0],hs=()=>{let e=_n(),t=1e3.toLocaleString();return t!==\"1000\"?Sn(t)[0]:e===\".\"?\",\":\".\"},M={BOOLEAN:\"boolean\",INT:\"int\",NUMBER:\"number\",STRING:\"string\",ARRAY:\"array\",OBJECT:\"object\",FUNCTION:\"function\",ACTION:\"action\",SERVER_API:\"serverapi\",REGEX:\"regex\"},$i=[],Ae=(e,t,i)=>new Promise((a,n)=>{let l=$i.filter(r=>r.key===e).map(r=>r.cb);if(l.length===0){a(t);return}let o=l.shift();l.reduce((r,s)=>r.then(p=>s(p,i)),o(t,i)).then(r=>a(r)).catch(r=>n(r))}),it=(e,t,i)=>$i.filter(a=>a.key===e).map(a=>a.cb(t,i)),bs=(e,t)=>$i.push({key:e,cb:t}),Es=e=>Object.assign(mt,e),oi=()=>({...mt}),Ts=e=>{te(e,(t,i)=>{mt[t]&&(mt[t][0]=yn(i,mt[t][0],mt[t][1]))})},mt={id:[null,M.STRING],name:[\"filepond\",M.STRING],disabled:[!1,M.BOOLEAN],className:[null,M.STRING],required:[!1,M.BOOLEAN],captureMethod:[null,M.STRING],allowSyncAcceptAttribute:[!0,M.BOOLEAN],allowDrop:[!0,M.BOOLEAN],allowBrowse:[!0,M.BOOLEAN],allowPaste:[!0,M.BOOLEAN],allowMultiple:[!1,M.BOOLEAN],allowReplace:[!0,M.BOOLEAN],allowRevert:[!0,M.BOOLEAN],allowRemove:[!0,M.BOOLEAN],allowProcess:[!0,M.BOOLEAN],allowReorder:[!1,M.BOOLEAN],allowDirectoriesOnly:[!1,M.BOOLEAN],storeAsFile:[!1,M.BOOLEAN],forceRevert:[!1,M.BOOLEAN],maxFiles:[null,M.INT],checkValidity:[!1,M.BOOLEAN],itemInsertLocationFreedom:[!0,M.BOOLEAN],itemInsertLocation:[\"before\",M.STRING],itemInsertInterval:[75,M.INT],dropOnPage:[!1,M.BOOLEAN],dropOnElement:[!0,M.BOOLEAN],dropValidation:[!1,M.BOOLEAN],ignoredFiles:[[\".ds_store\",\"thumbs.db\",\"desktop.ini\"],M.ARRAY],instantUpload:[!0,M.BOOLEAN],maxParallelUploads:[2,M.INT],allowMinimumUploadDuration:[!0,M.BOOLEAN],chunkUploads:[!1,M.BOOLEAN],chunkForce:[!1,M.BOOLEAN],chunkSize:[5e6,M.INT],chunkRetryDelays:[[500,1e3,3e3],M.ARRAY],server:[null,M.SERVER_API],fileSizeBase:[1e3,M.INT],labelFileSizeBytes:[\"bytes\",M.STRING],labelFileSizeKilobytes:[\"KB\",M.STRING],labelFileSizeMegabytes:[\"MB\",M.STRING],labelFileSizeGigabytes:[\"GB\",M.STRING],labelDecimalSeparator:[_n(),M.STRING],labelThousandsSeparator:[hs(),M.STRING],labelIdle:['Drag & Drop your files or <span class=\"filepond--label-action\">Browse</span>',M.STRING],labelInvalidField:[\"Field contains invalid files\",M.STRING],labelFileWaitingForSize:[\"Waiting for size\",M.STRING],labelFileSizeNotAvailable:[\"Size not available\",M.STRING],labelFileCountSingular:[\"file in list\",M.STRING],labelFileCountPlural:[\"files in list\",M.STRING],labelFileLoading:[\"Loading\",M.STRING],labelFileAdded:[\"Added\",M.STRING],labelFileLoadError:[\"Error during load\",M.STRING],labelFileRemoved:[\"Removed\",M.STRING],labelFileRemoveError:[\"Error during remove\",M.STRING],labelFileProcessing:[\"Uploading\",M.STRING],labelFileProcessingComplete:[\"Upload complete\",M.STRING],labelFileProcessingAborted:[\"Upload cancelled\",M.STRING],labelFileProcessingError:[\"Error during upload\",M.STRING],labelFileProcessingRevertError:[\"Error during revert\",M.STRING],labelTapToCancel:[\"tap to cancel\",M.STRING],labelTapToRetry:[\"tap to retry\",M.STRING],labelTapToUndo:[\"tap to undo\",M.STRING],labelButtonRemoveItem:[\"Remove\",M.STRING],labelButtonAbortItemLoad:[\"Abort\",M.STRING],labelButtonRetryItemLoad:[\"Retry\",M.STRING],labelButtonAbortItemProcessing:[\"Cancel\",M.STRING],labelButtonUndoItemProcessing:[\"Undo\",M.STRING],labelButtonRetryItemProcessing:[\"Retry\",M.STRING],labelButtonProcessItem:[\"Upload\",M.STRING],iconRemove:['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.586 13l-2.293 2.293a1 1 0 0 0 1.414 1.414L13 14.414l2.293 2.293a1 1 0 0 0 1.414-1.414L14.414 13l2.293-2.293a1 1 0 0 0-1.414-1.414L13 11.586l-2.293-2.293a1 1 0 0 0-1.414 1.414L11.586 13z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',M.STRING],iconProcess:['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 10.414v3.585a1 1 0 0 1-2 0v-3.585l-1.293 1.293a1 1 0 0 1-1.414-1.415l3-3a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1-1.414 1.415L14 10.414zM9 18a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2H9z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>',M.STRING],iconRetry:['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.81 9.185l-.038.02A4.997 4.997 0 0 0 8 13.683a5 5 0 0 0 5 5 5 5 0 0 0 5-5 1 1 0 0 1 2 0A7 7 0 1 1 9.722 7.496l-.842-.21a.999.999 0 1 1 .484-1.94l3.23.806c.535.133.86.675.73 1.21l-.804 3.233a.997.997 0 0 1-1.21.73.997.997 0 0 1-.73-1.21l.23-.928v-.002z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',M.STRING],iconUndo:['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.185 10.81l.02-.038A4.997 4.997 0 0 1 13.683 8a5 5 0 0 1 5 5 5 5 0 0 1-5 5 1 1 0 0 0 0 2A7 7 0 1 0 7.496 9.722l-.21-.842a.999.999 0 1 0-1.94.484l.806 3.23c.133.535.675.86 1.21.73l3.233-.803a.997.997 0 0 0 .73-1.21.997.997 0 0 0-1.21-.73l-.928.23-.002-.001z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',M.STRING],iconDone:['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.293 9.293a1 1 0 0 1 1.414 1.414l-7.002 7a1 1 0 0 1-1.414 0l-3.998-4a1 1 0 1 1 1.414-1.414L12 15.586l6.294-6.293z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',M.STRING],oninit:[null,M.FUNCTION],onwarning:[null,M.FUNCTION],onerror:[null,M.FUNCTION],onactivatefile:[null,M.FUNCTION],oninitfile:[null,M.FUNCTION],onaddfilestart:[null,M.FUNCTION],onaddfileprogress:[null,M.FUNCTION],onaddfile:[null,M.FUNCTION],onprocessfilestart:[null,M.FUNCTION],onprocessfileprogress:[null,M.FUNCTION],onprocessfileabort:[null,M.FUNCTION],onprocessfilerevert:[null,M.FUNCTION],onprocessfile:[null,M.FUNCTION],onprocessfiles:[null,M.FUNCTION],onremovefile:[null,M.FUNCTION],onpreparefile:[null,M.FUNCTION],onupdatefiles:[null,M.FUNCTION],onreorderfiles:[null,M.FUNCTION],beforeDropFile:[null,M.FUNCTION],beforeAddFile:[null,M.FUNCTION],beforeRemoveFile:[null,M.FUNCTION],beforePrepareFile:[null,M.FUNCTION],stylePanelLayout:[null,M.STRING],stylePanelAspectRatio:[null,M.STRING],styleItemPanelAspectRatio:[null,M.STRING],styleButtonRemoveItemPosition:[\"left\",M.STRING],styleButtonProcessItemPosition:[\"right\",M.STRING],styleLoadIndicatorPosition:[\"right\",M.STRING],styleProgressIndicatorPosition:[\"right\",M.STRING],styleButtonRemoveItemAlign:[!1,M.BOOLEAN],files:[[],M.ARRAY],credits:[[\"https://pqina.nl/\",\"Powered by PQINA\"],M.ARRAY]},Ze=(e,t)=>Ve(t)?e[0]||null:Et(t)?e[t]||null:(typeof t==\"object\"&&(t=t.id),e.find(i=>i.id===t)||null),wn=e=>{if(Ve(e))return e;if(/:/.test(e)){let t=e.split(\":\");return t[1]/t[0]}return parseFloat(e)},ze=e=>e.filter(t=>!t.archived),Ln={EMPTY:0,IDLE:1,ERROR:2,BUSY:3,READY:4},Qt=null,Is=()=>{if(Qt===null)try{let e=new DataTransfer;e.items.add(new File([\"hello world\"],\"This_Works.txt\"));let t=document.createElement(\"input\");t.setAttribute(\"type\",\"file\"),t.files=e.files,Qt=t.files.length===1}catch{Qt=!1}return Qt},vs=[H.LOAD_ERROR,H.PROCESSING_ERROR,H.PROCESSING_REVERT_ERROR],xs=[H.LOADING,H.PROCESSING,H.PROCESSING_QUEUED,H.INIT],ys=[H.PROCESSING_COMPLETE],Rs=e=>vs.includes(e.status),Ss=e=>xs.includes(e.status),_s=e=>ys.includes(e.status),Ua=e=>de(e.options.server)&&(de(e.options.server.process)||Ke(e.options.server.process)),ws=e=>({GET_STATUS:()=>{let t=ze(e.items),{EMPTY:i,ERROR:a,BUSY:n,IDLE:l,READY:o}=Ln;return t.length===0?i:t.some(Rs)?a:t.some(Ss)?n:t.some(_s)?o:l},GET_ITEM:t=>Ze(e.items,t),GET_ACTIVE_ITEM:t=>Ze(ze(e.items),t),GET_ACTIVE_ITEMS:()=>ze(e.items),GET_ITEMS:()=>e.items,GET_ITEM_NAME:t=>{let i=Ze(e.items,t);return i?i.filename:null},GET_ITEM_SIZE:t=>{let i=Ze(e.items,t);return i?i.fileSize:null},GET_STYLES:()=>Object.keys(e.options).filter(t=>/^style/.test(t)).map(t=>({name:t,value:e.options[t]})),GET_PANEL_ASPECT_RATIO:()=>/circle/.test(e.options.stylePanelLayout)?1:wn(e.options.stylePanelAspectRatio),GET_ITEM_PANEL_ASPECT_RATIO:()=>e.options.styleItemPanelAspectRatio,GET_ITEMS_BY_STATUS:t=>ze(e.items).filter(i=>i.status===t),GET_TOTAL_ITEMS:()=>ze(e.items).length,SHOULD_UPDATE_FILE_INPUT:()=>e.options.storeAsFile&&Is()&&!Ua(e),IS_ASYNC:()=>Ua(e),GET_FILE_SIZE_LABELS:t=>({labelBytes:t(\"GET_LABEL_FILE_SIZE_BYTES\")||void 0,labelKilobytes:t(\"GET_LABEL_FILE_SIZE_KILOBYTES\")||void 0,labelMegabytes:t(\"GET_LABEL_FILE_SIZE_MEGABYTES\")||void 0,labelGigabytes:t(\"GET_LABEL_FILE_SIZE_GIGABYTES\")||void 0})}),Ls=e=>{let t=ze(e.items).length;if(!e.options.allowMultiple)return t===0;let i=e.options.maxFiles;return i===null||t<i},Mn=(e,t,i)=>Math.max(Math.min(i,e),t),Ms=(e,t,i)=>e.splice(t,0,i),As=(e,t,i)=>Ve(t)?null:typeof i>\"u\"?(e.push(t),t):(i=Mn(i,0,e.length),Ms(e,i,t),t),Fi=e=>/^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(e),Ct=e=>`${e}`.split(\"/\").pop().split(\"?\").shift(),ui=e=>e.split(\".\").pop(),zs=e=>{if(typeof e!=\"string\")return\"\";let t=e.split(\"/\").pop();return/svg/.test(t)?\"svg\":/zip|compressed/.test(t)?\"zip\":/plain/.test(t)?\"txt\":/msword/.test(t)?\"doc\":/[a-z]+/.test(t)?t===\"jpeg\"?\"jpg\":t:\"\"},zt=(e,t=\"\")=>(t+e).slice(-t.length),An=(e=new Date)=>`${e.getFullYear()}-${zt(e.getMonth()+1,\"00\")}-${zt(e.getDate(),\"00\")}_${zt(e.getHours(),\"00\")}-${zt(e.getMinutes(),\"00\")}-${zt(e.getSeconds(),\"00\")}`,bt=(e,t,i=null,a=null)=>{let n=typeof i==\"string\"?e.slice(0,e.size,i):e.slice(0,e.size,e.type);return n.lastModifiedDate=new Date,e._relativePath&&(n._relativePath=e._relativePath),ge(t)||(t=An()),t&&a===null&&ui(t)?n.name=t:(a=a||zs(n.type),n.name=t+(a?\".\"+a:\"\")),n},Ps=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,zn=(e,t)=>{let i=Ps();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},Fs=(e,t)=>{let i=new ArrayBuffer(e.length),a=new Uint8Array(i);for(let n=0;n<e.length;n++)a[n]=e.charCodeAt(n);return zn(i,t)},Pn=e=>(/^data:(.+);/.exec(e)||[])[1]||null,Os=e=>e.split(\",\")[1].replace(/\\s/g,\"\"),Ds=e=>atob(Os(e)),Cs=e=>{let t=Pn(e),i=Ds(e);return Fs(i,t)},Bs=(e,t,i)=>bt(Cs(e),t,null,i),ks=e=>{if(!/^content-disposition:/i.test(e))return null;let t=e.split(/filename=|filename\\*=.+''/).splice(1).map(i=>i.trim().replace(/^[\"']|[;\"']{0,2}$/g,\"\")).filter(i=>i.length);return t.length?decodeURI(t[t.length-1]):null},Ns=e=>{if(/content-length:/i.test(e)){let t=e.match(/[0-9]+/)[0];return t?parseInt(t,10):null}return null},Vs=e=>/x-content-transfer-id:/i.test(e)&&(e.split(\":\")[1]||\"\").trim()||null,Xi=e=>{let t={source:null,name:null,size:null},i=e.split(`\n`);for(let a of i){let n=ks(a);if(n){t.name=n;continue}let l=Ns(a);if(l){t.size=l;continue}let o=Vs(a);if(o){t.source=o;continue}}return t},Gs=e=>{let t={source:null,complete:!1,progress:0,size:null,timestamp:null,duration:0,request:null},i=()=>t.progress,a=()=>{t.request&&t.request.abort&&t.request.abort()},n=()=>{let r=t.source;o.fire(\"init\",r),r instanceof File?o.fire(\"load\",r):r instanceof Blob?o.fire(\"load\",bt(r,r.name)):Fi(r)?o.fire(\"load\",Bs(r)):l(r)},l=r=>{if(!e){o.fire(\"error\",{type:\"error\",body:\"Can't load URL\",code:400});return}t.timestamp=Date.now(),t.request=e(r,s=>{t.duration=Date.now()-t.timestamp,t.complete=!0,s instanceof Blob&&(s=bt(s,s.name||Ct(r))),o.fire(\"load\",s instanceof Blob?s:s?s.body:null)},s=>{o.fire(\"error\",typeof s==\"string\"?{type:\"error\",code:0,body:s}:s)},(s,p,c)=>{if(c&&(t.size=c),t.duration=Date.now()-t.timestamp,!s){t.progress=null;return}t.progress=p/c,o.fire(\"progress\",t.progress)},()=>{o.fire(\"abort\")},s=>{let p=Xi(typeof s==\"string\"?s:s.headers);o.fire(\"meta\",{size:t.size||p.size,filename:p.name,source:p.source})})},o={...mi(),setSource:r=>t.source=r,getProgress:i,abort:a,load:n};return o},Ha=e=>/GET|HEAD/.test(e),Qe=(e,t,i)=>{let a={onheaders:()=>{},onprogress:()=>{},onload:()=>{},ontimeout:()=>{},onerror:()=>{},onabort:()=>{},abort:()=>{n=!0,o.abort()}},n=!1,l=!1;i={method:\"POST\",headers:{},withCredentials:!1,...i},t=encodeURI(t),Ha(i.method)&&e&&(t=`${t}${encodeURIComponent(typeof e==\"string\"?e:JSON.stringify(e))}`);let o=new XMLHttpRequest,r=Ha(i.method)?o:o.upload;return r.onprogress=s=>{n||a.onprogress(s.lengthComputable,s.loaded,s.total)},o.onreadystatechange=()=>{o.readyState<2||o.readyState===4&&o.status===0||l||(l=!0,a.onheaders(o))},o.onload=()=>{o.status>=200&&o.status<300?a.onload(o):a.onerror(o)},o.onerror=()=>a.onerror(o),o.onabort=()=>{n=!0,a.onabort()},o.ontimeout=()=>a.ontimeout(o),o.open(i.method,t,!0),Et(i.timeout)&&(o.timeout=i.timeout),Object.keys(i.headers).forEach(s=>{let p=unescape(encodeURIComponent(i.headers[s]));o.setRequestHeader(s,p)}),i.responseType&&(o.responseType=i.responseType),i.withCredentials&&(o.withCredentials=!0),o.send(e),a},ae=(e,t,i,a)=>({type:e,code:t,body:i,headers:a}),Je=e=>t=>{e(ae(\"error\",0,\"Timeout\",t.getAllResponseHeaders()))},Wa=e=>/\\?/.test(e),Ot=(...e)=>{let t=\"\";return e.forEach(i=>{t+=Wa(t)&&Wa(i)?i.replace(/\\?/,\"&\"):i}),t},_i=(e=\"\",t)=>{if(typeof t==\"function\")return t;if(!t||!ge(t.url))return null;let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,l,o,r,s,p)=>{let c=Qe(n,Ot(e,t.url),{...t,responseType:\"blob\"});return c.onload=d=>{let m=d.getAllResponseHeaders(),u=Xi(m).name||Ct(n);l(ae(\"load\",d.status,t.method===\"HEAD\"?null:bt(i(d.response),u),m))},c.onerror=d=>{o(ae(\"error\",d.status,a(d.response)||d.statusText,d.getAllResponseHeaders()))},c.onheaders=d=>{p(ae(\"headers\",d.status,null,d.getAllResponseHeaders()))},c.ontimeout=Je(o),c.onprogress=r,c.onabort=s,c}},xe={QUEUED:0,COMPLETE:1,PROCESSING:2,ERROR:3,WAITING:4},Us=(e,t,i,a,n,l,o,r,s,p,c)=>{let d=[],{chunkTransferId:m,chunkServer:u,chunkSize:g,chunkRetryDelays:f}=c,h={serverId:m,aborted:!1},I=t.ondata||(w=>w),b=t.onload||((w,F)=>F===\"HEAD\"?w.getResponseHeader(\"Upload-Offset\"):w.response),E=t.onerror||(w=>null),v=w=>{let F=new FormData;de(n)&&F.append(i,JSON.stringify(n));let S=typeof t.headers==\"function\"?t.headers(a,n):{...t.headers,\"Upload-Length\":a.size},L={...t,headers:S},D=Qe(I(F),Ot(e,t.url),L);D.onload=O=>w(b(O,L.method)),D.onerror=O=>o(ae(\"error\",O.status,E(O.response)||O.statusText,O.getAllResponseHeaders())),D.ontimeout=Je(o)},y=w=>{let F=Ot(e,u.url,h.serverId),L={headers:typeof t.headers==\"function\"?t.headers(h.serverId):{...t.headers},method:\"HEAD\"},D=Qe(null,F,L);D.onload=O=>w(b(O,L.method)),D.onerror=O=>o(ae(\"error\",O.status,E(O.response)||O.statusText,O.getAllResponseHeaders())),D.ontimeout=Je(o)},T=Math.floor(a.size/g);for(let w=0;w<=T;w++){let F=w*g,S=a.slice(F,F+g,\"application/offset+octet-stream\");d[w]={index:w,size:S.size,offset:F,data:S,file:a,progress:0,retries:[...f],status:xe.QUEUED,error:null,request:null,timeout:null}}let _=()=>l(h.serverId),x=w=>w.status===xe.QUEUED||w.status===xe.ERROR,R=w=>{if(h.aborted)return;if(w=w||d.find(x),!w){d.every(C=>C.status===xe.COMPLETE)&&_();return}w.status=xe.PROCESSING,w.progress=null;let F=u.ondata||(C=>C),S=u.onerror||(C=>null),L=u.onload||(()=>{}),D=Ot(e,u.url,h.serverId),O=typeof u.headers==\"function\"?u.headers(w):{...u.headers,\"Content-Type\":\"application/offset+octet-stream\",\"Upload-Offset\":w.offset,\"Upload-Length\":a.size,\"Upload-Name\":a.name},U=w.request=Qe(F(w.data),D,{...u,headers:O});U.onload=C=>{L(C,w.index,d.length),w.status=xe.COMPLETE,w.request=null,A()},U.onprogress=(C,X,K)=>{w.progress=C?X:null,z()},U.onerror=C=>{w.status=xe.ERROR,w.request=null,w.error=S(C.response)||C.statusText,P(w)||o(ae(\"error\",C.status,S(C.response)||C.statusText,C.getAllResponseHeaders()))},U.ontimeout=C=>{w.status=xe.ERROR,w.request=null,P(w)||Je(o)(C)},U.onabort=()=>{w.status=xe.QUEUED,w.request=null,s()}},P=w=>w.retries.length===0?!1:(w.status=xe.WAITING,clearTimeout(w.timeout),w.timeout=setTimeout(()=>{R(w)},w.retries.shift()),!0),z=()=>{let w=d.reduce((S,L)=>S===null||L.progress===null?null:S+L.progress,0);if(w===null)return r(!1,0,0);let F=d.reduce((S,L)=>S+L.size,0);r(!0,w,F)},A=()=>{d.filter(F=>F.status===xe.PROCESSING).length>=1||R()},B=()=>{d.forEach(w=>{clearTimeout(w.timeout),w.request&&w.request.abort()})};return h.serverId?y(w=>{h.aborted||(d.filter(F=>F.offset<w).forEach(F=>{F.status=xe.COMPLETE,F.progress=F.size}),A())}):v(w=>{h.aborted||(p(w),h.serverId=w,A())}),{abort:()=>{h.aborted=!0,B()}}},Hs=(e,t,i,a)=>(n,l,o,r,s,p,c)=>{if(!n)return;let d=a.chunkUploads,m=d&&n.size>a.chunkSize,u=d&&(m||a.chunkForce);if(n instanceof Blob&&u)return Us(e,t,i,n,l,o,r,s,p,c,a);let g=t.ondata||(y=>y),f=t.onload||(y=>y),h=t.onerror||(y=>null),I=typeof t.headers==\"function\"?t.headers(n,l)||{}:{...t.headers},b={...t,headers:I};var E=new FormData;de(l)&&E.append(i,JSON.stringify(l)),(n instanceof Blob?[{name:null,file:n}]:n).forEach(y=>{E.append(i,y.file,y.name===null?y.file.name:`${y.name}${y.file.name}`)});let v=Qe(g(E),Ot(e,t.url),b);return v.onload=y=>{o(ae(\"load\",y.status,f(y.response),y.getAllResponseHeaders()))},v.onerror=y=>{r(ae(\"error\",y.status,h(y.response)||y.statusText,y.getAllResponseHeaders()))},v.ontimeout=Je(r),v.onprogress=s,v.onabort=p,v},Ws=(e=\"\",t,i,a)=>typeof t==\"function\"?(...n)=>t(i,...n,a):!t||!ge(t.url)?null:Hs(e,t,i,a),Pt=(e=\"\",t)=>{if(typeof t==\"function\")return t;if(!t||!ge(t.url))return(n,l)=>l();let i=t.onload||(n=>n),a=t.onerror||(n=>null);return(n,l,o)=>{let r=Qe(n,e+t.url,t);return r.onload=s=>{l(ae(\"load\",s.status,i(s.response),s.getAllResponseHeaders()))},r.onerror=s=>{o(ae(\"error\",s.status,a(s.response)||s.statusText,s.getAllResponseHeaders()))},r.ontimeout=Je(o),r}},Fn=(e=0,t=1)=>e+Math.random()*(t-e),js=(e,t=1e3,i=0,a=25,n=250)=>{let l=null,o=Date.now(),r=()=>{let s=Date.now()-o,p=Fn(a,n);s+p>t&&(p=s+p-t);let c=s/t;if(c>=1||document.hidden){e(1);return}e(c),l=setTimeout(r,p)};return t>0&&r(),{clear:()=>{clearTimeout(l)}}},Ys=(e,t)=>{let i={complete:!1,perceivedProgress:0,perceivedPerformanceUpdater:null,progress:null,timestamp:null,perceivedDuration:0,duration:0,request:null,response:null},{allowMinimumUploadDuration:a}=t,n=(c,d)=>{let m=()=>{i.duration===0||i.progress===null||p.fire(\"progress\",p.getProgress())},u=()=>{i.complete=!0,p.fire(\"load-perceived\",i.response.body)};p.fire(\"start\"),i.timestamp=Date.now(),i.perceivedPerformanceUpdater=js(g=>{i.perceivedProgress=g,i.perceivedDuration=Date.now()-i.timestamp,m(),i.response&&i.perceivedProgress===1&&!i.complete&&u()},a?Fn(750,1500):0),i.request=e(c,d,g=>{i.response=de(g)?g:{type:\"load\",code:200,body:`${g}`,headers:{}},i.duration=Date.now()-i.timestamp,i.progress=1,p.fire(\"load\",i.response.body),(!a||a&&i.perceivedProgress===1)&&u()},g=>{i.perceivedPerformanceUpdater.clear(),p.fire(\"error\",de(g)?g:{type:\"error\",code:0,body:`${g}`})},(g,f,h)=>{i.duration=Date.now()-i.timestamp,i.progress=g?f/h:null,m()},()=>{i.perceivedPerformanceUpdater.clear(),p.fire(\"abort\",i.response?i.response.body:null)},g=>{p.fire(\"transfer\",g)})},l=()=>{i.request&&(i.perceivedPerformanceUpdater.clear(),i.request.abort&&i.request.abort(),i.complete=!0)},o=()=>{l(),i.complete=!1,i.perceivedProgress=0,i.progress=0,i.timestamp=null,i.perceivedDuration=0,i.duration=0,i.request=null,i.response=null},r=a?()=>i.progress?Math.min(i.progress,i.perceivedProgress):null:()=>i.progress||null,s=a?()=>Math.min(i.duration,i.perceivedDuration):()=>i.duration,p={...mi(),process:n,abort:l,getProgress:r,getDuration:s,reset:o};return p},On=e=>e.substring(0,e.lastIndexOf(\".\"))||e,qs=e=>{let t=[e.name,e.size,e.type];return e instanceof Blob||Fi(e)?t[0]=e.name||An():Fi(e)?(t[1]=e.length,t[2]=Pn(e)):ge(e)&&(t[0]=Ct(e),t[1]=0,t[2]=\"application/octet-stream\"),{name:t[0],size:t[1],type:t[2]}},et=e=>!!(e instanceof File||e instanceof Blob&&e.name),Dn=e=>{if(!de(e))return e;let t=ci(e)?[]:{};for(let i in e){if(!e.hasOwnProperty(i))continue;let a=e[i];t[i]=a&&de(a)?Dn(a):a}return t},$s=(e=null,t=null,i=null)=>{let a=Yi(),n={archived:!1,frozen:!1,released:!1,source:null,file:i,serverFileReference:t,transferId:null,processingAborted:!1,status:t?H.PROCESSING_COMPLETE:H.INIT,activeLoader:null,activeProcessor:null},l=null,o={},r=x=>n.status=x,s=(x,...R)=>{n.released||n.frozen||T.fire(x,...R)},p=()=>ui(n.file.name),c=()=>n.file.type,d=()=>n.file.size,m=()=>n.file,u=(x,R,P)=>{if(n.source=x,T.fireSync(\"init\"),n.file){T.fireSync(\"load-skip\");return}n.file=qs(x),R.on(\"init\",()=>{s(\"load-init\")}),R.on(\"meta\",z=>{n.file.size=z.size,n.file.filename=z.filename,z.source&&(e=re.LIMBO,n.serverFileReference=z.source,n.status=H.PROCESSING_COMPLETE),s(\"load-meta\")}),R.on(\"progress\",z=>{r(H.LOADING),s(\"load-progress\",z)}),R.on(\"error\",z=>{r(H.LOAD_ERROR),s(\"load-request-error\",z)}),R.on(\"abort\",()=>{r(H.INIT),s(\"load-abort\")}),R.on(\"load\",z=>{n.activeLoader=null;let A=w=>{n.file=et(w)?w:n.file,e===re.LIMBO&&n.serverFileReference?r(H.PROCESSING_COMPLETE):r(H.IDLE),s(\"load\")},B=w=>{n.file=z,s(\"load-meta\"),r(H.LOAD_ERROR),s(\"load-file-error\",w)};if(n.serverFileReference){A(z);return}P(z,A,B)}),R.setSource(x),n.activeLoader=R,R.load()},g=()=>{n.activeLoader&&n.activeLoader.load()},f=()=>{if(n.activeLoader){n.activeLoader.abort();return}r(H.INIT),s(\"load-abort\")},h=(x,R)=>{if(n.processingAborted){n.processingAborted=!1;return}if(r(H.PROCESSING),l=null,!(n.file instanceof Blob)){T.on(\"load\",()=>{h(x,R)});return}x.on(\"load\",A=>{n.transferId=null,n.serverFileReference=A}),x.on(\"transfer\",A=>{n.transferId=A}),x.on(\"load-perceived\",A=>{n.activeProcessor=null,n.transferId=null,n.serverFileReference=A,r(H.PROCESSING_COMPLETE),s(\"process-complete\",A)}),x.on(\"start\",()=>{s(\"process-start\")}),x.on(\"error\",A=>{n.activeProcessor=null,r(H.PROCESSING_ERROR),s(\"process-error\",A)}),x.on(\"abort\",A=>{n.activeProcessor=null,n.serverFileReference=A,r(H.IDLE),s(\"process-abort\"),l&&l()}),x.on(\"progress\",A=>{s(\"process-progress\",A)});let P=A=>{n.archived||x.process(A,{...o})},z=console.error;R(n.file,P,z),n.activeProcessor=x},I=()=>{n.processingAborted=!1,r(H.PROCESSING_QUEUED)},b=()=>new Promise(x=>{if(!n.activeProcessor){n.processingAborted=!0,r(H.IDLE),s(\"process-abort\"),x();return}l=()=>{x()},n.activeProcessor.abort()}),E=(x,R)=>new Promise((P,z)=>{let A=n.serverFileReference!==null?n.serverFileReference:n.transferId;if(A===null){P();return}x(A,()=>{n.serverFileReference=null,n.transferId=null,P()},B=>{if(!R){P();return}r(H.PROCESSING_REVERT_ERROR),s(\"process-revert-error\"),z(B)}),r(H.IDLE),s(\"process-revert\")}),v=(x,R,P)=>{let z=x.split(\".\"),A=z[0],B=z.pop(),w=o;z.forEach(F=>w=w[F]),JSON.stringify(w[B])!==JSON.stringify(R)&&(w[B]=R,s(\"metadata-update\",{key:A,value:o[A],silent:P}))},T={id:{get:()=>a},origin:{get:()=>e,set:x=>e=x},serverId:{get:()=>n.serverFileReference},transferId:{get:()=>n.transferId},status:{get:()=>n.status},filename:{get:()=>n.file.name},filenameWithoutExtension:{get:()=>On(n.file.name)},fileExtension:{get:p},fileType:{get:c},fileSize:{get:d},file:{get:m},relativePath:{get:()=>n.file._relativePath},source:{get:()=>n.source},getMetadata:x=>Dn(x?o[x]:o),setMetadata:(x,R,P)=>{if(de(x)){let z=x;return Object.keys(z).forEach(A=>{v(A,z[A],R)}),x}return v(x,R,P),R},extend:(x,R)=>_[x]=R,abortLoad:f,retryLoad:g,requestProcessing:I,abortProcessing:b,load:u,process:h,revert:E,...mi(),freeze:()=>n.frozen=!0,release:()=>n.released=!0,released:{get:()=>n.released},archive:()=>n.archived=!0,archived:{get:()=>n.archived},setFile:x=>n.file=x},_=He(T);return _},Xs=(e,t)=>Ve(t)?0:ge(t)?e.findIndex(i=>i.id===t):-1,ja=(e,t)=>{let i=Xs(e,t);if(!(i<0))return e[i]||null},Ya=(e,t,i,a,n,l)=>{let o=Qe(null,e,{method:\"GET\",responseType:\"blob\"});return o.onload=r=>{let s=r.getAllResponseHeaders(),p=Xi(s).name||Ct(e);t(ae(\"load\",r.status,bt(r.response,p),s))},o.onerror=r=>{i(ae(\"error\",r.status,r.statusText,r.getAllResponseHeaders()))},o.onheaders=r=>{l(ae(\"headers\",r.status,null,r.getAllResponseHeaders()))},o.ontimeout=Je(i),o.onprogress=a,o.onabort=n,o},qa=e=>(e.indexOf(\"//\")===0&&(e=location.protocol+e),e.toLowerCase().replace(\"blob:\",\"\").replace(/([a-z])?:\\/\\//,\"$1\").split(\"/\")[0]),Ks=e=>(e.indexOf(\":\")>-1||e.indexOf(\"//\")>-1)&&qa(location.href)!==qa(e),Jt=e=>(...t)=>Ke(e)?e(...t):e,Zs=e=>!et(e.file),wi=(e,t)=>{clearTimeout(t.listUpdateTimeout),t.listUpdateTimeout=setTimeout(()=>{e(\"DID_UPDATE_ITEMS\",{items:ze(t.items)})},0)},$a=(e,...t)=>new Promise(i=>{if(!e)return i(!0);let a=e(...t);if(a==null)return i(!0);if(typeof a==\"boolean\")return i(a);typeof a.then==\"function\"&&a.then(i)}),Li=(e,t)=>{e.items.sort((i,a)=>t(he(i),he(a)))},ye=(e,t)=>({query:i,success:a=()=>{},failure:n=()=>{},...l}={})=>{let o=Ze(e.items,i);if(!o){n({error:ae(\"error\",0,\"Item not found\"),file:null});return}t(o,a,n,l||{})},Qs=(e,t,i)=>({ABORT_ALL:()=>{ze(i.items).forEach(a=>{a.freeze(),a.abortLoad(),a.abortProcessing()})},DID_SET_FILES:({value:a=[]})=>{let n=a.map(o=>({source:o.source?o.source:o,options:o.options})),l=ze(i.items);l.forEach(o=>{n.find(r=>r.source===o.source||r.source===o.file)||e(\"REMOVE_ITEM\",{query:o,remove:!1})}),l=ze(i.items),n.forEach((o,r)=>{l.find(s=>s.source===o.source||s.file===o.source)||e(\"ADD_ITEM\",{...o,interactionMethod:Re.NONE,index:r})})},DID_UPDATE_ITEM_METADATA:({id:a,action:n,change:l})=>{l.silent||(clearTimeout(i.itemUpdateTimeout),i.itemUpdateTimeout=setTimeout(()=>{let o=ja(i.items,a);if(!t(\"IS_ASYNC\")){Ae(\"SHOULD_PREPARE_OUTPUT\",!1,{item:o,query:t,action:n,change:l}).then(c=>{let d=t(\"GET_BEFORE_PREPARE_FILE\");d&&(c=d(o,c)),c&&e(\"REQUEST_PREPARE_OUTPUT\",{query:a,item:o,success:m=>{e(\"DID_PREPARE_OUTPUT\",{id:a,file:m})}},!0)});return}o.origin===re.LOCAL&&e(\"DID_LOAD_ITEM\",{id:o.id,error:null,serverFileReference:o.source});let r=()=>{setTimeout(()=>{e(\"REQUEST_ITEM_PROCESSING\",{query:a})},32)},s=c=>{o.revert(Pt(i.options.server.url,i.options.server.revert),t(\"GET_FORCE_REVERT\")).then(c?r:()=>{}).catch(()=>{})},p=c=>{o.abortProcessing().then(c?r:()=>{})};if(o.status===H.PROCESSING_COMPLETE)return s(i.options.instantUpload);if(o.status===H.PROCESSING)return p(i.options.instantUpload);i.options.instantUpload&&r()},0))},MOVE_ITEM:({query:a,index:n})=>{let l=Ze(i.items,a);if(!l)return;let o=i.items.indexOf(l);n=Mn(n,0,i.items.length-1),o!==n&&i.items.splice(n,0,i.items.splice(o,1)[0])},SORT:({compare:a})=>{Li(i,a),e(\"DID_SORT_ITEMS\",{items:t(\"GET_ACTIVE_ITEMS\")})},ADD_ITEMS:({items:a,index:n,interactionMethod:l,success:o=()=>{},failure:r=()=>{}})=>{let s=n;if(n===-1||typeof n>\"u\"){let u=t(\"GET_ITEM_INSERT_LOCATION\"),g=t(\"GET_TOTAL_ITEMS\");s=u===\"before\"?0:g}let p=t(\"GET_IGNORED_FILES\"),c=u=>et(u)?!p.includes(u.name.toLowerCase()):!Ve(u),m=a.filter(c).map(u=>new Promise((g,f)=>{e(\"ADD_ITEM\",{interactionMethod:l,source:u.source||u,success:g,failure:f,index:s++,options:u.options||{}})}));Promise.all(m).then(o).catch(r)},ADD_ITEM:({source:a,index:n=-1,interactionMethod:l,success:o=()=>{},failure:r=()=>{},options:s={}})=>{if(Ve(a)){r({error:ae(\"error\",0,\"No source\"),file:null});return}if(et(a)&&i.options.ignoredFiles.includes(a.name.toLowerCase()))return;if(!Ls(i)){if(i.options.allowMultiple||!i.options.allowMultiple&&!i.options.allowReplace){let b=ae(\"warning\",0,\"Max files\");e(\"DID_THROW_MAX_FILES\",{source:a,error:b}),r({error:b,file:null});return}let I=ze(i.items)[0];if(I.status===H.PROCESSING_COMPLETE||I.status===H.PROCESSING_REVERT_ERROR){let b=t(\"GET_FORCE_REVERT\");if(I.revert(Pt(i.options.server.url,i.options.server.revert),b).then(()=>{b&&e(\"ADD_ITEM\",{source:a,index:n,interactionMethod:l,success:o,failure:r,options:s})}).catch(()=>{}),b)return}e(\"REMOVE_ITEM\",{query:I.id})}let p=s.type===\"local\"?re.LOCAL:s.type===\"limbo\"?re.LIMBO:re.INPUT,c=$s(p,p===re.INPUT?null:a,s.file);Object.keys(s.metadata||{}).forEach(I=>{c.setMetadata(I,s.metadata[I])}),it(\"DID_CREATE_ITEM\",c,{query:t,dispatch:e});let d=t(\"GET_ITEM_INSERT_LOCATION\");i.options.itemInsertLocationFreedom||(n=d===\"before\"?-1:i.items.length),As(i.items,c,n),Ke(d)&&a&&Li(i,d);let m=c.id;c.on(\"init\",()=>{e(\"DID_INIT_ITEM\",{id:m})}),c.on(\"load-init\",()=>{e(\"DID_START_ITEM_LOAD\",{id:m})}),c.on(\"load-meta\",()=>{e(\"DID_UPDATE_ITEM_META\",{id:m})}),c.on(\"load-progress\",I=>{e(\"DID_UPDATE_ITEM_LOAD_PROGRESS\",{id:m,progress:I})}),c.on(\"load-request-error\",I=>{let b=Jt(i.options.labelFileLoadError)(I);if(I.code>=400&&I.code<500){e(\"DID_THROW_ITEM_INVALID\",{id:m,error:I,status:{main:b,sub:`${I.code} (${I.body})`}}),r({error:I,file:he(c)});return}e(\"DID_THROW_ITEM_LOAD_ERROR\",{id:m,error:I,status:{main:b,sub:i.options.labelTapToRetry}})}),c.on(\"load-file-error\",I=>{e(\"DID_THROW_ITEM_INVALID\",{id:m,error:I.status,status:I.status}),r({error:I.status,file:he(c)})}),c.on(\"load-abort\",()=>{e(\"REMOVE_ITEM\",{query:m})}),c.on(\"load-skip\",()=>{c.on(\"metadata-update\",I=>{et(c.file)&&e(\"DID_UPDATE_ITEM_METADATA\",{id:m,change:I})}),e(\"COMPLETE_LOAD_ITEM\",{query:m,item:c,data:{source:a,success:o}})}),c.on(\"load\",()=>{let I=b=>{if(!b){e(\"REMOVE_ITEM\",{query:m});return}c.on(\"metadata-update\",E=>{e(\"DID_UPDATE_ITEM_METADATA\",{id:m,change:E})}),Ae(\"SHOULD_PREPARE_OUTPUT\",!1,{item:c,query:t}).then(E=>{let v=t(\"GET_BEFORE_PREPARE_FILE\");v&&(E=v(c,E));let y=()=>{e(\"COMPLETE_LOAD_ITEM\",{query:m,item:c,data:{source:a,success:o}}),wi(e,i)};if(E){e(\"REQUEST_PREPARE_OUTPUT\",{query:m,item:c,success:T=>{e(\"DID_PREPARE_OUTPUT\",{id:m,file:T}),y()}},!0);return}y()})};Ae(\"DID_LOAD_ITEM\",c,{query:t,dispatch:e}).then(()=>{$a(t(\"GET_BEFORE_ADD_FILE\"),he(c)).then(I)}).catch(b=>{if(!b||!b.error||!b.status)return I(!1);e(\"DID_THROW_ITEM_INVALID\",{id:m,error:b.error,status:b.status})})}),c.on(\"process-start\",()=>{e(\"DID_START_ITEM_PROCESSING\",{id:m})}),c.on(\"process-progress\",I=>{e(\"DID_UPDATE_ITEM_PROCESS_PROGRESS\",{id:m,progress:I})}),c.on(\"process-error\",I=>{e(\"DID_THROW_ITEM_PROCESSING_ERROR\",{id:m,error:I,status:{main:Jt(i.options.labelFileProcessingError)(I),sub:i.options.labelTapToRetry}})}),c.on(\"process-revert-error\",I=>{e(\"DID_THROW_ITEM_PROCESSING_REVERT_ERROR\",{id:m,error:I,status:{main:Jt(i.options.labelFileProcessingRevertError)(I),sub:i.options.labelTapToRetry}})}),c.on(\"process-complete\",I=>{e(\"DID_COMPLETE_ITEM_PROCESSING\",{id:m,error:null,serverFileReference:I}),e(\"DID_DEFINE_VALUE\",{id:m,value:I})}),c.on(\"process-abort\",()=>{e(\"DID_ABORT_ITEM_PROCESSING\",{id:m})}),c.on(\"process-revert\",()=>{e(\"DID_REVERT_ITEM_PROCESSING\",{id:m}),e(\"DID_DEFINE_VALUE\",{id:m,value:null})}),e(\"DID_ADD_ITEM\",{id:m,index:n,interactionMethod:l}),wi(e,i);let{url:u,load:g,restore:f,fetch:h}=i.options.server||{};c.load(a,Gs(p===re.INPUT?ge(a)&&Ks(a)&&h?_i(u,h):Ya:p===re.LIMBO?_i(u,f):_i(u,g)),(I,b,E)=>{Ae(\"LOAD_FILE\",I,{query:t}).then(b).catch(E)})},REQUEST_PREPARE_OUTPUT:({item:a,success:n,failure:l=()=>{}})=>{let o={error:ae(\"error\",0,\"Item not found\"),file:null};if(a.archived)return l(o);Ae(\"PREPARE_OUTPUT\",a.file,{query:t,item:a}).then(r=>{Ae(\"COMPLETE_PREPARE_OUTPUT\",r,{query:t,item:a}).then(s=>{if(a.archived)return l(o);n(s)})})},COMPLETE_LOAD_ITEM:({item:a,data:n})=>{let{success:l,source:o}=n,r=t(\"GET_ITEM_INSERT_LOCATION\");if(Ke(r)&&o&&Li(i,r),e(\"DID_LOAD_ITEM\",{id:a.id,error:null,serverFileReference:a.origin===re.INPUT?null:o}),l(he(a)),a.origin===re.LOCAL){e(\"DID_LOAD_LOCAL_ITEM\",{id:a.id});return}if(a.origin===re.LIMBO){e(\"DID_COMPLETE_ITEM_PROCESSING\",{id:a.id,error:null,serverFileReference:o}),e(\"DID_DEFINE_VALUE\",{id:a.id,value:a.serverId||o});return}t(\"IS_ASYNC\")&&i.options.instantUpload&&e(\"REQUEST_ITEM_PROCESSING\",{query:a.id})},RETRY_ITEM_LOAD:ye(i,a=>{a.retryLoad()}),REQUEST_ITEM_PREPARE:ye(i,(a,n,l)=>{e(\"REQUEST_PREPARE_OUTPUT\",{query:a.id,item:a,success:o=>{e(\"DID_PREPARE_OUTPUT\",{id:a.id,file:o}),n({file:a,output:o})},failure:l},!0)}),REQUEST_ITEM_PROCESSING:ye(i,(a,n,l)=>{if(!(a.status===H.IDLE||a.status===H.PROCESSING_ERROR)){let r=()=>e(\"REQUEST_ITEM_PROCESSING\",{query:a,success:n,failure:l}),s=()=>document.hidden?r():setTimeout(r,32);a.status===H.PROCESSING_COMPLETE||a.status===H.PROCESSING_REVERT_ERROR?a.revert(Pt(i.options.server.url,i.options.server.revert),t(\"GET_FORCE_REVERT\")).then(s).catch(()=>{}):a.status===H.PROCESSING&&a.abortProcessing().then(s);return}a.status!==H.PROCESSING_QUEUED&&(a.requestProcessing(),e(\"DID_REQUEST_ITEM_PROCESSING\",{id:a.id}),e(\"PROCESS_ITEM\",{query:a,success:n,failure:l},!0))}),PROCESS_ITEM:ye(i,(a,n,l)=>{let o=t(\"GET_MAX_PARALLEL_UPLOADS\");if(t(\"GET_ITEMS_BY_STATUS\",H.PROCESSING).length===o){i.processingQueue.push({id:a.id,success:n,failure:l});return}if(a.status===H.PROCESSING)return;let s=()=>{let c=i.processingQueue.shift();if(!c)return;let{id:d,success:m,failure:u}=c,g=Ze(i.items,d);if(!g||g.archived){s();return}e(\"PROCESS_ITEM\",{query:d,success:m,failure:u},!0)};a.onOnce(\"process-complete\",()=>{n(he(a)),s();let c=i.options.server;if(i.options.instantUpload&&a.origin===re.LOCAL&&Ke(c.remove)){let u=()=>{};a.origin=re.LIMBO,i.options.server.remove(a.source,u,u)}t(\"GET_ITEMS_BY_STATUS\",H.PROCESSING_COMPLETE).length===i.items.length&&e(\"DID_COMPLETE_ITEM_PROCESSING_ALL\")}),a.onOnce(\"process-error\",c=>{l({error:c,file:he(a)}),s()});let p=i.options;a.process(Ys(Ws(p.server.url,p.server.process,p.name,{chunkTransferId:a.transferId,chunkServer:p.server.patch,chunkUploads:p.chunkUploads,chunkForce:p.chunkForce,chunkSize:p.chunkSize,chunkRetryDelays:p.chunkRetryDelays}),{allowMinimumUploadDuration:t(\"GET_ALLOW_MINIMUM_UPLOAD_DURATION\")}),(c,d,m)=>{Ae(\"PREPARE_OUTPUT\",c,{query:t,item:a}).then(u=>{e(\"DID_PREPARE_OUTPUT\",{id:a.id,file:u}),d(u)}).catch(m)})}),RETRY_ITEM_PROCESSING:ye(i,a=>{e(\"REQUEST_ITEM_PROCESSING\",{query:a})}),REQUEST_REMOVE_ITEM:ye(i,a=>{$a(t(\"GET_BEFORE_REMOVE_FILE\"),he(a)).then(n=>{n&&e(\"REMOVE_ITEM\",{query:a})})}),RELEASE_ITEM:ye(i,a=>{a.release()}),REMOVE_ITEM:ye(i,(a,n,l,o)=>{let r=()=>{let p=a.id;ja(i.items,p).archive(),e(\"DID_REMOVE_ITEM\",{error:null,id:p,item:a}),wi(e,i),n(he(a))},s=i.options.server;a.origin===re.LOCAL&&s&&Ke(s.remove)&&o.remove!==!1?(e(\"DID_START_ITEM_REMOVE\",{id:a.id}),s.remove(a.source,()=>r(),p=>{e(\"DID_THROW_ITEM_REMOVE_ERROR\",{id:a.id,error:ae(\"error\",0,p,null),status:{main:Jt(i.options.labelFileRemoveError)(p),sub:i.options.labelTapToRetry}})})):((o.revert&&a.origin!==re.LOCAL&&a.serverId!==null||i.options.chunkUploads&&a.file.size>i.options.chunkSize||i.options.chunkUploads&&i.options.chunkForce)&&a.revert(Pt(i.options.server.url,i.options.server.revert),t(\"GET_FORCE_REVERT\")),r())}),ABORT_ITEM_LOAD:ye(i,a=>{a.abortLoad()}),ABORT_ITEM_PROCESSING:ye(i,a=>{if(a.serverId){e(\"REVERT_ITEM_PROCESSING\",{id:a.id});return}a.abortProcessing().then(()=>{i.options.instantUpload&&e(\"REMOVE_ITEM\",{query:a.id})})}),REQUEST_REVERT_ITEM_PROCESSING:ye(i,a=>{if(!i.options.instantUpload){e(\"REVERT_ITEM_PROCESSING\",{query:a});return}let n=r=>{r&&e(\"REVERT_ITEM_PROCESSING\",{query:a})},l=t(\"GET_BEFORE_REMOVE_FILE\");if(!l)return n(!0);let o=l(he(a));if(o==null)return n(!0);if(typeof o==\"boolean\")return n(o);typeof o.then==\"function\"&&o.then(n)}),REVERT_ITEM_PROCESSING:ye(i,a=>{a.revert(Pt(i.options.server.url,i.options.server.revert),t(\"GET_FORCE_REVERT\")).then(()=>{(i.options.instantUpload||Zs(a))&&e(\"REMOVE_ITEM\",{query:a.id})}).catch(()=>{})}),SET_OPTIONS:({options:a})=>{let n=Object.keys(a),l=Js.filter(r=>n.includes(r));[...l,...Object.keys(a).filter(r=>!l.includes(r))].forEach(r=>{e(`SET_${pi(r,\"_\").toUpperCase()}`,{value:a[r]})})}}),Js=[\"server\"],Ki=e=>e,Ge=e=>document.createElement(e),ne=(e,t)=>{let i=e.childNodes[0];i?t!==i.nodeValue&&(i.nodeValue=t):(i=document.createTextNode(t),e.appendChild(i))},Xa=(e,t,i,a)=>{let n=(a%360-90)*Math.PI/180;return{x:e+i*Math.cos(n),y:t+i*Math.sin(n)}},ec=(e,t,i,a,n,l)=>{let o=Xa(e,t,i,n),r=Xa(e,t,i,a);return[\"M\",o.x,o.y,\"A\",i,i,0,l,0,r.x,r.y].join(\" \")},tc=(e,t,i,a,n)=>{let l=1;return n>a&&n-a<=.5&&(l=0),a>n&&a-n>=.5&&(l=0),ec(e,t,i,Math.min(.9999,a)*360,Math.min(.9999,n)*360,l)},ic=({root:e,props:t})=>{t.spin=!1,t.progress=0,t.opacity=0;let i=li(\"svg\");e.ref.path=li(\"path\",{\"stroke-width\":2,\"stroke-linecap\":\"round\"}),i.appendChild(e.ref.path),e.ref.svg=i,e.appendChild(i)},ac=({root:e,props:t})=>{if(t.opacity===0)return;t.align&&(e.element.dataset.align=t.align);let i=parseInt(se(e.ref.path,\"stroke-width\"),10),a=e.rect.element.width*.5,n=0,l=0;t.spin?(n=0,l=.5):(n=0,l=t.progress);let o=tc(a,a,a-i,n,l);se(e.ref.path,\"d\",o),se(e.ref.path,\"stroke-opacity\",t.spin||t.progress>0?1:0)},Ka=le({tag:\"div\",name:\"progress-indicator\",ignoreRectUpdate:!0,ignoreRect:!0,create:ic,write:ac,mixins:{apis:[\"progress\",\"spin\",\"align\"],styles:[\"opacity\"],animations:{opacity:{type:\"tween\",duration:500},progress:{type:\"spring\",stiffness:.95,damping:.65,mass:10}}}}),nc=({root:e,props:t})=>{e.element.innerHTML=(t.icon||\"\")+`<span>${t.label}</span>`,t.isDisabled=!1},lc=({root:e,props:t})=>{let{isDisabled:i}=t,a=e.query(\"GET_DISABLED\")||t.opacity===0;a&&!i?(t.isDisabled=!0,se(e.element,\"disabled\",\"disabled\")):!a&&i&&(t.isDisabled=!1,e.element.removeAttribute(\"disabled\"))},Cn=le({tag:\"button\",attributes:{type:\"button\"},ignoreRect:!0,ignoreRectUpdate:!0,name:\"file-action-button\",mixins:{apis:[\"label\"],styles:[\"translateX\",\"translateY\",\"scaleX\",\"scaleY\",\"opacity\"],animations:{scaleX:\"spring\",scaleY:\"spring\",translateX:\"spring\",translateY:\"spring\",opacity:{type:\"tween\",duration:250}},listeners:!0},create:nc,write:lc}),Bn=(e,t=\".\",i=1e3,a={})=>{let{labelBytes:n=\"bytes\",labelKilobytes:l=\"KB\",labelMegabytes:o=\"MB\",labelGigabytes:r=\"GB\"}=a;e=Math.round(Math.abs(e));let s=i,p=i*i,c=i*i*i;return e<s?`${e} ${n}`:e<p?`${Math.floor(e/s)} ${l}`:e<c?`${Za(e/p,1,t)} ${o}`:`${Za(e/c,2,t)} ${r}`},Za=(e,t,i)=>e.toFixed(t).split(\".\").filter(a=>a!==\"0\").join(i),oc=({root:e,props:t})=>{let i=Ge(\"span\");i.className=\"filepond--file-info-main\",se(i,\"aria-hidden\",\"true\"),e.appendChild(i),e.ref.fileName=i;let a=Ge(\"span\");a.className=\"filepond--file-info-sub\",e.appendChild(a),e.ref.fileSize=a,ne(a,e.query(\"GET_LABEL_FILE_WAITING_FOR_SIZE\")),ne(i,Ki(e.query(\"GET_ITEM_NAME\",t.id)))},Oi=({root:e,props:t})=>{ne(e.ref.fileSize,Bn(e.query(\"GET_ITEM_SIZE\",t.id),\".\",e.query(\"GET_FILE_SIZE_BASE\"),e.query(\"GET_FILE_SIZE_LABELS\",e.query))),ne(e.ref.fileName,Ki(e.query(\"GET_ITEM_NAME\",t.id)))},Qa=({root:e,props:t})=>{if(Et(e.query(\"GET_ITEM_SIZE\",t.id))){Oi({root:e,props:t});return}ne(e.ref.fileSize,e.query(\"GET_LABEL_FILE_SIZE_NOT_AVAILABLE\"))},rc=le({name:\"file-info\",ignoreRect:!0,ignoreRectUpdate:!0,write:fe({DID_LOAD_ITEM:Oi,DID_UPDATE_ITEM_META:Oi,DID_THROW_ITEM_LOAD_ERROR:Qa,DID_THROW_ITEM_INVALID:Qa}),didCreateView:e=>{it(\"CREATE_VIEW\",{...e,view:e})},create:oc,mixins:{styles:[\"translateX\",\"translateY\"],animations:{translateX:\"spring\",translateY:\"spring\"}}}),kn=e=>Math.round(e*100),sc=({root:e})=>{let t=Ge(\"span\");t.className=\"filepond--file-status-main\",e.appendChild(t),e.ref.main=t;let i=Ge(\"span\");i.className=\"filepond--file-status-sub\",e.appendChild(i),e.ref.sub=i,Nn({root:e,action:{progress:null}})},Nn=({root:e,action:t})=>{let i=t.progress===null?e.query(\"GET_LABEL_FILE_LOADING\"):`${e.query(\"GET_LABEL_FILE_LOADING\")} ${kn(t.progress)}%`;ne(e.ref.main,i),ne(e.ref.sub,e.query(\"GET_LABEL_TAP_TO_CANCEL\"))},cc=({root:e,action:t})=>{let i=t.progress===null?e.query(\"GET_LABEL_FILE_PROCESSING\"):`${e.query(\"GET_LABEL_FILE_PROCESSING\")} ${kn(t.progress)}%`;ne(e.ref.main,i),ne(e.ref.sub,e.query(\"GET_LABEL_TAP_TO_CANCEL\"))},dc=({root:e})=>{ne(e.ref.main,e.query(\"GET_LABEL_FILE_PROCESSING\")),ne(e.ref.sub,e.query(\"GET_LABEL_TAP_TO_CANCEL\"))},pc=({root:e})=>{ne(e.ref.main,e.query(\"GET_LABEL_FILE_PROCESSING_ABORTED\")),ne(e.ref.sub,e.query(\"GET_LABEL_TAP_TO_RETRY\"))},mc=({root:e})=>{ne(e.ref.main,e.query(\"GET_LABEL_FILE_PROCESSING_COMPLETE\")),ne(e.ref.sub,e.query(\"GET_LABEL_TAP_TO_UNDO\"))},Ja=({root:e})=>{ne(e.ref.main,\"\"),ne(e.ref.sub,\"\")},Ft=({root:e,action:t})=>{ne(e.ref.main,t.status.main),ne(e.ref.sub,t.status.sub)},uc=le({name:\"file-status\",ignoreRect:!0,ignoreRectUpdate:!0,write:fe({DID_LOAD_ITEM:Ja,DID_REVERT_ITEM_PROCESSING:Ja,DID_REQUEST_ITEM_PROCESSING:dc,DID_ABORT_ITEM_PROCESSING:pc,DID_COMPLETE_ITEM_PROCESSING:mc,DID_UPDATE_ITEM_PROCESS_PROGRESS:cc,DID_UPDATE_ITEM_LOAD_PROGRESS:Nn,DID_THROW_ITEM_LOAD_ERROR:Ft,DID_THROW_ITEM_INVALID:Ft,DID_THROW_ITEM_PROCESSING_ERROR:Ft,DID_THROW_ITEM_PROCESSING_REVERT_ERROR:Ft,DID_THROW_ITEM_REMOVE_ERROR:Ft}),didCreateView:e=>{it(\"CREATE_VIEW\",{...e,view:e})},create:sc,mixins:{styles:[\"translateX\",\"translateY\",\"opacity\"],animations:{opacity:{type:\"tween\",duration:250},translateX:\"spring\",translateY:\"spring\"}}}),Di={AbortItemLoad:{label:\"GET_LABEL_BUTTON_ABORT_ITEM_LOAD\",action:\"ABORT_ITEM_LOAD\",className:\"filepond--action-abort-item-load\",align:\"LOAD_INDICATOR_POSITION\"},RetryItemLoad:{label:\"GET_LABEL_BUTTON_RETRY_ITEM_LOAD\",action:\"RETRY_ITEM_LOAD\",icon:\"GET_ICON_RETRY\",className:\"filepond--action-retry-item-load\",align:\"BUTTON_PROCESS_ITEM_POSITION\"},RemoveItem:{label:\"GET_LABEL_BUTTON_REMOVE_ITEM\",action:\"REQUEST_REMOVE_ITEM\",icon:\"GET_ICON_REMOVE\",className:\"filepond--action-remove-item\",align:\"BUTTON_REMOVE_ITEM_POSITION\"},ProcessItem:{label:\"GET_LABEL_BUTTON_PROCESS_ITEM\",action:\"REQUEST_ITEM_PROCESSING\",icon:\"GET_ICON_PROCESS\",className:\"filepond--action-process-item\",align:\"BUTTON_PROCESS_ITEM_POSITION\"},AbortItemProcessing:{label:\"GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING\",action:\"ABORT_ITEM_PROCESSING\",className:\"filepond--action-abort-item-processing\",align:\"BUTTON_PROCESS_ITEM_POSITION\"},RetryItemProcessing:{label:\"GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING\",action:\"RETRY_ITEM_PROCESSING\",icon:\"GET_ICON_RETRY\",className:\"filepond--action-retry-item-processing\",align:\"BUTTON_PROCESS_ITEM_POSITION\"},RevertItemProcessing:{label:\"GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING\",action:\"REQUEST_REVERT_ITEM_PROCESSING\",icon:\"GET_ICON_UNDO\",className:\"filepond--action-revert-item-processing\",align:\"BUTTON_PROCESS_ITEM_POSITION\"}},Ci=[];te(Di,e=>{Ci.push(e)});var Ie=e=>{if(Bi(e)===\"right\")return 0;let t=e.ref.buttonRemoveItem.rect.element;return t.hidden?null:t.width+t.left},gc=e=>e.ref.buttonAbortItemLoad.rect.element.width,ei=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.height/4),fc=e=>Math.floor(e.ref.buttonRemoveItem.rect.element.left/2),hc=e=>e.query(\"GET_STYLE_LOAD_INDICATOR_POSITION\"),bc=e=>e.query(\"GET_STYLE_PROGRESS_INDICATOR_POSITION\"),Bi=e=>e.query(\"GET_STYLE_BUTTON_REMOVE_ITEM_POSITION\"),Ec={buttonAbortItemLoad:{opacity:0},buttonRetryItemLoad:{opacity:0},buttonRemoveItem:{opacity:0},buttonProcessItem:{opacity:0},buttonAbortItemProcessing:{opacity:0},buttonRetryItemProcessing:{opacity:0},buttonRevertItemProcessing:{opacity:0},loadProgressIndicator:{opacity:0,align:hc},processProgressIndicator:{opacity:0,align:bc},processingCompleteIndicator:{opacity:0,scaleX:.75,scaleY:.75},info:{translateX:0,translateY:0,opacity:0},status:{translateX:0,translateY:0,opacity:0}},en={buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},Mi={buttonAbortItemProcessing:{opacity:1},processProgressIndicator:{opacity:1},status:{opacity:1}},ut={DID_THROW_ITEM_INVALID:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie,opacity:1}},DID_START_ITEM_LOAD:{buttonAbortItemLoad:{opacity:1},loadProgressIndicator:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_LOAD_ERROR:{buttonRetryItemLoad:{opacity:1},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_START_ITEM_REMOVE:{processProgressIndicator:{opacity:1,align:Bi},info:{translateX:Ie},status:{opacity:0}},DID_THROW_ITEM_REMOVE_ERROR:{processProgressIndicator:{opacity:0,align:Bi},buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{opacity:1,translateX:Ie}},DID_LOAD_ITEM:en,DID_LOAD_LOCAL_ITEM:{buttonRemoveItem:{opacity:1},info:{translateX:Ie},status:{translateX:Ie}},DID_START_ITEM_PROCESSING:Mi,DID_REQUEST_ITEM_PROCESSING:Mi,DID_UPDATE_ITEM_PROCESS_PROGRESS:Mi,DID_COMPLETE_ITEM_PROCESSING:{buttonRevertItemProcessing:{opacity:1},info:{opacity:1},status:{opacity:1}},DID_THROW_ITEM_PROCESSING_ERROR:{buttonRemoveItem:{opacity:1},buttonRetryItemProcessing:{opacity:1},status:{opacity:1},info:{translateX:Ie}},DID_THROW_ITEM_PROCESSING_REVERT_ERROR:{buttonRevertItemProcessing:{opacity:1},status:{opacity:1},info:{opacity:1}},DID_ABORT_ITEM_PROCESSING:{buttonRemoveItem:{opacity:1},buttonProcessItem:{opacity:1},info:{translateX:Ie},status:{opacity:1}},DID_REVERT_ITEM_PROCESSING:en},Tc=le({create:({root:e})=>{e.element.innerHTML=e.query(\"GET_ICON_DONE\")},name:\"processing-complete-indicator\",ignoreRect:!0,mixins:{styles:[\"scaleX\",\"scaleY\",\"opacity\"],animations:{scaleX:\"spring\",scaleY:\"spring\",opacity:{type:\"tween\",duration:250}}}}),Ic=({root:e,props:t})=>{let i=Object.keys(Di).reduce((g,f)=>(g[f]={...Di[f]},g),{}),{id:a}=t,n=e.query(\"GET_ALLOW_REVERT\"),l=e.query(\"GET_ALLOW_REMOVE\"),o=e.query(\"GET_ALLOW_PROCESS\"),r=e.query(\"GET_INSTANT_UPLOAD\"),s=e.query(\"IS_ASYNC\"),p=e.query(\"GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN\"),c;s?o&&!n?c=g=>!/RevertItemProcessing/.test(g):!o&&n?c=g=>!/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(g):!o&&!n&&(c=g=>!/Process/.test(g)):c=g=>!/Process/.test(g);let d=c?Ci.filter(c):Ci.concat();if(r&&n&&(i.RevertItemProcessing.label=\"GET_LABEL_BUTTON_REMOVE_ITEM\",i.RevertItemProcessing.icon=\"GET_ICON_REMOVE\"),s&&!n){let g=ut.DID_COMPLETE_ITEM_PROCESSING;g.info.translateX=fc,g.info.translateY=ei,g.status.translateY=ei,g.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}if(s&&!o&&([\"DID_START_ITEM_PROCESSING\",\"DID_REQUEST_ITEM_PROCESSING\",\"DID_UPDATE_ITEM_PROCESS_PROGRESS\",\"DID_THROW_ITEM_PROCESSING_ERROR\"].forEach(g=>{ut[g].status.translateY=ei}),ut.DID_THROW_ITEM_PROCESSING_ERROR.status.translateX=gc),p&&n){i.RevertItemProcessing.align=\"BUTTON_REMOVE_ITEM_POSITION\";let g=ut.DID_COMPLETE_ITEM_PROCESSING;g.info.translateX=Ie,g.status.translateY=ei,g.processingCompleteIndicator={opacity:1,scaleX:1,scaleY:1}}l||(i.RemoveItem.disabled=!0),te(i,(g,f)=>{let h=e.createChildView(Cn,{label:e.query(f.label),icon:e.query(f.icon),opacity:0});d.includes(g)&&e.appendChildView(h),f.disabled&&(h.element.setAttribute(\"disabled\",\"disabled\"),h.element.setAttribute(\"hidden\",\"hidden\")),h.element.dataset.align=e.query(`GET_STYLE_${f.align}`),h.element.classList.add(f.className),h.on(\"click\",I=>{I.stopPropagation(),!f.disabled&&e.dispatch(f.action,{query:a})}),e.ref[`button${g}`]=h}),e.ref.processingCompleteIndicator=e.appendChildView(e.createChildView(Tc)),e.ref.processingCompleteIndicator.element.dataset.align=e.query(\"GET_STYLE_BUTTON_PROCESS_ITEM_POSITION\"),e.ref.info=e.appendChildView(e.createChildView(rc,{id:a})),e.ref.status=e.appendChildView(e.createChildView(uc,{id:a}));let m=e.appendChildView(e.createChildView(Ka,{opacity:0,align:e.query(\"GET_STYLE_LOAD_INDICATOR_POSITION\")}));m.element.classList.add(\"filepond--load-indicator\"),e.ref.loadProgressIndicator=m;let u=e.appendChildView(e.createChildView(Ka,{opacity:0,align:e.query(\"GET_STYLE_PROGRESS_INDICATOR_POSITION\")}));u.element.classList.add(\"filepond--process-indicator\"),e.ref.processProgressIndicator=u,e.ref.activeStyles=[]},vc=({root:e,actions:t,props:i})=>{xc({root:e,actions:t,props:i});let a=t.concat().filter(n=>/^DID_/.test(n.type)).reverse().find(n=>ut[n.type]);if(a){e.ref.activeStyles=[];let n=ut[a.type];te(Ec,(l,o)=>{let r=e.ref[l];te(o,(s,p)=>{let c=n[l]&&typeof n[l][s]<\"u\"?n[l][s]:p;e.ref.activeStyles.push({control:r,key:s,value:c})})})}e.ref.activeStyles.forEach(({control:n,key:l,value:o})=>{n[l]=typeof o==\"function\"?o(e):o})},xc=fe({DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING:({root:e,action:t})=>{e.ref.buttonAbortItemProcessing.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD:({root:e,action:t})=>{e.ref.buttonAbortItemLoad.label=t.value},DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL:({root:e,action:t})=>{e.ref.buttonAbortItemRemoval.label=t.value},DID_REQUEST_ITEM_PROCESSING:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_START_ITEM_LOAD:({root:e})=>{e.ref.loadProgressIndicator.spin=!0,e.ref.loadProgressIndicator.progress=0},DID_START_ITEM_REMOVE:({root:e})=>{e.ref.processProgressIndicator.spin=!0,e.ref.processProgressIndicator.progress=0},DID_UPDATE_ITEM_LOAD_PROGRESS:({root:e,action:t})=>{e.ref.loadProgressIndicator.spin=!1,e.ref.loadProgressIndicator.progress=t.progress},DID_UPDATE_ITEM_PROCESS_PROGRESS:({root:e,action:t})=>{e.ref.processProgressIndicator.spin=!1,e.ref.processProgressIndicator.progress=t.progress}}),yc=le({create:Ic,write:vc,didCreateView:e=>{it(\"CREATE_VIEW\",{...e,view:e})},name:\"file\"}),Rc=({root:e,props:t})=>{e.ref.fileName=Ge(\"legend\"),e.appendChild(e.ref.fileName),e.ref.file=e.appendChildView(e.createChildView(yc,{id:t.id})),e.ref.data=!1},Sc=({root:e,props:t})=>{ne(e.ref.fileName,Ki(e.query(\"GET_ITEM_NAME\",t.id)))},_c=le({create:Rc,ignoreRect:!0,write:fe({DID_LOAD_ITEM:Sc}),didCreateView:e=>{it(\"CREATE_VIEW\",{...e,view:e})},tag:\"fieldset\",name:\"file-wrapper\"}),tn={type:\"spring\",damping:.6,mass:7},wc=({root:e,props:t})=>{[{name:\"top\"},{name:\"center\",props:{translateY:null,scaleY:null},mixins:{animations:{scaleY:tn},styles:[\"translateY\",\"scaleY\"]}},{name:\"bottom\",props:{translateY:null},mixins:{animations:{translateY:tn},styles:[\"translateY\"]}}].forEach(i=>{Lc(e,i,t.name)}),e.element.classList.add(`filepond--${t.name}`),e.ref.scalable=null},Lc=(e,t,i)=>{let a=le({name:`panel-${t.name} filepond--${i}`,mixins:t.mixins,ignoreRectUpdate:!0}),n=e.createChildView(a,t.props);e.ref[t.name]=e.appendChildView(n)},Mc=({root:e,props:t})=>{if((e.ref.scalable===null||t.scalable!==e.ref.scalable)&&(e.ref.scalable=In(t.scalable)?t.scalable:!0,e.element.dataset.scalable=e.ref.scalable),!t.height)return;let i=e.ref.top.rect.element,a=e.ref.bottom.rect.element,n=Math.max(i.height+a.height,t.height);e.ref.center.translateY=i.height,e.ref.center.scaleY=(n-i.height-a.height)/100,e.ref.bottom.translateY=n-a.height},Vn=le({name:\"panel\",read:({root:e,props:t})=>t.heightCurrent=e.ref.bottom.translateY,write:Mc,create:wc,ignoreRect:!0,mixins:{apis:[\"height\",\"heightCurrent\",\"scalable\"]}}),Ac=e=>{let t=e.map(a=>a.id),i;return{setIndex:a=>{i=a},getIndex:()=>i,getItemIndex:a=>t.indexOf(a.id)}},an={type:\"spring\",stiffness:.75,damping:.45,mass:10},nn=\"spring\",ln={DID_START_ITEM_LOAD:\"busy\",DID_UPDATE_ITEM_LOAD_PROGRESS:\"loading\",DID_THROW_ITEM_INVALID:\"load-invalid\",DID_THROW_ITEM_LOAD_ERROR:\"load-error\",DID_LOAD_ITEM:\"idle\",DID_THROW_ITEM_REMOVE_ERROR:\"remove-error\",DID_START_ITEM_REMOVE:\"busy\",DID_START_ITEM_PROCESSING:\"busy processing\",DID_REQUEST_ITEM_PROCESSING:\"busy processing\",DID_UPDATE_ITEM_PROCESS_PROGRESS:\"processing\",DID_COMPLETE_ITEM_PROCESSING:\"processing-complete\",DID_THROW_ITEM_PROCESSING_ERROR:\"processing-error\",DID_THROW_ITEM_PROCESSING_REVERT_ERROR:\"processing-revert-error\",DID_ABORT_ITEM_PROCESSING:\"cancelled\",DID_REVERT_ITEM_PROCESSING:\"idle\"},zc=({root:e,props:t})=>{if(e.ref.handleClick=a=>e.dispatch(\"DID_ACTIVATE_ITEM\",{id:t.id}),e.element.id=`filepond--item-${t.id}`,e.element.addEventListener(\"click\",e.ref.handleClick),e.ref.container=e.appendChildView(e.createChildView(_c,{id:t.id})),e.ref.panel=e.appendChildView(e.createChildView(Vn,{name:\"item-panel\"})),e.ref.panel.height=null,t.markedForRemoval=!1,!e.query(\"GET_ALLOW_REORDER\"))return;e.element.dataset.dragState=\"idle\";let i=a=>{if(!a.isPrimary)return;let n=!1,l={x:a.pageX,y:a.pageY};t.dragOrigin={x:e.translateX,y:e.translateY},t.dragCenter={x:a.offsetX,y:a.offsetY};let o=Ac(e.query(\"GET_ACTIVE_ITEMS\"));e.dispatch(\"DID_GRAB_ITEM\",{id:t.id,dragState:o});let r=d=>{if(!d.isPrimary)return;d.stopPropagation(),d.preventDefault(),t.dragOffset={x:d.pageX-l.x,y:d.pageY-l.y},t.dragOffset.x*t.dragOffset.x+t.dragOffset.y*t.dragOffset.y>16&&!n&&(n=!0,e.element.removeEventListener(\"click\",e.ref.handleClick)),e.dispatch(\"DID_DRAG_ITEM\",{id:t.id,dragState:o})},s=d=>{d.isPrimary&&(t.dragOffset={x:d.pageX-l.x,y:d.pageY-l.y},c())},p=()=>{c()},c=()=>{document.removeEventListener(\"pointercancel\",p),document.removeEventListener(\"pointermove\",r),document.removeEventListener(\"pointerup\",s),e.dispatch(\"DID_DROP_ITEM\",{id:t.id,dragState:o}),n&&setTimeout(()=>e.element.addEventListener(\"click\",e.ref.handleClick),0)};document.addEventListener(\"pointercancel\",p),document.addEventListener(\"pointermove\",r),document.addEventListener(\"pointerup\",s)};e.element.addEventListener(\"pointerdown\",i)},Pc=fe({DID_UPDATE_PANEL_HEIGHT:({root:e,action:t})=>{e.height=t.height}}),Fc=fe({DID_GRAB_ITEM:({root:e,props:t})=>{t.dragOrigin={x:e.translateX,y:e.translateY}},DID_DRAG_ITEM:({root:e})=>{e.element.dataset.dragState=\"drag\"},DID_DROP_ITEM:({root:e,props:t})=>{t.dragOffset=null,t.dragOrigin=null,e.element.dataset.dragState=\"drop\"}},({root:e,actions:t,props:i,shouldOptimize:a})=>{e.element.dataset.dragState===\"drop\"&&e.scaleX<=1&&(e.element.dataset.dragState=\"idle\");let n=t.concat().filter(o=>/^DID_/.test(o.type)).reverse().find(o=>ln[o.type]);n&&n.type!==i.currentState&&(i.currentState=n.type,e.element.dataset.filepondItemState=ln[i.currentState]||\"\");let l=e.query(\"GET_ITEM_PANEL_ASPECT_RATIO\")||e.query(\"GET_PANEL_ASPECT_RATIO\");l?a||(e.height=e.rect.element.width*l):(Pc({root:e,actions:t,props:i}),!e.height&&e.ref.container.rect.element.height>0&&(e.height=e.ref.container.rect.element.height)),a&&(e.ref.panel.height=null),e.ref.panel.height=e.height}),Oc=le({create:zc,write:Fc,destroy:({root:e,props:t})=>{e.element.removeEventListener(\"click\",e.ref.handleClick),e.dispatch(\"RELEASE_ITEM\",{query:t.id})},tag:\"li\",name:\"item\",mixins:{apis:[\"id\",\"interactionMethod\",\"markedForRemoval\",\"spawnDate\",\"dragCenter\",\"dragOrigin\",\"dragOffset\"],styles:[\"translateX\",\"translateY\",\"scaleX\",\"scaleY\",\"opacity\",\"height\"],animations:{scaleX:nn,scaleY:nn,translateX:an,translateY:an,opacity:{type:\"tween\",duration:150}}}}),Zi=(e,t)=>Math.max(1,Math.floor((e+1)/t)),Qi=(e,t,i)=>{if(!i)return;let a=e.rect.element.width,n=t.length,l=null;if(n===0||i.top<t[0].rect.element.top)return-1;let r=t[0].rect.element,s=r.marginLeft+r.marginRight,p=r.width+s,c=Zi(a,p);if(c===1){for(let u=0;u<n;u++){let g=t[u],f=g.rect.outer.top+g.rect.element.height*.5;if(i.top<f)return u}return n}let d=r.marginTop+r.marginBottom,m=r.height+d;for(let u=0;u<n;u++){let g=u%c,f=Math.floor(u/c),h=g*p,I=f*m,b=I-r.marginTop,E=h+p,v=I+m+r.marginBottom;if(i.top<v&&i.top>b){if(i.left<E)return u;u!==n-1?l=u:l=null}}return l!==null?l:n},ti={height:0,width:0,get getHeight(){return this.height},set setHeight(e){(this.height===0||e===0)&&(this.height=e)},get getWidth(){return this.width},set setWidth(e){(this.width===0||e===0)&&(this.width=e)},setDimensions:function(e,t){(this.height===0||e===0)&&(this.height=e),(this.width===0||t===0)&&(this.width=t)}},Dc=({root:e})=>{se(e.element,\"role\",\"list\"),e.ref.lastItemSpanwDate=Date.now()},Cc=({root:e,action:t})=>{let{id:i,index:a,interactionMethod:n}=t;e.ref.addIndex=a;let l=Date.now(),o=l,r=1;if(n!==Re.NONE){r=0;let s=e.query(\"GET_ITEM_INSERT_INTERVAL\"),p=l-e.ref.lastItemSpanwDate;o=p<s?l+(s-p):l}e.ref.lastItemSpanwDate=o,e.appendChildView(e.createChildView(Oc,{spawnDate:o,id:i,opacity:r,interactionMethod:n}),a)},on=(e,t,i,a=0,n=1)=>{e.dragOffset?(e.translateX=null,e.translateY=null,e.translateX=e.dragOrigin.x+e.dragOffset.x,e.translateY=e.dragOrigin.y+e.dragOffset.y,e.scaleX=1.025,e.scaleY=1.025):(e.translateX=t,e.translateY=i,Date.now()>e.spawnDate&&(e.opacity===0&&Bc(e,t,i,a,n),e.scaleX=1,e.scaleY=1,e.opacity=1))},Bc=(e,t,i,a,n)=>{e.interactionMethod===Re.NONE?(e.translateX=null,e.translateX=t,e.translateY=null,e.translateY=i):e.interactionMethod===Re.DROP?(e.translateX=null,e.translateX=t-a*20,e.translateY=null,e.translateY=i-n*10,e.scaleX=.8,e.scaleY=.8):e.interactionMethod===Re.BROWSE?(e.translateY=null,e.translateY=i-30):e.interactionMethod===Re.API&&(e.translateX=null,e.translateX=t-30,e.translateY=null)},kc=({root:e,action:t})=>{let{id:i}=t,a=e.childViews.find(n=>n.id===i);a&&(a.scaleX=.9,a.scaleY=.9,a.opacity=0,a.markedForRemoval=!0)},Ai=e=>e.rect.element.height+e.rect.element.marginBottom+e.rect.element.marginTop,Nc=e=>e.rect.element.width+e.rect.element.marginLeft*.5+e.rect.element.marginRight*.5,Vc=({root:e,action:t})=>{let{id:i,dragState:a}=t,n=e.query(\"GET_ITEM\",{id:i}),l=e.childViews.find(h=>h.id===i),o=e.childViews.length,r=a.getItemIndex(n);if(!l)return;let s={x:l.dragOrigin.x+l.dragOffset.x+l.dragCenter.x,y:l.dragOrigin.y+l.dragOffset.y+l.dragCenter.y},p=Ai(l),c=Nc(l),d=Math.floor(e.rect.outer.width/c);d>o&&(d=o);let m=Math.floor(o/d+1);ti.setHeight=p*m,ti.setWidth=c*d;var u={y:Math.floor(s.y/p),x:Math.floor(s.x/c),getGridIndex:function(){return s.y>ti.getHeight||s.y<0||s.x>ti.getWidth||s.x<0?r:this.y*d+this.x},getColIndex:function(){let I=e.query(\"GET_ACTIVE_ITEMS\"),b=e.childViews.filter(z=>z.rect.element.height),E=I.map(z=>b.find(A=>A.id===z.id)),v=E.findIndex(z=>z===l),y=Ai(l),T=E.length,_=T,x=0,R=0,P=0;for(let z=0;z<T;z++)if(x=Ai(E[z]),P=R,R=P+x,s.y<R){if(v>z){if(s.y<P+y){_=z;break}continue}_=z;break}return _}};let g=d>1?u.getGridIndex():u.getColIndex();e.dispatch(\"MOVE_ITEM\",{query:l,index:g});let f=a.getIndex();if(f===void 0||f!==g){if(a.setIndex(g),f===void 0)return;e.dispatch(\"DID_REORDER_ITEMS\",{items:e.query(\"GET_ACTIVE_ITEMS\"),origin:r,target:g})}},Gc=fe({DID_ADD_ITEM:Cc,DID_REMOVE_ITEM:kc,DID_DRAG_ITEM:Vc}),Uc=({root:e,props:t,actions:i,shouldOptimize:a})=>{Gc({root:e,props:t,actions:i});let{dragCoordinates:n}=t,l=e.rect.element.width,o=e.childViews.filter(E=>E.rect.element.height),r=e.query(\"GET_ACTIVE_ITEMS\").map(E=>o.find(v=>v.id===E.id)).filter(E=>E),s=n?Qi(e,r,n):null,p=e.ref.addIndex||null;e.ref.addIndex=null;let c=0,d=0,m=0;if(r.length===0)return;let u=r[0].rect.element,g=u.marginTop+u.marginBottom,f=u.marginLeft+u.marginRight,h=u.width+f,I=u.height+g,b=Zi(l,h);if(b===1){let E=0,v=0;r.forEach((y,T)=>{if(s){let R=T-s;R===-2?v=-g*.25:R===-1?v=-g*.75:R===0?v=g*.75:R===1?v=g*.25:v=0}a&&(y.translateX=null,y.translateY=null),y.markedForRemoval||on(y,0,E+v);let x=(y.rect.element.height+g)*(y.markedForRemoval?y.opacity:1);E+=x})}else{let E=0,v=0;r.forEach((y,T)=>{T===s&&(c=1),T===p&&(m+=1),y.markedForRemoval&&y.opacity<.5&&(d-=1);let _=T+m+c+d,x=_%b,R=Math.floor(_/b),P=x*h,z=R*I,A=Math.sign(P-E),B=Math.sign(z-v);E=P,v=z,!y.markedForRemoval&&(a&&(y.translateX=null,y.translateY=null),on(y,P,z,A,B))})}},Hc=(e,t)=>t.filter(i=>i.data&&i.data.id?e.id===i.data.id:!0),Wc=le({create:Dc,write:Uc,tag:\"ul\",name:\"list\",didWriteView:({root:e})=>{e.childViews.filter(t=>t.markedForRemoval&&t.opacity===0&&t.resting).forEach(t=>{t._destroy(),e.removeChildView(t)})},filterFrameActionsForChild:Hc,mixins:{apis:[\"dragCoordinates\"]}}),jc=({root:e,props:t})=>{e.ref.list=e.appendChildView(e.createChildView(Wc)),t.dragCoordinates=null,t.overflowing=!1},Yc=({root:e,props:t,action:i})=>{e.query(\"GET_ITEM_INSERT_LOCATION_FREEDOM\")&&(t.dragCoordinates={left:i.position.scopeLeft-e.ref.list.rect.element.left,top:i.position.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},qc=({props:e})=>{e.dragCoordinates=null},$c=fe({DID_DRAG:Yc,DID_END_DRAG:qc}),Xc=({root:e,props:t,actions:i})=>{if($c({root:e,props:t,actions:i}),e.ref.list.dragCoordinates=t.dragCoordinates,t.overflowing&&!t.overflow&&(t.overflowing=!1,e.element.dataset.state=\"\",e.height=null),t.overflow){let a=Math.round(t.overflow);a!==e.height&&(t.overflowing=!0,e.element.dataset.state=\"overflow\",e.height=a)}},Kc=le({create:jc,write:Xc,name:\"list-scroller\",mixins:{apis:[\"overflow\",\"dragCoordinates\"],styles:[\"height\",\"translateY\"],animations:{translateY:\"spring\"}}}),Pe=(e,t,i,a=\"\")=>{i?se(e,t,a):e.removeAttribute(t)},Zc=e=>{if(!(!e||e.value===\"\")){try{e.value=\"\"}catch{}if(e.value){let t=Ge(\"form\"),i=e.parentNode,a=e.nextSibling;t.appendChild(e),t.reset(),a?i.insertBefore(e,a):i.appendChild(e)}}},Qc=({root:e,props:t})=>{e.element.id=`filepond--browser-${t.id}`,se(e.element,\"name\",e.query(\"GET_NAME\")),se(e.element,\"aria-controls\",`filepond--assistant-${t.id}`),se(e.element,\"aria-labelledby\",`filepond--drop-label-${t.id}`),Gn({root:e,action:{value:e.query(\"GET_ACCEPTED_FILE_TYPES\")}}),Un({root:e,action:{value:e.query(\"GET_ALLOW_MULTIPLE\")}}),Hn({root:e,action:{value:e.query(\"GET_ALLOW_DIRECTORIES_ONLY\")}}),ki({root:e}),Wn({root:e,action:{value:e.query(\"GET_REQUIRED\")}}),jn({root:e,action:{value:e.query(\"GET_CAPTURE_METHOD\")}}),e.ref.handleChange=i=>{if(!e.element.value)return;let a=Array.from(e.element.files).map(n=>(n._relativePath=n.webkitRelativePath,n));setTimeout(()=>{t.onload(a),Zc(e.element)},250)},e.element.addEventListener(\"change\",e.ref.handleChange)},Gn=({root:e,action:t})=>{e.query(\"GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE\")&&Pe(e.element,\"accept\",!!t.value,t.value?t.value.join(\",\"):\"\")},Un=({root:e,action:t})=>{Pe(e.element,\"multiple\",t.value)},Hn=({root:e,action:t})=>{Pe(e.element,\"webkitdirectory\",t.value)},ki=({root:e})=>{let t=e.query(\"GET_DISABLED\"),i=e.query(\"GET_ALLOW_BROWSE\"),a=t||!i;Pe(e.element,\"disabled\",a)},Wn=({root:e,action:t})=>{t.value?e.query(\"GET_TOTAL_ITEMS\")===0&&Pe(e.element,\"required\",!0):Pe(e.element,\"required\",!1)},jn=({root:e,action:t})=>{Pe(e.element,\"capture\",!!t.value,t.value===!0?\"\":t.value)},rn=({root:e})=>{let{element:t}=e;if(e.query(\"GET_TOTAL_ITEMS\")>0){Pe(t,\"required\",!1),Pe(t,\"name\",!1);let i=e.query(\"GET_ACTIVE_ITEMS\"),a=!1;for(let n=0;n<i.length;n++)i[n].status===H.LOAD_ERROR&&(a=!0);e.element.setCustomValidity(a?e.query(\"GET_LABEL_INVALID_FIELD\"):\"\")}else Pe(t,\"name\",!0,e.query(\"GET_NAME\")),e.query(\"GET_CHECK_VALIDITY\")&&t.setCustomValidity(\"\"),e.query(\"GET_REQUIRED\")&&Pe(t,\"required\",!0)},Jc=({root:e})=>{e.query(\"GET_CHECK_VALIDITY\")&&e.element.setCustomValidity(e.query(\"GET_LABEL_INVALID_FIELD\"))},ed=le({tag:\"input\",name:\"browser\",ignoreRect:!0,ignoreRectUpdate:!0,attributes:{type:\"file\"},create:Qc,destroy:({root:e})=>{e.element.removeEventListener(\"change\",e.ref.handleChange)},write:fe({DID_LOAD_ITEM:rn,DID_REMOVE_ITEM:rn,DID_THROW_ITEM_INVALID:Jc,DID_SET_DISABLED:ki,DID_SET_ALLOW_BROWSE:ki,DID_SET_ALLOW_DIRECTORIES_ONLY:Hn,DID_SET_ALLOW_MULTIPLE:Un,DID_SET_ACCEPTED_FILE_TYPES:Gn,DID_SET_CAPTURE_METHOD:jn,DID_SET_REQUIRED:Wn})}),sn={ENTER:13,SPACE:32},td=({root:e,props:t})=>{let i=Ge(\"label\");se(i,\"for\",`filepond--browser-${t.id}`),se(i,\"id\",`filepond--drop-label-${t.id}`),e.ref.handleKeyDown=a=>{(a.keyCode===sn.ENTER||a.keyCode===sn.SPACE)&&(a.preventDefault(),e.ref.label.click())},e.ref.handleClick=a=>{a.target===i||i.contains(a.target)||e.ref.label.click()},i.addEventListener(\"keydown\",e.ref.handleKeyDown),e.element.addEventListener(\"click\",e.ref.handleClick),Yn(i,t.caption),e.appendChild(i),e.ref.label=i},Yn=(e,t)=>{e.innerHTML=t;let i=e.querySelector(\".filepond--label-action\");return i&&se(i,\"tabindex\",\"0\"),t},id=le({name:\"drop-label\",ignoreRect:!0,create:td,destroy:({root:e})=>{e.ref.label.addEventListener(\"keydown\",e.ref.handleKeyDown),e.element.removeEventListener(\"click\",e.ref.handleClick)},write:fe({DID_SET_LABEL_IDLE:({root:e,action:t})=>{Yn(e.ref.label,t.value)}}),mixins:{styles:[\"opacity\",\"translateX\",\"translateY\"],animations:{opacity:{type:\"tween\",duration:150},translateX:\"spring\",translateY:\"spring\"}}}),ad=le({name:\"drip-blob\",ignoreRect:!0,mixins:{styles:[\"translateX\",\"translateY\",\"scaleX\",\"scaleY\",\"opacity\"],animations:{scaleX:\"spring\",scaleY:\"spring\",translateX:\"spring\",translateY:\"spring\",opacity:{type:\"tween\",duration:250}}}}),nd=({root:e})=>{let t=e.rect.element.width*.5,i=e.rect.element.height*.5;e.ref.blob=e.appendChildView(e.createChildView(ad,{opacity:0,scaleX:2.5,scaleY:2.5,translateX:t,translateY:i}))},ld=({root:e,action:t})=>{if(!e.ref.blob){nd({root:e});return}e.ref.blob.translateX=t.position.scopeLeft,e.ref.blob.translateY=t.position.scopeTop,e.ref.blob.scaleX=1,e.ref.blob.scaleY=1,e.ref.blob.opacity=1},od=({root:e})=>{e.ref.blob&&(e.ref.blob.opacity=0)},rd=({root:e})=>{e.ref.blob&&(e.ref.blob.scaleX=2.5,e.ref.blob.scaleY=2.5,e.ref.blob.opacity=0)},sd=({root:e,props:t,actions:i})=>{cd({root:e,props:t,actions:i});let{blob:a}=e.ref;i.length===0&&a&&a.opacity===0&&(e.removeChildView(a),e.ref.blob=null)},cd=fe({DID_DRAG:ld,DID_DROP:rd,DID_END_DRAG:od}),dd=le({ignoreRect:!0,ignoreRectUpdate:!0,name:\"drip\",write:sd}),qn=(e,t)=>{try{let i=new DataTransfer;t.forEach(a=>{a instanceof File?i.items.add(a):i.items.add(new File([a],a.name,{type:a.type}))}),e.files=i.files}catch{return!1}return!0},pd=({root:e})=>{e.ref.fields={};let t=document.createElement(\"legend\");t.textContent=\"Files\",e.element.appendChild(t)},gi=(e,t)=>e.ref.fields[t],Ji=e=>{e.query(\"GET_ACTIVE_ITEMS\").forEach(t=>{e.ref.fields[t.id]&&e.element.appendChild(e.ref.fields[t.id])})},cn=({root:e})=>Ji(e),md=({root:e,action:t})=>{let n=!(e.query(\"GET_ITEM\",t.id).origin===re.LOCAL)&&e.query(\"SHOULD_UPDATE_FILE_INPUT\"),l=Ge(\"input\");l.type=n?\"file\":\"hidden\",l.name=e.query(\"GET_NAME\"),e.ref.fields[t.id]=l,Ji(e)},ud=({root:e,action:t})=>{let i=gi(e,t.id);if(!i||(t.serverFileReference!==null&&(i.value=t.serverFileReference),!e.query(\"SHOULD_UPDATE_FILE_INPUT\")))return;let a=e.query(\"GET_ITEM\",t.id);qn(i,[a.file])},gd=({root:e,action:t})=>{e.query(\"SHOULD_UPDATE_FILE_INPUT\")&&setTimeout(()=>{let i=gi(e,t.id);i&&qn(i,[t.file])},0)},fd=({root:e})=>{e.element.disabled=e.query(\"GET_DISABLED\")},hd=({root:e,action:t})=>{let i=gi(e,t.id);i&&(i.parentNode&&i.parentNode.removeChild(i),delete e.ref.fields[t.id])},bd=({root:e,action:t})=>{let i=gi(e,t.id);i&&(t.value===null?i.removeAttribute(\"value\"):i.type!=\"file\"&&(i.value=t.value),Ji(e))},Ed=fe({DID_SET_DISABLED:fd,DID_ADD_ITEM:md,DID_LOAD_ITEM:ud,DID_REMOVE_ITEM:hd,DID_DEFINE_VALUE:bd,DID_PREPARE_OUTPUT:gd,DID_REORDER_ITEMS:cn,DID_SORT_ITEMS:cn}),Td=le({tag:\"fieldset\",name:\"data\",create:pd,write:Ed,ignoreRect:!0}),Id=e=>\"getRootNode\"in e?e.getRootNode():document,vd=[\"jpg\",\"jpeg\",\"png\",\"gif\",\"bmp\",\"webp\",\"svg\",\"tiff\"],xd=[\"css\",\"csv\",\"html\",\"txt\"],yd={zip:\"zip|compressed\",epub:\"application/epub+zip\"},$n=(e=\"\")=>(e=e.toLowerCase(),vd.includes(e)?\"image/\"+(e===\"jpg\"?\"jpeg\":e===\"svg\"?\"svg+xml\":e):xd.includes(e)?\"text/\"+e:yd[e]||\"\"),ea=e=>new Promise((t,i)=>{let a=zd(e);if(a.length&&!Rd(e))return t(a);Sd(e).then(t)}),Rd=e=>e.files?e.files.length>0:!1,Sd=e=>new Promise((t,i)=>{let a=(e.items?Array.from(e.items):[]).filter(n=>_d(n)).map(n=>wd(n));if(!a.length){t(e.files?Array.from(e.files):[]);return}Promise.all(a).then(n=>{let l=[];n.forEach(o=>{l.push.apply(l,o)}),t(l.filter(o=>o).map(o=>(o._relativePath||(o._relativePath=o.webkitRelativePath),o)))}).catch(console.error)}),_d=e=>{if(Xn(e)){let t=ta(e);if(t)return t.isFile||t.isDirectory}return e.kind===\"file\"},wd=e=>new Promise((t,i)=>{if(Ad(e)){Ld(ta(e)).then(t).catch(i);return}t([e.getAsFile()])}),Ld=e=>new Promise((t,i)=>{let a=[],n=0,l=0,o=()=>{l===0&&n===0&&t(a)},r=s=>{n++;let p=s.createReader(),c=()=>{p.readEntries(d=>{if(d.length===0){n--,o();return}d.forEach(m=>{m.isDirectory?r(m):(l++,m.file(u=>{let g=Md(u);m.fullPath&&(g._relativePath=m.fullPath),a.push(g),l--,o()}))}),c()},i)};c()};r(e)}),Md=e=>{if(e.type.length)return e;let t=e.lastModifiedDate,i=e.name,a=$n(ui(e.name));return a.length&&(e=e.slice(0,e.size,a),e.name=i,e.lastModifiedDate=t),e},Ad=e=>Xn(e)&&(ta(e)||{}).isDirectory,Xn=e=>\"webkitGetAsEntry\"in e,ta=e=>e.webkitGetAsEntry(),zd=e=>{let t=[];try{if(t=Fd(e),t.length)return t;t=Pd(e)}catch{}return t},Pd=e=>{let t=e.getData(\"url\");return typeof t==\"string\"&&t.length?[t]:[]},Fd=e=>{let t=e.getData(\"text/html\");if(typeof t==\"string\"&&t.length){let i=t.match(/src\\s*=\\s*\"(.+?)\"/);if(i)return[i[1]]}return[]},ri=[],tt=e=>({pageLeft:e.pageX,pageTop:e.pageY,scopeLeft:e.offsetX||e.layerX,scopeTop:e.offsetY||e.layerY}),Od=(e,t,i)=>{let a=Dd(t),n={element:e,filterElement:i,state:null,ondrop:()=>{},onenter:()=>{},ondrag:()=>{},onexit:()=>{},onload:()=>{},allowdrop:()=>{}};return n.destroy=a.addListener(n),n},Dd=e=>{let t=ri.find(a=>a.element===e);if(t)return t;let i=Cd(e);return ri.push(i),i},Cd=e=>{let t=[],i={dragenter:kd,dragover:Nd,dragleave:Gd,drop:Vd},a={};te(i,(l,o)=>{a[l]=o(e,t),e.addEventListener(l,a[l],!1)});let n={element:e,addListener:l=>(t.push(l),()=>{t.splice(t.indexOf(l),1),t.length===0&&(ri.splice(ri.indexOf(n),1),te(i,o=>{e.removeEventListener(o,a[o],!1)}))})};return n},Bd=(e,t)=>(\"elementFromPoint\"in e||(e=document),e.elementFromPoint(t.x,t.y)),ia=(e,t)=>{let i=Id(t),a=Bd(i,{x:e.pageX-window.pageXOffset,y:e.pageY-window.pageYOffset});return a===t||t.contains(a)},Kn=null,ii=(e,t)=>{try{e.dropEffect=t}catch{}},kd=(e,t)=>i=>{i.preventDefault(),Kn=i.target,t.forEach(a=>{let{element:n,onenter:l}=a;ia(i,n)&&(a.state=\"enter\",l(tt(i)))})},Nd=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{let l=!1;t.some(o=>{let{filterElement:r,element:s,onenter:p,onexit:c,ondrag:d,allowdrop:m}=o;ii(a,\"copy\");let u=m(n);if(!u){ii(a,\"none\");return}if(ia(i,s)){if(l=!0,o.state===null){o.state=\"enter\",p(tt(i));return}if(o.state=\"over\",r&&!u){ii(a,\"none\");return}d(tt(i))}else r&&!l&&ii(a,\"none\"),o.state&&(o.state=null,c(tt(i)))})})},Vd=(e,t)=>i=>{i.preventDefault();let a=i.dataTransfer;ea(a).then(n=>{t.forEach(l=>{let{filterElement:o,element:r,ondrop:s,onexit:p,allowdrop:c}=l;if(l.state=null,!(o&&!ia(i,r))){if(!c(n))return p(tt(i));s(tt(i),n)}})})},Gd=(e,t)=>i=>{Kn===i.target&&t.forEach(a=>{let{onexit:n}=a;a.state=null,n(tt(i))})},Ud=(e,t,i)=>{e.classList.add(\"filepond--hopper\");let{catchesDropsOnPage:a,requiresDropOnElement:n,filterItems:l=c=>c}=i,o=Od(e,a?document.documentElement:e,n),r=\"\",s=\"\";o.allowdrop=c=>t(l(c)),o.ondrop=(c,d)=>{let m=l(d);if(!t(m)){p.ondragend(c);return}s=\"drag-drop\",p.onload(m,c)},o.ondrag=c=>{p.ondrag(c)},o.onenter=c=>{s=\"drag-over\",p.ondragstart(c)},o.onexit=c=>{s=\"drag-exit\",p.ondragend(c)};let p={updateHopperState:()=>{r!==s&&(e.dataset.hopperState=s,r=s)},onload:()=>{},ondragstart:()=>{},ondrag:()=>{},ondragend:()=>{},destroy:()=>{o.destroy()}};return p},Ni=!1,gt=[],Zn=e=>{let t=document.activeElement;if(t&&(/textarea|input/i.test(t.nodeName)||t.getAttribute(\"contenteditable\")===\"true\"||t.getAttribute(\"contenteditable\")===\"\")){let a=!1,n=t;for(;n!==document.body;){if(n.classList.contains(\"filepond--root\")){a=!0;break}n=n.parentNode}if(!a)return}ea(e.clipboardData).then(a=>{a.length&&gt.forEach(n=>n(a))})},Hd=e=>{gt.includes(e)||(gt.push(e),!Ni&&(Ni=!0,document.addEventListener(\"paste\",Zn)))},Wd=e=>{qi(gt,gt.indexOf(e)),gt.length===0&&(document.removeEventListener(\"paste\",Zn),Ni=!1)},jd=()=>{let e=i=>{t.onload(i)},t={destroy:()=>{Wd(e)},onload:()=>{}};return Hd(e),t},Yd=({root:e,props:t})=>{e.element.id=`filepond--assistant-${t.id}`,se(e.element,\"role\",\"alert\"),se(e.element,\"aria-live\",\"polite\"),se(e.element,\"aria-relevant\",\"additions\")},dn=null,pn=null,zi=[],fi=(e,t)=>{e.element.textContent=t},qd=e=>{e.element.textContent=\"\"},Qn=(e,t,i)=>{let a=e.query(\"GET_TOTAL_ITEMS\");fi(e,`${i} ${t}, ${a} ${a===1?e.query(\"GET_LABEL_FILE_COUNT_SINGULAR\"):e.query(\"GET_LABEL_FILE_COUNT_PLURAL\")}`),clearTimeout(pn),pn=setTimeout(()=>{qd(e)},1500)},Jn=e=>e.element.parentNode.contains(document.activeElement),$d=({root:e,action:t})=>{if(!Jn(e))return;e.element.textContent=\"\";let i=e.query(\"GET_ITEM\",t.id);zi.push(i.filename),clearTimeout(dn),dn=setTimeout(()=>{Qn(e,zi.join(\", \"),e.query(\"GET_LABEL_FILE_ADDED\")),zi.length=0},750)},Xd=({root:e,action:t})=>{if(!Jn(e))return;let i=t.item;Qn(e,i.filename,e.query(\"GET_LABEL_FILE_REMOVED\"))},Kd=({root:e,action:t})=>{let a=e.query(\"GET_ITEM\",t.id).filename,n=e.query(\"GET_LABEL_FILE_PROCESSING_COMPLETE\");fi(e,`${a} ${n}`)},mn=({root:e,action:t})=>{let a=e.query(\"GET_ITEM\",t.id).filename,n=e.query(\"GET_LABEL_FILE_PROCESSING_ABORTED\");fi(e,`${a} ${n}`)},ai=({root:e,action:t})=>{let a=e.query(\"GET_ITEM\",t.id).filename;fi(e,`${t.status.main} ${a} ${t.status.sub}`)},Zd=le({create:Yd,ignoreRect:!0,ignoreRectUpdate:!0,write:fe({DID_LOAD_ITEM:$d,DID_REMOVE_ITEM:Xd,DID_COMPLETE_ITEM_PROCESSING:Kd,DID_ABORT_ITEM_PROCESSING:mn,DID_REVERT_ITEM_PROCESSING:mn,DID_THROW_ITEM_REMOVE_ERROR:ai,DID_THROW_ITEM_LOAD_ERROR:ai,DID_THROW_ITEM_INVALID:ai,DID_THROW_ITEM_PROCESSING_ERROR:ai}),tag:\"span\",name:\"assistant\"}),el=(e,t=\"-\")=>e.replace(new RegExp(`${t}.`,\"g\"),i=>i.charAt(1).toUpperCase()),tl=(e,t=16,i=!0)=>{let a=Date.now(),n=null;return(...l)=>{clearTimeout(n);let o=Date.now()-a,r=()=>{a=Date.now(),e(...l)};o<t?i||(n=setTimeout(r,t-o)):r()}},Qd=1e6,si=e=>e.preventDefault(),Jd=({root:e,props:t})=>{let i=e.query(\"GET_ID\");i&&(e.element.id=i);let a=e.query(\"GET_CLASS_NAME\");a&&a.split(\" \").filter(s=>s.length).forEach(s=>{e.element.classList.add(s)}),e.ref.label=e.appendChildView(e.createChildView(id,{...t,translateY:null,caption:e.query(\"GET_LABEL_IDLE\")})),e.ref.list=e.appendChildView(e.createChildView(Kc,{translateY:null})),e.ref.panel=e.appendChildView(e.createChildView(Vn,{name:\"panel-root\"})),e.ref.assistant=e.appendChildView(e.createChildView(Zd,{...t})),e.ref.data=e.appendChildView(e.createChildView(Td,{...t})),e.ref.measure=Ge(\"div\"),e.ref.measure.style.height=\"100%\",e.element.appendChild(e.ref.measure),e.ref.bounds=null,e.query(\"GET_STYLES\").filter(s=>!Ve(s.value)).map(({name:s,value:p})=>{e.element.dataset[s]=p}),e.ref.widthPrevious=null,e.ref.widthUpdated=tl(()=>{e.ref.updateHistory=[],e.dispatch(\"DID_RESIZE_ROOT\")},250),e.ref.previousAspectRatio=null,e.ref.updateHistory=[];let n=window.matchMedia(\"(pointer: fine) and (hover: hover)\").matches,l=\"PointerEvent\"in window;e.query(\"GET_ALLOW_REORDER\")&&l&&!n&&(e.element.addEventListener(\"touchmove\",si,{passive:!1}),e.element.addEventListener(\"gesturestart\",si));let o=e.query(\"GET_CREDITS\");if(o.length===2){let s=document.createElement(\"a\");s.className=\"filepond--credits\",s.href=o[0],s.tabIndex=-1,s.target=\"_blank\",s.rel=\"noopener noreferrer nofollow\",s.textContent=o[1],e.element.appendChild(s),e.ref.credits=s}},ep=({root:e,props:t,actions:i})=>{if(lp({root:e,props:t,actions:i}),i.filter(T=>/^DID_SET_STYLE_/.test(T.type)).filter(T=>!Ve(T.data.value)).map(({type:T,data:_})=>{let x=el(T.substring(8).toLowerCase(),\"_\");e.element.dataset[x]=_.value,e.invalidateLayout()}),e.rect.element.hidden)return;e.rect.element.width!==e.ref.widthPrevious&&(e.ref.widthPrevious=e.rect.element.width,e.ref.widthUpdated());let a=e.ref.bounds;a||(a=e.ref.bounds=ap(e),e.element.removeChild(e.ref.measure),e.ref.measure=null);let{hopper:n,label:l,list:o,panel:r}=e.ref;n&&n.updateHopperState();let s=e.query(\"GET_PANEL_ASPECT_RATIO\"),p=e.query(\"GET_ALLOW_MULTIPLE\"),c=e.query(\"GET_TOTAL_ITEMS\"),d=p?e.query(\"GET_MAX_FILES\")||Qd:1,m=c===d,u=i.find(T=>T.type===\"DID_ADD_ITEM\");if(m&&u){let T=u.data.interactionMethod;l.opacity=0,p?l.translateY=-40:T===Re.API?l.translateX=40:T===Re.BROWSE?l.translateY=40:l.translateY=30}else m||(l.opacity=1,l.translateX=0,l.translateY=0);let g=tp(e),f=ip(e),h=l.rect.element.height,I=!p||m?0:h,b=m?o.rect.element.marginTop:0,E=c===0?0:o.rect.element.marginBottom,v=I+b+f.visual+E,y=I+b+f.bounds+E;if(o.translateY=Math.max(0,I-o.rect.element.marginTop)-g.top,s){let T=e.rect.element.width,_=T*s;s!==e.ref.previousAspectRatio&&(e.ref.previousAspectRatio=s,e.ref.updateHistory=[]);let x=e.ref.updateHistory;x.push(T);let R=2;if(x.length>R*2){let z=x.length,A=z-10,B=0;for(let w=z;w>=A;w--)if(x[w]===x[w-2]&&B++,B>=R)return}r.scalable=!1,r.height=_;let P=_-I-(E-g.bottom)-(m?b:0);f.visual>P?o.overflow=P:o.overflow=null,e.height=_}else if(a.fixedHeight){r.scalable=!1;let T=a.fixedHeight-I-(E-g.bottom)-(m?b:0);f.visual>T?o.overflow=T:o.overflow=null}else if(a.cappedHeight){let T=v>=a.cappedHeight,_=Math.min(a.cappedHeight,v);r.scalable=!0,r.height=T?_:_-g.top-g.bottom;let x=_-I-(E-g.bottom)-(m?b:0);v>a.cappedHeight&&f.visual>x?o.overflow=x:o.overflow=null,e.height=Math.min(a.cappedHeight,y-g.top-g.bottom)}else{let T=c>0?g.top+g.bottom:0;r.scalable=!0,r.height=Math.max(h,v-T),e.height=Math.max(h,y-T)}e.ref.credits&&r.heightCurrent&&(e.ref.credits.style.transform=`translateY(${r.heightCurrent}px)`)},tp=e=>{let t=e.ref.list.childViews[0].childViews[0];return t?{top:t.rect.element.marginTop,bottom:t.rect.element.marginBottom}:{top:0,bottom:0}},ip=e=>{let t=0,i=0,a=e.ref.list,n=a.childViews[0],l=n.childViews.filter(b=>b.rect.element.height),o=e.query(\"GET_ACTIVE_ITEMS\").map(b=>l.find(E=>E.id===b.id)).filter(b=>b);if(o.length===0)return{visual:t,bounds:i};let r=n.rect.element.width,s=Qi(n,o,a.dragCoordinates),p=o[0].rect.element,c=p.marginTop+p.marginBottom,d=p.marginLeft+p.marginRight,m=p.width+d,u=p.height+c,g=typeof s<\"u\"&&s>=0?1:0,f=o.find(b=>b.markedForRemoval&&b.opacity<.45)?-1:0,h=o.length+g+f,I=Zi(r,m);return I===1?o.forEach(b=>{let E=b.rect.element.height+c;i+=E,t+=E*b.opacity}):(i=Math.ceil(h/I)*u,t=i),{visual:t,bounds:i}},ap=e=>{let t=e.ref.measureHeight||null;return{cappedHeight:parseInt(e.style.maxHeight,10)||null,fixedHeight:t===0?null:t}},aa=(e,t)=>{let i=e.query(\"GET_ALLOW_REPLACE\"),a=e.query(\"GET_ALLOW_MULTIPLE\"),n=e.query(\"GET_TOTAL_ITEMS\"),l=e.query(\"GET_MAX_FILES\"),o=t.length;return!a&&o>1?(e.dispatch(\"DID_THROW_MAX_FILES\",{source:t,error:ae(\"warning\",0,\"Max files\")}),!0):(l=a?l:1,!a&&i?!1:Et(l)&&n+o>l?(e.dispatch(\"DID_THROW_MAX_FILES\",{source:t,error:ae(\"warning\",0,\"Max files\")}),!0):!1)},np=(e,t,i)=>{let a=e.childViews[0];return Qi(a,t,{left:i.scopeLeft-a.rect.element.left,top:i.scopeTop-(e.rect.outer.top+e.rect.element.marginTop+e.rect.element.scrollTop)})},un=e=>{let t=e.query(\"GET_ALLOW_DROP\"),i=e.query(\"GET_DISABLED\"),a=t&&!i;if(a&&!e.ref.hopper){let n=Ud(e.element,l=>{let o=e.query(\"GET_BEFORE_DROP_FILE\")||(()=>!0);return e.query(\"GET_DROP_VALIDATION\")?l.every(s=>it(\"ALLOW_HOPPER_ITEM\",s,{query:e.query}).every(p=>p===!0)&&o(s)):!0},{filterItems:l=>{let o=e.query(\"GET_IGNORED_FILES\");return l.filter(r=>et(r)?!o.includes(r.name.toLowerCase()):!0)},catchesDropsOnPage:e.query(\"GET_DROP_ON_PAGE\"),requiresDropOnElement:e.query(\"GET_DROP_ON_ELEMENT\")});n.onload=(l,o)=>{let s=e.ref.list.childViews[0].childViews.filter(c=>c.rect.element.height),p=e.query(\"GET_ACTIVE_ITEMS\").map(c=>s.find(d=>d.id===c.id)).filter(c=>c);Ae(\"ADD_ITEMS\",l,{dispatch:e.dispatch}).then(c=>{if(aa(e,c))return!1;e.dispatch(\"ADD_ITEMS\",{items:c,index:np(e.ref.list,p,o),interactionMethod:Re.DROP})}),e.dispatch(\"DID_DROP\",{position:o}),e.dispatch(\"DID_END_DRAG\",{position:o})},n.ondragstart=l=>{e.dispatch(\"DID_START_DRAG\",{position:l})},n.ondrag=tl(l=>{e.dispatch(\"DID_DRAG\",{position:l})}),n.ondragend=l=>{e.dispatch(\"DID_END_DRAG\",{position:l})},e.ref.hopper=n,e.ref.drip=e.appendChildView(e.createChildView(dd))}else!a&&e.ref.hopper&&(e.ref.hopper.destroy(),e.ref.hopper=null,e.removeChildView(e.ref.drip))},gn=(e,t)=>{let i=e.query(\"GET_ALLOW_BROWSE\"),a=e.query(\"GET_DISABLED\"),n=i&&!a;n&&!e.ref.browser?e.ref.browser=e.appendChildView(e.createChildView(ed,{...t,onload:l=>{Ae(\"ADD_ITEMS\",l,{dispatch:e.dispatch}).then(o=>{if(aa(e,o))return!1;e.dispatch(\"ADD_ITEMS\",{items:o,index:-1,interactionMethod:Re.BROWSE})})}}),0):!n&&e.ref.browser&&(e.removeChildView(e.ref.browser),e.ref.browser=null)},fn=e=>{let t=e.query(\"GET_ALLOW_PASTE\"),i=e.query(\"GET_DISABLED\"),a=t&&!i;a&&!e.ref.paster?(e.ref.paster=jd(),e.ref.paster.onload=n=>{Ae(\"ADD_ITEMS\",n,{dispatch:e.dispatch}).then(l=>{if(aa(e,l))return!1;e.dispatch(\"ADD_ITEMS\",{items:l,index:-1,interactionMethod:Re.PASTE})})}):!a&&e.ref.paster&&(e.ref.paster.destroy(),e.ref.paster=null)},lp=fe({DID_SET_ALLOW_BROWSE:({root:e,props:t})=>{gn(e,t)},DID_SET_ALLOW_DROP:({root:e})=>{un(e)},DID_SET_ALLOW_PASTE:({root:e})=>{fn(e)},DID_SET_DISABLED:({root:e,props:t})=>{un(e),fn(e),gn(e,t),e.query(\"GET_DISABLED\")?e.element.dataset.disabled=\"disabled\":e.element.removeAttribute(\"data-disabled\")}}),op=le({name:\"root\",read:({root:e})=>{e.ref.measure&&(e.ref.measureHeight=e.ref.measure.offsetHeight)},create:Jd,write:ep,destroy:({root:e})=>{e.ref.paster&&e.ref.paster.destroy(),e.ref.hopper&&e.ref.hopper.destroy(),e.element.removeEventListener(\"touchmove\",si),e.element.removeEventListener(\"gesturestart\",si)},mixins:{styles:[\"height\"]}}),rp=(e={})=>{let t=null,i=oi(),a=Rr(cs(i),[ws,ms(i)],[Qs,ps(i)]);a.dispatch(\"SET_OPTIONS\",{options:e});let n=()=>{document.hidden||a.dispatch(\"KICK\")};document.addEventListener(\"visibilitychange\",n);let l=null,o=!1,r=!1,s=null,p=null,c=()=>{o||(o=!0),clearTimeout(l),l=setTimeout(()=>{o=!1,s=null,p=null,r&&(r=!1,a.dispatch(\"DID_STOP_RESIZE\"))},500)};window.addEventListener(\"resize\",c);let d=op(a,{id:Yi()}),m=!1,u=!1,g={_read:()=>{o&&(p=window.innerWidth,s||(s=p),!r&&p!==s&&(a.dispatch(\"DID_START_RESIZE\"),r=!0)),u&&m&&(m=d.element.offsetParent===null),!m&&(d._read(),u=d.rect.element.hidden)},_write:S=>{let L=a.processActionQueue().filter(D=>!/^SET_/.test(D.type));m&&!L.length||(b(L),m=d._write(S,L,r),fs(a.query(\"GET_ITEMS\")),m&&a.processDispatchQueue())}},f=S=>L=>{let D={type:S};if(!L)return D;if(L.hasOwnProperty(\"error\")&&(D.error=L.error?{...L.error}:null),L.status&&(D.status={...L.status}),L.file&&(D.output=L.file),L.source)D.file=L.source;else if(L.item||L.id){let O=L.item?L.item:a.query(\"GET_ITEM\",L.id);D.file=O?he(O):null}return L.items&&(D.items=L.items.map(he)),/progress/.test(S)&&(D.progress=L.progress),L.hasOwnProperty(\"origin\")&&L.hasOwnProperty(\"target\")&&(D.origin=L.origin,D.target=L.target),D},h={DID_DESTROY:f(\"destroy\"),DID_INIT:f(\"init\"),DID_THROW_MAX_FILES:f(\"warning\"),DID_INIT_ITEM:f(\"initfile\"),DID_START_ITEM_LOAD:f(\"addfilestart\"),DID_UPDATE_ITEM_LOAD_PROGRESS:f(\"addfileprogress\"),DID_LOAD_ITEM:f(\"addfile\"),DID_THROW_ITEM_INVALID:[f(\"error\"),f(\"addfile\")],DID_THROW_ITEM_LOAD_ERROR:[f(\"error\"),f(\"addfile\")],DID_THROW_ITEM_REMOVE_ERROR:[f(\"error\"),f(\"removefile\")],DID_PREPARE_OUTPUT:f(\"preparefile\"),DID_START_ITEM_PROCESSING:f(\"processfilestart\"),DID_UPDATE_ITEM_PROCESS_PROGRESS:f(\"processfileprogress\"),DID_ABORT_ITEM_PROCESSING:f(\"processfileabort\"),DID_COMPLETE_ITEM_PROCESSING:f(\"processfile\"),DID_COMPLETE_ITEM_PROCESSING_ALL:f(\"processfiles\"),DID_REVERT_ITEM_PROCESSING:f(\"processfilerevert\"),DID_THROW_ITEM_PROCESSING_ERROR:[f(\"error\"),f(\"processfile\")],DID_REMOVE_ITEM:f(\"removefile\"),DID_UPDATE_ITEMS:f(\"updatefiles\"),DID_ACTIVATE_ITEM:f(\"activatefile\"),DID_REORDER_ITEMS:f(\"reorderfiles\")},I=S=>{let L={pond:F,...S};delete L.type,d.element.dispatchEvent(new CustomEvent(`FilePond:${S.type}`,{detail:L,bubbles:!0,cancelable:!0,composed:!0}));let D=[];S.hasOwnProperty(\"error\")&&D.push(S.error),S.hasOwnProperty(\"file\")&&D.push(S.file);let O=[\"type\",\"error\",\"file\"];Object.keys(S).filter(C=>!O.includes(C)).forEach(C=>D.push(S[C])),F.fire(S.type,...D);let U=a.query(`GET_ON${S.type.toUpperCase()}`);U&&U(...D)},b=S=>{S.length&&S.filter(L=>h[L.type]).forEach(L=>{let D=h[L.type];(Array.isArray(D)?D:[D]).forEach(O=>{L.type===\"DID_INIT_ITEM\"?I(O(L.data)):setTimeout(()=>{I(O(L.data))},0)})})},E=S=>a.dispatch(\"SET_OPTIONS\",{options:S}),v=S=>a.query(\"GET_ACTIVE_ITEM\",S),y=S=>new Promise((L,D)=>{a.dispatch(\"REQUEST_ITEM_PREPARE\",{query:S,success:O=>{L(O)},failure:O=>{D(O)}})}),T=(S,L={})=>new Promise((D,O)=>{R([{source:S,options:L}],{index:L.index}).then(U=>D(U&&U[0])).catch(O)}),_=S=>S.file&&S.id,x=(S,L)=>(typeof S==\"object\"&&!_(S)&&!L&&(L=S,S=void 0),a.dispatch(\"REMOVE_ITEM\",{...L,query:S}),a.query(\"GET_ACTIVE_ITEM\",S)===null),R=(...S)=>new Promise((L,D)=>{let O=[],U={};if(ci(S[0]))O.push.apply(O,S[0]),Object.assign(U,S[1]||{});else{let C=S[S.length-1];typeof C==\"object\"&&!(C instanceof Blob)&&Object.assign(U,S.pop()),O.push(...S)}a.dispatch(\"ADD_ITEMS\",{items:O,index:U.index,interactionMethod:Re.API,success:L,failure:D})}),P=()=>a.query(\"GET_ACTIVE_ITEMS\"),z=S=>new Promise((L,D)=>{a.dispatch(\"REQUEST_ITEM_PROCESSING\",{query:S,success:O=>{L(O)},failure:O=>{D(O)}})}),A=(...S)=>{let L=Array.isArray(S[0])?S[0]:S,D=L.length?L:P();return Promise.all(D.map(y))},B=(...S)=>{let L=Array.isArray(S[0])?S[0]:S;if(!L.length){let D=P().filter(O=>!(O.status===H.IDLE&&O.origin===re.LOCAL)&&O.status!==H.PROCESSING&&O.status!==H.PROCESSING_COMPLETE&&O.status!==H.PROCESSING_REVERT_ERROR);return Promise.all(D.map(z))}return Promise.all(L.map(z))},w=(...S)=>{let L=Array.isArray(S[0])?S[0]:S,D;typeof L[L.length-1]==\"object\"?D=L.pop():Array.isArray(S[0])&&(D=S[1]);let O=P();return L.length?L.map(C=>Xe(C)?O[C]?O[C].id:null:C).filter(C=>C).map(C=>x(C,D)):Promise.all(O.map(C=>x(C,D)))},F={...mi(),...g,...ds(a,i),setOptions:E,addFile:T,addFiles:R,getFile:v,processFile:z,prepareFile:y,removeFile:x,moveFile:(S,L)=>a.dispatch(\"MOVE_ITEM\",{query:S,index:L}),getFiles:P,processFiles:B,removeFiles:w,prepareFiles:A,sort:S=>a.dispatch(\"SORT\",{compare:S}),browse:()=>{var S=d.element.querySelector(\"input[type=file]\");S&&S.click()},destroy:()=>{F.fire(\"destroy\",d.element),a.dispatch(\"ABORT_ALL\"),d._destroy(),window.removeEventListener(\"resize\",c),document.removeEventListener(\"visibilitychange\",n),a.dispatch(\"DID_DESTROY\")},insertBefore:S=>Ba(d.element,S),insertAfter:S=>ka(d.element,S),appendTo:S=>S.appendChild(d.element),replaceElement:S=>{Ba(d.element,S),S.parentNode.removeChild(S),t=S},restoreElement:()=>{t&&(ka(t,d.element),d.element.parentNode.removeChild(d.element),t=null)},isAttachedTo:S=>d.element===S||t===S,element:{get:()=>d.element},status:{get:()=>a.query(\"GET_STATUS\")}};return a.dispatch(\"DID_INIT\"),He(F)},il=(e={})=>{let t={};return te(oi(),(a,n)=>{t[a]=n[0]}),rp({...t,...e})},sp=e=>e.charAt(0).toLowerCase()+e.slice(1),cp=e=>el(e.replace(/^data-/,\"\")),al=(e,t)=>{te(t,(i,a)=>{te(e,(n,l)=>{let o=new RegExp(i);if(!o.test(n)||(delete e[n],a===!1))return;if(ge(a)){e[a]=l;return}let s=a.group;de(a)&&!e[s]&&(e[s]={}),e[s][sp(n.replace(o,\"\"))]=l}),a.mapping&&al(e[a.group],a.mapping)})},dp=(e,t={})=>{let i=[];te(e.attributes,n=>{i.push(e.attributes[n])});let a=i.filter(n=>n.name).reduce((n,l)=>{let o=se(e,l.name);return n[cp(l.name)]=o===l.name?!0:o,n},{});return al(a,t),a},pp=(e,t={})=>{let i={\"^class$\":\"className\",\"^multiple$\":\"allowMultiple\",\"^capture$\":\"captureMethod\",\"^webkitdirectory$\":\"allowDirectoriesOnly\",\"^server\":{group:\"server\",mapping:{\"^process\":{group:\"process\"},\"^revert\":{group:\"revert\"},\"^fetch\":{group:\"fetch\"},\"^restore\":{group:\"restore\"},\"^load\":{group:\"load\"}}},\"^type$\":!1,\"^files$\":!1};it(\"SET_ATTRIBUTE_TO_OPTION_MAP\",i);let a={...t},n=dp(e.nodeName===\"FIELDSET\"?e.querySelector(\"input[type=file]\"):e,i);Object.keys(n).forEach(o=>{de(n[o])?(de(a[o])||(a[o]={}),Object.assign(a[o],n[o])):a[o]=n[o]}),a.files=(t.files||[]).concat(Array.from(e.querySelectorAll(\"input:not([type=file])\")).map(o=>({source:o.value,options:{type:o.dataset.type}})));let l=il(a);return e.files&&Array.from(e.files).forEach(o=>{l.addFile(o)}),l.replaceElement(e),l},mp=(...e)=>yr(e[0])?pp(...e):il(...e),up=[\"fire\",\"_read\",\"_write\"],hn=e=>{let t={};return Rn(e,t,up),t},gp=(e,t)=>e.replace(/(?:{([a-zA-Z]+)})/g,(i,a)=>t[a]),fp=e=>{let t=new Blob([\"(\",e.toString(),\")()\"],{type:\"application/javascript\"}),i=URL.createObjectURL(t),a=new Worker(i);return{transfer:(n,l)=>{},post:(n,l,o)=>{let r=Yi();a.onmessage=s=>{s.data.id===r&&l(s.data.message)},a.postMessage({id:r,message:n},o)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},hp=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),nl=(e,t)=>{let i=e.slice(0,e.size,e.type);return i.lastModifiedDate=e.lastModifiedDate,i.name=t,i},bp=e=>nl(e,e.name),bn=[],Ep=e=>{if(bn.includes(e))return;bn.push(e);let t=e({addFilter:bs,utils:{Type:M,forin:te,isString:ge,isFile:et,toNaturalFileSize:Bn,replaceInString:gp,getExtensionFromFilename:ui,getFilenameWithoutExtension:On,guesstimateMimeType:$n,getFileFromBlob:bt,getFilenameFromURL:Ct,createRoute:fe,createWorker:fp,createView:le,createItemAPI:he,loadImage:hp,copyFile:bp,renameFile:nl,createBlob:zn,applyFilterChain:Ae,text:ne,getNumericAspectRatioFromString:wn},views:{fileActionButton:Cn}});Es(t.options)},Tp=()=>Object.prototype.toString.call(window.operamini)===\"[object OperaMini]\",Ip=()=>\"Promise\"in window,vp=()=>\"slice\"in Blob.prototype,xp=()=>\"URL\"in window&&\"createObjectURL\"in window.URL,yp=()=>\"visibilityState\"in document,Rp=()=>\"performance\"in window,Sp=()=>\"supports\"in(window.CSS||{}),_p=()=>/MSIE|Trident/.test(window.navigator.userAgent),Vi=(()=>{let e=En()&&!Tp()&&yp()&&Ip()&&vp()&&xp()&&Rp()&&(Sp()||_p());return()=>e})(),Ue={apps:[]},wp=\"filepond\",at=()=>{},ll={},Tt={},Bt={},Gi={},ft=at,ht=at,Ui=at,Hi=at,ve=at,Wi=at,Dt=at;if(Vi()){Xr(()=>{Ue.apps.forEach(i=>i._read())},i=>{Ue.apps.forEach(a=>a._write(i))});let e=()=>{document.dispatchEvent(new CustomEvent(\"FilePond:loaded\",{detail:{supported:Vi,create:ft,destroy:ht,parse:Ui,find:Hi,registerPlugin:ve,setOptions:Dt}})),document.removeEventListener(\"DOMContentLoaded\",e)};document.readyState!==\"loading\"?setTimeout(()=>e(),0):document.addEventListener(\"DOMContentLoaded\",e);let t=()=>te(oi(),(i,a)=>{Gi[i]=a[1]});ll={...Ln},Bt={...re},Tt={...H},Gi={},t(),ft=(...i)=>{let a=mp(...i);return a.on(\"destroy\",ht),Ue.apps.push(a),hn(a)},ht=i=>{let a=Ue.apps.findIndex(n=>n.isAttachedTo(i));return a>=0?(Ue.apps.splice(a,1)[0].restoreElement(),!0):!1},Ui=i=>Array.from(i.querySelectorAll(`.${wp}`)).filter(l=>!Ue.apps.find(o=>o.isAttachedTo(l))).map(l=>ft(l)),Hi=i=>{let a=Ue.apps.find(n=>n.isAttachedTo(i));return a?hn(a):null},ve=(...i)=>{i.forEach(Ep),t()},Wi=()=>{let i={};return te(oi(),(a,n)=>{i[a]=n[0]}),i},Dt=i=>(de(i)&&(Ue.apps.forEach(a=>{a.setOptions(i)}),Ts(i)),Wi())}function ol(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),i.push.apply(i,a)}return i}function xl(e){for(var t=1;t<arguments.length;t++){var i=arguments[t]!=null?arguments[t]:{};t%2?ol(Object(i),!0).forEach(function(a){zp(e,a,i[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):ol(Object(i)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(i,a))})}return e}function Lp(e,t){if(typeof e!=\"object\"||!e)return e;var i=e[Symbol.toPrimitive];if(i!==void 0){var a=i.call(e,t||\"default\");if(typeof a!=\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(t===\"string\"?String:Number)(e)}function yl(e){var t=Lp(e,\"string\");return typeof t==\"symbol\"?t:t+\"\"}function ra(e){\"@babel/helpers - typeof\";return ra=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(t){return typeof t}:function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},ra(e)}function Mp(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function rl(e,t){for(var i=0;i<t.length;i++){var a=t[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(e,yl(a.key),a)}}function Ap(e,t,i){return t&&rl(e.prototype,t),i&&rl(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function zp(e,t,i){return t=yl(t),t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Rl(e){return Pp(e)||Fp(e)||Op(e)||Dp()}function Pp(e){if(Array.isArray(e))return sa(e)}function Fp(e){if(typeof Symbol<\"u\"&&e[Symbol.iterator]!=null||e[\"@@iterator\"]!=null)return Array.from(e)}function Op(e,t){if(e){if(typeof e==\"string\")return sa(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);if(i===\"Object\"&&e.constructor&&(i=e.constructor.name),i===\"Map\"||i===\"Set\")return Array.from(e);if(i===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return sa(e,t)}}function sa(e,t){(t==null||t>e.length)&&(t=e.length);for(var i=0,a=new Array(t);i<t;i++)a[i]=e[i];return a}function Dp(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Ti=typeof window<\"u\"&&typeof window.document<\"u\",De=Ti?window:{},ba=Ti&&De.document.documentElement?\"ontouchstart\"in De.document.documentElement:!1,Ea=Ti?\"PointerEvent\"in De:!1,Q=\"cropper\",Ta=\"all\",Sl=\"crop\",_l=\"move\",wl=\"zoom\",nt=\"e\",lt=\"w\",It=\"s\",We=\"n\",kt=\"ne\",Nt=\"nw\",Vt=\"se\",Gt=\"sw\",ca=\"\".concat(Q,\"-crop\"),sl=\"\".concat(Q,\"-disabled\"),Ee=\"\".concat(Q,\"-hidden\"),cl=\"\".concat(Q,\"-hide\"),Cp=\"\".concat(Q,\"-invisible\"),Ei=\"\".concat(Q,\"-modal\"),da=\"\".concat(Q,\"-move\"),Ht=\"\".concat(Q,\"Action\"),hi=\"\".concat(Q,\"Preview\"),Ia=\"crop\",Ll=\"move\",Ml=\"none\",pa=\"crop\",ma=\"cropend\",ua=\"cropmove\",ga=\"cropstart\",dl=\"dblclick\",Bp=ba?\"touchstart\":\"mousedown\",kp=ba?\"touchmove\":\"mousemove\",Np=ba?\"touchend touchcancel\":\"mouseup\",pl=Ea?\"pointerdown\":Bp,ml=Ea?\"pointermove\":kp,ul=Ea?\"pointerup pointercancel\":Np,gl=\"ready\",fl=\"resize\",hl=\"wheel\",fa=\"zoom\",bl=\"image/jpeg\",Vp=/^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/,Gp=/^data:/,Up=/^data:image\\/jpeg;base64,/,Hp=/^img|canvas$/i,Al=200,zl=100,El={viewMode:0,dragMode:Ia,initialAspectRatio:NaN,aspectRatio:NaN,data:null,preview:\"\",responsive:!0,restore:!0,checkCrossOrigin:!0,checkOrientation:!0,modal:!0,guides:!0,center:!0,highlight:!0,background:!0,autoCrop:!0,autoCropArea:.8,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,wheelZoomRatio:.1,cropBoxMovable:!0,cropBoxResizable:!0,toggleDragModeOnDblclick:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:Al,minContainerHeight:zl,ready:null,cropstart:null,cropmove:null,cropend:null,crop:null,zoom:null},Wp='<div class=\"cropper-container\" touch-action=\"none\"><div class=\"cropper-wrap-box\"><div class=\"cropper-canvas\"></div></div><div class=\"cropper-drag-box\"></div><div class=\"cropper-crop-box\"><span class=\"cropper-view-box\"></span><span class=\"cropper-dashed dashed-h\"></span><span class=\"cropper-dashed dashed-v\"></span><span class=\"cropper-center\"></span><span class=\"cropper-face\"></span><span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span><span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span><span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span><span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span><span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span><span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span><span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span><span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span><span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span><span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span><span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span><span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span></div></div>',jp=Number.isNaN||De.isNaN;function Y(e){return typeof e==\"number\"&&!jp(e)}var Tl=function(t){return t>0&&t<1/0};function la(e){return typeof e>\"u\"}function ot(e){return ra(e)===\"object\"&&e!==null}var Yp=Object.prototype.hasOwnProperty;function vt(e){if(!ot(e))return!1;try{var t=e.constructor,i=t.prototype;return t&&i&&Yp.call(i,\"isPrototypeOf\")}catch{return!1}}function be(e){return typeof e==\"function\"}var qp=Array.prototype.slice;function Pl(e){return Array.from?Array.from(e):qp.call(e)}function oe(e,t){return e&&be(t)&&(Array.isArray(e)||Y(e.length)?Pl(e).forEach(function(i,a){t.call(e,i,a,e)}):ot(e)&&Object.keys(e).forEach(function(i){t.call(e,e[i],i,e)})),e}var J=Object.assign||function(t){for(var i=arguments.length,a=new Array(i>1?i-1:0),n=1;n<i;n++)a[n-1]=arguments[n];return ot(t)&&a.length>0&&a.forEach(function(l){ot(l)&&Object.keys(l).forEach(function(o){t[o]=l[o]})}),t},$p=/\\.\\d*(?:0|9){12}\\d*$/;function yt(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e11;return $p.test(e)?Math.round(e*t)/t:e}var Xp=/^width|height|left|top|marginLeft|marginTop$/;function je(e,t){var i=e.style;oe(t,function(a,n){Xp.test(n)&&Y(a)&&(a=\"\".concat(a,\"px\")),i[n]=a})}function Kp(e,t){return e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function pe(e,t){if(t){if(Y(e.length)){oe(e,function(a){pe(a,t)});return}if(e.classList){e.classList.add(t);return}var i=e.className.trim();i?i.indexOf(t)<0&&(e.className=\"\".concat(i,\" \").concat(t)):e.className=t}}function Oe(e,t){if(t){if(Y(e.length)){oe(e,function(i){Oe(i,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,\"\"))}}function xt(e,t,i){if(t){if(Y(e.length)){oe(e,function(a){xt(a,t,i)});return}i?pe(e,t):Oe(e,t)}}var Zp=/([a-z\\d])([A-Z])/g;function va(e){return e.replace(Zp,\"$1-$2\").toLowerCase()}function ha(e,t){return ot(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute(\"data-\".concat(va(t)))}function Wt(e,t,i){ot(i)?e[t]=i:e.dataset?e.dataset[t]=i:e.setAttribute(\"data-\".concat(va(t)),i)}function Qp(e,t){if(ot(e[t]))try{delete e[t]}catch{e[t]=void 0}else if(e.dataset)try{delete e.dataset[t]}catch{e.dataset[t]=void 0}else e.removeAttribute(\"data-\".concat(va(t)))}var Fl=/\\s\\s*/,Ol=(function(){var e=!1;if(Ti){var t=!1,i=function(){},a=Object.defineProperty({},\"once\",{get:function(){return e=!0,t},set:function(l){t=l}});De.addEventListener(\"test\",i,a),De.removeEventListener(\"test\",i,a)}return e})();function Fe(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Fl).forEach(function(l){if(!Ol){var o=e.listeners;o&&o[l]&&o[l][i]&&(n=o[l][i],delete o[l][i],Object.keys(o[l]).length===0&&delete o[l],Object.keys(o).length===0&&delete e.listeners)}e.removeEventListener(l,n,a)})}function Se(e,t,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},n=i;t.trim().split(Fl).forEach(function(l){if(a.once&&!Ol){var o=e.listeners,r=o===void 0?{}:o;n=function(){delete r[l][i],e.removeEventListener(l,n,a);for(var p=arguments.length,c=new Array(p),d=0;d<p;d++)c[d]=arguments[d];i.apply(e,c)},r[l]||(r[l]={}),r[l][i]&&e.removeEventListener(l,r[l][i],a),r[l][i]=n,e.listeners=r}e.addEventListener(l,n,a)})}function Rt(e,t,i){var a;return be(Event)&&be(CustomEvent)?a=new CustomEvent(t,{detail:i,bubbles:!0,cancelable:!0}):(a=document.createEvent(\"CustomEvent\"),a.initCustomEvent(t,!0,!0,i)),e.dispatchEvent(a)}function Dl(e){var t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset-document.documentElement.clientLeft),top:t.top+(window.pageYOffset-document.documentElement.clientTop)}}var oa=De.location,Jp=/^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;function Il(e){var t=e.match(Jp);return t!==null&&(t[1]!==oa.protocol||t[2]!==oa.hostname||t[3]!==oa.port)}function vl(e){var t=\"timestamp=\".concat(new Date().getTime());return e+(e.indexOf(\"?\")===-1?\"?\":\"&\")+t}function Ut(e){var t=e.rotate,i=e.scaleX,a=e.scaleY,n=e.translateX,l=e.translateY,o=[];Y(n)&&n!==0&&o.push(\"translateX(\".concat(n,\"px)\")),Y(l)&&l!==0&&o.push(\"translateY(\".concat(l,\"px)\")),Y(t)&&t!==0&&o.push(\"rotate(\".concat(t,\"deg)\")),Y(i)&&i!==1&&o.push(\"scaleX(\".concat(i,\")\")),Y(a)&&a!==1&&o.push(\"scaleY(\".concat(a,\")\"));var r=o.length?o.join(\" \"):\"none\";return{WebkitTransform:r,msTransform:r,transform:r}}function em(e){var t=xl({},e),i=0;return oe(e,function(a,n){delete t[n],oe(t,function(l){var o=Math.abs(a.startX-l.startX),r=Math.abs(a.startY-l.startY),s=Math.abs(a.endX-l.endX),p=Math.abs(a.endY-l.endY),c=Math.sqrt(o*o+r*r),d=Math.sqrt(s*s+p*p),m=(d-c)/c;Math.abs(m)>Math.abs(i)&&(i=m)})}),i}function bi(e,t){var i=e.pageX,a=e.pageY,n={endX:i,endY:a};return t?n:xl({startX:i,startY:a},n)}function tm(e){var t=0,i=0,a=0;return oe(e,function(n){var l=n.startX,o=n.startY;t+=l,i+=o,a+=1}),t/=a,i/=a,{pageX:t,pageY:i}}function Ye(e){var t=e.aspectRatio,i=e.height,a=e.width,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:\"contain\",l=Tl(a),o=Tl(i);if(l&&o){var r=i*t;n===\"contain\"&&r>a||n===\"cover\"&&r<a?i=a/t:a=i*t}else l?i=a/t:o&&(a=i*t);return{width:a,height:i}}function im(e){var t=e.width,i=e.height,a=e.degree;if(a=Math.abs(a)%180,a===90)return{width:i,height:t};var n=a%90*Math.PI/180,l=Math.sin(n),o=Math.cos(n),r=t*o+i*l,s=t*l+i*o;return a>90?{width:s,height:r}:{width:r,height:s}}function am(e,t,i,a){var n=t.aspectRatio,l=t.naturalWidth,o=t.naturalHeight,r=t.rotate,s=r===void 0?0:r,p=t.scaleX,c=p===void 0?1:p,d=t.scaleY,m=d===void 0?1:d,u=i.aspectRatio,g=i.naturalWidth,f=i.naturalHeight,h=a.fillColor,I=h===void 0?\"transparent\":h,b=a.imageSmoothingEnabled,E=b===void 0?!0:b,v=a.imageSmoothingQuality,y=v===void 0?\"low\":v,T=a.maxWidth,_=T===void 0?1/0:T,x=a.maxHeight,R=x===void 0?1/0:x,P=a.minWidth,z=P===void 0?0:P,A=a.minHeight,B=A===void 0?0:A,w=document.createElement(\"canvas\"),F=w.getContext(\"2d\"),S=Ye({aspectRatio:u,width:_,height:R}),L=Ye({aspectRatio:u,width:z,height:B},\"cover\"),D=Math.min(S.width,Math.max(L.width,g)),O=Math.min(S.height,Math.max(L.height,f)),U=Ye({aspectRatio:n,width:_,height:R}),C=Ye({aspectRatio:n,width:z,height:B},\"cover\"),X=Math.min(U.width,Math.max(C.width,l)),K=Math.min(U.height,Math.max(C.height,o)),Z=[-X/2,-K/2,X,K];return w.width=yt(D),w.height=yt(O),F.fillStyle=I,F.fillRect(0,0,D,O),F.save(),F.translate(D/2,O/2),F.rotate(s*Math.PI/180),F.scale(c,m),F.imageSmoothingEnabled=E,F.imageSmoothingQuality=y,F.drawImage.apply(F,[e].concat(Rl(Z.map(function(ce){return Math.floor(yt(ce))})))),F.restore(),w}var Cl=String.fromCharCode;function nm(e,t,i){var a=\"\";i+=t;for(var n=t;n<i;n+=1)a+=Cl(e.getUint8(n));return a}var lm=/^data:.*,/;function om(e){var t=e.replace(lm,\"\"),i=atob(t),a=new ArrayBuffer(i.length),n=new Uint8Array(a);return oe(n,function(l,o){n[o]=i.charCodeAt(o)}),a}function rm(e,t){for(var i=[],a=8192,n=new Uint8Array(e);n.length>0;)i.push(Cl.apply(null,Pl(n.subarray(0,a)))),n=n.subarray(a);return\"data:\".concat(t,\";base64,\").concat(btoa(i.join(\"\")))}function sm(e){var t=new DataView(e),i;try{var a,n,l;if(t.getUint8(0)===255&&t.getUint8(1)===216)for(var o=t.byteLength,r=2;r+1<o;){if(t.getUint8(r)===255&&t.getUint8(r+1)===225){n=r;break}r+=1}if(n){var s=n+4,p=n+10;if(nm(t,s,4)===\"Exif\"){var c=t.getUint16(p);if(a=c===18761,(a||c===19789)&&t.getUint16(p+2,a)===42){var d=t.getUint32(p+4,a);d>=8&&(l=p+d)}}}if(l){var m=t.getUint16(l,a),u,g;for(g=0;g<m;g+=1)if(u=l+g*12+2,t.getUint16(u,a)===274){u+=8,i=t.getUint16(u,a),t.setUint16(u,1,a);break}}}catch{i=1}return i}function cm(e){var t=0,i=1,a=1;switch(e){case 2:i=-1;break;case 3:t=-180;break;case 4:a=-1;break;case 5:t=90,a=-1;break;case 6:t=90;break;case 7:t=90,i=-1;break;case 8:t=-90;break}return{rotate:t,scaleX:i,scaleY:a}}var dm={render:function(){this.initContainer(),this.initCanvas(),this.initCropBox(),this.renderCanvas(),this.cropped&&this.renderCropBox()},initContainer:function(){var t=this.element,i=this.options,a=this.container,n=this.cropper,l=Number(i.minContainerWidth),o=Number(i.minContainerHeight);pe(n,Ee),Oe(t,Ee);var r={width:Math.max(a.offsetWidth,l>=0?l:Al),height:Math.max(a.offsetHeight,o>=0?o:zl)};this.containerData=r,je(n,{width:r.width,height:r.height}),pe(t,Ee),Oe(n,Ee)},initCanvas:function(){var t=this.containerData,i=this.imageData,a=this.options.viewMode,n=Math.abs(i.rotate)%180===90,l=n?i.naturalHeight:i.naturalWidth,o=n?i.naturalWidth:i.naturalHeight,r=l/o,s=t.width,p=t.height;t.height*r>t.width?a===3?s=t.height*r:p=t.width/r:a===3?p=t.width/r:s=t.height*r;var c={aspectRatio:r,naturalWidth:l,naturalHeight:o,width:s,height:p};this.canvasData=c,this.limited=a===1||a===2,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(t.width-c.width)/2,c.top=(t.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=J({},c)},limitCanvas:function(t,i){var a=this.options,n=this.containerData,l=this.canvasData,o=this.cropBoxData,r=a.viewMode,s=l.aspectRatio,p=this.cropped&&o;if(t){var c=Number(a.minCanvasWidth)||0,d=Number(a.minCanvasHeight)||0;r>1?(c=Math.max(c,n.width),d=Math.max(d,n.height),r===3&&(d*s>c?c=d*s:d=c/s)):r>0&&(c?c=Math.max(c,p?o.width:0):d?d=Math.max(d,p?o.height:0):p&&(c=o.width,d=o.height,d*s>c?c=d*s:d=c/s));var m=Ye({aspectRatio:s,width:c,height:d});c=m.width,d=m.height,l.minWidth=c,l.minHeight=d,l.maxWidth=1/0,l.maxHeight=1/0}if(i)if(r>(p?0:1)){var u=n.width-l.width,g=n.height-l.height;l.minLeft=Math.min(0,u),l.minTop=Math.min(0,g),l.maxLeft=Math.max(0,u),l.maxTop=Math.max(0,g),p&&this.limited&&(l.minLeft=Math.min(o.left,o.left+(o.width-l.width)),l.minTop=Math.min(o.top,o.top+(o.height-l.height)),l.maxLeft=o.left,l.maxTop=o.top,r===2&&(l.width>=n.width&&(l.minLeft=Math.min(0,u),l.maxLeft=Math.max(0,u)),l.height>=n.height&&(l.minTop=Math.min(0,g),l.maxTop=Math.max(0,g))))}else l.minLeft=-l.width,l.minTop=-l.height,l.maxLeft=n.width,l.maxTop=n.height},renderCanvas:function(t,i){var a=this.canvasData,n=this.imageData;if(i){var l=im({width:n.naturalWidth*Math.abs(n.scaleX||1),height:n.naturalHeight*Math.abs(n.scaleY||1),degree:n.rotate||0}),o=l.width,r=l.height,s=a.width*(o/a.naturalWidth),p=a.height*(r/a.naturalHeight);a.left-=(s-a.width)/2,a.top-=(p-a.height)/2,a.width=s,a.height=p,a.aspectRatio=o/r,a.naturalWidth=o,a.naturalHeight=r,this.limitCanvas(!0,!1)}(a.width>a.maxWidth||a.width<a.minWidth)&&(a.left=a.oldLeft),(a.height>a.maxHeight||a.height<a.minHeight)&&(a.top=a.oldTop),a.width=Math.min(Math.max(a.width,a.minWidth),a.maxWidth),a.height=Math.min(Math.max(a.height,a.minHeight),a.maxHeight),this.limitCanvas(!1,!0),a.left=Math.min(Math.max(a.left,a.minLeft),a.maxLeft),a.top=Math.min(Math.max(a.top,a.minTop),a.maxTop),a.oldLeft=a.left,a.oldTop=a.top,je(this.canvas,J({width:a.width,height:a.height},Ut({translateX:a.left,translateY:a.top}))),this.renderImage(t),this.cropped&&this.limited&&this.limitCropBox(!0,!0)},renderImage:function(t){var i=this.canvasData,a=this.imageData,n=a.naturalWidth*(i.width/i.naturalWidth),l=a.naturalHeight*(i.height/i.naturalHeight);J(a,{width:n,height:l,left:(i.width-n)/2,top:(i.height-l)/2}),je(this.image,J({width:a.width,height:a.height},Ut(J({translateX:a.left,translateY:a.top},a)))),t&&this.output()},initCropBox:function(){var t=this.options,i=this.canvasData,a=t.aspectRatio||t.initialAspectRatio,n=Number(t.autoCropArea)||.8,l={width:i.width,height:i.height};a&&(i.height*a>i.width?l.height=l.width/a:l.width=l.height*a),this.cropBoxData=l,this.limitCropBox(!0,!0),l.width=Math.min(Math.max(l.width,l.minWidth),l.maxWidth),l.height=Math.min(Math.max(l.height,l.minHeight),l.maxHeight),l.width=Math.max(l.minWidth,l.width*n),l.height=Math.max(l.minHeight,l.height*n),l.left=i.left+(i.width-l.width)/2,l.top=i.top+(i.height-l.height)/2,l.oldLeft=l.left,l.oldTop=l.top,this.initialCropBoxData=J({},l)},limitCropBox:function(t,i){var a=this.options,n=this.containerData,l=this.canvasData,o=this.cropBoxData,r=this.limited,s=a.aspectRatio;if(t){var p=Number(a.minCropBoxWidth)||0,c=Number(a.minCropBoxHeight)||0,d=r?Math.min(n.width,l.width,l.width+l.left,n.width-l.left):n.width,m=r?Math.min(n.height,l.height,l.height+l.top,n.height-l.top):n.height;p=Math.min(p,n.width),c=Math.min(c,n.height),s&&(p&&c?c*s>p?c=p/s:p=c*s:p?c=p/s:c&&(p=c*s),m*s>d?m=d/s:d=m*s),o.minWidth=Math.min(p,d),o.minHeight=Math.min(c,m),o.maxWidth=d,o.maxHeight=m}i&&(r?(o.minLeft=Math.max(0,l.left),o.minTop=Math.max(0,l.top),o.maxLeft=Math.min(n.width,l.left+l.width)-o.width,o.maxTop=Math.min(n.height,l.top+l.height)-o.height):(o.minLeft=0,o.minTop=0,o.maxLeft=n.width-o.width,o.maxTop=n.height-o.height))},renderCropBox:function(){var t=this.options,i=this.containerData,a=this.cropBoxData;(a.width>a.maxWidth||a.width<a.minWidth)&&(a.left=a.oldLeft),(a.height>a.maxHeight||a.height<a.minHeight)&&(a.top=a.oldTop),a.width=Math.min(Math.max(a.width,a.minWidth),a.maxWidth),a.height=Math.min(Math.max(a.height,a.minHeight),a.maxHeight),this.limitCropBox(!1,!0),a.left=Math.min(Math.max(a.left,a.minLeft),a.maxLeft),a.top=Math.min(Math.max(a.top,a.minTop),a.maxTop),a.oldLeft=a.left,a.oldTop=a.top,t.movable&&t.cropBoxMovable&&Wt(this.face,Ht,a.width>=i.width&&a.height>=i.height?_l:Ta),je(this.cropBox,J({width:a.width,height:a.height},Ut({translateX:a.left,translateY:a.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),Rt(this.element,pa,this.getData())}},pm={initPreview:function(){var t=this.element,i=this.crossOrigin,a=this.options.preview,n=i?this.crossOriginUrl:this.url,l=t.alt||\"The image to preview\",o=document.createElement(\"img\");if(i&&(o.crossOrigin=i),o.src=n,o.alt=l,this.viewBox.appendChild(o),this.viewBoxImage=o,!!a){var r=a;typeof a==\"string\"?r=t.ownerDocument.querySelectorAll(a):a.querySelector&&(r=[a]),this.previews=r,oe(r,function(s){var p=document.createElement(\"img\");Wt(s,hi,{width:s.offsetWidth,height:s.offsetHeight,html:s.innerHTML}),i&&(p.crossOrigin=i),p.src=n,p.alt=l,p.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;\"',s.innerHTML=\"\",s.appendChild(p)})}},resetPreview:function(){oe(this.previews,function(t){var i=ha(t,hi);je(t,{width:i.width,height:i.height}),t.innerHTML=i.html,Qp(t,hi)})},preview:function(){var t=this.imageData,i=this.canvasData,a=this.cropBoxData,n=a.width,l=a.height,o=t.width,r=t.height,s=a.left-i.left-t.left,p=a.top-i.top-t.top;!this.cropped||this.disabled||(je(this.viewBoxImage,J({width:o,height:r},Ut(J({translateX:-s,translateY:-p},t)))),oe(this.previews,function(c){var d=ha(c,hi),m=d.width,u=d.height,g=m,f=u,h=1;n&&(h=m/n,f=l*h),l&&f>u&&(h=u/l,g=n*h,f=u),je(c,{width:g,height:f}),je(c.getElementsByTagName(\"img\")[0],J({width:o*h,height:r*h},Ut(J({translateX:-s*h,translateY:-p*h},t))))}))}},mm={bind:function(){var t=this.element,i=this.options,a=this.cropper;be(i.cropstart)&&Se(t,ga,i.cropstart),be(i.cropmove)&&Se(t,ua,i.cropmove),be(i.cropend)&&Se(t,ma,i.cropend),be(i.crop)&&Se(t,pa,i.crop),be(i.zoom)&&Se(t,fa,i.zoom),Se(a,pl,this.onCropStart=this.cropStart.bind(this)),i.zoomable&&i.zoomOnWheel&&Se(a,hl,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Se(a,dl,this.onDblclick=this.dblclick.bind(this)),Se(t.ownerDocument,ml,this.onCropMove=this.cropMove.bind(this)),Se(t.ownerDocument,ul,this.onCropEnd=this.cropEnd.bind(this)),i.responsive&&Se(window,fl,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,i=this.options,a=this.cropper;be(i.cropstart)&&Fe(t,ga,i.cropstart),be(i.cropmove)&&Fe(t,ua,i.cropmove),be(i.cropend)&&Fe(t,ma,i.cropend),be(i.crop)&&Fe(t,pa,i.crop),be(i.zoom)&&Fe(t,fa,i.zoom),Fe(a,pl,this.onCropStart),i.zoomable&&i.zoomOnWheel&&Fe(a,hl,this.onWheel,{passive:!1,capture:!0}),i.toggleDragModeOnDblclick&&Fe(a,dl,this.onDblclick),Fe(t.ownerDocument,ml,this.onCropMove),Fe(t.ownerDocument,ul,this.onCropEnd),i.responsive&&Fe(window,fl,this.onResize)}},um={resize:function(){if(!this.disabled){var t=this.options,i=this.container,a=this.containerData,n=i.offsetWidth/a.width,l=i.offsetHeight/a.height,o=Math.abs(n-1)>Math.abs(l-1)?n:l;if(o!==1){var r,s;t.restore&&(r=this.getCanvasData(),s=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(oe(r,function(p,c){r[c]=p*o})),this.setCropBoxData(oe(s,function(p,c){s[c]=p*o})))}}},dblclick:function(){this.disabled||this.options.dragMode===Ml||this.setDragMode(Kp(this.dragBox,ca)?Ll:Ia)},wheel:function(t){var i=this,a=Number(this.options.wheelZoomRatio)||.1,n=1;this.disabled||(t.preventDefault(),!this.wheeling&&(this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50),t.deltaY?n=t.deltaY>0?1:-1:t.wheelDelta?n=-t.wheelDelta/120:t.detail&&(n=t.detail>0?1:-1),this.zoom(-n*a,t)))},cropStart:function(t){var i=t.buttons,a=t.button;if(!(this.disabled||(t.type===\"mousedown\"||t.type===\"pointerdown\"&&t.pointerType===\"mouse\")&&(Y(i)&&i!==1||Y(a)&&a!==0||t.ctrlKey))){var n=this.options,l=this.pointers,o;t.changedTouches?oe(t.changedTouches,function(r){l[r.identifier]=bi(r)}):l[t.pointerId||0]=bi(t),Object.keys(l).length>1&&n.zoomable&&n.zoomOnTouch?o=wl:o=ha(t.target,Ht),Vp.test(o)&&Rt(this.element,ga,{originalEvent:t,action:o})!==!1&&(t.preventDefault(),this.action=o,this.cropping=!1,o===Sl&&(this.cropping=!0,pe(this.dragBox,Ei)))}},cropMove:function(t){var i=this.action;if(!(this.disabled||!i)){var a=this.pointers;t.preventDefault(),Rt(this.element,ua,{originalEvent:t,action:i})!==!1&&(t.changedTouches?oe(t.changedTouches,function(n){J(a[n.identifier]||{},bi(n,!0))}):J(a[t.pointerId||0]||{},bi(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var i=this.action,a=this.pointers;t.changedTouches?oe(t.changedTouches,function(n){delete a[n.identifier]}):delete a[t.pointerId||0],i&&(t.preventDefault(),Object.keys(a).length||(this.action=\"\"),this.cropping&&(this.cropping=!1,xt(this.dragBox,Ei,this.cropped&&this.options.modal)),Rt(this.element,ma,{originalEvent:t,action:i}))}}},gm={change:function(t){var i=this.options,a=this.canvasData,n=this.containerData,l=this.cropBoxData,o=this.pointers,r=this.action,s=i.aspectRatio,p=l.left,c=l.top,d=l.width,m=l.height,u=p+d,g=c+m,f=0,h=0,I=n.width,b=n.height,E=!0,v;!s&&t.shiftKey&&(s=d&&m?d/m:1),this.limited&&(f=l.minLeft,h=l.minTop,I=f+Math.min(n.width,a.width,a.left+a.width),b=h+Math.min(n.height,a.height,a.top+a.height));var y=o[Object.keys(o)[0]],T={x:y.endX-y.startX,y:y.endY-y.startY},_=function(R){switch(R){case nt:u+T.x>I&&(T.x=I-u);break;case lt:p+T.x<f&&(T.x=f-p);break;case We:c+T.y<h&&(T.y=h-c);break;case It:g+T.y>b&&(T.y=b-g);break}};switch(r){case Ta:p+=T.x,c+=T.y;break;case nt:if(T.x>=0&&(u>=I||s&&(c<=h||g>=b))){E=!1;break}_(nt),d+=T.x,d<0&&(r=lt,d=-d,p-=d),s&&(m=d/s,c+=(l.height-m)/2);break;case We:if(T.y<=0&&(c<=h||s&&(p<=f||u>=I))){E=!1;break}_(We),m-=T.y,c+=T.y,m<0&&(r=It,m=-m,c-=m),s&&(d=m*s,p+=(l.width-d)/2);break;case lt:if(T.x<=0&&(p<=f||s&&(c<=h||g>=b))){E=!1;break}_(lt),d-=T.x,p+=T.x,d<0&&(r=nt,d=-d,p-=d),s&&(m=d/s,c+=(l.height-m)/2);break;case It:if(T.y>=0&&(g>=b||s&&(p<=f||u>=I))){E=!1;break}_(It),m+=T.y,m<0&&(r=We,m=-m,c-=m),s&&(d=m*s,p+=(l.width-d)/2);break;case kt:if(s){if(T.y<=0&&(c<=h||u>=I)){E=!1;break}_(We),m-=T.y,c+=T.y,d=m*s}else _(We),_(nt),T.x>=0?u<I?d+=T.x:T.y<=0&&c<=h&&(E=!1):d+=T.x,T.y<=0?c>h&&(m-=T.y,c+=T.y):(m-=T.y,c+=T.y);d<0&&m<0?(r=Gt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Nt,d=-d,p-=d):m<0&&(r=Vt,m=-m,c-=m);break;case Nt:if(s){if(T.y<=0&&(c<=h||p<=f)){E=!1;break}_(We),m-=T.y,c+=T.y,d=m*s,p+=l.width-d}else _(We),_(lt),T.x<=0?p>f?(d-=T.x,p+=T.x):T.y<=0&&c<=h&&(E=!1):(d-=T.x,p+=T.x),T.y<=0?c>h&&(m-=T.y,c+=T.y):(m-=T.y,c+=T.y);d<0&&m<0?(r=Vt,m=-m,d=-d,c-=m,p-=d):d<0?(r=kt,d=-d,p-=d):m<0&&(r=Gt,m=-m,c-=m);break;case Gt:if(s){if(T.x<=0&&(p<=f||g>=b)){E=!1;break}_(lt),d-=T.x,p+=T.x,m=d/s}else _(It),_(lt),T.x<=0?p>f?(d-=T.x,p+=T.x):T.y>=0&&g>=b&&(E=!1):(d-=T.x,p+=T.x),T.y>=0?g<b&&(m+=T.y):m+=T.y;d<0&&m<0?(r=kt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Vt,d=-d,p-=d):m<0&&(r=Nt,m=-m,c-=m);break;case Vt:if(s){if(T.x>=0&&(u>=I||g>=b)){E=!1;break}_(nt),d+=T.x,m=d/s}else _(It),_(nt),T.x>=0?u<I?d+=T.x:T.y>=0&&g>=b&&(E=!1):d+=T.x,T.y>=0?g<b&&(m+=T.y):m+=T.y;d<0&&m<0?(r=Nt,m=-m,d=-d,c-=m,p-=d):d<0?(r=Gt,d=-d,p-=d):m<0&&(r=kt,m=-m,c-=m);break;case _l:this.move(T.x,T.y),E=!1;break;case wl:this.zoom(em(o),t),E=!1;break;case Sl:if(!T.x||!T.y){E=!1;break}v=Dl(this.cropper),p=y.startX-v.left,c=y.startY-v.top,d=l.minWidth,m=l.minHeight,T.x>0?r=T.y>0?Vt:kt:T.x<0&&(p-=d,r=T.y>0?Gt:Nt),T.y<0&&(c-=m),this.cropped||(Oe(this.cropBox,Ee),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0));break}E&&(l.width=d,l.height=m,l.left=p,l.top=c,this.action=r,this.renderCropBox()),oe(o,function(x){x.startX=x.endX,x.startY=x.endY})}},fm={crop:function(){return this.ready&&!this.cropped&&!this.disabled&&(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&pe(this.dragBox,Ei),Oe(this.cropBox,Ee),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=J({},this.initialImageData),this.canvasData=J({},this.initialCanvasData),this.cropBoxData=J({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(J(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),Oe(this.dragBox,Ei),pe(this.cropBox,Ee)),this},replace:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return!this.disabled&&t&&(this.isImg&&(this.element.src=t),i?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,oe(this.previews,function(a){a.getElementsByTagName(\"img\")[0].src=t}))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,Oe(this.cropper,sl)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,pe(this.cropper,sl)),this},destroy:function(){var t=this.element;return t[Q]?(t[Q]=void 0,this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),this):this},move:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=a.left,l=a.top;return this.moveTo(la(t)?t:n+Number(t),la(i)?i:l+Number(i))},moveTo:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.canvasData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(Y(t)&&(a.left=t,n=!0),Y(i)&&(a.top=i,n=!0),n&&this.renderCanvas(!0)),this},zoom:function(t,i){var a=this.canvasData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(a.width*t/a.naturalWidth,null,i)},zoomTo:function(t,i,a){var n=this.options,l=this.canvasData,o=l.width,r=l.height,s=l.naturalWidth,p=l.naturalHeight;if(t=Number(t),t>=0&&this.ready&&!this.disabled&&n.zoomable){var c=s*t,d=p*t;if(Rt(this.element,fa,{ratio:t,oldRatio:o/s,originalEvent:a})===!1)return this;if(a){var m=this.pointers,u=Dl(this.cropper),g=m&&Object.keys(m).length?tm(m):{pageX:a.pageX,pageY:a.pageY};l.left-=(c-o)*((g.pageX-u.left-l.left)/o),l.top-=(d-r)*((g.pageY-u.top-l.top)/r)}else vt(i)&&Y(i.x)&&Y(i.y)?(l.left-=(c-o)*((i.x-l.left)/o),l.top-=(d-r)*((i.y-l.top)/r)):(l.left-=(c-o)/2,l.top-=(d-r)/2);l.width=c,l.height=d,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return t=Number(t),Y(t)&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var i=this.imageData.scaleY;return this.scale(t,Y(i)?i:1)},scaleY:function(t){var i=this.imageData.scaleX;return this.scale(Y(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,a=this.imageData,n=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(Y(t)&&(a.scaleX=t,n=!0),Y(i)&&(a.scaleY=i,n=!0),n&&this.renderCanvas(!0,!0)),this},getData:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.options,a=this.imageData,n=this.canvasData,l=this.cropBoxData,o;if(this.ready&&this.cropped){o={x:l.left-n.left,y:l.top-n.top,width:l.width,height:l.height};var r=a.width/a.naturalWidth;if(oe(o,function(c,d){o[d]=c/r}),t){var s=Math.round(o.y+o.height),p=Math.round(o.x+o.width);o.x=Math.round(o.x),o.y=Math.round(o.y),o.width=p-o.x,o.height=s-o.y}}else o={x:0,y:0,width:0,height:0};return i.rotatable&&(o.rotate=a.rotate||0),i.scalable&&(o.scaleX=a.scaleX||1,o.scaleY=a.scaleY||1),o},setData:function(t){var i=this.options,a=this.imageData,n=this.canvasData,l={};if(this.ready&&!this.disabled&&vt(t)){var o=!1;i.rotatable&&Y(t.rotate)&&t.rotate!==a.rotate&&(a.rotate=t.rotate,o=!0),i.scalable&&(Y(t.scaleX)&&t.scaleX!==a.scaleX&&(a.scaleX=t.scaleX,o=!0),Y(t.scaleY)&&t.scaleY!==a.scaleY&&(a.scaleY=t.scaleY,o=!0)),o&&this.renderCanvas(!0,!0);var r=a.width/a.naturalWidth;Y(t.x)&&(l.left=t.x*r+n.left),Y(t.y)&&(l.top=t.y*r+n.top),Y(t.width)&&(l.width=t.width*r),Y(t.height)&&(l.height=t.height*r),this.setCropBoxData(l)}return this},getContainerData:function(){return this.ready?J({},this.containerData):{}},getImageData:function(){return this.sized?J({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,i={};return this.ready&&oe([\"left\",\"top\",\"width\",\"height\",\"naturalWidth\",\"naturalHeight\"],function(a){i[a]=t[a]}),i},setCanvasData:function(t){var i=this.canvasData,a=i.aspectRatio;return this.ready&&!this.disabled&&vt(t)&&(Y(t.left)&&(i.left=t.left),Y(t.top)&&(i.top=t.top),Y(t.width)?(i.width=t.width,i.height=t.width/a):Y(t.height)&&(i.height=t.height,i.width=t.height*a),this.renderCanvas(!0)),this},getCropBoxData:function(){var t=this.cropBoxData,i;return this.ready&&this.cropped&&(i={left:t.left,top:t.top,width:t.width,height:t.height}),i||{}},setCropBoxData:function(t){var i=this.cropBoxData,a=this.options.aspectRatio,n,l;return this.ready&&this.cropped&&!this.disabled&&vt(t)&&(Y(t.left)&&(i.left=t.left),Y(t.top)&&(i.top=t.top),Y(t.width)&&t.width!==i.width&&(n=!0,i.width=t.width),Y(t.height)&&t.height!==i.height&&(l=!0,i.height=t.height),a&&(n?i.height=i.width/a:l&&(i.width=i.height*a)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var i=this.canvasData,a=am(this.image,this.imageData,i,t);if(!this.cropped)return a;var n=this.getData(t.rounded),l=n.x,o=n.y,r=n.width,s=n.height,p=a.width/Math.floor(i.naturalWidth);p!==1&&(l*=p,o*=p,r*=p,s*=p);var c=r/s,d=Ye({aspectRatio:c,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),m=Ye({aspectRatio:c,width:t.minWidth||0,height:t.minHeight||0},\"cover\"),u=Ye({aspectRatio:c,width:t.width||(p!==1?a.width:r),height:t.height||(p!==1?a.height:s)}),g=u.width,f=u.height;g=Math.min(d.width,Math.max(m.width,g)),f=Math.min(d.height,Math.max(m.height,f));var h=document.createElement(\"canvas\"),I=h.getContext(\"2d\");h.width=yt(g),h.height=yt(f),I.fillStyle=t.fillColor||\"transparent\",I.fillRect(0,0,g,f);var b=t.imageSmoothingEnabled,E=b===void 0?!0:b,v=t.imageSmoothingQuality;I.imageSmoothingEnabled=E,v&&(I.imageSmoothingQuality=v);var y=a.width,T=a.height,_=l,x=o,R,P,z,A,B,w;_<=-r||_>y?(_=0,R=0,z=0,B=0):_<=0?(z=-_,_=0,R=Math.min(y,r+_),B=R):_<=y&&(z=0,R=Math.min(r,y-_),B=R),R<=0||x<=-s||x>T?(x=0,P=0,A=0,w=0):x<=0?(A=-x,x=0,P=Math.min(T,s+x),w=P):x<=T&&(A=0,P=Math.min(s,T-x),w=P);var F=[_,x,R,P];if(B>0&&w>0){var S=g/r;F.push(z*S,A*S,B*S,w*S)}return I.drawImage.apply(I,[a].concat(Rl(F.map(function(L){return Math.floor(yt(L))})))),h},setAspectRatio:function(t){var i=this.options;return!this.disabled&&!la(t)&&(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var i=this.options,a=this.dragBox,n=this.face;if(this.ready&&!this.disabled){var l=t===Ia,o=i.movable&&t===Ll;t=l||o?t:Ml,i.dragMode=t,Wt(a,Ht,t),xt(a,ca,l),xt(a,da,o),i.cropBoxMovable||(Wt(n,Ht,t),xt(n,ca,l),xt(n,da,o))}return this}},hm=De.Cropper,xa=(function(){function e(t){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(Mp(this,e),!t||!Hp.test(t.tagName))throw new Error(\"The first argument is required and must be an <img> or <canvas> element.\");this.element=t,this.options=J({},El,vt(i)&&i),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return Ap(e,[{key:\"init\",value:function(){var i=this.element,a=i.tagName.toLowerCase(),n;if(!i[Q]){if(i[Q]=this,a===\"img\"){if(this.isImg=!0,n=i.getAttribute(\"src\")||\"\",this.originalUrl=n,!n)return;n=i.src}else a===\"canvas\"&&window.HTMLCanvasElement&&(n=i.toDataURL());this.load(n)}}},{key:\"load\",value:function(i){var a=this;if(i){this.url=i,this.imageData={};var n=this.element,l=this.options;if(!l.rotatable&&!l.scalable&&(l.checkOrientation=!1),!l.checkOrientation||!window.ArrayBuffer){this.clone();return}if(Gp.test(i)){Up.test(i)?this.read(om(i)):this.clone();return}var o=new XMLHttpRequest,r=this.clone.bind(this);this.reloading=!0,this.xhr=o,o.onabort=r,o.onerror=r,o.ontimeout=r,o.onprogress=function(){o.getResponseHeader(\"content-type\")!==bl&&o.abort()},o.onload=function(){a.read(o.response)},o.onloadend=function(){a.reloading=!1,a.xhr=null},l.checkCrossOrigin&&Il(i)&&n.crossOrigin&&(i=vl(i)),o.open(\"GET\",i,!0),o.responseType=\"arraybuffer\",o.withCredentials=n.crossOrigin===\"use-credentials\",o.send()}}},{key:\"read\",value:function(i){var a=this.options,n=this.imageData,l=sm(i),o=0,r=1,s=1;if(l>1){this.url=rm(i,bl);var p=cm(l);o=p.rotate,r=p.scaleX,s=p.scaleY}a.rotatable&&(n.rotate=o),a.scalable&&(n.scaleX=r,n.scaleY=s),this.clone()}},{key:\"clone\",value:function(){var i=this.element,a=this.url,n=i.crossOrigin,l=a;this.options.checkCrossOrigin&&Il(a)&&(n||(n=\"anonymous\"),l=vl(a)),this.crossOrigin=n,this.crossOriginUrl=l;var o=document.createElement(\"img\");n&&(o.crossOrigin=n),o.src=l||a,o.alt=i.alt||\"The image to crop\",this.image=o,o.onload=this.start.bind(this),o.onerror=this.stop.bind(this),pe(o,cl),i.parentNode.insertBefore(o,i.nextSibling)}},{key:\"start\",value:function(){var i=this,a=this.image;a.onload=null,a.onerror=null,this.sizing=!0;var n=De.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(De.navigator.userAgent),l=function(p,c){J(i.imageData,{naturalWidth:p,naturalHeight:c,aspectRatio:p/c}),i.initialImageData=J({},i.imageData),i.sizing=!1,i.sized=!0,i.build()};if(a.naturalWidth&&!n){l(a.naturalWidth,a.naturalHeight);return}var o=document.createElement(\"img\"),r=document.body||document.documentElement;this.sizingImage=o,o.onload=function(){l(o.width,o.height),n||r.removeChild(o)},o.src=a.src,n||(o.style.cssText=\"left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;\",r.appendChild(o))}},{key:\"stop\",value:function(){var i=this.image;i.onload=null,i.onerror=null,i.parentNode.removeChild(i),this.image=null}},{key:\"build\",value:function(){if(!(!this.sized||this.ready)){var i=this.element,a=this.options,n=this.image,l=i.parentNode,o=document.createElement(\"div\");o.innerHTML=Wp;var r=o.querySelector(\".\".concat(Q,\"-container\")),s=r.querySelector(\".\".concat(Q,\"-canvas\")),p=r.querySelector(\".\".concat(Q,\"-drag-box\")),c=r.querySelector(\".\".concat(Q,\"-crop-box\")),d=c.querySelector(\".\".concat(Q,\"-face\"));this.container=l,this.cropper=r,this.canvas=s,this.dragBox=p,this.cropBox=c,this.viewBox=r.querySelector(\".\".concat(Q,\"-view-box\")),this.face=d,s.appendChild(n),pe(i,Ee),l.insertBefore(r,i.nextSibling),Oe(n,cl),this.initPreview(),this.bind(),a.initialAspectRatio=Math.max(0,a.initialAspectRatio)||NaN,a.aspectRatio=Math.max(0,a.aspectRatio)||NaN,a.viewMode=Math.max(0,Math.min(3,Math.round(a.viewMode)))||0,pe(c,Ee),a.guides||pe(c.getElementsByClassName(\"\".concat(Q,\"-dashed\")),Ee),a.center||pe(c.getElementsByClassName(\"\".concat(Q,\"-center\")),Ee),a.background&&pe(r,\"\".concat(Q,\"-bg\")),a.highlight||pe(d,Cp),a.cropBoxMovable&&(pe(d,da),Wt(d,Ht,Ta)),a.cropBoxResizable||(pe(c.getElementsByClassName(\"\".concat(Q,\"-line\")),Ee),pe(c.getElementsByClassName(\"\".concat(Q,\"-point\")),Ee)),this.render(),this.ready=!0,this.setDragMode(a.dragMode),a.autoCrop&&this.crop(),this.setData(a.data),be(a.ready)&&Se(i,gl,a.ready,{once:!0}),Rt(i,gl)}}},{key:\"unbuild\",value:function(){if(this.ready){this.ready=!1,this.unbind(),this.resetPreview();var i=this.cropper.parentNode;i&&i.removeChild(this.cropper),Oe(this.element,Ee)}}},{key:\"uncreate\",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}],[{key:\"noConflict\",value:function(){return window.Cropper=hm,e}},{key:\"setDefaults\",value:function(i){J(El,vt(i)&&i)}}])})();J(xa.prototype,dm,pm,mm,um,gm,fm);var Bl={\"application/prs.cww\":[\"cww\"],\"application/prs.xsf+xml\":[\"xsf\"],\"application/vnd.1000minds.decision-model+xml\":[\"1km\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"*xfdf\"],\"application/vnd.age\":[\"age\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.keynote\":[\"key\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.numbers\":[\"numbers\"],\"application/vnd.apple.pages\":[\"pages\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.autodesk.fbx\":[\"fbx\"],\"application/vnd.balsamiq.bmml+xml\":[\"bmml\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.citationstyles.style+xml\":[\"csl\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dbf\":[\"dbf\"],\"application/vnd.dcmp+xml\":[\"dcmp\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"*fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.slides\":[\"ggs\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.drawing\":[\"gdraw\"],\"application/vnd.google-apps.form\":[\"gform\"],\"application/vnd.google-apps.jam\":[\"gjam\"],\"application/vnd.google-apps.map\":[\"gmap\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.script\":[\"gscript\"],\"application/vnd.google-apps.site\":[\"gsite\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.gov.sk.xmldatacontainer+xml\":[\"xdcf\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mapbox-vector-tile\":[\"mvt\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"*stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"*mpp\",\"mpt\"],\"application/vnd.ms-visio.viewer\":[\"vdx\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.nato.bindingdataobject+xml\":[\"bdo\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.ac+xml\":[\"*ac\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openblox.game+xml\":[\"obgx\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openstreetmap.data+xml\":[\"osm\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.procrate.brushset\":[\"brushset\"],\"application/vnd.procreate.brush\":[\"brush\"],\"application/vnd.procreate.dream\":[\"drm\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.pwg-xhtml-print+xml\":[\"xhtm\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.rar\":[\"rar\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.software602.filler.form+xml\":[\"fo\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.syncml.dmddf+xml\":[\"ddf\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\",\"uo\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\",\"vsdx\",\"vtx\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[\"*dmg\"],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[\"*bdoc\"],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blender\":[\"blend\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-compressed\":[\"*rar\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"*deb\",\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-ipynb+json\":[\"ipynb\"],\"application/x-iso9660-image\":[\"*iso\"],\"application/x-iwork-keynote-sffkey\":[\"*key\"],\"application/x-iwork-numbers-sffnumbers\":[\"*numbers\"],\"application/x-iwork-pages-sffpages\":[\"*pages\"],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-keepass2\":[\"kdbx\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"*prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[\"*exe\"],\"application/x-msdownload\":[\"*exe\",\"*dll\",\"com\",\"bat\",\"*msi\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"*wmf\",\"*wmz\",\"*emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[\"*prc\",\"*pdb\"],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"*rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"*sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"*obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"*xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zip-compressed\":[\"*zip\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/x-aac\":[\"*aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[\"*m4a\"],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[\"*ra\"],\"audio/x-wav\":[\"*wav\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"image/prs.btif\":[\"btif\",\"btf\"],\"image/prs.pti\":[\"pti\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.airzip.accelerator.azv\":[\"azv\"],\"image/vnd.blockfact.facti\":[\"facti\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[\"*sub\"],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.microsoft.icon\":[\"ico\"],\"image/vnd.ms-dds\":[\"dds\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.pco.b16\":[\"b16\"],\"image/vnd.tencent.tap\":[\"tap\"],\"image/vnd.valve.source.texture\":[\"vtf\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/vnd.zbrush.pcx\":[\"pcx\"],\"image/x-3ds\":[\"3ds\"],\"image/x-adobe-dng\":[\"dng\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"*ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[\"*bmp\"],\"image/x-pcx\":[\"*pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/vnd.wfa.wsc\":[\"wsc\"],\"model/vnd.bary\":[\"bary\"],\"model/vnd.cld\":[\"cld\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"*mts\"],\"model/vnd.opengex\":[\"ogex\"],\"model/vnd.parasolid.transmit.binary\":[\"x_b\"],\"model/vnd.parasolid.transmit.text\":[\"x_t\"],\"model/vnd.pytha.pyox\":[\"pyo\",\"pyox\"],\"model/vnd.sap.vds\":[\"vds\"],\"model/vnd.usda\":[\"usda\"],\"model/vnd.usdz+zip\":[\"usdz\"],\"model/vnd.valve.source.compiled-map\":[\"bsp\"],\"model/vnd.vtu\":[\"vtu\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.familysearch.gedcom\":[\"ged\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[\"*org\"],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]};Object.freeze(Bl);var kl=Bl;var Nl={\"application/andrew-inset\":[\"ez\"],\"application/appinstaller\":[\"appinstaller\"],\"application/applixware\":[\"aw\"],\"application/appx\":[\"appx\"],\"application/appxbundle\":[\"appxbundle\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/automationml-aml+xml\":[\"aml\"],\"application/automationml-amlx+zip\":[\"amlx\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cpl+xml\":[\"cpl\"],\"application/cu-seeme\":[\"cu\"],\"application/cwl\":[\"cwl\"],\"application/dash+xml\":[\"mpd\"],\"application/dash-patch+xml\":[\"mpp\"],\"application/davmount+xml\":[\"davmount\"],\"application/dicom\":[\"dcm\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/express\":[\"exp\"],\"application/fdf\":[\"fdf\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"*js\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/media-policy-dataset+xml\":[\"mpf\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"*mp4\",\"*mpg4\",\"mp4s\",\"m4p\"],\"application/msix\":[\"msix\"],\"application/msixbundle\":[\"msixbundle\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\",\"one\",\"onea\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-keys\":[\"asc\"],\"application/pgp-signature\":[\"sig\",\"*asc\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/sql\":[\"sql\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/trig\":[\"trig\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/watcherinfo+xml\":[\"wif\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xfdf\":[\"xfdf\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"application/zip+dotlottie\":[\"lottie\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/aac\":[\"adts\",\"aac\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\",\"m4b\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avci\":[\"avci\"],\"image/avcs\":[\"avcs\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\",\"dib\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/dpx\":[\"dpx\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/ief\":[\"ief\"],\"image/jaii\":[\"jaii\"],\"image/jais\":[\"jais\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpg\",\"jpeg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\",\"jpgm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxl\":[\"jxl\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/pjpeg\":[\"jfif\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\",\"mht\",\"mhtml\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/jt\":[\"jt\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/prc\":[\"prc\"],\"model/step\":[\"step\",\"stp\",\"stpnc\",\"p21\",\"210\"],\"model/step+xml\":[\"stpx\"],\"model/step+zip\":[\"stpz\"],\"model/step-xml+zip\":[\"stpxz\"],\"model/stl\":[\"stl\"],\"model/u3d\":[\"u3d\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/javascript\":[\"js\",\"mjs\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"md\",\"markdown\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/wgsl\":[\"wgsl\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"*jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\",\"m2t\",\"m2ts\",\"mts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};Object.freeze(Nl);var Vl=Nl;var _e=function(e,t,i,a){if(i===\"a\"&&!a)throw new TypeError(\"Private accessor was defined without a getter\");if(typeof t==\"function\"?e!==t||!a:!t.has(e))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return i===\"m\"?a:i===\"a\"?a.call(e):a?a.value:t.get(e)},St,jt,rt,ya=class{constructor(...t){St.set(this,new Map),jt.set(this,new Map),rt.set(this,new Map);for(let i of t)this.define(i)}define(t,i=!1){for(let[a,n]of Object.entries(t)){a=a.toLowerCase(),n=n.map(r=>r.toLowerCase()),_e(this,rt,\"f\").has(a)||_e(this,rt,\"f\").set(a,new Set);let l=_e(this,rt,\"f\").get(a),o=!0;for(let r of n){let s=r.startsWith(\"*\");if(r=s?r.slice(1):r,l?.add(r),o&&_e(this,jt,\"f\").set(a,r),o=!1,s)continue;let p=_e(this,St,\"f\").get(r);if(p&&p!=a&&!i)throw new Error(`\"${a} -> ${r}\" conflicts with \"${p} -> ${r}\". Pass \\`force=true\\` to override this definition.`);_e(this,St,\"f\").set(r,a)}}return this}getType(t){if(typeof t!=\"string\")return null;let i=t.replace(/^.*[/\\\\]/s,\"\").toLowerCase(),a=i.replace(/^.*\\./s,\"\").toLowerCase(),n=i.length<t.length;return!(a.length<i.length-1)&&n?null:_e(this,St,\"f\").get(a)??null}getExtension(t){return typeof t!=\"string\"?null:(t=t?.split?.(\";\")[0],(t&&_e(this,jt,\"f\").get(t.trim().toLowerCase()))??null)}getAllExtensions(t){return typeof t!=\"string\"?null:_e(this,rt,\"f\").get(t.toLowerCase())??null}_freeze(){this.define=()=>{throw new Error(\"define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances\")},Object.freeze(this);for(let t of _e(this,rt,\"f\").values())Object.freeze(t);return this}_getTestState(){return{types:_e(this,St,\"f\"),extensions:_e(this,jt,\"f\")}}};St=new WeakMap,jt=new WeakMap,rt=new WeakMap;var Ra=ya;var Gl=new Ra(Vl,kl)._freeze();var Ul=({addFilter:e,utils:t})=>{let{Type:i,replaceInString:a,toNaturalFileSize:n}=t;return e(\"ALLOW_HOPPER_ITEM\",(l,{query:o})=>{if(!o(\"GET_ALLOW_FILE_SIZE_VALIDATION\"))return!0;let r=o(\"GET_MAX_FILE_SIZE\");if(r!==null&&l.size>r)return!1;let s=o(\"GET_MIN_FILE_SIZE\");return!(s!==null&&l.size<s)}),e(\"LOAD_FILE\",(l,{query:o})=>new Promise((r,s)=>{if(!o(\"GET_ALLOW_FILE_SIZE_VALIDATION\"))return r(l);let p=o(\"GET_FILE_VALIDATE_SIZE_FILTER\");if(p&&!p(l))return r(l);let c=o(\"GET_MAX_FILE_SIZE\");if(c!==null&&l.size>c){s({status:{main:o(\"GET_LABEL_MAX_FILE_SIZE_EXCEEDED\"),sub:a(o(\"GET_LABEL_MAX_FILE_SIZE\"),{filesize:n(c,\".\",o(\"GET_FILE_SIZE_BASE\"),o(\"GET_FILE_SIZE_LABELS\",o))})}});return}let d=o(\"GET_MIN_FILE_SIZE\");if(d!==null&&l.size<d){s({status:{main:o(\"GET_LABEL_MIN_FILE_SIZE_EXCEEDED\"),sub:a(o(\"GET_LABEL_MIN_FILE_SIZE\"),{filesize:n(d,\".\",o(\"GET_FILE_SIZE_BASE\"),o(\"GET_FILE_SIZE_LABELS\",o))})}});return}let m=o(\"GET_MAX_TOTAL_FILE_SIZE\");if(m!==null&&o(\"GET_ACTIVE_ITEMS\").reduce((g,f)=>g+f.fileSize,0)>m){s({status:{main:o(\"GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED\"),sub:a(o(\"GET_LABEL_MAX_TOTAL_FILE_SIZE\"),{filesize:n(m,\".\",o(\"GET_FILE_SIZE_BASE\"),o(\"GET_FILE_SIZE_LABELS\",o))})}});return}r(l)})),{options:{allowFileSizeValidation:[!0,i.BOOLEAN],maxFileSize:[null,i.INT],minFileSize:[null,i.INT],maxTotalFileSize:[null,i.INT],fileValidateSizeFilter:[null,i.FUNCTION],labelMinFileSizeExceeded:[\"File is too small\",i.STRING],labelMinFileSize:[\"Minimum file size is {filesize}\",i.STRING],labelMaxFileSizeExceeded:[\"File is too large\",i.STRING],labelMaxFileSize:[\"Maximum file size is {filesize}\",i.STRING],labelMaxTotalFileSizeExceeded:[\"Maximum total size exceeded\",i.STRING],labelMaxTotalFileSize:[\"Maximum total file size is {filesize}\",i.STRING]}}},bm=typeof window<\"u\"&&typeof window.document<\"u\";bm&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:Ul}));var Hl=Ul;var Wl=({addFilter:e,utils:t})=>{let{Type:i,isString:a,replaceInString:n,guesstimateMimeType:l,getExtensionFromFilename:o,getFilenameFromURL:r}=t,s=(u,g)=>{let f=(/^[^/]+/.exec(u)||[]).pop(),h=g.slice(0,-2);return f===h},p=(u,g)=>u.some(f=>/\\*$/.test(f)?s(g,f):f===g),c=u=>{let g=\"\";if(a(u)){let f=r(u),h=o(f);h&&(g=l(h))}else g=u.type;return g},d=(u,g,f)=>{if(g.length===0)return!0;let h=c(u);return f?new Promise((I,b)=>{f(u,h).then(E=>{p(g,E)?I():b()}).catch(b)}):p(g,h)},m=u=>g=>u[g]===null?!1:u[g]||g;return e(\"SET_ATTRIBUTE_TO_OPTION_MAP\",u=>Object.assign(u,{accept:\"acceptedFileTypes\"})),e(\"ALLOW_HOPPER_ITEM\",(u,{query:g})=>g(\"GET_ALLOW_FILE_TYPE_VALIDATION\")?d(u,g(\"GET_ACCEPTED_FILE_TYPES\")):!0),e(\"LOAD_FILE\",(u,{query:g})=>new Promise((f,h)=>{if(!g(\"GET_ALLOW_FILE_TYPE_VALIDATION\")){f(u);return}let I=g(\"GET_ACCEPTED_FILE_TYPES\"),b=g(\"GET_FILE_VALIDATE_TYPE_DETECT_TYPE\"),E=d(u,I,b),v=()=>{let y=I.map(m(g(\"GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP\"))).filter(_=>_!==!1),T=y.filter((_,x)=>y.indexOf(_)===x);h({status:{main:g(\"GET_LABEL_FILE_TYPE_NOT_ALLOWED\"),sub:n(g(\"GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES\"),{allTypes:T.join(\", \"),allButLastType:T.slice(0,-1).join(\", \"),lastType:T[T.length-1]})}})};if(typeof E==\"boolean\")return E?f(u):v();E.then(()=>{f(u)}).catch(v)})),{options:{allowFileTypeValidation:[!0,i.BOOLEAN],acceptedFileTypes:[[],i.ARRAY],labelFileTypeNotAllowed:[\"File is of invalid type\",i.STRING],fileValidateTypeLabelExpectedTypes:[\"Expects {allButLastType} or {lastType}\",i.STRING],fileValidateTypeLabelExpectedTypesMap:[{},i.OBJECT],fileValidateTypeDetectType:[null,i.FUNCTION]}}},Em=typeof window<\"u\"&&typeof window.document<\"u\";Em&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:Wl}));var jl=Wl;var Yl=e=>/^image/.test(e.type),ql=({addFilter:e,utils:t})=>{let{Type:i,isFile:a,getNumericAspectRatioFromString:n}=t,l=(p,c)=>!(!Yl(p.file)||!c(\"GET_ALLOW_IMAGE_CROP\")),o=p=>typeof p==\"object\",r=p=>typeof p==\"number\",s=(p,c)=>p.setMetadata(\"crop\",Object.assign({},p.getMetadata(\"crop\"),c));return e(\"DID_CREATE_ITEM\",(p,{query:c})=>{p.extend(\"setImageCrop\",d=>{if(!(!l(p,c)||!o(center)))return p.setMetadata(\"crop\",d),d}),p.extend(\"setImageCropCenter\",d=>{if(!(!l(p,c)||!o(d)))return s(p,{center:d})}),p.extend(\"setImageCropZoom\",d=>{if(!(!l(p,c)||!r(d)))return s(p,{zoom:Math.max(1,d)})}),p.extend(\"setImageCropRotation\",d=>{if(!(!l(p,c)||!r(d)))return s(p,{rotation:d})}),p.extend(\"setImageCropFlip\",d=>{if(!(!l(p,c)||!o(d)))return s(p,{flip:d})}),p.extend(\"setImageCropAspectRatio\",d=>{if(!l(p,c)||typeof d>\"u\")return;let m=p.getMetadata(\"crop\"),u=n(d),g={center:{x:.5,y:.5},flip:m?Object.assign({},m.flip):{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:u};return p.setMetadata(\"crop\",g),g})}),e(\"DID_LOAD_ITEM\",(p,{query:c})=>new Promise((d,m)=>{let u=p.file;if(!a(u)||!Yl(u)||!c(\"GET_ALLOW_IMAGE_CROP\")||p.getMetadata(\"crop\"))return d(p);let f=c(\"GET_IMAGE_CROP_ASPECT_RATIO\");p.setMetadata(\"crop\",{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},rotation:0,zoom:1,aspectRatio:f?n(f):null}),d(p)})),{options:{allowImageCrop:[!0,i.BOOLEAN],imageCropAspectRatio:[null,i.STRING]}}},Tm=typeof window<\"u\"&&typeof window.document<\"u\";Tm&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:ql}));var $l=ql;var Sa=e=>/^image/.test(e.type),Xl=e=>{let{addFilter:t,utils:i,views:a}=e,{Type:n,createRoute:l,createItemAPI:o=c=>c}=i,{fileActionButton:r}=a;t(\"SHOULD_REMOVE_ON_REVERT\",(c,{item:d,query:m})=>new Promise(u=>{let{file:g}=d,f=m(\"GET_ALLOW_IMAGE_EDIT\")&&m(\"GET_IMAGE_EDIT_ALLOW_EDIT\")&&Sa(g);u(!f)})),t(\"DID_LOAD_ITEM\",(c,{query:d,dispatch:m})=>new Promise((u,g)=>{if(c.origin>1){u(c);return}let{file:f}=c;if(!d(\"GET_ALLOW_IMAGE_EDIT\")||!d(\"GET_IMAGE_EDIT_INSTANT_EDIT\")){u(c);return}if(!Sa(f)){u(c);return}let h=(b,E,v)=>y=>{s.shift(),y?E(b):v(b),m(\"KICK\"),I()},I=()=>{if(!s.length)return;let{item:b,resolve:E,reject:v}=s[0];m(\"EDIT_ITEM\",{id:b.id,handleEditorResponse:h(b,E,v)})};p({item:c,resolve:u,reject:g}),s.length===1&&I()})),t(\"DID_CREATE_ITEM\",(c,{query:d,dispatch:m})=>{c.extend(\"edit\",()=>{m(\"EDIT_ITEM\",{id:c.id})})});let s=[],p=c=>(s.push(c),c);return t(\"CREATE_VIEW\",c=>{let{is:d,view:m,query:u}=c;if(!u(\"GET_ALLOW_IMAGE_EDIT\"))return;let g=u(\"GET_ALLOW_IMAGE_PREVIEW\");if(!(d(\"file-info\")&&!g||d(\"file\")&&g))return;let h=u(\"GET_IMAGE_EDIT_EDITOR\");if(!h)return;h.filepondCallbackBridge||(h.outputData=!0,h.outputFile=!1,h.filepondCallbackBridge={onconfirm:h.onconfirm||(()=>{}),oncancel:h.oncancel||(()=>{})});let I=({root:v,props:y,action:T})=>{let{id:_}=y,{handleEditorResponse:x}=T;h.cropAspectRatio=v.query(\"GET_IMAGE_CROP_ASPECT_RATIO\")||h.cropAspectRatio,h.outputCanvasBackgroundColor=v.query(\"GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR\")||h.outputCanvasBackgroundColor;let R=v.query(\"GET_ITEM\",_);if(!R)return;let P=R.file,z=R.getMetadata(\"crop\"),A={center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},B=R.getMetadata(\"resize\"),w=R.getMetadata(\"filter\")||null,F=R.getMetadata(\"filters\")||null,S=R.getMetadata(\"colors\")||null,L=R.getMetadata(\"markup\")||null,D={crop:z||A,size:B?{upscale:B.upscale,mode:B.mode,width:B.size.width,height:B.size.height}:null,filter:F?F.id||F.matrix:v.query(\"GET_ALLOW_IMAGE_FILTER\")&&v.query(\"GET_IMAGE_FILTER_COLOR_MATRIX\")&&!S?w:null,color:S,markup:L};h.onconfirm=({data:O})=>{let{crop:U,size:C,filter:X,color:K,colorMatrix:Z,markup:ce}=O,V={};if(U&&(V.crop=U),C){let W=(R.getMetadata(\"resize\")||{}).size,$={width:C.width,height:C.height};!($.width&&$.height)&&W&&($.width=W.width,$.height=W.height),($.width||$.height)&&(V.resize={upscale:C.upscale,mode:C.mode,size:$})}ce&&(V.markup=ce),V.colors=K,V.filters=X,V.filter=Z,R.setMetadata(V),h.filepondCallbackBridge.onconfirm(O,o(R)),x&&(h.onclose=()=>{x(!0),h.onclose=null})},h.oncancel=()=>{h.filepondCallbackBridge.oncancel(o(R)),x&&(h.onclose=()=>{x(!1),h.onclose=null})},h.open(P,D)},b=({root:v,props:y})=>{if(!u(\"GET_IMAGE_EDIT_ALLOW_EDIT\"))return;let{id:T}=y,_=u(\"GET_ITEM\",T);if(!_)return;let x=_.file;if(Sa(x))if(v.ref.handleEdit=R=>{R.stopPropagation(),v.dispatch(\"EDIT_ITEM\",{id:T})},g){let R=m.createChildView(r,{label:\"edit\",icon:u(\"GET_IMAGE_EDIT_ICON_EDIT\"),opacity:0});R.element.classList.add(\"filepond--action-edit-item\"),R.element.dataset.align=u(\"GET_STYLE_IMAGE_EDIT_BUTTON_EDIT_ITEM_POSITION\"),R.on(\"click\",v.ref.handleEdit),v.ref.buttonEditItem=m.appendChildView(R)}else{let R=m.element.querySelector(\".filepond--file-info-main\"),P=document.createElement(\"button\");P.className=\"filepond--action-edit-item-alt\",P.innerHTML=u(\"GET_IMAGE_EDIT_ICON_EDIT\")+\"<span>edit</span>\",P.addEventListener(\"click\",v.ref.handleEdit),R.appendChild(P),v.ref.editButton=P}};m.registerDestroyer(({root:v})=>{v.ref.buttonEditItem&&v.ref.buttonEditItem.off(\"click\",v.ref.handleEdit),v.ref.editButton&&v.ref.editButton.removeEventListener(\"click\",v.ref.handleEdit)});let E={EDIT_ITEM:I,DID_LOAD_ITEM:b};if(g){let v=({root:y})=>{y.ref.buttonEditItem&&(y.ref.buttonEditItem.opacity=1)};E.DID_IMAGE_PREVIEW_SHOW=v}m.registerWriter(l(E))}),{options:{allowImageEdit:[!0,n.BOOLEAN],styleImageEditButtonEditItemPosition:[\"bottom center\",n.STRING],imageEditInstantEdit:[!1,n.BOOLEAN],imageEditAllowEdit:[!0,n.BOOLEAN],imageEditIconEdit:['<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M8.5 17h1.586l7-7L15.5 8.414l-7 7V17zm-1.707-2.707l8-8a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-8 8A1 1 0 0 1 10.5 19h-3a1 1 0 0 1-1-1v-3a1 1 0 0 1 .293-.707z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',n.STRING],imageEditEditor:[null,n.OBJECT]}}},Im=typeof window<\"u\"&&typeof window.document<\"u\";Im&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:Xl}));var Kl=Xl;var vm=e=>/^image\\/jpeg/.test(e.type),st={JPEG:65496,APP1:65505,EXIF:1165519206,TIFF:18761,Orientation:274,Unknown:65280},ct=(e,t,i=!1)=>e.getUint16(t,i),Zl=(e,t,i=!1)=>e.getUint32(t,i),xm=e=>new Promise((t,i)=>{let a=new FileReader;a.onload=function(n){let l=new DataView(n.target.result);if(ct(l,0)!==st.JPEG){t(-1);return}let o=l.byteLength,r=2;for(;r<o;){let s=ct(l,r);if(r+=2,s===st.APP1){if(Zl(l,r+=2)!==st.EXIF)break;let p=ct(l,r+=6)===st.TIFF;r+=Zl(l,r+4,p);let c=ct(l,r,p);r+=2;for(let d=0;d<c;d++)if(ct(l,r+d*12,p)===st.Orientation){t(ct(l,r+d*12+8,p));return}}else{if((s&st.Unknown)!==st.Unknown)break;r+=ct(l,r)}}t(-1)},a.readAsArrayBuffer(e.slice(0,64*1024))}),ym=typeof window<\"u\"&&typeof window.document<\"u\",Rm=()=>ym,Sm=\"data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QA6RXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAYAAAEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAIBASIA/8QAJgABAAAAAAAAAAAAAAAAAAAAAxABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQAAPwBH/9k=\",Ql,Ii=Rm()?new Image:{};Ii.onload=()=>Ql=Ii.naturalWidth>Ii.naturalHeight;Ii.src=Sm;var _m=()=>Ql,Jl=({addFilter:e,utils:t})=>{let{Type:i,isFile:a}=t;return e(\"DID_LOAD_ITEM\",(n,{query:l})=>new Promise((o,r)=>{let s=n.file;if(!a(s)||!vm(s)||!l(\"GET_ALLOW_IMAGE_EXIF_ORIENTATION\")||!_m())return o(n);xm(s).then(p=>{n.setMetadata(\"exif\",{orientation:p}),o(n)})})),{options:{allowImageExifOrientation:[!0,i.BOOLEAN]}}},wm=typeof window<\"u\"&&typeof window.document<\"u\";wm&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:Jl}));var eo=Jl;var Lm=e=>/^image/.test(e.type),to=(e,t)=>qt(e.x*t,e.y*t),io=(e,t)=>qt(e.x+t.x,e.y+t.y),Mm=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:qt(e.x/t,e.y/t)},vi=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),l=qt(e.x-i.x,e.y-i.y);return qt(i.x+a*l.x-n*l.y,i.y+n*l.x+a*l.y)},qt=(e=0,t=0)=>({x:e,y:t}),Te=(e,t,i=1,a)=>{if(typeof e==\"string\")return parseFloat(e)*i;if(typeof e==\"number\")return e*(a?t[a]:Math.min(t.width,t.height))},Am=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||\"solid\",n=e.backgroundColor||e.fontColor||\"transparent\",l=e.borderColor||e.lineColor||\"transparent\",o=Te(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||\"round\",s=e.lineJoin||\"round\",p=typeof a==\"string\"?\"\":a.map(d=>Te(d,t,i)).join(\",\"),c=e.opacity||1;return{\"stroke-linecap\":r,\"stroke-linejoin\":s,\"stroke-width\":o||0,\"stroke-dasharray\":p,stroke:l,fill:n,opacity:c}},we=e=>e!=null,zm=(e,t,i=1)=>{let a=Te(e.x,t,i,\"width\")||Te(e.left,t,i,\"width\"),n=Te(e.y,t,i,\"height\")||Te(e.top,t,i,\"height\"),l=Te(e.width,t,i,\"width\"),o=Te(e.height,t,i,\"height\"),r=Te(e.right,t,i,\"width\"),s=Te(e.bottom,t,i,\"height\");return we(n)||(we(o)&&we(s)?n=t.height-o-s:n=s),we(a)||(we(l)&&we(r)?a=t.width-l-r:a=r),we(l)||(we(a)&&we(r)?l=t.width-a-r:l=0),we(o)||(we(n)&&we(s)?o=t.height-n-s:o=0),{x:a||0,y:n||0,width:l||0,height:o||0}},Pm=e=>e.map((t,i)=>`${i===0?\"M\":\"L\"} ${t.x} ${t.y}`).join(\" \"),Be=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),Fm=\"http://www.w3.org/2000/svg\",_t=(e,t)=>{let i=document.createElementNS(Fm,e);return t&&Be(i,t),i},Om=e=>Be(e,{...e.rect,...e.styles}),Dm=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return Be(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},Cm={contain:\"xMidYMid meet\",cover:\"xMidYMid slice\"},Bm=(e,t)=>{Be(e,{...e.rect,...e.styles,preserveAspectRatio:Cm[t.fit]||\"none\"})},km={left:\"start\",center:\"middle\",right:\"end\"},Nm=(e,t,i,a)=>{let n=Te(t.fontSize,i,a),l=t.fontFamily||\"sans-serif\",o=t.fontWeight||\"normal\",r=km[t.textAlign]||\"start\";Be(e,{...e.rect,...e.styles,\"stroke-width\":0,\"font-weight\":o,\"font-size\":n,\"font-family\":l,\"text-anchor\":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:\" \")},Vm=(e,t,i,a)=>{Be(e,{...e.rect,...e.styles,fill:\"none\"});let n=e.childNodes[0],l=e.childNodes[1],o=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(Be(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;l.style.display=\"none\",o.style.display=\"none\";let p=Mm({x:s.x-r.x,y:s.y-r.y}),c=Te(.05,i,a);if(t.lineDecoration.indexOf(\"arrow-begin\")!==-1){let d=to(p,c),m=io(r,d),u=vi(r,2,m),g=vi(r,-2,m);Be(l,{style:\"display:block;\",d:`M${u.x},${u.y} L${r.x},${r.y} L${g.x},${g.y}`})}if(t.lineDecoration.indexOf(\"arrow-end\")!==-1){let d=to(p,-c),m=io(s,d),u=vi(s,2,m),g=vi(s,-2,m);Be(o,{style:\"display:block;\",d:`M${u.x},${u.y} L${s.x},${s.y} L${g.x},${g.y}`})}},Gm=(e,t,i,a)=>{Be(e,{...e.styles,fill:\"none\",d:Pm(t.points.map(n=>({x:Te(n.x,i,a,\"width\"),y:Te(n.y,i,a,\"height\")})))})},xi=e=>t=>_t(e,{id:t.id}),Um=e=>{let t=_t(\"image\",{id:e.id,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",opacity:\"0\"});return t.onload=()=>{t.setAttribute(\"opacity\",e.opacity||1)},t.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",e.src),t},Hm=e=>{let t=_t(\"g\",{id:e.id,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}),i=_t(\"line\");t.appendChild(i);let a=_t(\"path\");t.appendChild(a);let n=_t(\"path\");return t.appendChild(n),t},Wm={image:Um,rect:xi(\"rect\"),ellipse:xi(\"ellipse\"),text:xi(\"text\"),path:xi(\"path\"),line:Hm},jm={rect:Om,ellipse:Dm,image:Bm,text:Nm,path:Gm,line:Vm},Ym=(e,t)=>Wm[e](t),qm=(e,t,i,a,n)=>{t!==\"path\"&&(e.rect=zm(i,a,n)),e.styles=Am(i,a,n),jm[t](e,i,a,n)},$m=[\"x\",\"y\",\"left\",\"top\",\"right\",\"bottom\",\"width\",\"height\"],Xm=e=>typeof e==\"string\"&&/%/.test(e)?parseFloat(e)/100:e,Km=e=>{let[t,i]=e,a=i.points?{}:$m.reduce((n,l)=>(n[l]=Xm(i[l]),n),{});return[t,{zIndex:0,...i,...a}]},Zm=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndex<t[1].zIndex?-1:0,Qm=e=>e.utils.createView({name:\"image-preview-markup\",tag:\"svg\",ignoreRect:!0,mixins:{apis:[\"width\",\"height\",\"crop\",\"markup\",\"resize\",\"dirty\"]},write:({root:t,props:i})=>{if(!i.dirty)return;let{crop:a,resize:n,markup:l}=i,o=i.width,r=i.height,s=a.width,p=a.height;if(n){let{size:u}=n,g=u&&u.width,f=u&&u.height,h=n.mode,I=n.upscale;g&&!f&&(f=g),f&&!g&&(g=f);let b=s<g&&p<f;if(!b||b&&I){let E=g/s,v=f/p;if(h===\"force\")s=g,p=f;else{let y;h===\"cover\"?y=Math.max(E,v):h===\"contain\"&&(y=Math.min(E,v)),s=s*y,p=p*y}}}let c={width:o,height:r};t.element.setAttribute(\"width\",c.width),t.element.setAttribute(\"height\",c.height);let d=Math.min(o/s,r/p);t.element.innerHTML=\"\";let m=t.query(\"GET_IMAGE_PREVIEW_MARKUP_FILTER\");l.filter(m).map(Km).sort(Zm).forEach(u=>{let[g,f]=u,h=Ym(g,f);qm(h,g,f,c,d),t.element.appendChild(h)})}}),Yt=(e,t)=>({x:e,y:t}),Jm=(e,t)=>e.x*t.x+e.y*t.y,ao=(e,t)=>Yt(e.x-t.x,e.y-t.y),eu=(e,t)=>Jm(ao(e,t),ao(e,t)),no=(e,t)=>Math.sqrt(eu(e,t)),lo=(e,t)=>{let i=e,a=1.5707963267948966,n=t,l=1.5707963267948966-t,o=Math.sin(a),r=Math.sin(n),s=Math.sin(l),p=Math.cos(l),c=i/o,d=c*r,m=c*s;return Yt(p*d,p*m)},tu=(e,t)=>{let i=e.width,a=e.height,n=lo(i,t),l=lo(a,t),o=Yt(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=Yt(e.x+e.width+Math.abs(l.y),e.y+Math.abs(l.x)),s=Yt(e.x-Math.abs(l.y),e.y+e.height-Math.abs(l.x));return{width:no(o,r),height:no(o,s)}},iu=(e,t,i=1)=>{let a=e.height/e.width,n=1,l=t,o=1,r=a;r>l&&(r=l,o=r/a);let s=Math.max(n/o,l/r),p=e.width/(i*s*o),c=p*t;return{width:p,height:c}},ro=(e,t,i,a)=>{let n=a.x>.5?1-a.x:a.x,l=a.y>.5?1-a.y:a.y,o=n*2*e.width,r=l*2*e.height,s=tu(t,i);return Math.max(s.width/o,s.height/r)},so=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,l=(e.height-a)*.5;return{x:n,y:l,width:i,height:a}},au=(e,t={})=>{let{zoom:i,rotation:a,center:n,aspectRatio:l}=t;l||(l=e.height/e.width);let o=iu(e,l,i),r={x:o.width*.5,y:o.height*.5},s={x:0,y:0,width:o.width,height:o.height,center:r},p=typeof t.scaleToFit>\"u\"||t.scaleToFit,c=ro(e,so(s,l),a,p?n:{x:.5,y:.5}),d=i*c;return{widthFloat:o.width/d,heightFloat:o.height/d,width:Math.round(o.width/d),height:Math.round(o.height/d)}},Ce={type:\"spring\",stiffness:.5,damping:.45,mass:10},nu=e=>e.utils.createView({name:\"image-bitmap\",ignoreRect:!0,mixins:{styles:[\"scaleX\",\"scaleY\"]},create:({root:t,props:i})=>{t.appendChild(i.image)}}),lu=e=>e.utils.createView({name:\"image-canvas-wrapper\",tag:\"div\",ignoreRect:!0,mixins:{apis:[\"crop\",\"width\",\"height\"],styles:[\"originX\",\"originY\",\"translateX\",\"translateY\",\"scaleX\",\"scaleY\",\"rotateZ\"],animations:{originX:Ce,originY:Ce,scaleX:Ce,scaleY:Ce,translateX:Ce,translateY:Ce,rotateZ:Ce}},create:({root:t,props:i})=>{i.width=i.image.width,i.height=i.image.height,t.ref.bitmap=t.appendChildView(t.createChildView(nu(e),{image:i.image}))},write:({root:t,props:i})=>{let{flip:a}=i.crop,{bitmap:n}=t.ref;n.scaleX=a.horizontal?-1:1,n.scaleY=a.vertical?-1:1}}),ou=e=>e.utils.createView({name:\"image-clip\",tag:\"div\",ignoreRect:!0,mixins:{apis:[\"crop\",\"markup\",\"resize\",\"width\",\"height\",\"dirty\",\"background\"],styles:[\"width\",\"height\",\"opacity\"],animations:{opacity:{type:\"tween\",duration:250}}},didWriteView:function({root:t,props:i}){i.background&&(t.element.style.backgroundColor=i.background)},create:({root:t,props:i})=>{t.ref.image=t.appendChildView(t.createChildView(lu(e),Object.assign({},i))),t.ref.createMarkup=()=>{t.ref.markup||(t.ref.markup=t.appendChildView(t.createChildView(Qm(e),Object.assign({},i))))},t.ref.destroyMarkup=()=>{t.ref.markup&&(t.removeChildView(t.ref.markup),t.ref.markup=null)};let a=t.query(\"GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR\");a!==null&&(a===\"grid\"?t.element.dataset.transparencyIndicator=a:t.element.dataset.transparencyIndicator=\"color\")},write:({root:t,props:i,shouldOptimize:a})=>{let{crop:n,markup:l,resize:o,dirty:r,width:s,height:p}=i;t.ref.image.crop=n;let c={x:0,y:0,width:s,height:p,center:{x:s*.5,y:p*.5}},d={width:t.ref.image.width,height:t.ref.image.height},m={x:n.center.x*d.width,y:n.center.y*d.height},u={x:c.center.x-d.width*n.center.x,y:c.center.y-d.height*n.center.y},g=Math.PI*2+n.rotation%(Math.PI*2),f=n.aspectRatio||d.height/d.width,h=typeof n.scaleToFit>\"u\"||n.scaleToFit,I=ro(d,so(c,f),g,h?n.center:{x:.5,y:.5}),b=n.zoom*I;l&&l.length?(t.ref.createMarkup(),t.ref.markup.width=s,t.ref.markup.height=p,t.ref.markup.resize=o,t.ref.markup.dirty=r,t.ref.markup.markup=l,t.ref.markup.crop=au(d,n)):t.ref.markup&&t.ref.destroyMarkup();let E=t.ref.image;if(a){E.originX=null,E.originY=null,E.translateX=null,E.translateY=null,E.rotateZ=null,E.scaleX=null,E.scaleY=null;return}E.originX=m.x,E.originY=m.y,E.translateX=u.x,E.translateY=u.y,E.rotateZ=g,E.scaleX=b,E.scaleY=b}}),ru=e=>e.utils.createView({name:\"image-preview\",tag:\"div\",ignoreRect:!0,mixins:{apis:[\"image\",\"crop\",\"markup\",\"resize\",\"dirty\",\"background\"],styles:[\"translateY\",\"scaleX\",\"scaleY\",\"opacity\"],animations:{scaleX:Ce,scaleY:Ce,translateY:Ce,opacity:{type:\"tween\",duration:400}}},create:({root:t,props:i})=>{t.ref.clip=t.appendChildView(t.createChildView(ou(e),{id:i.id,image:i.image,crop:i.crop,markup:i.markup,resize:i.resize,dirty:i.dirty,background:i.background}))},write:({root:t,props:i,shouldOptimize:a})=>{let{clip:n}=t.ref,{image:l,crop:o,markup:r,resize:s,dirty:p}=i;if(n.crop=o,n.markup=r,n.resize=s,n.dirty=p,n.opacity=a?0:1,a||t.rect.element.hidden)return;let c=l.height/l.width,d=o.aspectRatio||c,m=t.rect.inner.width,u=t.rect.inner.height,g=t.query(\"GET_IMAGE_PREVIEW_HEIGHT\"),f=t.query(\"GET_IMAGE_PREVIEW_MIN_HEIGHT\"),h=t.query(\"GET_IMAGE_PREVIEW_MAX_HEIGHT\"),I=t.query(\"GET_PANEL_ASPECT_RATIO\"),b=t.query(\"GET_ALLOW_MULTIPLE\");I&&!b&&(g=m*I,d=I);let E=g!==null?g:Math.max(f,Math.min(m*d,h)),v=E/d;v>m&&(v=m,E=v*d),E>u&&(E=u,v=u/d),n.width=v,n.height=E}}),su=`<svg width=\"500\" height=\"200\" viewBox=\"0 0 500 200\" preserveAspectRatio=\"none\">\n    <defs>\n        <radialGradient id=\"gradient-__UID__\" cx=\".5\" cy=\"1.25\" r=\"1.15\">\n            <stop offset='50%' stop-color='#000000'/>\n            <stop offset='56%' stop-color='#0a0a0a'/>\n            <stop offset='63%' stop-color='#262626'/>\n            <stop offset='69%' stop-color='#4f4f4f'/>\n            <stop offset='75%' stop-color='#808080'/>\n            <stop offset='81%' stop-color='#b1b1b1'/>\n            <stop offset='88%' stop-color='#dadada'/>\n            <stop offset='94%' stop-color='#f6f6f6'/>\n            <stop offset='100%' stop-color='#ffffff'/>\n        </radialGradient>\n        <mask id=\"mask-__UID__\">\n            <rect x=\"0\" y=\"0\" width=\"500\" height=\"200\" fill=\"url(#gradient-__UID__)\"></rect>\n        </mask>\n    </defs>\n    <rect x=\"0\" width=\"500\" height=\"200\" fill=\"currentColor\" mask=\"url(#mask-__UID__)\"></rect>\n</svg>`,oo=0,cu=e=>e.utils.createView({name:\"image-preview-overlay\",tag:\"div\",ignoreRect:!0,create:({root:t,props:i})=>{let a=su;if(document.querySelector(\"base\")){let n=new URL(window.location.href.replace(window.location.hash,\"\")).href;a=a.replace(/url\\(\\#/g,\"url(\"+n+\"#\")}oo++,t.element.classList.add(`filepond--image-preview-overlay-${i.status}`),t.element.innerHTML=a.replace(/__UID__/g,oo)},mixins:{styles:[\"opacity\"],animations:{opacity:{type:\"spring\",mass:25}}}}),du=function(){self.onmessage=e=>{createImageBitmap(e.data.message.file).then(t=>{self.postMessage({id:e.data.id,message:t},[t])})}},pu=function(){self.onmessage=e=>{let t=e.data.message.imageData,i=e.data.message.colorMatrix,a=t.data,n=a.length,l=i[0],o=i[1],r=i[2],s=i[3],p=i[4],c=i[5],d=i[6],m=i[7],u=i[8],g=i[9],f=i[10],h=i[11],I=i[12],b=i[13],E=i[14],v=i[15],y=i[16],T=i[17],_=i[18],x=i[19],R=0,P=0,z=0,A=0,B=0;for(;R<n;R+=4)P=a[R]/255,z=a[R+1]/255,A=a[R+2]/255,B=a[R+3]/255,a[R]=Math.max(0,Math.min((P*l+z*o+A*r+B*s+p)*255,255)),a[R+1]=Math.max(0,Math.min((P*c+z*d+A*m+B*u+g)*255,255)),a[R+2]=Math.max(0,Math.min((P*f+z*h+A*I+B*b+E)*255,255)),a[R+3]=Math.max(0,Math.min((P*v+z*y+A*T+B*_+x)*255,255));self.postMessage({id:e.data.id,message:t},[t.data.buffer])}},mu=(e,t)=>{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t(a,n)},i.src=e},uu={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},gu=(e,t,i,a)=>{a!==-1&&e.transform.apply(e,uu[a](t,i))},fu=(e,t,i,a)=>{t=Math.round(t),i=Math.round(i);let n=document.createElement(\"canvas\");n.width=t,n.height=i;let l=n.getContext(\"2d\");return a>=5&&a<=8&&([t,i]=[i,t]),gu(l,t,i,a),l.drawImage(e,0,0,t,i),n},co=e=>/^image/.test(e.type)&&!/svg/.test(e.type),hu=10,bu=10,Eu=e=>{let t=Math.min(hu/e.width,bu/e.height),i=document.createElement(\"canvas\"),a=i.getContext(\"2d\"),n=i.width=Math.ceil(e.width*t),l=i.height=Math.ceil(e.height*t);a.drawImage(e,0,0,n,l);let o=null;try{o=a.getImageData(0,0,n,l).data}catch{return null}let r=o.length,s=0,p=0,c=0,d=0;for(;d<r;d+=4)s+=o[d]*o[d],p+=o[d+1]*o[d+1],c+=o[d+2]*o[d+2];return s=_a(s,r),p=_a(p,r),c=_a(c,r),{r:s,g:p,b:c}},_a=(e,t)=>Math.floor(Math.sqrt(e/(t/4))),Tu=(e,t)=>(t=t||document.createElement(\"canvas\"),t.width=e.width,t.height=e.height,t.getContext(\"2d\").drawImage(e,0,0),t),Iu=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement(\"canvas\").getContext(\"2d\").createImageData(e.width,e.height)}return t.data.set(new Uint8ClampedArray(e.data)),t},vu=e=>new Promise((t,i)=>{let a=new Image;a.crossOrigin=\"Anonymous\",a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),xu=e=>{let t=cu(e),i=ru(e),{createWorker:a}=e.utils,n=(b,E,v)=>new Promise(y=>{b.ref.imageData||(b.ref.imageData=v.getContext(\"2d\").getImageData(0,0,v.width,v.height));let T=Iu(b.ref.imageData);if(!E||E.length!==20)return v.getContext(\"2d\").putImageData(T,0,0),y();let _=a(pu);_.post({imageData:T,colorMatrix:E},x=>{v.getContext(\"2d\").putImageData(x,0,0),_.terminate(),y()},[T.data.buffer])}),l=(b,E)=>{b.removeChildView(E),E.image.width=1,E.image.height=1,E._destroy()},o=({root:b})=>{let E=b.ref.images.shift();return E.opacity=0,E.translateY=-15,b.ref.imageViewBin.push(E),E},r=({root:b,props:E,image:v})=>{let y=E.id,T=b.query(\"GET_ITEM\",{id:y});if(!T)return;let _=T.getMetadata(\"crop\")||{center:{x:.5,y:.5},flip:{horizontal:!1,vertical:!1},zoom:1,rotation:0,aspectRatio:null},x=b.query(\"GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR\"),R,P,z=!1;b.query(\"GET_IMAGE_PREVIEW_MARKUP_SHOW\")&&(R=T.getMetadata(\"markup\")||[],P=T.getMetadata(\"resize\"),z=!0);let A=b.appendChildView(b.createChildView(i,{id:y,image:v,crop:_,resize:P,markup:R,dirty:z,background:x,opacity:0,scaleX:1.15,scaleY:1.15,translateY:15}),b.childViews.length);b.ref.images.push(A),A.opacity=1,A.scaleX=1,A.scaleY=1,A.translateY=0,setTimeout(()=>{b.dispatch(\"DID_IMAGE_PREVIEW_SHOW\",{id:y})},250)},s=({root:b,props:E})=>{let v=b.query(\"GET_ITEM\",{id:E.id});if(!v)return;let y=b.ref.images[b.ref.images.length-1];y.crop=v.getMetadata(\"crop\"),y.background=b.query(\"GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR\"),b.query(\"GET_IMAGE_PREVIEW_MARKUP_SHOW\")&&(y.dirty=!0,y.resize=v.getMetadata(\"resize\"),y.markup=v.getMetadata(\"markup\"))},p=({root:b,props:E,action:v})=>{if(!/crop|filter|markup|resize/.test(v.change.key)||!b.ref.images.length)return;let y=b.query(\"GET_ITEM\",{id:E.id});if(y){if(/filter/.test(v.change.key)){let T=b.ref.images[b.ref.images.length-1];n(b,v.change.value,T.image);return}if(/crop|markup|resize/.test(v.change.key)){let T=y.getMetadata(\"crop\"),_=b.ref.images[b.ref.images.length-1];if(T&&T.aspectRatio&&_.crop&&_.crop.aspectRatio&&Math.abs(T.aspectRatio-_.crop.aspectRatio)>1e-5){let x=o({root:b});r({root:b,props:E,image:Tu(x.image)})}else s({root:b,props:E})}}},c=b=>{let v=window.navigator.userAgent.match(/Firefox\\/([0-9]+)\\./),y=v?parseInt(v[1]):null;return y!==null&&y<=58?!1:\"createImageBitmap\"in window&&co(b)},d=({root:b,props:E})=>{let{id:v}=E,y=b.query(\"GET_ITEM\",v);if(!y)return;let T=URL.createObjectURL(y.file);mu(T,(_,x)=>{b.dispatch(\"DID_IMAGE_PREVIEW_CALCULATE_SIZE\",{id:v,width:_,height:x})})},m=({root:b,props:E})=>{let{id:v}=E,y=b.query(\"GET_ITEM\",v);if(!y)return;let T=URL.createObjectURL(y.file),_=()=>{vu(T).then(x)},x=R=>{URL.revokeObjectURL(T);let z=(y.getMetadata(\"exif\")||{}).orientation||-1,{width:A,height:B}=R;if(!A||!B)return;z>=5&&z<=8&&([A,B]=[B,A]);let w=Math.max(1,window.devicePixelRatio*.75),S=b.query(\"GET_IMAGE_PREVIEW_ZOOM_FACTOR\")*w,L=B/A,D=b.rect.element.width,O=b.rect.element.height,U=D,C=U*L;L>1?(U=Math.min(A,D*S),C=U*L):(C=Math.min(B,O*S),U=C/L);let X=fu(R,U,C,z),K=()=>{let ce=b.query(\"GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR\")?Eu(data):null;y.setMetadata(\"color\",ce,!0),\"close\"in R&&R.close(),b.ref.overlayShadow.opacity=1,r({root:b,props:E,image:X})},Z=y.getMetadata(\"filter\");Z?n(b,Z,X).then(K):K()};if(c(y.file)){let R=a(du);R.post({file:y.file},P=>{if(R.terminate(),!P){_();return}x(P)})}else _()},u=({root:b})=>{let E=b.ref.images[b.ref.images.length-1];E.translateY=0,E.scaleX=1,E.scaleY=1,E.opacity=1},g=({root:b})=>{b.ref.overlayShadow.opacity=1,b.ref.overlayError.opacity=0,b.ref.overlaySuccess.opacity=0},f=({root:b})=>{b.ref.overlayShadow.opacity=.25,b.ref.overlayError.opacity=1},h=({root:b})=>{b.ref.overlayShadow.opacity=.25,b.ref.overlaySuccess.opacity=1},I=({root:b})=>{b.ref.images=[],b.ref.imageData=null,b.ref.imageViewBin=[],b.ref.overlayShadow=b.appendChildView(b.createChildView(t,{opacity:0,status:\"idle\"})),b.ref.overlaySuccess=b.appendChildView(b.createChildView(t,{opacity:0,status:\"success\"})),b.ref.overlayError=b.appendChildView(b.createChildView(t,{opacity:0,status:\"failure\"}))};return e.utils.createView({name:\"image-preview-wrapper\",create:I,styles:[\"height\"],apis:[\"height\"],destroy:({root:b})=>{b.ref.images.forEach(E=>{E.image.width=1,E.image.height=1})},didWriteView:({root:b})=>{b.ref.images.forEach(E=>{E.dirty=!1})},write:e.utils.createRoute({DID_IMAGE_PREVIEW_DRAW:u,DID_IMAGE_PREVIEW_CONTAINER_CREATE:d,DID_FINISH_CALCULATE_PREVIEWSIZE:m,DID_UPDATE_ITEM_METADATA:p,DID_THROW_ITEM_LOAD_ERROR:f,DID_THROW_ITEM_PROCESSING_ERROR:f,DID_THROW_ITEM_INVALID:f,DID_COMPLETE_ITEM_PROCESSING:h,DID_START_ITEM_PROCESSING:g,DID_REVERT_ITEM_PROCESSING:g},({root:b})=>{let E=b.ref.imageViewBin.filter(v=>v.opacity===0);b.ref.imageViewBin=b.ref.imageViewBin.filter(v=>v.opacity>0),E.forEach(v=>l(b,v)),E.length=0})})},po=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n,isFile:l}=i,o=xu(e);return t(\"CREATE_VIEW\",r=>{let{is:s,view:p,query:c}=r;if(!s(\"file\")||!c(\"GET_ALLOW_IMAGE_PREVIEW\"))return;let d=({root:h,props:I})=>{let{id:b}=I,E=c(\"GET_ITEM\",b);if(!E||!l(E.file)||E.archived)return;let v=E.file;if(!Lm(v)||!c(\"GET_IMAGE_PREVIEW_FILTER_ITEM\")(E))return;let y=\"createImageBitmap\"in(window||{}),T=c(\"GET_IMAGE_PREVIEW_MAX_FILE_SIZE\");if(!y&&T&&v.size>T)return;h.ref.imagePreview=p.appendChildView(p.createChildView(o,{id:b}));let _=h.query(\"GET_IMAGE_PREVIEW_HEIGHT\");_&&h.dispatch(\"DID_UPDATE_PANEL_HEIGHT\",{id:E.id,height:_});let x=!y&&v.size>c(\"GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE\");h.dispatch(\"DID_IMAGE_PREVIEW_CONTAINER_CREATE\",{id:b},x)},m=(h,I)=>{if(!h.ref.imagePreview)return;let{id:b}=I,E=h.query(\"GET_ITEM\",{id:b});if(!E)return;let v=h.query(\"GET_PANEL_ASPECT_RATIO\"),y=h.query(\"GET_ITEM_PANEL_ASPECT_RATIO\"),T=h.query(\"GET_IMAGE_PREVIEW_HEIGHT\");if(v||y||T)return;let{imageWidth:_,imageHeight:x}=h.ref;if(!_||!x)return;let R=h.query(\"GET_IMAGE_PREVIEW_MIN_HEIGHT\"),P=h.query(\"GET_IMAGE_PREVIEW_MAX_HEIGHT\"),A=(E.getMetadata(\"exif\")||{}).orientation||-1;if(A>=5&&A<=8&&([_,x]=[x,_]),!co(E.file)||h.query(\"GET_IMAGE_PREVIEW_UPSCALE\")){let D=2048/_;_*=D,x*=D}let B=x/_,w=(E.getMetadata(\"crop\")||{}).aspectRatio||B,F=Math.max(R,Math.min(x,P)),S=h.rect.element.width,L=Math.min(S*w,F);h.dispatch(\"DID_UPDATE_PANEL_HEIGHT\",{id:E.id,height:L})},u=({root:h})=>{h.ref.shouldRescale=!0},g=({root:h,action:I})=>{I.change.key===\"crop\"&&(h.ref.shouldRescale=!0)},f=({root:h,action:I})=>{h.ref.imageWidth=I.width,h.ref.imageHeight=I.height,h.ref.shouldRescale=!0,h.ref.shouldDrawPreview=!0,h.dispatch(\"KICK\")};p.registerWriter(n({DID_RESIZE_ROOT:u,DID_STOP_RESIZE:u,DID_LOAD_ITEM:d,DID_IMAGE_PREVIEW_CALCULATE_SIZE:f,DID_UPDATE_ITEM_METADATA:g},({root:h,props:I})=>{h.ref.imagePreview&&(h.rect.element.hidden||(h.ref.shouldRescale&&(m(h,I),h.ref.shouldRescale=!1),h.ref.shouldDrawPreview&&(requestAnimationFrame(()=>{requestAnimationFrame(()=>{h.dispatch(\"DID_FINISH_CALCULATE_PREVIEWSIZE\",{id:I.id})})}),h.ref.shouldDrawPreview=!1)))}))}),{options:{allowImagePreview:[!0,a.BOOLEAN],imagePreviewFilterItem:[()=>!0,a.FUNCTION],imagePreviewHeight:[null,a.INT],imagePreviewMinHeight:[44,a.INT],imagePreviewMaxHeight:[256,a.INT],imagePreviewMaxFileSize:[null,a.INT],imagePreviewZoomFactor:[2,a.INT],imagePreviewUpscale:[!1,a.BOOLEAN],imagePreviewMaxInstantPreviewFileSize:[1e6,a.INT],imagePreviewTransparencyIndicator:[null,a.STRING],imagePreviewCalculateAverageImageColor:[!1,a.BOOLEAN],imagePreviewMarkupShow:[!0,a.BOOLEAN],imagePreviewMarkupFilter:[()=>!0,a.FUNCTION]}}},yu=typeof window<\"u\"&&typeof window.document<\"u\";yu&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:po}));var mo=po;var Ru=e=>/^image/.test(e.type),Su=(e,t)=>{let i=new Image;i.onload=()=>{let a=i.naturalWidth,n=i.naturalHeight;i=null,t({width:a,height:n})},i.onerror=()=>t(null),i.src=e},uo=({addFilter:e,utils:t})=>{let{Type:i}=t;return e(\"DID_LOAD_ITEM\",(a,{query:n})=>new Promise((l,o)=>{let r=a.file;if(!Ru(r)||!n(\"GET_ALLOW_IMAGE_RESIZE\"))return l(a);let s=n(\"GET_IMAGE_RESIZE_MODE\"),p=n(\"GET_IMAGE_RESIZE_TARGET_WIDTH\"),c=n(\"GET_IMAGE_RESIZE_TARGET_HEIGHT\"),d=n(\"GET_IMAGE_RESIZE_UPSCALE\");if(p===null&&c===null)return l(a);let m=p===null?c:p,u=c===null?m:c,g=URL.createObjectURL(r);Su(g,f=>{if(URL.revokeObjectURL(g),!f)return l(a);let{width:h,height:I}=f,b=(a.getMetadata(\"exif\")||{}).orientation||-1;if(b>=5&&b<=8&&([h,I]=[I,h]),h===m&&I===u)return l(a);if(!d){if(s===\"cover\"){if(h<=m||I<=u)return l(a)}else if(h<=m&&I<=m)return l(a)}a.setMetadata(\"resize\",{mode:s,upscale:d,size:{width:m,height:u}}),l(a)})})),{options:{allowImageResize:[!0,i.BOOLEAN],imageResizeMode:[\"cover\",i.STRING],imageResizeUpscale:[!0,i.BOOLEAN],imageResizeTargetWidth:[null,i.INT],imageResizeTargetHeight:[null,i.INT]}}},_u=typeof window<\"u\"&&typeof window.document<\"u\";_u&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:uo}));var go=uo;var wu=e=>/^image/.test(e.type),Lu=e=>e.substr(0,e.lastIndexOf(\".\"))||e,Mu={jpeg:\"jpg\",\"svg+xml\":\"svg\"},Au=(e,t)=>{let i=Lu(e),a=t.split(\"/\")[1],n=Mu[a]||a;return`${i}.${n}`},zu=e=>/jpeg|png|svg\\+xml/.test(e)?e:\"image/jpeg\",Pu=e=>/^image/.test(e.type),Fu={1:()=>[1,0,0,1,0,0],2:e=>[-1,0,0,1,e,0],3:(e,t)=>[-1,0,0,-1,e,t],4:(e,t)=>[1,0,0,-1,0,t],5:()=>[0,1,1,0,0,0],6:(e,t)=>[0,1,-1,0,t,0],7:(e,t)=>[0,-1,-1,0,t,e],8:e=>[0,-1,1,0,0,e]},Ou=(e,t,i)=>(i===-1&&(i=1),Fu[i](e,t)),$t=(e,t)=>({x:e,y:t}),Du=(e,t)=>e.x*t.x+e.y*t.y,fo=(e,t)=>$t(e.x-t.x,e.y-t.y),Cu=(e,t)=>Du(fo(e,t),fo(e,t)),ho=(e,t)=>Math.sqrt(Cu(e,t)),bo=(e,t)=>{let i=e,a=1.5707963267948966,n=t,l=1.5707963267948966-t,o=Math.sin(a),r=Math.sin(n),s=Math.sin(l),p=Math.cos(l),c=i/o,d=c*r,m=c*s;return $t(p*d,p*m)},Bu=(e,t)=>{let i=e.width,a=e.height,n=bo(i,t),l=bo(a,t),o=$t(e.x+Math.abs(n.x),e.y-Math.abs(n.y)),r=$t(e.x+e.width+Math.abs(l.y),e.y+Math.abs(l.x)),s=$t(e.x-Math.abs(l.y),e.y+e.height-Math.abs(l.x));return{width:ho(o,r),height:ho(o,s)}},Io=(e,t,i=0,a={x:.5,y:.5})=>{let n=a.x>.5?1-a.x:a.x,l=a.y>.5?1-a.y:a.y,o=n*2*e.width,r=l*2*e.height,s=Bu(t,i);return Math.max(s.width/o,s.height/r)},vo=(e,t)=>{let i=e.width,a=i*t;a>e.height&&(a=e.height,i=a/t);let n=(e.width-i)*.5,l=(e.height-a)*.5;return{x:n,y:l,width:i,height:a}},Eo=(e,t,i=1)=>{let a=e.height/e.width,n=1,l=t,o=1,r=a;r>l&&(r=l,o=r/a);let s=Math.max(n/o,l/r),p=e.width/(i*s*o),c=p*t;return{width:p,height:c}},xo=e=>{e.width=1,e.height=1,e.getContext(\"2d\").clearRect(0,0,1,1)},To=e=>e&&(e.horizontal||e.vertical),ku=(e,t,i)=>{if(t<=1&&!To(i))return e.width=e.naturalWidth,e.height=e.naturalHeight,e;let a=document.createElement(\"canvas\"),n=e.naturalWidth,l=e.naturalHeight,o=t>=5&&t<=8;o?(a.width=l,a.height=n):(a.width=n,a.height=l);let r=a.getContext(\"2d\");if(t&&r.transform.apply(r,Ou(n,l,t)),To(i)){let s=[1,0,0,1,0,0];(!o&&i.horizontal||o&i.vertical)&&(s[0]=-1,s[4]=n),(!o&&i.vertical||o&&i.horizontal)&&(s[3]=-1,s[5]=l),r.transform(...s)}return r.drawImage(e,0,0,n,l),a},Nu=(e,t,i={},a={})=>{let{canvasMemoryLimit:n,background:l=null}=a,o=i.zoom||1,r=ku(e,t,i.flip),s={width:r.width,height:r.height},p=i.aspectRatio||s.height/s.width,c=Eo(s,p,o);if(n){let E=c.width*c.height;if(E>n){let v=Math.sqrt(n)/Math.sqrt(E);s.width=Math.floor(s.width*v),s.height=Math.floor(s.height*v),c=Eo(s,p,o)}}let d=document.createElement(\"canvas\"),m={x:c.width*.5,y:c.height*.5},u={x:0,y:0,width:c.width,height:c.height,center:m},g=typeof i.scaleToFit>\"u\"||i.scaleToFit,f=o*Io(s,vo(u,p),i.rotation,g?i.center:{x:.5,y:.5});d.width=Math.round(c.width/f),d.height=Math.round(c.height/f),m.x/=f,m.y/=f;let h={x:m.x-s.width*(i.center?i.center.x:.5),y:m.y-s.height*(i.center?i.center.y:.5)},I=d.getContext(\"2d\");l&&(I.fillStyle=l,I.fillRect(0,0,d.width,d.height)),I.translate(m.x,m.y),I.rotate(i.rotation||0),I.drawImage(r,h.x-m.x,h.y-m.y,s.width,s.height);let b=I.getImageData(0,0,d.width,d.height);return xo(d),b},Vu=typeof window<\"u\"&&typeof window.document<\"u\";Vu&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,\"toBlob\",{value:function(e,t,i){var a=this.toDataURL(t,i).split(\",\")[1];setTimeout(function(){for(var n=atob(a),l=n.length,o=new Uint8Array(l),r=0;r<l;r++)o[r]=n.charCodeAt(r);e(new Blob([o],{type:t||\"image/png\"}))})}}));var Gu=(e,t,i=null)=>new Promise(a=>{let n=i?i(e):e;Promise.resolve(n).then(l=>{l.toBlob(a,t.type,t.quality)})}),Ri=(e,t)=>Xt(e.x*t,e.y*t),Si=(e,t)=>Xt(e.x+t.x,e.y+t.y),yo=e=>{let t=Math.sqrt(e.x*e.x+e.y*e.y);return t===0?{x:0,y:0}:Xt(e.x/t,e.y/t)},qe=(e,t,i)=>{let a=Math.cos(t),n=Math.sin(t),l=Xt(e.x-i.x,e.y-i.y);return Xt(i.x+a*l.x-n*l.y,i.y+n*l.x+a*l.y)},Xt=(e=0,t=0)=>({x:e,y:t}),me=(e,t,i=1,a)=>{if(typeof e==\"string\")return parseFloat(e)*i;if(typeof e==\"number\")return e*(a?t[a]:Math.min(t.width,t.height))},dt=(e,t,i)=>{let a=e.borderStyle||e.lineStyle||\"solid\",n=e.backgroundColor||e.fontColor||\"transparent\",l=e.borderColor||e.lineColor||\"transparent\",o=me(e.borderWidth||e.lineWidth,t,i),r=e.lineCap||\"round\",s=e.lineJoin||\"round\",p=typeof a==\"string\"?\"\":a.map(d=>me(d,t,i)).join(\",\"),c=e.opacity||1;return{\"stroke-linecap\":r,\"stroke-linejoin\":s,\"stroke-width\":o||0,\"stroke-dasharray\":p,stroke:l,fill:n,opacity:c}},Le=e=>e!=null,Lt=(e,t,i=1)=>{let a=me(e.x,t,i,\"width\")||me(e.left,t,i,\"width\"),n=me(e.y,t,i,\"height\")||me(e.top,t,i,\"height\"),l=me(e.width,t,i,\"width\"),o=me(e.height,t,i,\"height\"),r=me(e.right,t,i,\"width\"),s=me(e.bottom,t,i,\"height\");return Le(n)||(Le(o)&&Le(s)?n=t.height-o-s:n=s),Le(a)||(Le(l)&&Le(r)?a=t.width-l-r:a=r),Le(l)||(Le(a)&&Le(r)?l=t.width-a-r:l=0),Le(o)||(Le(n)&&Le(s)?o=t.height-n-s:o=0),{x:a||0,y:n||0,width:l||0,height:o||0}},Uu=e=>e.map((t,i)=>`${i===0?\"M\":\"L\"} ${t.x} ${t.y}`).join(\" \"),ke=(e,t)=>Object.keys(t).forEach(i=>e.setAttribute(i,t[i])),Hu=\"http://www.w3.org/2000/svg\",wt=(e,t)=>{let i=document.createElementNS(Hu,e);return t&&ke(i,t),i},Wu=e=>ke(e,{...e.rect,...e.styles}),ju=e=>{let t=e.rect.x+e.rect.width*.5,i=e.rect.y+e.rect.height*.5,a=e.rect.width*.5,n=e.rect.height*.5;return ke(e,{cx:t,cy:i,rx:a,ry:n,...e.styles})},Yu={contain:\"xMidYMid meet\",cover:\"xMidYMid slice\"},qu=(e,t)=>{ke(e,{...e.rect,...e.styles,preserveAspectRatio:Yu[t.fit]||\"none\"})},$u={left:\"start\",center:\"middle\",right:\"end\"},Xu=(e,t,i,a)=>{let n=me(t.fontSize,i,a),l=t.fontFamily||\"sans-serif\",o=t.fontWeight||\"normal\",r=$u[t.textAlign]||\"start\";ke(e,{...e.rect,...e.styles,\"stroke-width\":0,\"font-weight\":o,\"font-size\":n,\"font-family\":l,\"text-anchor\":r}),e.text!==t.text&&(e.text=t.text,e.textContent=t.text.length?t.text:\" \")},Ku=(e,t,i,a)=>{ke(e,{...e.rect,...e.styles,fill:\"none\"});let n=e.childNodes[0],l=e.childNodes[1],o=e.childNodes[2],r=e.rect,s={x:e.rect.x+e.rect.width,y:e.rect.y+e.rect.height};if(ke(n,{x1:r.x,y1:r.y,x2:s.x,y2:s.y}),!t.lineDecoration)return;l.style.display=\"none\",o.style.display=\"none\";let p=yo({x:s.x-r.x,y:s.y-r.y}),c=me(.05,i,a);if(t.lineDecoration.indexOf(\"arrow-begin\")!==-1){let d=Ri(p,c),m=Si(r,d),u=qe(r,2,m),g=qe(r,-2,m);ke(l,{style:\"display:block;\",d:`M${u.x},${u.y} L${r.x},${r.y} L${g.x},${g.y}`})}if(t.lineDecoration.indexOf(\"arrow-end\")!==-1){let d=Ri(p,-c),m=Si(s,d),u=qe(s,2,m),g=qe(s,-2,m);ke(o,{style:\"display:block;\",d:`M${u.x},${u.y} L${s.x},${s.y} L${g.x},${g.y}`})}},Zu=(e,t,i,a)=>{ke(e,{...e.styles,fill:\"none\",d:Uu(t.points.map(n=>({x:me(n.x,i,a,\"width\"),y:me(n.y,i,a,\"height\")})))})},yi=e=>t=>wt(e,{id:t.id}),Qu=e=>{let t=wt(\"image\",{id:e.id,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",opacity:\"0\"});return t.onload=()=>{t.setAttribute(\"opacity\",e.opacity||1)},t.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",e.src),t},Ju=e=>{let t=wt(\"g\",{id:e.id,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}),i=wt(\"line\");t.appendChild(i);let a=wt(\"path\");t.appendChild(a);let n=wt(\"path\");return t.appendChild(n),t},eg={image:Qu,rect:yi(\"rect\"),ellipse:yi(\"ellipse\"),text:yi(\"text\"),path:yi(\"path\"),line:Ju},tg={rect:Wu,ellipse:ju,image:qu,text:Xu,path:Zu,line:Ku},ig=(e,t)=>eg[e](t),ag=(e,t,i,a,n)=>{t!==\"path\"&&(e.rect=Lt(i,a,n)),e.styles=dt(i,a,n),tg[t](e,i,a,n)},Ro=(e,t)=>e[1].zIndex>t[1].zIndex?1:e[1].zIndex<t[1].zIndex?-1:0,ng=(e,t={},i,a)=>new Promise(n=>{let{background:l=null}=a,o=new FileReader;o.onloadend=()=>{let r=o.result,s=document.createElement(\"div\");s.style.cssText=\"position:absolute;pointer-events:none;width:0;height:0;visibility:hidden;\",s.innerHTML=r;let p=s.querySelector(\"svg\");document.body.appendChild(s);let c=p.getBBox();s.parentNode.removeChild(s);let d=s.querySelector(\"title\"),m=p.getAttribute(\"viewBox\")||\"\",u=p.getAttribute(\"width\")||\"\",g=p.getAttribute(\"height\")||\"\",f=parseFloat(u)||null,h=parseFloat(g)||null,I=(u.match(/[a-z]+/)||[])[0]||\"\",b=(g.match(/[a-z]+/)||[])[0]||\"\",E=m.split(\" \").map(parseFloat),v=E.length?{x:E[0],y:E[1],width:E[2],height:E[3]}:c,y=f??v.width,T=h??v.height;p.style.overflow=\"visible\",p.setAttribute(\"width\",y),p.setAttribute(\"height\",T);let _=\"\";if(i&&i.length){let Z={width:y,height:T};_=i.sort(Ro).reduce((ce,V)=>{let W=ig(V[0],V[1]);return ag(W,V[0],V[1],Z),W.removeAttribute(\"id\"),W.getAttribute(\"opacity\")===1&&W.removeAttribute(\"opacity\"),ce+`\n`+W.outerHTML+`\n`},\"\"),_=`\n\n<g>${_.replace(/&nbsp;/g,\" \")}</g>\n\n`}let x=t.aspectRatio||T/y,R=y,P=R*x,z=typeof t.scaleToFit>\"u\"||t.scaleToFit,A=t.center?t.center.x:.5,B=t.center?t.center.y:.5,w=Io({width:y,height:T},vo({width:R,height:P},x),t.rotation,z?{x:A,y:B}:{x:.5,y:.5}),F=t.zoom*w,S=t.rotation*(180/Math.PI),L={x:R*.5,y:P*.5},D={x:L.x-y*A,y:L.y-T*B},O=[`rotate(${S} ${L.x} ${L.y})`,`translate(${L.x} ${L.y})`,`scale(${F})`,`translate(${-L.x} ${-L.y})`,`translate(${D.x} ${D.y})`],U=t.flip&&t.flip.horizontal,C=t.flip&&t.flip.vertical,X=[`scale(${U?-1:1} ${C?-1:1})`,`translate(${U?-y:0} ${C?-T:0})`],K=`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"${R}${I}\" height=\"${P}${b}\" \nviewBox=\"0 0 ${R} ${P}\" ${l?'style=\"background:'+l+'\" ':\"\"}\npreserveAspectRatio=\"xMinYMin\"\nxmlns:xlink=\"http://www.w3.org/1999/xlink\"\nxmlns=\"http://www.w3.org/2000/svg\">\n<!-- Generated by PQINA - https://pqina.nl/ -->\n<title>${d?d.textContent:\"\"}</title>\n<g transform=\"${O.join(\" \")}\">\n<g transform=\"${X.join(\" \")}\">\n${p.outerHTML}${_}\n</g>\n</g>\n</svg>`;n(K)},o.readAsText(e)}),lg=e=>{let t;try{t=new ImageData(e.width,e.height)}catch{t=document.createElement(\"canvas\").getContext(\"2d\").createImageData(e.width,e.height)}return t.data.set(e.data),t},og=()=>{let e={resize:c,filter:p},t=(d,m)=>(d.forEach(u=>{m=e[u.type](m,u.data)}),m),i=(d,m)=>{let u=d.transforms,g=null;if(u.forEach(f=>{f.type===\"filter\"&&(g=f)}),g){let f=null;u.forEach(h=>{h.type===\"resize\"&&(f=h)}),f&&(f.data.matrix=g.data,u=u.filter(h=>h.type!==\"filter\"))}m(t(u,d.imageData))};self.onmessage=d=>{i(d.data.message,m=>{self.postMessage({id:d.data.id,message:m},[m.data.buffer])})};let a=1,n=1,l=1;function o(d,m,u){let g=m[d]/255,f=m[d+1]/255,h=m[d+2]/255,I=m[d+3]/255,b=g*u[0]+f*u[1]+h*u[2]+I*u[3]+u[4],E=g*u[5]+f*u[6]+h*u[7]+I*u[8]+u[9],v=g*u[10]+f*u[11]+h*u[12]+I*u[13]+u[14],y=g*u[15]+f*u[16]+h*u[17]+I*u[18]+u[19],T=Math.max(0,b*y)+a*(1-y),_=Math.max(0,E*y)+n*(1-y),x=Math.max(0,v*y)+l*(1-y);m[d]=Math.max(0,Math.min(1,T))*255,m[d+1]=Math.max(0,Math.min(1,_))*255,m[d+2]=Math.max(0,Math.min(1,x))*255}let r=self.JSON.stringify([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]);function s(d){return self.JSON.stringify(d||[])===r}function p(d,m){if(!m||s(m))return d;let u=d.data,g=u.length,f=m[0],h=m[1],I=m[2],b=m[3],E=m[4],v=m[5],y=m[6],T=m[7],_=m[8],x=m[9],R=m[10],P=m[11],z=m[12],A=m[13],B=m[14],w=m[15],F=m[16],S=m[17],L=m[18],D=m[19],O=0,U=0,C=0,X=0,K=0,Z=0,ce=0,V=0,W=0,$=0,ie=0,ee=0;for(;O<g;O+=4)U=u[O]/255,C=u[O+1]/255,X=u[O+2]/255,K=u[O+3]/255,Z=U*f+C*h+X*I+K*b+E,ce=U*v+C*y+X*T+K*_+x,V=U*R+C*P+X*z+K*A+B,W=U*w+C*F+X*S+K*L+D,$=Math.max(0,Z*W)+a*(1-W),ie=Math.max(0,ce*W)+n*(1-W),ee=Math.max(0,V*W)+l*(1-W),u[O]=Math.max(0,Math.min(1,$))*255,u[O+1]=Math.max(0,Math.min(1,ie))*255,u[O+2]=Math.max(0,Math.min(1,ee))*255;return d}function c(d,m){let{mode:u=\"contain\",upscale:g=!1,width:f,height:h,matrix:I}=m;if(I=!I||s(I)?null:I,!f&&!h)return p(d,I);if(f===null?f=h:h===null&&(h=f),u!==\"force\"){let A=f/d.width,B=h/d.height,w=1;if(u===\"cover\"?w=Math.max(A,B):u===\"contain\"&&(w=Math.min(A,B)),w>1&&g===!1)return p(d,I);f=d.width*w,h=d.height*w}let b=d.width,E=d.height,v=Math.round(f),y=Math.round(h),T=d.data,_=new Uint8ClampedArray(v*y*4),x=b/v,R=E/y,P=Math.ceil(x*.5),z=Math.ceil(R*.5);for(let A=0;A<y;A++)for(let B=0;B<v;B++){let w=(B+A*v)*4,F=0,S=0,L=0,D=0,O=0,U=0,C=0,X=(A+.5)*R;for(let K=Math.floor(A*R);K<(A+1)*R;K++){let Z=Math.abs(X-(K+.5))/z,ce=(B+.5)*x,V=Z*Z;for(let W=Math.floor(B*x);W<(B+1)*x;W++){let $=Math.abs(ce-(W+.5))/P,ie=Math.sqrt(V+$*$);if(ie>=-1&&ie<=1&&(F=2*ie*ie*ie-3*ie*ie+1,F>0)){$=4*(W+K*b);let ee=T[$+3];C+=F*ee,L+=F,ee<255&&(F=F*ee/250),D+=F*T[$],O+=F*T[$+1],U+=F*T[$+2],S+=F}}}_[w]=D/S,_[w+1]=O/S,_[w+2]=U/S,_[w+3]=C/L,I&&o(w,_,I)}return{data:_,width:v,height:y}}},rg=(e,t)=>{if(e.getUint32(t+4,!1)!==1165519206)return;t+=4;let i=e.getUint16(t+=6,!1)===18761;t+=e.getUint32(t+4,i);let a=e.getUint16(t,i);t+=2;for(let n=0;n<a;n++)if(e.getUint16(t+n*12,i)===274)return e.setUint16(t+n*12+8,1,i),!0;return!1},sg=e=>{let t=new DataView(e);if(t.getUint16(0)!==65496)return null;let i=2,a,n,l=!1;for(;i<t.byteLength&&(a=t.getUint16(i,!1),n=t.getUint16(i+2,!1)+2,!(!(a>=65504&&a<=65519||a===65534)||(l||(l=rg(t,i,n)),i+n>t.byteLength)));)i+=n;return e.slice(0,i)},cg=e=>new Promise(t=>{let i=new FileReader;i.onload=()=>t(sg(i.result)||null),i.readAsArrayBuffer(e.slice(0,256*1024))}),dg=()=>window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,pg=(e,t)=>{let i=dg();if(i){let a=new i;return a.append(e),a.getBlob(t)}return new Blob([e],{type:t})},mg=()=>Math.random().toString(36).substr(2,9),ug=e=>{let t=new Blob([\"(\",e.toString(),\")()\"],{type:\"application/javascript\"}),i=URL.createObjectURL(t),a=new Worker(i),n=[];return{transfer:()=>{},post:(l,o,r)=>{let s=mg();n[s]=o,a.onmessage=p=>{let c=n[p.data.id];c&&(c(p.data.message),delete n[p.data.id])},a.postMessage({id:s,message:l},r)},terminate:()=>{a.terminate(),URL.revokeObjectURL(i)}}},gg=e=>new Promise((t,i)=>{let a=new Image;a.onload=()=>{t(a)},a.onerror=n=>{i(n)},a.src=e}),fg=e=>e.reduce((t,i)=>t.then(a=>i().then(Array.prototype.concat.bind(a))),Promise.resolve([])),hg=(e,t)=>new Promise(i=>{let a={width:e.width,height:e.height},n=e.getContext(\"2d\"),l=t.sort(Ro).map(o=>()=>new Promise(r=>{yg[o[0]](n,a,o[1],r)&&r()}));fg(l).then(()=>i(e))}),Mt=(e,t)=>{e.beginPath(),e.lineCap=t[\"stroke-linecap\"],e.lineJoin=t[\"stroke-linejoin\"],e.lineWidth=t[\"stroke-width\"],t[\"stroke-dasharray\"].length&&e.setLineDash(t[\"stroke-dasharray\"].split(\",\")),e.fillStyle=t.fill,e.strokeStyle=t.stroke,e.globalAlpha=t.opacity||1},At=e=>{e.fill(),e.stroke(),e.globalAlpha=1},bg=(e,t,i)=>{let a=Lt(i,t),n=dt(i,t);return Mt(e,n),e.rect(a.x,a.y,a.width,a.height),At(e,n),!0},Eg=(e,t,i)=>{let a=Lt(i,t),n=dt(i,t);Mt(e,n);let l=a.x,o=a.y,r=a.width,s=a.height,p=.5522848,c=r/2*p,d=s/2*p,m=l+r,u=o+s,g=l+r/2,f=o+s/2;return e.moveTo(l,f),e.bezierCurveTo(l,f-d,g-c,o,g,o),e.bezierCurveTo(g+c,o,m,f-d,m,f),e.bezierCurveTo(m,f+d,g+c,u,g,u),e.bezierCurveTo(g-c,u,l,f+d,l,f),At(e,n),!0},Tg=(e,t,i,a)=>{let n=Lt(i,t),l=dt(i,t);Mt(e,l);let o=new Image;new URL(i.src,window.location.href).origin!==window.location.origin&&(o.crossOrigin=\"\"),o.onload=()=>{if(i.fit===\"cover\"){let s=n.width/n.height,p=s>1?o.width:o.height*s,c=s>1?o.width/s:o.height,d=o.width*.5-p*.5,m=o.height*.5-c*.5;e.drawImage(o,d,m,p,c,n.x,n.y,n.width,n.height)}else if(i.fit===\"contain\"){let s=Math.min(n.width/o.width,n.height/o.height),p=s*o.width,c=s*o.height,d=n.x+n.width*.5-p*.5,m=n.y+n.height*.5-c*.5;e.drawImage(o,0,0,o.width,o.height,d,m,p,c)}else e.drawImage(o,0,0,o.width,o.height,n.x,n.y,n.width,n.height);At(e,l),a()},o.src=i.src},Ig=(e,t,i)=>{let a=Lt(i,t),n=dt(i,t);Mt(e,n);let l=me(i.fontSize,t),o=i.fontFamily||\"sans-serif\",r=i.fontWeight||\"normal\",s=i.textAlign||\"left\";return e.font=`${r} ${l}px ${o}`,e.textAlign=s,e.fillText(i.text,a.x,a.y),At(e,n),!0},vg=(e,t,i)=>{let a=dt(i,t);Mt(e,a),e.beginPath();let n=i.points.map(o=>({x:me(o.x,t,1,\"width\"),y:me(o.y,t,1,\"height\")}));e.moveTo(n[0].x,n[0].y);let l=n.length;for(let o=1;o<l;o++)e.lineTo(n[o].x,n[o].y);return At(e,a),!0},xg=(e,t,i)=>{let a=Lt(i,t),n=dt(i,t);Mt(e,n),e.beginPath();let l={x:a.x,y:a.y},o={x:a.x+a.width,y:a.y+a.height};e.moveTo(l.x,l.y),e.lineTo(o.x,o.y);let r=yo({x:o.x-l.x,y:o.y-l.y}),s=.04*Math.min(t.width,t.height);if(i.lineDecoration.indexOf(\"arrow-begin\")!==-1){let p=Ri(r,s),c=Si(l,p),d=qe(l,2,c),m=qe(l,-2,c);e.moveTo(d.x,d.y),e.lineTo(l.x,l.y),e.lineTo(m.x,m.y)}if(i.lineDecoration.indexOf(\"arrow-end\")!==-1){let p=Ri(r,-s),c=Si(o,p),d=qe(o,2,c),m=qe(o,-2,c);e.moveTo(d.x,d.y),e.lineTo(o.x,o.y),e.lineTo(m.x,m.y)}return At(e,n),!0},yg={rect:bg,ellipse:Eg,image:Tg,text:Ig,line:xg,path:vg},Rg=e=>{let t=document.createElement(\"canvas\");return t.width=e.width,t.height=e.height,t.getContext(\"2d\").putImageData(e,0,0),t},Sg=(e,t,i={})=>new Promise((a,n)=>{if(!e||!Pu(e))return n({status:\"not an image file\",file:e});let{stripImageHead:l,beforeCreateBlob:o,afterCreateBlob:r,canvasMemoryLimit:s}=i,{crop:p,size:c,filter:d,markup:m,output:u}=t,g=t.image&&t.image.orientation?Math.max(1,Math.min(8,t.image.orientation)):null,f=u&&u.quality,h=f===null?null:f/100,I=u&&u.type||null,b=u&&u.background||null,E=[];c&&(typeof c.width==\"number\"||typeof c.height==\"number\")&&E.push({type:\"resize\",data:c}),d&&d.length===20&&E.push({type:\"filter\",data:d});let v=_=>{let x=r?r(_):_;Promise.resolve(x).then(a)},y=(_,x)=>{let R=Rg(_),P=m.length?hg(R,m):R;Promise.resolve(P).then(z=>{Gu(z,x,o).then(A=>{if(xo(z),l)return v(A);cg(e).then(B=>{B!==null&&(A=new Blob([B,A.slice(20)],{type:A.type})),v(A)})}).catch(n)})};if(/svg/.test(e.type)&&I===null)return ng(e,p,m,{background:b}).then(_=>{a(pg(_,\"image/svg+xml\"))});let T=URL.createObjectURL(e);gg(T).then(_=>{URL.revokeObjectURL(T);let x=Nu(_,g,p,{canvasMemoryLimit:s,background:b}),R={quality:h,type:I||e.type};if(!E.length)return y(x,R);let P=ug(og);P.post({transforms:E,imageData:x},z=>{y(lg(z),R),P.terminate()},[x.data.buffer])}).catch(n)}),_g=[\"x\",\"y\",\"left\",\"top\",\"right\",\"bottom\",\"width\",\"height\"],wg=e=>typeof e==\"string\"&&/%/.test(e)?parseFloat(e)/100:e,Lg=e=>{let[t,i]=e,a=i.points?{}:_g.reduce((n,l)=>(n[l]=wg(i[l]),n),{});return[t,{zIndex:0,...i,...a}]},Mg=e=>new Promise((t,i)=>{let a=new Image;a.src=URL.createObjectURL(e);let n=()=>{let o=a.naturalWidth,r=a.naturalHeight;o&&r&&(URL.revokeObjectURL(a.src),clearInterval(l),t({width:o,height:r}))};a.onerror=o=>{URL.revokeObjectURL(a.src),clearInterval(l),i(o)};let l=setInterval(n,1);n()});typeof window<\"u\"&&typeof window.document<\"u\"&&(HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,\"toBlob\",{value:function(e,t,i){let a=this;setTimeout(()=>{let n=a.toDataURL(t,i).split(\",\")[1],l=atob(n),o=l.length,r=new Uint8Array(o);for(;o--;)r[o]=l.charCodeAt(o);e(new Blob([r],{type:t||\"image/png\"}))})}}));var wa=typeof window<\"u\"&&typeof window.document<\"u\",Ag=wa&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,So=({addFilter:e,utils:t})=>{let{Type:i,forin:a,getFileFromBlob:n,isFile:l}=t,o=[\"crop\",\"resize\",\"filter\",\"markup\",\"output\"],r=c=>(d,m,u)=>d(m,c?c(u):u),s=c=>c.aspectRatio===null&&c.rotation===0&&c.zoom===1&&c.center&&c.center.x===.5&&c.center.y===.5&&c.flip&&c.flip.horizontal===!1&&c.flip.vertical===!1;e(\"SHOULD_PREPARE_OUTPUT\",(c,{query:d})=>new Promise(m=>{m(!d(\"IS_ASYNC\"))}));let p=(c,d,m)=>new Promise(u=>{if(!c(\"GET_ALLOW_IMAGE_TRANSFORM\")||m.archived||!l(d)||!wu(d))return u(!1);Mg(d).then(()=>{let g=c(\"GET_IMAGE_TRANSFORM_IMAGE_FILTER\");if(g){let f=g(d);if(f==null)return handleRevert(!0);if(typeof f==\"boolean\")return u(f);if(typeof f.then==\"function\")return f.then(u)}u(!0)}).catch(g=>{u(!1)})});return e(\"DID_CREATE_ITEM\",(c,{query:d,dispatch:m})=>{d(\"GET_ALLOW_IMAGE_TRANSFORM\")&&c.extend(\"requestPrepare\",()=>new Promise((u,g)=>{m(\"REQUEST_PREPARE_OUTPUT\",{query:c.id,item:c,success:u,failure:g},!0)}))}),e(\"PREPARE_OUTPUT\",(c,{query:d,item:m})=>new Promise(u=>{p(d,c,m).then(g=>{if(!g)return u(c);let f=[];d(\"GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_ORIGINAL\")&&f.push(()=>new Promise(x=>{x({name:d(\"GET_IMAGE_TRANSFORM_VARIANTS_ORIGINAL_NAME\"),file:c})})),d(\"GET_IMAGE_TRANSFORM_VARIANTS_INCLUDE_DEFAULT\")&&f.push((x,R,P)=>new Promise(z=>{x(R,P).then(A=>z({name:d(\"GET_IMAGE_TRANSFORM_VARIANTS_DEFAULT_NAME\"),file:A}))}));let h=d(\"GET_IMAGE_TRANSFORM_VARIANTS\")||{};a(h,(x,R)=>{let P=r(R);f.push((z,A,B)=>new Promise(w=>{P(z,A,B).then(F=>w({name:x,file:F}))}))});let I=d(\"GET_IMAGE_TRANSFORM_OUTPUT_QUALITY\"),b=d(\"GET_IMAGE_TRANSFORM_OUTPUT_QUALITY_MODE\"),E=I===null?null:I/100,v=d(\"GET_IMAGE_TRANSFORM_OUTPUT_MIME_TYPE\"),y=d(\"GET_IMAGE_TRANSFORM_CLIENT_TRANSFORMS\")||o;m.setMetadata(\"output\",{type:v,quality:E,client:y},!0);let T=(x,R)=>new Promise((P,z)=>{let A={...R};Object.keys(A).filter(C=>C!==\"exif\").forEach(C=>{y.indexOf(C)===-1&&delete A[C]});let{resize:B,exif:w,output:F,crop:S,filter:L,markup:D}=A,O={image:{orientation:w?w.orientation:null},output:F&&(F.type||typeof F.quality==\"number\"||F.background)?{type:F.type,quality:typeof F.quality==\"number\"?F.quality*100:null,background:F.background||d(\"GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR\")||null}:void 0,size:B&&(B.size.width||B.size.height)?{mode:B.mode,upscale:B.upscale,...B.size}:void 0,crop:S&&!s(S)?{...S}:void 0,markup:D&&D.length?D.map(Lg):[],filter:L};if(O.output){let C=F.type?F.type!==x.type:!1,X=/\\/jpe?g$/.test(x.type),K=F.quality!==null?X&&b===\"always\":!1;if(!!!(O.size||O.crop||O.filter||C||K))return P(x)}let U={beforeCreateBlob:d(\"GET_IMAGE_TRANSFORM_BEFORE_CREATE_BLOB\"),afterCreateBlob:d(\"GET_IMAGE_TRANSFORM_AFTER_CREATE_BLOB\"),canvasMemoryLimit:d(\"GET_IMAGE_TRANSFORM_CANVAS_MEMORY_LIMIT\"),stripImageHead:d(\"GET_IMAGE_TRANSFORM_OUTPUT_STRIP_IMAGE_HEAD\")};Sg(x,O,U).then(C=>{let X=n(C,Au(x.name,zu(C.type)));P(X)}).catch(z)}),_=f.map(x=>x(T,c,m.getMetadata()));Promise.all(_).then(x=>{u(x.length===1&&x[0].name===null?x[0].file:x)})})})),{options:{allowImageTransform:[!0,i.BOOLEAN],imageTransformImageFilter:[null,i.FUNCTION],imageTransformOutputMimeType:[null,i.STRING],imageTransformOutputQuality:[null,i.INT],imageTransformOutputStripImageHead:[!0,i.BOOLEAN],imageTransformClientTransforms:[null,i.ARRAY],imageTransformOutputQualityMode:[\"always\",i.STRING],imageTransformVariants:[null,i.OBJECT],imageTransformVariantsIncludeDefault:[!0,i.BOOLEAN],imageTransformVariantsDefaultName:[null,i.STRING],imageTransformVariantsIncludeOriginal:[!1,i.BOOLEAN],imageTransformVariantsOriginalName:[\"original_\",i.STRING],imageTransformBeforeCreateBlob:[null,i.FUNCTION],imageTransformAfterCreateBlob:[null,i.FUNCTION],imageTransformCanvasMemoryLimit:[wa&&Ag?4096*4096:null,i.INT],imageTransformCanvasBackgroundColor:[null,i.STRING]}}};wa&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:So}));var _o=So;var La=e=>/^video/.test(e.type),Kt=e=>/^audio/.test(e.type),Ma=class{constructor(t,i){this.mediaEl=t,this.audioElems=i,this.onplayhead=!1,this.duration=0,this.timelineWidth=this.audioElems.timeline.offsetWidth-this.audioElems.playhead.offsetWidth,this.moveplayheadFn=this.moveplayhead.bind(this),this.registerListeners()}registerListeners(){this.mediaEl.addEventListener(\"timeupdate\",this.timeUpdate.bind(this),!1),this.mediaEl.addEventListener(\"canplaythrough\",()=>this.duration=this.mediaEl.duration,!1),this.audioElems.timeline.addEventListener(\"click\",this.timelineClicked.bind(this),!1),this.audioElems.button.addEventListener(\"click\",this.play.bind(this)),this.audioElems.playhead.addEventListener(\"mousedown\",this.mouseDown.bind(this),!1),window.addEventListener(\"mouseup\",this.mouseUp.bind(this),!1)}play(){this.mediaEl.paused?this.mediaEl.play():this.mediaEl.pause(),this.audioElems.button.classList.toggle(\"play\"),this.audioElems.button.classList.toggle(\"pause\")}timeUpdate(){let t=this.mediaEl.currentTime/this.duration*100;this.audioElems.playhead.style.marginLeft=t+\"%\",this.mediaEl.currentTime===this.duration&&(this.audioElems.button.classList.toggle(\"play\"),this.audioElems.button.classList.toggle(\"pause\"))}moveplayhead(t){let i=t.clientX-this.getPosition(this.audioElems.timeline);i>=0&&i<=this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=i+\"px\"),i<0&&(this.audioElems.playhead.style.marginLeft=\"0px\"),i>this.timelineWidth&&(this.audioElems.playhead.style.marginLeft=this.timelineWidth-4+\"px\")}timelineClicked(t){this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t)}mouseDown(){this.onplayhead=!0,window.addEventListener(\"mousemove\",this.moveplayheadFn,!0),this.mediaEl.removeEventListener(\"timeupdate\",this.timeUpdate.bind(this),!1)}mouseUp(t){window.removeEventListener(\"mousemove\",this.moveplayheadFn,!0),this.onplayhead==!0&&(this.moveplayhead(t),this.mediaEl.currentTime=this.duration*this.clickPercent(t),this.mediaEl.addEventListener(\"timeupdate\",this.timeUpdate.bind(this),!1)),this.onplayhead=!1}clickPercent(t){return(t.clientX-this.getPosition(this.audioElems.timeline))/this.timelineWidth}getPosition(t){return t.getBoundingClientRect().left}},zg=e=>e.utils.createView({name:\"media-preview\",tag:\"div\",ignoreRect:!0,create:({root:t,props:i})=>{let{id:a}=i,n=t.query(\"GET_ITEM\",{id:i.id}),l=Kt(n.file)?\"audio\":\"video\";if(t.ref.media=document.createElement(l),t.ref.media.setAttribute(\"controls\",!0),t.element.appendChild(t.ref.media),Kt(n.file)){let o=document.createDocumentFragment();t.ref.audio=[],t.ref.audio.container=document.createElement(\"div\"),t.ref.audio.button=document.createElement(\"span\"),t.ref.audio.timeline=document.createElement(\"div\"),t.ref.audio.playhead=document.createElement(\"div\"),t.ref.audio.container.className=\"audioplayer\",t.ref.audio.button.className=\"playpausebtn play\",t.ref.audio.timeline.className=\"timeline\",t.ref.audio.playhead.className=\"playhead\",t.ref.audio.timeline.appendChild(t.ref.audio.playhead),t.ref.audio.container.appendChild(t.ref.audio.button),t.ref.audio.container.appendChild(t.ref.audio.timeline),o.appendChild(t.ref.audio.container),t.element.appendChild(o)}},write:e.utils.createRoute({DID_MEDIA_PREVIEW_LOAD:({root:t,props:i})=>{let{id:a}=i,n=t.query(\"GET_ITEM\",{id:i.id});if(!n)return;let l=window.URL||window.webkitURL,o=new Blob([n.file],{type:n.file.type});t.ref.media.type=n.file.type,t.ref.media.src=n.file.mock&&n.file.url||l.createObjectURL(o),Kt(n.file)&&new Ma(t.ref.media,t.ref.audio),t.ref.media.addEventListener(\"loadeddata\",()=>{let r=75;if(La(n.file)){let s=t.ref.media.offsetWidth,p=t.ref.media.videoWidth/s;r=t.ref.media.videoHeight/p}t.dispatch(\"DID_UPDATE_PANEL_HEIGHT\",{id:i.id,height:r})},!1)}})}),Pg=e=>{let t=({root:a,props:n})=>{let{id:l}=n;a.query(\"GET_ITEM\",l)&&a.dispatch(\"DID_MEDIA_PREVIEW_LOAD\",{id:l})},i=({root:a,props:n})=>{let l=zg(e);a.ref.media=a.appendChildView(a.createChildView(l,{id:n.id}))};return e.utils.createView({name:\"media-preview-wrapper\",create:i,write:e.utils.createRoute({DID_MEDIA_PREVIEW_CONTAINER_CREATE:t})})},Aa=e=>{let{addFilter:t,utils:i}=e,{Type:a,createRoute:n}=i,l=Pg(e);return t(\"CREATE_VIEW\",o=>{let{is:r,view:s,query:p}=o;if(!r(\"file\"))return;let c=({root:d,props:m})=>{let{id:u}=m,g=p(\"GET_ITEM\",u),f=p(\"GET_ALLOW_VIDEO_PREVIEW\"),h=p(\"GET_ALLOW_AUDIO_PREVIEW\");!g||g.archived||(!La(g.file)||!f)&&(!Kt(g.file)||!h)||(d.ref.mediaPreview=s.appendChildView(s.createChildView(l,{id:u})),d.dispatch(\"DID_MEDIA_PREVIEW_CONTAINER_CREATE\",{id:u}))};s.registerWriter(n({DID_LOAD_ITEM:c},({root:d,props:m})=>{let{id:u}=m,g=p(\"GET_ITEM\",u),f=d.query(\"GET_ALLOW_VIDEO_PREVIEW\"),h=d.query(\"GET_ALLOW_AUDIO_PREVIEW\");!g||(!La(g.file)||!f)&&(!Kt(g.file)||!h)||d.rect.element.hidden}))}),{options:{allowVideoPreview:[!0,a.BOOLEAN],allowAudioPreview:[!0,a.BOOLEAN]}}},Fg=typeof window<\"u\"&&typeof window.document<\"u\";Fg&&document.dispatchEvent(new CustomEvent(\"FilePond:pluginloaded\",{detail:Aa}));var wo={labelIdle:'\\u134B\\u12ED\\u120E\\u127D \\u1235\\u1260\\u12CD \\u12A5\\u12DA\\u1205 \\u130B\\u122D \\u12ED\\u120D\\u1240\\u1241\\u1275 \\u12C8\\u12ED\\u121D \\u134B\\u12ED\\u1209\\u1295 <span class=\"filepond--label-action\"> \\u12ED\\u121D\\u1228\\u1321 </span>',labelInvalidField:\"\\u1218\\u1235\\u12A9 \\u120D\\u12AD \\u12EB\\u120D\\u1206\\u1291 \\u134B\\u12ED\\u120E\\u127D\\u1295 \\u12ED\\u12DF\\u120D\",labelFileWaitingForSize:\"\\u12E8\\u134B\\u12ED\\u1209\\u1295 \\u1218\\u1320\\u1295 \\u1260\\u1218\\u1320\\u1263\\u1260\\u1245 \\u120B\\u12ED\",labelFileSizeNotAvailable:\"\\u12E8\\u134B\\u12ED\\u1209\\u1295 \\u1218\\u1320\\u1295 \\u120A\\u1308\\u129D \\u12A0\\u120D\\u127B\\u1208\\u121D\",labelFileLoading:\"\\u1260\\u121B\\u1295\\u1260\\u1265 \\u120B\\u12ED\",labelFileLoadError:\"\\u1260\\u121B\\u1295\\u1260\\u1265 \\u120B\\u12ED \\u127D\\u130D\\u122D \\u1270\\u1348\\u1325\\u122F\\u120D\",labelFileProcessing:\"\\u134B\\u12ED\\u1209\\u1295 \\u1260\\u1218\\u132B\\u1295 \\u120B\\u12ED\",labelFileProcessingComplete:\"\\u134B\\u12ED\\u1209\\u1295 \\u1218\\u132B\\u1295 \\u1270\\u1320\\u1293\\u1245\\u124B\\u120D\",labelFileProcessingAborted:\"\\u134B\\u12ED\\u1209\\u1295 \\u1218\\u132B\\u1295 \\u1270\\u124B\\u122D\\u1327\\u120D\",labelFileProcessingError:\"\\u134B\\u12ED\\u1209\\u1295 \\u1260\\u1218\\u132B\\u1295 \\u120B\\u12ED \\u127D\\u130D\\u122D \\u1270\\u1348\\u1325\\u122F\\u120D\",labelFileProcessingRevertError:\"\\u1348\\u12ED\\u1209\\u1295 \\u1260\\u1218\\u1240\\u120D\\u1260\\u1235 \\u120B\\u12ED \\u127D\\u130D\\u122D \\u1270\\u1348\\u1325\\u122F\\u120D\",labelFileRemoveError:\"\\u1260\\u121B\\u1325\\u134B\\u1275 \\u120B\\u12ED \\u127D\\u130D\\u122D \\u1270\\u1348\\u1325\\u122F\\u120D\",labelTapToCancel:\"\\u1208\\u121B\\u124B\\u1228\\u1325 \\u1290\\u12AB \\u12EB\\u12F5\\u122D\\u1309\",labelTapToRetry:\"\\u12F0\\u130D\\u121E \\u1208\\u1218\\u121E\\u12A8\\u122D \\u1290\\u12AB \\u12EB\\u12F5\\u122D\\u1309\",labelTapToUndo:\"\\u12C8\\u12F0\\u1290\\u1260\\u1228\\u1260\\u1275 \\u1208\\u1218\\u1218\\u1208\\u1235 \\u1290\\u12AB \\u12EB\\u12F5\\u122D\\u1309\",labelButtonRemoveItem:\"\\u120B\\u1325\\u134B\",labelButtonAbortItemLoad:\"\\u120B\\u124B\\u122D\\u1325\",labelButtonRetryItemLoad:\"\\u12F0\\u130D\\u121C \\u120D\\u121E\\u12AD\\u122D\",labelButtonAbortItemProcessing:\"\\u12ED\\u1245\\u122D\",labelButtonUndoItemProcessing:\"\\u12C8\\u12F0\\u1290\\u1260\\u1228\\u1260\\u1275 \\u120D\\u1218\\u120D\\u1235\",labelButtonRetryItemProcessing:\"\\u12F0\\u130D\\u121C \\u120D\\u121E\\u12AD\\u122D\",labelButtonProcessItem:\"\\u120D\\u132B\\u1295\",labelMaxFileSizeExceeded:\"\\u134B\\u12ED\\u1209 \\u1270\\u120D\\u124B\\u120D\",labelMaxFileSize:\"\\u12E8\\u134B\\u12ED\\u120D \\u1218\\u1320\\u1295 \\u12A8 {filesize} \\u1218\\u1265\\u1208\\u1325 \\u12A0\\u12ED\\u1348\\u1240\\u12F5\\u121D\",labelMaxTotalFileSizeExceeded:\"\\u12E8\\u121A\\u1348\\u1240\\u12F0\\u12CD\\u1295 \\u1320\\u1245\\u120B\\u120B \\u12E8\\u134B\\u12ED\\u120D \\u1218\\u1320\\u1295 \\u12A0\\u120D\\u1348\\u12CB\\u120D\",labelMaxTotalFileSize:\"\\u1320\\u1245\\u120B\\u120B \\u12E8\\u134B\\u12ED\\u120D \\u1218\\u1320\\u1295 \\u12A8 {filesize} \\u1218\\u1265\\u1208\\u1325 \\u12A0\\u12ED\\u1348\\u1240\\u12F5\\u121D\",labelFileTypeNotAllowed:\"\\u12E8\\u1270\\u1233\\u1233\\u1270 \\u12E8\\u134B\\u12ED\\u120D \\u12A0\\u12ED\\u1290\\u1275 \\u1290\\u12CD\",fileValidateTypeLabelExpectedTypes:\"\\u12E8\\u134B\\u12ED\\u120D \\u12A0\\u12ED\\u1290\\u1271 \\u1218\\u1206\\u1295 \\u12E8\\u121A\\u1308\\u1263\\u12CD {allButLastType} \\u12A5\\u1293 {lastType} \\u1290\\u12CD\",imageValidateSizeLabelFormatError:\"\\u12E8\\u121D\\u1235\\u120D \\u12A0\\u12ED\\u1290\\u1271 \\u1208\\u1218\\u132B\\u1295 \\u12A0\\u12ED\\u1206\\u1295\\u121D\",imageValidateSizeLabelImageSizeTooSmall:\"\\u121D\\u1235\\u1209 \\u1260\\u1323\\u121D \\u12A0\\u1295\\u1237\\u120D\",imageValidateSizeLabelImageSizeTooBig:\"\\u121D\\u1235\\u1209 \\u1260\\u1323\\u121D \\u1270\\u120D\\u124B\\u120D\",imageValidateSizeLabelExpectedMinSize:\"\\u12DD\\u1245\\u1270\\u129B\\u12CD \\u12E8\\u121D\\u1235\\u120D \\u120D\\u12AC\\u1275 {minWidth} \\xD7 {minHeight} \\u1290\\u12CD\",imageValidateSizeLabelExpectedMaxSize:\"\\u12A8\\u134D\\u1270\\u129B\\u12CD \\u12E8\\u121D\\u1235\\u120D \\u120D\\u12AC\\u1275 {maxWidth} \\xD7 {maxHeight} \\u1290\\u12CD\",imageValidateSizeLabelImageResolutionTooLow:\"\\u12E8\\u121D\\u1235\\u1209 \\u1325\\u122B\\u1275 \\u1260\\u1323\\u121D \\u12DD\\u1245\\u1270\\u129B \\u1290\\u12CD\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u12E8\\u121D\\u1235\\u1209 \\u1325\\u122B\\u1275 \\u1260\\u1323\\u121D \\u12A8\\u134D\\u1270\\u129B \\u1290\\u12CD\",imageValidateSizeLabelExpectedMinResolution:\"\\u12DD\\u1245\\u1270\\u129B\\u12CD \\u12E8\\u121D\\u1235\\u120D \\u1325\\u122B\\u1275 {minResolution} \\u1290\\u12CD\",imageValidateSizeLabelExpectedMaxResolution:\"\\u12A8\\u134D\\u1270\\u129B\\u12CD \\u12E8\\u121D\\u1235\\u120D \\u1325\\u122B\\u1275 {maxResolution} \\u1290\\u12CD\"};var Lo={labelIdle:'\\u0627\\u0633\\u062D\\u0628 \\u0648 \\u0627\\u062F\\u0631\\u062C \\u0645\\u0644\\u0641\\u0627\\u062A\\u0643 \\u0623\\u0648 <span class=\"filepond--label-action\"> \\u062A\\u0635\\u0641\\u062D </span>',labelInvalidField:\"\\u0627\\u0644\\u062D\\u0642\\u0644 \\u064A\\u062D\\u062A\\u0648\\u064A \\u0639\\u0644\\u0649 \\u0645\\u0644\\u0641\\u0627\\u062A \\u063A\\u064A\\u0631 \\u0635\\u0627\\u0644\\u062D\\u0629\",labelFileWaitingForSize:\"\\u0628\\u0627\\u0646\\u062A\\u0638\\u0627\\u0631 \\u0627\\u0644\\u062D\\u062C\\u0645\",labelFileSizeNotAvailable:\"\\u0627\\u0644\\u062D\\u062C\\u0645 \\u063A\\u064A\\u0631 \\u0645\\u062A\\u0627\\u062D\",labelFileLoading:\"\\u0628\\u0627\\u0644\\u0625\\u0646\\u062A\\u0638\\u0627\\u0631\",labelFileLoadError:\"\\u062D\\u062F\\u062B \\u062E\\u0637\\u0623 \\u0623\\u062B\\u0646\\u0627\\u0621 \\u0627\\u0644\\u062A\\u062D\\u0645\\u064A\\u0644\",labelFileProcessing:\"\\u064A\\u062A\\u0645 \\u0627\\u0644\\u0631\\u0641\\u0639\",labelFileProcessingComplete:\"\\u062A\\u0645 \\u0627\\u0644\\u0631\\u0641\\u0639\",labelFileProcessingAborted:\"\\u062A\\u0645 \\u0625\\u0644\\u063A\\u0627\\u0621 \\u0627\\u0644\\u0631\\u0641\\u0639\",labelFileProcessingError:\"\\u062D\\u062F\\u062B \\u062E\\u0637\\u0623 \\u0623\\u062B\\u0646\\u0627\\u0621 \\u0627\\u0644\\u0631\\u0641\\u0639\",labelFileProcessingRevertError:\"\\u062D\\u062F\\u062B \\u062E\\u0637\\u0623 \\u0623\\u062B\\u0646\\u0627\\u0621 \\u0627\\u0644\\u062A\\u0631\\u0627\\u062C\\u0639\",labelFileRemoveError:\"\\u062D\\u062F\\u062B \\u062E\\u0637\\u0623 \\u0623\\u062B\\u0646\\u0627\\u0621 \\u0627\\u0644\\u062D\\u0630\\u0641\",labelTapToCancel:\"\\u0627\\u0646\\u0642\\u0631 \\u0644\\u0644\\u0625\\u0644\\u063A\\u0627\\u0621\",labelTapToRetry:\"\\u0627\\u0646\\u0642\\u0631 \\u0644\\u0625\\u0639\\u0627\\u062F\\u0629 \\u0627\\u0644\\u0645\\u062D\\u0627\\u0648\\u0644\\u0629\",labelTapToUndo:\"\\u0627\\u0646\\u0642\\u0631 \\u0644\\u0644\\u062A\\u0631\\u0627\\u062C\\u0639\",labelButtonRemoveItem:\"\\u0645\\u0633\\u062D\",labelButtonAbortItemLoad:\"\\u0625\\u0644\\u063A\\u0627\\u0621\",labelButtonRetryItemLoad:\"\\u0625\\u0639\\u0627\\u062F\\u0629\",labelButtonAbortItemProcessing:\"\\u0625\\u0644\\u063A\\u0627\\u0621\",labelButtonUndoItemProcessing:\"\\u062A\\u0631\\u0627\\u062C\\u0639\",labelButtonRetryItemProcessing:\"\\u0625\\u0639\\u0627\\u062F\\u0629\",labelButtonProcessItem:\"\\u0631\\u0641\\u0639\",labelMaxFileSizeExceeded:\"\\u0627\\u0644\\u0645\\u0644\\u0641 \\u0643\\u0628\\u064A\\u0631 \\u062C\\u062F\\u0627\",labelMaxFileSize:\"\\u062D\\u062C\\u0645 \\u0627\\u0644\\u0645\\u0644\\u0641 \\u0627\\u0644\\u0623\\u0642\\u0635\\u0649: {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u062A\\u0645 \\u062A\\u062C\\u0627\\u0648\\u0632 \\u0627\\u0644\\u062D\\u062F \\u0627\\u0644\\u0623\\u0642\\u0635\\u0649 \\u0644\\u0644\\u062D\\u062C\\u0645 \\u0627\\u0644\\u0625\\u062C\\u0645\\u0627\\u0644\\u064A\",labelMaxTotalFileSize:\"\\u0627\\u0644\\u062D\\u062F \\u0627\\u0644\\u0623\\u0642\\u0635\\u0649 \\u0644\\u062D\\u062C\\u0645 \\u0627\\u0644\\u0645\\u0644\\u0641: {filesize}\",labelFileTypeNotAllowed:\"\\u0645\\u0644\\u0641 \\u0645\\u0646 \\u0646\\u0648\\u0639 \\u063A\\u064A\\u0631 \\u0635\\u0627\\u0644\\u062D\",fileValidateTypeLabelExpectedTypes:\"\\u062A\\u062A\\u0648\\u0642\\u0639 {allButLastType} \\u0645\\u0646 {lastType}\",imageValidateSizeLabelFormatError:\"\\u0646\\u0648\\u0639 \\u0627\\u0644\\u0635\\u0648\\u0631\\u0629 \\u063A\\u064A\\u0631 \\u0645\\u062F\\u0639\\u0648\\u0645\",imageValidateSizeLabelImageSizeTooSmall:\"\\u0627\\u0644\\u0635\\u0648\\u0631\\u0629 \\u0635\\u063A\\u064A\\u0631 \\u062C\\u062F\\u0627\",imageValidateSizeLabelImageSizeTooBig:\"\\u0627\\u0644\\u0635\\u0648\\u0631\\u0629 \\u0643\\u0628\\u064A\\u0631\\u0629 \\u062C\\u062F\\u0627\",imageValidateSizeLabelExpectedMinSize:\"\\u0627\\u0644\\u062D\\u062F \\u0627\\u0644\\u0623\\u062F\\u0646\\u0649 \\u0644\\u0644\\u0623\\u0628\\u0639\\u0627\\u062F \\u0647\\u0648: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u0627\\u0644\\u062D\\u062F \\u0627\\u0644\\u0623\\u0642\\u0635\\u0649 \\u0644\\u0644\\u0623\\u0628\\u0639\\u0627\\u062F \\u0647\\u0648: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0627\\u0644\\u062F\\u0642\\u0629 \\u0636\\u0639\\u064A\\u0641\\u0629 \\u062C\\u062F\\u0627\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0627\\u0644\\u062F\\u0642\\u0629 \\u0645\\u0631\\u062A\\u0641\\u0639\\u0629 \\u062C\\u062F\\u0627\",imageValidateSizeLabelExpectedMinResolution:\"\\u0623\\u0642\\u0644 \\u062F\\u0642\\u0629: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u0623\\u0642\\u0635\\u0649 \\u062F\\u0642\\u0629: {maxResolution}\"};var Mo={labelIdle:'Fayl\\u0131n\\u0131z\\u0131 S\\xFCr\\xFC\\u015Fd\\xFCr\\xFCn & Burax\\u0131n ya da <span class=\"filepond--label-action\"> Se\\xE7in </span>',labelInvalidField:\"Sah\\u0259d\\u0259 etibars\\u0131z fayllar var\",labelFileWaitingForSize:\"\\xD6l\\xE7\\xFC hesablan\\u0131r\",labelFileSizeNotAvailable:\"\\xD6l\\xE7\\xFC m\\xF6vcud deyil\",labelFileLoading:\"Y\\xFCkl\\u0259nir\",labelFileLoadError:\"Y\\xFCkl\\u0259m\\u0259 \\u0259snas\\u0131nda x\\u0259ta ba\\u015F verdi\",labelFileProcessing:\"Y\\xFCkl\\u0259nir\",labelFileProcessingComplete:\"Y\\xFCkl\\u0259m\\u0259 tamamland\\u0131\",labelFileProcessingAborted:\"Y\\xFCkl\\u0259m\\u0259 l\\u0259\\u011Fv edildi\",labelFileProcessingError:\"Y\\xFCk\\u0259y\\u0259rk\\u0259n x\\u0259ta ba\\u015F verdi\",labelFileProcessingRevertError:\"Geri \\xE7\\u0259k\\u0259rk\\u0259n x\\u0259ta ba\\u015F verdi\",labelFileRemoveError:\"\\xC7\\u0131xarark\\u0259n x\\u0259ta ba\\u015F verdi\",labelTapToCancel:\"\\u0130mtina etm\\u0259k \\xFC\\xE7\\xFCn klikl\\u0259yin\",labelTapToRetry:\"T\\u0259krar yoxlamaq \\xFC\\xE7\\xFCn klikl\\u0259yin\",labelTapToUndo:\"Geri almaq \\xFC\\xE7\\xFCn klikl\\u0259yin\",labelButtonRemoveItem:\"\\xC7\\u0131xar\",labelButtonAbortItemLoad:\"\\u0130mtina Et\",labelButtonRetryItemLoad:\"T\\u0259krar yoxla\",labelButtonAbortItemProcessing:\"\\u0130mtina et\",labelButtonUndoItemProcessing:\"Geri Al\",labelButtonRetryItemProcessing:\"T\\u0259krar yoxla\",labelButtonProcessItem:\"Y\\xFCkl\\u0259\",labelMaxFileSizeExceeded:\"Fayl \\xE7ox b\\xF6y\\xFCkd\\xFCr\",labelMaxFileSize:\"\\u018Fn b\\xF6y\\xFCk fayl \\xF6l\\xE7\\xFCs\\xFC: {filesize}\",labelMaxTotalFileSizeExceeded:\"Maksimum \\xF6l\\xE7\\xFC ke\\xE7ildi\",labelMaxTotalFileSize:\"Maksimum fayl \\xF6l\\xE7\\xFCs\\xFC :{filesize}\",labelFileTypeNotAllowed:\"Etibars\\u0131z fayl tipi\",fileValidateTypeLabelExpectedTypes:\"Bu {allButLastType} ya da bu fayl olmas\\u0131 laz\\u0131md\\u0131r: {lastType}\",imageValidateSizeLabelFormatError:\"\\u015E\\u0259kil tipi d\\u0259st\\u0259kl\\u0259nmir\",imageValidateSizeLabelImageSizeTooSmall:\"\\u015E\\u0259kil \\xE7ox ki\\xE7ik\",imageValidateSizeLabelImageSizeTooBig:\"\\u015E\\u0259kil \\xE7ox b\\xF6y\\xFCk\",imageValidateSizeLabelExpectedMinSize:\"Minimum \\xF6l\\xE7\\xFC {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksimum \\xF6l\\xE7\\xFC {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"G\\xF6r\\xFCnt\\xFC imkan\\u0131 \\xE7ox a\\u015Fa\\u011F\\u0131\",imageValidateSizeLabelImageResolutionTooHigh:\"G\\xF6r\\xFCnt\\xFC imkan\\u0131 \\xE7ox y\\xFCks\\u0259k\",imageValidateSizeLabelExpectedMinResolution:\"Minimum g\\xF6r\\xFCnt\\xFC imkan\\u0131 {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maximum g\\xF6r\\xFCnt\\xFC imkan\\u0131 {maxResolution}\"};var Ao={labelIdle:'Arrossega i deixa anar els teus fitxers o <span class=\"filepond--label-action\"> Navega </span>',labelInvalidField:\"El camp cont\\xE9 fitxers inv\\xE0lids\",labelFileWaitingForSize:\"Esperant mida\",labelFileSizeNotAvailable:\"Mida no disponible\",labelFileLoading:\"Carregant\",labelFileLoadError:\"Error durant la c\\xE0rrega\",labelFileProcessing:\"Pujant\",labelFileProcessingComplete:\"Pujada completada\",labelFileProcessingAborted:\"Pujada cancel\\xB7lada\",labelFileProcessingError:\"Error durant la pujada\",labelFileProcessingRevertError:\"Error durant la reversi\\xF3\",labelFileRemoveError:\"Error durant l'eliminaci\\xF3\",labelTapToCancel:\"toca per cancel\\xB7lar\",labelTapToRetry:\"toca per reintentar\",labelTapToUndo:\"toca per desfer\",labelButtonRemoveItem:\"Eliminar\",labelButtonAbortItemLoad:\"Cancel\\xB7lar\",labelButtonRetryItemLoad:\"Reintentar\",labelButtonAbortItemProcessing:\"Cancel\\xB7lar\",labelButtonUndoItemProcessing:\"Desfer\",labelButtonRetryItemProcessing:\"Reintentar\",labelButtonProcessItem:\"Pujar\",labelMaxFileSizeExceeded:\"El fitxer \\xE9s massa gran\",labelMaxFileSize:\"La mida m\\xE0xima del fitxer \\xE9s {filesize}\",labelMaxTotalFileSizeExceeded:\"Mida m\\xE0xima total excedida\",labelMaxTotalFileSize:\"La mida m\\xE0xima total del fitxer \\xE9s {filesize}\",labelFileTypeNotAllowed:\"Fitxer de tipus inv\\xE0lid\",fileValidateTypeLabelExpectedTypes:\"Espera {allButLastType} o {lastType}\",imageValidateSizeLabelFormatError:\"Tipus d'imatge no suportada\",imageValidateSizeLabelImageSizeTooSmall:\"La imatge \\xE9s massa petita\",imageValidateSizeLabelImageSizeTooBig:\"La imatge \\xE9s massa gran\",imageValidateSizeLabelExpectedMinSize:\"La mida m\\xEDnima \\xE9s {minWidth} x {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"La mida m\\xE0xima \\xE9s {maxWidth} x {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"La resoluci\\xF3 \\xE9s massa baixa\",imageValidateSizeLabelImageResolutionTooHigh:\"La resoluci\\xF3 \\xE9s massa alta\",imageValidateSizeLabelExpectedMinResolution:\"La resoluci\\xF3 m\\xEDnima \\xE9s {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"La resoluci\\xF3 m\\xE0xima \\xE9s {maxResolution}\"};var zo={labelIdle:'\\u067E\\u06D5\\u0695\\u06AF\\u06D5\\u06A9\\u0627\\u0646 \\u0641\\u0695\\u06CE \\u0628\\u062F\\u06D5 \\u0626\\u06CE\\u0631\\u06D5 \\u0628\\u06C6 \\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646 \\u06CC\\u0627\\u0646 <span class=\"filepond--label-action\"> \\u0647\\u06D5\\u06B5\\u0628\\u0698\\u06CE\\u0631\\u06D5 </span>',labelInvalidField:\"\\u067E\\u06D5\\u0695\\u06AF\\u06D5\\u06CC \\u0646\\u0627\\u062F\\u0631\\u0648\\u0633\\u062A\\u06CC \\u062A\\u06CE\\u062F\\u0627\\u06CC\\u06D5\",labelFileWaitingForSize:\"\\u0686\\u0627\\u0648\\u06D5\\u0695\\u0648\\u0627\\u0646\\u06CC\\u06CC \\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5\",labelFileSizeNotAvailable:\"\\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5 \\u0628\\u06D5\\u0631\\u062F\\u06D5\\u0633\\u062A \\u0646\\u06CC\\u06D5\",labelFileLoading:\"\\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646\",labelFileLoadError:\"\\u0647\\u06D5\\u06B5\\u06D5 \\u0644\\u06D5\\u0645\\u0627\\u0648\\u06D5\\u06CC \\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646\",labelFileProcessing:\"\\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646\",labelFileProcessingComplete:\"\\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646 \\u062A\\u06D5\\u0648\\u0627\\u0648 \\u0628\\u0648\\u0648\",labelFileProcessingAborted:\"\\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646 \\u0647\\u06D5\\u06B5\\u0648\\u06D5\\u0634\\u0627\\u06CC\\u06D5\\u0648\\u06D5\",labelFileProcessingError:\"\\u0647\\u06D5\\u06B5\\u06D5 \\u0644\\u06D5\\u06A9\\u0627\\u062A\\u06CC \\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646\\u062F\\u0627\",labelFileProcessingRevertError:\"\\u0647\\u06D5\\u06B5\\u06D5 \\u0644\\u06D5 \\u06A9\\u0627\\u062A\\u06CC \\u06AF\\u06D5\\u0695\\u0627\\u0646\\u06D5\\u0648\\u06D5\",labelFileRemoveError:\"\\u0647\\u06D5\\u06B5\\u06D5 \\u0644\\u06D5 \\u06A9\\u0627\\u062A\\u06CC \\u0633\\u0695\\u06CC\\u0646\\u06D5\\u0648\\u06D5\",labelTapToCancel:\"\\u0628\\u06C6 \\u0647\\u06D5\\u06B5\\u0648\\u06D5\\u0634\\u0627\\u0646\\u062F\\u0646\\u06D5\\u0648\\u06D5 Tab \\u062F\\u0627\\u0628\\u06AF\\u0631\\u06D5\",labelTapToRetry:\"tap \\u062F\\u0627\\u0628\\u06AF\\u0631\\u06D5 \\u0628\\u06C6 \\u062F\\u0648\\u0648\\u0628\\u0627\\u0631\\u06D5\\u06A9\\u0631\\u062F\\u0646\\u06D5\\u0648\\u06D5\",labelTapToUndo:\"tap \\u062F\\u0627\\u0628\\u06AF\\u0631\\u06D5 \\u0628\\u06C6 \\u06AF\\u06D5\\u0695\\u0627\\u0646\\u062F\\u0646\\u06D5\\u0648\\u06D5\",labelButtonRemoveItem:\"\\u0633\\u0695\\u06CC\\u0646\\u06D5\\u0648\\u06D5\",labelButtonAbortItemLoad:\"\\u0647\\u06D5\\u06B5\\u0648\\u06D5\\u0634\\u0627\\u0646\\u062F\\u0646\\u06D5\\u0648\\u06D5\",labelButtonRetryItemLoad:\"\\u0647\\u06D5\\u0648\\u06B5\\u062F\\u0627\\u0646\\u06D5\\u0648\\u06D5\",labelButtonAbortItemProcessing:\"\\u067E\\u06D5\\u0634\\u06CC\\u0645\\u0627\\u0646\\u0628\\u0648\\u0648\\u0646\\u06D5\\u0648\\u06D5\",labelButtonUndoItemProcessing:\"\\u06AF\\u06D5\\u0695\\u0627\\u0646\\u062F\\u0646\\u06D5\\u0648\\u06D5\",labelButtonRetryItemProcessing:\"\\u0647\\u06D5\\u0648\\u06B5\\u062F\\u0627\\u0646\\u06D5\\u0648\\u06D5\",labelButtonProcessItem:\"\\u0628\\u0627\\u0631\\u06A9\\u0631\\u062F\\u0646\",labelMaxFileSizeExceeded:\"\\u067E\\u06D5\\u0695\\u06AF\\u06D5 \\u0632\\u06C6\\u0631 \\u06AF\\u06D5\\u0648\\u0631\\u06D5\\u06CC\\u06D5\",labelMaxFileSize:\"\\u0632\\u06C6\\u0631\\u062A\\u0631\\u06CC\\u0646 \\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5 {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u0632\\u06C6\\u0631\\u062A\\u0631\\u06CC\\u0646 \\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5\\u06CC \\u06A9\\u06C6\\u06CC \\u06AF\\u0634\\u062A\\u06CC \\u062A\\u06CE\\u067E\\u06D5\\u0695\\u06CE\\u0646\\u062F\\u0631\\u0627\",labelMaxTotalFileSize:\"\\u0632\\u06C6\\u0631\\u062A\\u0631\\u06CC\\u0646 \\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5\\u06CC \\u06A9\\u06C6\\u06CC \\u067E\\u06D5\\u0695\\u06AF\\u06D5 {filesize}\",labelFileTypeNotAllowed:\"\\u062C\\u06C6\\u0631\\u06CC \\u067E\\u06D5\\u0695\\u06AF\\u06D5\\u06A9\\u06D5 \\u0646\\u0627\\u062F\\u0631\\u0648\\u0633\\u062A\\u06D5\",fileValidateTypeLabelExpectedTypes:\"\\u062C\\u06AF\\u06D5 \\u0644\\u06D5 {allButLastType} \\u06CC\\u0627\\u0646 {lastType}\",imageValidateSizeLabelFormatError:\"\\u062C\\u06C6\\u0631\\u06CC \\u0648\\u06CE\\u0646\\u06D5 \\u067E\\u0627\\u06B5\\u067E\\u0634\\u062A\\u06CC\\u06CC \\u0646\\u06D5\\u06A9\\u0631\\u0627\\u0648\\u06D5\",imageValidateSizeLabelImageSizeTooSmall:\"\\u0648\\u06CE\\u0646\\u06D5\\u06A9\\u06D5 \\u0632\\u06C6\\u0631 \\u0628\\u0686\\u0648\\u0648\\u06A9\\u06D5\",imageValidateSizeLabelImageSizeTooBig:\"\\u0648\\u06CE\\u0646\\u06D5\\u06A9\\u06D5 \\u0632\\u06C6\\u0631 \\u06AF\\u06D5\\u0648\\u0631\\u06D5\\u06CC\\u06D5\",imageValidateSizeLabelExpectedMinSize:\"\\u06A9\\u06D5\\u0645\\u062A\\u0631\\u06CC\\u0646 \\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5 {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u0632\\u06C6\\u0631\\u062A\\u0631\\u06CC\\u0646 \\u0642\\u06D5\\u0628\\u0627\\u0631\\u06D5 {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0648\\u0631\\u062F\\u0628\\u06CC\\u0646\\u06CC\\u06CC\\u06D5\\u06A9\\u06D5\\u06CC \\u0632\\u06C6\\u0631 \\u06A9\\u06D5\\u0645\\u06D5\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0648\\u0631\\u062F\\u0628\\u06CC\\u0646\\u06CC\\u06CC\\u06D5\\u06A9\\u06D5\\u06CC \\u0632\\u06C6\\u0631 \\u0628\\u06D5\\u0631\\u0632\\u06D5\",imageValidateSizeLabelExpectedMinResolution:\"\\u06A9\\u06D5\\u0645\\u062A\\u0631\\u06CC\\u0646 \\u0648\\u0631\\u062F\\u0628\\u06CC\\u0646\\u06CC\\u06CC {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u0632\\u06C6\\u0631\\u062A\\u0631\\u06CC\\u0646 \\u0648\\u0631\\u062F\\u0628\\u06CC\\u0646\\u06CC {maxResolution}\"};var Po={labelIdle:'P\\u0159et\\xE1hn\\u011Bte soubor sem (drag&drop) nebo <span class=\"filepond--label-action\"> Vyhledat </span>',labelInvalidField:\"Pole obsahuje chybn\\xE9 soubory\",labelFileWaitingForSize:\"Zji\\u0161\\u0165uje se velikost\",labelFileSizeNotAvailable:\"Velikost nen\\xED zn\\xE1m\\xE1\",labelFileLoading:\"P\\u0159en\\xE1\\u0161\\xED se\",labelFileLoadError:\"Chyba p\\u0159i p\\u0159enosu\",labelFileProcessing:\"Prob\\xEDh\\xE1 upload\",labelFileProcessingComplete:\"Upload dokon\\u010Den\",labelFileProcessingAborted:\"Upload stornov\\xE1n\",labelFileProcessingError:\"Chyba p\\u0159i uploadu\",labelFileProcessingRevertError:\"Chyba p\\u0159i obnov\\u011B\",labelFileRemoveError:\"Chyba p\\u0159i odstran\\u011Bn\\xED\",labelTapToCancel:\"klepn\\u011Bte pro storno\",labelTapToRetry:\"klepn\\u011Bte pro opakov\\xE1n\\xED\",labelTapToUndo:\"klepn\\u011Bte pro vr\\xE1cen\\xED\",labelButtonRemoveItem:\"Odstranit\",labelButtonAbortItemLoad:\"Storno\",labelButtonRetryItemLoad:\"Opakovat\",labelButtonAbortItemProcessing:\"Zp\\u011Bt\",labelButtonUndoItemProcessing:\"Vr\\xE1tit\",labelButtonRetryItemProcessing:\"Opakovat\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"Soubor je p\\u0159\\xEDli\\u0161 velk\\xFD\",labelMaxFileSize:\"Nejv\\u011Bt\\u0161\\xED velikost souboru je {filesize}\",labelMaxTotalFileSizeExceeded:\"P\\u0159ekro\\u010Dena maxim\\xE1ln\\xED celkov\\xE1 velikost souboru\",labelMaxTotalFileSize:\"Maxim\\xE1ln\\xED celkov\\xE1 velikost souboru je {filesize}\",labelFileTypeNotAllowed:\"Soubor je nespr\\xE1vn\\xE9ho typu\",fileValidateTypeLabelExpectedTypes:\"O\\u010Dek\\xE1v\\xE1 se {allButLastType} nebo {lastType}\",imageValidateSizeLabelFormatError:\"Obr\\xE1zek tohoto typu nen\\xED podporov\\xE1n\",imageValidateSizeLabelImageSizeTooSmall:\"Obr\\xE1zek je p\\u0159\\xEDli\\u0161 mal\\xFD\",imageValidateSizeLabelImageSizeTooBig:\"Obr\\xE1zek je p\\u0159\\xEDli\\u0161 velk\\xFD\",imageValidateSizeLabelExpectedMinSize:\"Minim\\xE1ln\\xED rozm\\u011Br je {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maxim\\xE1ln\\xED rozm\\u011Br je {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Rozli\\u0161en\\xED je p\\u0159\\xEDli\\u0161 mal\\xE9\",imageValidateSizeLabelImageResolutionTooHigh:\"Rozli\\u0161en\\xED je p\\u0159\\xEDli\\u0161 velk\\xE9\",imageValidateSizeLabelExpectedMinResolution:\"Minim\\xE1ln\\xED rozli\\u0161en\\xED je {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maxim\\xE1ln\\xED rozli\\u0161en\\xED je {maxResolution}\"};var Fo={labelIdle:'Tr\\xE6k & slip filer eller <span class = \"filepond - label-action\"> Gennemse </span>',labelInvalidField:\"Felt indeholder ugyldige filer\",labelFileWaitingForSize:\"Venter p\\xE5 st\\xF8rrelse\",labelFileSizeNotAvailable:\"St\\xF8rrelse ikke tilg\\xE6ngelig\",labelFileLoading:\"Loader\",labelFileLoadError:\"Load fejlede\",labelFileProcessing:\"Uploader\",labelFileProcessingComplete:\"Upload f\\xE6rdig\",labelFileProcessingAborted:\"Upload annulleret\",labelFileProcessingError:\"Upload fejlede\",labelFileProcessingRevertError:\"Fortryd fejlede\",labelFileRemoveError:\"Fjern fejlede\",labelTapToCancel:\"tryk for at annullere\",labelTapToRetry:\"tryk for at pr\\xF8ve igen\",labelTapToUndo:\"tryk for at fortryde\",labelButtonRemoveItem:\"Fjern\",labelButtonAbortItemLoad:\"Annuller\",labelButtonRetryItemLoad:\"Fors\\xF8g igen\",labelButtonAbortItemProcessing:\"Annuller\",labelButtonUndoItemProcessing:\"Fortryd\",labelButtonRetryItemProcessing:\"Pr\\xF8v igen\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"Filen er for stor\",labelMaxFileSize:\"Maksimal filst\\xF8rrelse er {filesize}\",labelMaxTotalFileSizeExceeded:\"Maksimal totalst\\xF8rrelse overskredet\",labelMaxTotalFileSize:\"Maksimal total filst\\xF8rrelse er {filesize}\",labelFileTypeNotAllowed:\"Ugyldig filtype\",fileValidateTypeLabelExpectedTypes:\"Forventer {allButLastType} eller {lastType}\",imageValidateSizeLabelFormatError:\"Ugyldigt format\",imageValidateSizeLabelImageSizeTooSmall:\"Billedet er for lille\",imageValidateSizeLabelImageSizeTooBig:\"Billedet er for stort\",imageValidateSizeLabelExpectedMinSize:\"Minimum st\\xF8rrelse er {minBredde} \\xD7 {minH\\xF8jde}\",imageValidateSizeLabelExpectedMaxSize:\"Maksimal st\\xF8rrelse er {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"For lav opl\\xF8sning\",imageValidateSizeLabelImageResolutionTooHigh:\"For h\\xF8j opl\\xF8sning\",imageValidateSizeLabelExpectedMinResolution:\"Minimum opl\\xF8sning er {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksimal opl\\xF8sning er {maxResolution}\"};var Oo={labelIdle:'Dateien ablegen oder <span class=\"filepond--label-action\"> ausw\\xE4hlen </span>',labelInvalidField:\"Feld beinhaltet ung\\xFCltige Dateien\",labelFileWaitingForSize:\"Dateigr\\xF6\\xDFe berechnen\",labelFileSizeNotAvailable:\"Dateigr\\xF6\\xDFe nicht verf\\xFCgbar\",labelFileLoading:\"Laden\",labelFileLoadError:\"Fehler beim Laden\",labelFileProcessing:\"Upload l\\xE4uft\",labelFileProcessingComplete:\"Upload abgeschlossen\",labelFileProcessingAborted:\"Upload abgebrochen\",labelFileProcessingError:\"Fehler beim Upload\",labelFileProcessingRevertError:\"Fehler beim Wiederherstellen\",labelFileRemoveError:\"Fehler beim L\\xF6schen\",labelTapToCancel:\"abbrechen\",labelTapToRetry:\"erneut versuchen\",labelTapToUndo:\"r\\xFCckg\\xE4ngig\",labelButtonRemoveItem:\"Entfernen\",labelButtonAbortItemLoad:\"Verwerfen\",labelButtonRetryItemLoad:\"Erneut versuchen\",labelButtonAbortItemProcessing:\"Abbrechen\",labelButtonUndoItemProcessing:\"R\\xFCckg\\xE4ngig\",labelButtonRetryItemProcessing:\"Erneut versuchen\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"Datei ist zu gro\\xDF\",labelMaxFileSize:\"Maximale Dateigr\\xF6\\xDFe: {filesize}\",labelMaxTotalFileSizeExceeded:\"Maximale gesamte Dateigr\\xF6\\xDFe \\xFCberschritten\",labelMaxTotalFileSize:\"Maximale gesamte Dateigr\\xF6\\xDFe: {filesize}\",labelFileTypeNotAllowed:\"Dateityp ung\\xFCltig\",fileValidateTypeLabelExpectedTypes:\"Erwartet {allButLastType} oder {lastType}\",imageValidateSizeLabelFormatError:\"Bildtyp nicht unterst\\xFCtzt\",imageValidateSizeLabelImageSizeTooSmall:\"Bild ist zu klein\",imageValidateSizeLabelImageSizeTooBig:\"Bild ist zu gro\\xDF\",imageValidateSizeLabelExpectedMinSize:\"Mindestgr\\xF6\\xDFe: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maximale Gr\\xF6\\xDFe: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Aufl\\xF6sung ist zu niedrig\",imageValidateSizeLabelImageResolutionTooHigh:\"Aufl\\xF6sung ist zu hoch\",imageValidateSizeLabelExpectedMinResolution:\"Mindestaufl\\xF6sung: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maximale Aufl\\xF6sung: {maxResolution}\"};var Do={labelIdle:'\\u03A3\\u03CD\\u03C1\\u03B5\\u03C4\\u03B5 \\u03C4\\u03B1 \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03B1 \\u03C3\\u03B1\\u03C2 \\u03C3\\u03C4\\u03BF \\u03C0\\u03BB\\u03B1\\u03AF\\u03C3\\u03B9\\u03BF \\u03AE <span class=\"filepond--label-action\"> \\u0395\\u03C0\\u03B9\\u03BB\\u03AD\\u03BE\\u03C4\\u03B5 </span>',labelInvalidField:\"\\u03A4\\u03BF \\u03C0\\u03B5\\u03B4\\u03AF\\u03BF \\u03C0\\u03B5\\u03C1\\u03B9\\u03AD\\u03C7\\u03B5\\u03B9 \\u03BC\\u03B7 \\u03AD\\u03B3\\u03BA\\u03C5\\u03C1\\u03B1 \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03B1\",labelFileWaitingForSize:\"\\u03A3\\u03B5 \\u03B1\\u03BD\\u03B1\\u03BC\\u03BF\\u03BD\\u03AE \\u03B3\\u03B9\\u03B1 \\u03C4\\u03BF \\u03BC\\u03AD\\u03B3\\u03B5\\u03B8\\u03BF\\u03C2\",labelFileSizeNotAvailable:\"\\u039C\\u03AD\\u03B3\\u03B5\\u03B8\\u03BF\\u03C2 \\u03BC\\u03B7 \\u03B4\\u03B9\\u03B1\\u03B8\\u03AD\\u03C3\\u03B9\\u03BC\\u03BF\",labelFileLoading:\"\\u03A6\\u03CC\\u03C1\\u03C4\\u03C9\\u03C3\\u03B7 \\u03C3\\u03B5 \\u03B5\\u03BE\\u03AD\\u03BB\\u03B9\\u03BE\\u03B7\",labelFileLoadError:\"\\u03A3\\u03C6\\u03AC\\u03BB\\u03BC\\u03B1 \\u03BA\\u03B1\\u03C4\\u03AC \\u03C4\\u03B7 \\u03C6\\u03CC\\u03C1\\u03C4\\u03C9\\u03C3\\u03B7\",labelFileProcessing:\"\\u0395\\u03C0\\u03B5\\u03BE\\u03B5\\u03C1\\u03B3\\u03B1\\u03C3\\u03AF\\u03B1\",labelFileProcessingComplete:\"\\u0397 \\u03B5\\u03C0\\u03B5\\u03BE\\u03B5\\u03C1\\u03B3\\u03B1\\u03C3\\u03AF\\u03B1 \\u03BF\\u03BB\\u03BF\\u03BA\\u03BB\\u03B7\\u03C1\\u03CE\\u03B8\\u03B7\\u03BA\\u03B5\",labelFileProcessingAborted:\"\\u0397 \\u03B5\\u03C0\\u03B5\\u03BE\\u03B5\\u03C1\\u03B3\\u03B1\\u03C3\\u03AF\\u03B1 \\u03B1\\u03BA\\u03C5\\u03C1\\u03CE\\u03B8\\u03B7\\u03BA\\u03B5\",labelFileProcessingError:\"\\u03A3\\u03C6\\u03AC\\u03BB\\u03BC\\u03B1 \\u03BA\\u03B1\\u03C4\\u03AC \\u03C4\\u03B7\\u03BD \\u03B5\\u03C0\\u03B5\\u03BE\\u03B5\\u03C1\\u03B3\\u03B1\\u03C3\\u03AF\\u03B1\",labelFileProcessingRevertError:\"\\u03A3\\u03C6\\u03AC\\u03BB\\u03BC\\u03B1 \\u03BA\\u03B1\\u03C4\\u03AC \\u03C4\\u03B7\\u03BD \\u03B5\\u03C0\\u03B1\\u03BD\\u03B1\\u03C6\\u03BF\\u03C1\\u03AC\",labelFileRemoveError:\"\\u03A3\\u03C6\\u03AC\\u03BB\\u03BC\\u03B1 \\u03BA\\u03B1\\u03C4\\u03AC \\u03C4\\u03B7\\u03BD \\u03B4\\u03B9\\u03B1\\u03B3\\u03C1\\u03B1\\u03C6\\u03AE\",labelTapToCancel:\"\\u03C0\\u03B1\\u03C4\\u03AE\\u03C3\\u03C4\\u03B5 \\u03B3\\u03B9\\u03B1 \\u03B1\\u03BA\\u03CD\\u03C1\\u03C9\\u03C3\\u03B7\",labelTapToRetry:\"\\u03C0\\u03B1\\u03C4\\u03AE\\u03C3\\u03C4\\u03B5 \\u03B3\\u03B9\\u03B1 \\u03B5\\u03C0\\u03B1\\u03BD\\u03AC\\u03BB\\u03B7\\u03C8\\u03B7\",labelTapToUndo:\"\\u03C0\\u03B1\\u03C4\\u03AE\\u03C3\\u03C4\\u03B5 \\u03B3\\u03B9\\u03B1 \\u03B1\\u03BD\\u03B1\\u03AF\\u03C1\\u03B5\\u03C3\\u03B7\",labelButtonRemoveItem:\"\\u0391\\u03C6\\u03B1\\u03AF\\u03C1\\u03B5\\u03C3\\u03B7\",labelButtonAbortItemLoad:\"\\u0391\\u03BA\\u03CD\\u03C1\\u03C9\\u03C3\\u03B7\",labelButtonRetryItemLoad:\"\\u0395\\u03C0\\u03B1\\u03BD\\u03AC\\u03BB\\u03B7\\u03C8\\u03B7\",labelButtonAbortItemProcessing:\"\\u0391\\u03BA\\u03CD\\u03C1\\u03C9\\u03C3\\u03B7\",labelButtonUndoItemProcessing:\"\\u0391\\u03BD\\u03B1\\u03AF\\u03C1\\u03B5\\u03C3\\u03B7\",labelButtonRetryItemProcessing:\"\\u0395\\u03C0\\u03B1\\u03BD\\u03AC\\u03BB\\u03B7\\u03C8\\u03B7\",labelButtonProcessItem:\"\\u039C\\u03B5\\u03C4\\u03B1\\u03C6\\u03CC\\u03C1\\u03C4\\u03C9\\u03C3\\u03B7\",labelMaxFileSizeExceeded:\"\\u03A4\\u03BF \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03BF \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 \\u03C0\\u03BF\\u03BB\\u03CD \\u03BC\\u03B5\\u03B3\\u03AC\\u03BB\\u03BF\",labelMaxFileSize:\"\\u03A4\\u03BF \\u03BC\\u03AD\\u03B3\\u03B9\\u03C3\\u03C4\\u03BF \\u03BC\\u03AD\\u03B3\\u03B5\\u03B8\\u03BF\\u03C2 \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03BF\\u03C5 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u03A5\\u03C0\\u03AD\\u03C1\\u03B2\\u03B1\\u03C3\\u03B7 \\u03C4\\u03BF\\u03C5 \\u03BC\\u03AD\\u03B3\\u03B9\\u03C3\\u03C4\\u03BF\\u03C5 \\u03C3\\u03C5\\u03BD\\u03BF\\u03BB\\u03B9\\u03BA\\u03BF\\u03CD \\u03BC\\u03B5\\u03B3\\u03AD\\u03B8\\u03BF\\u03C5\\u03C2\",labelMaxTotalFileSize:\"\\u03A4\\u03BF \\u03BC\\u03AD\\u03B3\\u03B9\\u03C3\\u03C4\\u03BF \\u03C3\\u03C5\\u03BD\\u03BF\\u03BB\\u03B9\\u03BA\\u03CC \\u03BC\\u03AD\\u03B3\\u03B5\\u03B8\\u03BF\\u03C2 \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03C9\\u03BD \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {filesize}\",labelFileTypeNotAllowed:\"\\u039C\\u03B7 \\u03AD\\u03B3\\u03BA\\u03C5\\u03C1\\u03BF\\u03C2 \\u03C4\\u03CD\\u03C0\\u03BF\\u03C2 \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03BF\\u03C5\",fileValidateTypeLabelExpectedTypes:\"\\u03A4\\u03B1 \\u03B1\\u03C0\\u03BF\\u03B4\\u03B5\\u03BA\\u03C4\\u03AC \\u03B1\\u03C1\\u03C7\\u03B5\\u03AF\\u03B1 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {allButLastType} \\u03AE {lastType}\",imageValidateSizeLabelFormatError:\"\\u039F \\u03C4\\u03CD\\u03C0\\u03BF\\u03C2 \\u03C4\\u03B7\\u03C2 \\u03B5\\u03B9\\u03BA\\u03CC\\u03BD\\u03B1\\u03C2 \\u03B4\\u03B5\\u03BD \\u03C5\\u03C0\\u03BF\\u03C3\\u03C4\\u03B7\\u03C1\\u03AF\\u03B6\\u03B5\\u03C4\\u03B1\\u03B9\",imageValidateSizeLabelImageSizeTooSmall:\"\\u0397 \\u03B5\\u03B9\\u03BA\\u03CC\\u03BD\\u03B1 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 \\u03C0\\u03BF\\u03BB\\u03CD \\u03BC\\u03B9\\u03BA\\u03C1\\u03AE\",imageValidateSizeLabelImageSizeTooBig:\"\\u0397 \\u03B5\\u03B9\\u03BA\\u03CC\\u03BD\\u03B1 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 \\u03C0\\u03BF\\u03BB\\u03CD \\u03BC\\u03B5\\u03B3\\u03AC\\u03BB\\u03B7\",imageValidateSizeLabelExpectedMinSize:\"\\u03A4\\u03BF \\u03B5\\u03BB\\u03AC\\u03C7\\u03B9\\u03C3\\u03C4\\u03BF \\u03B1\\u03C0\\u03BF\\u03B4\\u03B5\\u03BA\\u03C4\\u03CC \\u03BC\\u03AD\\u03B3\\u03B5\\u03B8\\u03BF\\u03C2 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u03A4\\u03BF \\u03BC\\u03AD\\u03B3\\u03B9\\u03C3\\u03C4\\u03BF \\u03B1\\u03C0\\u03BF\\u03B4\\u03B5\\u03BA\\u03C4\\u03CC \\u03BC\\u03AD\\u03B3\\u03B5\\u03B8\\u03BF\\u03C2 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0397 \\u03B1\\u03BD\\u03AC\\u03BB\\u03C5\\u03C3\\u03B7 \\u03C4\\u03B7\\u03C2 \\u03B5\\u03B9\\u03BA\\u03CC\\u03BD\\u03B1\\u03C2 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 \\u03C0\\u03BF\\u03BB\\u03CD \\u03C7\\u03B1\\u03BC\\u03B7\\u03BB\\u03AE\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0397 \\u03B1\\u03BD\\u03AC\\u03BB\\u03C5\\u03C3\\u03B7 \\u03C4\\u03B7\\u03C2 \\u03B5\\u03B9\\u03BA\\u03CC\\u03BD\\u03B1\\u03C2 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 \\u03C0\\u03BF\\u03BB\\u03CD \\u03C5\\u03C8\\u03B7\\u03BB\\u03AE\",imageValidateSizeLabelExpectedMinResolution:\"\\u0397 \\u03B5\\u03BB\\u03AC\\u03C7\\u03B9\\u03C3\\u03C4\\u03B7 \\u03B1\\u03C0\\u03BF\\u03B4\\u03B5\\u03BA\\u03C4\\u03AE \\u03B1\\u03BD\\u03AC\\u03BB\\u03C5\\u03C3\\u03B7 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u0397 \\u03BC\\u03AD\\u03B3\\u03B9\\u03C3\\u03C4\\u03B7 \\u03B1\\u03C0\\u03BF\\u03B4\\u03B5\\u03BA\\u03C4\\u03AE \\u03B1\\u03BD\\u03AC\\u03BB\\u03C5\\u03C3\\u03B7 \\u03B5\\u03AF\\u03BD\\u03B1\\u03B9 {maxResolution}\"};var Co={labelIdle:'Drag & Drop your files or <span class=\"filepond--label-action\"> Browse </span>',labelInvalidField:\"Field contains invalid files\",labelFileWaitingForSize:\"Waiting for size\",labelFileSizeNotAvailable:\"Size not available\",labelFileLoading:\"Loading\",labelFileLoadError:\"Error during load\",labelFileProcessing:\"Uploading\",labelFileProcessingComplete:\"Upload complete\",labelFileProcessingAborted:\"Upload cancelled\",labelFileProcessingError:\"Error during upload\",labelFileProcessingRevertError:\"Error during revert\",labelFileRemoveError:\"Error during remove\",labelTapToCancel:\"tap to cancel\",labelTapToRetry:\"tap to retry\",labelTapToUndo:\"tap to undo\",labelButtonRemoveItem:\"Remove\",labelButtonAbortItemLoad:\"Abort\",labelButtonRetryItemLoad:\"Retry\",labelButtonAbortItemProcessing:\"Cancel\",labelButtonUndoItemProcessing:\"Undo\",labelButtonRetryItemProcessing:\"Retry\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"File is too large\",labelMaxFileSize:\"Maximum file size is {filesize}\",labelMaxTotalFileSizeExceeded:\"Maximum total size exceeded\",labelMaxTotalFileSize:\"Maximum total file size is {filesize}\",labelFileTypeNotAllowed:\"File of invalid type\",fileValidateTypeLabelExpectedTypes:\"Expects {allButLastType} or {lastType}\",imageValidateSizeLabelFormatError:\"Image type not supported\",imageValidateSizeLabelImageSizeTooSmall:\"Image is too small\",imageValidateSizeLabelImageSizeTooBig:\"Image is too big\",imageValidateSizeLabelExpectedMinSize:\"Minimum size is {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maximum size is {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Resolution is too low\",imageValidateSizeLabelImageResolutionTooHigh:\"Resolution is too high\",imageValidateSizeLabelExpectedMinResolution:\"Minimum resolution is {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maximum resolution is {maxResolution}\"};var Bo={labelIdle:'Arrastra y suelta tus archivos o <span class = \"filepond--label-action\"> Examina <span>',labelInvalidField:\"El campo contiene archivos inv\\xE1lidos\",labelFileWaitingForSize:\"Esperando tama\\xF1o\",labelFileSizeNotAvailable:\"Tama\\xF1o no disponible\",labelFileLoading:\"Cargando\",labelFileLoadError:\"Error durante la carga\",labelFileProcessing:\"Subiendo\",labelFileProcessingComplete:\"Subida completa\",labelFileProcessingAborted:\"Subida cancelada\",labelFileProcessingError:\"Error durante la subida\",labelFileProcessingRevertError:\"Error durante la reversi\\xF3n\",labelFileRemoveError:\"Error durante la eliminaci\\xF3n\",labelTapToCancel:\"toca para cancelar\",labelTapToRetry:\"tocar para reintentar\",labelTapToUndo:\"tocar para deshacer\",labelButtonRemoveItem:\"Eliminar\",labelButtonAbortItemLoad:\"Cancelar\",labelButtonRetryItemLoad:\"Reintentar\",labelButtonAbortItemProcessing:\"Cancelar\",labelButtonUndoItemProcessing:\"Deshacer\",labelButtonRetryItemProcessing:\"Reintentar\",labelButtonProcessItem:\"Subir\",labelMaxFileSizeExceeded:\"El archivo es demasiado grande\",labelMaxFileSize:\"El tama\\xF1o m\\xE1ximo del archivo es {filesize}\",labelMaxTotalFileSizeExceeded:\"Tama\\xF1o total m\\xE1ximo excedido\",labelMaxTotalFileSize:\"El tama\\xF1o total m\\xE1ximo del archivo es {filesize}\",labelFileTypeNotAllowed:\"Archivo de tipo inv\\xE1lido\",fileValidateTypeLabelExpectedTypes:\"Espera {allButLastType} o {lastType}\",imageValidateSizeLabelFormatError:\"Tipo de imagen no soportada\",imageValidateSizeLabelImageSizeTooSmall:\"La imagen es demasiado peque\\xF1a\",imageValidateSizeLabelImageSizeTooBig:\"La imagen es demasiado grande\",imageValidateSizeLabelExpectedMinSize:\"El tama\\xF1o m\\xEDnimo es {minWidth} x {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"El tama\\xF1o m\\xE1ximo es {maxWidth} x {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"La resoluci\\xF3n es demasiado baja\",imageValidateSizeLabelImageResolutionTooHigh:\"La resoluci\\xF3n es demasiado alta\",imageValidateSizeLabelExpectedMinResolution:\"La resoluci\\xF3n m\\xEDnima es {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"La resoluci\\xF3n m\\xE1xima es {maxResolution}\"};var ko={labelIdle:'\\u0641\\u0627\\u06CC\\u0644 \\u0631\\u0627 \\u0627\\u06CC\\u0646\\u062C\\u0627 \\u0628\\u06A9\\u0634\\u06CC\\u062F \\u0648 \\u0631\\u0647\\u0627 \\u06A9\\u0646\\u06CC\\u062F\\u060C \\u06CC\\u0627 <span class=\"filepond--label-action\"> \\u062C\\u0633\\u062A\\u062C\\u0648 \\u06A9\\u0646\\u06CC\\u062F </span>',labelInvalidField:\"\\u0641\\u06CC\\u0644\\u062F \\u062F\\u0627\\u0631\\u0627\\u06CC \\u0641\\u0627\\u06CC\\u0644 \\u0647\\u0627\\u06CC \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631 \\u0627\\u0633\\u062A\",labelFileWaitingForSize:\"Waiting for size\",labelFileSizeNotAvailable:\"\\u062D\\u062C\\u0645 \\u0641\\u0627\\u06CC\\u0644 \\u0645\\u062C\\u0627\\u0632 \\u0646\\u06CC\\u0633\\u062A\",labelFileLoading:\"\\u062F\\u0631\\u062D\\u0627\\u0644 \\u0628\\u0627\\u0631\\u06AF\\u0630\\u0627\\u0631\\u06CC\",labelFileLoadError:\"\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0632\\u0645\\u0627\\u0646 \\u0627\\u062C\\u0631\\u0627\",labelFileProcessing:\"\\u062F\\u0631\\u062D\\u0627\\u0644 \\u0628\\u0627\\u0631\\u06AF\\u0630\\u0627\\u0631\\u06CC\",labelFileProcessingComplete:\"\\u0628\\u0627\\u0631\\u06AF\\u0630\\u0627\\u0631\\u06CC \\u06A9\\u0627\\u0645\\u0644 \\u0634\\u062F\",labelFileProcessingAborted:\"\\u0628\\u0627\\u0631\\u06AF\\u0630\\u0627\\u0631\\u06CC \\u0644\\u063A\\u0648 \\u0634\\u062F\",labelFileProcessingError:\"\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0632\\u0645\\u0627\\u0646 \\u0628\\u0627\\u0631\\u06AF\\u0630\\u0627\\u0631\\u06CC\",labelFileProcessingRevertError:\"\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0632\\u0645\\u0627\\u0646 \\u062D\\u0630\\u0641\",labelFileRemoveError:\"\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0632\\u0645\\u0627\\u0646 \\u062D\\u0630\\u0641\",labelTapToCancel:\"\\u0628\\u0631\\u0627\\u06CC \\u0644\\u063A\\u0648 \\u0636\\u0631\\u0628\\u0647 \\u0628\\u0632\\u0646\\u06CC\\u062F\",labelTapToRetry:\"\\u0628\\u0631\\u0627\\u06CC \\u062A\\u06A9\\u0631\\u0627\\u0631 \\u06A9\\u0644\\u06CC\\u06A9 \\u06A9\\u0646\\u06CC\\u062F\",labelTapToUndo:\"\\u0628\\u0631\\u0627\\u06CC \\u0628\\u0631\\u06AF\\u0634\\u062A \\u06A9\\u0644\\u06CC\\u06A9 \\u06A9\\u0646\\u06CC\\u062F\",labelButtonRemoveItem:\"\\u062D\\u0630\\u0641\",labelButtonAbortItemLoad:\"\\u0644\\u063A\\u0648\",labelButtonRetryItemLoad:\"\\u062A\\u06A9\\u0631\\u0627\\u0631\",labelButtonAbortItemProcessing:\"\\u0644\\u063A\\u0648\",labelButtonUndoItemProcessing:\"\\u0628\\u0631\\u06AF\\u0634\\u062A\",labelButtonRetryItemProcessing:\"\\u062A\\u06A9\\u0631\\u0627\\u0631\",labelButtonProcessItem:\"\\u0628\\u0627\\u0631\\u06AF\\u0630\\u0627\\u0631\\u06CC\",labelMaxFileSizeExceeded:\"\\u0641\\u0627\\u06CC\\u0644 \\u0628\\u0633\\u06CC\\u0627\\u0631 \\u062D\\u062C\\u06CC\\u0645 \\u0627\\u0633\\u062A\",labelMaxFileSize:\"\\u062D\\u062F\\u0627\\u06A9\\u062B\\u0631 \\u0645\\u062C\\u0627\\u0632 \\u0641\\u0627\\u06CC\\u0644 {filesize} \\u0627\\u0633\\u062A\",labelMaxTotalFileSizeExceeded:\"\\u0627\\u0632 \\u062D\\u062F\\u0627\\u06A9\\u062B\\u0631 \\u062D\\u062C\\u0645 \\u0641\\u0627\\u06CC\\u0644 \\u0628\\u06CC\\u0634\\u062A\\u0631 \\u0634\\u062F\",labelMaxTotalFileSize:\"\\u062D\\u062F\\u0627\\u06A9\\u062B\\u0631 \\u062D\\u062C\\u0645 \\u0641\\u0627\\u06CC\\u0644 {filesize} \\u0627\\u0633\\u062A\",labelFileTypeNotAllowed:\"\\u0646\\u0648\\u0639 \\u0641\\u0627\\u06CC\\u0644 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631 \\u0627\\u0633\\u062A\",fileValidateTypeLabelExpectedTypes:\"\\u062F\\u0631 \\u0627\\u0646\\u062A\\u0638\\u0627\\u0631 {allButLastType} \\u06CC\\u0627 {lastType}\",imageValidateSizeLabelFormatError:\"\\u0641\\u0631\\u0645\\u062A \\u062A\\u0635\\u0648\\u06CC\\u0631 \\u067E\\u0634\\u062A\\u06CC\\u0628\\u0627\\u0646\\u06CC \\u0646\\u0645\\u06CC \\u0634\\u0648\\u062F\",imageValidateSizeLabelImageSizeTooSmall:\"\\u062A\\u0635\\u0648\\u06CC\\u0631 \\u0628\\u0633\\u06CC\\u0627\\u0631 \\u06A9\\u0648\\u0686\\u06A9 \\u0627\\u0633\\u062A\",imageValidateSizeLabelImageSizeTooBig:\"\\u062A\\u0635\\u0648\\u06CC\\u0631 \\u0628\\u0633\\u06CC\\u0627\\u0631 \\u0628\\u0632\\u0631\\u06AF \\u0627\\u0633\\u062A\",imageValidateSizeLabelExpectedMinSize:\"\\u062D\\u062F\\u0627\\u0642\\u0644 \\u0627\\u0646\\u062F\\u0627\\u0632\\u0647 {minWidth} \\xD7 {minHeight} \\u0627\\u0633\\u062A\",imageValidateSizeLabelExpectedMaxSize:\"\\u062D\\u062F\\u0627\\u06A9\\u062B\\u0631 \\u0627\\u0646\\u062F\\u0627\\u0632\\u0647 {maxWidth} \\xD7 {maxHeight} \\u0627\\u0633\\u062A\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0648\\u0636\\u0648\\u062D \\u062A\\u0635\\u0648\\u06CC\\u0631 \\u0628\\u0633\\u06CC\\u0627\\u0631 \\u06A9\\u0645 \\u0627\\u0633\\u062A\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0648\\u0636\\u0648\\u0639 \\u062A\\u0635\\u0648\\u06CC\\u0631 \\u0628\\u0633\\u06CC\\u0627\\u0631 \\u0632\\u06CC\\u0627\\u062F \\u0627\\u0633\\u062A\",imageValidateSizeLabelExpectedMinResolution:\"\\u062D\\u062F\\u0627\\u0642\\u0644 \\u0648\\u0636\\u0648\\u062D \\u062A\\u0635\\u0648\\u06CC\\u0631 {minResolution} \\u0627\\u0633\\u062A\",imageValidateSizeLabelExpectedMaxResolution:\"\\u062D\\u062F\\u0627\\u06A9\\u062B\\u0631 \\u0648\\u0636\\u0648\\u062D \\u062A\\u0635\\u0648\\u06CC\\u0631 {maxResolution} \\u0627\\u0633\\u062A\"};var No={labelIdle:'Ved\\xE4 ja pudota tiedostoja tai <span class=\"filepond--label-action\"> Selaa </span>',labelInvalidField:\"Kent\\xE4ss\\xE4 on virheellisi\\xE4 tiedostoja\",labelFileWaitingForSize:\"Odotetaan kokoa\",labelFileSizeNotAvailable:\"Kokoa ei saatavilla\",labelFileLoading:\"Ladataan\",labelFileLoadError:\"Virhe latauksessa\",labelFileProcessing:\"L\\xE4hetet\\xE4\\xE4n\",labelFileProcessingComplete:\"L\\xE4hetys valmis\",labelFileProcessingAborted:\"L\\xE4hetys peruttu\",labelFileProcessingError:\"Virhe l\\xE4hetyksess\\xE4\",labelFileProcessingRevertError:\"Virhe palautuksessa\",labelFileRemoveError:\"Virhe poistamisessa\",labelTapToCancel:\"peruuta napauttamalla\",labelTapToRetry:\"yrit\\xE4 uudelleen napauttamalla\",labelTapToUndo:\"kumoa napauttamalla\",labelButtonRemoveItem:\"Poista\",labelButtonAbortItemLoad:\"Keskeyt\\xE4\",labelButtonRetryItemLoad:\"Yrit\\xE4 uudelleen\",labelButtonAbortItemProcessing:\"Peruuta\",labelButtonUndoItemProcessing:\"Kumoa\",labelButtonRetryItemProcessing:\"Yrit\\xE4 uudelleen\",labelButtonProcessItem:\"L\\xE4het\\xE4\",labelMaxFileSizeExceeded:\"Tiedoston koko on liian suuri\",labelMaxFileSize:\"Tiedoston maksimikoko on {filesize}\",labelMaxTotalFileSizeExceeded:\"Tiedostojen yhdistetty maksimikoko ylitetty\",labelMaxTotalFileSize:\"Tiedostojen yhdistetty maksimikoko on {filesize}\",labelFileTypeNotAllowed:\"Tiedostotyyppi\\xE4 ei sallita\",fileValidateTypeLabelExpectedTypes:\"Sallitaan {allButLastType} tai {lastType}\",imageValidateSizeLabelFormatError:\"Kuvatyyppi\\xE4 ei tueta\",imageValidateSizeLabelImageSizeTooSmall:\"Kuva on liian pieni\",imageValidateSizeLabelImageSizeTooBig:\"Kuva on liian suuri\",imageValidateSizeLabelExpectedMinSize:\"Minimikoko on {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksimikoko on {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Resoluutio on liian pieni\",imageValidateSizeLabelImageResolutionTooHigh:\"Resoluutio on liian suuri\",imageValidateSizeLabelExpectedMinResolution:\"Minimiresoluutio on {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksimiresoluutio on {maxResolution}\"};var Vo={labelIdle:'Faites glisser vos fichiers ou <span class = \"filepond--label-action\"> Parcourir </span>',labelInvalidField:\"Le champ contient des fichiers invalides\",labelFileWaitingForSize:\"En attente de taille\",labelFileSizeNotAvailable:\"Taille non disponible\",labelFileLoading:\"Chargement\",labelFileLoadError:\"Erreur durant le chargement\",labelFileProcessing:\"Traitement\",labelFileProcessingComplete:\"Traitement effectu\\xE9\",labelFileProcessingAborted:\"Traitement interrompu\",labelFileProcessingError:\"Erreur durant le traitement\",labelFileProcessingRevertError:\"Erreur durant la restauration\",labelFileRemoveError:\"Erreur durant la suppression\",labelTapToCancel:\"appuyer pour annuler\",labelTapToRetry:\"appuyer pour r\\xE9essayer\",labelTapToUndo:\"appuyer pour revenir en arri\\xE8re\",labelButtonRemoveItem:\"Retirer\",labelButtonAbortItemLoad:\"Annuler\",labelButtonRetryItemLoad:\"Recommencer\",labelButtonAbortItemProcessing:\"Annuler\",labelButtonUndoItemProcessing:\"Revenir en arri\\xE8re\",labelButtonRetryItemProcessing:\"Recommencer\",labelButtonProcessItem:\"Transf\\xE9rer\",labelMaxFileSizeExceeded:\"Le fichier est trop volumineux\",labelMaxFileSize:\"La taille maximale de fichier est {filesize}\",labelMaxTotalFileSizeExceeded:\"Taille totale maximale d\\xE9pass\\xE9e\",labelMaxTotalFileSize:\"La taille totale maximale des fichiers est {filesize}\",labelFileTypeNotAllowed:\"Fichier non valide\",fileValidateTypeLabelExpectedTypes:\"Attendu {allButLastType} ou {lastType}\",imageValidateSizeLabelFormatError:\"Type d'image non pris en charge\",imageValidateSizeLabelImageSizeTooSmall:\"L'image est trop petite\",imageValidateSizeLabelImageSizeTooBig:\"L'image est trop grande\",imageValidateSizeLabelExpectedMinSize:\"La taille minimale est {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"La taille maximale est {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"La r\\xE9solution est trop faible\",imageValidateSizeLabelImageResolutionTooHigh:\"La r\\xE9solution est trop \\xE9lev\\xE9e\",imageValidateSizeLabelExpectedMinResolution:\"La r\\xE9solution minimale est {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"La r\\xE9solution maximale est {maxResolution}\"};var Go={labelIdle:'\\u05D2\\u05E8\\u05D5\\u05E8 \\u05D5\\u05E9\\u05D7\\u05E8\\u05E8 \\u05D0\\u05EA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD \\u05DB\\u05D0\\u05DF \\u05D0\\u05D5 <span class=\"filepond--label-action\"> \\u05DC\\u05D7\\u05E5 \\u05DB\\u05D0\\u05DF \\u05DC\\u05D1\\u05D7\\u05D9\\u05E8\\u05D4 </span>',labelInvalidField:\"\\u05E7\\u05D5\\u05D1\\u05E5 \\u05DC\\u05D0 \\u05D7\\u05D5\\u05E7\\u05D9\",labelFileWaitingForSize:\"\\u05DE\\u05D7\\u05E9\\u05D1 \\u05D0\\u05EA \\u05D2\\u05D5\\u05D3\\u05DC \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD\",labelFileSizeNotAvailable:\"\\u05DC\\u05D0 \\u05E0\\u05D9\\u05EA\\u05DF \\u05DC\\u05E7\\u05D1\\u05D5\\u05E2 \\u05D0\\u05EA \\u05D2\\u05D5\\u05D3\\u05DC \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD\",labelFileLoading:\"\\u05D8\\u05D5\\u05E2\\u05DF...\",labelFileLoadError:\"\\u05E9\\u05D2\\u05D9\\u05D0\\u05D4 \\u05D0\\u05E8\\u05E2\\u05D4 \\u05D1\\u05E2\\u05EA \\u05D8\\u05E2\\u05D9\\u05E0\\u05EA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD\",labelFileProcessing:\"\\u05DE\\u05E2\\u05DC\\u05D4 \\u05D0\\u05EA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD\",labelFileProcessingComplete:\"\\u05D4\\u05E2\\u05DC\\u05D0\\u05EA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD \\u05D4\\u05E1\\u05EA\\u05D9\\u05D9\\u05DE\\u05D4\",labelFileProcessingAborted:\"\\u05D4\\u05E2\\u05DC\\u05D0\\u05EA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD \\u05D1\\u05D5\\u05D8\\u05DC\\u05D4\",labelFileProcessingError:\"\\u05E9\\u05D2\\u05D9\\u05D0\\u05D4 \\u05D0\\u05E8\\u05E2\\u05D4 \\u05D1\\u05E2\\u05EA \\u05D4\\u05E2\\u05DC\\u05D0\\u05EA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD\",labelFileProcessingRevertError:\"\\u05E9\\u05D2\\u05D9\\u05D0\\u05D4 \\u05D0\\u05E8\\u05E2\\u05D4 \\u05D1\\u05E2\\u05EA \\u05E9\\u05D7\\u05D6\\u05D5\\u05E8 \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD\",labelFileRemoveError:\"\\u05E9\\u05D2\\u05D9\\u05D0\\u05D4 \\u05D0\\u05E8\\u05E2\\u05D4 \\u05D1\\u05E2\\u05EA \\u05D4\\u05E1\\u05E8\\u05EA \\u05D4\\u05E7\\u05D5\\u05D1\\u05E5\",labelTapToCancel:\"\\u05D4\\u05E7\\u05DC\\u05E7 \\u05DC\\u05D1\\u05D9\\u05D8\\u05D5\\u05DC\",labelTapToRetry:\"\\u05D4\\u05E7\\u05DC\\u05E7 \\u05DC\\u05E0\\u05E1\\u05D5\\u05EA \\u05E9\\u05E0\\u05D9\\u05EA\",labelTapToUndo:\"\\u05D4\\u05E7\\u05DC\\u05E7 \\u05DC\\u05E9\\u05D7\\u05D6\\u05E8\",labelButtonRemoveItem:\"\\u05D4\\u05E1\\u05E8\",labelButtonAbortItemLoad:\"\\u05D1\\u05D8\\u05DC\",labelButtonRetryItemLoad:\"\\u05D8\\u05E2\\u05DF \\u05E9\\u05E0\\u05D9\\u05EA\",labelButtonAbortItemProcessing:\"\\u05D1\\u05D8\\u05DC\",labelButtonUndoItemProcessing:\"\\u05E9\\u05D7\\u05D6\\u05E8\",labelButtonRetryItemProcessing:\"\\u05E0\\u05E1\\u05D4 \\u05E9\\u05E0\\u05D9\\u05EA\",labelButtonProcessItem:\"\\u05D4\\u05E2\\u05DC\\u05D4 \\u05E7\\u05D5\\u05D1\\u05E5\",labelMaxFileSizeExceeded:\"\\u05D4\\u05E7\\u05D5\\u05D1\\u05E5 \\u05D2\\u05D3\\u05D5\\u05DC \\u05DE\\u05D3\\u05D9\",labelMaxFileSize:\"\\u05D2\\u05D5\\u05D3\\u05DC \\u05D4\\u05DE\\u05D9\\u05E8\\u05D1\\u05D9 \\u05D4\\u05DE\\u05D5\\u05EA\\u05E8 \\u05D4\\u05D5\\u05D0: {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u05D2\\u05D5\\u05D3\\u05DC \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD \\u05D7\\u05D5\\u05E8\\u05D2 \\u05DE\\u05D4\\u05DB\\u05DE\\u05D5\\u05EA \\u05D4\\u05DE\\u05D5\\u05EA\\u05E8\\u05EA\",labelMaxTotalFileSize:\"\\u05D4\\u05D2\\u05D5\\u05D3\\u05DC \\u05D4\\u05DE\\u05D9\\u05E8\\u05D1\\u05D9 \\u05E9\\u05DC \\u05E1\\u05DA \\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD: {filesize}\",labelFileTypeNotAllowed:\"\\u05E7\\u05D5\\u05D1\\u05E5 \\u05DE\\u05E1\\u05D5\\u05D2 \\u05D6\\u05D4 \\u05D0\\u05D9\\u05E0\\u05D5 \\u05DE\\u05D5\\u05EA\\u05E8\",fileValidateTypeLabelExpectedTypes:\"\\u05D4\\u05E7\\u05D1\\u05E6\\u05D9\\u05DD \\u05D4\\u05DE\\u05D5\\u05EA\\u05E8\\u05D9\\u05DD \\u05D4\\u05DD {allButLastType} \\u05D0\\u05D5 {lastType}\",imageValidateSizeLabelFormatError:\"\\u05EA\\u05DE\\u05D5\\u05E0\\u05D4 \\u05D1\\u05E4\\u05D5\\u05E8\\u05DE\\u05D8 \\u05D6\\u05D4 \\u05D0\\u05D9\\u05E0\\u05D4 \\u05E0\\u05EA\\u05DE\\u05DB\\u05EA\",imageValidateSizeLabelImageSizeTooSmall:\"\\u05EA\\u05DE\\u05D5\\u05E0\\u05D4 \\u05D6\\u05D5 \\u05E7\\u05D8\\u05E0\\u05D4 \\u05DE\\u05D3\\u05D9\",imageValidateSizeLabelImageSizeTooBig:\"\\u05EA\\u05DE\\u05D5\\u05E0\\u05D4 \\u05D6\\u05D5 \\u05D2\\u05D3\\u05D5\\u05DC\\u05D4 \\u05DE\\u05D3\\u05D9\",imageValidateSizeLabelExpectedMinSize:\"\\u05D4\\u05D2\\u05D5\\u05D3\\u05DC \\u05E6\\u05E8\\u05D9\\u05DA \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA \\u05DC\\u05E4\\u05D7\\u05D5\\u05EA: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u05D4\\u05D2\\u05D5\\u05D3\\u05DC \\u05D4\\u05DE\\u05E8\\u05D1\\u05D9 \\u05D4\\u05DE\\u05D5\\u05EA\\u05E8: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u05D4\\u05E8\\u05D6\\u05D5\\u05DC\\u05D5\\u05E6\\u05D9\\u05D4 \\u05E9\\u05DC \\u05EA\\u05DE\\u05D5\\u05E0\\u05D4 \\u05D6\\u05D5 \\u05E0\\u05DE\\u05D5\\u05DB\\u05D4 \\u05DE\\u05D3\\u05D9\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u05D4\\u05E8\\u05D6\\u05D5\\u05DC\\u05D5\\u05E6\\u05D9\\u05D4 \\u05E9\\u05DC \\u05EA\\u05DE\\u05D5\\u05E0\\u05D4 \\u05D6\\u05D5 \\u05D2\\u05D1\\u05D5\\u05D4\\u05D4 \\u05DE\\u05D3\\u05D9\",imageValidateSizeLabelExpectedMinResolution:\"\\u05D4\\u05E8\\u05D6\\u05D5\\u05DC\\u05D5\\u05E6\\u05D9\\u05D4 \\u05E6\\u05E8\\u05D9\\u05DB\\u05D4 \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA \\u05DC\\u05E4\\u05D7\\u05D5\\u05EA: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u05D4\\u05E8\\u05D6\\u05D5\\u05DC\\u05D5\\u05E6\\u05D9\\u05D4 \\u05D4\\u05DE\\u05D9\\u05E8\\u05D1\\u05D9\\u05EA \\u05D4\\u05DE\\u05D5\\u05EA\\u05E8\\u05EA \\u05D4\\u05D9\\u05D0: {maxResolution}\"};var Uo={labelIdle:'Ovdje \"ispusti\" datoteku ili <span class=\"filepond--label-action\"> Pretra\\u017Ei </span>',labelInvalidField:\"Polje sadr\\u017Ei neispravne datoteke\",labelFileWaitingForSize:\"\\u010Cekanje na veli\\u010Dinu datoteke\",labelFileSizeNotAvailable:\"Veli\\u010Dina datoteke nije dostupna\",labelFileLoading:\"U\\u010Ditavanje\",labelFileLoadError:\"Gre\\u0161ka tijekom u\\u010Ditavanja\",labelFileProcessing:\"Prijenos\",labelFileProcessingComplete:\"Prijenos zavr\\u0161en\",labelFileProcessingAborted:\"Prijenos otkazan\",labelFileProcessingError:\"Gre\\u0161ka tijekom prijenosa\",labelFileProcessingRevertError:\"Gre\\u0161ka tijekom vra\\u0107anja\",labelFileRemoveError:\"Gre\\u0161ka tijekom uklananja datoteke\",labelTapToCancel:\"Dodirni za prekid\",labelTapToRetry:\"Dodirni za ponovno\",labelTapToUndo:\"Dodirni za vra\\u0107anje\",labelButtonRemoveItem:\"Ukloni\",labelButtonAbortItemLoad:\"Odbaci\",labelButtonRetryItemLoad:\"Ponovi\",labelButtonAbortItemProcessing:\"Prekini\",labelButtonUndoItemProcessing:\"Vrati\",labelButtonRetryItemProcessing:\"Ponovi\",labelButtonProcessItem:\"Prijenos\",labelMaxFileSizeExceeded:\"Datoteka je prevelika\",labelMaxFileSize:\"Maksimalna veli\\u010Dina datoteke je {filesize}\",labelMaxTotalFileSizeExceeded:\"Maksimalna ukupna veli\\u010Dina datoteke prekora\\u010Dena\",labelMaxTotalFileSize:\"Maksimalna ukupna veli\\u010Dina datoteke je {filesize}\",labelFileTypeNotAllowed:\"Tip datoteke nije podr\\u017Ean\",fileValidateTypeLabelExpectedTypes:\"O\\u010Dekivan {allButLastType} ili {lastType}\",imageValidateSizeLabelFormatError:\"Tip slike nije podr\\u017Ean\",imageValidateSizeLabelImageSizeTooSmall:\"Slika je premala\",imageValidateSizeLabelImageSizeTooBig:\"Slika je prevelika\",imageValidateSizeLabelExpectedMinSize:\"Minimalna veli\\u010Dina je {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksimalna veli\\u010Dina je {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Rezolucija je preniska\",imageValidateSizeLabelImageResolutionTooHigh:\"Rezolucija je previsoka\",imageValidateSizeLabelExpectedMinResolution:\"Minimalna rezolucija je {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksimalna rezolucija je {maxResolution}\"};var Ho={labelIdle:'Mozgasd ide a f\\xE1jlt a felt\\xF6lt\\xE9shez, vagy <span class=\"filepond--label-action\"> tall\\xF3z\\xE1s </span>',labelInvalidField:\"A mez\\u0151 \\xE9rv\\xE9nytelen f\\xE1jlokat tartalmaz\",labelFileWaitingForSize:\"F\\xE1ljm\\xE9ret kisz\\xE1mol\\xE1sa\",labelFileSizeNotAvailable:\"A f\\xE1jlm\\xE9ret nem el\\xE9rhet\\u0151\",labelFileLoading:\"T\\xF6lt\\xE9s\",labelFileLoadError:\"Hiba a bet\\xF6lt\\xE9s sor\\xE1n\",labelFileProcessing:\"Felt\\xF6lt\\xE9s\",labelFileProcessingComplete:\"Sikeres felt\\xF6lt\\xE9s\",labelFileProcessingAborted:\"A felt\\xF6lt\\xE9s megszak\\xEDtva\",labelFileProcessingError:\"Hiba t\\xF6rt\\xE9nt a felt\\xF6lt\\xE9s sor\\xE1n\",labelFileProcessingRevertError:\"Hiba a vissza\\xE1ll\\xEDt\\xE1s sor\\xE1n\",labelFileRemoveError:\"Hiba t\\xF6rt\\xE9nt az elt\\xE1vol\\xEDt\\xE1s sor\\xE1n\",labelTapToCancel:\"koppints a t\\xF6rl\\xE9shez\",labelTapToRetry:\"koppints az \\xFAjrakezd\\xE9shez\",labelTapToUndo:\"koppints a visszavon\\xE1shoz\",labelButtonRemoveItem:\"Elt\\xE1vol\\xEDt\\xE1s\",labelButtonAbortItemLoad:\"Megszak\\xEDt\\xE1s\",labelButtonRetryItemLoad:\"\\xDAjrapr\\xF3b\\xE1lkoz\\xE1s\",labelButtonAbortItemProcessing:\"Megszak\\xEDt\\xE1s\",labelButtonUndoItemProcessing:\"Visszavon\\xE1s\",labelButtonRetryItemProcessing:\"\\xDAjrapr\\xF3b\\xE1lkoz\\xE1s\",labelButtonProcessItem:\"Felt\\xF6lt\\xE9s\",labelMaxFileSizeExceeded:\"A f\\xE1jl t\\xFAll\\xE9pte a maxim\\xE1lis m\\xE9retet\",labelMaxFileSize:\"Maxim\\xE1lis f\\xE1jlm\\xE9ret: {filesize}\",labelMaxTotalFileSizeExceeded:\"T\\xFAll\\xE9pte a maxim\\xE1lis teljes m\\xE9retet\",labelMaxTotalFileSize:\"A maxim\\xE1is teljes f\\xE1jlm\\xE9ret: {filesize}\",labelFileTypeNotAllowed:\"\\xC9rv\\xE9nytelen t\\xEDpus\\xFA f\\xE1jl\",fileValidateTypeLabelExpectedTypes:\"Enged\\xE9lyezett t\\xEDpusok {allButLastType} vagy {lastType}\",imageValidateSizeLabelFormatError:\"A k\\xE9pt\\xEDpus nem t\\xE1mogatott\",imageValidateSizeLabelImageSizeTooSmall:\"A k\\xE9p t\\xFAl kicsi\",imageValidateSizeLabelImageSizeTooBig:\"A k\\xE9p t\\xFAl nagy\",imageValidateSizeLabelExpectedMinSize:\"Minimum m\\xE9ret: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maximum m\\xE9ret: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"A felbont\\xE1s t\\xFAl alacsony\",imageValidateSizeLabelImageResolutionTooHigh:\"A felbont\\xE1s t\\xFAl magas\",imageValidateSizeLabelExpectedMinResolution:\"Minim\\xE1is felbont\\xE1s: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maxim\\xE1lis felbont\\xE1s: {maxResolution}\"};var Wo={labelIdle:'Seret & Jatuhkan berkas Anda atau <span class=\"filepond--label-action\">Jelajahi</span>',labelInvalidField:\"Isian berisi berkas yang tidak valid\",labelFileWaitingForSize:\"Menunggu ukuran berkas\",labelFileSizeNotAvailable:\"Ukuran berkas tidak tersedia\",labelFileLoading:\"Memuat\",labelFileLoadError:\"Kesalahan saat memuat\",labelFileProcessing:\"Mengunggah\",labelFileProcessingComplete:\"Pengunggahan selesai\",labelFileProcessingAborted:\"Pengunggahan dibatalkan\",labelFileProcessingError:\"Kesalahan saat pengunggahan\",labelFileProcessingRevertError:\"Kesalahan saat pemulihan\",labelFileRemoveError:\"Kesalahan saat penghapusan\",labelTapToCancel:\"ketuk untuk membatalkan\",labelTapToRetry:\"ketuk untuk mencoba lagi\",labelTapToUndo:\"ketuk untuk mengurungkan\",labelButtonRemoveItem:\"Hapus\",labelButtonAbortItemLoad:\"Batalkan\",labelButtonRetryItemLoad:\"Coba Kembali\",labelButtonAbortItemProcessing:\"Batalkan\",labelButtonUndoItemProcessing:\"Urungkan\",labelButtonRetryItemProcessing:\"Coba Kembali\",labelButtonProcessItem:\"Unggah\",labelMaxFileSizeExceeded:\"Berkas terlalu besar\",labelMaxFileSize:\"Ukuran berkas maksimum adalah {filesize}\",labelMaxTotalFileSizeExceeded:\"Jumlah berkas maksimum terlampaui\",labelMaxTotalFileSize:\"Jumlah berkas maksimum adalah {filesize}\",labelFileTypeNotAllowed:\"Jenis berkas tidak valid\",fileValidateTypeLabelExpectedTypes:\"Mengharapkan {allButLastType} atau {lastType}\",imageValidateSizeLabelFormatError:\"Jenis citra tidak didukung\",imageValidateSizeLabelImageSizeTooSmall:\"Citra terlalu kecil\",imageValidateSizeLabelImageSizeTooBig:\"Citra terlalu besar\",imageValidateSizeLabelExpectedMinSize:\"Ukuran minimum adalah {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Ukuran maksimum adalah {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Resolusi terlalu rendah\",imageValidateSizeLabelImageResolutionTooHigh:\"Resolusi terlalu tinggi\",imageValidateSizeLabelExpectedMinResolution:\"Resolusi minimum adalah {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Resolusi maksimum adalah {maxResolution}\"};var jo={labelIdle:'Trascina e rilascia i tuoi file oppure <span class=\"filepond--label-action\"> Sfoglia <span>',labelInvalidField:\"Il campo contiene dei file non validi\",labelFileWaitingForSize:\"In attesa della dimensione\",labelFileSizeNotAvailable:\"Dimensione non disponibile\",labelFileLoading:\"Caricamento\",labelFileLoadError:\"Errore durante il caricamento\",labelFileProcessing:\"Caricamento\",labelFileProcessingComplete:\"Caricamento completato\",labelFileProcessingAborted:\"Caricamento cancellato\",labelFileProcessingError:\"Errore durante il caricamento\",labelFileProcessingRevertError:\"Errore durante il ripristino\",labelFileRemoveError:\"Errore durante l'eliminazione\",labelTapToCancel:\"tocca per cancellare\",labelTapToRetry:\"tocca per riprovare\",labelTapToUndo:\"tocca per ripristinare\",labelButtonRemoveItem:\"Elimina\",labelButtonAbortItemLoad:\"Cancella\",labelButtonRetryItemLoad:\"Ritenta\",labelButtonAbortItemProcessing:\"Cancella\",labelButtonUndoItemProcessing:\"Indietro\",labelButtonRetryItemProcessing:\"Ritenta\",labelButtonProcessItem:\"Carica\",labelMaxFileSizeExceeded:\"La dimensione del file \\xE8 eccessiva\",labelMaxFileSize:\"La dimensione massima del file \\xE8 {filesize}\",labelMaxTotalFileSizeExceeded:\"Dimensione totale massima superata\",labelMaxTotalFileSize:\"La dimensione massima totale dei file \\xE8 {filesize}\",labelFileTypeNotAllowed:\"File non supportato\",fileValidateTypeLabelExpectedTypes:\"Aspetta {allButLastType} o {lastType}\",imageValidateSizeLabelFormatError:\"Tipo di immagine non supportata\",imageValidateSizeLabelImageSizeTooSmall:\"L'immagine \\xE8 troppo piccola\",imageValidateSizeLabelImageSizeTooBig:\"L'immagine \\xE8 troppo grande\",imageValidateSizeLabelExpectedMinSize:\"La dimensione minima \\xE8 {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"La dimensione massima \\xE8 {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"La risoluzione \\xE8 troppo bassa\",imageValidateSizeLabelImageResolutionTooHigh:\"La risoluzione \\xE8 troppo alta\",imageValidateSizeLabelExpectedMinResolution:\"La risoluzione minima \\xE8 {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"La risoluzione massima \\xE8 {maxResolution}\"};var Yo={labelIdle:'\\u30D5\\u30A1\\u30A4\\u30EB\\u3092\\u30C9\\u30E9\\u30C3\\u30B0&\\u30C9\\u30ED\\u30C3\\u30D7\\u53C8\\u306F<span class=\"filepond--label-action\">\\u30D5\\u30A1\\u30A4\\u30EB\\u9078\\u629E</span>',labelInvalidField:\"\\u30A2\\u30C3\\u30D7\\u30ED\\u30FC\\u30C9\\u3067\\u304D\\u306A\\u3044\\u30D5\\u30A1\\u30A4\\u30EB\\u304C\\u542B\\u307E\\u308C\\u3066\\u3044\\u307E\\u3059\",labelFileWaitingForSize:\"\\u30D5\\u30A1\\u30A4\\u30EB\\u30B5\\u30A4\\u30BA\\u3092\\u5F85\\u3063\\u3066\\u3044\\u307E\\u3059\",labelFileSizeNotAvailable:\"\\u30D5\\u30A1\\u30A4\\u30EB\\u30B5\\u30A4\\u30BA\\u304C\\u307F\\u3064\\u304B\\u308A\\u307E\\u305B\\u3093\",labelFileLoading:\"\\u8AAD\\u8FBC\\u4E2D...\",labelFileLoadError:\"\\u8AAD\\u8FBC\\u4E2D\\u306B\\u30A8\\u30E9\\u30FC\\u304C\\u767A\\u751F\",labelFileProcessing:\"\\u8AAD\\u8FBC\\u4E2D...\",labelFileProcessingComplete:\"\\u30A2\\u30C3\\u30D7\\u30ED\\u30FC\\u30C9\\u5B8C\\u4E86\",labelFileProcessingAborted:\"\\u30A2\\u30C3\\u30D7\\u30ED\\u30FC\\u30C9\\u304C\\u30AD\\u30E3\\u30F3\\u30BB\\u30EB\\u3055\\u308C\\u307E\\u3057\\u305F\",labelFileProcessingError:\"\\u30A2\\u30C3\\u30D7\\u30ED\\u30FC\\u30C9\\u4E2D\\u306B\\u30A8\\u30E9\\u30FC\\u304C\\u767A\\u751F\",labelFileProcessingRevertError:\"\\u30ED\\u30FC\\u30EB\\u30D0\\u30C3\\u30AF\\u4E2D\\u306B\\u30A8\\u30E9\\u30FC\\u304C\\u767A\\u751F\",labelFileRemoveError:\"\\u524A\\u9664\\u4E2D\\u306B\\u30A8\\u30E9\\u30FC\\u304C\\u767A\\u751F\",labelTapToCancel:\"\\u30AF\\u30EA\\u30C3\\u30AF\\u3057\\u3066\\u30AD\\u30E3\\u30F3\\u30BB\\u30EB\",labelTapToRetry:\"\\u30AF\\u30EA\\u30C3\\u30AF\\u3057\\u3066\\u3082\\u3046\\u4E00\\u5EA6\\u304A\\u8A66\\u3057\\u4E0B\\u3055\\u3044\",labelTapToUndo:\"\\u5143\\u306B\\u623B\\u3059\\u306B\\u306F\\u30BF\\u30C3\\u30D7\\u3057\\u307E\\u3059\",labelButtonRemoveItem:\"\\u524A\\u9664\",labelButtonAbortItemLoad:\"\\u4E2D\\u65AD\",labelButtonRetryItemLoad:\"\\u3082\\u3046\\u4E00\\u5EA6\\u5B9F\\u884C\",labelButtonAbortItemProcessing:\"\\u30AD\\u30E3\\u30F3\\u30BB\\u30EB\",labelButtonUndoItemProcessing:\"\\u5143\\u306B\\u623B\\u3059\",labelButtonRetryItemProcessing:\"\\u3082\\u3046\\u4E00\\u5EA6\\u5B9F\\u884C\",labelButtonProcessItem:\"\\u30A2\\u30C3\\u30D7\\u30ED\\u30FC\\u30C9\",labelMaxFileSizeExceeded:\"\\u30D5\\u30A1\\u30A4\\u30EB\\u30B5\\u30A4\\u30BA\\u304C\\u5927\\u304D\\u3059\\u304E\\u307E\\u3059\",labelMaxFileSize:\"\\u6700\\u5927\\u30D5\\u30A1\\u30A4\\u30EB\\u30B5\\u30A4\\u30BA\\u306F {filesize} \\u3067\\u3059\",labelMaxTotalFileSizeExceeded:\"\\u6700\\u5927\\u5408\\u8A08\\u30B5\\u30A4\\u30BA\\u3092\\u8D85\\u3048\\u307E\\u3057\\u305F\",labelMaxTotalFileSize:\"\\u6700\\u5927\\u5408\\u8A08\\u30D5\\u30A1\\u30A4\\u30EB\\u30B5\\u30A4\\u30BA\\u306F {filesize} \\u3067\\u3059\",labelFileTypeNotAllowed:\"\\u7121\\u52B9\\u306A\\u30D5\\u30A1\\u30A4\\u30EB\\u3067\\u3059\",fileValidateTypeLabelExpectedTypes:\"\\u30B5\\u30DD\\u30FC\\u30C8\\u3057\\u3066\\u3044\\u308B\\u30D5\\u30A1\\u30A4\\u30EB\\u306F {allButLastType} \\u53C8\\u306F {lastType} \\u3067\\u3059\",imageValidateSizeLabelFormatError:\"\\u30B5\\u30DD\\u30FC\\u30C8\\u3057\\u3066\\u3044\\u306A\\u3044\\u753B\\u50CF\\u3067\\u3059\",imageValidateSizeLabelImageSizeTooSmall:\"\\u753B\\u50CF\\u304C\\u5C0F\\u3055\\u3059\\u304E\\u307E\\u3059\",imageValidateSizeLabelImageSizeTooBig:\"\\u753B\\u50CF\\u304C\\u5927\\u304D\\u3059\\u304E\\u307E\\u3059\",imageValidateSizeLabelExpectedMinSize:\"\\u753B\\u50CF\\u306E\\u6700\\u5C0F\\u30B5\\u30A4\\u30BA\\u306F{minWidth}\\xD7{minHeight}\\u3067\\u3059\",imageValidateSizeLabelExpectedMaxSize:\"\\u753B\\u50CF\\u306E\\u6700\\u5927\\u30B5\\u30A4\\u30BA\\u306F{maxWidth} \\xD7 {maxHeight}\\u3067\\u3059\",imageValidateSizeLabelImageResolutionTooLow:\"\\u753B\\u50CF\\u306E\\u89E3\\u50CF\\u5EA6\\u304C\\u4F4E\\u3059\\u304E\\u307E\\u3059\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u753B\\u50CF\\u306E\\u89E3\\u50CF\\u5EA6\\u304C\\u9AD8\\u3059\\u304E\\u307E\\u3059\",imageValidateSizeLabelExpectedMinResolution:\"\\u753B\\u50CF\\u306E\\u6700\\u5C0F\\u89E3\\u50CF\\u5EA6\\u306F{minResolution}\\u3067\\u3059\",imageValidateSizeLabelExpectedMaxResolution:\"\\u753B\\u50CF\\u306E\\u6700\\u5927\\u89E3\\u50CF\\u5EA6\\u306F{maxResolution}\\u3067\\u3059\"};var qo={labelIdle:'\\u1791\\u17B6\\u1789&\\u178A\\u17B6\\u1780\\u17CB\\u17A0\\u17D2\\u179C\\u17B6\\u179B\\u17CB\\u17AF\\u1780\\u179F\\u17B6\\u179A\\u179A\\u1794\\u179F\\u17CB\\u17A2\\u17D2\\u1793\\u1780 \\u17AC <span class=\"filepond--label-action\"> \\u179F\\u17D2\\u179C\\u17C2\\u1784\\u179A\\u1780 </span>',labelInvalidField:\"\\u1785\\u1793\\u17D2\\u179B\\u17C4\\u17C7\\u1798\\u17B6\\u1793\\u17AF\\u1780\\u179F\\u17B6\\u179A\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\",labelFileWaitingForSize:\"\\u1780\\u17C6\\u1796\\u17BB\\u1784\\u179A\\u1784\\u17CB\\u1785\\u17B6\\u17C6\\u1791\\u17C6\\u17A0\\u17C6\",labelFileSizeNotAvailable:\"\\u1791\\u17C6\\u17A0\\u17C6\\u1798\\u17B7\\u1793\\u17A2\\u17B6\\u1785\\u1794\\u17D2\\u179A\\u17BE\\u1794\\u17B6\\u1793\",labelFileLoading:\"\\u1780\\u17C6\\u1796\\u17BB\\u1784\\u178A\\u17C6\\u178E\\u17BE\\u179A\\u1780\\u17B6\\u179A\",labelFileLoadError:\"\\u1798\\u17B6\\u1793\\u1794\\u1789\\u17D2\\u17A0\\u17B6\\u1780\\u17C6\\u17A1\\u17BB\\u1784\\u1796\\u17C1\\u179B\\u178A\\u17C6\\u178E\\u17BE\\u179A\\u1780\\u17B6\\u179A\",labelFileProcessing:\"\\u1780\\u17C6\\u1796\\u17BB\\u1784\\u1795\\u17D2\\u1791\\u17BB\\u1780\\u17A1\\u17BE\\u1784\",labelFileProcessingComplete:\"\\u1780\\u17B6\\u179A\\u1795\\u17D2\\u1791\\u17BB\\u1780\\u17A1\\u17BE\\u1784\\u1796\\u17C1\\u1789\\u179B\\u17C1\\u1789\",labelFileProcessingAborted:\"\\u1780\\u17B6\\u179A\\u1794\\u1784\\u17D2\\u17A0\\u17C4\\u17C7\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1794\\u17B6\\u1793\\u1794\\u17C4\\u17C7\\u1794\\u1784\\u17CB\",labelFileProcessingError:\"\\u1798\\u17B6\\u1793\\u1794\\u1789\\u17D2\\u17A0\\u17B6\\u1780\\u17C6\\u17A1\\u17BB\\u1784\\u1796\\u17C1\\u179B\\u1780\\u17C6\\u1796\\u17BB\\u1784\\u1795\\u17D2\\u1791\\u17BB\\u1780\\u17A1\\u17BE\\u1784\",labelFileProcessingRevertError:\"\\u1798\\u17B6\\u1793\\u1794\\u1789\\u17D2\\u17A0\\u17B6\\u1780\\u17C6\\u17A1\\u17BB\\u1784\\u1796\\u17C1\\u179B\\u178F\\u17D2\\u179A\\u17A1\\u1794\\u17CB\",labelFileRemoveError:\"\\u1798\\u17B6\\u1793\\u1794\\u1789\\u17D2\\u17A0\\u17B6\\u1780\\u17C6\\u17A1\\u17BB\\u1784\\u1796\\u17C1\\u179B\\u178A\\u1780\\u1785\\u17C1\\u1789\",labelTapToCancel:\"\\u1785\\u17BB\\u1785\\u178A\\u17BE\\u1798\\u17D2\\u1794\\u17B8\\u1794\\u17C4\\u17C7\\u1794\\u1784\\u17CB\",labelTapToRetry:\"\\u1785\\u17BB\\u1785\\u178A\\u17BE\\u1798\\u17D2\\u1794\\u17B8\\u1796\\u17D2\\u1799\\u17B6\\u1799\\u17B6\\u1798\\u1798\\u17D2\\u178F\\u1784\\u1791\\u17C0\\u178F\",labelTapToUndo:\"\\u1785\\u17BB\\u1785\\u178A\\u17BE\\u1798\\u17D2\\u1794\\u17B8\\u1798\\u17B7\\u1793\\u1792\\u17D2\\u179C\\u17BE\\u179C\\u17B7\\u1789\",labelButtonRemoveItem:\"\\u1799\\u1780\\u1785\\u17C1\\u1789\",labelButtonAbortItemLoad:\"\\u1794\\u17C4\\u17C7\\u1794\\u1784\\u17CB\",labelButtonRetryItemLoad:\"\\u1796\\u17D2\\u1799\\u17B6\\u1799\\u17B6\\u1798\\u1798\\u17D2\\u178F\\u1784\\u1791\\u17C0\\u178F\",labelButtonAbortItemProcessing:\"\\u1794\\u17C4\\u17C7\\u1794\\u1784\\u17CB\",labelButtonUndoItemProcessing:\"\\u1798\\u17B7\\u1793\\u1792\\u17D2\\u179C\\u17BE\\u179C\\u17B7\\u1789\",labelButtonRetryItemProcessing:\"\\u1796\\u17D2\\u1799\\u17B6\\u1799\\u17B6\\u1798\\u1798\\u17D2\\u178F\\u1784\\u1791\\u17C0\\u178F\",labelButtonProcessItem:\"\\u1795\\u17D2\\u1791\\u17BB\\u1780\\u17A1\\u17BE\\u1784\",labelMaxFileSizeExceeded:\"\\u17AF\\u1780\\u179F\\u17B6\\u179A\\u1792\\u17C6\\u1796\\u17C1\\u1780\",labelMaxFileSize:\"\\u1791\\u17C6\\u17A0\\u17C6\\u17AF\\u1780\\u179F\\u17B6\\u179A\\u17A2\\u178F\\u17B7\\u1794\\u179A\\u1798\\u17B6\\u1782\\u17BA {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u179B\\u17BE\\u179F\\u1791\\u17C6\\u17A0\\u17C6\\u179F\\u179A\\u17BB\\u1794\\u17A2\\u178F\\u17B7\\u1794\\u179A\\u1798\\u17B6\",labelMaxTotalFileSize:\"\\u1791\\u17C6\\u17A0\\u17C6\\u17AF\\u1780\\u179F\\u17B6\\u179A\\u179F\\u179A\\u17BB\\u1794\\u17A2\\u178F\\u17B7\\u1794\\u179A\\u1798\\u17B6\\u1782\\u17BA {filesize}\",labelFileTypeNotAllowed:\"\\u1794\\u17D2\\u179A\\u1797\\u17C1\\u1791\\u17AF\\u1780\\u179F\\u17B6\\u179A\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\",fileValidateTypeLabelExpectedTypes:\"\\u179A\\u17C6\\u1796\\u17B9\\u1784\\u1790\\u17B6 {allButLastType} \\u17AC {lastType}\",imageValidateSizeLabelFormatError:\"\\u1794\\u17D2\\u179A\\u1797\\u17C1\\u1791\\u179A\\u17BC\\u1794\\u1797\\u17B6\\u1796\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\",imageValidateSizeLabelImageSizeTooSmall:\"\\u179A\\u17BC\\u1794\\u1797\\u17B6\\u1796\\u178F\\u17BC\\u1785\\u1796\\u17C1\\u1780\",imageValidateSizeLabelImageSizeTooBig:\"\\u179A\\u17BC\\u1794\\u1797\\u17B6\\u1796\\u1792\\u17C6\\u1796\\u17C1\\u1780\",imageValidateSizeLabelExpectedMinSize:\"\\u1791\\u17C6\\u17A0\\u17C6\\u17A2\\u1794\\u17D2\\u1794\\u1794\\u179A\\u1798\\u17B6\\u1782\\u17BA {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u1791\\u17C6\\u17A0\\u17C6\\u17A2\\u178F\\u17B7\\u1794\\u179A\\u1798\\u17B6\\u1782\\u17BA {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u1782\\u17BB\\u178E\\u1797\\u17B6\\u1796\\u1794\\u1784\\u17D2\\u17A0\\u17B6\\u1789\\u1791\\u17B6\\u1794\\u1796\\u17C1\\u1780\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u1782\\u17BB\\u178E\\u1797\\u17B6\\u1796\\u1794\\u1784\\u17D2\\u17A0\\u17B6\\u1789\\u1781\\u17D2\\u1796\\u179F\\u17CB\\u1796\\u17C1\\u1780\",imageValidateSizeLabelExpectedMinResolution:\"\\u1782\\u17BB\\u178E\\u1797\\u17B6\\u1796\\u1794\\u1784\\u17D2\\u17A0\\u17B6\\u1789\\u17A2\\u1794\\u17D2\\u1794\\u1794\\u179A\\u1798\\u17B6\\u1782\\u17BA {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u1782\\u17BB\\u178E\\u1797\\u17B6\\u1796\\u1794\\u1784\\u17D2\\u17A0\\u17B6\\u1789\\u17A2\\u178F\\u17B7\\u1794\\u179A\\u1798\\u17B6\\u1782\\u17BA {maxResolution}\"};var $o={labelIdle:'\\uD30C\\uC77C\\uC744 \\uB4DC\\uB798\\uADF8 \\uD558\\uAC70\\uB098 <span class=\"filepond--label-action\"> \\uCC3E\\uC544\\uBCF4\\uAE30 </span>',labelInvalidField:\"\\uD544\\uB4DC\\uC5D0 \\uC720\\uD6A8\\uD558\\uC9C0 \\uC54A\\uC740 \\uD30C\\uC77C\\uC774 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",labelFileWaitingForSize:\"\\uC6A9\\uB7C9 \\uD655\\uC778\\uC911\",labelFileSizeNotAvailable:\"\\uC0AC\\uC6A9\\uD560 \\uC218 \\uC5C6\\uB294 \\uC6A9\\uB7C9\",labelFileLoading:\"\\uBD88\\uB7EC\\uC624\\uB294 \\uC911\",labelFileLoadError:\"\\uD30C\\uC77C \\uBD88\\uB7EC\\uC624\\uAE30 \\uC2E4\\uD328\",labelFileProcessing:\"\\uC5C5\\uB85C\\uB4DC \\uC911\",labelFileProcessingComplete:\"\\uC5C5\\uB85C\\uB4DC \\uC131\\uACF5\",labelFileProcessingAborted:\"\\uC5C5\\uB85C\\uB4DC \\uCDE8\\uC18C\\uB428\",labelFileProcessingError:\"\\uD30C\\uC77C \\uC5C5\\uB85C\\uB4DC \\uC2E4\\uD328\",labelFileProcessingRevertError:\"\\uB418\\uB3CC\\uB9AC\\uAE30 \\uC2E4\\uD328\",labelFileRemoveError:\"\\uC81C\\uAC70 \\uC2E4\\uD328\",labelTapToCancel:\"\\uD0ED\\uD558\\uC5EC \\uCDE8\\uC18C\",labelTapToRetry:\"\\uD0ED\\uD558\\uC5EC \\uC7AC\\uC2DC\\uC791\",labelTapToUndo:\"\\uD0ED\\uD558\\uC5EC \\uC2E4\\uD589 \\uCDE8\\uC18C\",labelButtonRemoveItem:\"\\uC81C\\uAC70\",labelButtonAbortItemLoad:\"\\uC911\\uB2E8\",labelButtonRetryItemLoad:\"\\uC7AC\\uC2DC\\uC791\",labelButtonAbortItemProcessing:\"\\uCDE8\\uC18C\",labelButtonUndoItemProcessing:\"\\uC2E4\\uD589 \\uCDE8\\uC18C\",labelButtonRetryItemProcessing:\"\\uC7AC\\uC2DC\\uC791\",labelButtonProcessItem:\"\\uC5C5\\uB85C\\uB4DC\",labelMaxFileSizeExceeded:\"\\uD30C\\uC77C\\uC774 \\uB108\\uBB34 \\uD07D\\uB2C8\\uB2E4.\",labelMaxFileSize:\"\\uCD5C\\uB300 \\uD30C\\uC77C \\uC6A9\\uB7C9\\uC740 {filesize} \\uC785\\uB2C8\\uB2E4.\",labelMaxTotalFileSizeExceeded:\"\\uCD5C\\uB300 \\uC804\\uCCB4 \\uD30C\\uC77C \\uC6A9\\uB7C9 \\uCD08\\uACFC\\uD558\\uC600\\uC2B5\\uB2C8\\uB2E4.\",labelMaxTotalFileSize:\"\\uCD5C\\uB300 \\uC804\\uCCB4 \\uD30C\\uC77C \\uC6A9\\uB7C9\\uC740 {filesize} \\uC785\\uB2C8\\uB2E4.\",labelFileTypeNotAllowed:\"\\uC798\\uBABB\\uB41C \\uD615\\uC2DD\\uC758 \\uD30C\\uC77C\",fileValidateTypeLabelExpectedTypes:\"{allButLastType} \\uB610\\uB294 {lastType}\",imageValidateSizeLabelFormatError:\"\\uC9C0\\uC6D0\\uB418\\uC9C0 \\uC54A\\uB294 \\uC774\\uBBF8\\uC9C0 \\uC720\\uD615\",imageValidateSizeLabelImageSizeTooSmall:\"\\uC774\\uBBF8\\uC9C0\\uAC00 \\uB108\\uBB34 \\uC791\\uC2B5\\uB2C8\\uB2E4.\",imageValidateSizeLabelImageSizeTooBig:\"\\uC774\\uBBF8\\uC9C0\\uAC00 \\uB108\\uBB34 \\uD07D\\uB2C8\\uB2E4.\",imageValidateSizeLabelExpectedMinSize:\"\\uC774\\uBBF8\\uC9C0 \\uCD5C\\uC18C \\uD06C\\uAE30\\uB294 {minWidth} \\xD7 {minHeight} \\uC785\\uB2C8\\uB2E4\",imageValidateSizeLabelExpectedMaxSize:\"\\uC774\\uBBF8\\uC9C0 \\uCD5C\\uB300 \\uD06C\\uAE30\\uB294 {maxWidth} \\xD7 {maxHeight} \\uC785\\uB2C8\\uB2E4\",imageValidateSizeLabelImageResolutionTooLow:\"\\uD574\\uC0C1\\uB3C4\\uAC00 \\uB108\\uBB34 \\uB0AE\\uC2B5\\uB2C8\\uB2E4.\",imageValidateSizeLabelImageResolutionTooHigh:\"\\uD574\\uC0C1\\uB3C4\\uAC00 \\uB108\\uBB34 \\uB192\\uC2B5\\uB2C8\\uB2E4.\",imageValidateSizeLabelExpectedMinResolution:\"\\uCD5C\\uC18C \\uD574\\uC0C1\\uB3C4\\uB294 {minResolution} \\uC785\\uB2C8\\uB2E4.\",imageValidateSizeLabelExpectedMaxResolution:\"\\uCD5C\\uB300 \\uD574\\uC0C1\\uB3C4\\uB294 {maxResolution} \\uC785\\uB2C8\\uB2E4.\"};var Xo={labelIdle:'\\u012Ed\\u0117kite failus \\u010Dia arba <span class=\"filepond--label-action\"> Ie\\u0161kokite </span>',labelInvalidField:\"Laukelis talpina netinkamus failus\",labelFileWaitingForSize:\"Laukiama dyd\\u017Eio\",labelFileSizeNotAvailable:\"Dydis ne\\u017Einomas\",labelFileLoading:\"Kraunama\",labelFileLoadError:\"Klaida \\u012Fkeliant\",labelFileProcessing:\"\\u012Ekeliama\",labelFileProcessingComplete:\"\\u012Ek\\u0117limas s\\u0117kmingas\",labelFileProcessingAborted:\"\\u012Ek\\u0117limas at\\u0161auktas\",labelFileProcessingError:\"\\u012Ekeliant \\u012Fvyko klaida\",labelFileProcessingRevertError:\"At\\u0161aukiant \\u012Fvyko klaida\",labelFileRemoveError:\"I\\u0161trinant \\u012Fvyko klaida\",labelTapToCancel:\"Palieskite nor\\u0117dami at\\u0161aukti\",labelTapToRetry:\"Palieskite nor\\u0117dami pakartoti\",labelTapToUndo:\"Palieskite nor\\u0117dami at\\u0161aukti\",labelButtonRemoveItem:\"I\\u0161trinti\",labelButtonAbortItemLoad:\"Sustabdyti\",labelButtonRetryItemLoad:\"Pakartoti\",labelButtonAbortItemProcessing:\"At\\u0161aukti\",labelButtonUndoItemProcessing:\"At\\u0161aukti\",labelButtonRetryItemProcessing:\"Pakartoti\",labelButtonProcessItem:\"\\u012Ekelti\",labelMaxFileSizeExceeded:\"Failas per didelis\",labelMaxFileSize:\"Maksimalus failo dydis yra {filesize}\",labelMaxTotalFileSizeExceeded:\"Vir\\u0161ijote maksimal\\u0173 leistin\\u0105 dyd\\u012F\",labelMaxTotalFileSize:\"Maksimalus leistinas dydis yra {filesize}\",labelFileTypeNotAllowed:\"Netinkamas failas\",fileValidateTypeLabelExpectedTypes:\"Tikisi {allButLastType} arba {lastType}\",imageValidateSizeLabelFormatError:\"Nuotraukos formatas nepalaikomas\",imageValidateSizeLabelImageSizeTooSmall:\"Nuotrauka per ma\\u017Ea\",imageValidateSizeLabelImageSizeTooBig:\"Nuotrauka per didel\\u0117\",imageValidateSizeLabelExpectedMinSize:\"Minimalus dydis yra {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksimalus dydis yra {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Rezoliucija per ma\\u017Ea\",imageValidateSizeLabelImageResolutionTooHigh:\"Rezoliucija per didel\\u0117\",imageValidateSizeLabelExpectedMinResolution:\"Minimali rezoliucija yra {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksimali rezoliucija yra {maxResolution}\"};var Ko={labelIdle:'I file hn\\xFBkl\\xFBt rawh, emaw <span class=\"filepond--label-action\"> Zawnna </span>',labelInvalidField:\"Hemi hian files diklo a kengtel\",labelFileWaitingForSize:\"A lenzawng a ngh\\xE2k mek\",labelFileSizeNotAvailable:\"A lenzawng a awmlo\",labelFileLoading:\"Loading\",labelFileLoadError:\"Load laiin dik lo a awm\",labelFileProcessing:\"Uploading\",labelFileProcessingComplete:\"Upload a zo\",labelFileProcessingAborted:\"Upload s\\xFBt a ni\",labelFileProcessingError:\"Upload laiin dik lo a awm\",labelFileProcessingRevertError:\"Dahk\\xEEr laiin dik lo a awm\",labelFileRemoveError:\"Paih laiin dik lo a awm\",labelTapToCancel:\"S\\xFBt turin hmet rawh\",labelTapToRetry:\"Tinawn turin hmet rawh\",labelTapToUndo:\"Tilet turin hmet rawh\",labelButtonRemoveItem:\"Paihna\",labelButtonAbortItemLoad:\"Tihtlawlhna\",labelButtonRetryItemLoad:\"Tihnawnna\",labelButtonAbortItemProcessing:\"S\\xFBtna\",labelButtonUndoItemProcessing:\"Tihletna\",labelButtonRetryItemProcessing:\"Tihnawnna\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"File a lian lutuk\",labelMaxFileSize:\"File lenzawng tam ber chu {filesize} ani\",labelMaxTotalFileSizeExceeded:\"A lenzawng belh kh\\xE2wm tam ber a p\\xEAl\",labelMaxTotalFileSize:\"File lenzawng belh kh\\xE2wm tam ber chu {filesize} a ni\",labelFileTypeNotAllowed:\"File type dik lo a ni\",fileValidateTypeLabelExpectedTypes:\"{allButLastType} emaw {lastType} emaw beisei a ni\",imageValidateSizeLabelFormatError:\"Thlal\\xE2k type a thl\\xE2wplo\",imageValidateSizeLabelImageSizeTooSmall:\"Thlal\\xE2k hi a t\\xEA lutuk\",imageValidateSizeLabelImageSizeTooBig:\"Thlal\\xE2k hi a lian lutuk\",imageValidateSizeLabelExpectedMinSize:\"A lenzawng tl\\xEAm ber chu {minWidth} x {minHeight} a ni\",imageValidateSizeLabelExpectedMaxSize:\"A lenzawng tam ber chu {maxWidth} x {maxHeight} a ni\",imageValidateSizeLabelImageResolutionTooLow:\"Resolution a hniam lutuk\",imageValidateSizeLabelImageResolutionTooHigh:\"Resolution a s\\xE2ng lutuk\",imageValidateSizeLabelExpectedMinResolution:\"Resolution hniam ber chu {minResolution} a ni\",imageValidateSizeLabelExpectedMaxResolution:\"Resolution s\\xE2ng ber chu {maxResolution} a ni\"};var Zo={labelIdle:'Ievelciet savus failus vai <span class=\"filepond--label-action\"> p\\u0101rl\\u016Bkojiet \\u0161eit </span>',labelInvalidField:\"Lauks satur neder\\u012Bgus failus\",labelFileWaitingForSize:\"Gaid\\u0101m faila izm\\u0113ru\",labelFileSizeNotAvailable:\"Izm\\u0113rs nav pieejams\",labelFileLoading:\"Notiek iel\\u0101de\",labelFileLoadError:\"Notika k\\u013C\\u016Bda iel\\u0101des laik\\u0101\",labelFileProcessing:\"Notiek aug\\u0161upiel\\u0101de\",labelFileProcessingComplete:\"Aug\\u0161upiel\\u0101de pabeigta\",labelFileProcessingAborted:\"Aug\\u0161upiel\\u0101de atcelta\",labelFileProcessingError:\"Notika k\\u013C\\u016Bda aug\\u0161upiel\\u0101des laik\\u0101\",labelFileProcessingRevertError:\"Notika k\\u013C\\u016Bda atgrie\\u0161anas laik\\u0101\",labelFileRemoveError:\"Notika k\\u013C\\u016Bda dz\\u0113\\u0161anas laik\\u0101\",labelTapToCancel:\"pieskarieties, lai atceltu\",labelTapToRetry:\"pieskarieties, lai m\\u0113\\u0123in\\u0101tu v\\u0113lreiz\",labelTapToUndo:\"pieskarieties, lai atsauktu\",labelButtonRemoveItem:\"Dz\\u0113st\",labelButtonAbortItemLoad:\"P\\u0101rtraukt\",labelButtonRetryItemLoad:\"M\\u0113\\u0123in\\u0101t v\\u0113lreiz\",labelButtonAbortItemProcessing:\"P\\u0101rtraucam\",labelButtonUndoItemProcessing:\"Atsaucam\",labelButtonRetryItemProcessing:\"M\\u0113\\u0123in\\u0101m v\\u0113lreiz\",labelButtonProcessItem:\"Aug\\u0161upiel\\u0101d\\u0113t\",labelMaxFileSizeExceeded:\"Fails ir p\\u0101r\\u0101k liels\",labelMaxFileSize:\"Maksim\\u0101lais faila izm\\u0113rs ir {filesize}\",labelMaxTotalFileSizeExceeded:\"P\\u0101rsniegts maksim\\u0101lais kop\\u0113jais failu izm\\u0113rs\",labelMaxTotalFileSize:\"Maksim\\u0101lais kop\\u0113jais failu izm\\u0113rs ir {filesize}\",labelFileTypeNotAllowed:\"Neder\\u012Bgs faila tips\",fileValidateTypeLabelExpectedTypes:\"Sagaid\\u0101m {allButLastType} vai {lastType}\",imageValidateSizeLabelFormatError:\"Neatbilsto\\u0161s att\\u0113la tips\",imageValidateSizeLabelImageSizeTooSmall:\"Att\\u0113ls ir p\\u0101r\\u0101k mazs\",imageValidateSizeLabelImageSizeTooBig:\"Att\\u0113ls ir p\\u0101r\\u0101k liels\",imageValidateSizeLabelExpectedMinSize:\"Minim\\u0101lais izm\\u0113rs ir {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksim\\u0101lais izm\\u0113rs ir {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Iz\\u0161\\u0137irtsp\\u0113ja ir p\\u0101r\\u0101k zema\",imageValidateSizeLabelImageResolutionTooHigh:\"Iz\\u0161\\u0137irtsp\\u0113ja ir p\\u0101r\\u0101k augsta\",imageValidateSizeLabelExpectedMinResolution:\"Minim\\u0101l\\u0101 iz\\u0161\\u0137irtsp\\u0113ja ir {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksim\\u0101l\\u0101 iz\\u0161\\u0137irtsp\\u0113ja ir {maxResolution}\"};var Qo={labelIdle:'Dra og slipp filene dine, eller <span class=\"filepond--label-action\"> Bla gjennom... </span>',labelInvalidField:\"Feltet inneholder ugyldige filer\",labelFileWaitingForSize:\"Venter p\\xE5 st\\xF8rrelse\",labelFileSizeNotAvailable:\"St\\xF8rrelse ikke tilgjengelig\",labelFileLoading:\"Laster\",labelFileLoadError:\"Feil under lasting\",labelFileProcessing:\"Laster opp\",labelFileProcessingComplete:\"Opplasting ferdig\",labelFileProcessingAborted:\"Opplasting avbrutt\",labelFileProcessingError:\"Feil under opplasting\",labelFileProcessingRevertError:\"Feil under reversering\",labelFileRemoveError:\"Feil under flytting\",labelTapToCancel:\"klikk for \\xE5 avbryte\",labelTapToRetry:\"klikk for \\xE5 pr\\xF8ve p\\xE5 nytt\",labelTapToUndo:\"klikk for \\xE5 angre\",labelButtonRemoveItem:\"Fjern\",labelButtonAbortItemLoad:\"Avbryt\",labelButtonRetryItemLoad:\"Pr\\xF8v p\\xE5 nytt\",labelButtonAbortItemProcessing:\"Avbryt\",labelButtonUndoItemProcessing:\"Angre\",labelButtonRetryItemProcessing:\"Pr\\xF8v p\\xE5 nytt\",labelButtonProcessItem:\"Last opp\",labelMaxFileSizeExceeded:\"Filen er for stor\",labelMaxFileSize:\"Maksimal filst\\xF8rrelse er {filesize}\",labelMaxTotalFileSizeExceeded:\"Maksimal total st\\xF8rrelse oversteget\",labelMaxTotalFileSize:\"Maksimal total st\\xF8rrelse er {filesize}\",labelFileTypeNotAllowed:\"Ugyldig filtype\",fileValidateTypeLabelExpectedTypes:\"Forventer {allButLastType} eller {lastType}\",imageValidateSizeLabelFormatError:\"Bildeformat ikke st\\xF8ttet\",imageValidateSizeLabelImageSizeTooSmall:\"Bildet er for lite\",imageValidateSizeLabelImageSizeTooBig:\"Bildet er for stort\",imageValidateSizeLabelExpectedMinSize:\"Minimumsst\\xF8rrelse er {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksimumsst\\xF8rrelse er {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Oppl\\xF8sningen er for lav\",imageValidateSizeLabelImageResolutionTooHigh:\"Oppl\\xF8sningen er for h\\xF8y\",imageValidateSizeLabelExpectedMinResolution:\"Minimum oppl\\xF8sning er {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksimal oppl\\xF8sning er {maxResolution}\"};var Jo={labelIdle:'Drag & Drop je bestanden of <span class=\"filepond--label-action\"> Bladeren </span>',labelInvalidField:\"Veld bevat ongeldige bestanden\",labelFileWaitingForSize:\"Wachten op grootte\",labelFileSizeNotAvailable:\"Grootte niet beschikbaar\",labelFileLoading:\"Laden\",labelFileLoadError:\"Fout tijdens laden\",labelFileProcessing:\"Uploaden\",labelFileProcessingComplete:\"Upload afgerond\",labelFileProcessingAborted:\"Upload geannuleerd\",labelFileProcessingError:\"Fout tijdens upload\",labelFileProcessingRevertError:\"Fout bij herstellen\",labelFileRemoveError:\"Fout bij verwijderen\",labelTapToCancel:\"tik om te annuleren\",labelTapToRetry:\"tik om opnieuw te proberen\",labelTapToUndo:\"tik om ongedaan te maken\",labelButtonRemoveItem:\"Verwijderen\",labelButtonAbortItemLoad:\"Afbreken\",labelButtonRetryItemLoad:\"Opnieuw proberen\",labelButtonAbortItemProcessing:\"Annuleren\",labelButtonUndoItemProcessing:\"Ongedaan maken\",labelButtonRetryItemProcessing:\"Opnieuw proberen\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"Bestand is te groot\",labelMaxFileSize:\"Maximale bestandsgrootte is {filesize}\",labelMaxTotalFileSizeExceeded:\"Maximale totale grootte overschreden\",labelMaxTotalFileSize:\"Maximale totale bestandsgrootte is {filesize}\",labelFileTypeNotAllowed:\"Ongeldig bestandstype\",fileValidateTypeLabelExpectedTypes:\"Verwacht {allButLastType} of {lastType}\",imageValidateSizeLabelFormatError:\"Afbeeldingstype niet ondersteund\",imageValidateSizeLabelImageSizeTooSmall:\"Afbeelding is te klein\",imageValidateSizeLabelImageSizeTooBig:\"Afbeelding is te groot\",imageValidateSizeLabelExpectedMinSize:\"Minimale afmeting is {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maximale afmeting is {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Resolutie is te laag\",imageValidateSizeLabelImageResolutionTooHigh:\"Resolution is too high\",imageValidateSizeLabelExpectedMinResolution:\"Minimale resolutie is {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maximale resolutie is {maxResolution}\"};var er={labelIdle:'Przeci\\u0105gnij i upu\\u015B\\u0107 lub <span class=\"filepond--label-action\">wybierz</span> pliki',labelInvalidField:\"Nieprawid\\u0142owe pliki\",labelFileWaitingForSize:\"Pobieranie rozmiaru\",labelFileSizeNotAvailable:\"Nieznany rozmiar\",labelFileLoading:\"Wczytywanie\",labelFileLoadError:\"B\\u0142\\u0105d wczytywania\",labelFileProcessing:\"Przesy\\u0142anie\",labelFileProcessingComplete:\"Przes\\u0142ano\",labelFileProcessingAborted:\"Przerwano\",labelFileProcessingError:\"Przesy\\u0142anie nie powiod\\u0142o si\\u0119\",labelFileProcessingRevertError:\"Co\\u015B posz\\u0142o nie tak\",labelFileRemoveError:\"Nieudane usuni\\u0119cie\",labelTapToCancel:\"Anuluj\",labelTapToRetry:\"Pon\\xF3w\",labelTapToUndo:\"Cofnij\",labelButtonRemoveItem:\"Usu\\u0144\",labelButtonAbortItemLoad:\"Przerwij\",labelButtonRetryItemLoad:\"Pon\\xF3w\",labelButtonAbortItemProcessing:\"Anuluj\",labelButtonUndoItemProcessing:\"Cofnij\",labelButtonRetryItemProcessing:\"Pon\\xF3w\",labelButtonProcessItem:\"Prze\\u015Blij\",labelMaxFileSizeExceeded:\"Plik jest zbyt du\\u017Cy\",labelMaxFileSize:\"Dopuszczalna wielko\\u015B\\u0107 pliku to {filesize}\",labelMaxTotalFileSizeExceeded:\"Przekroczono \\u0142\\u0105czny rozmiar plik\\xF3w\",labelMaxTotalFileSize:\"\\u0141\\u0105czny rozmiar plik\\xF3w nie mo\\u017Ce przekroczy\\u0107 {filesize}\",labelFileTypeNotAllowed:\"Niedozwolony rodzaj pliku\",fileValidateTypeLabelExpectedTypes:\"Oczekiwano {allButLastType} lub {lastType}\",imageValidateSizeLabelFormatError:\"Nieobs\\u0142ugiwany format obrazu\",imageValidateSizeLabelImageSizeTooSmall:\"Obraz jest zbyt ma\\u0142y\",imageValidateSizeLabelImageSizeTooBig:\"Obraz jest zbyt du\\u017Cy\",imageValidateSizeLabelExpectedMinSize:\"Minimalne wymiary obrazu to {minWidth}\\xD7{minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maksymalna wymiary obrazu to {maxWidth}\\xD7{maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Rozdzielczo\\u015B\\u0107 jest zbyt niska\",imageValidateSizeLabelImageResolutionTooHigh:\"Rozdzielczo\\u015B\\u0107 jest zbyt wysoka\",imageValidateSizeLabelExpectedMinResolution:\"Minimalna rozdzielczo\\u015B\\u0107 to {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maksymalna rozdzielczo\\u015B\\u0107 to {maxResolution}\"};var tr={labelIdle:'Arraste & Largue os ficheiros ou <span class=\"filepond--label-action\"> Seleccione </span>',labelInvalidField:\"O campo cont\\xE9m ficheiros inv\\xE1lidos\",labelFileWaitingForSize:\"A aguardar tamanho\",labelFileSizeNotAvailable:\"Tamanho n\\xE3o dispon\\xEDvel\",labelFileLoading:\"A carregar\",labelFileLoadError:\"Erro ao carregar\",labelFileProcessing:\"A carregar\",labelFileProcessingComplete:\"Carregamento completo\",labelFileProcessingAborted:\"Carregamento cancelado\",labelFileProcessingError:\"Erro ao carregar\",labelFileProcessingRevertError:\"Erro ao reverter\",labelFileRemoveError:\"Erro ao remover\",labelTapToCancel:\"carregue para cancelar\",labelTapToRetry:\"carregue para tentar novamente\",labelTapToUndo:\"carregue para desfazer\",labelButtonRemoveItem:\"Remover\",labelButtonAbortItemLoad:\"Abortar\",labelButtonRetryItemLoad:\"Tentar novamente\",labelButtonAbortItemProcessing:\"Cancelar\",labelButtonUndoItemProcessing:\"Desfazer\",labelButtonRetryItemProcessing:\"Tentar novamente\",labelButtonProcessItem:\"Carregar\",labelMaxFileSizeExceeded:\"Ficheiro demasiado grande\",labelMaxFileSize:\"O tamanho m\\xE1ximo do ficheiro \\xE9 de {filesize}\",labelMaxTotalFileSizeExceeded:\"Tamanho m\\xE1ximo total excedido\",labelMaxTotalFileSize:\"O tamanho m\\xE1ximo total do ficheiro \\xE9 de {filesize}\",labelFileTypeNotAllowed:\"Tipo de ficheiro inv\\xE1lido\",fileValidateTypeLabelExpectedTypes:\"\\xC9 esperado {allButLastType} ou {lastType}\",imageValidateSizeLabelFormatError:\"Tipo de imagem n\\xE3o suportada\",imageValidateSizeLabelImageSizeTooSmall:\"A imagem \\xE9 demasiado pequena\",imageValidateSizeLabelImageSizeTooBig:\"A imagem \\xE9 demasiado grande\",imageValidateSizeLabelExpectedMinSize:\"O tamanho m\\xEDnimo \\xE9 de {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"O tamanho m\\xE1ximo \\xE9 de {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"A resolu\\xE7\\xE3o \\xE9 demasiado baixa\",imageValidateSizeLabelImageResolutionTooHigh:\"A resolu\\xE7\\xE3o \\xE9 demasiado grande\",imageValidateSizeLabelExpectedMinResolution:\"A resolu\\xE7\\xE3o m\\xEDnima \\xE9 de {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"A resolu\\xE7\\xE3o m\\xE1xima \\xE9 de {maxResolution}\"};var ir={labelIdle:'Arraste e solte os arquivos ou <span class=\"filepond--label-action\"> Clique aqui </span>',labelInvalidField:\"Arquivos inv\\xE1lidos\",labelFileWaitingForSize:\"Calculando o tamanho do arquivo\",labelFileSizeNotAvailable:\"Tamanho do arquivo indispon\\xEDvel\",labelFileLoading:\"Carregando\",labelFileLoadError:\"Erro durante o carregamento\",labelFileProcessing:\"Enviando\",labelFileProcessingComplete:\"Envio finalizado\",labelFileProcessingAborted:\"Envio cancelado\",labelFileProcessingError:\"Erro durante o envio\",labelFileProcessingRevertError:\"Erro ao reverter o envio\",labelFileRemoveError:\"Erro ao remover o arquivo\",labelTapToCancel:\"clique para cancelar\",labelTapToRetry:\"clique para reenviar\",labelTapToUndo:\"clique para desfazer\",labelButtonRemoveItem:\"Remover\",labelButtonAbortItemLoad:\"Abortar\",labelButtonRetryItemLoad:\"Reenviar\",labelButtonAbortItemProcessing:\"Cancelar\",labelButtonUndoItemProcessing:\"Desfazer\",labelButtonRetryItemProcessing:\"Reenviar\",labelButtonProcessItem:\"Enviar\",labelMaxFileSizeExceeded:\"Arquivo \\xE9 muito grande\",labelMaxFileSize:\"O tamanho m\\xE1ximo permitido: {filesize}\",labelMaxTotalFileSizeExceeded:\"Tamanho total dos arquivos excedido\",labelMaxTotalFileSize:\"Tamanho total permitido: {filesize}\",labelFileTypeNotAllowed:\"Tipo de arquivo inv\\xE1lido\",fileValidateTypeLabelExpectedTypes:\"Tipos de arquivo suportados s\\xE3o {allButLastType} ou {lastType}\",imageValidateSizeLabelFormatError:\"Tipo de imagem inv\\xE1lida\",imageValidateSizeLabelImageSizeTooSmall:\"Imagem muito pequena\",imageValidateSizeLabelImageSizeTooBig:\"Imagem muito grande\",imageValidateSizeLabelExpectedMinSize:\"Tamanho m\\xEDnimo permitida: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Tamanho m\\xE1ximo permitido: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Resolu\\xE7\\xE3o muito baixa\",imageValidateSizeLabelImageResolutionTooHigh:\"Resolu\\xE7\\xE3o muito alta\",imageValidateSizeLabelExpectedMinResolution:\"Resolu\\xE7\\xE3o m\\xEDnima permitida: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Resolu\\xE7\\xE3o m\\xE1xima permitida: {maxResolution}\"};var ar={labelIdle:'Trage \\u0219i plaseaz\\u0103 fi\\u0219iere sau <span class=\"filepond--label-action\"> Caut\\u0103-le </span>',labelInvalidField:\"C\\xE2mpul con\\u021Bine fi\\u0219iere care nu sunt valide\",labelFileWaitingForSize:\"\\xCEn a\\u0219teptarea dimensiunii\",labelFileSizeNotAvailable:\"Dimensiunea nu este diponibil\\u0103\",labelFileLoading:\"Se \\xEEncarc\\u0103\",labelFileLoadError:\"Eroare la \\xEEnc\\u0103rcare\",labelFileProcessing:\"Se \\xEEncarc\\u0103\",labelFileProcessingComplete:\"\\xCEnc\\u0103rcare finalizat\\u0103\",labelFileProcessingAborted:\"\\xCEnc\\u0103rcare anulat\\u0103\",labelFileProcessingError:\"Eroare la \\xEEnc\\u0103rcare\",labelFileProcessingRevertError:\"Eroare la anulare\",labelFileRemoveError:\"Eroare la \\u015Ftergere\",labelTapToCancel:\"apas\\u0103 pentru a anula\",labelTapToRetry:\"apas\\u0103 pentru a re\\xEEncerca\",labelTapToUndo:\"apas\\u0103 pentru a anula\",labelButtonRemoveItem:\"\\u015Eterge\",labelButtonAbortItemLoad:\"Anuleaz\\u0103\",labelButtonRetryItemLoad:\"Re\\xEEncearc\\u0103\",labelButtonAbortItemProcessing:\"Anuleaz\\u0103\",labelButtonUndoItemProcessing:\"Anuleaz\\u0103\",labelButtonRetryItemProcessing:\"Re\\xEEncearc\\u0103\",labelButtonProcessItem:\"\\xCEncarc\\u0103\",labelMaxFileSizeExceeded:\"Fi\\u0219ierul este prea mare\",labelMaxFileSize:\"Dimensiunea maxim\\u0103 a unui fi\\u0219ier este de {filesize}\",labelMaxTotalFileSizeExceeded:\"Dimensiunea total\\u0103 maxim\\u0103 a fost dep\\u0103\\u0219it\\u0103\",labelMaxTotalFileSize:\"Dimensiunea total\\u0103 maxim\\u0103 a fi\\u0219ierelor este de {filesize}\",labelFileTypeNotAllowed:\"Tipul fi\\u0219ierului nu este valid\",fileValidateTypeLabelExpectedTypes:\"Se a\\u0219teapt\\u0103 {allButLastType} sau {lastType}\",imageValidateSizeLabelFormatError:\"Formatul imaginii nu este acceptat\",imageValidateSizeLabelImageSizeTooSmall:\"Imaginea este prea mic\\u0103\",imageValidateSizeLabelImageSizeTooBig:\"Imaginea este prea mare\",imageValidateSizeLabelExpectedMinSize:\"M\\u0103rimea minim\\u0103 este de {maxWidth} x {maxHeight}\",imageValidateSizeLabelExpectedMaxSize:\"M\\u0103rimea maxim\\u0103 este de {maxWidth} x {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Rezolu\\u021Bia este prea mic\\u0103\",imageValidateSizeLabelImageResolutionTooHigh:\"Rezolu\\u021Bia este prea mare\",imageValidateSizeLabelExpectedMinResolution:\"Rezolu\\u021Bia minim\\u0103 este de {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Rezolu\\u021Bia maxim\\u0103 este de {maxResolution}\"};var nr={labelIdle:'\\u041F\\u0435\\u0440\\u0435\\u0442\\u0430\\u0449\\u0438\\u0442\\u0435 \\u0444\\u0430\\u0439\\u043B\\u044B \\u0438\\u043B\\u0438 <span class=\"filepond--label-action\"> \\u0432\\u044B\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 </span>',labelInvalidField:\"\\u041F\\u043E\\u043B\\u0435 \\u0441\\u043E\\u0434\\u0435\\u0440\\u0436\\u0438\\u0442 \\u043D\\u0435\\u0434\\u043E\\u043F\\u0443\\u0441\\u0442\\u0438\\u043C\\u044B\\u0435 \\u0444\\u0430\\u0439\\u043B\\u044B\",labelFileWaitingForSize:\"\\u0423\\u043A\\u0430\\u0436\\u0438\\u0442\\u0435 \\u0440\\u0430\\u0437\\u043C\\u0435\\u0440\",labelFileSizeNotAvailable:\"\\u0420\\u0430\\u0437\\u043C\\u0435\\u0440 \\u043D\\u0435 \\u043F\\u043E\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442\\u0441\\u044F\",labelFileLoading:\"\\u041E\\u0436\\u0438\\u0434\\u0430\\u043D\\u0438\\u0435\",labelFileLoadError:\"\\u041E\\u0448\\u0438\\u0431\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u043E\\u0436\\u0438\\u0434\\u0430\\u043D\\u0438\\u0438\",labelFileProcessing:\"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043A\\u0430\",labelFileProcessingComplete:\"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043A\\u0430 \\u0437\\u0430\\u0432\\u0435\\u0440\\u0448\\u0435\\u043D\\u0430\",labelFileProcessingAborted:\"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043A\\u0430 \\u043E\\u0442\\u043C\\u0435\\u043D\\u0435\\u043D\\u0430\",labelFileProcessingError:\"\\u041E\\u0448\\u0438\\u0431\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0437\\u043A\\u0435\",labelFileProcessingRevertError:\"\\u041E\\u0448\\u0438\\u0431\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u0432\\u043E\\u0437\\u0432\\u0440\\u0430\\u0442\\u0435\",labelFileRemoveError:\"\\u041E\\u0448\\u0438\\u0431\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u0443\\u0434\\u0430\\u043B\\u0435\\u043D\\u0438\\u0438\",labelTapToCancel:\"\\u043D\\u0430\\u0436\\u043C\\u0438\\u0442\\u0435 \\u0434\\u043B\\u044F \\u043E\\u0442\\u043C\\u0435\\u043D\\u044B\",labelTapToRetry:\"\\u043D\\u0430\\u0436\\u043C\\u0438\\u0442\\u0435, \\u0447\\u0442\\u043E\\u0431\\u044B \\u043F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u044C \\u043F\\u043E\\u043F\\u044B\\u0442\\u043A\\u0443\",labelTapToUndo:\"\\u043D\\u0430\\u0436\\u043C\\u0438\\u0442\\u0435 \\u0434\\u043B\\u044F \\u043E\\u0442\\u043C\\u0435\\u043D\\u044B \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0435\\u0433\\u043E \\u0434\\u0435\\u0439\\u0441\\u0442\\u0432\\u0438\\u044F\",labelButtonRemoveItem:\"\\u0423\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C\",labelButtonAbortItemLoad:\"\\u041F\\u0440\\u0435\\u043A\\u0440\\u0430\\u0449\\u0435\\u043D\\u043E\",labelButtonRetryItemLoad:\"\\u041F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u0435 \\u043F\\u043E\\u043F\\u044B\\u0442\\u043A\\u0443\",labelButtonAbortItemProcessing:\"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\",labelButtonUndoItemProcessing:\"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430 \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0435\\u0433\\u043E \\u0434\\u0435\\u0439\\u0441\\u0442\\u0432\\u0438\\u044F\",labelButtonRetryItemProcessing:\"\\u041F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u0435 \\u043F\\u043E\\u043F\\u044B\\u0442\\u043A\\u0443\",labelButtonProcessItem:\"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043A\\u0430\",labelMaxFileSizeExceeded:\"\\u0424\\u0430\\u0439\\u043B \\u0441\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u0431\\u043E\\u043B\\u044C\\u0448\\u043E\\u0439\",labelMaxFileSize:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u0440\\u0430\\u0437\\u043C\\u0435\\u0440 \\u0444\\u0430\\u0439\\u043B\\u0430: {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u041F\\u0440\\u0435\\u0432\\u044B\\u0448\\u0435\\u043D \\u043C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u0440\\u0430\\u0437\\u043C\\u0435\\u0440\",labelMaxTotalFileSize:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u0440\\u0430\\u0437\\u043C\\u0435\\u0440 \\u0444\\u0430\\u0439\\u043B\\u0430: {filesize}\",labelFileTypeNotAllowed:\"\\u0424\\u0430\\u0439\\u043B \\u043D\\u0435\\u0432\\u0435\\u0440\\u043D\\u043E\\u0433\\u043E \\u0442\\u0438\\u043F\\u0430\",fileValidateTypeLabelExpectedTypes:\"\\u041E\\u0436\\u0438\\u0434\\u0430\\u0435\\u0442\\u0441\\u044F {allButLastType} \\u0438\\u043B\\u0438 {lastType}\",imageValidateSizeLabelFormatError:\"\\u0422\\u0438\\u043F \\u0438\\u0437\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u0438\\u044F \\u043D\\u0435 \\u043F\\u043E\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442\\u0441\\u044F\",imageValidateSizeLabelImageSizeTooSmall:\"\\u0418\\u0437\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u0438\\u0435 \\u0441\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u043C\\u0430\\u043B\\u0435\\u043D\\u044C\\u043A\\u043E\\u0435\",imageValidateSizeLabelImageSizeTooBig:\"\\u0418\\u0437\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u0438\\u0435 \\u0441\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u0431\\u043E\\u043B\\u044C\\u0448\\u043E\\u0435\",imageValidateSizeLabelExpectedMinSize:\"\\u041C\\u0438\\u043D\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u0440\\u0430\\u0437\\u043C\\u0435\\u0440: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u0440\\u0430\\u0437\\u043C\\u0435\\u0440: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0420\\u0430\\u0437\\u0440\\u0435\\u0448\\u0435\\u043D\\u0438\\u0435 \\u0441\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u043D\\u0438\\u0437\\u043A\\u043E\\u0435\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0420\\u0430\\u0437\\u0440\\u0435\\u0448\\u0435\\u043D\\u0438\\u0435 \\u0441\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u0432\\u044B\\u0441\\u043E\\u043A\\u043E\\u0435\",imageValidateSizeLabelExpectedMinResolution:\"\\u041C\\u0438\\u043D\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u043E\\u0435 \\u0440\\u0430\\u0437\\u0440\\u0435\\u0448\\u0435\\u043D\\u0438\\u0435: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u043E\\u0435 \\u0440\\u0430\\u0437\\u0440\\u0435\\u0448\\u0435\\u043D\\u0438\\u0435: {maxResolution}\"};var lr={labelIdle:'Natiahn\\xFA\\u0165 s\\xFAbor (drag&drop) alebo <span class=\"filepond--label-action\"> Vyh\\u013Eada\\u0165 </span>',labelInvalidField:\"Pole obsahuje chybn\\xE9 s\\xFAbory\",labelFileWaitingForSize:\"Zis\\u0165uje sa ve\\u013Ekos\\u0165\",labelFileSizeNotAvailable:\"Nezn\\xE1ma ve\\u013Ekos\\u0165\",labelFileLoading:\"Pren\\xE1\\u0161a sa\",labelFileLoadError:\"Chyba pri prenose\",labelFileProcessing:\"Prebieha upload\",labelFileProcessingComplete:\"Upload dokon\\u010Den\\xFD\",labelFileProcessingAborted:\"Upload stornovan\\xFD\",labelFileProcessingError:\"Chyba pri uploade\",labelFileProcessingRevertError:\"Chyba pri obnove\",labelFileRemoveError:\"Chyba pri odstr\\xE1nen\\xED\",labelTapToCancel:\"Kliknite pre storno\",labelTapToRetry:\"Kliknite pre opakovanie\",labelTapToUndo:\"Kliknite pre vr\\xE1tenie\",labelButtonRemoveItem:\"Odstr\\xE1ni\\u0165\",labelButtonAbortItemLoad:\"Storno\",labelButtonRetryItemLoad:\"Opakova\\u0165\",labelButtonAbortItemProcessing:\"Sp\\xE4\\u0165\",labelButtonUndoItemProcessing:\"Vr\\xE1ti\\u0165\",labelButtonRetryItemProcessing:\"Opakova\\u0165\",labelButtonProcessItem:\"Upload\",labelMaxFileSizeExceeded:\"S\\xFAbor je pr\\xEDli\\u0161 ve\\u013Ek\\xFD\",labelMaxFileSize:\"Najv\\xE4\\u010D\\u0161ia ve\\u013Ekos\\u0165 s\\xFAboru je {filesize}\",labelMaxTotalFileSizeExceeded:\"Prekro\\u010Den\\xE1 maxim\\xE1lna celkov\\xE1 ve\\u013Ekos\\u0165 s\\xFAboru\",labelMaxTotalFileSize:\"Maxim\\xE1lna celkov\\xE1 ve\\u013Ekos\\u0165 s\\xFAboru je {filesize}\",labelFileTypeNotAllowed:\"S\\xFAbor je nespr\\xE1vneho typu\",fileValidateTypeLabelExpectedTypes:\"O\\u010Dak\\xE1va sa {allButLastType} alebo {lastType}\",imageValidateSizeLabelFormatError:\"Obr\\xE1zok tohto typu nie je podporovan\\xFD\",imageValidateSizeLabelImageSizeTooSmall:\"Obr\\xE1zok je pr\\xEDli\\u0161 mal\\xFD\",imageValidateSizeLabelImageSizeTooBig:\"Obr\\xE1zok je pr\\xEDli\\u0161 ve\\u013Ek\\xFD\",imageValidateSizeLabelExpectedMinSize:\"Minim\\xE1lny rozmer je {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maxim\\xE1lny rozmer je {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Rozl\\xED\\u0161enie je pr\\xEDli\\u0161 mal\\xE9\",imageValidateSizeLabelImageResolutionTooHigh:\"Rozli\\u0161enie je pr\\xEDli\\u0161 ve\\u013Ek\\xE9\",imageValidateSizeLabelExpectedMinResolution:\"Minim\\xE1lne rozl\\xED\\u0161enie je {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maxim\\xE1lne rozl\\xED\\u0161enie je {maxResolution}\"};var or={labelIdle:'Drag och sl\\xE4pp dina filer eller <span class=\"filepond--label-action\"> Bl\\xE4ddra </span>',labelInvalidField:\"F\\xE4ltet inneh\\xE5ller felaktiga filer\",labelFileWaitingForSize:\"V\\xE4ntar p\\xE5 storlek\",labelFileSizeNotAvailable:\"Storleken finns inte tillg\\xE4nglig\",labelFileLoading:\"Laddar\",labelFileLoadError:\"Fel under laddning\",labelFileProcessing:\"Laddar upp\",labelFileProcessingComplete:\"Uppladdning klar\",labelFileProcessingAborted:\"Uppladdning avbruten\",labelFileProcessingError:\"Fel under uppladdning\",labelFileProcessingRevertError:\"Fel under \\xE5terst\\xE4llning\",labelFileRemoveError:\"Fel under borttagning\",labelTapToCancel:\"tryck f\\xF6r att avbryta\",labelTapToRetry:\"tryck f\\xF6r att f\\xF6rs\\xF6ka igen\",labelTapToUndo:\"tryck f\\xF6r att \\xE5ngra\",labelButtonRemoveItem:\"Tabort\",labelButtonAbortItemLoad:\"Avbryt\",labelButtonRetryItemLoad:\"F\\xF6rs\\xF6k igen\",labelButtonAbortItemProcessing:\"Avbryt\",labelButtonUndoItemProcessing:\"\\xC5ngra\",labelButtonRetryItemProcessing:\"F\\xF6rs\\xF6k igen\",labelButtonProcessItem:\"Ladda upp\",labelMaxFileSizeExceeded:\"Filen \\xE4r f\\xF6r stor\",labelMaxFileSize:\"St\\xF6rsta till\\xE5tna filstorlek \\xE4r {filesize}\",labelMaxTotalFileSizeExceeded:\"Maximal uppladdningsstorlek uppn\\xE5d\",labelMaxTotalFileSize:\"Maximal uppladdningsstorlek \\xE4r {filesize}\",labelFileTypeNotAllowed:\"Felaktig filtyp\",fileValidateTypeLabelExpectedTypes:\"Godk\\xE4nda filtyper {allButLastType} eller {lastType}\",imageValidateSizeLabelFormatError:\"Bildtypen saknar st\\xF6d\",imageValidateSizeLabelImageSizeTooSmall:\"Bilden \\xE4r f\\xF6r liten\",imageValidateSizeLabelImageSizeTooBig:\"Bilden \\xE4r f\\xF6r stor\",imageValidateSizeLabelExpectedMinSize:\"Minimal storlek \\xE4r {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maximal storlek \\xE4r {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"Uppl\\xF6sningen \\xE4r f\\xF6r l\\xE5g\",imageValidateSizeLabelImageResolutionTooHigh:\"Uppl\\xF6sningen \\xE4r f\\xF6r h\\xF6g\",imageValidateSizeLabelExpectedMinResolution:\"Minsta till\\xE5tna uppl\\xF6sning \\xE4r {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"H\\xF6gsta till\\xE5tna uppl\\xF6sning \\xE4r {maxResolution}\"};var rr={labelIdle:'Dosyan\\u0131z\\u0131 S\\xFCr\\xFCkleyin & B\\u0131rak\\u0131n ya da <span class=\"filepond--label-action\"> Se\\xE7in </span>',labelInvalidField:\"Alan ge\\xE7ersiz dosyalar i\\xE7eriyor\",labelFileWaitingForSize:\"Boyut hesaplan\\u0131yor\",labelFileSizeNotAvailable:\"Boyut mevcut de\\u011Fil\",labelFileLoading:\"Y\\xFCkleniyor\",labelFileLoadError:\"Y\\xFCkleme s\\u0131ras\\u0131nda hata olu\\u015Ftu\",labelFileProcessing:\"Y\\xFCkleniyor\",labelFileProcessingComplete:\"Y\\xFCkleme tamamland\\u0131\",labelFileProcessingAborted:\"Y\\xFCkleme iptal edildi\",labelFileProcessingError:\"Y\\xFCklerken hata olu\\u015Ftu\",labelFileProcessingRevertError:\"Geri \\xE7ekerken hata olu\\u015Ftu\",labelFileRemoveError:\"Kald\\u0131r\\u0131rken hata olu\\u015Ftu\",labelTapToCancel:\"\\u0130ptal etmek i\\xE7in t\\u0131klay\\u0131n\",labelTapToRetry:\"Tekrar denemek i\\xE7in t\\u0131klay\\u0131n\",labelTapToUndo:\"Geri almak i\\xE7in t\\u0131klay\\u0131n\",labelButtonRemoveItem:\"Kald\\u0131r\",labelButtonAbortItemLoad:\"\\u0130ptal Et\",labelButtonRetryItemLoad:\"Tekrar dene\",labelButtonAbortItemProcessing:\"\\u0130ptal et\",labelButtonUndoItemProcessing:\"Geri Al\",labelButtonRetryItemProcessing:\"Tekrar dene\",labelButtonProcessItem:\"Y\\xFCkle\",labelMaxFileSizeExceeded:\"Dosya \\xE7ok b\\xFCy\\xFCk\",labelMaxFileSize:\"En fazla dosya boyutu: {filesize}\",labelMaxTotalFileSizeExceeded:\"Maximum boyut a\\u015F\\u0131ld\\u0131\",labelMaxTotalFileSize:\"Maximum dosya boyutu :{filesize}\",labelFileTypeNotAllowed:\"Ge\\xE7ersiz dosya tipi\",fileValidateTypeLabelExpectedTypes:\"\\u015Eu {allButLastType} ya da \\u015Fu dosya olmas\\u0131 gerekir: {lastType}\",imageValidateSizeLabelFormatError:\"Resim tipi desteklenmiyor\",imageValidateSizeLabelImageSizeTooSmall:\"Resim \\xE7ok k\\xFC\\xE7\\xFCk\",imageValidateSizeLabelImageSizeTooBig:\"Resim \\xE7ok b\\xFCy\\xFCk\",imageValidateSizeLabelExpectedMinSize:\"Minimum boyut {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"Maximum boyut {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\xC7\\xF6z\\xFCn\\xFCrl\\xFCk \\xE7ok d\\xFC\\u015F\\xFCk\",imageValidateSizeLabelImageResolutionTooHigh:\"\\xC7\\xF6z\\xFCn\\xFCrl\\xFCk \\xE7ok y\\xFCksek\",imageValidateSizeLabelExpectedMinResolution:\"Minimum \\xE7\\xF6z\\xFCn\\xFCrl\\xFCk {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"Maximum \\xE7\\xF6z\\xFCn\\xFCrl\\xFCk {maxResolution}\"};var sr={labelIdle:'\\u041F\\u0435\\u0440\\u0435\\u0442\\u044F\\u0433\\u043D\\u0456\\u0442\\u044C \\u0444\\u0430\\u0439\\u043B\\u0438 \\u0430\\u0431\\u043E <span class=\"filepond--label-action\"> \\u0432\\u0438\\u0431\\u0435\\u0440\\u0456\\u0442\\u044C </span>',labelInvalidField:\"\\u041F\\u043E\\u043B\\u0435 \\u043C\\u0456\\u0441\\u0442\\u0438\\u0442\\u044C \\u043D\\u0435\\u0434\\u043E\\u043F\\u0443\\u0441\\u0442\\u0438\\u043C\\u0456 \\u0444\\u0430\\u0439\\u043B\\u0438\",labelFileWaitingForSize:\"\\u0412\\u043A\\u0430\\u0436\\u0456\\u0442\\u044C \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440\",labelFileSizeNotAvailable:\"\\u0420\\u043E\\u0437\\u043C\\u0456\\u0440 \\u043D\\u0435 \\u0434\\u043E\\u0441\\u0442\\u0443\\u043F\\u043D\\u0438\\u0439\",labelFileLoading:\"\\u041E\\u0447\\u0456\\u043A\\u0443\\u0432\\u0430\\u043D\\u043D\\u044F\",labelFileLoadError:\"\\u041F\\u043E\\u043C\\u0438\\u043B\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u043E\\u0447\\u0456\\u043A\\u0443\\u0432\\u0430\\u043D\\u043D\\u0456\",labelFileProcessing:\"\\u0417\\u0430\\u0432\\u0430\\u043D\\u0442\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F\",labelFileProcessingComplete:\"\\u0417\\u0430\\u0432\\u0430\\u043D\\u0442\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u0437\\u0430\\u0432\\u0435\\u0440\\u0448\\u0435\\u043D\\u043E\",labelFileProcessingAborted:\"\\u0417\\u0430\\u0432\\u0430\\u043D\\u0442\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u0441\\u043A\\u0430\\u0441\\u043E\\u0432\\u0430\\u043D\\u043E\",labelFileProcessingError:\"\\u041F\\u043E\\u043C\\u0438\\u043B\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u0437\\u0430\\u0432\\u0430\\u043D\\u0442\\u0430\\u0436\\u0435\\u043D\\u043D\\u0456\",labelFileProcessingRevertError:\"\\u041F\\u043E\\u043C\\u0438\\u043B\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u0432\\u0456\\u0434\\u043D\\u043E\\u0432\\u043B\\u0435\\u043D\\u043D\\u0456\",labelFileRemoveError:\"\\u041F\\u043E\\u043C\\u0438\\u043B\\u043A\\u0430 \\u043F\\u0440\\u0438 \\u0432\\u0438\\u0434\\u0430\\u043B\\u0435\\u043D\\u043D\\u0456\",labelTapToCancel:\"\\u0412\\u0456\\u0434\\u043C\\u0456\\u043D\\u0438\\u0442\\u0438\",labelTapToRetry:\"\\u041D\\u0430\\u0442\\u0438\\u0441\\u043D\\u0456\\u0442\\u044C, \\u0449\\u043E\\u0431 \\u043F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u0438 \\u0441\\u043F\\u0440\\u043E\\u0431\\u0443\",labelTapToUndo:\"\\u041D\\u0430\\u0442\\u0438\\u0441\\u043D\\u0456\\u0442\\u044C, \\u0449\\u043E\\u0431 \\u0432\\u0456\\u0434\\u043C\\u0456\\u043D\\u0438\\u0442\\u0438 \\u043E\\u0441\\u0442\\u0430\\u043D\\u043D\\u044E \\u0434\\u0456\\u044E\",labelButtonRemoveItem:\"\\u0412\\u0438\\u0434\\u0430\\u043B\\u0438\\u0442\\u0438\",labelButtonAbortItemLoad:\"\\u0412\\u0456\\u0434\\u043C\\u0456\\u043D\\u0438\\u0442\\u0438\",labelButtonRetryItemLoad:\"\\u041F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u0438 \\u0441\\u043F\\u0440\\u043E\\u0431\\u0443\",labelButtonAbortItemProcessing:\"\\u0412\\u0456\\u0434\\u043C\\u0456\\u043D\\u0438\\u0442\\u0438\",labelButtonUndoItemProcessing:\"\\u0412\\u0456\\u0434\\u043C\\u0456\\u043D\\u0438\\u0442\\u0438 \\u043E\\u0441\\u0442\\u0430\\u043D\\u043D\\u044E \\u0434\\u0456\\u044E\",labelButtonRetryItemProcessing:\"\\u041F\\u043E\\u0432\\u0442\\u043E\\u0440\\u0438\\u0442\\u0438 \\u0441\\u043F\\u0440\\u043E\\u0431\\u0443\",labelButtonProcessItem:\"\\u0417\\u0430\\u0432\\u0430\\u043D\\u0442\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F\",labelMaxFileSizeExceeded:\"\\u0424\\u0430\\u0439\\u043B \\u0437\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u0432\\u0435\\u043B\\u0438\\u043A\\u0438\\u0439\",labelMaxFileSize:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440 \\u0444\\u0430\\u0439\\u043B\\u0443: {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u041F\\u0435\\u0440\\u0435\\u0432\\u0438\\u0449\\u0435\\u043D\\u043E \\u043C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0437\\u0430\\u0433\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440\",labelMaxTotalFileSize:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0437\\u0430\\u0433\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440: {filesize}\",labelFileTypeNotAllowed:\"\\u0424\\u043E\\u0440\\u043C\\u0430\\u0442 \\u0444\\u0430\\u0439\\u043B\\u0443 \\u043D\\u0435 \\u043F\\u0456\\u0434\\u0442\\u0440\\u0438\\u043C\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F\",fileValidateTypeLabelExpectedTypes:\"\\u041E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F {allButLastType} \\u0430\\u0431\\u043E {lastType}\",imageValidateSizeLabelFormatError:\"\\u0424\\u043E\\u0440\\u043C\\u0430\\u0442 \\u0437\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u043D\\u0435 \\u043F\\u0456\\u0434\\u0442\\u0440\\u0438\\u043C\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F\",imageValidateSizeLabelImageSizeTooSmall:\"\\u0417\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u0437\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u043C\\u0430\\u043B\\u0435\\u043D\\u044C\\u043A\\u0435\",imageValidateSizeLabelImageSizeTooBig:\"\\u0417\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u0437\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u0432\\u0435\\u043B\\u0438\\u043A\\u0435\",imageValidateSizeLabelExpectedMinSize:\"\\u041C\\u0456\\u043D\\u0456\\u043C\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0420\\u043E\\u0437\\u043C\\u0456\\u0440\\u0438 \\u0437\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u0437\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u043C\\u0430\\u043B\\u0435\\u043D\\u044C\\u043A\\u0456\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0420\\u043E\\u0437\\u043C\\u0456\\u0440\\u0438 \\u0437\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u043D\\u044F \\u0437\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u0432\\u0435\\u043B\\u0438\\u043A\\u0456\",imageValidateSizeLabelExpectedMinResolution:\"\\u041C\\u0456\\u043D\\u0456\\u043C\\u0430\\u043B\\u044C\\u043D\\u0456 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440\\u0438: {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u041C\\u0430\\u043A\\u0441\\u0438\\u043C\\u0430\\u043B\\u044C\\u043D\\u0456 \\u0440\\u043E\\u0437\\u043C\\u0456\\u0440\\u0438: {maxResolution}\"};var cr={labelIdle:'K\\xE9o th\\u1EA3 t\\u1EC7p c\\u1EE7a b\\u1EA1n ho\\u1EB7c <span class=\"filepond--label-action\"> T\\xECm ki\\u1EBFm </span>',labelInvalidField:\"Tr\\u01B0\\u1EDDng ch\\u1EE9a c\\xE1c t\\u1EC7p kh\\xF4ng h\\u1EE3p l\\u1EC7\",labelFileWaitingForSize:\"\\u0110ang ch\\u1EDD k\\xEDch th\\u01B0\\u1EDBc\",labelFileSizeNotAvailable:\"K\\xEDch th\\u01B0\\u1EDBc kh\\xF4ng c\\xF3 s\\u1EB5n\",labelFileLoading:\"\\u0110ang t\\u1EA3i\",labelFileLoadError:\"L\\u1ED7i khi t\\u1EA3i\",labelFileProcessing:\"\\u0110ang t\\u1EA3i l\\xEAn\",labelFileProcessingComplete:\"T\\u1EA3i l\\xEAn th\\xE0nh c\\xF4ng\",labelFileProcessingAborted:\"\\u0110\\xE3 hu\\u1EF7 t\\u1EA3i l\\xEAn\",labelFileProcessingError:\"L\\u1ED7i khi t\\u1EA3i l\\xEAn\",labelFileProcessingRevertError:\"L\\u1ED7i khi ho\\xE0n nguy\\xEAn\",labelFileRemoveError:\"L\\u1ED7i khi x\\xF3a\",labelTapToCancel:\"nh\\u1EA5n \\u0111\\u1EC3 h\\u1EE7y\",labelTapToRetry:\"nh\\u1EA5n \\u0111\\u1EC3 th\\u1EED l\\u1EA1i\",labelTapToUndo:\"nh\\u1EA5n \\u0111\\u1EC3 ho\\xE0n t\\xE1c\",labelButtonRemoveItem:\"Xo\\xE1\",labelButtonAbortItemLoad:\"Hu\\u1EF7 b\\u1ECF\",labelButtonRetryItemLoad:\"Th\\u1EED l\\u1EA1i\",labelButtonAbortItemProcessing:\"H\\u1EE7y b\\u1ECF\",labelButtonUndoItemProcessing:\"Ho\\xE0n t\\xE1c\",labelButtonRetryItemProcessing:\"Th\\u1EED l\\u1EA1i\",labelButtonProcessItem:\"T\\u1EA3i l\\xEAn\",labelMaxFileSizeExceeded:\"T\\u1EADp tin qu\\xE1 l\\u1EDBn\",labelMaxFileSize:\"K\\xEDch th\\u01B0\\u1EDBc t\\u1EC7p t\\u1ED1i \\u0111a l\\xE0 {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u0110\\xE3 v\\u01B0\\u1EE3t qu\\xE1 t\\u1ED5ng k\\xEDch th\\u01B0\\u1EDBc t\\u1ED1i \\u0111a\",labelMaxTotalFileSize:\"T\\u1ED5ng k\\xEDch th\\u01B0\\u1EDBc t\\u1EC7p t\\u1ED1i \\u0111a l\\xE0 {filesize}\",labelFileTypeNotAllowed:\"T\\u1EC7p thu\\u1ED9c lo\\u1EA1i kh\\xF4ng h\\u1EE3p l\\u1EC7\",fileValidateTypeLabelExpectedTypes:\"Ki\\u1EC3u t\\u1EC7p h\\u1EE3p l\\u1EC7 l\\xE0 {allButLastType} ho\\u1EB7c {lastType}\",imageValidateSizeLabelFormatError:\"Lo\\u1EA1i h\\xECnh \\u1EA3nh kh\\xF4ng \\u0111\\u01B0\\u1EE3c h\\u1ED7 tr\\u1EE3\",imageValidateSizeLabelImageSizeTooSmall:\"H\\xECnh \\u1EA3nh qu\\xE1 nh\\u1ECF\",imageValidateSizeLabelImageSizeTooBig:\"H\\xECnh \\u1EA3nh qu\\xE1 l\\u1EDBn\",imageValidateSizeLabelExpectedMinSize:\"K\\xEDch th\\u01B0\\u1EDBc t\\u1ED1i thi\\u1EC3u l\\xE0 {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"K\\xEDch th\\u01B0\\u1EDBc t\\u1ED1i \\u0111a l\\xE0 {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u0110\\u1ED9 ph\\xE2n gi\\u1EA3i qu\\xE1 th\\u1EA5p\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u0110\\u1ED9 ph\\xE2n gi\\u1EA3i qu\\xE1 cao\",imageValidateSizeLabelExpectedMinResolution:\"\\u0110\\u1ED9 ph\\xE2n gi\\u1EA3i t\\u1ED1i thi\\u1EC3u l\\xE0 {minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u0110\\u1ED9 ph\\xE2n gi\\u1EA3i t\\u1ED1i \\u0111a l\\xE0 {maxResolution}\"};var dr={labelIdle:'\\u62D6\\u653E\\u6587\\u4EF6\\uFF0C\\u6216\\u8005 <span class=\"filepond--label-action\"> \\u6D4F\\u89C8 </span>',labelInvalidField:\"\\u5B57\\u6BB5\\u5305\\u542B\\u65E0\\u6548\\u6587\\u4EF6\",labelFileWaitingForSize:\"\\u8BA1\\u7B97\\u6587\\u4EF6\\u5927\\u5C0F\",labelFileSizeNotAvailable:\"\\u6587\\u4EF6\\u5927\\u5C0F\\u4E0D\\u53EF\\u7528\",labelFileLoading:\"\\u52A0\\u8F7D\",labelFileLoadError:\"\\u52A0\\u8F7D\\u9519\\u8BEF\",labelFileProcessing:\"\\u4E0A\\u4F20\",labelFileProcessingComplete:\"\\u5DF2\\u4E0A\\u4F20\",labelFileProcessingAborted:\"\\u4E0A\\u4F20\\u5DF2\\u53D6\\u6D88\",labelFileProcessingError:\"\\u4E0A\\u4F20\\u51FA\\u9519\",labelFileProcessingRevertError:\"\\u8FD8\\u539F\\u51FA\\u9519\",labelFileRemoveError:\"\\u5220\\u9664\\u51FA\\u9519\",labelTapToCancel:\"\\u70B9\\u51FB\\u53D6\\u6D88\",labelTapToRetry:\"\\u70B9\\u51FB\\u91CD\\u8BD5\",labelTapToUndo:\"\\u70B9\\u51FB\\u64A4\\u6D88\",labelButtonRemoveItem:\"\\u5220\\u9664\",labelButtonAbortItemLoad:\"\\u4E2D\\u6B62\",labelButtonRetryItemLoad:\"\\u91CD\\u8BD5\",labelButtonAbortItemProcessing:\"\\u53D6\\u6D88\",labelButtonUndoItemProcessing:\"\\u64A4\\u6D88\",labelButtonRetryItemProcessing:\"\\u91CD\\u8BD5\",labelButtonProcessItem:\"\\u4E0A\\u4F20\",labelMaxFileSizeExceeded:\"\\u6587\\u4EF6\\u592A\\u5927\",labelMaxFileSize:\"\\u6700\\u5927\\u503C: {filesize}\",labelMaxTotalFileSizeExceeded:\"\\u8D85\\u8FC7\\u6700\\u5927\\u6587\\u4EF6\\u5927\\u5C0F\",labelMaxTotalFileSize:\"\\u6700\\u5927\\u6587\\u4EF6\\u5927\\u5C0F\\uFF1A{filesize}\",labelFileTypeNotAllowed:\"\\u6587\\u4EF6\\u7C7B\\u578B\\u65E0\\u6548\",fileValidateTypeLabelExpectedTypes:\"\\u5E94\\u4E3A {allButLastType} \\u6216 {lastType}\",imageValidateSizeLabelFormatError:\"\\u4E0D\\u652F\\u6301\\u56FE\\u50CF\\u7C7B\\u578B\",imageValidateSizeLabelImageSizeTooSmall:\"\\u56FE\\u50CF\\u592A\\u5C0F\",imageValidateSizeLabelImageSizeTooBig:\"\\u56FE\\u50CF\\u592A\\u5927\",imageValidateSizeLabelExpectedMinSize:\"\\u6700\\u5C0F\\u503C: {minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u6700\\u5927\\u503C: {maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u5206\\u8FA8\\u7387\\u592A\\u4F4E\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u5206\\u8FA8\\u7387\\u592A\\u9AD8\",imageValidateSizeLabelExpectedMinResolution:\"\\u6700\\u5C0F\\u5206\\u8FA8\\u7387\\uFF1A{minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u6700\\u5927\\u5206\\u8FA8\\u7387\\uFF1A{maxResolution}\"};var pr={labelIdle:'\\u62D6\\u653E\\u6A94\\u6848\\uFF0C\\u6216\\u8005 <span class=\"filepond--label-action\"> \\u700F\\u89BD </span>',labelInvalidField:\"\\u4E0D\\u652F\\u63F4\\u6B64\\u6A94\\u6848\",labelFileWaitingForSize:\"\\u6B63\\u5728\\u8A08\\u7B97\\u6A94\\u6848\\u5927\\u5C0F\",labelFileSizeNotAvailable:\"\\u6A94\\u6848\\u5927\\u5C0F\\u4E0D\\u7B26\",labelFileLoading:\"\\u8B80\\u53D6\\u4E2D\",labelFileLoadError:\"\\u8B80\\u53D6\\u932F\\u8AA4\",labelFileProcessing:\"\\u4E0A\\u50B3\",labelFileProcessingComplete:\"\\u5DF2\\u4E0A\\u50B3\",labelFileProcessingAborted:\"\\u4E0A\\u50B3\\u5DF2\\u53D6\\u6D88\",labelFileProcessingError:\"\\u4E0A\\u50B3\\u767C\\u751F\\u932F\\u8AA4\",labelFileProcessingRevertError:\"\\u9084\\u539F\\u932F\\u8AA4\",labelFileRemoveError:\"\\u522A\\u9664\\u932F\\u8AA4\",labelTapToCancel:\"\\u9EDE\\u64CA\\u53D6\\u6D88\",labelTapToRetry:\"\\u9EDE\\u64CA\\u91CD\\u8A66\",labelTapToUndo:\"\\u9EDE\\u64CA\\u9084\\u539F\",labelButtonRemoveItem:\"\\u522A\\u9664\",labelButtonAbortItemLoad:\"\\u505C\\u6B62\",labelButtonRetryItemLoad:\"\\u91CD\\u8A66\",labelButtonAbortItemProcessing:\"\\u53D6\\u6D88\",labelButtonUndoItemProcessing:\"\\u53D6\\u6D88\",labelButtonRetryItemProcessing:\"\\u91CD\\u8A66\",labelButtonProcessItem:\"\\u4E0A\\u50B3\",labelMaxFileSizeExceeded:\"\\u6A94\\u6848\\u904E\\u5927\",labelMaxFileSize:\"\\u6700\\u5927\\u503C\\uFF1A{filesize}\",labelMaxTotalFileSizeExceeded:\"\\u8D85\\u904E\\u6700\\u5927\\u53EF\\u4E0A\\u50B3\\u5927\\u5C0F\",labelMaxTotalFileSize:\"\\u6700\\u5927\\u53EF\\u4E0A\\u50B3\\u5927\\u5C0F\\uFF1A{filesize}\",labelFileTypeNotAllowed:\"\\u4E0D\\u652F\\u63F4\\u6B64\\u985E\\u578B\\u6A94\\u6848\",fileValidateTypeLabelExpectedTypes:\"\\u61C9\\u70BA {allButLastType} \\u6216 {lastType}\",imageValidateSizeLabelFormatError:\"\\u4E0D\\u652F\\u6301\\u6B64\\u985E\\u5716\\u7247\\u985E\\u578B\",imageValidateSizeLabelImageSizeTooSmall:\"\\u5716\\u7247\\u904E\\u5C0F\",imageValidateSizeLabelImageSizeTooBig:\"\\u5716\\u7247\\u904E\\u5927\",imageValidateSizeLabelExpectedMinSize:\"\\u6700\\u5C0F\\u5C3A\\u5BF8\\uFF1A{minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u6700\\u5927\\u5C3A\\u5BF8\\uFF1A{maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u89E3\\u6790\\u5EA6\\u904E\\u4F4E\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u89E3\\u6790\\u5EA6\\u904E\\u9AD8\",imageValidateSizeLabelExpectedMinResolution:\"\\u6700\\u4F4E\\u89E3\\u6790\\u5EA6\\uFF1A{minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u6700\\u9AD8\\u89E3\\u6790\\u5EA6\\uFF1A{maxResolution}\"};var mr={labelIdle:'\\u62D6\\u653E\\u6A94\\u6848\\uFF0C\\u6216\\u8005 <span class=\"filepond--label-action\"> \\u700F\\u89BD </span>',labelInvalidField:\"\\u4E0D\\u652F\\u63F4\\u6B64\\u6A94\\u6848\",labelFileWaitingForSize:\"\\u6B63\\u5728\\u8A08\\u7B97\\u6A94\\u6848\\u5927\\u5C0F\",labelFileSizeNotAvailable:\"\\u6A94\\u6848\\u5927\\u5C0F\\u4E0D\\u7B26\",labelFileLoading:\"\\u8B80\\u53D6\\u4E2D\",labelFileLoadError:\"\\u8B80\\u53D6\\u932F\\u8AA4\",labelFileProcessing:\"\\u4E0A\\u50B3\",labelFileProcessingComplete:\"\\u5DF2\\u4E0A\\u50B3\",labelFileProcessingAborted:\"\\u4E0A\\u50B3\\u5DF2\\u53D6\\u6D88\",labelFileProcessingError:\"\\u4E0A\\u50B3\\u767C\\u751F\\u932F\\u8AA4\",labelFileProcessingRevertError:\"\\u9084\\u539F\\u932F\\u8AA4\",labelFileRemoveError:\"\\u522A\\u9664\\u932F\\u8AA4\",labelTapToCancel:\"\\u9EDE\\u64CA\\u53D6\\u6D88\",labelTapToRetry:\"\\u9EDE\\u64CA\\u91CD\\u8A66\",labelTapToUndo:\"\\u9EDE\\u64CA\\u9084\\u539F\",labelButtonRemoveItem:\"\\u522A\\u9664\",labelButtonAbortItemLoad:\"\\u505C\\u6B62\",labelButtonRetryItemLoad:\"\\u91CD\\u8A66\",labelButtonAbortItemProcessing:\"\\u53D6\\u6D88\",labelButtonUndoItemProcessing:\"\\u53D6\\u6D88\",labelButtonRetryItemProcessing:\"\\u91CD\\u8A66\",labelButtonProcessItem:\"\\u4E0A\\u50B3\",labelMaxFileSizeExceeded:\"\\u6A94\\u6848\\u904E\\u5927\",labelMaxFileSize:\"\\u6700\\u5927\\u503C\\uFF1A{filesize}\",labelMaxTotalFileSizeExceeded:\"\\u8D85\\u904E\\u6700\\u5927\\u53EF\\u4E0A\\u50B3\\u5927\\u5C0F\",labelMaxTotalFileSize:\"\\u6700\\u5927\\u53EF\\u4E0A\\u50B3\\u5927\\u5C0F\\uFF1A{filesize}\",labelFileTypeNotAllowed:\"\\u4E0D\\u652F\\u63F4\\u6B64\\u985E\\u578B\\u6A94\\u6848\",fileValidateTypeLabelExpectedTypes:\"\\u61C9\\u70BA {allButLastType} \\u6216 {lastType}\",imageValidateSizeLabelFormatError:\"\\u4E0D\\u652F\\u6301\\u6B64\\u985E\\u5716\\u7247\\u985E\\u578B\",imageValidateSizeLabelImageSizeTooSmall:\"\\u5716\\u7247\\u904E\\u5C0F\",imageValidateSizeLabelImageSizeTooBig:\"\\u5716\\u7247\\u904E\\u5927\",imageValidateSizeLabelExpectedMinSize:\"\\u6700\\u5C0F\\u5C3A\\u5BF8\\uFF1A{minWidth} \\xD7 {minHeight}\",imageValidateSizeLabelExpectedMaxSize:\"\\u6700\\u5927\\u5C3A\\u5BF8\\uFF1A{maxWidth} \\xD7 {maxHeight}\",imageValidateSizeLabelImageResolutionTooLow:\"\\u89E3\\u6790\\u5EA6\\u904E\\u4F4E\",imageValidateSizeLabelImageResolutionTooHigh:\"\\u89E3\\u6790\\u5EA6\\u904E\\u9AD8\",imageValidateSizeLabelExpectedMinResolution:\"\\u6700\\u4F4E\\u89E3\\u6790\\u5EA6\\uFF1A{minResolution}\",imageValidateSizeLabelExpectedMaxResolution:\"\\u6700\\u9AD8\\u89E3\\u6790\\u5EA6\\uFF1A{maxResolution}\"};ve(Hl);ve(jl);ve($l);ve(Kl);ve(eo);ve(mo);ve(go);ve(_o);ve(Aa);window.FilePond=na;function Og({acceptedFileTypes:e,automaticallyCropImagesAspectRatio:t,automaticallyOpenImageEditorForAspectRatio:i,automaticallyResizeImagesHeight:a,automaticallyResizeImagesMode:n,automaticallyResizeImagesWidth:l,cancelUploadUsing:o,canEditSvgs:r,confirmSvgEditingMessage:s,deleteUploadedFileUsing:p,disabledSvgEditingMessage:c,getUploadedFilesUsing:d,hasCircleCropper:m,hasImageEditor:u,imageEditorEmptyFillColor:g,imageEditorMode:f,imageEditorViewportHeight:h,imageEditorViewportWidth:I,imagePreviewHeight:b,isAvatar:E,isDeletable:v,isDisabled:y,isDownloadable:T,isImageEditorExplicitlyEnabled:_,isMultiple:x,isOpenable:R,isPasteable:P,isPreviewable:z,isReorderable:A,isSvgEditingConfirmed:B,itemPanelAspectRatio:w,loadingIndicatorPosition:F,locale:S,maxFiles:L,maxFilesValidationMessage:D,maxParallelUploads:O,maxSize:U,mimeTypeMap:C,minSize:X,panelAspectRatio:K,panelLayout:Z,placeholder:ce,removeUploadedFileButtonPosition:V,removeUploadedFileUsing:W,reorderUploadedFilesUsing:$,shouldAppendFiles:ie,shouldAutomaticallyUpscaleImagesWhenResizing:ee,shouldOrientImageFromExif:pt,shouldTransformImage:gr,state:fr,uploadButtonPosition:hr,uploadingMessage:br,uploadProgressIndicatorPosition:Er,uploadUsing:Tr}){return{fileKeyIndex:{},pond:null,shouldUpdateState:!0,state:fr,lastState:null,error:null,uploadedFileIndex:{},isEditorOpen:!1,isEditorOpenedForAspectRatio:!1,editingFile:{},currentRatio:\"\",editor:{},visibilityObserver:null,intersectionObserver:null,isInitializing:!1,async init(){if(this.pond||this.isInitializing)return;if(this.isInitializing=!0,!this.visibilityObserver){let k=()=>{this.$el.offsetParent===null||getComputedStyle(this.$el).visibility===\"hidden\"||(this.pond?document.dispatchEvent(new Event(\"visibilitychange\")):this.init())};this.visibilityObserver=new ResizeObserver(()=>k()),this.visibilityObserver.observe(this.$el),this.intersectionObserver=new IntersectionObserver(j=>{j[0]?.isIntersecting&&k()},{threshold:0}),this.intersectionObserver.observe(this.$el)}if(this.$el.offsetParent===null||getComputedStyle(this.$el).visibility===\"hidden\"){this.isInitializing=!1;return}Dt(ur[S]??ur.en),this.pond=ft(this.$refs.input,{acceptedFileTypes:e,allowImageExifOrientation:pt,allowPaste:P,allowRemove:v,allowReorder:A,allowImagePreview:z,allowVideoPreview:z,allowAudioPreview:z,allowImageTransform:gr,credits:!1,files:await this.getFiles(),imageCropAspectRatio:t,imagePreviewHeight:b,imageResizeTargetHeight:a,imageResizeTargetWidth:l,imageResizeMode:n,imageResizeUpscale:ee,imageTransformOutputStripImageHead:!1,itemInsertLocation:ie?\"after\":\"before\",...ce&&{labelIdle:ce},maxFiles:L,maxFileSize:U,minFileSize:X,...O&&{maxParallelUploads:O},styleButtonProcessItemPosition:hr,styleButtonRemoveItemPosition:V,styleItemPanelAspectRatio:w,styleLoadIndicatorPosition:F,stylePanelAspectRatio:K,stylePanelLayout:Z,styleProgressIndicatorPosition:Er,server:{load:async(k,j)=>{let Ne=await(await fetch(k,{cache:\"no-store\"})).blob();j(Ne)},process:(k,j,q,Ne,Me,$e,Ir)=>{this.shouldUpdateState=!1;let za=(\"10000000-1000-4000-8000\"+-1e11).replace(/[018]/g,Zt=>(Zt^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Zt/4).toString(16));return Tr(za,j,Zt=>{this.shouldUpdateState=!0,Ne(Zt)},Me,$e),{abort:()=>{o(za),Ir()}}},remove:async(k,j)=>{let q=this.uploadedFileIndex[k]??null;q&&(await p(q),j())},revert:async(k,j)=>{await W(k),j()}},allowImageEdit:_,imageEditEditor:{open:k=>this.loadEditor(k),onconfirm:()=>{},oncancel:()=>this.closeEditor(),onclose:()=>this.closeEditor()},fileValidateTypeDetectType:(k,j)=>new Promise((q,Ne)=>{let Me=k.name.split(\".\").pop().toLowerCase(),$e=C[Me]||j||Gl.getType(Me);$e?q($e):Ne()})}),this.$watch(\"state\",async()=>{if(this.pond&&this.shouldUpdateState&&this.state!==void 0){if(this.state!==null&&Object.values(this.state).filter(k=>k.startsWith(\"livewire-file:\")).length){this.lastState=null;return}JSON.stringify(this.state)!==this.lastState&&(this.lastState=JSON.stringify(this.state),this.pond.files=await this.getFiles())}}),this.pond.on(\"reorderfiles\",async k=>{let j=k.map(q=>q.source instanceof File?q.serverId:this.uploadedFileIndex[q.source]??null).filter(q=>q);await $(ie?j:j.reverse())}),this.pond.on(\"initfile\",async k=>{T&&(E||this.insertDownloadLink(k))}),this.pond.on(\"initfile\",async k=>{R&&(E||this.insertOpenLink(k))}),this.pond.on(\"addfilestart\",async k=>{this.error=null,k.status===Tt.PROCESSING_QUEUED&&this.dispatchFormEvent(\"form-processing-started\",{message:br})});let N=async()=>{this.pond.getFiles().filter(k=>k.status===Tt.PROCESSING||k.status===Tt.PROCESSING_QUEUED).length||this.dispatchFormEvent(\"form-processing-finished\")};this.pond.on(\"processfile\",N),this.pond.on(\"processfileabort\",N),this.pond.on(\"processfilerevert\",N),this.pond.on(\"removefile\",N),this.pond.on(\"warning\",k=>{k.body===\"Max files\"&&(this.error=D)}),Z===\"compact circle\"&&this.pond.on(\"error\",k=>{this.error=`${k.main}: ${k.sub}`.replace(\"Expects  or\",\"Expects\")}),this.pond.on(\"removefile\",()=>this.error=null),i&&this.pond.on(\"addfile\",(k,j)=>{k||j.file instanceof File&&j.file.type.startsWith(\"image/\")&&this.checkImageAspectRatio(j.file)}),this.isInitializing=!1},destroy(){this.visibilityObserver?.disconnect(),this.intersectionObserver?.disconnect(),this.destroyEditor(),this.pond&&(ht(this.$refs.input),this.pond=null)},dispatchFormEvent(G,N={}){this.$el.closest(\"form\")?.dispatchEvent(new CustomEvent(G,{composed:!0,cancelable:!0,detail:N}))},async getUploadedFiles(){let G=await d();this.fileKeyIndex=G??{},this.uploadedFileIndex=Object.entries(this.fileKeyIndex).filter(([N,k])=>k?.url).reduce((N,[k,j])=>(N[j.url]=k,N),{})},async getFiles(){await this.getUploadedFiles();let G=[];for(let N of Object.values(this.fileKeyIndex))N&&G.push({source:N.url,options:{type:\"local\",...!N.type||z&&(/^audio/.test(N.type)||/^image/.test(N.type)||/^video/.test(N.type))?{}:{file:{name:N.name,size:N.size,type:N.type}}}});return ie?G:G.reverse()},insertDownloadLink(G){if(G.origin!==Bt.LOCAL)return;let N=this.getDownloadLink(G);N&&document.getElementById(`filepond--item-${G.id}`).querySelector(\".filepond--file-info-main\").prepend(N)},insertOpenLink(G){if(G.origin!==Bt.LOCAL)return;let N=this.getOpenLink(G);N&&document.getElementById(`filepond--item-${G.id}`).querySelector(\".filepond--file-info-main\").prepend(N)},getDownloadLink(G){let N=G.source;if(!N)return;let k=document.createElement(\"a\");return k.className=\"filepond--download-icon\",k.href=N,k.download=G.file.name,k},getOpenLink(G){let N=G.source;if(!N)return;let k=document.createElement(\"a\");return k.className=\"filepond--open-icon\",k.href=N,k.target=\"_blank\",k},initEditor(){if(y||!u)return;let G={aspectRatio:i??I/h,autoCropArea:1,center:!0,cropBoxResizable:!0,guides:!0,highlight:!0,responsive:!0,toggleDragModeOnDblclick:!0,viewMode:f,wheelZoomRatio:.02};_&&(G.crop=N=>{this.$refs.xPositionInput.value=Math.round(N.detail.x),this.$refs.yPositionInput.value=Math.round(N.detail.y),this.$refs.heightInput.value=Math.round(N.detail.height),this.$refs.widthInput.value=Math.round(N.detail.width),this.$refs.rotationInput.value=N.detail.rotate}),this.editor=new xa(this.$refs.editor,G)},closeEditor(){if(this.isEditorOpenedForAspectRatio){let G=this.pond.getFiles().find(N=>N.filename===this.editingFile.name);G&&this.pond.removeFile(G.id,{revert:!0}),this.isEditorOpenedForAspectRatio=!1}this.editingFile={},this.isEditorOpen=!1,this.destroyEditor()},fixImageDimensions(G,N){if(G.type!==\"image/svg+xml\")return N(G);let k=new FileReader;k.onload=j=>{let q=new DOMParser().parseFromString(j.target.result,\"image/svg+xml\")?.querySelector(\"svg\");if(!q)return N(G);let Ne=[\"viewBox\",\"ViewBox\",\"viewbox\"].find($e=>q.hasAttribute($e));if(!Ne)return N(G);let Me=q.getAttribute(Ne).split(\" \");return!Me||Me.length!==4?N(G):(q.setAttribute(\"width\",parseFloat(Me[2])+\"pt\"),q.setAttribute(\"height\",parseFloat(Me[3])+\"pt\"),N(new File([new Blob([new XMLSerializer().serializeToString(q)],{type:\"image/svg+xml\"})],G.name,{type:\"image/svg+xml\",_relativePath:\"\"})))},k.readAsText(G)},loadEditor(G){if(y||!u||!G)return;let N=G.type===\"image/svg+xml\";if(!r&&N){alert(c);return}B&&N&&!confirm(s)||this.fixImageDimensions(G,k=>{this.editingFile=k,this.initEditor();let j=new FileReader;j.onload=q=>{this.isEditorOpen=!0,setTimeout(()=>this.editor.replace(q.target.result),200)},j.readAsDataURL(G)})},getRoundedCanvas(G){let N=G.width,k=G.height,j=document.createElement(\"canvas\");j.width=N,j.height=k;let q=j.getContext(\"2d\");return q.imageSmoothingEnabled=!0,q.drawImage(G,0,0,N,k),q.globalCompositeOperation=\"destination-in\",q.beginPath(),q.ellipse(N/2,k/2,N/2,k/2,0,0,2*Math.PI),q.fill(),j},saveEditor(){if(y||!u)return;this.isEditorOpenedForAspectRatio=!1;let G=this.editor.getCroppedCanvas({fillColor:g??\"transparent\",height:a,imageSmoothingEnabled:!0,imageSmoothingQuality:\"high\",width:l});m&&(G=this.getRoundedCanvas(G)),G.toBlob(N=>{this.pond.removeFile(this.pond.getFiles().find(k=>k.filename===this.editingFile.name)?.id,{revert:!0}),this.$nextTick(()=>{this.shouldUpdateState=!1;let k=this.editingFile.name.slice(0,this.editingFile.name.lastIndexOf(\".\")),j=this.editingFile.name.split(\".\").pop();j===\"svg\"&&(j=\"png\");let q=/-v(\\d+)/;q.test(k)?k=k.replace(q,(Ne,Me)=>`-v${Number(Me)+1}`):k+=\"-v1\",this.pond.addFile(new File([N],`${k}.${j}`,{type:this.editingFile.type===\"image/svg+xml\"||m?\"image/png\":this.editingFile.type,lastModified:new Date().getTime()})).then(()=>{this.closeEditor()}).catch(()=>{this.closeEditor()})})},m?\"image/png\":this.editingFile.type)},destroyEditor(){this.editor&&typeof this.editor.destroy==\"function\"&&this.editor.destroy(),this.editor=null},checkImageAspectRatio(G){if(!i)return;let N=new Image,k=URL.createObjectURL(G);N.onload=()=>{URL.revokeObjectURL(k);let j=N.width/N.height;Math.abs(j-i)>.01&&(this.isEditorOpenedForAspectRatio=!0,this.loadEditor(G))},N.onerror=()=>{URL.revokeObjectURL(k)},N.src=k}}}var ur={am:wo,ar:Lo,az:Mo,ca:Ao,ckb:zo,cs:Po,da:Fo,de:Oo,el:Do,en:Co,es:Bo,fa:ko,fi:No,fr:Vo,he:Go,hr:Uo,hu:Ho,id:Wo,it:jo,ja:Yo,km:qo,ko:$o,lt:Xo,lus:Ko,lv:Zo,nb:Qo,nl:Jo,pl:er,pt:tr,pt_BR:ir,ro:ar,ru:nr,sk:lr,sv:or,tr:rr,uk:sr,vi:cr,zh_CN:dr,zh_HK:pr,zh_TW:mr};export{Og as default};\n/*! Bundled license information:\n\nfilepond/dist/filepond.esm.js:\n  (*!\n   * FilePond 4.32.10\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\ncropperjs/dist/cropper.esm.js:\n  (*!\n   * Cropper.js v1.6.2\n   * https://fengyuanchen.github.io/cropperjs\n   *\n   * Copyright 2015-present Chen Fengyuan\n   * Released under the MIT license\n   *\n   * Date: 2024-04-21T07:43:05.335Z\n   *)\n\nfilepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.esm.js:\n  (*!\n   * FilePondPluginFileValidateSize 2.2.8\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.esm.js:\n  (*!\n   * FilePondPluginFileValidateType 1.2.9\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-crop/dist/filepond-plugin-image-crop.esm.js:\n  (*!\n   * FilePondPluginImageCrop 2.0.6\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-edit/dist/filepond-plugin-image-edit.esm.js:\n  (*!\n   * FilePondPluginImageEdit 1.6.3\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-exif-orientation/dist/filepond-plugin-image-exif-orientation.esm.js:\n  (*!\n   * FilePondPluginImageExifOrientation 1.0.11\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-preview/dist/filepond-plugin-image-preview.esm.js:\n  (*!\n   * FilePondPluginImagePreview 4.6.12\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-resize/dist/filepond-plugin-image-resize.esm.js:\n  (*!\n   * FilePondPluginImageResize 2.0.10\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-image-transform/dist/filepond-plugin-image-transform.esm.js:\n  (*!\n   * FilePondPluginImageTransform 3.8.7\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit https://pqina.nl/filepond/ for details.\n   *)\n\nfilepond-plugin-media-preview/dist/filepond-plugin-media-preview.esm.js:\n  (*!\n   * FilePondPluginMediaPreview 1.0.11\n   * Licensed under MIT, https://opensource.org/licenses/MIT/\n   * Please visit undefined for details.\n   *)\n*/\n"
  },
  {
    "path": "public/js/filament/forms/components/key-value.js",
    "content": "function a({state:r}){return{state:r,rows:[],init(){this.updateRows(),this.rows.length<=0?this.rows.push({key:\"\",value:\"\"}):this.updateState(),this.$watch(\"state\",(e,t)=>{if(!Array.isArray(e))return;let s=i=>i===null?0:Array.isArray(i)?i.length:typeof i!=\"object\"?0:Object.keys(i).length;s(e)===0&&s(t)===0||this.updateRows()})},addRow(){this.rows.push({key:\"\",value:\"\"}),this.updateState()},deleteRow(e){this.rows.splice(e,1),this.rows.length<=0&&this.addRow(),this.updateState()},reorderRows(e){let t=Alpine.raw(this.rows);this.rows=[];let s=t.splice(e.oldIndex,1)[0];t.splice(e.newIndex,0,s),this.$nextTick(()=>{this.rows=t,this.updateState()})},updateRows(){let t=Alpine.raw(this.state).map(({key:s,value:i})=>({key:s,value:i}));this.rows.forEach(s=>{(s.key===\"\"||s.key===null)&&t.push({key:\"\",value:s.value})}),this.rows=t},updateState(){let e=[];this.rows.forEach(t=>{t.key===\"\"||t.key===null||e.push({key:t.key,value:t.value})}),JSON.stringify(this.state)!==JSON.stringify(e)&&(this.state=e)}}}export{a as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/markdown-editor.js",
    "content": "var ss=Object.defineProperty;var Sd=Object.getOwnPropertyDescriptor;var Td=Object.getOwnPropertyNames;var Ld=Object.prototype.hasOwnProperty;var Cd=(o,p)=>()=>(o&&(p=o(o=0)),p);var Ke=(o,p)=>()=>(p||o((p={exports:{}}).exports,p),p.exports);var Ed=(o,p,v,C)=>{if(p&&typeof p==\"object\"||typeof p==\"function\")for(let b of Td(p))!Ld.call(o,b)&&b!==v&&ss(o,b,{get:()=>p[b],enumerable:!(C=Sd(p,b))||C.enumerable});return o};var zd=o=>Ed(ss({},\"__esModule\",{value:!0}),o);var We=Ke((Yo,Qo)=>{(function(o,p){typeof Yo==\"object\"&&typeof Qo<\"u\"?Qo.exports=p():typeof define==\"function\"&&define.amd?define(p):(o=o||self,o.CodeMirror=p())})(Yo,(function(){\"use strict\";var o=navigator.userAgent,p=navigator.platform,v=/gecko\\/\\d/i.test(o),C=/MSIE \\d/.test(o),b=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(o),S=/Edge\\/(\\d+)/.exec(o),s=C||b||S,h=s&&(C?document.documentMode||6:+(S||b)[1]),g=!S&&/WebKit\\//.test(o),T=g&&/Qt\\/\\d+\\.\\d+/.test(o),w=!S&&/Chrome\\/(\\d+)/.exec(o),c=w&&+w[1],d=/Opera\\//.test(o),k=/Apple Computer/.test(navigator.vendor),z=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(o),M=/PhantomJS/.test(o),_=k&&(/Mobile\\/\\w+/.test(o)||navigator.maxTouchPoints>2),W=/Android/.test(o),E=_||W||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(o),O=_||/Mac/.test(p),G=/\\bCrOS\\b/.test(o),J=/win/i.test(p),re=d&&o.match(/Version\\/(\\d*\\.\\d*)/);re&&(re=Number(re[1])),re&&re>=15&&(d=!1,g=!0);var q=O&&(T||d&&(re==null||re<12.11)),I=v||s&&h>=9;function D(e){return new RegExp(\"(^|\\\\s)\"+e+\"(?:$|\\\\s)\\\\s*\")}var Q=function(e,t){var n=e.className,r=D(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:\"\")}};function j(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function V(e,t){return j(e).appendChild(t)}function y(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),typeof t==\"string\")i.appendChild(document.createTextNode(t));else if(t)for(var a=0;a<t.length;++a)i.appendChild(t[a]);return i}function K(e,t,n,r){var i=y(e,t,n,r);return i.setAttribute(\"role\",\"presentation\"),i}var X;document.createRange?X=function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:X=function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch{return r}return r.collapse(!0),r.moveEnd(\"character\",n),r.moveStart(\"character\",t),r};function N(e,t){if(t.nodeType==3&&(t=t.parentNode),e.contains)return e.contains(t);do if(t.nodeType==11&&(t=t.host),t==e)return!0;while(t=t.parentNode)}function R(e){var t=e.ownerDocument||e,n;try{n=e.activeElement}catch{n=t.body||null}for(;n&&n.shadowRoot&&n.shadowRoot.activeElement;)n=n.shadowRoot.activeElement;return n}function le(e,t){var n=e.className;D(t).test(n)||(e.className+=(n?\" \":\"\")+t)}function xe(e,t){for(var n=e.split(\" \"),r=0;r<n.length;r++)n[r]&&!D(n[r]).test(t)&&(t+=\" \"+n[r]);return t}var F=function(e){e.select()};_?F=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:s&&(F=function(e){try{e.select()}catch{}});function L(e){return e.display.wrapper.ownerDocument}function de(e){return ze(e.display.wrapper)}function ze(e){return e.getRootNode?e.getRootNode():e.ownerDocument}function pe(e){return L(e).defaultView}function Ee(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function ge(e,t,n){t||(t={});for(var r in e)e.hasOwnProperty(r)&&(n!==!1||!t.hasOwnProperty(r))&&(t[r]=e[r]);return t}function Oe(e,t,n,r,i){t==null&&(t=e.search(/[^\\s\\u00a0]/),t==-1&&(t=e.length));for(var a=r||0,l=i||0;;){var u=e.indexOf(\"\t\",a);if(u<0||u>=t)return l+(t-a);l+=u-a,l+=n-l%n,a=u+1}}var qe=function(){this.id=null,this.f=null,this.time=0,this.handler=Ee(this.onTimeout,this)};qe.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},qe.prototype.set=function(e,t){this.f=t;var n=+new Date+e;(!this.id||n<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=n)};function Se(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}var Be=50,Ze={toString:function(){return\"CodeMirror.Pass\"}},ke={scroll:!1},Je={origin:\"*mouse\"},Re={origin:\"+move\"};function Ge(e,t,n){for(var r=0,i=0;;){var a=e.indexOf(\"\t\",r);a==-1&&(a=e.length);var l=a-r;if(a==e.length||i+l>=t)return r+Math.min(l,t-i);if(i+=a-r,i+=n-i%n,r=a+1,i>=t)return r}}var U=[\"\"];function Z(e){for(;U.length<=e;)U.push(ce(U)+\" \");return U[e]}function ce(e){return e[e.length-1]}function He(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function te(e,t,n){for(var r=0,i=n(t);r<e.length&&n(e[r])<=i;)r++;e.splice(r,0,t)}function fe(){}function oe(e,t){var n;return Object.create?n=Object.create(e):(fe.prototype=e,n=new fe),t&&ge(t,n),n}var Ue=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;function we(e){return/\\w/.test(e)||e>\"\\x80\"&&(e.toUpperCase()!=e.toLowerCase()||Ue.test(e))}function Me(e,t){return t?t.source.indexOf(\"\\\\w\")>-1&&we(e)?!0:t.test(e):we(e)}function Le(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var $=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;function H(e){return e.charCodeAt(0)>=768&&$.test(e)}function se(e,t,n){for(;(n<0?t>0:t<e.length)&&H(e.charAt(t));)t+=n;return t}function De(e,t,n){for(var r=t>n?-1:1;;){if(t==n)return t;var i=(t+n)/2,a=r<0?Math.ceil(i):Math.floor(i);if(a==t)return e(a)?t:n;e(a)?n=a:t=a+r}}function nt(e,t,n,r){if(!e)return r(t,n,\"ltr\",0);for(var i=!1,a=0;a<e.length;++a){var l=e[a];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),l.level==1?\"rtl\":\"ltr\",a),i=!0)}i||r(t,n,\"ltr\")}var dt=null;function Pt(e,t,n){var r;dt=null;for(var i=0;i<e.length;++i){var a=e[i];if(a.from<t&&a.to>t)return i;a.to==t&&(a.from!=a.to&&n==\"before\"?r=i:dt=i),a.from==t&&(a.from!=a.to&&n!=\"before\"?r=i:dt=i)}return r??dt}var Ft=(function(){var e=\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\",t=\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";function n(m){return m<=247?e.charAt(m):1424<=m&&m<=1524?\"R\":1536<=m&&m<=1785?t.charAt(m-1536):1774<=m&&m<=2220?\"r\":8192<=m&&m<=8203?\"w\":m==8204?\"b\":\"L\"}var r=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,i=/[stwN]/,a=/[LRr]/,l=/[Lb1n]/,u=/[1n]/;function f(m,A,B){this.level=m,this.from=A,this.to=B}return function(m,A){var B=A==\"ltr\"?\"L\":\"R\";if(m.length==0||A==\"ltr\"&&!r.test(m))return!1;for(var ee=m.length,Y=[],ie=0;ie<ee;++ie)Y.push(n(m.charCodeAt(ie)));for(var ue=0,me=B;ue<ee;++ue){var ve=Y[ue];ve==\"m\"?Y[ue]=me:me=ve}for(var _e=0,be=B;_e<ee;++_e){var Ce=Y[_e];Ce==\"1\"&&be==\"r\"?Y[_e]=\"n\":a.test(Ce)&&(be=Ce,Ce==\"r\"&&(Y[_e]=\"R\"))}for(var Ne=1,Fe=Y[0];Ne<ee-1;++Ne){var $e=Y[Ne];$e==\"+\"&&Fe==\"1\"&&Y[Ne+1]==\"1\"?Y[Ne]=\"1\":$e==\",\"&&Fe==Y[Ne+1]&&(Fe==\"1\"||Fe==\"n\")&&(Y[Ne]=Fe),Fe=$e}for(var Ve=0;Ve<ee;++Ve){var vt=Y[Ve];if(vt==\",\")Y[Ve]=\"N\";else if(vt==\"%\"){var rt=void 0;for(rt=Ve+1;rt<ee&&Y[rt]==\"%\";++rt);for(var Ot=Ve&&Y[Ve-1]==\"!\"||rt<ee&&Y[rt]==\"1\"?\"1\":\"N\",At=Ve;At<rt;++At)Y[At]=Ot;Ve=rt-1}}for(var ut=0,Dt=B;ut<ee;++ut){var yt=Y[ut];Dt==\"L\"&&yt==\"1\"?Y[ut]=\"L\":a.test(yt)&&(Dt=yt)}for(var ft=0;ft<ee;++ft)if(i.test(Y[ft])){var ct=void 0;for(ct=ft+1;ct<ee&&i.test(Y[ct]);++ct);for(var lt=(ft?Y[ft-1]:B)==\"L\",qt=(ct<ee?Y[ct]:B)==\"L\",pn=lt==qt?lt?\"L\":\"R\":B,Sr=ft;Sr<ct;++Sr)Y[Sr]=pn;ft=ct-1}for(var St=[],rr,bt=0;bt<ee;)if(l.test(Y[bt])){var Zo=bt;for(++bt;bt<ee&&l.test(Y[bt]);++bt);St.push(new f(0,Zo,bt))}else{var cr=bt,Nr=St.length,Or=A==\"rtl\"?1:0;for(++bt;bt<ee&&Y[bt]!=\"L\";++bt);for(var Lt=cr;Lt<bt;)if(u.test(Y[Lt])){cr<Lt&&(St.splice(Nr,0,new f(1,cr,Lt)),Nr+=Or);var hn=Lt;for(++Lt;Lt<bt&&u.test(Y[Lt]);++Lt);St.splice(Nr,0,new f(2,hn,Lt)),Nr+=Or,cr=Lt}else++Lt;cr<bt&&St.splice(Nr,0,new f(1,cr,bt))}return A==\"ltr\"&&(St[0].level==1&&(rr=m.match(/^\\s+/))&&(St[0].from=rr[0].length,St.unshift(new f(0,0,rr[0].length))),ce(St).level==1&&(rr=m.match(/\\s+$/))&&(ce(St).to-=rr[0].length,St.push(new f(0,ee-rr[0].length,ee)))),A==\"rtl\"?St.reverse():St}})();function Pe(e,t){var n=e.order;return n==null&&(n=e.order=Ft(e.text,t)),n}var xt=[],Ie=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent(\"on\"+t,n);else{var r=e._handlers||(e._handlers={});r[t]=(r[t]||xt).concat(n)}};function nr(e,t){return e._handlers&&e._handlers[t]||xt}function _t(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent(\"on\"+t,n);else{var r=e._handlers,i=r&&r[t];if(i){var a=Se(i,n);a>-1&&(r[t]=i.slice(0,a).concat(i.slice(a+1)))}}}function it(e,t){var n=nr(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)}function ot(e,t,n){return typeof t==\"string\"&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),it(e,n||t.type,e,t),Ct(t)||t.codemirrorIgnore}function Rt(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)Se(n,t[r])==-1&&n.push(t[r])}function It(e,t){return nr(e,t).length>0}function Wt(e){e.prototype.on=function(t,n){Ie(this,t,n)},e.prototype.off=function(t,n){_t(this,t,n)}}function kt(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Rr(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ct(e){return e.defaultPrevented!=null?e.defaultPrevented:e.returnValue==!1}function dr(e){kt(e),Rr(e)}function yn(e){return e.target||e.srcElement}function Ut(e){var t=e.which;return t==null&&(e.button&1?t=1:e.button&2?t=3:e.button&4&&(t=2)),O&&e.ctrlKey&&t==1&&(t=3),t}var eo=(function(){if(s&&h<9)return!1;var e=y(\"div\");return\"draggable\"in e||\"dragDrop\"in e})(),Hr;function ei(e){if(Hr==null){var t=y(\"span\",\"\\u200B\");V(e,y(\"span\",[t,document.createTextNode(\"x\")])),e.firstChild.offsetHeight!=0&&(Hr=t.offsetWidth<=1&&t.offsetHeight>2&&!(s&&h<8))}var n=Hr?y(\"span\",\"\\u200B\"):y(\"span\",\"\\xA0\",null,\"display: inline-block; width: 1px; margin-right: -1px\");return n.setAttribute(\"cm-text\",\"\"),n}var xn;function pr(e){if(xn!=null)return xn;var t=V(e,document.createTextNode(\"A\\u062EA\")),n=X(t,0,1).getBoundingClientRect(),r=X(t,1,2).getBoundingClientRect();return j(e),!n||n.left==n.right?!1:xn=r.right-n.right<3}var Ht=`\n\nb`.split(/\\n/).length!=3?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf(`\n`,t);i==-1&&(i=e.length);var a=e.slice(t,e.charAt(i-1)==\"\\r\"?i-1:i),l=a.indexOf(\"\\r\");l!=-1?(n.push(a.slice(0,l)),t+=l+1):(n.push(a),t=i+1)}return n}:function(e){return e.split(/\\r\\n?|\\n/)},hr=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch{return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch{}return!t||t.parentElement()!=e?!1:t.compareEndPoints(\"StartToEnd\",t)!=0},ti=(function(){var e=y(\"div\");return\"oncopy\"in e?!0:(e.setAttribute(\"oncopy\",\"return;\"),typeof e.oncopy==\"function\")})(),$t=null;function to(e){if($t!=null)return $t;var t=V(e,y(\"span\",\"x\")),n=t.getBoundingClientRect(),r=X(t,0,1).getBoundingClientRect();return $t=Math.abs(n.left-r.left)>1}var Wr={},Kt={};function Gt(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Wr[e]=t}function Cr(e,t){Kt[e]=t}function Ur(e){if(typeof e==\"string\"&&Kt.hasOwnProperty(e))e=Kt[e];else if(e&&typeof e.name==\"string\"&&Kt.hasOwnProperty(e.name)){var t=Kt[e.name];typeof t==\"string\"&&(t={name:t}),e=oe(t,e),e.name=t.name}else{if(typeof e==\"string\"&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(e))return Ur(\"application/xml\");if(typeof e==\"string\"&&/^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(e))return Ur(\"application/json\")}return typeof e==\"string\"?{name:e}:e||{name:\"null\"}}function $r(e,t){t=Ur(t);var n=Wr[t.name];if(!n)return $r(e,\"text/plain\");var r=n(e,t);if(gr.hasOwnProperty(t.name)){var i=gr[t.name];for(var a in i)i.hasOwnProperty(a)&&(r.hasOwnProperty(a)&&(r[\"_\"+a]=r[a]),r[a]=i[a])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}var gr={};function Kr(e,t){var n=gr.hasOwnProperty(e)?gr[e]:gr[e]={};ge(t,n)}function Vt(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function _n(e,t){for(var n;e.innerMode&&(n=e.innerMode(t),!(!n||n.mode==e));)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Gr(e,t,n){return e.startState?e.startState(t,n):!0}var at=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};at.prototype.eol=function(){return this.pos>=this.string.length},at.prototype.sol=function(){return this.pos==this.lineStart},at.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},at.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},at.prototype.eat=function(e){var t=this.string.charAt(this.pos),n;if(typeof e==\"string\"?n=t==e:n=t&&(e.test?e.test(t):e(t)),n)return++this.pos,t},at.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},at.prototype.eatSpace=function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},at.prototype.skipToEnd=function(){this.pos=this.string.length},at.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},at.prototype.backUp=function(e){this.pos-=e},at.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Oe(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Oe(this.string,this.lineStart,this.tabSize):0)},at.prototype.indentation=function(){return Oe(this.string,null,this.tabSize)-(this.lineStart?Oe(this.string,this.lineStart,this.tabSize):0)},at.prototype.match=function(e,t,n){if(typeof e==\"string\"){var r=function(l){return n?l.toLowerCase():l},i=this.string.substr(this.pos,e.length);if(r(i)==r(e))return t!==!1&&(this.pos+=e.length),!0}else{var a=this.string.slice(this.pos).match(e);return a&&a.index>0?null:(a&&t!==!1&&(this.pos+=a[0].length),a)}},at.prototype.current=function(){return this.string.slice(this.start,this.pos)},at.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},at.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},at.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};function Ae(e,t){if(t-=e.first,t<0||t>=e.size)throw new Error(\"There is no line \"+(t+e.first)+\" in the document.\");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],a=i.chunkSize();if(t<a){n=i;break}t-=a}return n.lines[t]}function ir(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(a){var l=a.text;i==n.line&&(l=l.slice(0,n.ch)),i==t.line&&(l=l.slice(t.ch)),r.push(l),++i}),r}function kn(e,t,n){var r=[];return e.iter(t,n,function(i){r.push(i.text)}),r}function Bt(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function x(e){if(e.parent==null)return null;for(var t=e.parent,n=Se(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function P(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],a=i.height;if(t<a){e=i;continue e}t-=a,n+=i.chunkSize()}return n}while(!e.lines);for(var l=0;l<e.lines.length;++l){var u=e.lines[l],f=u.height;if(t<f)break;t-=f}return n+l}function ae(e,t){return t>=e.first&&t<e.first+e.size}function he(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ne(e,t,n){if(n===void 0&&(n=null),!(this instanceof ne))return new ne(e,t,n);this.line=e,this.ch=t,this.sticky=n}function ye(e,t){return e.line-t.line||e.ch-t.ch}function Xe(e,t){return e.sticky==t.sticky&&ye(e,t)==0}function pt(e){return ne(e.line,e.ch)}function Et(e,t){return ye(e,t)<0?t:e}function Zr(e,t){return ye(e,t)<0?e:t}function ua(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function je(e,t){if(t.line<e.first)return ne(e.first,0);var n=e.first+e.size-1;return t.line>n?ne(n,Ae(e,n).text.length):Sc(t,Ae(e,t.line).text.length)}function Sc(e,t){var n=e.ch;return n==null||n>t?ne(e.line,t):n<0?ne(e.line,0):e}function ca(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=je(e,t[r]);return n}var ri=function(e,t){this.state=e,this.lookAhead=t},Jt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};Jt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return t!=null&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Jt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,\"\"),size:this.baseTokens[this.baseTokenPos]-e}},Jt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Jt.fromSaved=function(e,t,n){return t instanceof ri?new Jt(e,Vt(e.mode,t.state),n,t.lookAhead):new Jt(e,Vt(e.mode,t),n)},Jt.prototype.save=function(e){var t=e!==!1?Vt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ri(t,this.maxLookAhead):t};function fa(e,t,n,r){var i=[e.state.modeGen],a={};va(e,t.text,e.doc.mode,n,function(m,A){return i.push(m,A)},a,r);for(var l=n.state,u=function(m){n.baseTokens=i;var A=e.state.overlays[m],B=1,ee=0;n.state=!0,va(e,t.text,A.mode,n,function(Y,ie){for(var ue=B;ee<Y;){var me=i[B];me>Y&&i.splice(B,1,Y,i[B+1],me),B+=2,ee=Math.min(Y,me)}if(ie)if(A.opaque)i.splice(ue,B-ue,Y,\"overlay \"+ie),B=ue+2;else for(;ue<B;ue+=2){var ve=i[ue+1];i[ue+1]=(ve?ve+\" \":\"\")+\"overlay \"+ie}},a),n.state=l,n.baseTokens=null,n.baseTokenPos=1},f=0;f<e.state.overlays.length;++f)u(f);return{styles:i,classes:a.bgClass||a.textClass?a:null}}function da(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=wn(e,x(t)),i=t.text.length>e.options.maxHighlightLength&&Vt(e.doc.mode,r.state),a=fa(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=a.styles,a.classes?t.styleClasses=a.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function wn(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new Jt(r,!0,t);var a=Tc(e,t,n),l=a>r.first&&Ae(r,a-1).stateAfter,u=l?Jt.fromSaved(r,l,a):new Jt(r,Gr(r.mode),a);return r.iter(a,t,function(f){ro(e,f.text,u);var m=u.line;f.stateAfter=m==t-1||m%5==0||m>=i.viewFrom&&m<i.viewTo?u.save():null,u.nextLine()}),n&&(r.modeFrontier=u.line),u}function ro(e,t,n,r){var i=e.doc.mode,a=new at(t,e.options.tabSize,n);for(a.start=a.pos=r||0,t==\"\"&&pa(i,n.state);!a.eol();)no(i,a,n.state),a.start=a.pos}function pa(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=_n(e,t);if(n.mode.blankLine)return n.mode.blankLine(n.state)}}function no(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=_n(e,n).mode);var a=e.token(t,n);if(t.pos>t.start)return a}throw new Error(\"Mode \"+e.name+\" failed to advance stream.\")}var ha=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function ga(e,t,n,r){var i=e.doc,a=i.mode,l;t=je(i,t);var u=Ae(i,t.line),f=wn(e,t.line,n),m=new at(u.text,e.options.tabSize,f),A;for(r&&(A=[]);(r||m.pos<t.ch)&&!m.eol();)m.start=m.pos,l=no(a,m,f.state),r&&A.push(new ha(m,l,Vt(i.mode,f.state)));return r?A:new ha(m,l,f.state)}function ma(e,t){if(e)for(;;){var n=e.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?\"bgClass\":\"textClass\";t[r]==null?t[r]=n[2]:new RegExp(\"(?:^|\\\\s)\"+n[2]+\"(?:$|\\\\s)\").test(t[r])||(t[r]+=\" \"+n[2])}return e}function va(e,t,n,r,i,a,l){var u=n.flattenSpans;u==null&&(u=e.options.flattenSpans);var f=0,m=null,A=new at(t,e.options.tabSize,r),B,ee=e.options.addModeClass&&[null];for(t==\"\"&&ma(pa(n,r.state),a);!A.eol();){if(A.pos>e.options.maxHighlightLength?(u=!1,l&&ro(e,t,r,A.pos),A.pos=t.length,B=null):B=ma(no(n,A,r.state,ee),a),ee){var Y=ee[0].name;Y&&(B=\"m-\"+(B?Y+\" \"+B:Y))}if(!u||m!=B){for(;f<A.start;)f=Math.min(A.start,f+5e3),i(f,m);m=B}A.start=A.pos}for(;f<A.pos;){var ie=Math.min(A.pos,f+5e3);i(ie,m),f=ie}}function Tc(e,t,n){for(var r,i,a=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),u=t;u>l;--u){if(u<=a.first)return a.first;var f=Ae(a,u-1),m=f.stateAfter;if(m&&(!n||u+(m instanceof ri?m.lookAhead:0)<=a.modeFrontier))return u;var A=Oe(f.text,null,e.options.tabSize);(i==null||r>A)&&(i=u-1,r=A)}return i}function Lc(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,r=t-1;r>n;r--){var i=Ae(e,r).stateAfter;if(i&&(!(i instanceof ri)||r+i.lookAhead<t)){n=r+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}}var ba=!1,or=!1;function Cc(){ba=!0}function Ec(){or=!0}function ni(e,t,n){this.marker=e,this.from=t,this.to=n}function Sn(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function zc(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function Mc(e,t,n){var r=n&&window.WeakSet&&(n.markedSpans||(n.markedSpans=new WeakSet));r&&e.markedSpans&&r.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],r&&r.add(e.markedSpans)),t.marker.attachLine(e)}function Ac(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var a=e[i],l=a.marker,u=a.from==null||(l.inclusiveLeft?a.from<=t:a.from<t);if(u||a.from==t&&l.type==\"bookmark\"&&(!n||!a.marker.insertLeft)){var f=a.to==null||(l.inclusiveRight?a.to>=t:a.to>t);(r||(r=[])).push(new ni(l,a.from,f?null:a.to))}}return r}function Dc(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var a=e[i],l=a.marker,u=a.to==null||(l.inclusiveRight?a.to>=t:a.to>t);if(u||a.from==t&&l.type==\"bookmark\"&&(!n||a.marker.insertLeft)){var f=a.from==null||(l.inclusiveLeft?a.from<=t:a.from<t);(r||(r=[])).push(new ni(l,f?null:a.from-t,a.to==null?null:a.to-t))}}return r}function io(e,t){if(t.full)return null;var n=ae(e,t.from.line)&&Ae(e,t.from.line).markedSpans,r=ae(e,t.to.line)&&Ae(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,a=t.to.ch,l=ye(t.from,t.to)==0,u=Ac(n,i,l),f=Dc(r,a,l),m=t.text.length==1,A=ce(t.text).length+(m?i:0);if(u)for(var B=0;B<u.length;++B){var ee=u[B];if(ee.to==null){var Y=Sn(f,ee.marker);Y?m&&(ee.to=Y.to==null?null:Y.to+A):ee.to=i}}if(f)for(var ie=0;ie<f.length;++ie){var ue=f[ie];if(ue.to!=null&&(ue.to+=A),ue.from==null){var me=Sn(u,ue.marker);me||(ue.from=A,m&&(u||(u=[])).push(ue))}else ue.from+=A,m&&(u||(u=[])).push(ue)}u&&(u=ya(u)),f&&f!=u&&(f=ya(f));var ve=[u];if(!m){var _e=t.text.length-2,be;if(_e>0&&u)for(var Ce=0;Ce<u.length;++Ce)u[Ce].to==null&&(be||(be=[])).push(new ni(u[Ce].marker,null,null));for(var Ne=0;Ne<_e;++Ne)ve.push(be);ve.push(f)}return ve}function ya(e){for(var t=0;t<e.length;++t){var n=e[t];n.from!=null&&n.from==n.to&&n.marker.clearWhenEmpty!==!1&&e.splice(t--,1)}return e.length?e:null}function qc(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(Y){if(Y.markedSpans)for(var ie=0;ie<Y.markedSpans.length;++ie){var ue=Y.markedSpans[ie].marker;ue.readOnly&&(!r||Se(r,ue)==-1)&&(r||(r=[])).push(ue)}}),!r)return null;for(var i=[{from:t,to:n}],a=0;a<r.length;++a)for(var l=r[a],u=l.find(0),f=0;f<i.length;++f){var m=i[f];if(!(ye(m.to,u.from)<0||ye(m.from,u.to)>0)){var A=[f,1],B=ye(m.from,u.from),ee=ye(m.to,u.to);(B<0||!l.inclusiveLeft&&!B)&&A.push({from:m.from,to:u.from}),(ee>0||!l.inclusiveRight&&!ee)&&A.push({from:u.to,to:m.to}),i.splice.apply(i,A),f+=A.length-3}}return i}function xa(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function _a(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function ii(e){return e.inclusiveLeft?-1:0}function oi(e){return e.inclusiveRight?1:0}function oo(e,t){var n=e.lines.length-t.lines.length;if(n!=0)return n;var r=e.find(),i=t.find(),a=ye(r.from,i.from)||ii(e)-ii(t);if(a)return-a;var l=ye(r.to,i.to)||oi(e)-oi(t);return l||t.id-e.id}function ka(e,t){var n=or&&e.markedSpans,r;if(n)for(var i=void 0,a=0;a<n.length;++a)i=n[a],i.marker.collapsed&&(t?i.from:i.to)==null&&(!r||oo(r,i.marker)<0)&&(r=i.marker);return r}function wa(e){return ka(e,!0)}function ai(e){return ka(e,!1)}function Fc(e,t){var n=or&&e.markedSpans,r;if(n)for(var i=0;i<n.length;++i){var a=n[i];a.marker.collapsed&&(a.from==null||a.from<t)&&(a.to==null||a.to>t)&&(!r||oo(r,a.marker)<0)&&(r=a.marker)}return r}function Sa(e,t,n,r,i){var a=Ae(e,t),l=or&&a.markedSpans;if(l)for(var u=0;u<l.length;++u){var f=l[u];if(f.marker.collapsed){var m=f.marker.find(0),A=ye(m.from,n)||ii(f.marker)-ii(i),B=ye(m.to,r)||oi(f.marker)-oi(i);if(!(A>=0&&B<=0||A<=0&&B>=0)&&(A<=0&&(f.marker.inclusiveRight&&i.inclusiveLeft?ye(m.to,n)>=0:ye(m.to,n)>0)||A>=0&&(f.marker.inclusiveRight&&i.inclusiveLeft?ye(m.from,r)<=0:ye(m.from,r)<0)))return!0}}}function Zt(e){for(var t;t=wa(e);)e=t.find(-1,!0).line;return e}function Ic(e){for(var t;t=ai(e);)e=t.find(1,!0).line;return e}function Nc(e){for(var t,n;t=ai(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function ao(e,t){var n=Ae(e,t),r=Zt(n);return n==r?t:x(r)}function Ta(e,t){if(t>e.lastLine())return t;var n=Ae(e,t),r;if(!mr(e,n))return t;for(;r=ai(n);)n=r.find(1,!0).line;return x(n)+1}function mr(e,t){var n=or&&t.markedSpans;if(n){for(var r=void 0,i=0;i<n.length;++i)if(r=n[i],!!r.marker.collapsed){if(r.from==null)return!0;if(!r.marker.widgetNode&&r.from==0&&r.marker.inclusiveLeft&&lo(e,t,r))return!0}}}function lo(e,t,n){if(n.to==null){var r=n.marker.find(1,!0);return lo(e,r.line,Sn(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var i=void 0,a=0;a<t.markedSpans.length;++a)if(i=t.markedSpans[a],i.marker.collapsed&&!i.marker.widgetNode&&i.from==n.to&&(i.to==null||i.to!=n.from)&&(i.marker.inclusiveLeft||n.marker.inclusiveRight)&&lo(e,t,i))return!0}function ar(e){e=Zt(e);for(var t=0,n=e.parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var a=n.parent;a;n=a,a=n.parent)for(var l=0;l<a.children.length;++l){var u=a.children[l];if(u==n)break;t+=u.height}return t}function li(e){if(e.height==0)return 0;for(var t=e.text.length,n,r=e;n=wa(r);){var i=n.find(0,!0);r=i.from.line,t+=i.from.ch-i.to.ch}for(r=e;n=ai(r);){var a=n.find(0,!0);t-=r.text.length-a.from.ch,r=a.to.line,t+=r.text.length-a.to.ch}return t}function so(e){var t=e.display,n=e.doc;t.maxLine=Ae(n,n.first),t.maxLineLength=li(t.maxLine),t.maxLineChanged=!0,n.iter(function(r){var i=li(r);i>t.maxLineLength&&(t.maxLineLength=i,t.maxLine=r)})}var Xr=function(e,t,n){this.text=e,_a(this,t),this.height=n?n(this):1};Xr.prototype.lineNo=function(){return x(this)},Wt(Xr);function Oc(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),e.order!=null&&(e.order=null),xa(e),_a(e,n);var i=r?r(e):1;i!=e.height&&Bt(e,i)}function Pc(e){e.parent=null,xa(e)}var Bc={},jc={};function La(e,t){if(!e||/^\\s*$/.test(e))return null;var n=t.addModeClass?jc:Bc;return n[e]||(n[e]=e.replace(/\\S+/g,\"cm-$&\"))}function Ca(e,t){var n=K(\"span\",null,null,g?\"padding-right: .1px\":null),r={pre:K(\"pre\",[n],\"CodeMirror-line\"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption(\"lineWrapping\")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var a=i?t.rest[i-1]:t.line,l=void 0;r.pos=0,r.addToken=Hc,pr(e.display.measure)&&(l=Pe(a,e.doc.direction))&&(r.addToken=Uc(r.addToken,l)),r.map=[];var u=t!=e.display.externalMeasured&&x(a);$c(a,r,da(e,a,u)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=xe(a.styleClasses.bgClass,r.bgClass||\"\")),a.styleClasses.textClass&&(r.textClass=xe(a.styleClasses.textClass,r.textClass||\"\"))),r.map.length==0&&r.map.push(0,0,r.content.appendChild(ei(e.display.measure))),i==0?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(g){var f=r.content.lastChild;(/\\bcm-tab\\b/.test(f.className)||f.querySelector&&f.querySelector(\".cm-tab\"))&&(r.content.className=\"cm-tab-wrap-hack\")}return it(e,\"renderLine\",e,t.line,r.pre),r.pre.className&&(r.textClass=xe(r.pre.className,r.textClass||\"\")),r}function Rc(e){var t=y(\"span\",\"\\u2022\",\"cm-invalidchar\");return t.title=\"\\\\u\"+e.charCodeAt(0).toString(16),t.setAttribute(\"aria-label\",t.title),t}function Hc(e,t,n,r,i,a,l){if(t){var u=e.splitSpaces?Wc(t,e.trailingSpace):t,f=e.cm.state.specialChars,m=!1,A;if(!f.test(t))e.col+=t.length,A=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,A),s&&h<9&&(m=!0),e.pos+=t.length;else{A=document.createDocumentFragment();for(var B=0;;){f.lastIndex=B;var ee=f.exec(t),Y=ee?ee.index-B:t.length-B;if(Y){var ie=document.createTextNode(u.slice(B,B+Y));s&&h<9?A.appendChild(y(\"span\",[ie])):A.appendChild(ie),e.map.push(e.pos,e.pos+Y,ie),e.col+=Y,e.pos+=Y}if(!ee)break;B+=Y+1;var ue=void 0;if(ee[0]==\"\t\"){var me=e.cm.options.tabSize,ve=me-e.col%me;ue=A.appendChild(y(\"span\",Z(ve),\"cm-tab\")),ue.setAttribute(\"role\",\"presentation\"),ue.setAttribute(\"cm-text\",\"\t\"),e.col+=ve}else ee[0]==\"\\r\"||ee[0]==`\n`?(ue=A.appendChild(y(\"span\",ee[0]==\"\\r\"?\"\\u240D\":\"\\u2424\",\"cm-invalidchar\")),ue.setAttribute(\"cm-text\",ee[0]),e.col+=1):(ue=e.cm.options.specialCharPlaceholder(ee[0]),ue.setAttribute(\"cm-text\",ee[0]),s&&h<9?A.appendChild(y(\"span\",[ue])):A.appendChild(ue),e.col+=1);e.map.push(e.pos,e.pos+1,ue),e.pos++}}if(e.trailingSpace=u.charCodeAt(t.length-1)==32,n||r||i||m||a||l){var _e=n||\"\";r&&(_e+=r),i&&(_e+=i);var be=y(\"span\",[A],_e,a);if(l)for(var Ce in l)l.hasOwnProperty(Ce)&&Ce!=\"style\"&&Ce!=\"class\"&&be.setAttribute(Ce,l[Ce]);return e.content.appendChild(be)}e.content.appendChild(A)}}function Wc(e,t){if(e.length>1&&!/  /.test(e))return e;for(var n=t,r=\"\",i=0;i<e.length;i++){var a=e.charAt(i);a==\" \"&&n&&(i==e.length-1||e.charCodeAt(i+1)==32)&&(a=\"\\xA0\"),r+=a,n=a==\" \"}return r}function Uc(e,t){return function(n,r,i,a,l,u,f){i=i?i+\" cm-force-border\":\"cm-force-border\";for(var m=n.pos,A=m+r.length;;){for(var B=void 0,ee=0;ee<t.length&&(B=t[ee],!(B.to>m&&B.from<=m));ee++);if(B.to>=A)return e(n,r,i,a,l,u,f);e(n,r.slice(0,B.to-m),i,a,null,u,f),a=null,r=r.slice(B.to-m),m=B.to}}}function Ea(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement(\"span\"))),i.setAttribute(\"cm-marker\",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function $c(e,t,n){var r=e.markedSpans,i=e.text,a=0;if(!r){for(var l=1;l<n.length;l+=2)t.addToken(t,i.slice(a,a=n[l]),La(n[l+1],t.cm.options));return}for(var u=i.length,f=0,m=1,A=\"\",B,ee,Y=0,ie,ue,me,ve,_e;;){if(Y==f){ie=ue=me=ee=\"\",_e=null,ve=null,Y=1/0;for(var be=[],Ce=void 0,Ne=0;Ne<r.length;++Ne){var Fe=r[Ne],$e=Fe.marker;if($e.type==\"bookmark\"&&Fe.from==f&&$e.widgetNode)be.push($e);else if(Fe.from<=f&&(Fe.to==null||Fe.to>f||$e.collapsed&&Fe.to==f&&Fe.from==f)){if(Fe.to!=null&&Fe.to!=f&&Y>Fe.to&&(Y=Fe.to,ue=\"\"),$e.className&&(ie+=\" \"+$e.className),$e.css&&(ee=(ee?ee+\";\":\"\")+$e.css),$e.startStyle&&Fe.from==f&&(me+=\" \"+$e.startStyle),$e.endStyle&&Fe.to==Y&&(Ce||(Ce=[])).push($e.endStyle,Fe.to),$e.title&&((_e||(_e={})).title=$e.title),$e.attributes)for(var Ve in $e.attributes)(_e||(_e={}))[Ve]=$e.attributes[Ve];$e.collapsed&&(!ve||oo(ve.marker,$e)<0)&&(ve=Fe)}else Fe.from>f&&Y>Fe.from&&(Y=Fe.from)}if(Ce)for(var vt=0;vt<Ce.length;vt+=2)Ce[vt+1]==Y&&(ue+=\" \"+Ce[vt]);if(!ve||ve.from==f)for(var rt=0;rt<be.length;++rt)Ea(t,0,be[rt]);if(ve&&(ve.from||0)==f){if(Ea(t,(ve.to==null?u+1:ve.to)-f,ve.marker,ve.from==null),ve.to==null)return;ve.to==f&&(ve=!1)}}if(f>=u)break;for(var Ot=Math.min(u,Y);;){if(A){var At=f+A.length;if(!ve){var ut=At>Ot?A.slice(0,Ot-f):A;t.addToken(t,ut,B?B+ie:ie,me,f+ut.length==Y?ue:\"\",ee,_e)}if(At>=Ot){A=A.slice(Ot-f),f=Ot;break}f=At,me=\"\"}A=i.slice(a,a=n[m++]),B=La(n[m++],t.cm.options)}}}function za(e,t,n){this.line=t,this.rest=Nc(t),this.size=this.rest?x(ce(this.rest))-n+1:1,this.node=this.text=null,this.hidden=mr(e,t)}function si(e,t,n){for(var r=[],i,a=t;a<n;a=i){var l=new za(e.doc,Ae(e.doc,a),a);i=a+l.size,r.push(l)}return r}var Yr=null;function Kc(e){Yr?Yr.ops.push(e):e.ownsGroup=Yr={ops:[e],delayedCallbacks:[]}}function Gc(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}function Zc(e,t){var n=e.ownsGroup;if(n)try{Gc(n)}finally{Yr=null,t(n)}}var Tn=null;function ht(e,t){var n=nr(e,t);if(n.length){var r=Array.prototype.slice.call(arguments,2),i;Yr?i=Yr.delayedCallbacks:Tn?i=Tn:(i=Tn=[],setTimeout(Xc,0));for(var a=function(u){i.push(function(){return n[u].apply(null,r)})},l=0;l<n.length;++l)a(l)}}function Xc(){var e=Tn;Tn=null;for(var t=0;t<e.length;++t)e[t]()}function Ma(e,t,n,r){for(var i=0;i<t.changes.length;i++){var a=t.changes[i];a==\"text\"?Qc(e,t):a==\"gutter\"?Da(e,t,n,r):a==\"class\"?uo(e,t):a==\"widget\"&&Vc(e,t,r)}t.changes=null}function Ln(e){return e.node==e.text&&(e.node=y(\"div\",null,null,\"position: relative\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),s&&h<8&&(e.node.style.zIndex=2)),e.node}function Yc(e,t){var n=t.bgClass?t.bgClass+\" \"+(t.line.bgClass||\"\"):t.line.bgClass;if(n&&(n+=\" CodeMirror-linebackground\"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var r=Ln(t);t.background=r.insertBefore(y(\"div\",null,n),r.firstChild),e.display.input.setUneditable(t.background)}}function Aa(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):Ca(e,t)}function Qc(e,t){var n=t.text.className,r=Aa(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,uo(e,t)):n&&(t.text.className=n)}function uo(e,t){Yc(e,t),t.line.wrapClass?Ln(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\"\");var n=t.textClass?t.textClass+\" \"+(t.line.textClass||\"\"):t.line.textClass;t.text.className=n||\"\"}function Da(e,t,n,r){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=Ln(t);t.gutterBackground=y(\"div\",null,\"CodeMirror-gutter-background \"+t.line.gutterClass,\"left: \"+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\"px; width: \"+r.gutterTotalWidth+\"px\"),e.display.input.setUneditable(t.gutterBackground),i.insertBefore(t.gutterBackground,t.text)}var a=t.line.gutterMarkers;if(e.options.lineNumbers||a){var l=Ln(t),u=t.gutter=y(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\"px\");if(u.setAttribute(\"aria-hidden\",\"true\"),e.display.input.setUneditable(u),l.insertBefore(u,t.text),t.line.gutterClass&&(u.className+=\" \"+t.line.gutterClass),e.options.lineNumbers&&(!a||!a[\"CodeMirror-linenumbers\"])&&(t.lineNumber=u.appendChild(y(\"div\",he(e.options,n),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+r.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+e.display.lineNumInnerWidth+\"px\"))),a)for(var f=0;f<e.display.gutterSpecs.length;++f){var m=e.display.gutterSpecs[f].className,A=a.hasOwnProperty(m)&&a[m];A&&u.appendChild(y(\"div\",[A],\"CodeMirror-gutter-elt\",\"left: \"+r.gutterLeft[m]+\"px; width: \"+r.gutterWidth[m]+\"px\"))}}}function Vc(e,t,n){t.alignable&&(t.alignable=null);for(var r=D(\"CodeMirror-linewidget\"),i=t.node.firstChild,a=void 0;i;i=a)a=i.nextSibling,r.test(i.className)&&t.node.removeChild(i);qa(e,t,n)}function Jc(e,t,n,r){var i=Aa(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),uo(e,t),Da(e,t,n,r),qa(e,t,r),t.node}function qa(e,t,n){if(Fa(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)Fa(e,t.rest[r],t,n,!1)}function Fa(e,t,n,r,i){if(t.widgets)for(var a=Ln(n),l=0,u=t.widgets;l<u.length;++l){var f=u[l],m=y(\"div\",[f.node],\"CodeMirror-linewidget\"+(f.className?\" \"+f.className:\"\"));f.handleMouseEvents||m.setAttribute(\"cm-ignore-events\",\"true\"),ef(f,m,n,r),e.display.input.setUneditable(m),i&&f.above?a.insertBefore(m,n.gutter||n.text):a.appendChild(m),ht(f,\"redraw\")}}function ef(e,t,n,r){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var i=r.wrapperWidth;t.style.left=r.fixedPos+\"px\",e.coverGutter||(i-=r.gutterTotalWidth,t.style.paddingLeft=r.gutterTotalWidth+\"px\"),t.style.width=i+\"px\"}e.coverGutter&&(t.style.zIndex=5,t.style.position=\"relative\",e.noHScroll||(t.style.marginLeft=-r.gutterTotalWidth+\"px\"))}function Cn(e){if(e.height!=null)return e.height;var t=e.doc.cm;if(!t)return 0;if(!N(document.body,e.node)){var n=\"position: relative;\";e.coverGutter&&(n+=\"margin-left: -\"+t.display.gutters.offsetWidth+\"px;\"),e.noHScroll&&(n+=\"width: \"+t.display.wrapper.clientWidth+\"px;\"),V(t.display.measure,y(\"div\",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function lr(e,t){for(var n=yn(t);n!=e.wrapper;n=n.parentNode)if(!n||n.nodeType==1&&n.getAttribute(\"cm-ignore-events\")==\"true\"||n.parentNode==e.sizer&&n!=e.mover)return!0}function ui(e){return e.lineSpace.offsetTop}function co(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Ia(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=V(e.measure,y(\"pre\",\"x\",\"CodeMirror-line-like\")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return!isNaN(r.left)&&!isNaN(r.right)&&(e.cachedPaddingH=r),r}function er(e){return Be-e.display.nativeBarWidth}function Er(e){return e.display.scroller.clientWidth-er(e)-e.display.barWidth}function fo(e){return e.display.scroller.clientHeight-er(e)-e.display.barHeight}function tf(e,t,n){var r=e.options.lineWrapping,i=r&&Er(e);if(!t.measure.heights||r&&t.measure.width!=i){var a=t.measure.heights=[];if(r){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),u=0;u<l.length-1;u++){var f=l[u],m=l[u+1];Math.abs(f.bottom-m.bottom)>2&&a.push((f.bottom+m.top)/2-n.top)}}a.push(n.bottom-n.top)}}function Na(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};if(e.rest){for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var i=0;i<e.rest.length;i++)if(x(e.rest[i])>n)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function rf(e,t){t=Zt(t);var n=x(t),r=e.display.externalMeasured=new za(e.doc,t,n);r.lineN=n;var i=r.built=Ca(e,r);return r.text=i.pre,V(e.display.lineMeasure,i.pre),r}function Oa(e,t,n,r){return tr(e,Qr(e,t),n,r)}function po(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Ar(e,t)];var n=e.display.externalMeasured;if(n&&t>=n.lineN&&t<n.lineN+n.size)return n}function Qr(e,t){var n=x(t),r=po(e,n);r&&!r.text?r=null:r&&r.changes&&(Ma(e,r,n,bo(e)),e.curOp.forceUpdate=!0),r||(r=rf(e,t));var i=Na(r,t,n);return{line:t,view:r,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function tr(e,t,n,r,i){t.before&&(n=-1);var a=n+(r||\"\"),l;return t.cache.hasOwnProperty(a)?l=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(tf(e,t.view,t.rect),t.hasHeights=!0),l=of(e,t,n,r),l.bogus||(t.cache[a]=l)),{left:l.left,right:l.right,top:i?l.rtop:l.top,bottom:i?l.rbottom:l.bottom}}var Pa={left:0,right:0,top:0,bottom:0};function Ba(e,t,n){for(var r,i,a,l,u,f,m=0;m<e.length;m+=3)if(u=e[m],f=e[m+1],t<u?(i=0,a=1,l=\"left\"):t<f?(i=t-u,a=i+1):(m==e.length-3||t==f&&e[m+3]>t)&&(a=f-u,i=a-1,t>=f&&(l=\"right\")),i!=null){if(r=e[m+2],u==f&&n==(r.insertLeft?\"left\":\"right\")&&(l=n),n==\"left\"&&i==0)for(;m&&e[m-2]==e[m-3]&&e[m-1].insertLeft;)r=e[(m-=3)+2],l=\"left\";if(n==\"right\"&&i==f-u)for(;m<e.length-3&&e[m+3]==e[m+4]&&!e[m+5].insertLeft;)r=e[(m+=3)+2],l=\"right\";break}return{node:r,start:i,end:a,collapse:l,coverStart:u,coverEnd:f}}function nf(e,t){var n=Pa;if(t==\"left\")for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var i=e.length-1;i>=0&&(n=e[i]).left==n.right;i--);return n}function of(e,t,n,r){var i=Ba(t.map,n,r),a=i.node,l=i.start,u=i.end,f=i.collapse,m;if(a.nodeType==3){for(var A=0;A<4;A++){for(;l&&H(t.line.text.charAt(i.coverStart+l));)--l;for(;i.coverStart+u<i.coverEnd&&H(t.line.text.charAt(i.coverStart+u));)++u;if(s&&h<9&&l==0&&u==i.coverEnd-i.coverStart?m=a.parentNode.getBoundingClientRect():m=nf(X(a,l,u).getClientRects(),r),m.left||m.right||l==0)break;u=l,l=l-1,f=\"right\"}s&&h<11&&(m=af(e.display.measure,m))}else{l>0&&(f=r=\"right\");var B;e.options.lineWrapping&&(B=a.getClientRects()).length>1?m=B[r==\"right\"?B.length-1:0]:m=a.getBoundingClientRect()}if(s&&h<9&&!l&&(!m||!m.left&&!m.right)){var ee=a.parentNode.getClientRects()[0];ee?m={left:ee.left,right:ee.left+Jr(e.display),top:ee.top,bottom:ee.bottom}:m=Pa}for(var Y=m.top-t.rect.top,ie=m.bottom-t.rect.top,ue=(Y+ie)/2,me=t.view.measure.heights,ve=0;ve<me.length-1&&!(ue<me[ve]);ve++);var _e=ve?me[ve-1]:0,be=me[ve],Ce={left:(f==\"right\"?m.right:m.left)-t.rect.left,right:(f==\"left\"?m.left:m.right)-t.rect.left,top:_e,bottom:be};return!m.left&&!m.right&&(Ce.bogus=!0),e.options.singleCursorHeightPerLine||(Ce.rtop=Y,Ce.rbottom=ie),Ce}function af(e,t){if(!window.screen||screen.logicalXDPI==null||screen.logicalXDPI==screen.deviceXDPI||!to(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function ja(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Ra(e){e.display.externalMeasure=null,j(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)ja(e.display.view[t])}function En(e){Ra(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Ha(e){return w&&W?-(e.body.getBoundingClientRect().left-parseInt(getComputedStyle(e.body).marginLeft)):e.defaultView.pageXOffset||(e.documentElement||e.body).scrollLeft}function Wa(e){return w&&W?-(e.body.getBoundingClientRect().top-parseInt(getComputedStyle(e.body).marginTop)):e.defaultView.pageYOffset||(e.documentElement||e.body).scrollTop}function ho(e){var t=Zt(e),n=t.widgets,r=0;if(n)for(var i=0;i<n.length;++i)n[i].above&&(r+=Cn(n[i]));return r}function ci(e,t,n,r,i){if(!i){var a=ho(t);n.top+=a,n.bottom+=a}if(r==\"line\")return n;r||(r=\"local\");var l=ar(t);if(r==\"local\"?l+=ui(e.display):l-=e.display.viewOffset,r==\"page\"||r==\"window\"){var u=e.display.lineSpace.getBoundingClientRect();l+=u.top+(r==\"window\"?0:Wa(L(e)));var f=u.left+(r==\"window\"?0:Ha(L(e)));n.left+=f,n.right+=f}return n.top+=l,n.bottom+=l,n}function Ua(e,t,n){if(n==\"div\")return t;var r=t.left,i=t.top;if(n==\"page\")r-=Ha(L(e)),i-=Wa(L(e));else if(n==\"local\"||!n){var a=e.display.sizer.getBoundingClientRect();r+=a.left,i+=a.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:r-l.left,top:i-l.top}}function fi(e,t,n,r,i){return r||(r=Ae(e.doc,t.line)),ci(e,r,Oa(e,r,t.ch,i),n)}function Xt(e,t,n,r,i,a){r=r||Ae(e.doc,t.line),i||(i=Qr(e,r));function l(ie,ue){var me=tr(e,i,ie,ue?\"right\":\"left\",a);return ue?me.left=me.right:me.right=me.left,ci(e,r,me,n)}var u=Pe(r,e.doc.direction),f=t.ch,m=t.sticky;if(f>=r.text.length?(f=r.text.length,m=\"before\"):f<=0&&(f=0,m=\"after\"),!u)return l(m==\"before\"?f-1:f,m==\"before\");function A(ie,ue,me){var ve=u[ue],_e=ve.level==1;return l(me?ie-1:ie,_e!=me)}var B=Pt(u,f,m),ee=dt,Y=A(f,B,m==\"before\");return ee!=null&&(Y.other=A(f,ee,m!=\"before\")),Y}function $a(e,t){var n=0;t=je(e.doc,t),e.options.lineWrapping||(n=Jr(e.display)*t.ch);var r=Ae(e.doc,t.line),i=ar(r)+ui(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function go(e,t,n,r,i){var a=ne(e,t,n);return a.xRel=i,r&&(a.outside=r),a}function mo(e,t,n){var r=e.doc;if(n+=e.display.viewOffset,n<0)return go(r.first,0,null,-1,-1);var i=P(r,n),a=r.first+r.size-1;if(i>a)return go(r.first+r.size-1,Ae(r,a).text.length,null,1,1);t<0&&(t=0);for(var l=Ae(r,i);;){var u=lf(e,l,i,t,n),f=Fc(l,u.ch+(u.xRel>0||u.outside>0?1:0));if(!f)return u;var m=f.find(1);if(m.line==i)return m;l=Ae(r,i=m.line)}}function Ka(e,t,n,r){r-=ho(t);var i=t.text.length,a=De(function(l){return tr(e,n,l-1).bottom<=r},i,0);return i=De(function(l){return tr(e,n,l).top>r},a,i),{begin:a,end:i}}function Ga(e,t,n,r){n||(n=Qr(e,t));var i=ci(e,t,tr(e,n,r),\"line\").top;return Ka(e,t,n,i)}function vo(e,t,n,r){return e.bottom<=n?!1:e.top>n?!0:(r?e.left:e.right)>t}function lf(e,t,n,r,i){i-=ar(t);var a=Qr(e,t),l=ho(t),u=0,f=t.text.length,m=!0,A=Pe(t,e.doc.direction);if(A){var B=(e.options.lineWrapping?uf:sf)(e,t,n,a,A,r,i);m=B.level!=1,u=m?B.from:B.to-1,f=m?B.to:B.from-1}var ee=null,Y=null,ie=De(function(Ne){var Fe=tr(e,a,Ne);return Fe.top+=l,Fe.bottom+=l,vo(Fe,r,i,!1)?(Fe.top<=i&&Fe.left<=r&&(ee=Ne,Y=Fe),!0):!1},u,f),ue,me,ve=!1;if(Y){var _e=r-Y.left<Y.right-r,be=_e==m;ie=ee+(be?0:1),me=be?\"after\":\"before\",ue=_e?Y.left:Y.right}else{!m&&(ie==f||ie==u)&&ie++,me=ie==0?\"after\":ie==t.text.length?\"before\":tr(e,a,ie-(m?1:0)).bottom+l<=i==m?\"after\":\"before\";var Ce=Xt(e,ne(n,ie,me),\"line\",t,a);ue=Ce.left,ve=i<Ce.top?-1:i>=Ce.bottom?1:0}return ie=se(t.text,ie,1),go(n,ie,me,ve,r-ue)}function sf(e,t,n,r,i,a,l){var u=De(function(B){var ee=i[B],Y=ee.level!=1;return vo(Xt(e,ne(n,Y?ee.to:ee.from,Y?\"before\":\"after\"),\"line\",t,r),a,l,!0)},0,i.length-1),f=i[u];if(u>0){var m=f.level!=1,A=Xt(e,ne(n,m?f.from:f.to,m?\"after\":\"before\"),\"line\",t,r);vo(A,a,l,!0)&&A.top>l&&(f=i[u-1])}return f}function uf(e,t,n,r,i,a,l){var u=Ka(e,t,r,l),f=u.begin,m=u.end;/\\s/.test(t.text.charAt(m-1))&&m--;for(var A=null,B=null,ee=0;ee<i.length;ee++){var Y=i[ee];if(!(Y.from>=m||Y.to<=f)){var ie=Y.level!=1,ue=tr(e,r,ie?Math.min(m,Y.to)-1:Math.max(f,Y.from)).right,me=ue<a?a-ue+1e9:ue-a;(!A||B>me)&&(A=Y,B=me)}}return A||(A=i[i.length-1]),A.from<f&&(A={from:f,to:A.to,level:A.level}),A.to>m&&(A={from:A.from,to:m,level:A.level}),A}var zr;function Vr(e){if(e.cachedTextHeight!=null)return e.cachedTextHeight;if(zr==null){zr=y(\"pre\",null,\"CodeMirror-line-like\");for(var t=0;t<49;++t)zr.appendChild(document.createTextNode(\"x\")),zr.appendChild(y(\"br\"));zr.appendChild(document.createTextNode(\"x\"))}V(e.measure,zr);var n=zr.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),j(e.measure),n||1}function Jr(e){if(e.cachedCharWidth!=null)return e.cachedCharWidth;var t=y(\"span\",\"xxxxxxxxxx\"),n=y(\"pre\",[t],\"CodeMirror-line-like\");V(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function bo(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,a=t.gutters.firstChild,l=0;a;a=a.nextSibling,++l){var u=e.display.gutterSpecs[l].className;n[u]=a.offsetLeft+a.clientLeft+i,r[u]=a.clientWidth}return{fixedPos:yo(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function yo(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Za(e){var t=Vr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/Jr(e.display)-3);return function(i){if(mr(e.doc,i))return 0;var a=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(a+=i.widgets[l].height);return n?a+(Math.ceil(i.text.length/r)||1)*t:a+t}}function xo(e){var t=e.doc,n=Za(e);t.iter(function(r){var i=n(r);i!=r.height&&Bt(r,i)})}function Mr(e,t,n,r){var i=e.display;if(!n&&yn(t).getAttribute(\"cm-not-content\")==\"true\")return null;var a,l,u=i.lineSpace.getBoundingClientRect();try{a=t.clientX-u.left,l=t.clientY-u.top}catch{return null}var f=mo(e,a,l),m;if(r&&f.xRel>0&&(m=Ae(e.doc,f.line).text).length==f.ch){var A=Oe(m,m.length,e.options.tabSize)-m.length;f=ne(f.line,Math.max(0,Math.round((a-Ia(e.display).left)/Jr(e.display))-A))}return f}function Ar(e,t){if(t>=e.display.viewTo||(t-=e.display.viewFrom,t<0))return null;for(var n=e.display.view,r=0;r<n.length;r++)if(t-=n[r].size,t<0)return r}function zt(e,t,n,r){t==null&&(t=e.doc.first),n==null&&(n=e.doc.first+e.doc.size),r||(r=0);var i=e.display;if(r&&n<i.viewTo&&(i.updateLineNumbers==null||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)or&&ao(e.doc,t)<i.viewTo&&br(e);else if(n<=i.viewFrom)or&&Ta(e.doc,n+r)>i.viewFrom?br(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)br(e);else if(t<=i.viewFrom){var a=di(e,n,n+r,1);a?(i.view=i.view.slice(a.index),i.viewFrom=a.lineN,i.viewTo+=r):br(e)}else if(n>=i.viewTo){var l=di(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):br(e)}else{var u=di(e,t,t,-1),f=di(e,n,n+r,1);u&&f?(i.view=i.view.slice(0,u.index).concat(si(e,u.lineN,f.lineN)).concat(i.view.slice(f.index)),i.viewTo+=r):br(e)}var m=i.externalMeasured;m&&(n<m.lineN?m.lineN+=r:t<m.lineN+m.size&&(i.externalMeasured=null))}function vr(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var a=r.view[Ar(e,t)];if(a.node!=null){var l=a.changes||(a.changes=[]);Se(l,n)==-1&&l.push(n)}}}function br(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function di(e,t,n,r){var i=Ar(e,t),a,l=e.display.view;if(!or||n==e.doc.first+e.doc.size)return{index:i,lineN:n};for(var u=e.display.viewFrom,f=0;f<i;f++)u+=l[f].size;if(u!=t){if(r>0){if(i==l.length-1)return null;a=u+l[i].size-t,i++}else a=u-t;t+=a,n+=a}for(;ao(e.doc,n)!=n;){if(i==(r<0?0:l.length-1))return null;n+=r*l[i-(r<0?1:0)].size,i+=r}return{index:i,lineN:n}}function cf(e,t,n){var r=e.display,i=r.view;i.length==0||t>=r.viewTo||n<=r.viewFrom?(r.view=si(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=si(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(Ar(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(si(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,Ar(e,n)))),r.viewTo=n}function Xa(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];!i.hidden&&(!i.node||i.changes)&&++n}return n}function zn(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Ya(e,t){t===void 0&&(t=!0);var n=e.doc,r={},i=r.cursors=document.createDocumentFragment(),a=r.selection=document.createDocumentFragment(),l=e.options.$customCursor;l&&(t=!0);for(var u=0;u<n.sel.ranges.length;u++)if(!(!t&&u==n.sel.primIndex)){var f=n.sel.ranges[u];if(!(f.from().line>=e.display.viewTo||f.to().line<e.display.viewFrom)){var m=f.empty();if(l){var A=l(e,f);A&&_o(e,A,i)}else(m||e.options.showCursorWhenSelecting)&&_o(e,f.head,i);m||ff(e,f,a)}}return r}function _o(e,t,n){var r=Xt(e,t,\"div\",null,null,!e.options.singleCursorHeightPerLine),i=n.appendChild(y(\"div\",\"\\xA0\",\"CodeMirror-cursor\"));if(i.style.left=r.left+\"px\",i.style.top=r.top+\"px\",i.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+\"px\",/\\bcm-fat-cursor\\b/.test(e.getWrapperElement().className)){var a=fi(e,t,\"div\",null,null),l=a.right-a.left;i.style.width=(l>0?l:e.defaultCharWidth())+\"px\"}if(r.other){var u=n.appendChild(y(\"div\",\"\\xA0\",\"CodeMirror-cursor CodeMirror-secondarycursor\"));u.style.display=\"\",u.style.left=r.other.left+\"px\",u.style.top=r.other.top+\"px\",u.style.height=(r.other.bottom-r.other.top)*.85+\"px\"}}function pi(e,t){return e.top-t.top||e.left-t.left}function ff(e,t,n){var r=e.display,i=e.doc,a=document.createDocumentFragment(),l=Ia(e.display),u=l.left,f=Math.max(r.sizerWidth,Er(e)-r.sizer.offsetLeft)-l.right,m=i.direction==\"ltr\";function A(be,Ce,Ne,Fe){Ce<0&&(Ce=0),Ce=Math.round(Ce),Fe=Math.round(Fe),a.appendChild(y(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+be+`px;\n                             top: `+Ce+\"px; width: \"+(Ne??f-be)+`px;\n                             height: `+(Fe-Ce)+\"px\"))}function B(be,Ce,Ne){var Fe=Ae(i,be),$e=Fe.text.length,Ve,vt;function rt(ut,Dt){return fi(e,ne(be,ut),\"div\",Fe,Dt)}function Ot(ut,Dt,yt){var ft=Ga(e,Fe,null,ut),ct=Dt==\"ltr\"==(yt==\"after\")?\"left\":\"right\",lt=yt==\"after\"?ft.begin:ft.end-(/\\s/.test(Fe.text.charAt(ft.end-1))?2:1);return rt(lt,ct)[ct]}var At=Pe(Fe,i.direction);return nt(At,Ce||0,Ne??$e,function(ut,Dt,yt,ft){var ct=yt==\"ltr\",lt=rt(ut,ct?\"left\":\"right\"),qt=rt(Dt-1,ct?\"right\":\"left\"),pn=Ce==null&&ut==0,Sr=Ne==null&&Dt==$e,St=ft==0,rr=!At||ft==At.length-1;if(qt.top-lt.top<=3){var bt=(m?pn:Sr)&&St,Zo=(m?Sr:pn)&&rr,cr=bt?u:(ct?lt:qt).left,Nr=Zo?f:(ct?qt:lt).right;A(cr,lt.top,Nr-cr,lt.bottom)}else{var Or,Lt,hn,Xo;ct?(Or=m&&pn&&St?u:lt.left,Lt=m?f:Ot(ut,yt,\"before\"),hn=m?u:Ot(Dt,yt,\"after\"),Xo=m&&Sr&&rr?f:qt.right):(Or=m?Ot(ut,yt,\"before\"):u,Lt=!m&&pn&&St?f:lt.right,hn=!m&&Sr&&rr?u:qt.left,Xo=m?Ot(Dt,yt,\"after\"):f),A(Or,lt.top,Lt-Or,lt.bottom),lt.bottom<qt.top&&A(u,lt.bottom,null,qt.top),A(hn,qt.top,Xo-hn,qt.bottom)}(!Ve||pi(lt,Ve)<0)&&(Ve=lt),pi(qt,Ve)<0&&(Ve=qt),(!vt||pi(lt,vt)<0)&&(vt=lt),pi(qt,vt)<0&&(vt=qt)}),{start:Ve,end:vt}}var ee=t.from(),Y=t.to();if(ee.line==Y.line)B(ee.line,ee.ch,Y.ch);else{var ie=Ae(i,ee.line),ue=Ae(i,Y.line),me=Zt(ie)==Zt(ue),ve=B(ee.line,ee.ch,me?ie.text.length+1:null).end,_e=B(Y.line,me?0:null,Y.ch).start;me&&(ve.top<_e.top-2?(A(ve.right,ve.top,null,ve.bottom),A(u,_e.top,_e.left,_e.bottom)):A(ve.right,ve.top,_e.left-ve.right,ve.bottom)),ve.bottom<_e.top&&A(u,ve.bottom,null,_e.top)}n.appendChild(a)}function ko(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility=\"\",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){e.hasFocus()||en(e),t.cursorDiv.style.visibility=(n=!n)?\"\":\"hidden\"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\"hidden\")}}function Qa(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||So(e))}function wo(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&en(e))},100)}function So(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),e.options.readOnly!=\"nocursor\"&&(e.state.focused||(it(e,\"focus\",e,t),e.state.focused=!0,le(e.display.wrapper,\"CodeMirror-focused\"),!e.curOp&&e.display.selForContextMenu!=e.doc.sel&&(e.display.input.reset(),g&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),ko(e))}function en(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,\"blur\",e,t),e.state.focused=!1,Q(e.display.wrapper,\"CodeMirror-focused\")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function hi(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=Math.max(0,t.scroller.getBoundingClientRect().top),i=t.lineDiv.getBoundingClientRect().top,a=0,l=0;l<t.view.length;l++){var u=t.view[l],f=e.options.lineWrapping,m=void 0,A=0;if(!u.hidden){if(i+=u.line.height,s&&h<8){var B=u.node.offsetTop+u.node.offsetHeight;m=B-n,n=B}else{var ee=u.node.getBoundingClientRect();m=ee.bottom-ee.top,!f&&u.text.firstChild&&(A=u.text.firstChild.getBoundingClientRect().right-ee.left-1)}var Y=u.line.height-m;if((Y>.005||Y<-.005)&&(i<r&&(a-=Y),Bt(u.line,m),Va(u.line),u.rest))for(var ie=0;ie<u.rest.length;ie++)Va(u.rest[ie]);if(A>e.display.sizerWidth){var ue=Math.ceil(A/Jr(e.display));ue>e.display.maxLineLength&&(e.display.maxLineLength=ue,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(t.scroller.scrollTop+=a)}function Va(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function gi(e,t,n){var r=n&&n.top!=null?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-ui(e));var i=n&&n.bottom!=null?n.bottom:r+e.wrapper.clientHeight,a=P(t,r),l=P(t,i);if(n&&n.ensure){var u=n.ensure.from.line,f=n.ensure.to.line;u<a?(a=u,l=P(t,ar(Ae(t,u))+e.wrapper.clientHeight)):Math.min(f,t.lastLine())>=l&&(a=P(t,ar(Ae(t,f))-e.wrapper.clientHeight),l=f)}return{from:a,to:Math.max(l,a+1)}}function df(e,t){if(!ot(e,\"scrollCursorIntoView\")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null,a=n.wrapper.ownerDocument;if(t.top+r.top<0?i=!0:t.bottom+r.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(i=!1),i!=null&&!M){var l=y(\"div\",\"\\u200B\",null,`position: absolute;\n                         top: `+(t.top-n.viewOffset-ui(e.display))+`px;\n                         height: `+(t.bottom-t.top+er(e)+n.barHeight)+`px;\n                         left: `+t.left+\"px; width: \"+Math.max(2,t.right-t.left)+\"px;\");e.display.lineSpace.appendChild(l),l.scrollIntoView(i),e.display.lineSpace.removeChild(l)}}}function pf(e,t,n,r){r==null&&(r=0);var i;!e.options.lineWrapping&&t==n&&(n=t.sticky==\"before\"?ne(t.line,t.ch+1,\"before\"):t,t=t.ch?ne(t.line,t.sticky==\"before\"?t.ch-1:t.ch,\"after\"):t);for(var a=0;a<5;a++){var l=!1,u=Xt(e,t),f=!n||n==t?u:Xt(e,n);i={left:Math.min(u.left,f.left),top:Math.min(u.top,f.top)-r,right:Math.max(u.left,f.left),bottom:Math.max(u.bottom,f.bottom)+r};var m=To(e,i),A=e.doc.scrollTop,B=e.doc.scrollLeft;if(m.scrollTop!=null&&(An(e,m.scrollTop),Math.abs(e.doc.scrollTop-A)>1&&(l=!0)),m.scrollLeft!=null&&(Dr(e,m.scrollLeft),Math.abs(e.doc.scrollLeft-B)>1&&(l=!0)),!l)break}return i}function hf(e,t){var n=To(e,t);n.scrollTop!=null&&An(e,n.scrollTop),n.scrollLeft!=null&&Dr(e,n.scrollLeft)}function To(e,t){var n=e.display,r=Vr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&e.curOp.scrollTop!=null?e.curOp.scrollTop:n.scroller.scrollTop,a=fo(e),l={};t.bottom-t.top>a&&(t.bottom=t.top+a);var u=e.doc.height+co(n),f=t.top<r,m=t.bottom>u-r;if(t.top<i)l.scrollTop=f?0:t.top;else if(t.bottom>i+a){var A=Math.min(t.top,(m?u:t.bottom)-a);A!=i&&(l.scrollTop=A)}var B=e.options.fixedGutter?0:n.gutters.offsetWidth,ee=e.curOp&&e.curOp.scrollLeft!=null?e.curOp.scrollLeft:n.scroller.scrollLeft-B,Y=Er(e)-n.gutters.offsetWidth,ie=t.right-t.left>Y;return ie&&(t.right=t.left+Y),t.left<10?l.scrollLeft=0:t.left<ee?l.scrollLeft=Math.max(0,t.left+B-(ie?0:10)):t.right>Y+ee-3&&(l.scrollLeft=t.right+(ie?0:10)-Y),l}function Lo(e,t){t!=null&&(mi(e),e.curOp.scrollTop=(e.curOp.scrollTop==null?e.doc.scrollTop:e.curOp.scrollTop)+t)}function tn(e){mi(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Mn(e,t,n){(t!=null||n!=null)&&mi(e),t!=null&&(e.curOp.scrollLeft=t),n!=null&&(e.curOp.scrollTop=n)}function gf(e,t){mi(e),e.curOp.scrollToPos=t}function mi(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=$a(e,t.from),r=$a(e,t.to);Ja(e,n,r,t.margin)}}function Ja(e,t,n,r){var i=To(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Mn(e,i.scrollLeft,i.scrollTop)}function An(e,t){Math.abs(e.doc.scrollTop-t)<2||(v||Eo(e,{top:t}),el(e,t,!0),v&&Eo(e),Fn(e,100))}function el(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),!(e.display.scroller.scrollTop==t&&!n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),!((n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r)&&(e.doc.scrollLeft=t,ol(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Dn(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+co(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+er(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var qr=function(e,t,n){this.cm=n;var r=this.vert=y(\"div\",[y(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),i=this.horiz=y(\"div\",[y(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");r.tabIndex=i.tabIndex=-1,e(r),e(i),Ie(r,\"scroll\",function(){r.clientHeight&&t(r.scrollTop,\"vertical\")}),Ie(i,\"scroll\",function(){i.clientWidth&&t(i.scrollLeft,\"horizontal\")}),this.checkedZeroWidth=!1,s&&h<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")};qr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display=\"block\",this.vert.style.bottom=t?r+\"px\":\"0\";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+\"px\"}else this.vert.scrollTop=0,this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\";if(t){this.horiz.style.display=\"block\",this.horiz.style.right=n?r+\"px\":\"0\",this.horiz.style.left=e.barLeft+\"px\";var a=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+a)+\"px\"}else this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\";return!this.checkedZeroWidth&&e.clientHeight>0&&(r==0&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},qr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\"horiz\")},qr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\"vert\")},qr.prototype.zeroWidthHack=function(){var e=O&&!z?\"12px\":\"18px\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility=\"hidden\",this.disableHoriz=new qe,this.disableVert=new qe},qr.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility=\"\";function r(){var i=e.getBoundingClientRect(),a=n==\"vert\"?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1);a!=e?e.style.visibility=\"hidden\":t.set(1e3,r)}t.set(1e3,r)},qr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var qn=function(){};qn.prototype.update=function(){return{bottom:0,right:0}},qn.prototype.setScrollLeft=function(){},qn.prototype.setScrollTop=function(){},qn.prototype.clear=function(){};function rn(e,t){t||(t=Dn(e));var n=e.display.barWidth,r=e.display.barHeight;tl(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&hi(e),tl(e,Dn(e)),n=e.display.barWidth,r=e.display.barHeight}function tl(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+\"px\",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+\"px\",n.heightForcer.style.borderBottom=r.bottom+\"px solid transparent\",r.right&&r.bottom?(n.scrollbarFiller.style.display=\"block\",n.scrollbarFiller.style.height=r.bottom+\"px\",n.scrollbarFiller.style.width=r.right+\"px\"):n.scrollbarFiller.style.display=\"\",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display=\"block\",n.gutterFiller.style.height=r.bottom+\"px\",n.gutterFiller.style.width=t.gutterWidth+\"px\"):n.gutterFiller.style.display=\"\"}var rl={native:qr,null:qn};function nl(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&Q(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new rl[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Ie(t,\"mousedown\",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute(\"cm-not-content\",\"true\")},function(t,n){n==\"horizontal\"?Dr(e,t):An(e,t)},e),e.display.scrollbars.addClass&&le(e.display.wrapper,e.display.scrollbars.addClass)}var mf=0;function Fr(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++mf,markArrays:null},Kc(e.curOp)}function Ir(e){var t=e.curOp;t&&Zc(t,function(n){for(var r=0;r<n.ops.length;r++)n.ops[r].cm.curOp=null;vf(n)})}function vf(e){for(var t=e.ops,n=0;n<t.length;n++)bf(t[n]);for(var r=0;r<t.length;r++)yf(t[r]);for(var i=0;i<t.length;i++)xf(t[i]);for(var a=0;a<t.length;a++)_f(t[a]);for(var l=0;l<t.length;l++)kf(t[l])}function bf(e){var t=e.cm,n=t.display;Sf(t),e.updateMaxLine&&so(t),e.mustUpdate=e.viewChanged||e.forceUpdate||e.scrollTop!=null||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new vi(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function yf(e){e.updatedDisplay=e.mustUpdate&&Co(e.cm,e.update)}function xf(e){var t=e.cm,n=t.display;e.updatedDisplay&&hi(t),e.barMeasure=Dn(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Oa(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+er(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Er(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function _f(e){var t=e.cm;e.adjustWidthTo!=null&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<t.doc.scrollLeft&&Dr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==R(de(t));e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&rn(t,e.barMeasure),e.updatedDisplay&&Mo(t,e.barMeasure),e.selectionChanged&&ko(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&Qa(e.cm)}function kf(e){var t=e.cm,n=t.display,r=t.doc;if(e.updatedDisplay&&il(t,e.update),n.wheelStartX!=null&&(e.scrollTop!=null||e.scrollLeft!=null||e.scrollToPos)&&(n.wheelStartX=n.wheelStartY=null),e.scrollTop!=null&&el(t,e.scrollTop,e.forceScroll),e.scrollLeft!=null&&Dr(t,e.scrollLeft,!0,!0),e.scrollToPos){var i=pf(t,je(r,e.scrollToPos.from),je(r,e.scrollToPos.to),e.scrollToPos.margin);df(t,i)}var a=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(a)for(var u=0;u<a.length;++u)a[u].lines.length||it(a[u],\"hide\");if(l)for(var f=0;f<l.length;++f)l[f].lines.length&&it(l[f],\"unhide\");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&it(t,\"changes\",t,e.changeObjs),e.update&&e.update.finish()}function Nt(e,t){if(e.curOp)return t();Fr(e);try{return t()}finally{Ir(e)}}function gt(e,t){return function(){if(e.curOp)return t.apply(e,arguments);Fr(e);try{return t.apply(e,arguments)}finally{Ir(e)}}}function Tt(e){return function(){if(this.curOp)return e.apply(this,arguments);Fr(this);try{return e.apply(this,arguments)}finally{Ir(this)}}}function mt(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);Fr(t);try{return e.apply(this,arguments)}finally{Ir(t)}}}function Fn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,Ee(wf,e))}function wf(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=wn(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(a){if(r.line>=e.display.viewFrom){var l=a.styles,u=a.text.length>e.options.maxHighlightLength?Vt(t.mode,r.state):null,f=fa(e,a,r,!0);u&&(r.state=u),a.styles=f.styles;var m=a.styleClasses,A=f.classes;A?a.styleClasses=A:m&&(a.styleClasses=null);for(var B=!l||l.length!=a.styles.length||m!=A&&(!m||!A||m.bgClass!=A.bgClass||m.textClass!=A.textClass),ee=0;!B&&ee<l.length;++ee)B=l[ee]!=a.styles[ee];B&&i.push(r.line),a.stateAfter=r.save(),r.nextLine()}else a.text.length<=e.options.maxHighlightLength&&ro(e,a.text,r),a.stateAfter=r.line%5==0?r.save():null,r.nextLine();if(+new Date>n)return Fn(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Nt(e,function(){for(var a=0;a<i.length;a++)vr(e,i[a],\"text\")})}}var vi=function(e,t,n){var r=e.display;this.viewport=t,this.visible=gi(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=Er(e),this.force=n,this.dims=bo(e),this.events=[]};vi.prototype.signal=function(e,t){It(e,t)&&this.events.push(arguments)},vi.prototype.finish=function(){for(var e=0;e<this.events.length;e++)it.apply(null,this.events[e])};function Sf(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=er(e)+\"px\",t.sizer.style.marginBottom=-t.nativeBarWidth+\"px\",t.sizer.style.borderRightWidth=er(e)+\"px\",t.scrollbarsClipped=!0)}function Tf(e){if(e.hasFocus())return null;var t=R(de(e));if(!t||!N(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=pe(e).getSelection();r.anchorNode&&r.extend&&N(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}function Lf(e){if(!(!e||!e.activeElt||e.activeElt==R(ze(e.activeElt)))&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&N(document.body,e.anchorNode)&&N(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,n=t.defaultView.getSelection(),r=t.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),n.removeAllRanges(),n.addRange(r),n.extend(e.focusNode,e.focusOffset)}}function Co(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return br(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(n.updateLineNumbers==null||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&Xa(e)==0)return!1;al(e)&&(br(e),t.dims=bo(e));var i=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFrom<a&&a-n.viewFrom<20&&(a=Math.max(r.first,n.viewFrom)),n.viewTo>l&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),or&&(a=ao(e.doc,a),l=Ta(e.doc,l));var u=a!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;cf(e,a,l),n.viewOffset=ar(Ae(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+\"px\";var f=Xa(e);if(!u&&f==0&&!t.force&&n.renderedView==n.view&&(n.updateLineNumbers==null||n.updateLineNumbers>=n.viewTo))return!1;var m=Tf(e);return f>4&&(n.lineDiv.style.display=\"none\"),Cf(e,n.updateLineNumbers,t.dims),f>4&&(n.lineDiv.style.display=\"\"),n.renderedView=n.view,Lf(m),j(n.cursorDiv),j(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,u&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,Fn(e,400)),n.updateLineNumbers=null,!0}function il(e,t){for(var n=t.viewport,r=!0;;r=!1){if(!r||!e.options.lineWrapping||t.oldDisplayWidth==Er(e)){if(n&&n.top!=null&&(n={top:Math.min(e.doc.height+co(e.display)-fo(e),n.top)}),t.visible=gi(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break}else r&&(t.visible=gi(e.display,e.doc,n));if(!Co(e,t))break;hi(e);var i=Dn(e);zn(e),rn(e,i),Mo(e,i),t.force=!1}t.signal(e,\"update\",e),(e.display.viewFrom!=e.display.reportedViewFrom||e.display.viewTo!=e.display.reportedViewTo)&&(t.signal(e,\"viewportChange\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Eo(e,t){var n=new vi(e,t);if(Co(e,n)){hi(e),il(e,n);var r=Dn(e);zn(e),rn(e,r),Mo(e,r),n.finish()}}function Cf(e,t,n){var r=e.display,i=e.options.lineNumbers,a=r.lineDiv,l=a.firstChild;function u(ie){var ue=ie.nextSibling;return g&&O&&e.display.currentWheelTarget==ie?ie.style.display=\"none\":ie.parentNode.removeChild(ie),ue}for(var f=r.view,m=r.viewFrom,A=0;A<f.length;A++){var B=f[A];if(!B.hidden)if(!B.node||B.node.parentNode!=a){var ee=Jc(e,B,m,n);a.insertBefore(ee,l)}else{for(;l!=B.node;)l=u(l);var Y=i&&t!=null&&t<=m&&B.lineNumber;B.changes&&(Se(B.changes,\"gutter\")>-1&&(Y=!1),Ma(e,B,m,n)),Y&&(j(B.lineNumber),B.lineNumber.appendChild(document.createTextNode(he(e.options,m)))),l=B.node.nextSibling}m+=B.size}for(;l;)l=u(l)}function zo(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+\"px\",ht(e,\"gutterChanged\",e)}function Mo(e,t){e.display.sizer.style.minHeight=t.docHeight+\"px\",e.display.heightForcer.style.top=t.docHeight+\"px\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+er(e)+\"px\"}function ol(e){var t=e.display,n=t.view;if(!(!t.alignWidgets&&(!t.gutters.firstChild||!e.options.fixedGutter))){for(var r=yo(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,a=r+\"px\",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&(n[l].gutter&&(n[l].gutter.style.left=a),n[l].gutterBackground&&(n[l].gutterBackground.style.left=a));var u=n[l].alignable;if(u)for(var f=0;f<u.length;f++)u[f].style.left=a}e.options.fixedGutter&&(t.gutters.style.left=r+i+\"px\")}}function al(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=he(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var i=r.measure.appendChild(y(\"div\",[y(\"div\",n)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),a=i.firstChild.offsetWidth,l=i.offsetWidth-a;return r.lineGutter.style.width=\"\",r.lineNumInnerWidth=Math.max(a,r.lineGutter.offsetWidth-l)+1,r.lineNumWidth=r.lineNumInnerWidth+l,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+\"px\",zo(e.display),!0}return!1}function Ao(e,t){for(var n=[],r=!1,i=0;i<e.length;i++){var a=e[i],l=null;if(typeof a!=\"string\"&&(l=a.style,a=a.className),a==\"CodeMirror-linenumbers\")if(t)r=!0;else continue;n.push({className:a,style:l})}return t&&!r&&n.push({className:\"CodeMirror-linenumbers\",style:null}),n}function ll(e){var t=e.gutters,n=e.gutterSpecs;j(t),e.lineGutter=null;for(var r=0;r<n.length;++r){var i=n[r],a=i.className,l=i.style,u=t.appendChild(y(\"div\",null,\"CodeMirror-gutter \"+a));l&&(u.style.cssText=l),a==\"CodeMirror-linenumbers\"&&(e.lineGutter=u,u.style.width=(e.lineNumWidth||1)+\"px\")}t.style.display=n.length?\"\":\"none\",zo(e)}function In(e){ll(e.display),zt(e),ol(e)}function Ef(e,t,n,r){var i=this;this.input=n,i.scrollbarFiller=y(\"div\",null,\"CodeMirror-scrollbar-filler\"),i.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\"),i.gutterFiller=y(\"div\",null,\"CodeMirror-gutter-filler\"),i.gutterFiller.setAttribute(\"cm-not-content\",\"true\"),i.lineDiv=K(\"div\",null,\"CodeMirror-code\"),i.selectionDiv=y(\"div\",null,null,\"position: relative; z-index: 1\"),i.cursorDiv=y(\"div\",null,\"CodeMirror-cursors\"),i.measure=y(\"div\",null,\"CodeMirror-measure\"),i.lineMeasure=y(\"div\",null,\"CodeMirror-measure\"),i.lineSpace=K(\"div\",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,\"position: relative; outline: none\");var a=K(\"div\",[i.lineSpace],\"CodeMirror-lines\");i.mover=y(\"div\",[a],null,\"position: relative\"),i.sizer=y(\"div\",[i.mover],\"CodeMirror-sizer\"),i.sizerWidth=null,i.heightForcer=y(\"div\",null,null,\"position: absolute; height: \"+Be+\"px; width: 1px;\"),i.gutters=y(\"div\",null,\"CodeMirror-gutters\"),i.lineGutter=null,i.scroller=y(\"div\",[i.sizer,i.heightForcer,i.gutters],\"CodeMirror-scroll\"),i.scroller.setAttribute(\"tabIndex\",\"-1\"),i.wrapper=y(\"div\",[i.scrollbarFiller,i.gutterFiller,i.scroller],\"CodeMirror\"),w&&c===105&&(i.wrapper.style.clipPath=\"inset(0px)\"),i.wrapper.setAttribute(\"translate\",\"no\"),s&&h<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),!g&&!(v&&E)&&(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=Ao(r.gutters,r.lineNumbers),ll(i),n.init(i)}var bi=0,sr=null;s?sr=-.53:v?sr=15:w?sr=-.7:k&&(sr=-1/3);function sl(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return t==null&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),n==null&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:n==null&&(n=e.wheelDelta),{x:t,y:n}}function zf(e){var t=sl(e);return t.x*=sr,t.y*=sr,t}function ul(e,t){w&&c==102&&(e.display.chromeScrollHack==null?e.display.sizer.style.pointerEvents=\"none\":clearTimeout(e.display.chromeScrollHack),e.display.chromeScrollHack=setTimeout(function(){e.display.chromeScrollHack=null,e.display.sizer.style.pointerEvents=\"\"},100));var n=sl(t),r=n.x,i=n.y,a=sr;t.deltaMode===0&&(r=t.deltaX,i=t.deltaY,a=1);var l=e.display,u=l.scroller,f=u.scrollWidth>u.clientWidth,m=u.scrollHeight>u.clientHeight;if(r&&f||i&&m){if(i&&O&&g){e:for(var A=t.target,B=l.view;A!=u;A=A.parentNode)for(var ee=0;ee<B.length;ee++)if(B[ee].node==A){e.display.currentWheelTarget=A;break e}}if(r&&!v&&!d&&a!=null){i&&m&&An(e,Math.max(0,u.scrollTop+i*a)),Dr(e,Math.max(0,u.scrollLeft+r*a)),(!i||i&&m)&&kt(t),l.wheelStartX=null;return}if(i&&a!=null){var Y=i*a,ie=e.doc.scrollTop,ue=ie+l.wrapper.clientHeight;Y<0?ie=Math.max(0,ie+Y-50):ue=Math.min(e.doc.height,ue+Y+50),Eo(e,{top:ie,bottom:ue})}bi<20&&t.deltaMode!==0&&(l.wheelStartX==null?(l.wheelStartX=u.scrollLeft,l.wheelStartY=u.scrollTop,l.wheelDX=r,l.wheelDY=i,setTimeout(function(){if(l.wheelStartX!=null){var me=u.scrollLeft-l.wheelStartX,ve=u.scrollTop-l.wheelStartY,_e=ve&&l.wheelDY&&ve/l.wheelDY||me&&l.wheelDX&&me/l.wheelDX;l.wheelStartX=l.wheelStartY=null,_e&&(sr=(sr*bi+_e)/(bi+1),++bi)}},200)):(l.wheelDX+=r,l.wheelDY+=i))}}var jt=function(e,t){this.ranges=e,this.primIndex=t};jt.prototype.primary=function(){return this.ranges[this.primIndex]},jt.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!Xe(n.anchor,r.anchor)||!Xe(n.head,r.head))return!1}return!0},jt.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new Ye(pt(this.ranges[t].anchor),pt(this.ranges[t].head));return new jt(e,this.primIndex)},jt.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},jt.prototype.contains=function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(ye(t,r.from())>=0&&ye(e,r.to())<=0)return n}return-1};var Ye=function(e,t){this.anchor=e,this.head=t};Ye.prototype.from=function(){return Zr(this.anchor,this.head)},Ye.prototype.to=function(){return Et(this.anchor,this.head)},Ye.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function Yt(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort(function(ee,Y){return ye(ee.from(),Y.from())}),n=Se(t,i);for(var a=1;a<t.length;a++){var l=t[a],u=t[a-1],f=ye(u.to(),l.from());if(r&&!l.empty()?f>0:f>=0){var m=Zr(u.from(),l.from()),A=Et(u.to(),l.to()),B=u.empty()?l.from()==l.head:u.from()==u.head;a<=n&&--n,t.splice(--a,2,new Ye(B?A:m,B?m:A))}}return new jt(t,n)}function yr(e,t){return new jt([new Ye(e,t||e)],0)}function xr(e){return e.text?ne(e.from.line+e.text.length-1,ce(e.text).length+(e.text.length==1?e.from.ch:0)):e.to}function cl(e,t){if(ye(e,t.from)<0)return e;if(ye(e,t.to)<=0)return xr(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=xr(t).ch-t.to.ch),ne(n,r)}function Do(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new Ye(cl(i.anchor,t),cl(i.head,t)))}return Yt(e.cm,n,e.sel.primIndex)}function fl(e,t,n){return e.line==t.line?ne(n.line,e.ch-t.ch+n.ch):ne(n.line+(e.line-t.line),e.ch)}function Mf(e,t,n){for(var r=[],i=ne(e.first,0),a=i,l=0;l<t.length;l++){var u=t[l],f=fl(u.from,i,a),m=fl(xr(u),i,a);if(i=u.to,a=m,n==\"around\"){var A=e.sel.ranges[l],B=ye(A.head,A.anchor)<0;r[l]=new Ye(B?m:f,B?f:m)}else r[l]=new Ye(f,f)}return new jt(r,e.sel.primIndex)}function qo(e){e.doc.mode=$r(e.options,e.doc.modeOption),Nn(e)}function Nn(e){e.doc.iter(function(t){t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Fn(e,100),e.state.modeGen++,e.curOp&&zt(e)}function dl(e,t){return t.from.ch==0&&t.to.ch==0&&ce(t.text)==\"\"&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Fo(e,t,n,r){function i(_e){return n?n[_e]:null}function a(_e,be,Ce){Oc(_e,be,Ce,r),ht(_e,\"change\",_e,t)}function l(_e,be){for(var Ce=[],Ne=_e;Ne<be;++Ne)Ce.push(new Xr(m[Ne],i(Ne),r));return Ce}var u=t.from,f=t.to,m=t.text,A=Ae(e,u.line),B=Ae(e,f.line),ee=ce(m),Y=i(m.length-1),ie=f.line-u.line;if(t.full)e.insert(0,l(0,m.length)),e.remove(m.length,e.size-m.length);else if(dl(e,t)){var ue=l(0,m.length-1);a(B,B.text,Y),ie&&e.remove(u.line,ie),ue.length&&e.insert(u.line,ue)}else if(A==B)if(m.length==1)a(A,A.text.slice(0,u.ch)+ee+A.text.slice(f.ch),Y);else{var me=l(1,m.length-1);me.push(new Xr(ee+A.text.slice(f.ch),Y,r)),a(A,A.text.slice(0,u.ch)+m[0],i(0)),e.insert(u.line+1,me)}else if(m.length==1)a(A,A.text.slice(0,u.ch)+m[0]+B.text.slice(f.ch),i(0)),e.remove(u.line+1,ie);else{a(A,A.text.slice(0,u.ch)+m[0],i(0)),a(B,ee+B.text.slice(f.ch),Y);var ve=l(1,m.length-1);ie>1&&e.remove(u.line+1,ie-1),e.insert(u.line+1,ve)}ht(e,\"change\",e,t)}function _r(e,t,n){function r(i,a,l){if(i.linked)for(var u=0;u<i.linked.length;++u){var f=i.linked[u];if(f.doc!=a){var m=l&&f.sharedHist;n&&!m||(t(f.doc,m),r(f.doc,i,m))}}}r(e,null,!0)}function pl(e,t){if(t.cm)throw new Error(\"This document is already in use.\");e.doc=t,t.cm=e,xo(e),qo(e),hl(e),e.options.direction=t.direction,e.options.lineWrapping||so(e),e.options.mode=t.modeOption,zt(e)}function hl(e){(e.doc.direction==\"rtl\"?le:Q)(e.display.lineDiv,\"CodeMirror-rtl\")}function Af(e){Nt(e,function(){hl(e),zt(e)})}function yi(e){this.done=[],this.undone=[],this.undoDepth=e?e.undoDepth:1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e?e.maxGeneration:1}function Io(e,t){var n={from:pt(t.from),to:xr(t),text:ir(e,t.from,t.to)};return vl(e,n,t.from.line,t.to.line+1),_r(e,function(r){return vl(r,n,t.from.line,t.to.line+1)},!0),n}function gl(e){for(;e.length;){var t=ce(e);if(t.ranges)e.pop();else break}}function Df(e,t){if(t)return gl(e.done),ce(e.done);if(e.done.length&&!ce(e.done).ranges)return ce(e.done);if(e.done.length>1&&!e.done[e.done.length-2].ranges)return e.done.pop(),ce(e.done)}function ml(e,t,n,r){var i=e.history;i.undone.length=0;var a=+new Date,l,u;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&(t.origin.charAt(0)==\"+\"&&i.lastModTime>a-(e.cm?e.cm.options.historyEventDelay:500)||t.origin.charAt(0)==\"*\"))&&(l=Df(i,i.lastOp==r)))u=ce(l.changes),ye(t.from,t.to)==0&&ye(t.from,u.to)==0?u.to=xr(t):l.changes.push(Io(e,t));else{var f=ce(i.done);for((!f||!f.ranges)&&xi(e.sel,i.done),l={changes:[Io(e,t)],generation:i.generation},i.done.push(l);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,u||it(e,\"historyAdded\")}function qf(e,t,n,r){var i=t.charAt(0);return i==\"*\"||i==\"+\"&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function Ff(e,t,n,r){var i=e.history,a=r&&r.origin;n==i.lastSelOp||a&&i.lastSelOrigin==a&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==a||qf(e,a,ce(i.done),t))?i.done[i.done.length-1]=t:xi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=a,i.lastSelOp=n,r&&r.clearRedo!==!1&&gl(i.undone)}function xi(e,t){var n=ce(t);n&&n.ranges&&n.equals(e)||t.push(e)}function vl(e,t,n,r){var i=t[\"spans_\"+e.id],a=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(l){l.markedSpans&&((i||(i=t[\"spans_\"+e.id]={}))[a]=l.markedSpans),++a})}function If(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function Nf(e,t){var n=t[\"spans_\"+e.id];if(!n)return null;for(var r=[],i=0;i<t.text.length;++i)r.push(If(n[i]));return r}function bl(e,t){var n=Nf(e,t),r=io(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var a=n[i],l=r[i];if(a&&l)e:for(var u=0;u<l.length;++u){for(var f=l[u],m=0;m<a.length;++m)if(a[m].marker==f.marker)continue e;a.push(f)}else l&&(n[i]=l)}return n}function nn(e,t,n){for(var r=[],i=0;i<e.length;++i){var a=e[i];if(a.ranges){r.push(n?jt.prototype.deepCopy.call(a):a);continue}var l=a.changes,u=[];r.push({changes:u});for(var f=0;f<l.length;++f){var m=l[f],A=void 0;if(u.push({from:m.from,to:m.to,text:m.text}),t)for(var B in m)(A=B.match(/^spans_(\\d+)$/))&&Se(t,Number(A[1]))>-1&&(ce(u)[B]=m[B],delete m[B])}}return r}function No(e,t,n,r){if(r){var i=e.anchor;if(n){var a=ye(t,i)<0;a!=ye(n,i)<0?(i=t,t=n):a!=ye(t,n)<0&&(t=n)}return new Ye(i,t)}else return new Ye(n||t,t)}function _i(e,t,n,r,i){i==null&&(i=e.cm&&(e.cm.display.shift||e.extend)),wt(e,new jt([No(e.sel.primary(),t,n,i)],0),r)}function yl(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),a=0;a<e.sel.ranges.length;a++)r[a]=No(e.sel.ranges[a],t[a],null,i);var l=Yt(e.cm,r,e.sel.primIndex);wt(e,l,n)}function Oo(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,wt(e,Yt(e.cm,i,e.sel.primIndex),r)}function xl(e,t,n,r){wt(e,yr(t,n),r)}function Of(e,t,n){var r={ranges:t.ranges,update:function(i){this.ranges=[];for(var a=0;a<i.length;a++)this.ranges[a]=new Ye(je(e,i[a].anchor),je(e,i[a].head))},origin:n&&n.origin};return it(e,\"beforeSelectionChange\",e,r),e.cm&&it(e.cm,\"beforeSelectionChange\",e.cm,r),r.ranges!=t.ranges?Yt(e.cm,r.ranges,r.ranges.length-1):t}function _l(e,t,n){var r=e.history.done,i=ce(r);i&&i.ranges?(r[r.length-1]=t,ki(e,t,n)):wt(e,t,n)}function wt(e,t,n){ki(e,t,n),Ff(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function ki(e,t,n){(It(e,\"beforeSelectionChange\")||e.cm&&It(e.cm,\"beforeSelectionChange\"))&&(t=Of(e,t,n));var r=n&&n.bias||(ye(t.primary().head,e.sel.primary().head)<0?-1:1);kl(e,Sl(e,t,r,!0)),!(n&&n.scroll===!1)&&e.cm&&e.cm.getOption(\"readOnly\")!=\"nocursor\"&&tn(e.cm)}function kl(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,Rt(e.cm)),ht(e,\"cursorActivity\",e))}function wl(e){kl(e,Sl(e,e.sel,null,!1))}function Sl(e,t,n,r){for(var i,a=0;a<t.ranges.length;a++){var l=t.ranges[a],u=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[a],f=wi(e,l.anchor,u&&u.anchor,n,r),m=l.head==l.anchor?f:wi(e,l.head,u&&u.head,n,r);(i||f!=l.anchor||m!=l.head)&&(i||(i=t.ranges.slice(0,a)),i[a]=new Ye(f,m))}return i?Yt(e.cm,i,t.primIndex):t}function on(e,t,n,r,i){var a=Ae(e,t.line);if(a.markedSpans)for(var l=0;l<a.markedSpans.length;++l){var u=a.markedSpans[l],f=u.marker,m=\"selectLeft\"in f?!f.selectLeft:f.inclusiveLeft,A=\"selectRight\"in f?!f.selectRight:f.inclusiveRight;if((u.from==null||(m?u.from<=t.ch:u.from<t.ch))&&(u.to==null||(A?u.to>=t.ch:u.to>t.ch))){if(i&&(it(f,\"beforeCursorEnter\"),f.explicitlyCleared))if(a.markedSpans){--l;continue}else break;if(!f.atomic)continue;if(n){var B=f.find(r<0?1:-1),ee=void 0;if((r<0?A:m)&&(B=Tl(e,B,-r,B&&B.line==t.line?a:null)),B&&B.line==t.line&&(ee=ye(B,n))&&(r<0?ee<0:ee>0))return on(e,B,t,r,i)}var Y=f.find(r<0?-1:1);return(r<0?m:A)&&(Y=Tl(e,Y,r,Y.line==t.line?a:null)),Y?on(e,Y,t,r,i):null}}return t}function wi(e,t,n,r,i){var a=r||1,l=on(e,t,n,a,i)||!i&&on(e,t,n,a,!0)||on(e,t,n,-a,i)||!i&&on(e,t,n,-a,!0);return l||(e.cantEdit=!0,ne(e.first,0))}function Tl(e,t,n,r){return n<0&&t.ch==0?t.line>e.first?je(e,ne(t.line-1)):null:n>0&&t.ch==(r||Ae(e,t.line)).text.length?t.line<e.first+e.size-1?ne(t.line+1,0):null:new ne(t.line,t.ch+n)}function Ll(e){e.setSelection(ne(e.firstLine(),0),ne(e.lastLine()),ke)}function Cl(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return r.canceled=!0}};return n&&(r.update=function(i,a,l,u){i&&(r.from=je(e,i)),a&&(r.to=je(e,a)),l&&(r.text=l),u!==void 0&&(r.origin=u)}),it(e,\"beforeChange\",e,r),e.cm&&it(e.cm,\"beforeChange\",e.cm,r),r.canceled?(e.cm&&(e.cm.curOp.updateInput=2),null):{from:r.from,to:r.to,text:r.text,origin:r.origin}}function an(e,t,n){if(e.cm){if(!e.cm.curOp)return gt(e.cm,an)(e,t,n);if(e.cm.state.suppressEdits)return}if(!((It(e,\"beforeChange\")||e.cm&&It(e.cm,\"beforeChange\"))&&(t=Cl(e,t,!0),!t))){var r=ba&&!n&&qc(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)El(e,{from:r[i].from,to:r[i].to,text:i?[\"\"]:t.text,origin:t.origin});else El(e,t)}}function El(e,t){if(!(t.text.length==1&&t.text[0]==\"\"&&ye(t.from,t.to)==0)){var n=Do(e,t);ml(e,t,n,e.cm?e.cm.curOp.id:NaN),On(e,t,n,io(e,t));var r=[];_r(e,function(i,a){!a&&Se(r,i.history)==-1&&(Dl(i.history,t),r.push(i.history)),On(i,t,null,io(i,t))})}}function Si(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!(r&&!n)){for(var i=e.history,a,l=e.sel,u=t==\"undo\"?i.done:i.undone,f=t==\"undo\"?i.undone:i.done,m=0;m<u.length&&(a=u[m],!(n?a.ranges&&!a.equals(e.sel):!a.ranges));m++);if(m!=u.length){for(i.lastOrigin=i.lastSelOrigin=null;;)if(a=u.pop(),a.ranges){if(xi(a,f),n&&!a.equals(e.sel)){wt(e,a,{clearRedo:!1});return}l=a}else if(r){u.push(a);return}else break;var A=[];xi(l,f),f.push({changes:A,generation:i.generation}),i.generation=a.generation||++i.maxGeneration;for(var B=It(e,\"beforeChange\")||e.cm&&It(e.cm,\"beforeChange\"),ee=function(ue){var me=a.changes[ue];if(me.origin=t,B&&!Cl(e,me,!1))return u.length=0,{};A.push(Io(e,me));var ve=ue?Do(e,me):ce(u);On(e,me,ve,bl(e,me)),!ue&&e.cm&&e.cm.scrollIntoView({from:me.from,to:xr(me)});var _e=[];_r(e,function(be,Ce){!Ce&&Se(_e,be.history)==-1&&(Dl(be.history,me),_e.push(be.history)),On(be,me,null,bl(be,me))})},Y=a.changes.length-1;Y>=0;--Y){var ie=ee(Y);if(ie)return ie.v}}}}function zl(e,t){if(t!=0&&(e.first+=t,e.sel=new jt(He(e.sel.ranges,function(i){return new Ye(ne(i.anchor.line+t,i.anchor.ch),ne(i.head.line+t,i.head.ch))}),e.sel.primIndex),e.cm)){zt(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)vr(e.cm,r,\"gutter\")}}function On(e,t,n,r){if(e.cm&&!e.cm.curOp)return gt(e.cm,On)(e,t,n,r);if(t.to.line<e.first){zl(e,t.text.length-1-(t.to.line-t.from.line));return}if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);zl(e,i),t={from:ne(e.first,0),to:ne(t.to.line+i,t.to.ch),text:[ce(t.text)],origin:t.origin}}var a=e.lastLine();t.to.line>a&&(t={from:t.from,to:ne(a,Ae(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ir(e,t.from,t.to),n||(n=Do(e,t)),e.cm?Pf(e.cm,t,r):Fo(e,t,r),ki(e,n,ke),e.cantEdit&&wi(e,ne(e.firstLine(),0))&&(e.cantEdit=!1)}}function Pf(e,t,n){var r=e.doc,i=e.display,a=t.from,l=t.to,u=!1,f=a.line;e.options.lineWrapping||(f=x(Zt(Ae(r,a.line))),r.iter(f,l.line+1,function(Y){if(Y==i.maxLine)return u=!0,!0})),r.sel.contains(t.from,t.to)>-1&&Rt(e),Fo(r,t,n,Za(e)),e.options.lineWrapping||(r.iter(f,a.line+t.text.length,function(Y){var ie=li(Y);ie>i.maxLineLength&&(i.maxLine=Y,i.maxLineLength=ie,i.maxLineChanged=!0,u=!1)}),u&&(e.curOp.updateMaxLine=!0)),Lc(r,a.line),Fn(e,400);var m=t.text.length-(l.line-a.line)-1;t.full?zt(e):a.line==l.line&&t.text.length==1&&!dl(e.doc,t)?vr(e,a.line,\"text\"):zt(e,a.line,l.line+1,m);var A=It(e,\"changes\"),B=It(e,\"change\");if(B||A){var ee={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};B&&ht(e,\"change\",e,ee),A&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(ee)}e.display.selForContextMenu=null}function ln(e,t,n,r,i){var a;r||(r=n),ye(r,n)<0&&(a=[r,n],n=a[0],r=a[1]),typeof t==\"string\"&&(t=e.splitLines(t)),an(e,{from:n,to:r,text:t,origin:i})}function Ml(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function Al(e,t,n,r){for(var i=0;i<e.length;++i){var a=e[i],l=!0;if(a.ranges){a.copied||(a=e[i]=a.deepCopy(),a.copied=!0);for(var u=0;u<a.ranges.length;u++)Ml(a.ranges[u].anchor,t,n,r),Ml(a.ranges[u].head,t,n,r);continue}for(var f=0;f<a.changes.length;++f){var m=a.changes[f];if(n<m.from.line)m.from=ne(m.from.line+r,m.from.ch),m.to=ne(m.to.line+r,m.to.ch);else if(t<=m.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}function Dl(e,t){var n=t.from.line,r=t.to.line,i=t.text.length-(r-n)-1;Al(e.done,n,r,i),Al(e.undone,n,r,i)}function Pn(e,t,n,r){var i=t,a=t;return typeof t==\"number\"?a=Ae(e,ua(e,t)):i=x(t),i==null?null:(r(a,i)&&e.cm&&vr(e.cm,i,n),a)}function Bn(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}Bn.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;n<r;++n){var i=this.lines[n];this.height-=i.height,Pc(i),ht(i,\"delete\")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}};function jn(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}jn.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],i=r.chunkSize();if(e<i){var a=Math.min(t,i-e),l=r.height;if(r.removeInner(e,a),this.height-=l-r.height,i==a&&(this.children.splice(n--,1),r.parent=null),(t-=a)==0)break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof Bn))){var u=[];this.collapse(u),this.children=[new Bn(u)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],a=i.chunkSize();if(e<=a){if(i.insertInner(e,t,n),i.lines&&i.lines.length>50){for(var l=i.lines.length%25+25,u=l;u<i.lines.length;){var f=new Bn(i.lines.slice(u,u+=25));i.height-=f.height,this.children.splice(++r,0,f),f.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=a}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new jn(t);if(e.parent){e.size-=n.size,e.height-=n.height;var i=Se(e.parent.children,e);e.parent.children.splice(i+1,0,n)}else{var r=new jn(e.children);r.parent=e,e.children=[r,n],e=r}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],a=i.chunkSize();if(e<a){var l=Math.min(t,a-e);if(i.iterN(e,l,n))return!0;if((t-=l)==0)break;e=0}else e-=a}}};var Rn=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};Rn.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=x(n);if(!(r==null||!t)){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var a=Cn(this);Bt(n,Math.max(0,n.height-a)),e&&(Nt(e,function(){ql(e,n,-a),vr(e,r,\"widget\")}),ht(e,\"lineWidgetCleared\",e,this,r))}},Rn.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line;this.height=null;var i=Cn(this)-t;i&&(mr(this.doc,r)||Bt(r,r.height+i),n&&Nt(n,function(){n.curOp.forceUpdate=!0,ql(n,r,i),ht(n,\"lineWidgetChanged\",n,e,x(r))}))},Wt(Rn);function ql(e,t,n){ar(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Lo(e,n)}function Bf(e,t,n,r){var i=new Rn(e,n,r),a=e.cm;return a&&i.noHScroll&&(a.display.alignWidgets=!0),Pn(e,t,\"widget\",function(l){var u=l.widgets||(l.widgets=[]);if(i.insertAt==null?u.push(i):u.splice(Math.min(u.length,Math.max(0,i.insertAt)),0,i),i.line=l,a&&!mr(e,l)){var f=ar(l)<e.scrollTop;Bt(l,l.height+Cn(i)),f&&Lo(a,i.height),a.curOp.forceUpdate=!0}return!0}),a&&ht(a,\"lineWidgetAdded\",a,i,typeof t==\"number\"?t:x(t)),i}var Fl=0,kr=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++Fl};kr.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Fr(e),It(this,\"clear\")){var n=this.find();n&&ht(this,\"clear\",n.from,n.to)}for(var r=null,i=null,a=0;a<this.lines.length;++a){var l=this.lines[a],u=Sn(l.markedSpans,this);e&&!this.collapsed?vr(e,x(l),\"text\"):e&&(u.to!=null&&(i=x(l)),u.from!=null&&(r=x(l))),l.markedSpans=zc(l.markedSpans,u),u.from==null&&this.collapsed&&!mr(this.doc,l)&&e&&Bt(l,Vr(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var f=0;f<this.lines.length;++f){var m=Zt(this.lines[f]),A=li(m);A>e.display.maxLineLength&&(e.display.maxLine=m,e.display.maxLineLength=A,e.display.maxLineChanged=!0)}r!=null&&e&&this.collapsed&&zt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&wl(e.doc)),e&&ht(e,\"markerCleared\",e,this,r,i),t&&Ir(e),this.parent&&this.parent.clear()}},kr.prototype.find=function(e,t){e==null&&this.type==\"bookmark\"&&(e=1);for(var n,r,i=0;i<this.lines.length;++i){var a=this.lines[i],l=Sn(a.markedSpans,this);if(l.from!=null&&(n=ne(t?a:x(a),l.from),e==-1))return n;if(l.to!=null&&(r=ne(t?a:x(a),l.to),e==1))return r}return n&&{from:n,to:r}},kr.prototype.changed=function(){var e=this,t=this.find(-1,!0),n=this,r=this.doc.cm;!t||!r||Nt(r,function(){var i=t.line,a=x(t.line),l=po(r,a);if(l&&(ja(l),r.curOp.selectionChanged=r.curOp.forceUpdate=!0),r.curOp.updateMaxLine=!0,!mr(n.doc,i)&&n.height!=null){var u=n.height;n.height=null;var f=Cn(n)-u;f&&Bt(i,i.height+f)}ht(r,\"markerChanged\",r,e)})},kr.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(!t.maybeHiddenMarkers||Se(t.maybeHiddenMarkers,this)==-1)&&(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},kr.prototype.detachLine=function(e){if(this.lines.splice(Se(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},Wt(kr);function sn(e,t,n,r,i){if(r&&r.shared)return jf(e,t,n,r,i);if(e.cm&&!e.cm.curOp)return gt(e.cm,sn)(e,t,n,r,i);var a=new kr(e,i),l=ye(t,n);if(r&&ge(r,a,!1),l>0||l==0&&a.clearWhenEmpty!==!1)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=K(\"span\",[a.replacedWith],\"CodeMirror-widget\"),r.handleMouseEvents||a.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),r.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(Sa(e,t.line,t,n,a)||t.line!=n.line&&Sa(e,n.line,t,n,a))throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");Ec()}a.addToHistory&&ml(e,{from:t,to:n,origin:\"markText\"},e.sel,NaN);var u=t.line,f=e.cm,m;if(e.iter(u,n.line+1,function(B){f&&a.collapsed&&!f.options.lineWrapping&&Zt(B)==f.display.maxLine&&(m=!0),a.collapsed&&u!=t.line&&Bt(B,0),Mc(B,new ni(a,u==t.line?t.ch:null,u==n.line?n.ch:null),e.cm&&e.cm.curOp),++u}),a.collapsed&&e.iter(t.line,n.line+1,function(B){mr(e,B)&&Bt(B,0)}),a.clearOnEnter&&Ie(a,\"beforeCursorEnter\",function(){return a.clear()}),a.readOnly&&(Cc(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++Fl,a.atomic=!0),f){if(m&&(f.curOp.updateMaxLine=!0),a.collapsed)zt(f,t.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var A=t.line;A<=n.line;A++)vr(f,A,\"text\");a.atomic&&wl(f.doc),ht(f,\"markerAdded\",f,a)}return a}var Hn=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};Hn.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();ht(this,\"clear\")}},Hn.prototype.find=function(e,t){return this.primary.find(e,t)},Wt(Hn);function jf(e,t,n,r,i){r=ge(r),r.shared=!1;var a=[sn(e,t,n,r,i)],l=a[0],u=r.widgetNode;return _r(e,function(f){u&&(r.widgetNode=u.cloneNode(!0)),a.push(sn(f,je(f,t),je(f,n),r,i));for(var m=0;m<f.linked.length;++m)if(f.linked[m].isParent)return;l=ce(a)}),new Hn(a,l)}function Il(e){return e.findMarks(ne(e.first,0),e.clipPos(ne(e.lastLine())),function(t){return t.parent})}function Rf(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),a=e.clipPos(i.from),l=e.clipPos(i.to);if(ye(a,l)){var u=sn(e,a,l,r.primary,r.primary.type);r.markers.push(u),u.parent=r}}}function Hf(e){for(var t=function(r){var i=e[r],a=[i.primary.doc];_r(i.primary.doc,function(f){return a.push(f)});for(var l=0;l<i.markers.length;l++){var u=i.markers[l];Se(a,u.doc)==-1&&(u.parent=null,i.markers.splice(l--,1))}},n=0;n<e.length;n++)t(n)}var Wf=0,Mt=function(e,t,n,r,i){if(!(this instanceof Mt))return new Mt(e,t,n,r,i);n==null&&(n=0),jn.call(this,[new Bn([new Xr(\"\",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=n;var a=ne(n,0);this.sel=yr(a),this.history=new yi(null),this.id=++Wf,this.modeOption=t,this.lineSep=r,this.direction=i==\"rtl\"?\"rtl\":\"ltr\",this.extend=!1,typeof e==\"string\"&&(e=this.splitLines(e)),Fo(this,{from:a,to:a,text:e}),wt(this,yr(a),ke)};Mt.prototype=oe(jn.prototype,{constructor:Mt,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=kn(this,this.first,this.first+this.size);return e===!1?t:t.join(e||this.lineSeparator())},setValue:mt(function(e){var t=ne(this.first,0),n=this.first+this.size-1;an(this,{from:t,to:ne(n,Ae(this,n).text.length),text:this.splitLines(e),origin:\"setValue\",full:!0},!0),this.cm&&Mn(this.cm,0,0),wt(this,yr(t),ke)}),replaceRange:function(e,t,n,r){t=je(this,t),n=n?je(this,n):t,ln(this,e,t,n,r)},getRange:function(e,t,n){var r=ir(this,je(this,e),je(this,t));return n===!1?r:n===\"\"?r.join(\"\"):r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(ae(this,e))return Ae(this,e)},getLineNumber:function(e){return x(e)},getLineHandleVisualStart:function(e){return typeof e==\"number\"&&(e=Ae(this,e)),Zt(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return je(this,e)},getCursor:function(e){var t=this.sel.primary(),n;return e==null||e==\"head\"?n=t.head:e==\"anchor\"?n=t.anchor:e==\"end\"||e==\"to\"||e===!1?n=t.to():n=t.from(),n},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:mt(function(e,t,n){xl(this,je(this,typeof e==\"number\"?ne(e,t||0):e),null,n)}),setSelection:mt(function(e,t,n){xl(this,je(this,e),je(this,t||e),n)}),extendSelection:mt(function(e,t,n){_i(this,je(this,e),t&&je(this,t),n)}),extendSelections:mt(function(e,t){yl(this,ca(this,e),t)}),extendSelectionsBy:mt(function(e,t){var n=He(this.sel.ranges,e);yl(this,ca(this,n),t)}),setSelections:mt(function(e,t,n){if(e.length){for(var r=[],i=0;i<e.length;i++)r[i]=new Ye(je(this,e[i].anchor),je(this,e[i].head||e[i].anchor));t==null&&(t=Math.min(e.length-1,this.sel.primIndex)),wt(this,Yt(this.cm,r,t),n)}}),addSelection:mt(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new Ye(je(this,e),je(this,t||e))),wt(this,Yt(this.cm,r,r.length-1),n)}),getSelection:function(e){for(var t=this.sel.ranges,n,r=0;r<t.length;r++){var i=ir(this,t[r].from(),t[r].to());n=n?n.concat(i):i}return e===!1?n:n.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=ir(this,n[r].from(),n[r].to());e!==!1&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||\"+input\")},replaceSelections:mt(function(e,t,n){for(var r=[],i=this.sel,a=0;a<i.ranges.length;a++){var l=i.ranges[a];r[a]={from:l.from(),to:l.to(),text:this.splitLines(e[a]),origin:n}}for(var u=t&&t!=\"end\"&&Mf(this,r,t),f=r.length-1;f>=0;f--)an(this,r[f]);u?_l(this,u):this.cm&&tn(this.cm)}),undo:mt(function(){Si(this,\"undo\")}),redo:mt(function(){Si(this,\"redo\")}),undoSelection:mt(function(){Si(this,\"undo\",!0)}),redoSelection:mt(function(){Si(this,\"redo\",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var e=this;this.history=new yi(this.history),_r(this,function(t){return t.history=e.history},!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:nn(this.history.done),undone:nn(this.history.undone)}},setHistory:function(e){var t=this.history=new yi(this.history);t.done=nn(e.done.slice(0),null,!0),t.undone=nn(e.undone.slice(0),null,!0)},setGutterMarker:mt(function(e,t,n){return Pn(this,e,\"gutter\",function(r){var i=r.gutterMarkers||(r.gutterMarkers={});return i[t]=n,!n&&Le(i)&&(r.gutterMarkers=null),!0})}),clearGutter:mt(function(e){var t=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&Pn(t,n,\"gutter\",function(){return n.gutterMarkers[e]=null,Le(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if(typeof e==\"number\"){if(!ae(this,e)||(t=e,e=Ae(this,e),!e))return null}else if(t=x(e),t==null)return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:mt(function(e,t,n){return Pn(this,e,t==\"gutter\"?\"gutter\":\"class\",function(r){var i=t==\"text\"?\"textClass\":t==\"background\"?\"bgClass\":t==\"gutter\"?\"gutterClass\":\"wrapClass\";if(!r[i])r[i]=n;else{if(D(n).test(r[i]))return!1;r[i]+=\" \"+n}return!0})}),removeLineClass:mt(function(e,t,n){return Pn(this,e,t==\"gutter\"?\"gutter\":\"class\",function(r){var i=t==\"text\"?\"textClass\":t==\"background\"?\"bgClass\":t==\"gutter\"?\"gutterClass\":\"wrapClass\",a=r[i];if(a)if(n==null)r[i]=null;else{var l=a.match(D(n));if(!l)return!1;var u=l.index+l[0].length;r[i]=a.slice(0,l.index)+(!l.index||u==a.length?\"\":\" \")+a.slice(u)||null}else return!1;return!0})}),addLineWidget:mt(function(e,t,n){return Bf(this,e,t,n)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return sn(this,je(this,e),je(this,t),n,n&&n.type||\"range\")},setBookmark:function(e,t){var n={replacedWith:t&&(t.nodeType==null?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=je(this,e),sn(this,e,e,n,\"bookmark\")},findMarksAt:function(e){e=je(this,e);var t=[],n=Ae(this,e.line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(i.from==null||i.from<=e.ch)&&(i.to==null||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=je(this,e),t=je(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(a){var l=a.markedSpans;if(l)for(var u=0;u<l.length;u++){var f=l[u];!(f.to!=null&&i==e.line&&e.ch>=f.to||f.from==null&&i!=e.line||f.from!=null&&i==t.line&&f.from>=t.ch)&&(!n||n(f.marker))&&r.push(f.marker.parent||f.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)n[r].from!=null&&e.push(n[r].marker)}),e},posFromIndex:function(e){var t,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var a=i.text.length+r;if(a>e)return t=e,!0;e-=a,++n}),je(this,ne(n,t))},indexFromPos:function(e){e=je(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(r){t+=r.text.length+n}),t},copy:function(e){var t=new Mt(kn(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;e.from!=null&&e.from>t&&(t=e.from),e.to!=null&&e.to<n&&(n=e.to);var r=new Mt(kn(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],Rf(r,Il(this)),r},unlinkDoc:function(e){if(e instanceof tt&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var n=this.linked[t];if(n.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),Hf(Il(this));break}}if(e.history==this.history){var r=[e.id];_r(e,function(i){return r.push(i.id)},!0),e.history=new yi(null),e.history.done=nn(this.history.done,r),e.history.undone=nn(this.history.undone,r)}},iterLinkedDocs:function(e){_r(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Ht(e)},lineSeparator:function(){return this.lineSep||`\n`},setDirection:mt(function(e){e!=\"rtl\"&&(e=\"ltr\"),e!=this.direction&&(this.direction=e,this.iter(function(t){return t.order=null}),this.cm&&Af(this.cm))})}),Mt.prototype.eachLine=Mt.prototype.iter;var Nl=0;function Uf(e){var t=this;if(Ol(t),!(ot(t,e)||lr(t.display,e))){kt(e),s&&(Nl=+new Date);var n=Mr(t,e,!0),r=e.dataTransfer.files;if(!(!n||t.isReadOnly()))if(r&&r.length&&window.FileReader&&window.File)for(var i=r.length,a=Array(i),l=0,u=function(){++l==i&&gt(t,function(){n=je(t.doc,n);var Y={from:n,to:n,text:t.doc.splitLines(a.filter(function(ie){return ie!=null}).join(t.doc.lineSeparator())),origin:\"paste\"};an(t.doc,Y),_l(t.doc,yr(je(t.doc,n),je(t.doc,xr(Y))))})()},f=function(Y,ie){if(t.options.allowDropFileTypes&&Se(t.options.allowDropFileTypes,Y.type)==-1){u();return}var ue=new FileReader;ue.onerror=function(){return u()},ue.onload=function(){var me=ue.result;if(/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(me)){u();return}a[ie]=me,u()},ue.readAsText(Y)},m=0;m<r.length;m++)f(r[m],m);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1){t.state.draggingText(e),setTimeout(function(){return t.display.input.focus()},20);return}try{var A=e.dataTransfer.getData(\"Text\");if(A){var B;if(t.state.draggingText&&!t.state.draggingText.copy&&(B=t.listSelections()),ki(t.doc,yr(n,n)),B)for(var ee=0;ee<B.length;++ee)ln(t.doc,\"\",B[ee].anchor,B[ee].head,\"drag\");t.replaceSelection(A,\"around\",\"paste\"),t.display.input.focus()}}catch{}}}}function $f(e,t){if(s&&(!e.state.draggingText||+new Date-Nl<100)){dr(t);return}if(!(ot(e,t)||lr(e.display,t))&&(t.dataTransfer.setData(\"Text\",e.getSelection()),t.dataTransfer.effectAllowed=\"copyMove\",t.dataTransfer.setDragImage&&!k)){var n=y(\"img\",null,null,\"position: fixed; left: 0; top: 0;\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",d&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),d&&n.parentNode.removeChild(n)}}function Kf(e,t){var n=Mr(e,t);if(n){var r=document.createDocumentFragment();_o(e,n,r),e.display.dragCursor||(e.display.dragCursor=y(\"div\",null,\"CodeMirror-cursors CodeMirror-dragcursors\"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),V(e.display.dragCursor,r)}}function Ol(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Pl(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName(\"CodeMirror\"),n=[],r=0;r<t.length;r++){var i=t[r].CodeMirror;i&&n.push(i)}n.length&&n[0].operation(function(){for(var a=0;a<n.length;a++)e(n[a])})}}var Bl=!1;function Gf(){Bl||(Zf(),Bl=!0)}function Zf(){var e;Ie(window,\"resize\",function(){e==null&&(e=setTimeout(function(){e=null,Pl(Xf)},100))}),Ie(window,\"blur\",function(){return Pl(en)})}function Xf(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var wr={3:\"Pause\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Mod\",92:\"Mod\",93:\"Mod\",106:\"*\",107:\"=\",109:\"-\",110:\".\",111:\"/\",145:\"ScrollLock\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",224:\"Mod\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"},Wn=0;Wn<10;Wn++)wr[Wn+48]=wr[Wn+96]=String(Wn);for(var Ti=65;Ti<=90;Ti++)wr[Ti]=String.fromCharCode(Ti);for(var Un=1;Un<=12;Un++)wr[Un+111]=wr[Un+63235]=\"F\"+Un;var ur={};ur.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"},ur.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"},ur.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\",\"Ctrl-O\":\"openLine\"},ur.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]},ur.default=O?ur.macDefault:ur.pcDefault;function Yf(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var n,r,i,a,l=0;l<t.length-1;l++){var u=t[l];if(/^(cmd|meta|m)$/i.test(u))a=!0;else if(/^a(lt)?$/i.test(u))n=!0;else if(/^(c|ctrl|control)$/i.test(u))r=!0;else if(/^s(hift)?$/i.test(u))i=!0;else throw new Error(\"Unrecognized modifier name: \"+u)}return n&&(e=\"Alt-\"+e),r&&(e=\"Ctrl-\"+e),a&&(e=\"Cmd-\"+e),i&&(e=\"Shift-\"+e),e}function Qf(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if(r==\"...\"){delete e[n];continue}for(var i=He(n.split(\" \"),Yf),a=0;a<i.length;a++){var l=void 0,u=void 0;a==i.length-1?(u=i.join(\" \"),l=r):(u=i.slice(0,a+1).join(\" \"),l=\"...\");var f=t[u];if(!f)t[u]=l;else if(f!=l)throw new Error(\"Inconsistent bindings for \"+u)}delete e[n]}for(var m in t)e[m]=t[m];return e}function un(e,t,n,r){t=Li(t);var i=t.call?t.call(e,r):t[e];if(i===!1)return\"nothing\";if(i===\"...\")return\"multi\";if(i!=null&&n(i))return\"handled\";if(t.fallthrough){if(Object.prototype.toString.call(t.fallthrough)!=\"[object Array]\")return un(e,t.fallthrough,n,r);for(var a=0;a<t.fallthrough.length;a++){var l=un(e,t.fallthrough[a],n,r);if(l)return l}}}function jl(e){var t=typeof e==\"string\"?e:wr[e.keyCode];return t==\"Ctrl\"||t==\"Alt\"||t==\"Shift\"||t==\"Mod\"}function Rl(e,t,n){var r=e;return t.altKey&&r!=\"Alt\"&&(e=\"Alt-\"+e),(q?t.metaKey:t.ctrlKey)&&r!=\"Ctrl\"&&(e=\"Ctrl-\"+e),(q?t.ctrlKey:t.metaKey)&&r!=\"Mod\"&&(e=\"Cmd-\"+e),!n&&t.shiftKey&&r!=\"Shift\"&&(e=\"Shift-\"+e),e}function Hl(e,t){if(d&&e.keyCode==34&&e.char)return!1;var n=wr[e.keyCode];return n==null||e.altGraphKey?!1:(e.keyCode==3&&e.code&&(n=e.code),Rl(n,e,t))}function Li(e){return typeof e==\"string\"?ur[e]:e}function cn(e,t){for(var n=e.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var a=t(n[i]);r.length&&ye(a.from,ce(r).to)<=0;){var l=r.pop();if(ye(l.from,a.from)<0){a.from=l.from;break}}r.push(a)}Nt(e,function(){for(var u=r.length-1;u>=0;u--)ln(e.doc,\"\",r[u].from,r[u].to,\"+delete\");tn(e)})}function Po(e,t,n){var r=se(e.text,t+n,n);return r<0||r>e.text.length?null:r}function Bo(e,t,n){var r=Po(e,t.ch,n);return r==null?null:new ne(t.line,r,n<0?\"after\":\"before\")}function jo(e,t,n,r,i){if(e){t.doc.direction==\"rtl\"&&(i=-i);var a=Pe(n,t.doc.direction);if(a){var l=i<0?ce(a):a[0],u=i<0==(l.level==1),f=u?\"after\":\"before\",m;if(l.level>0||t.doc.direction==\"rtl\"){var A=Qr(t,n);m=i<0?n.text.length-1:0;var B=tr(t,A,m).top;m=De(function(ee){return tr(t,A,ee).top==B},i<0==(l.level==1)?l.from:l.to-1,m),f==\"before\"&&(m=Po(n,m,1))}else m=i<0?l.to:l.from;return new ne(r,m,f)}}return new ne(r,i<0?n.text.length:0,i<0?\"before\":\"after\")}function Vf(e,t,n,r){var i=Pe(t,e.doc.direction);if(!i)return Bo(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky=\"before\"):n.ch<=0&&(n.ch=0,n.sticky=\"after\");var a=Pt(i,n.ch,n.sticky),l=i[a];if(e.doc.direction==\"ltr\"&&l.level%2==0&&(r>0?l.to>n.ch:l.from<n.ch))return Bo(t,n,r);var u=function(ve,_e){return Po(t,ve instanceof ne?ve.ch:ve,_e)},f,m=function(ve){return e.options.lineWrapping?(f=f||Qr(e,t),Ga(e,t,f,ve)):{begin:0,end:t.text.length}},A=m(n.sticky==\"before\"?u(n,-1):n.ch);if(e.doc.direction==\"rtl\"||l.level==1){var B=l.level==1==r<0,ee=u(n,B?1:-1);if(ee!=null&&(B?ee<=l.to&&ee<=A.end:ee>=l.from&&ee>=A.begin)){var Y=B?\"before\":\"after\";return new ne(n.line,ee,Y)}}var ie=function(ve,_e,be){for(var Ce=function(Ve,vt){return vt?new ne(n.line,u(Ve,1),\"before\"):new ne(n.line,Ve,\"after\")};ve>=0&&ve<i.length;ve+=_e){var Ne=i[ve],Fe=_e>0==(Ne.level!=1),$e=Fe?be.begin:u(be.end,-1);if(Ne.from<=$e&&$e<Ne.to||($e=Fe?Ne.from:u(Ne.to,-1),be.begin<=$e&&$e<be.end))return Ce($e,Fe)}},ue=ie(a+r,r,A);if(ue)return ue;var me=r>0?A.end:u(A.begin,-1);return me!=null&&!(r>0&&me==t.text.length)&&(ue=ie(r>0?0:i.length-1,r,m(me)),ue)?ue:null}var $n={selectAll:Ll,singleSelection:function(e){return e.setSelection(e.getCursor(\"anchor\"),e.getCursor(\"head\"),ke)},killLine:function(e){return cn(e,function(t){if(t.empty()){var n=Ae(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:ne(t.head.line+1,0)}:{from:t.head,to:ne(t.head.line,n)}}else return{from:t.from(),to:t.to()}})},deleteLine:function(e){return cn(e,function(t){return{from:ne(t.from().line,0),to:je(e.doc,ne(t.to().line+1,0))}})},delLineLeft:function(e){return cn(e,function(t){return{from:ne(t.from().line,0),to:t.from()}})},delWrappedLineLeft:function(e){return cn(e,function(t){var n=e.charCoords(t.head,\"div\").top+5,r=e.coordsChar({left:0,top:n},\"div\");return{from:r,to:t.from()}})},delWrappedLineRight:function(e){return cn(e,function(t){var n=e.charCoords(t.head,\"div\").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},\"div\");return{from:t.from(),to:r}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ne(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ne(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return Wl(e,t.head.line)},{origin:\"+move\",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return Ul(e,t.head)},{origin:\"+move\",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return Jf(e,t.head.line)},{origin:\"+move\",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,\"div\").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},\"div\")},Re)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,\"div\").top+5;return e.coordsChar({left:0,top:n},\"div\")},Re)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var n=e.cursorCoords(t.head,\"div\").top+5,r=e.coordsChar({left:0,top:n},\"div\");return r.ch<e.getLine(r.line).search(/\\S/)?Ul(e,t.head):r},Re)},goLineUp:function(e){return e.moveV(-1,\"line\")},goLineDown:function(e){return e.moveV(1,\"line\")},goPageUp:function(e){return e.moveV(-1,\"page\")},goPageDown:function(e){return e.moveV(1,\"page\")},goCharLeft:function(e){return e.moveH(-1,\"char\")},goCharRight:function(e){return e.moveH(1,\"char\")},goColumnLeft:function(e){return e.moveH(-1,\"column\")},goColumnRight:function(e){return e.moveH(1,\"column\")},goWordLeft:function(e){return e.moveH(-1,\"word\")},goGroupRight:function(e){return e.moveH(1,\"group\")},goGroupLeft:function(e){return e.moveH(-1,\"group\")},goWordRight:function(e){return e.moveH(1,\"word\")},delCharBefore:function(e){return e.deleteH(-1,\"codepoint\")},delCharAfter:function(e){return e.deleteH(1,\"char\")},delWordBefore:function(e){return e.deleteH(-1,\"word\")},delWordAfter:function(e){return e.deleteH(1,\"word\")},delGroupBefore:function(e){return e.deleteH(-1,\"group\")},delGroupAfter:function(e){return e.deleteH(1,\"group\")},indentAuto:function(e){return e.indentSelection(\"smart\")},indentMore:function(e){return e.indentSelection(\"add\")},indentLess:function(e){return e.indentSelection(\"subtract\")},insertTab:function(e){return e.replaceSelection(\"\t\")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var a=n[i].from(),l=Oe(e.getLine(a.line),a.ch,r);t.push(Z(r-l%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\"add\"):e.execCommand(\"insertTab\")},transposeChars:function(e){return Nt(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++)if(t[r].empty()){var i=t[r].head,a=Ae(e.doc,i.line).text;if(a){if(i.ch==a.length&&(i=new ne(i.line,i.ch-1)),i.ch>0)i=new ne(i.line,i.ch+1),e.replaceRange(a.charAt(i.ch-1)+a.charAt(i.ch-2),ne(i.line,i.ch-2),i,\"+transpose\");else if(i.line>e.doc.first){var l=Ae(e.doc,i.line-1).text;l&&(i=new ne(i.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),ne(i.line-1,l.length-1),i,\"+transpose\"))}}n.push(new Ye(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return Nt(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,\"+input\");t=e.listSelections();for(var r=0;r<t.length;r++)e.indentLine(t[r].from().line,null,!0);tn(e)})},openLine:function(e){return e.replaceSelection(`\n`,\"start\")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Wl(e,t){var n=Ae(e.doc,t),r=Zt(n);return r!=n&&(t=x(r)),jo(!0,e,r,t,1)}function Jf(e,t){var n=Ae(e.doc,t),r=Ic(n);return r!=n&&(t=x(r)),jo(!0,e,n,t,-1)}function Ul(e,t){var n=Wl(e,t.line),r=Ae(e.doc,n.line),i=Pe(r,e.doc.direction);if(!i||i[0].level==0){var a=Math.max(n.ch,r.text.search(/\\S/)),l=t.line==n.line&&t.ch<=a&&t.ch;return ne(n.line,l?0:a,n.sticky)}return n}function Ci(e,t,n){if(typeof t==\"string\"&&(t=$n[t],!t))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=Ze}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}function ed(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=un(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&un(t,e.options.extraKeys,n,e)||un(t,e.options.keyMap,n,e)}var td=new qe;function Kn(e,t,n,r){var i=e.state.keySeq;if(i){if(jl(t))return\"handled\";if(/\\'$/.test(t)?e.state.keySeq=null:td.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),$l(e,i+\" \"+t,n,r))return!0}return $l(e,t,n,r)}function $l(e,t,n,r){var i=ed(e,t,r);return i==\"multi\"&&(e.state.keySeq=t),i==\"handled\"&&ht(e,\"keyHandled\",e,t,n),(i==\"handled\"||i==\"multi\")&&(kt(n),ko(e)),!!i}function Kl(e,t){var n=Hl(t,!0);return n?t.shiftKey&&!e.state.keySeq?Kn(e,\"Shift-\"+n,t,function(r){return Ci(e,r,!0)})||Kn(e,n,t,function(r){if(typeof r==\"string\"?/^go[A-Z]/.test(r):r.motion)return Ci(e,r)}):Kn(e,n,t,function(r){return Ci(e,r)}):!1}function rd(e,t,n){return Kn(e,\"'\"+n+\"'\",t,function(r){return Ci(e,r,!0)})}var Ro=null;function Gl(e){var t=this;if(!(e.target&&e.target!=t.display.input.getField())&&(t.curOp.focus=R(de(t)),!ot(t,e))){s&&h<11&&e.keyCode==27&&(e.returnValue=!1);var n=e.keyCode;t.display.shift=n==16||e.shiftKey;var r=Kl(t,e);d&&(Ro=r?n:null,!r&&n==88&&!ti&&(O?e.metaKey:e.ctrlKey)&&t.replaceSelection(\"\",null,\"cut\")),v&&!O&&!r&&n==46&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand(\"cut\"),n==18&&!/\\bCodeMirror-crosshair\\b/.test(t.display.lineDiv.className)&&nd(t)}}function nd(e){var t=e.display.lineDiv;le(t,\"CodeMirror-crosshair\");function n(r){(r.keyCode==18||!r.altKey)&&(Q(t,\"CodeMirror-crosshair\"),_t(document,\"keyup\",n),_t(document,\"mouseover\",n))}Ie(document,\"keyup\",n),Ie(document,\"mouseover\",n)}function Zl(e){e.keyCode==16&&(this.doc.sel.shift=!1),ot(this,e)}function Xl(e){var t=this;if(!(e.target&&e.target!=t.display.input.getField())&&!(lr(t.display,e)||ot(t,e)||e.ctrlKey&&!e.altKey||O&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(d&&n==Ro){Ro=null,kt(e);return}if(!(d&&(!e.which||e.which<10)&&Kl(t,e))){var i=String.fromCharCode(r??n);i!=\"\\b\"&&(rd(t,e,i)||t.display.input.onKeyPress(e))}}}var id=400,Ho=function(e,t,n){this.time=e,this.pos=t,this.button=n};Ho.prototype.compare=function(e,t,n){return this.time+id>e&&ye(t,this.pos)==0&&n==this.button};var Gn,Zn;function od(e,t){var n=+new Date;return Zn&&Zn.compare(n,e,t)?(Gn=Zn=null,\"triple\"):Gn&&Gn.compare(n,e,t)?(Zn=new Ho(n,e,t),Gn=null,\"double\"):(Gn=new Ho(n,e,t),Zn=null,\"single\")}function Yl(e){var t=this,n=t.display;if(!(ot(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=e.shiftKey,lr(n,e)){g||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100));return}if(!Wo(t,e)){var r=Mr(t,e),i=Ut(e),a=r?od(r,i):\"single\";pe(t).focus(),i==1&&t.state.selectingText&&t.state.selectingText(e),!(r&&ad(t,i,r,a,e))&&(i==1?r?sd(t,r,a,e):yn(e)==n.scroller&&kt(e):i==2?(r&&_i(t.doc,r),setTimeout(function(){return n.input.focus()},20)):i==3&&(I?t.display.input.onContextMenu(e):wo(t)))}}}function ad(e,t,n,r,i){var a=\"Click\";return r==\"double\"?a=\"Double\"+a:r==\"triple\"&&(a=\"Triple\"+a),a=(t==1?\"Left\":t==2?\"Middle\":\"Right\")+a,Kn(e,Rl(a,i),i,function(l){if(typeof l==\"string\"&&(l=$n[l]),!l)return!1;var u=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),u=l(e,n)!=Ze}finally{e.state.suppressEdits=!1}return u})}function ld(e,t,n){var r=e.getOption(\"configureMouse\"),i=r?r(e,t,n):{};if(i.unit==null){var a=G?n.shiftKey&&n.metaKey:n.altKey;i.unit=a?\"rectangle\":t==\"single\"?\"char\":t==\"double\"?\"word\":\"line\"}return(i.extend==null||e.doc.extend)&&(i.extend=e.doc.extend||n.shiftKey),i.addNew==null&&(i.addNew=O?n.metaKey:n.ctrlKey),i.moveOnDrag==null&&(i.moveOnDrag=!(O?n.altKey:n.ctrlKey)),i}function sd(e,t,n,r){s?setTimeout(Ee(Qa,e),0):e.curOp.focus=R(de(e));var i=ld(e,n,r),a=e.doc.sel,l;e.options.dragDrop&&eo&&!e.isReadOnly()&&n==\"single\"&&(l=a.contains(t))>-1&&(ye((l=a.ranges[l]).from(),t)<0||t.xRel>0)&&(ye(l.to(),t)>0||t.xRel<0)?ud(e,r,t,i):cd(e,r,t,i)}function ud(e,t,n,r){var i=e.display,a=!1,l=gt(e,function(m){g&&(i.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:wo(e)),_t(i.wrapper.ownerDocument,\"mouseup\",l),_t(i.wrapper.ownerDocument,\"mousemove\",u),_t(i.scroller,\"dragstart\",f),_t(i.scroller,\"drop\",l),a||(kt(m),r.addNew||_i(e.doc,n,null,null,r.extend),g&&!k||s&&h==9?setTimeout(function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()},20):i.input.focus())}),u=function(m){a=a||Math.abs(t.clientX-m.clientX)+Math.abs(t.clientY-m.clientY)>=10},f=function(){return a=!0};g&&(i.scroller.draggable=!0),e.state.draggingText=l,l.copy=!r.moveOnDrag,Ie(i.wrapper.ownerDocument,\"mouseup\",l),Ie(i.wrapper.ownerDocument,\"mousemove\",u),Ie(i.scroller,\"dragstart\",f),Ie(i.scroller,\"drop\",l),e.state.delayingBlurEvent=!0,setTimeout(function(){return i.input.focus()},20),i.scroller.dragDrop&&i.scroller.dragDrop()}function Ql(e,t,n){if(n==\"char\")return new Ye(t,t);if(n==\"word\")return e.findWordAt(t);if(n==\"line\")return new Ye(ne(t.line,0),je(e.doc,ne(t.line+1,0)));var r=n(e,t);return new Ye(r.from,r.to)}function cd(e,t,n,r){s&&wo(e);var i=e.display,a=e.doc;kt(t);var l,u,f=a.sel,m=f.ranges;if(r.addNew&&!r.extend?(u=a.sel.contains(n),u>-1?l=m[u]:l=new Ye(n,n)):(l=a.sel.primary(),u=a.sel.primIndex),r.unit==\"rectangle\")r.addNew||(l=new Ye(n,n)),n=Mr(e,t,!0,!0),u=-1;else{var A=Ql(e,n,r.unit);r.extend?l=No(l,A.anchor,A.head,r.extend):l=A}r.addNew?u==-1?(u=m.length,wt(a,Yt(e,m.concat([l]),u),{scroll:!1,origin:\"*mouse\"})):m.length>1&&m[u].empty()&&r.unit==\"char\"&&!r.extend?(wt(a,Yt(e,m.slice(0,u).concat(m.slice(u+1)),0),{scroll:!1,origin:\"*mouse\"}),f=a.sel):Oo(a,u,l,Je):(u=0,wt(a,new jt([l],0),Je),f=a.sel);var B=n;function ee(be){if(ye(B,be)!=0)if(B=be,r.unit==\"rectangle\"){for(var Ce=[],Ne=e.options.tabSize,Fe=Oe(Ae(a,n.line).text,n.ch,Ne),$e=Oe(Ae(a,be.line).text,be.ch,Ne),Ve=Math.min(Fe,$e),vt=Math.max(Fe,$e),rt=Math.min(n.line,be.line),Ot=Math.min(e.lastLine(),Math.max(n.line,be.line));rt<=Ot;rt++){var At=Ae(a,rt).text,ut=Ge(At,Ve,Ne);Ve==vt?Ce.push(new Ye(ne(rt,ut),ne(rt,ut))):At.length>ut&&Ce.push(new Ye(ne(rt,ut),ne(rt,Ge(At,vt,Ne))))}Ce.length||Ce.push(new Ye(n,n)),wt(a,Yt(e,f.ranges.slice(0,u).concat(Ce),u),{origin:\"*mouse\",scroll:!1}),e.scrollIntoView(be)}else{var Dt=l,yt=Ql(e,be,r.unit),ft=Dt.anchor,ct;ye(yt.anchor,ft)>0?(ct=yt.head,ft=Zr(Dt.from(),yt.anchor)):(ct=yt.anchor,ft=Et(Dt.to(),yt.head));var lt=f.ranges.slice(0);lt[u]=fd(e,new Ye(je(a,ft),ct)),wt(a,Yt(e,lt,u),Je)}}var Y=i.wrapper.getBoundingClientRect(),ie=0;function ue(be){var Ce=++ie,Ne=Mr(e,be,!0,r.unit==\"rectangle\");if(Ne)if(ye(Ne,B)!=0){e.curOp.focus=R(de(e)),ee(Ne);var Fe=gi(i,a);(Ne.line>=Fe.to||Ne.line<Fe.from)&&setTimeout(gt(e,function(){ie==Ce&&ue(be)}),150)}else{var $e=be.clientY<Y.top?-20:be.clientY>Y.bottom?20:0;$e&&setTimeout(gt(e,function(){ie==Ce&&(i.scroller.scrollTop+=$e,ue(be))}),50)}}function me(be){e.state.selectingText=!1,ie=1/0,be&&(kt(be),i.input.focus()),_t(i.wrapper.ownerDocument,\"mousemove\",ve),_t(i.wrapper.ownerDocument,\"mouseup\",_e),a.history.lastSelOrigin=null}var ve=gt(e,function(be){be.buttons===0||!Ut(be)?me(be):ue(be)}),_e=gt(e,me);e.state.selectingText=_e,Ie(i.wrapper.ownerDocument,\"mousemove\",ve),Ie(i.wrapper.ownerDocument,\"mouseup\",_e)}function fd(e,t){var n=t.anchor,r=t.head,i=Ae(e.doc,n.line);if(ye(n,r)==0&&n.sticky==r.sticky)return t;var a=Pe(i);if(!a)return t;var l=Pt(a,n.ch,n.sticky),u=a[l];if(u.from!=n.ch&&u.to!=n.ch)return t;var f=l+(u.from==n.ch==(u.level!=1)?0:1);if(f==0||f==a.length)return t;var m;if(r.line!=n.line)m=(r.line-n.line)*(e.doc.direction==\"ltr\"?1:-1)>0;else{var A=Pt(a,r.ch,r.sticky),B=A-l||(r.ch-n.ch)*(u.level==1?-1:1);A==f-1||A==f?m=B<0:m=B>0}var ee=a[f+(m?-1:0)],Y=m==(ee.level==1),ie=Y?ee.from:ee.to,ue=Y?\"after\":\"before\";return n.ch==ie&&n.sticky==ue?t:new Ye(new ne(n.line,ie,ue),r)}function Vl(e,t,n,r){var i,a;if(t.touches)i=t.touches[0].clientX,a=t.touches[0].clientY;else try{i=t.clientX,a=t.clientY}catch{return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&kt(t);var l=e.display,u=l.lineDiv.getBoundingClientRect();if(a>u.bottom||!It(e,n))return Ct(t);a-=u.top-l.viewOffset;for(var f=0;f<e.display.gutterSpecs.length;++f){var m=l.gutters.childNodes[f];if(m&&m.getBoundingClientRect().right>=i){var A=P(e.doc,a),B=e.display.gutterSpecs[f];return it(e,n,e,A,B.className,t),Ct(t)}}}function Wo(e,t){return Vl(e,t,\"gutterClick\",!0)}function Jl(e,t){lr(e.display,t)||dd(e,t)||ot(e,t,\"contextmenu\")||I||e.display.input.onContextMenu(t)}function dd(e,t){return It(e,\"gutterContextMenu\")?Vl(e,t,\"gutterContextMenu\",!1):!1}function es(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+e.options.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\"),En(e)}var fn={toString:function(){return\"CodeMirror.Init\"}},ts={},Ei={};function pd(e){var t=e.optionHandlers;function n(r,i,a,l){e.defaults[r]=i,a&&(t[r]=l?function(u,f,m){m!=fn&&a(u,f,m)}:a)}e.defineOption=n,e.Init=fn,n(\"value\",\"\",function(r,i){return r.setValue(i)},!0),n(\"mode\",null,function(r,i){r.doc.modeOption=i,qo(r)},!0),n(\"indentUnit\",2,qo,!0),n(\"indentWithTabs\",!1),n(\"smartIndent\",!0),n(\"tabSize\",4,function(r){Nn(r),En(r),zt(r)},!0),n(\"lineSeparator\",null,function(r,i){if(r.doc.lineSep=i,!!i){var a=[],l=r.doc.first;r.doc.iter(function(f){for(var m=0;;){var A=f.text.indexOf(i,m);if(A==-1)break;m=A+i.length,a.push(ne(l,A))}l++});for(var u=a.length-1;u>=0;u--)ln(r.doc,i,a[u],ne(a[u].line,a[u].ch+i.length))}}),n(\"specialChars\",/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g,function(r,i,a){r.state.specialChars=new RegExp(i.source+(i.test(\"\t\")?\"\":\"|\t\"),\"g\"),a!=fn&&r.refresh()}),n(\"specialCharPlaceholder\",Rc,function(r){return r.refresh()},!0),n(\"electricChars\",!0),n(\"inputStyle\",E?\"contenteditable\":\"textarea\",function(){throw new Error(\"inputStyle can not (yet) be changed in a running editor\")},!0),n(\"spellcheck\",!1,function(r,i){return r.getInputField().spellcheck=i},!0),n(\"autocorrect\",!1,function(r,i){return r.getInputField().autocorrect=i},!0),n(\"autocapitalize\",!1,function(r,i){return r.getInputField().autocapitalize=i},!0),n(\"rtlMoveVisually\",!J),n(\"wholeLineUpdateBefore\",!0),n(\"theme\",\"default\",function(r){es(r),In(r)},!0),n(\"keyMap\",\"default\",function(r,i,a){var l=Li(i),u=a!=fn&&Li(a);u&&u.detach&&u.detach(r,l),l.attach&&l.attach(r,u||null)}),n(\"extraKeys\",null),n(\"configureMouse\",null),n(\"lineWrapping\",!1,gd,!0),n(\"gutters\",[],function(r,i){r.display.gutterSpecs=Ao(i,r.options.lineNumbers),In(r)},!0),n(\"fixedGutter\",!0,function(r,i){r.display.gutters.style.left=i?yo(r.display)+\"px\":\"0\",r.refresh()},!0),n(\"coverGutterNextToScrollbar\",!1,function(r){return rn(r)},!0),n(\"scrollbarStyle\",\"native\",function(r){nl(r),rn(r),r.display.scrollbars.setScrollTop(r.doc.scrollTop),r.display.scrollbars.setScrollLeft(r.doc.scrollLeft)},!0),n(\"lineNumbers\",!1,function(r,i){r.display.gutterSpecs=Ao(r.options.gutters,i),In(r)},!0),n(\"firstLineNumber\",1,In,!0),n(\"lineNumberFormatter\",function(r){return r},In,!0),n(\"showCursorWhenSelecting\",!1,zn,!0),n(\"resetSelectionOnContextMenu\",!0),n(\"lineWiseCopyCut\",!0),n(\"pasteLinesPerSelection\",!0),n(\"selectionsMayTouch\",!1),n(\"readOnly\",!1,function(r,i){i==\"nocursor\"&&(en(r),r.display.input.blur()),r.display.input.readOnlyChanged(i)}),n(\"screenReaderLabel\",null,function(r,i){i=i===\"\"?null:i,r.display.input.screenReaderLabelChanged(i)}),n(\"disableInput\",!1,function(r,i){i||r.display.input.reset()},!0),n(\"dragDrop\",!0,hd),n(\"allowDropFileTypes\",null),n(\"cursorBlinkRate\",530),n(\"cursorScrollMargin\",0),n(\"cursorHeight\",1,zn,!0),n(\"singleCursorHeightPerLine\",!0,zn,!0),n(\"workTime\",100),n(\"workDelay\",100),n(\"flattenSpans\",!0,Nn,!0),n(\"addModeClass\",!1,Nn,!0),n(\"pollInterval\",100),n(\"undoDepth\",200,function(r,i){return r.doc.history.undoDepth=i}),n(\"historyEventDelay\",1250),n(\"viewportMargin\",10,function(r){return r.refresh()},!0),n(\"maxHighlightLength\",1e4,Nn,!0),n(\"moveInputWithCursor\",!0,function(r,i){i||r.display.input.resetPosition()}),n(\"tabindex\",null,function(r,i){return r.display.input.getField().tabIndex=i||\"\"}),n(\"autofocus\",null),n(\"direction\",\"ltr\",function(r,i){return r.doc.setDirection(i)},!0),n(\"phrases\",null)}function hd(e,t,n){var r=n&&n!=fn;if(!t!=!r){var i=e.display.dragFunctions,a=t?Ie:_t;a(e.display.scroller,\"dragstart\",i.start),a(e.display.scroller,\"dragenter\",i.enter),a(e.display.scroller,\"dragover\",i.over),a(e.display.scroller,\"dragleave\",i.leave),a(e.display.scroller,\"drop\",i.drop)}}function gd(e){e.options.lineWrapping?(le(e.display.wrapper,\"CodeMirror-wrap\"),e.display.sizer.style.minWidth=\"\",e.display.sizerWidth=null):(Q(e.display.wrapper,\"CodeMirror-wrap\"),so(e)),xo(e),zt(e),En(e),setTimeout(function(){return rn(e)},100)}function tt(e,t){var n=this;if(!(this instanceof tt))return new tt(e,t);this.options=t=t?ge(t):{},ge(ts,t,!1);var r=t.value;typeof r==\"string\"?r=new Mt(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new tt.inputStyles[t.inputStyle](this),a=this.display=new Ef(e,r,i,t);a.wrapper.CodeMirror=this,es(this),t.lineWrapping&&(this.display.wrapper.className+=\" CodeMirror-wrap\"),nl(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new qe,keySeq:null,specialChars:null},t.autofocus&&!E&&a.input.focus(),s&&h<11&&setTimeout(function(){return n.display.input.reset(!0)},20),md(this),Gf(),Fr(this),this.curOp.forceUpdate=!0,pl(this,r),t.autofocus&&!E||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&So(n)},20):en(this);for(var l in Ei)Ei.hasOwnProperty(l)&&Ei[l](this,t[l],fn);al(this),t.finishInit&&t.finishInit(this);for(var u=0;u<Uo.length;++u)Uo[u](this);Ir(this),g&&t.lineWrapping&&getComputedStyle(a.lineDiv).textRendering==\"optimizelegibility\"&&(a.lineDiv.style.textRendering=\"auto\")}tt.defaults=ts,tt.optionHandlers=Ei;function md(e){var t=e.display;Ie(t.scroller,\"mousedown\",gt(e,Yl)),s&&h<11?Ie(t.scroller,\"dblclick\",gt(e,function(f){if(!ot(e,f)){var m=Mr(e,f);if(!(!m||Wo(e,f)||lr(e.display,f))){kt(f);var A=e.findWordAt(m);_i(e.doc,A.anchor,A.head)}}})):Ie(t.scroller,\"dblclick\",function(f){return ot(e,f)||kt(f)}),Ie(t.scroller,\"contextmenu\",function(f){return Jl(e,f)}),Ie(t.input.getField(),\"contextmenu\",function(f){t.scroller.contains(f.target)||Jl(e,f)});var n,r={end:0};function i(){t.activeTouch&&(n=setTimeout(function(){return t.activeTouch=null},1e3),r=t.activeTouch,r.end=+new Date)}function a(f){if(f.touches.length!=1)return!1;var m=f.touches[0];return m.radiusX<=1&&m.radiusY<=1}function l(f,m){if(m.left==null)return!0;var A=m.left-f.left,B=m.top-f.top;return A*A+B*B>400}Ie(t.scroller,\"touchstart\",function(f){if(!ot(e,f)&&!a(f)&&!Wo(e,f)){t.input.ensurePolled(),clearTimeout(n);var m=+new Date;t.activeTouch={start:m,moved:!1,prev:m-r.end<=300?r:null},f.touches.length==1&&(t.activeTouch.left=f.touches[0].pageX,t.activeTouch.top=f.touches[0].pageY)}}),Ie(t.scroller,\"touchmove\",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),Ie(t.scroller,\"touchend\",function(f){var m=t.activeTouch;if(m&&!lr(t,f)&&m.left!=null&&!m.moved&&new Date-m.start<300){var A=e.coordsChar(t.activeTouch,\"page\"),B;!m.prev||l(m,m.prev)?B=new Ye(A,A):!m.prev.prev||l(m,m.prev.prev)?B=e.findWordAt(A):B=new Ye(ne(A.line,0),je(e.doc,ne(A.line+1,0))),e.setSelection(B.anchor,B.head),e.focus(),kt(f)}i()}),Ie(t.scroller,\"touchcancel\",i),Ie(t.scroller,\"scroll\",function(){t.scroller.clientHeight&&(An(e,t.scroller.scrollTop),Dr(e,t.scroller.scrollLeft,!0),it(e,\"scroll\",e))}),Ie(t.scroller,\"mousewheel\",function(f){return ul(e,f)}),Ie(t.scroller,\"DOMMouseScroll\",function(f){return ul(e,f)}),Ie(t.wrapper,\"scroll\",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(f){ot(e,f)||dr(f)},over:function(f){ot(e,f)||(Kf(e,f),dr(f))},start:function(f){return $f(e,f)},drop:gt(e,Uf),leave:function(f){ot(e,f)||Ol(e)}};var u=t.input.getField();Ie(u,\"keyup\",function(f){return Zl.call(e,f)}),Ie(u,\"keydown\",gt(e,Gl)),Ie(u,\"keypress\",gt(e,Xl)),Ie(u,\"focus\",function(f){return So(e,f)}),Ie(u,\"blur\",function(f){return en(e,f)})}var Uo=[];tt.defineInitHook=function(e){return Uo.push(e)};function Xn(e,t,n,r){var i=e.doc,a;n==null&&(n=\"add\"),n==\"smart\"&&(i.mode.indent?a=wn(e,t).state:n=\"prev\");var l=e.options.tabSize,u=Ae(i,t),f=Oe(u.text,null,l);u.stateAfter&&(u.stateAfter=null);var m=u.text.match(/^\\s*/)[0],A;if(!r&&!/\\S/.test(u.text))A=0,n=\"not\";else if(n==\"smart\"&&(A=i.mode.indent(a,u.text.slice(m.length),u.text),A==Ze||A>150)){if(!r)return;n=\"prev\"}n==\"prev\"?t>i.first?A=Oe(Ae(i,t-1).text,null,l):A=0:n==\"add\"?A=f+e.options.indentUnit:n==\"subtract\"?A=f-e.options.indentUnit:typeof n==\"number\"&&(A=f+n),A=Math.max(0,A);var B=\"\",ee=0;if(e.options.indentWithTabs)for(var Y=Math.floor(A/l);Y;--Y)ee+=l,B+=\"\t\";if(ee<A&&(B+=Z(A-ee)),B!=m)return ln(i,B,ne(t,0),ne(t,m.length),\"+input\"),u.stateAfter=null,!0;for(var ie=0;ie<i.sel.ranges.length;ie++){var ue=i.sel.ranges[ie];if(ue.head.line==t&&ue.head.ch<m.length){var me=ne(t,m.length);Oo(i,ie,new Ye(me,me));break}}}var Qt=null;function zi(e){Qt=e}function $o(e,t,n,r,i){var a=e.doc;e.display.shift=!1,r||(r=a.sel);var l=+new Date-200,u=i==\"paste\"||e.state.pasteIncoming>l,f=Ht(t),m=null;if(u&&r.ranges.length>1)if(Qt&&Qt.text.join(`\n`)==t){if(r.ranges.length%Qt.text.length==0){m=[];for(var A=0;A<Qt.text.length;A++)m.push(a.splitLines(Qt.text[A]))}}else f.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(m=He(f,function(ve){return[ve]}));for(var B=e.curOp.updateInput,ee=r.ranges.length-1;ee>=0;ee--){var Y=r.ranges[ee],ie=Y.from(),ue=Y.to();Y.empty()&&(n&&n>0?ie=ne(ie.line,ie.ch-n):e.state.overwrite&&!u?ue=ne(ue.line,Math.min(Ae(a,ue.line).text.length,ue.ch+ce(f).length)):u&&Qt&&Qt.lineWise&&Qt.text.join(`\n`)==f.join(`\n`)&&(ie=ue=ne(ie.line,0)));var me={from:ie,to:ue,text:m?m[ee%m.length]:f,origin:i||(u?\"paste\":e.state.cutIncoming>l?\"cut\":\"+input\")};an(e.doc,me),ht(e,\"inputRead\",e,me)}t&&!u&&ns(e,t),tn(e),e.curOp.updateInput<2&&(e.curOp.updateInput=B),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function rs(e,t){var n=e.clipboardData&&e.clipboardData.getData(\"Text\");if(n)return e.preventDefault(),!t.isReadOnly()&&!t.options.disableInput&&t.hasFocus()&&Nt(t,function(){return $o(t,n,0,null,\"paste\")}),!0}function ns(e,t){if(!(!e.options.electricChars||!e.options.smartIndent))for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var a=e.getModeAt(i.head),l=!1;if(a.electricChars){for(var u=0;u<a.electricChars.length;u++)if(t.indexOf(a.electricChars.charAt(u))>-1){l=Xn(e,i.head.line,\"smart\");break}}else a.electricInput&&a.electricInput.test(Ae(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Xn(e,i.head.line,\"smart\"));l&&ht(e,\"electricInput\",e,i.head.line)}}}function is(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,a={anchor:ne(i,0),head:ne(i+1,0)};n.push(a),t.push(e.getRange(a.anchor,a.head))}return{text:t,ranges:n}}function Ko(e,t,n,r){e.setAttribute(\"autocorrect\",n?\"on\":\"off\"),e.setAttribute(\"autocapitalize\",r?\"on\":\"off\"),e.setAttribute(\"spellcheck\",!!t)}function os(){var e=y(\"textarea\",null,null,\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\"),t=y(\"div\",[e],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");return g?e.style.width=\"1000px\":e.setAttribute(\"wrap\",\"off\"),_&&(e.style.border=\"1px solid black\"),t}function vd(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){pe(this).focus(),this.display.input.focus()},setOption:function(r,i){var a=this.options,l=a[r];a[r]==i&&r!=\"mode\"||(a[r]=i,t.hasOwnProperty(r)&&gt(this,t[r])(this,i,l),it(this,\"optionChange\",this,r))},getOption:function(r){return this.options[r]},getDoc:function(){return this.doc},addKeyMap:function(r,i){this.state.keyMaps[i?\"push\":\"unshift\"](Li(r))},removeKeyMap:function(r){for(var i=this.state.keyMaps,a=0;a<i.length;++a)if(i[a]==r||i[a].name==r)return i.splice(a,1),!0},addOverlay:Tt(function(r,i){var a=r.token?r:e.getMode(this.options,r);if(a.startState)throw new Error(\"Overlays may not be stateful.\");te(this.state.overlays,{mode:a,modeSpec:r,opaque:i&&i.opaque,priority:i&&i.priority||0},function(l){return l.priority}),this.state.modeGen++,zt(this)}),removeOverlay:Tt(function(r){for(var i=this.state.overlays,a=0;a<i.length;++a){var l=i[a].modeSpec;if(l==r||typeof r==\"string\"&&l.name==r){i.splice(a,1),this.state.modeGen++,zt(this);return}}}),indentLine:Tt(function(r,i,a){typeof i!=\"string\"&&typeof i!=\"number\"&&(i==null?i=this.options.smartIndent?\"smart\":\"prev\":i=i?\"add\":\"subtract\"),ae(this.doc,r)&&Xn(this,r,i,a)}),indentSelection:Tt(function(r){for(var i=this.doc.sel.ranges,a=-1,l=0;l<i.length;l++){var u=i[l];if(u.empty())u.head.line>a&&(Xn(this,u.head.line,r,!0),a=u.head.line,l==this.doc.sel.primIndex&&tn(this));else{var f=u.from(),m=u.to(),A=Math.max(a,f.line);a=Math.min(this.lastLine(),m.line-(m.ch?0:1))+1;for(var B=A;B<a;++B)Xn(this,B,r);var ee=this.doc.sel.ranges;f.ch==0&&i.length==ee.length&&ee[l].from().ch>0&&Oo(this.doc,l,new Ye(f,ee[l].to()),ke)}}}),getTokenAt:function(r,i){return ga(this,r,i)},getLineTokens:function(r,i){return ga(this,ne(r),i,!0)},getTokenTypeAt:function(r){r=je(this.doc,r);var i=da(this,Ae(this.doc,r.line)),a=0,l=(i.length-1)/2,u=r.ch,f;if(u==0)f=i[2];else for(;;){var m=a+l>>1;if((m?i[m*2-1]:0)>=u)l=m;else if(i[m*2+1]<u)a=m+1;else{f=i[m*2+2];break}}var A=f?f.indexOf(\"overlay \"):-1;return A<0?f:A==0?null:f.slice(0,A-1)},getModeAt:function(r){var i=this.doc.mode;return i.innerMode?e.innerMode(i,this.getTokenAt(r).state).mode:i},getHelper:function(r,i){return this.getHelpers(r,i)[0]},getHelpers:function(r,i){var a=[];if(!n.hasOwnProperty(i))return a;var l=n[i],u=this.getModeAt(r);if(typeof u[i]==\"string\")l[u[i]]&&a.push(l[u[i]]);else if(u[i])for(var f=0;f<u[i].length;f++){var m=l[u[i][f]];m&&a.push(m)}else u.helperType&&l[u.helperType]?a.push(l[u.helperType]):l[u.name]&&a.push(l[u.name]);for(var A=0;A<l._global.length;A++){var B=l._global[A];B.pred(u,this)&&Se(a,B.val)==-1&&a.push(B.val)}return a},getStateAfter:function(r,i){var a=this.doc;return r=ua(a,r??a.first+a.size-1),wn(this,r+1,i).state},cursorCoords:function(r,i){var a,l=this.doc.sel.primary();return r==null?a=l.head:typeof r==\"object\"?a=je(this.doc,r):a=r?l.from():l.to(),Xt(this,a,i||\"page\")},charCoords:function(r,i){return fi(this,je(this.doc,r),i||\"page\")},coordsChar:function(r,i){return r=Ua(this,r,i||\"page\"),mo(this,r.left,r.top)},lineAtHeight:function(r,i){return r=Ua(this,{top:r,left:0},i||\"page\").top,P(this.doc,r+this.display.viewOffset)},heightAtLine:function(r,i,a){var l=!1,u;if(typeof r==\"number\"){var f=this.doc.first+this.doc.size-1;r<this.doc.first?r=this.doc.first:r>f&&(r=f,l=!0),u=Ae(this.doc,r)}else u=r;return ci(this,u,{top:0,left:0},i||\"page\",a||l).top+(l?this.doc.height-ar(u):0)},defaultTextHeight:function(){return Vr(this.display)},defaultCharWidth:function(){return Jr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(r,i,a,l,u){var f=this.display;r=Xt(this,je(this.doc,r));var m=r.bottom,A=r.left;if(i.style.position=\"absolute\",i.setAttribute(\"cm-ignore-events\",\"true\"),this.display.input.setUneditable(i),f.sizer.appendChild(i),l==\"over\")m=r.top;else if(l==\"above\"||l==\"near\"){var B=Math.max(f.wrapper.clientHeight,this.doc.height),ee=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);(l==\"above\"||r.bottom+i.offsetHeight>B)&&r.top>i.offsetHeight?m=r.top-i.offsetHeight:r.bottom+i.offsetHeight<=B&&(m=r.bottom),A+i.offsetWidth>ee&&(A=ee-i.offsetWidth)}i.style.top=m+\"px\",i.style.left=i.style.right=\"\",u==\"right\"?(A=f.sizer.clientWidth-i.offsetWidth,i.style.right=\"0px\"):(u==\"left\"?A=0:u==\"middle\"&&(A=(f.sizer.clientWidth-i.offsetWidth)/2),i.style.left=A+\"px\"),a&&hf(this,{left:A,top:m,right:A+i.offsetWidth,bottom:m+i.offsetHeight})},triggerOnKeyDown:Tt(Gl),triggerOnKeyPress:Tt(Xl),triggerOnKeyUp:Zl,triggerOnMouseDown:Tt(Yl),execCommand:function(r){if($n.hasOwnProperty(r))return $n[r].call(null,this)},triggerElectric:Tt(function(r){ns(this,r)}),findPosH:function(r,i,a,l){var u=1;i<0&&(u=-1,i=-i);for(var f=je(this.doc,r),m=0;m<i&&(f=Go(this.doc,f,u,a,l),!f.hitSide);++m);return f},moveH:Tt(function(r,i){var a=this;this.extendSelectionsBy(function(l){return a.display.shift||a.doc.extend||l.empty()?Go(a.doc,l.head,r,i,a.options.rtlMoveVisually):r<0?l.from():l.to()},Re)}),deleteH:Tt(function(r,i){var a=this.doc.sel,l=this.doc;a.somethingSelected()?l.replaceSelection(\"\",null,\"+delete\"):cn(this,function(u){var f=Go(l,u.head,r,i,!1);return r<0?{from:f,to:u.head}:{from:u.head,to:f}})}),findPosV:function(r,i,a,l){var u=1,f=l;i<0&&(u=-1,i=-i);for(var m=je(this.doc,r),A=0;A<i;++A){var B=Xt(this,m,\"div\");if(f==null?f=B.left:B.left=f,m=as(this,B,u,a),m.hitSide)break}return m},moveV:Tt(function(r,i){var a=this,l=this.doc,u=[],f=!this.display.shift&&!l.extend&&l.sel.somethingSelected();if(l.extendSelectionsBy(function(A){if(f)return r<0?A.from():A.to();var B=Xt(a,A.head,\"div\");A.goalColumn!=null&&(B.left=A.goalColumn),u.push(B.left);var ee=as(a,B,r,i);return i==\"page\"&&A==l.sel.primary()&&Lo(a,fi(a,ee,\"div\").top-B.top),ee},Re),u.length)for(var m=0;m<l.sel.ranges.length;m++)l.sel.ranges[m].goalColumn=u[m]}),findWordAt:function(r){var i=this.doc,a=Ae(i,r.line).text,l=r.ch,u=r.ch;if(a){var f=this.getHelper(r,\"wordChars\");(r.sticky==\"before\"||u==a.length)&&l?--l:++u;for(var m=a.charAt(l),A=Me(m,f)?function(B){return Me(B,f)}:/\\s/.test(m)?function(B){return/\\s/.test(B)}:function(B){return!/\\s/.test(B)&&!Me(B)};l>0&&A(a.charAt(l-1));)--l;for(;u<a.length&&A(a.charAt(u));)++u}return new Ye(ne(r.line,l),ne(r.line,u))},toggleOverwrite:function(r){r!=null&&r==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?le(this.display.cursorDiv,\"CodeMirror-overwrite\"):Q(this.display.cursorDiv,\"CodeMirror-overwrite\"),it(this,\"overwriteToggle\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==R(de(this))},isReadOnly:function(){return!!(this.options.readOnly||this.doc.cantEdit)},scrollTo:Tt(function(r,i){Mn(this,r,i)}),getScrollInfo:function(){var r=this.display.scroller;return{left:r.scrollLeft,top:r.scrollTop,height:r.scrollHeight-er(this)-this.display.barHeight,width:r.scrollWidth-er(this)-this.display.barWidth,clientHeight:fo(this),clientWidth:Er(this)}},scrollIntoView:Tt(function(r,i){r==null?(r={from:this.doc.sel.primary().head,to:null},i==null&&(i=this.options.cursorScrollMargin)):typeof r==\"number\"?r={from:ne(r,0),to:null}:r.from==null&&(r={from:r,to:null}),r.to||(r.to=r.from),r.margin=i||0,r.from.line!=null?gf(this,r):Ja(this,r.from,r.to,r.margin)}),setSize:Tt(function(r,i){var a=this,l=function(f){return typeof f==\"number\"||/^\\d+$/.test(String(f))?f+\"px\":f};r!=null&&(this.display.wrapper.style.width=l(r)),i!=null&&(this.display.wrapper.style.height=l(i)),this.options.lineWrapping&&Ra(this);var u=this.display.viewFrom;this.doc.iter(u,this.display.viewTo,function(f){if(f.widgets){for(var m=0;m<f.widgets.length;m++)if(f.widgets[m].noHScroll){vr(a,u,\"widget\");break}}++u}),this.curOp.forceUpdate=!0,it(this,\"refresh\",this)}),operation:function(r){return Nt(this,r)},startOperation:function(){return Fr(this)},endOperation:function(){return Ir(this)},refresh:Tt(function(){var r=this.display.cachedTextHeight;zt(this),this.curOp.forceUpdate=!0,En(this),Mn(this,this.doc.scrollLeft,this.doc.scrollTop),zo(this.display),(r==null||Math.abs(r-Vr(this.display))>.5||this.options.lineWrapping)&&xo(this),it(this,\"refresh\",this)}),swapDoc:Tt(function(r){var i=this.doc;return i.cm=null,this.state.selectingText&&this.state.selectingText(),pl(this,r),En(this),this.display.input.reset(),Mn(this,r.scrollLeft,r.scrollTop),this.curOp.forceScroll=!0,ht(this,\"swapDoc\",this,i),i}),phrase:function(r){var i=this.options.phrases;return i&&Object.prototype.hasOwnProperty.call(i,r)?i[r]:r},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Wt(e),e.registerHelper=function(r,i,a){n.hasOwnProperty(r)||(n[r]=e[r]={_global:[]}),n[r][i]=a},e.registerGlobalHelper=function(r,i,a,l){e.registerHelper(r,i,l),n[r]._global.push({pred:a,val:l})}}function Go(e,t,n,r,i){var a=t,l=n,u=Ae(e,t.line),f=i&&e.direction==\"rtl\"?-n:n;function m(){var _e=t.line+f;return _e<e.first||_e>=e.first+e.size?!1:(t=new ne(_e,t.ch,t.sticky),u=Ae(e,_e))}function A(_e){var be;if(r==\"codepoint\"){var Ce=u.text.charCodeAt(t.ch+(n>0?0:-1));if(isNaN(Ce))be=null;else{var Ne=n>0?Ce>=55296&&Ce<56320:Ce>=56320&&Ce<57343;be=new ne(t.line,Math.max(0,Math.min(u.text.length,t.ch+n*(Ne?2:1))),-n)}}else i?be=Vf(e.cm,u,t,n):be=Bo(u,t,n);if(be==null)if(!_e&&m())t=jo(i,e.cm,u,t.line,f);else return!1;else t=be;return!0}if(r==\"char\"||r==\"codepoint\")A();else if(r==\"column\")A(!0);else if(r==\"word\"||r==\"group\")for(var B=null,ee=r==\"group\",Y=e.cm&&e.cm.getHelper(t,\"wordChars\"),ie=!0;!(n<0&&!A(!ie));ie=!1){var ue=u.text.charAt(t.ch)||`\n`,me=Me(ue,Y)?\"w\":ee&&ue==`\n`?\"n\":!ee||/\\s/.test(ue)?null:\"p\";if(ee&&!ie&&!me&&(me=\"s\"),B&&B!=me){n<0&&(n=1,A(),t.sticky=\"after\");break}if(me&&(B=me),n>0&&!A(!ie))break}var ve=wi(e,t,a,l,!0);return Xe(a,ve)&&(ve.hitSide=!0),ve}function as(e,t,n,r){var i=e.doc,a=t.left,l;if(r==\"page\"){var u=Math.min(e.display.wrapper.clientHeight,pe(e).innerHeight||i(e).documentElement.clientHeight),f=Math.max(u-.5*Vr(e.display),3);l=(n>0?t.bottom:t.top)+n*f}else r==\"line\"&&(l=n>0?t.bottom+3:t.top-3);for(var m;m=mo(e,a,l),!!m.outside;){if(n<0?l<=0:l>=i.height){m.hitSide=!0;break}l+=n*5}return m}var Qe=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new qe,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Qe.prototype.init=function(e){var t=this,n=this,r=n.cm,i=n.div=e.lineDiv;i.contentEditable=!0,Ko(i,r.options.spellcheck,r.options.autocorrect,r.options.autocapitalize);function a(u){for(var f=u.target;f;f=f.parentNode){if(f==i)return!0;if(/\\bCodeMirror-(?:line)?widget\\b/.test(f.className))break}return!1}Ie(i,\"paste\",function(u){!a(u)||ot(r,u)||rs(u,r)||h<=11&&setTimeout(gt(r,function(){return t.updateFromDOM()}),20)}),Ie(i,\"compositionstart\",function(u){t.composing={data:u.data,done:!1}}),Ie(i,\"compositionupdate\",function(u){t.composing||(t.composing={data:u.data,done:!1})}),Ie(i,\"compositionend\",function(u){t.composing&&(u.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),Ie(i,\"touchstart\",function(){return n.forceCompositionEnd()}),Ie(i,\"input\",function(){t.composing||t.readFromDOMSoon()});function l(u){if(!(!a(u)||ot(r,u))){if(r.somethingSelected())zi({lineWise:!1,text:r.getSelections()}),u.type==\"cut\"&&r.replaceSelection(\"\",null,\"cut\");else if(r.options.lineWiseCopyCut){var f=is(r);zi({lineWise:!0,text:f.text}),u.type==\"cut\"&&r.operation(function(){r.setSelections(f.ranges,0,ke),r.replaceSelection(\"\",null,\"cut\")})}else return;if(u.clipboardData){u.clipboardData.clearData();var m=Qt.text.join(`\n`);if(u.clipboardData.setData(\"Text\",m),u.clipboardData.getData(\"Text\")==m){u.preventDefault();return}}var A=os(),B=A.firstChild;Ko(B),r.display.lineSpace.insertBefore(A,r.display.lineSpace.firstChild),B.value=Qt.text.join(`\n`);var ee=R(ze(i));F(B),setTimeout(function(){r.display.lineSpace.removeChild(A),ee.focus(),ee==i&&n.showPrimarySelection()},50)}}Ie(i,\"copy\",l),Ie(i,\"cut\",l)},Qe.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute(\"aria-label\",e):this.div.removeAttribute(\"aria-label\")},Qe.prototype.prepareSelection=function(){var e=Ya(this.cm,!1);return e.focus=R(ze(this.div))==this.div,e},Qe.prototype.showSelection=function(e,t){!e||!this.cm.display.view.length||((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Qe.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Qe.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),i=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||i.line<t.display.viewFrom){e.removeAllRanges();return}var a=Mi(t,e.anchorNode,e.anchorOffset),l=Mi(t,e.focusNode,e.focusOffset);if(!(a&&!a.bad&&l&&!l.bad&&ye(Zr(a,l),r)==0&&ye(Et(a,l),i)==0)){var u=t.display.view,f=r.line>=t.display.viewFrom&&ls(t,r)||{node:u[0].measure.map[2],offset:0},m=i.line<t.display.viewTo&&ls(t,i);if(!m){var A=u[u.length-1].measure,B=A.maps?A.maps[A.maps.length-1]:A.map;m={node:B[B.length-1],offset:B[B.length-2]-B[B.length-3]}}if(!f||!m){e.removeAllRanges();return}var ee=e.rangeCount&&e.getRangeAt(0),Y;try{Y=X(f.node,f.offset,m.offset,m.node)}catch{}Y&&(!v&&t.state.focused?(e.collapse(f.node,f.offset),Y.collapsed||(e.removeAllRanges(),e.addRange(Y))):(e.removeAllRanges(),e.addRange(Y)),ee&&e.anchorNode==null?e.addRange(ee):v&&this.startGracePeriod()),this.rememberSelection()}},Qe.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Qe.prototype.showMultipleSelections=function(e){V(this.cm.display.cursorDiv,e.cursors),V(this.cm.display.selectionDiv,e.selection)},Qe.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Qe.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return N(this.div,t)},Qe.prototype.focus=function(){this.cm.options.readOnly!=\"nocursor\"&&((!this.selectionInEditor()||R(ze(this.div))!=this.div)&&this.showSelection(this.prepareSelection(),!0),this.div.focus())},Qe.prototype.blur=function(){this.div.blur()},Qe.prototype.getField=function(){return this.div},Qe.prototype.supportsTouch=function(){return!0},Qe.prototype.receivedFocus=function(){var e=this,t=this;this.selectionInEditor()?setTimeout(function(){return e.pollSelection()},20):Nt(this.cm,function(){return t.cm.curOp.selectionChanged=!0});function n(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,n))}this.polling.set(this.cm.options.pollInterval,n)},Qe.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Qe.prototype.pollSelection=function(){if(!(this.readDOMTimeout!=null||this.gracePeriod||!this.selectionChanged())){var e=this.getSelection(),t=this.cm;if(W&&w&&this.cm.display.gutterSpecs.length&&bd(e.anchorNode)){this.cm.triggerOnKeyDown({type:\"keydown\",keyCode:8,preventDefault:Math.abs}),this.blur(),this.focus();return}if(!this.composing){this.rememberSelection();var n=Mi(t,e.anchorNode,e.anchorOffset),r=Mi(t,e.focusNode,e.focusOffset);n&&r&&Nt(t,function(){wt(t.doc,yr(n,r),ke),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})}}},Qe.prototype.pollContent=function(){this.readDOMTimeout!=null&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),i=n.to();if(r.ch==0&&r.line>e.firstLine()&&(r=ne(r.line-1,Ae(e.doc,r.line-1).length)),i.ch==Ae(e.doc,i.line).text.length&&i.line<e.lastLine()&&(i=ne(i.line+1,0)),r.line<t.viewFrom||i.line>t.viewTo-1)return!1;var a,l,u;r.line==t.viewFrom||(a=Ar(e,r.line))==0?(l=x(t.view[0].line),u=t.view[0].node):(l=x(t.view[a].line),u=t.view[a-1].node.nextSibling);var f=Ar(e,i.line),m,A;if(f==t.view.length-1?(m=t.viewTo-1,A=t.lineDiv.lastChild):(m=x(t.view[f+1].line)-1,A=t.view[f+1].node.previousSibling),!u)return!1;for(var B=e.doc.splitLines(yd(e,u,A,l,m)),ee=ir(e.doc,ne(l,0),ne(m,Ae(e.doc,m).text.length));B.length>1&&ee.length>1;)if(ce(B)==ce(ee))B.pop(),ee.pop(),m--;else if(B[0]==ee[0])B.shift(),ee.shift(),l++;else break;for(var Y=0,ie=0,ue=B[0],me=ee[0],ve=Math.min(ue.length,me.length);Y<ve&&ue.charCodeAt(Y)==me.charCodeAt(Y);)++Y;for(var _e=ce(B),be=ce(ee),Ce=Math.min(_e.length-(B.length==1?Y:0),be.length-(ee.length==1?Y:0));ie<Ce&&_e.charCodeAt(_e.length-ie-1)==be.charCodeAt(be.length-ie-1);)++ie;if(B.length==1&&ee.length==1&&l==r.line)for(;Y&&Y>r.ch&&_e.charCodeAt(_e.length-ie-1)==be.charCodeAt(be.length-ie-1);)Y--,ie++;B[B.length-1]=_e.slice(0,_e.length-ie).replace(/^\\u200b+/,\"\"),B[0]=B[0].slice(Y).replace(/\\u200b+$/,\"\");var Ne=ne(l,Y),Fe=ne(m,ee.length?ce(ee).length-ie:0);if(B.length>1||B[0]||ye(Ne,Fe))return ln(e.doc,B,Ne,Fe,\"+input\"),!0},Qe.prototype.ensurePolled=function(){this.forceCompositionEnd()},Qe.prototype.reset=function(){this.forceCompositionEnd()},Qe.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Qe.prototype.readFromDOMSoon=function(){var e=this;this.readDOMTimeout==null&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing)if(e.composing.done)e.composing=null;else return;e.updateFromDOM()},80))},Qe.prototype.updateFromDOM=function(){var e=this;(this.cm.isReadOnly()||!this.pollContent())&&Nt(this.cm,function(){return zt(e.cm)})},Qe.prototype.setUneditable=function(e){e.contentEditable=\"false\"},Qe.prototype.onKeyPress=function(e){e.charCode==0||this.composing||(e.preventDefault(),this.cm.isReadOnly()||gt(this.cm,$o)(this.cm,String.fromCharCode(e.charCode==null?e.keyCode:e.charCode),0))},Qe.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(e!=\"nocursor\")},Qe.prototype.onContextMenu=function(){},Qe.prototype.resetPosition=function(){},Qe.prototype.needsContentAttribute=!0;function ls(e,t){var n=po(e,t.line);if(!n||n.hidden)return null;var r=Ae(e.doc,t.line),i=Na(n,r,t.line),a=Pe(r,e.doc.direction),l=\"left\";if(a){var u=Pt(a,t.ch);l=u%2?\"right\":\"left\"}var f=Ba(i.map,t.ch,l);return f.offset=f.collapse==\"right\"?f.end:f.start,f}function bd(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function dn(e,t){return t&&(e.bad=!0),e}function yd(e,t,n,r,i){var a=\"\",l=!1,u=e.doc.lineSeparator(),f=!1;function m(Y){return function(ie){return ie.id==Y}}function A(){l&&(a+=u,f&&(a+=u),l=f=!1)}function B(Y){Y&&(A(),a+=Y)}function ee(Y){if(Y.nodeType==1){var ie=Y.getAttribute(\"cm-text\");if(ie){B(ie);return}var ue=Y.getAttribute(\"cm-marker\"),me;if(ue){var ve=e.findMarks(ne(r,0),ne(i+1,0),m(+ue));ve.length&&(me=ve[0].find(0))&&B(ir(e.doc,me.from,me.to).join(u));return}if(Y.getAttribute(\"contenteditable\")==\"false\")return;var _e=/^(pre|div|p|li|table|br)$/i.test(Y.nodeName);if(!/^br$/i.test(Y.nodeName)&&Y.textContent.length==0)return;_e&&A();for(var be=0;be<Y.childNodes.length;be++)ee(Y.childNodes[be]);/^(pre|p)$/i.test(Y.nodeName)&&(f=!0),_e&&(l=!0)}else Y.nodeType==3&&B(Y.nodeValue.replace(/\\u200b/g,\"\").replace(/\\u00a0/g,\" \"))}for(;ee(t),t!=n;)t=t.nextSibling,f=!1;return a}function Mi(e,t,n){var r;if(t==e.display.lineDiv){if(r=e.display.lineDiv.childNodes[n],!r)return dn(e.clipPos(ne(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var a=e.display.view[i];if(a.node==r)return xd(a,t,n)}}function xd(e,t,n){var r=e.text.firstChild,i=!1;if(!t||!N(r,t))return dn(ne(x(e.line),0),!0);if(t==r&&(i=!0,t=r.childNodes[n],n=0,!t)){var a=e.rest?ce(e.rest):e.line;return dn(ne(x(a),a.text.length),i)}var l=t.nodeType==3?t:null,u=t;for(!l&&t.childNodes.length==1&&t.firstChild.nodeType==3&&(l=t.firstChild,n&&(n=l.nodeValue.length));u.parentNode!=r;)u=u.parentNode;var f=e.measure,m=f.maps;function A(me,ve,_e){for(var be=-1;be<(m?m.length:0);be++)for(var Ce=be<0?f.map:m[be],Ne=0;Ne<Ce.length;Ne+=3){var Fe=Ce[Ne+2];if(Fe==me||Fe==ve){var $e=x(be<0?e.line:e.rest[be]),Ve=Ce[Ne]+_e;return(_e<0||Fe!=me)&&(Ve=Ce[Ne+(_e?1:0)]),ne($e,Ve)}}}var B=A(l,u,n);if(B)return dn(B,i);for(var ee=u.nextSibling,Y=l?l.nodeValue.length-n:0;ee;ee=ee.nextSibling){if(B=A(ee,ee.firstChild,0),B)return dn(ne(B.line,B.ch-Y),i);Y+=ee.textContent.length}for(var ie=u.previousSibling,ue=n;ie;ie=ie.previousSibling){if(B=A(ie,ie.firstChild,-1),B)return dn(ne(B.line,B.ch+ue),i);ue+=ie.textContent.length}}var st=function(e){this.cm=e,this.prevInput=\"\",this.pollingFast=!1,this.polling=new qe,this.hasSelection=!1,this.composing=null,this.resetting=!1};st.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var i=this.textarea;e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),_&&(i.style.width=\"0px\"),Ie(i,\"input\",function(){s&&h>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()}),Ie(i,\"paste\",function(l){ot(r,l)||rs(l,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())});function a(l){if(!ot(r,l)){if(r.somethingSelected())zi({lineWise:!1,text:r.getSelections()});else if(r.options.lineWiseCopyCut){var u=is(r);zi({lineWise:!0,text:u.text}),l.type==\"cut\"?r.setSelections(u.ranges,null,ke):(n.prevInput=\"\",i.value=u.text.join(`\n`),F(i))}else return;l.type==\"cut\"&&(r.state.cutIncoming=+new Date)}}Ie(i,\"cut\",a),Ie(i,\"copy\",a),Ie(e.scroller,\"paste\",function(l){if(!(lr(e,l)||ot(r,l))){if(!i.dispatchEvent){r.state.pasteIncoming=+new Date,n.focus();return}var u=new Event(\"paste\");u.clipboardData=l.clipboardData,i.dispatchEvent(u)}}),Ie(e.lineSpace,\"selectstart\",function(l){lr(e,l)||kt(l)}),Ie(i,\"compositionstart\",function(){var l=r.getCursor(\"from\");n.composing&&n.composing.range.clear(),n.composing={start:l,range:r.markText(l,r.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}}),Ie(i,\"compositionend\",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},st.prototype.createField=function(e){this.wrapper=os(),this.textarea=this.wrapper.firstChild;var t=this.cm.options;Ko(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},st.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute(\"aria-label\",e):this.textarea.removeAttribute(\"aria-label\")},st.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Ya(e);if(e.options.moveInputWithCursor){var i=Xt(e,n.sel.primary().head,\"div\"),a=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-a.left))}return r},st.prototype.showSelection=function(e){var t=this.cm,n=t.display;V(n.cursorDiv,e.cursors),V(n.selectionDiv,e.selection),e.teTop!=null&&(this.wrapper.style.top=e.teTop+\"px\",this.wrapper.style.left=e.teLeft+\"px\")},st.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput=\"\";var n=t.getSelection();this.textarea.value=n,t.state.focused&&F(this.textarea),s&&h>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value=\"\",s&&h>=9&&(this.hasSelection=null));this.resetting=!1}},st.prototype.getField=function(){return this.textarea},st.prototype.supportsTouch=function(){return!1},st.prototype.focus=function(){if(this.cm.options.readOnly!=\"nocursor\"&&(!E||R(ze(this.textarea))!=this.textarea))try{this.textarea.focus()}catch{}},st.prototype.blur=function(){this.textarea.blur()},st.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},st.prototype.receivedFocus=function(){this.slowPoll()},st.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},st.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0;function n(){var r=t.poll();!r&&!e?(e=!0,t.polling.set(60,n)):(t.pollingFast=!1,t.slowPoll())}t.polling.set(20,n)},st.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||hr(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(s&&h>=9&&this.hasSelection===i||O&&/[\\uf700-\\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=i.charCodeAt(0);if(a==8203&&!r&&(r=\"\\u200B\"),a==8666)return this.reset(),this.cm.execCommand(\"undo\")}for(var l=0,u=Math.min(r.length,i.length);l<u&&r.charCodeAt(l)==i.charCodeAt(l);)++l;return Nt(t,function(){$o(t,i.slice(l),r.length-l,null,e.composing?\"*compose\":null),i.length>1e3||i.indexOf(`\n`)>-1?n.value=e.prevInput=\"\":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))}),!0},st.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},st.prototype.onKeyPress=function(){s&&h>=9&&(this.hasSelection=null),this.fastPoll()},st.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var a=Mr(n,e),l=r.scroller.scrollTop;if(!a||d)return;var u=n.options.resetSelectionOnContextMenu;u&&n.doc.sel.contains(a)==-1&&gt(n,wt)(n.doc,yr(a),ke);var f=i.style.cssText,m=t.wrapper.style.cssText,A=t.wrapper.offsetParent.getBoundingClientRect();t.wrapper.style.cssText=\"position: static\",i.style.cssText=`position: absolute; width: 30px; height: 30px;\n      top: `+(e.clientY-A.top-5)+\"px; left: \"+(e.clientX-A.left-5)+`px;\n      z-index: 1000; background: `+(s?\"rgba(255, 255, 255, .05)\":\"transparent\")+`;\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var B;g&&(B=i.ownerDocument.defaultView.scrollY),r.input.focus(),g&&i.ownerDocument.defaultView.scrollTo(null,B),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=\" \"),t.contextMenuPending=Y,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll);function ee(){if(i.selectionStart!=null){var ue=n.somethingSelected(),me=\"\\u200B\"+(ue?i.value:\"\");i.value=\"\\u21DA\",i.value=me,t.prevInput=ue?\"\":\"\\u200B\",i.selectionStart=1,i.selectionEnd=me.length,r.selForContextMenu=n.doc.sel}}function Y(){if(t.contextMenuPending==Y&&(t.contextMenuPending=!1,t.wrapper.style.cssText=m,i.style.cssText=f,s&&h<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=l),i.selectionStart!=null)){(!s||s&&h<9)&&ee();var ue=0,me=function(){r.selForContextMenu==n.doc.sel&&i.selectionStart==0&&i.selectionEnd>0&&t.prevInput==\"\\u200B\"?gt(n,Ll)(n):ue++<10?r.detectingSelectAll=setTimeout(me,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(me,200)}}if(s&&h>=9&&ee(),I){dr(e);var ie=function(){_t(window,\"mouseup\",ie),setTimeout(Y,20)};Ie(window,\"mouseup\",ie)}else setTimeout(Y,50)},st.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=e==\"nocursor\",this.textarea.readOnly=!!e},st.prototype.setUneditable=function(){},st.prototype.needsContentAttribute=!1;function _d(e,t){if(t=t?ge(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),t.autofocus==null){var n=R(ze(e));t.autofocus=n==e||e.getAttribute(\"autofocus\")!=null&&n==document.body}function r(){e.value=u.getValue()}var i;if(e.form&&(Ie(e.form,\"submit\",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var l=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=l}}catch{}}t.finishInit=function(f){f.save=r,f.getTextArea=function(){return e},f.toTextArea=function(){f.toTextArea=isNaN,r(),e.parentNode.removeChild(f.getWrapperElement()),e.style.display=\"\",e.form&&(_t(e.form,\"submit\",r),!t.leaveSubmitMethodAlone&&typeof e.form.submit==\"function\"&&(e.form.submit=i))}},e.style.display=\"none\";var u=tt(function(f){return e.parentNode.insertBefore(f,e.nextSibling)},t);return u}function kd(e){e.off=_t,e.on=Ie,e.wheelEventPixels=zf,e.Doc=Mt,e.splitLines=Ht,e.countColumn=Oe,e.findColumn=Ge,e.isWordChar=we,e.Pass=Ze,e.signal=it,e.Line=Xr,e.changeEnd=xr,e.scrollbarModel=rl,e.Pos=ne,e.cmpPos=ye,e.modes=Wr,e.mimeModes=Kt,e.resolveMode=Ur,e.getMode=$r,e.modeExtensions=gr,e.extendMode=Kr,e.copyState=Vt,e.startState=Gr,e.innerMode=_n,e.commands=$n,e.keyMap=ur,e.keyName=Hl,e.isModifierKey=jl,e.lookupKey=un,e.normalizeKeyMap=Qf,e.StringStream=at,e.SharedTextMarker=Hn,e.TextMarker=kr,e.LineWidget=Rn,e.e_preventDefault=kt,e.e_stopPropagation=Rr,e.e_stop=dr,e.addClass=le,e.contains=N,e.rmClass=Q,e.keyNames=wr}pd(tt),vd(tt);var wd=\"iter insert remove copy getEditor constructor\".split(\" \");for(var Ai in Mt.prototype)Mt.prototype.hasOwnProperty(Ai)&&Se(wd,Ai)<0&&(tt.prototype[Ai]=(function(e){return function(){return e.apply(this.doc,arguments)}})(Mt.prototype[Ai]));return Wt(Mt),tt.inputStyles={textarea:st,contenteditable:Qe},tt.defineMode=function(e){!tt.defaults.mode&&e!=\"null\"&&(tt.defaults.mode=e),Gt.apply(this,arguments)},tt.defineMIME=Cr,tt.defineMode(\"null\",function(){return{token:function(e){return e.skipToEnd()}}}),tt.defineMIME(\"text/plain\",\"null\"),tt.defineExtension=function(e,t){tt.prototype[e]=t},tt.defineDocExtension=function(e,t){Mt.prototype[e]=t},tt.fromTextArea=_d,kd(tt),tt.version=\"5.65.20\",tt}))});var Yn=Ke((us,cs)=>{(function(o){typeof us==\"object\"&&typeof cs==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.overlayMode=function(p,v,C){return{startState:function(){return{base:o.startState(p),overlay:o.startState(v),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(b){return{base:o.copyState(p,b.base),overlay:o.copyState(v,b.overlay),basePos:b.basePos,baseCur:null,overlayPos:b.overlayPos,overlayCur:null}},token:function(b,S){return(b!=S.streamSeen||Math.min(S.basePos,S.overlayPos)<b.start)&&(S.streamSeen=b,S.basePos=S.overlayPos=b.start),b.start==S.basePos&&(S.baseCur=p.token(b,S.base),S.basePos=b.pos),b.start==S.overlayPos&&(b.pos=b.start,S.overlayCur=v.token(b,S.overlay),S.overlayPos=b.pos),b.pos=Math.min(S.basePos,S.overlayPos),S.overlayCur==null?S.baseCur:S.baseCur!=null&&S.overlay.combineTokens||C&&S.overlay.combineTokens==null?S.baseCur+\" \"+S.overlayCur:S.overlayCur},indent:p.indent&&function(b,S,s){return p.indent(b.base,S,s)},electricChars:p.electricChars,innerMode:function(b){return{state:b.base,mode:p}},blankLine:function(b){var S,s;return p.blankLine&&(S=p.blankLine(b.base)),v.blankLine&&(s=v.blankLine(b.overlay)),s==null?S:C&&S!=null?S+\" \"+s:s}}}})});var ps=Ke((fs,ds)=>{(function(o){typeof fs==\"object\"&&typeof ds==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";var p=/^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,v=/^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,C=/[*+-]\\s/;o.commands.newlineAndIndentContinueMarkdownList=function(S){if(S.getOption(\"disableInput\"))return o.Pass;for(var s=S.listSelections(),h=[],g=0;g<s.length;g++){var T=s[g].head,w=S.getStateAfter(T.line),c=o.innerMode(S.getMode(),w);if(c.mode.name!==\"markdown\"&&c.mode.helperType!==\"markdown\"){S.execCommand(\"newlineAndIndent\");return}else w=c.state;var d=w.list!==!1,k=w.quote!==0,z=S.getLine(T.line),M=p.exec(z),_=/^\\s*$/.test(z.slice(0,T.ch));if(!s[g].empty()||!d&&!k||!M||_){S.execCommand(\"newlineAndIndent\");return}if(v.test(z)){var W=k&&/>\\s*$/.test(z),E=!/>\\s*$/.test(z);(W||E)&&S.replaceRange(\"\",{line:T.line,ch:0},{line:T.line,ch:T.ch+1}),h[g]=`\n`}else{var O=M[1],G=M[5],J=!(C.test(M[2])||M[2].indexOf(\">\")>=0),re=J?parseInt(M[3],10)+1+M[4]:M[2].replace(\"x\",\" \");h[g]=`\n`+O+re+G,J&&b(S,T)}}S.replaceSelections(h)};function b(S,s){var h=s.line,g=0,T=0,w=p.exec(S.getLine(h)),c=w[1];do{g+=1;var d=h+g,k=S.getLine(d),z=p.exec(k);if(z){var M=z[1],_=parseInt(w[3],10)+g-T,W=parseInt(z[3],10),E=W;if(c===M&&!isNaN(W))_===W&&(E=W+1),_>W&&(E=_+1),S.replaceRange(k.replace(p,M+E+z[4]+z[5]),{line:d,ch:0},{line:d,ch:k.length});else{if(c.length>M.length||c.length<M.length&&g===1)return;T+=1}}}while(z)}})});var ms=Ke((hs,gs)=>{(function(o){typeof hs==\"object\"&&typeof gs==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){o.defineOption(\"placeholder\",\"\",function(h,g,T){var w=T&&T!=o.Init;if(g&&!w)h.on(\"blur\",b),h.on(\"change\",S),h.on(\"swapDoc\",S),o.on(h.getInputField(),\"compositionupdate\",h.state.placeholderCompose=function(){C(h)}),S(h);else if(!g&&w){h.off(\"blur\",b),h.off(\"change\",S),h.off(\"swapDoc\",S),o.off(h.getInputField(),\"compositionupdate\",h.state.placeholderCompose),p(h);var c=h.getWrapperElement();c.className=c.className.replace(\" CodeMirror-empty\",\"\")}g&&!h.hasFocus()&&b(h)});function p(h){h.state.placeholder&&(h.state.placeholder.parentNode.removeChild(h.state.placeholder),h.state.placeholder=null)}function v(h){p(h);var g=h.state.placeholder=document.createElement(\"pre\");g.style.cssText=\"height: 0; overflow: visible\",g.style.direction=h.getOption(\"direction\"),g.className=\"CodeMirror-placeholder CodeMirror-line-like\";var T=h.getOption(\"placeholder\");typeof T==\"string\"&&(T=document.createTextNode(T)),g.appendChild(T),h.display.lineSpace.insertBefore(g,h.display.lineSpace.firstChild)}function C(h){setTimeout(function(){var g=!1;if(h.lineCount()==1){var T=h.getInputField();g=T.nodeName==\"TEXTAREA\"?!h.getLine(0).length:!/[^\\u200b]/.test(T.querySelector(\".CodeMirror-line\").textContent)}g?v(h):p(h)},20)}function b(h){s(h)&&v(h)}function S(h){var g=h.getWrapperElement(),T=s(h);g.className=g.className.replace(\" CodeMirror-empty\",\"\")+(T?\" CodeMirror-empty\":\"\"),T?v(h):p(h)}function s(h){return h.lineCount()===1&&h.getLine(0)===\"\"}})});var ys=Ke((vs,bs)=>{(function(o){typeof vs==\"object\"&&typeof bs==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineOption(\"styleSelectedText\",!1,function(w,c,d){var k=d&&d!=o.Init;c&&!k?(w.state.markedSelection=[],w.state.markedSelectionStyle=typeof c==\"string\"?c:\"CodeMirror-selectedtext\",g(w),w.on(\"cursorActivity\",p),w.on(\"change\",v)):!c&&k&&(w.off(\"cursorActivity\",p),w.off(\"change\",v),h(w),w.state.markedSelection=w.state.markedSelectionStyle=null)});function p(w){w.state.markedSelection&&w.operation(function(){T(w)})}function v(w){w.state.markedSelection&&w.state.markedSelection.length&&w.operation(function(){h(w)})}var C=8,b=o.Pos,S=o.cmpPos;function s(w,c,d,k){if(S(c,d)!=0)for(var z=w.state.markedSelection,M=w.state.markedSelectionStyle,_=c.line;;){var W=_==c.line?c:b(_,0),E=_+C,O=E>=d.line,G=O?d:b(E,0),J=w.markText(W,G,{className:M});if(k==null?z.push(J):z.splice(k++,0,J),O)break;_=E}}function h(w){for(var c=w.state.markedSelection,d=0;d<c.length;++d)c[d].clear();c.length=0}function g(w){h(w);for(var c=w.listSelections(),d=0;d<c.length;d++)s(w,c[d].from(),c[d].to())}function T(w){if(!w.somethingSelected())return h(w);if(w.listSelections().length>1)return g(w);var c=w.getCursor(\"start\"),d=w.getCursor(\"end\"),k=w.state.markedSelection;if(!k.length)return s(w,c,d);var z=k[0].find(),M=k[k.length-1].find();if(!z||!M||d.line-c.line<=C||S(c,M.to)>=0||S(d,z.from)<=0)return g(w);for(;S(c,z.from)>0;)k.shift().clear(),z=k[0].find();for(S(c,z.from)<0&&(z.to.line-c.line<C?(k.shift().clear(),s(w,c,z.to,0)):s(w,c,z.from,0));S(d,M.to)<0;)k.pop().clear(),M=k[k.length-1].find();S(d,M.to)>0&&(d.line-M.from.line<C?(k.pop().clear(),s(w,M.from,d)):s(w,M.to,d))}})});var ks=Ke((xs,_s)=>{(function(o){typeof xs==\"object\"&&typeof _s==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";var p=o.Pos;function v(_){var W=_.flags;return W??(_.ignoreCase?\"i\":\"\")+(_.global?\"g\":\"\")+(_.multiline?\"m\":\"\")}function C(_,W){for(var E=v(_),O=E,G=0;G<W.length;G++)O.indexOf(W.charAt(G))==-1&&(O+=W.charAt(G));return E==O?_:new RegExp(_.source,O)}function b(_){return/\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(_.source)}function S(_,W,E){W=C(W,\"g\");for(var O=E.line,G=E.ch,J=_.lastLine();O<=J;O++,G=0){W.lastIndex=G;var re=_.getLine(O),q=W.exec(re);if(q)return{from:p(O,q.index),to:p(O,q.index+q[0].length),match:q}}}function s(_,W,E){if(!b(W))return S(_,W,E);W=C(W,\"gm\");for(var O,G=1,J=E.line,re=_.lastLine();J<=re;){for(var q=0;q<G&&!(J>re);q++){var I=_.getLine(J++);O=O==null?I:O+`\n`+I}G=G*2,W.lastIndex=E.ch;var D=W.exec(O);if(D){var Q=O.slice(0,D.index).split(`\n`),j=D[0].split(`\n`),V=E.line+Q.length-1,y=Q[Q.length-1].length;return{from:p(V,y),to:p(V+j.length-1,j.length==1?y+j[0].length:j[j.length-1].length),match:D}}}}function h(_,W,E){for(var O,G=0;G<=_.length;){W.lastIndex=G;var J=W.exec(_);if(!J)break;var re=J.index+J[0].length;if(re>_.length-E)break;(!O||re>O.index+O[0].length)&&(O=J),G=J.index+1}return O}function g(_,W,E){W=C(W,\"g\");for(var O=E.line,G=E.ch,J=_.firstLine();O>=J;O--,G=-1){var re=_.getLine(O),q=h(re,W,G<0?0:re.length-G);if(q)return{from:p(O,q.index),to:p(O,q.index+q[0].length),match:q}}}function T(_,W,E){if(!b(W))return g(_,W,E);W=C(W,\"gm\");for(var O,G=1,J=_.getLine(E.line).length-E.ch,re=E.line,q=_.firstLine();re>=q;){for(var I=0;I<G&&re>=q;I++){var D=_.getLine(re--);O=O==null?D:D+`\n`+O}G*=2;var Q=h(O,W,J);if(Q){var j=O.slice(0,Q.index).split(`\n`),V=Q[0].split(`\n`),y=re+j.length,K=j[j.length-1].length;return{from:p(y,K),to:p(y+V.length-1,V.length==1?K+V[0].length:V[V.length-1].length),match:Q}}}}var w,c;String.prototype.normalize?(w=function(_){return _.normalize(\"NFD\").toLowerCase()},c=function(_){return _.normalize(\"NFD\")}):(w=function(_){return _.toLowerCase()},c=function(_){return _});function d(_,W,E,O){if(_.length==W.length)return E;for(var G=0,J=E+Math.max(0,_.length-W.length);;){if(G==J)return G;var re=G+J>>1,q=O(_.slice(0,re)).length;if(q==E)return re;q>E?J=re:G=re+1}}function k(_,W,E,O){if(!W.length)return null;var G=O?w:c,J=G(W).split(/\\r|\\n\\r?/);e:for(var re=E.line,q=E.ch,I=_.lastLine()+1-J.length;re<=I;re++,q=0){var D=_.getLine(re).slice(q),Q=G(D);if(J.length==1){var j=Q.indexOf(J[0]);if(j==-1)continue e;var E=d(D,Q,j,G)+q;return{from:p(re,d(D,Q,j,G)+q),to:p(re,d(D,Q,j+J[0].length,G)+q)}}else{var V=Q.length-J[0].length;if(Q.slice(V)!=J[0])continue e;for(var y=1;y<J.length-1;y++)if(G(_.getLine(re+y))!=J[y])continue e;var K=_.getLine(re+J.length-1),X=G(K),N=J[J.length-1];if(X.slice(0,N.length)!=N)continue e;return{from:p(re,d(D,Q,V,G)+q),to:p(re+J.length-1,d(K,X,N.length,G))}}}}function z(_,W,E,O){if(!W.length)return null;var G=O?w:c,J=G(W).split(/\\r|\\n\\r?/);e:for(var re=E.line,q=E.ch,I=_.firstLine()-1+J.length;re>=I;re--,q=-1){var D=_.getLine(re);q>-1&&(D=D.slice(0,q));var Q=G(D);if(J.length==1){var j=Q.lastIndexOf(J[0]);if(j==-1)continue e;return{from:p(re,d(D,Q,j,G)),to:p(re,d(D,Q,j+J[0].length,G))}}else{var V=J[J.length-1];if(Q.slice(0,V.length)!=V)continue e;for(var y=1,E=re-J.length+1;y<J.length-1;y++)if(G(_.getLine(E+y))!=J[y])continue e;var K=_.getLine(re+1-J.length),X=G(K);if(X.slice(X.length-J[0].length)!=J[0])continue e;return{from:p(re+1-J.length,d(K,X,K.length-J[0].length,G)),to:p(re,d(D,Q,V.length,G))}}}}function M(_,W,E,O){this.atOccurrence=!1,this.afterEmptyMatch=!1,this.doc=_,E=E?_.clipPos(E):p(0,0),this.pos={from:E,to:E};var G;typeof O==\"object\"?G=O.caseFold:(G=O,O=null),typeof W==\"string\"?(G==null&&(G=!1),this.matches=function(J,re){return(J?z:k)(_,W,re,G)}):(W=C(W,\"gm\"),!O||O.multiline!==!1?this.matches=function(J,re){return(J?T:s)(_,W,re)}:this.matches=function(J,re){return(J?g:S)(_,W,re)})}M.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(_){var W=this.doc.clipPos(_?this.pos.from:this.pos.to);if(this.afterEmptyMatch&&this.atOccurrence&&(W=p(W.line,W.ch),_?(W.ch--,W.ch<0&&(W.line--,W.ch=(this.doc.getLine(W.line)||\"\").length)):(W.ch++,W.ch>(this.doc.getLine(W.line)||\"\").length&&(W.ch=0,W.line++)),o.cmpPos(W,this.doc.clipPos(W))!=0))return this.atOccurrence=!1;var E=this.matches(_,W);if(this.afterEmptyMatch=E&&o.cmpPos(E.from,E.to)==0,E)return this.pos=E,this.atOccurrence=!0,this.pos.match||!0;var O=p(_?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:O,to:O},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(_,W){if(this.atOccurrence){var E=o.splitLines(_);this.doc.replaceRange(E,this.pos.from,this.pos.to,W),this.pos.to=p(this.pos.from.line+E.length-1,E[E.length-1].length+(E.length==1?this.pos.from.ch:0))}}},o.defineExtension(\"getSearchCursor\",function(_,W,E){return new M(this.doc,_,W,E)}),o.defineDocExtension(\"getSearchCursor\",function(_,W,E){return new M(this,_,W,E)}),o.defineExtension(\"selectMatches\",function(_,W){for(var E=[],O=this.getSearchCursor(_,this.getCursor(\"from\"),W);O.findNext()&&!(o.cmpPos(O.to(),this.getCursor(\"to\"))>0);)E.push({anchor:O.from(),head:O.to()});E.length&&this.setSelections(E,0)})})});var Vo=Ke((ws,Ss)=>{(function(o){typeof ws==\"object\"&&typeof Ss==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(N,R,le,xe,F,L){this.indented=N,this.column=R,this.type=le,this.info=xe,this.align=F,this.prev=L}function v(N,R,le,xe){var F=N.indented;return N.context&&N.context.type==\"statement\"&&le!=\"statement\"&&(F=N.context.indented),N.context=new p(F,R,le,xe,null,N.context)}function C(N){var R=N.context.type;return(R==\")\"||R==\"]\"||R==\"}\")&&(N.indented=N.context.indented),N.context=N.context.prev}function b(N,R,le){if(R.prevToken==\"variable\"||R.prevToken==\"type\"||/\\S(?:[^- ]>|[*\\]])\\s*$|\\*$/.test(N.string.slice(0,le))||R.typeAtEndOfLine&&N.column()==N.indentation())return!0}function S(N){for(;;){if(!N||N.type==\"top\")return!0;if(N.type==\"}\"&&N.prev.info!=\"namespace\")return!1;N=N.prev}}o.defineMode(\"clike\",function(N,R){var le=N.indentUnit,xe=R.statementIndentUnit||le,F=R.dontAlignCalls,L=R.keywords||{},de=R.types||{},ze=R.builtin||{},pe=R.blockKeywords||{},Ee=R.defKeywords||{},ge=R.atoms||{},Oe=R.hooks||{},qe=R.multiLineStrings,Se=R.indentStatements!==!1,Be=R.indentSwitch!==!1,Ze=R.namespaceSeparator,ke=R.isPunctuationChar||/[\\[\\]{}\\(\\),;\\:\\.]/,Je=R.numberStart||/[\\d\\.]/,Re=R.number||/^(?:0x[a-f\\d]+|0b[01]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)(u|ll?|l|f)?/i,Ge=R.isOperatorChar||/[+\\-*&%=<>!?|\\/]/,U=R.isIdentifierChar||/[\\w\\$_\\xa1-\\uffff]/,Z=R.isReservedIdentifier||!1,ce,He;function te(we,Me){var Le=we.next();if(Oe[Le]){var $=Oe[Le](we,Me);if($!==!1)return $}if(Le=='\"'||Le==\"'\")return Me.tokenize=fe(Le),Me.tokenize(we,Me);if(Je.test(Le)){if(we.backUp(1),we.match(Re))return\"number\";we.next()}if(ke.test(Le))return ce=Le,null;if(Le==\"/\"){if(we.eat(\"*\"))return Me.tokenize=oe,oe(we,Me);if(we.eat(\"/\"))return we.skipToEnd(),\"comment\"}if(Ge.test(Le)){for(;!we.match(/^\\/[\\/*]/,!1)&&we.eat(Ge););return\"operator\"}if(we.eatWhile(U),Ze)for(;we.match(Ze);)we.eatWhile(U);var H=we.current();return h(L,H)?(h(pe,H)&&(ce=\"newstatement\"),h(Ee,H)&&(He=!0),\"keyword\"):h(de,H)?\"type\":h(ze,H)||Z&&Z(H)?(h(pe,H)&&(ce=\"newstatement\"),\"builtin\"):h(ge,H)?\"atom\":\"variable\"}function fe(we){return function(Me,Le){for(var $=!1,H,se=!1;(H=Me.next())!=null;){if(H==we&&!$){se=!0;break}$=!$&&H==\"\\\\\"}return(se||!($||qe))&&(Le.tokenize=null),\"string\"}}function oe(we,Me){for(var Le=!1,$;$=we.next();){if($==\"/\"&&Le){Me.tokenize=null;break}Le=$==\"*\"}return\"comment\"}function Ue(we,Me){R.typeFirstDefinitions&&we.eol()&&S(Me.context)&&(Me.typeAtEndOfLine=b(we,Me,we.pos))}return{startState:function(we){return{tokenize:null,context:new p((we||0)-le,0,\"top\",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(we,Me){var Le=Me.context;if(we.sol()&&(Le.align==null&&(Le.align=!1),Me.indented=we.indentation(),Me.startOfLine=!0),we.eatSpace())return Ue(we,Me),null;ce=He=null;var $=(Me.tokenize||te)(we,Me);if($==\"comment\"||$==\"meta\")return $;if(Le.align==null&&(Le.align=!0),ce==\";\"||ce==\":\"||ce==\",\"&&we.match(/^\\s*(?:\\/\\/.*)?$/,!1))for(;Me.context.type==\"statement\";)C(Me);else if(ce==\"{\")v(Me,we.column(),\"}\");else if(ce==\"[\")v(Me,we.column(),\"]\");else if(ce==\"(\")v(Me,we.column(),\")\");else if(ce==\"}\"){for(;Le.type==\"statement\";)Le=C(Me);for(Le.type==\"}\"&&(Le=C(Me));Le.type==\"statement\";)Le=C(Me)}else ce==Le.type?C(Me):Se&&((Le.type==\"}\"||Le.type==\"top\")&&ce!=\";\"||Le.type==\"statement\"&&ce==\"newstatement\")&&v(Me,we.column(),\"statement\",we.current());if($==\"variable\"&&(Me.prevToken==\"def\"||R.typeFirstDefinitions&&b(we,Me,we.start)&&S(Me.context)&&we.match(/^\\s*\\(/,!1))&&($=\"def\"),Oe.token){var H=Oe.token(we,Me,$);H!==void 0&&($=H)}return $==\"def\"&&R.styleDefs===!1&&($=\"variable\"),Me.startOfLine=!1,Me.prevToken=He?\"def\":$||ce,Ue(we,Me),$},indent:function(we,Me){if(we.tokenize!=te&&we.tokenize!=null||we.typeAtEndOfLine&&S(we.context))return o.Pass;var Le=we.context,$=Me&&Me.charAt(0),H=$==Le.type;if(Le.type==\"statement\"&&$==\"}\"&&(Le=Le.prev),R.dontIndentStatements)for(;Le.type==\"statement\"&&R.dontIndentStatements.test(Le.info);)Le=Le.prev;if(Oe.indent){var se=Oe.indent(we,Le,Me,le);if(typeof se==\"number\")return se}var De=Le.prev&&Le.prev.info==\"switch\";if(R.allmanIndentation&&/[{(]/.test($)){for(;Le.type!=\"top\"&&Le.type!=\"}\";)Le=Le.prev;return Le.indented}return Le.type==\"statement\"?Le.indented+($==\"{\"?0:xe):Le.align&&(!F||Le.type!=\")\")?Le.column+(H?0:1):Le.type==\")\"&&!H?Le.indented+xe:Le.indented+(H?0:le)+(!H&&De&&!/^(?:case|default)\\b/.test(Me)?le:0)},electricInput:Be?/^\\s*(?:case .*?:|default:|\\{\\}?|\\})$/:/^\\s*[{}]$/,blockCommentStart:\"/*\",blockCommentEnd:\"*/\",blockCommentContinue:\" * \",lineComment:\"//\",fold:\"brace\"}});function s(N){for(var R={},le=N.split(\" \"),xe=0;xe<le.length;++xe)R[le[xe]]=!0;return R}function h(N,R){return typeof N==\"function\"?N(R):N.propertyIsEnumerable(R)}var g=\"auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran\",T=\"alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq\",w=\"bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available\",c=\"FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION  NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT\",d=s(\"int long char short double float unsigned signed void bool\"),k=s(\"SEL instancetype id Class Protocol BOOL\");function z(N){return h(d,N)||/.+_t$/.test(N)}function M(N){return z(N)||h(k,N)}var _=\"case do else for if switch while struct enum union\",W=\"struct enum union\";function E(N,R){if(!R.startOfLine)return!1;for(var le,xe=null;le=N.peek();){if(le==\"\\\\\"&&N.match(/^.$/)){xe=E;break}else if(le==\"/\"&&N.match(/^\\/[\\/\\*]/,!1))break;N.next()}return R.tokenize=xe,\"meta\"}function O(N,R){return R.prevToken==\"type\"?\"type\":!1}function G(N){return!N||N.length<2||N[0]!=\"_\"?!1:N[1]==\"_\"||N[1]!==N[1].toLowerCase()}function J(N){return N.eatWhile(/[\\w\\.']/),\"number\"}function re(N,R){if(N.backUp(1),N.match(/^(?:R|u8R|uR|UR|LR)/)){var le=N.match(/^\"([^\\s\\\\()]{0,16})\\(/);return le?(R.cpp11RawStringDelim=le[1],R.tokenize=D,D(N,R)):!1}return N.match(/^(?:u8|u|U|L)/)?N.match(/^[\"']/,!1)?\"string\":!1:(N.next(),!1)}function q(N){var R=/(\\w+)::~?(\\w+)$/.exec(N);return R&&R[1]==R[2]}function I(N,R){for(var le;(le=N.next())!=null;)if(le=='\"'&&!N.eat('\"')){R.tokenize=null;break}return\"string\"}function D(N,R){var le=R.cpp11RawStringDelim.replace(/[^\\w\\s]/g,\"\\\\$&\"),xe=N.match(new RegExp(\".*?\\\\)\"+le+'\"'));return xe?R.tokenize=null:N.skipToEnd(),\"string\"}function Q(N,R){typeof N==\"string\"&&(N=[N]);var le=[];function xe(L){if(L)for(var de in L)L.hasOwnProperty(de)&&le.push(de)}xe(R.keywords),xe(R.types),xe(R.builtin),xe(R.atoms),le.length&&(R.helperType=N[0],o.registerHelper(\"hintWords\",N[0],le));for(var F=0;F<N.length;++F)o.defineMIME(N[F],R)}Q([\"text/x-csrc\",\"text/x-c\",\"text/x-chdr\"],{name:\"clike\",keywords:s(g),types:z,blockKeywords:s(_),defKeywords:s(W),typeFirstDefinitions:!0,atoms:s(\"NULL true false\"),isReservedIdentifier:G,hooks:{\"#\":E,\"*\":O},modeProps:{fold:[\"brace\",\"include\"]}}),Q([\"text/x-c++src\",\"text/x-c++hdr\"],{name:\"clike\",keywords:s(g+\" \"+T),types:z,blockKeywords:s(_+\" class try catch\"),defKeywords:s(W+\" class namespace\"),typeFirstDefinitions:!0,atoms:s(\"true false NULL nullptr\"),dontIndentStatements:/^template$/,isIdentifierChar:/[\\w\\$_~\\xa1-\\uffff]/,isReservedIdentifier:G,hooks:{\"#\":E,\"*\":O,u:re,U:re,L:re,R:re,0:J,1:J,2:J,3:J,4:J,5:J,6:J,7:J,8:J,9:J,token:function(N,R,le){if(le==\"variable\"&&N.peek()==\"(\"&&(R.prevToken==\";\"||R.prevToken==null||R.prevToken==\"}\")&&q(N.current()))return\"def\"}},namespaceSeparator:\"::\",modeProps:{fold:[\"brace\",\"include\"]}}),Q(\"text/x-java\",{name:\"clike\",keywords:s(\"abstract assert break case catch class const continue default do else enum extends final finally for goto if implements import instanceof interface native new package private protected public return static strictfp super switch synchronized this throw throws transient try volatile while @interface\"),types:s(\"var byte short int long float double boolean char void Boolean Byte Character Double Float Integer Long Number Object Short String StringBuffer StringBuilder Void\"),blockKeywords:s(\"catch class do else finally for if switch try while\"),defKeywords:s(\"class interface enum @interface\"),typeFirstDefinitions:!0,atoms:s(\"true false null\"),number:/^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+\\.?\\d*|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,hooks:{\"@\":function(N){return N.match(\"interface\",!1)?!1:(N.eatWhile(/[\\w\\$_]/),\"meta\")},'\"':function(N,R){return N.match(/\"\"$/)?(R.tokenize=j,R.tokenize(N,R)):!1}},modeProps:{fold:[\"brace\",\"import\"]}}),Q(\"text/x-csharp\",{name:\"clike\",keywords:s(\"abstract as async await base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in init interface internal is lock namespace new operator out override params private protected public readonly record ref required return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield\"),types:s(\"Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong\"),blockKeywords:s(\"catch class do else finally for foreach if struct switch try while\"),defKeywords:s(\"class interface namespace record struct var\"),typeFirstDefinitions:!0,atoms:s(\"true false null\"),hooks:{\"@\":function(N,R){return N.eat('\"')?(R.tokenize=I,I(N,R)):(N.eatWhile(/[\\w\\$_]/),\"meta\")}}});function j(N,R){for(var le=!1;!N.eol();){if(!le&&N.match('\"\"\"')){R.tokenize=null;break}le=N.next()==\"\\\\\"&&!le}return\"string\"}function V(N){return function(R,le){for(var xe;xe=R.next();)if(xe==\"*\"&&R.eat(\"/\"))if(N==1){le.tokenize=null;break}else return le.tokenize=V(N-1),le.tokenize(R,le);else if(xe==\"/\"&&R.eat(\"*\"))return le.tokenize=V(N+1),le.tokenize(R,le);return\"comment\"}}Q(\"text/x-scala\",{name:\"clike\",keywords:s(\"abstract case catch class def do else extends final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try type val var while with yield _ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble\"),types:s(\"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"),multiLineStrings:!0,blockKeywords:s(\"catch class enum do else finally for forSome if match switch try while\"),defKeywords:s(\"class enum def object package trait type val var\"),atoms:s(\"true false null\"),indentStatements:!1,indentSwitch:!1,isOperatorChar:/[+\\-*&%=<>!?|\\/#:@]/,hooks:{\"@\":function(N){return N.eatWhile(/[\\w\\$_]/),\"meta\"},'\"':function(N,R){return N.match('\"\"')?(R.tokenize=j,R.tokenize(N,R)):!1},\"'\":function(N){return N.match(/^(\\\\[^'\\s]+|[^\\\\'])'/)?\"string-2\":(N.eatWhile(/[\\w\\$_\\xa1-\\uffff]/),\"atom\")},\"=\":function(N,R){var le=R.context;return le.type==\"}\"&&le.align&&N.eat(\">\")?(R.context=new p(le.indented,le.column,le.type,le.info,null,le.prev),\"operator\"):!1},\"/\":function(N,R){return N.eat(\"*\")?(R.tokenize=V(1),R.tokenize(N,R)):!1}},modeProps:{closeBrackets:{pairs:'()[]{}\"\"',triples:'\"'}}});function y(N){return function(R,le){for(var xe=!1,F,L=!1;!R.eol();){if(!N&&!xe&&R.match('\"')){L=!0;break}if(N&&R.match('\"\"\"')){L=!0;break}F=R.next(),!xe&&F==\"$\"&&R.match(\"{\")&&R.skipTo(\"}\"),xe=!xe&&F==\"\\\\\"&&!N}return(L||!N)&&(le.tokenize=null),\"string\"}}Q(\"text/x-kotlin\",{name:\"clike\",keywords:s(\"package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam value\"),types:s(\"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit\"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+(\\.\\d+)?|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:s(\"catch class do else finally for if where try while enum\"),defKeywords:s(\"class val var object interface fun\"),atoms:s(\"true false null this\"),hooks:{\"@\":function(N){return N.eatWhile(/[\\w\\$_]/),\"meta\"},\"*\":function(N,R){return R.prevToken==\".\"?\"variable\":\"operator\"},'\"':function(N,R){return R.tokenize=y(N.match('\"\"')),R.tokenize(N,R)},\"/\":function(N,R){return N.eat(\"*\")?(R.tokenize=V(1),R.tokenize(N,R)):!1},indent:function(N,R,le,xe){var F=le&&le.charAt(0);if((N.prevToken==\"}\"||N.prevToken==\")\")&&le==\"\")return N.indented;if(N.prevToken==\"operator\"&&le!=\"}\"&&N.context.type!=\"}\"||N.prevToken==\"variable\"&&F==\".\"||(N.prevToken==\"}\"||N.prevToken==\")\")&&F==\".\")return xe*2+R.indented;if(R.align&&R.type==\"}\")return R.indented+(N.context.type==(le||\"\").charAt(0)?0:xe)}},modeProps:{closeBrackets:{triples:'\"'}}}),Q([\"x-shader/x-vertex\",\"x-shader/x-fragment\"],{name:\"clike\",keywords:s(\"sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout\"),types:s(\"float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4\"),blockKeywords:s(\"for while do if else struct\"),builtin:s(\"radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4\"),atoms:s(\"true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers\"),indentSwitch:!1,hooks:{\"#\":E},modeProps:{fold:[\"brace\",\"include\"]}}),Q(\"text/x-nesc\",{name:\"clike\",keywords:s(g+\" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends\"),types:z,blockKeywords:s(_),atoms:s(\"null true false\"),hooks:{\"#\":E},modeProps:{fold:[\"brace\",\"include\"]}}),Q(\"text/x-objectivec\",{name:\"clike\",keywords:s(g+\" \"+w),types:M,builtin:s(c),blockKeywords:s(_+\" @synthesize @try @catch @finally @autoreleasepool @synchronized\"),defKeywords:s(W+\" @interface @implementation @protocol @class\"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:s(\"YES NO NULL Nil nil true false nullptr\"),isReservedIdentifier:G,hooks:{\"#\":E,\"*\":O},modeProps:{fold:[\"brace\",\"include\"]}}),Q(\"text/x-objectivec++\",{name:\"clike\",keywords:s(g+\" \"+w+\" \"+T),types:M,builtin:s(c),blockKeywords:s(_+\" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch\"),defKeywords:s(W+\" @interface @implementation @protocol @class class namespace\"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:s(\"YES NO NULL Nil nil true false nullptr\"),isReservedIdentifier:G,hooks:{\"#\":E,\"*\":O,u:re,U:re,L:re,R:re,0:J,1:J,2:J,3:J,4:J,5:J,6:J,7:J,8:J,9:J,token:function(N,R,le){if(le==\"variable\"&&N.peek()==\"(\"&&(R.prevToken==\";\"||R.prevToken==null||R.prevToken==\"}\")&&q(N.current()))return\"def\"}},namespaceSeparator:\"::\",modeProps:{fold:[\"brace\",\"include\"]}}),Q(\"text/x-squirrel\",{name:\"clike\",keywords:s(\"base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static\"),types:z,blockKeywords:s(\"case catch class else for foreach if switch try while\"),defKeywords:s(\"function local class\"),typeFirstDefinitions:!0,atoms:s(\"true false null\"),hooks:{\"#\":E},modeProps:{fold:[\"brace\",\"include\"]}});var K=null;function X(N){return function(R,le){for(var xe=!1,F,L=!1;!R.eol();){if(!xe&&R.match('\"')&&(N==\"single\"||R.match('\"\"'))){L=!0;break}if(!xe&&R.match(\"``\")){K=X(N),L=!0;break}F=R.next(),xe=N==\"single\"&&!xe&&F==\"\\\\\"}return L&&(le.tokenize=null),\"string\"}}Q(\"text/x-ceylon\",{name:\"clike\",keywords:s(\"abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while\"),types:function(N){var R=N.charAt(0);return R===R.toUpperCase()&&R!==R.toLowerCase()},blockKeywords:s(\"case catch class dynamic else finally for function if interface module new object switch try while\"),defKeywords:s(\"class dynamic function interface module object package value\"),builtin:s(\"abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable\"),isPunctuationChar:/[\\[\\]{}\\(\\),;\\:\\.`]/,isOperatorChar:/[+\\-*&%=<>!?|^~:\\/]/,numberStart:/[\\d#$]/,number:/^(?:#[\\da-fA-F_]+|\\$[01_]+|[\\d_]+[kMGTPmunpf]?|[\\d_]+\\.[\\d_]+(?:[eE][-+]?\\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:s(\"true false null larger smaller equal empty finished\"),indentSwitch:!1,styleDefs:!1,hooks:{\"@\":function(N){return N.eatWhile(/[\\w\\$_]/),\"meta\"},'\"':function(N,R){return R.tokenize=X(N.match('\"\"')?\"triple\":\"single\"),R.tokenize(N,R)},\"`\":function(N,R){return!K||!N.match(\"`\")?!1:(R.tokenize=K,K=null,R.tokenize(N,R))},\"'\":function(N){return N.eatWhile(/[\\w\\$_\\xa1-\\uffff]/),\"atom\"},token:function(N,R,le){if((le==\"variable\"||le==\"type\")&&R.prevToken==\".\")return\"variable-2\"}},modeProps:{fold:[\"brace\",\"import\"],closeBrackets:{triples:'\"'}}})})});var Cs=Ke((Ts,Ls)=>{(function(o){typeof Ts==\"object\"&&typeof Ls==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"cmake\",function(){var p=/({)?[a-zA-Z0-9_]+(})?/;function v(b,S){for(var s,h,g=!1;!b.eol()&&(s=b.next())!=S.pending;){if(s===\"$\"&&h!=\"\\\\\"&&S.pending=='\"'){g=!0;break}h=s}return g&&b.backUp(1),s==S.pending?S.continueString=!1:S.continueString=!0,\"string\"}function C(b,S){var s=b.next();return s===\"$\"?b.match(p)?\"variable-2\":\"variable\":S.continueString?(b.backUp(1),v(b,S)):b.match(/(\\s+)?\\w+\\(/)||b.match(/(\\s+)?\\w+\\ \\(/)?(b.backUp(1),\"def\"):s==\"#\"?(b.skipToEnd(),\"comment\"):s==\"'\"||s=='\"'?(S.pending=s,v(b,S)):s==\"(\"||s==\")\"?\"bracket\":s.match(/[0-9]/)?\"number\":(b.eatWhile(/[\\w-]/),null)}return{startState:function(){var b={};return b.inDefinition=!1,b.inInclude=!1,b.continueString=!1,b.pending=!1,b},token:function(b,S){return b.eatSpace()?null:C(b,S)}}}),o.defineMIME(\"text/x-cmake\",\"cmake\")})});var gn=Ke((Es,zs)=>{(function(o){typeof Es==\"object\"&&typeof zs==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"css\",function(I,D){var Q=D.inline;D.propertyKeywords||(D=o.resolveMode(\"text/css\"));var j=I.indentUnit,V=D.tokenHooks,y=D.documentTypes||{},K=D.mediaTypes||{},X=D.mediaFeatures||{},N=D.mediaValueKeywords||{},R=D.propertyKeywords||{},le=D.nonStandardPropertyKeywords||{},xe=D.fontProperties||{},F=D.counterDescriptors||{},L=D.colorKeywords||{},de=D.valueKeywords||{},ze=D.allowNested,pe=D.lineComment,Ee=D.supportsAtComponent===!0,ge=I.highlightNonStandardPropertyKeywords!==!1,Oe,qe;function Se(te,fe){return Oe=fe,te}function Be(te,fe){var oe=te.next();if(V[oe]){var Ue=V[oe](te,fe);if(Ue!==!1)return Ue}if(oe==\"@\")return te.eatWhile(/[\\w\\\\\\-]/),Se(\"def\",te.current());if(oe==\"=\"||(oe==\"~\"||oe==\"|\")&&te.eat(\"=\"))return Se(null,\"compare\");if(oe=='\"'||oe==\"'\")return fe.tokenize=Ze(oe),fe.tokenize(te,fe);if(oe==\"#\")return te.eatWhile(/[\\w\\\\\\-]/),Se(\"atom\",\"hash\");if(oe==\"!\")return te.match(/^\\s*\\w*/),Se(\"keyword\",\"important\");if(/\\d/.test(oe)||oe==\".\"&&te.eat(/\\d/))return te.eatWhile(/[\\w.%]/),Se(\"number\",\"unit\");if(oe===\"-\"){if(/[\\d.]/.test(te.peek()))return te.eatWhile(/[\\w.%]/),Se(\"number\",\"unit\");if(te.match(/^-[\\w\\\\\\-]*/))return te.eatWhile(/[\\w\\\\\\-]/),te.match(/^\\s*:/,!1)?Se(\"variable-2\",\"variable-definition\"):Se(\"variable-2\",\"variable\");if(te.match(/^\\w+-/))return Se(\"meta\",\"meta\")}else return/[,+>*\\/]/.test(oe)?Se(null,\"select-op\"):oe==\".\"&&te.match(/^-?[_a-z][_a-z0-9-]*/i)?Se(\"qualifier\",\"qualifier\"):/[:;{}\\[\\]\\(\\)]/.test(oe)?Se(null,oe):te.match(/^[\\w-.]+(?=\\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(te.current())&&(fe.tokenize=ke),Se(\"variable callee\",\"variable\")):/[\\w\\\\\\-]/.test(oe)?(te.eatWhile(/[\\w\\\\\\-]/),Se(\"property\",\"word\")):Se(null,null)}function Ze(te){return function(fe,oe){for(var Ue=!1,we;(we=fe.next())!=null;){if(we==te&&!Ue){te==\")\"&&fe.backUp(1);break}Ue=!Ue&&we==\"\\\\\"}return(we==te||!Ue&&te!=\")\")&&(oe.tokenize=null),Se(\"string\",\"string\")}}function ke(te,fe){return te.next(),te.match(/^\\s*[\\\"\\')]/,!1)?fe.tokenize=null:fe.tokenize=Ze(\")\"),Se(null,\"(\")}function Je(te,fe,oe){this.type=te,this.indent=fe,this.prev=oe}function Re(te,fe,oe,Ue){return te.context=new Je(oe,fe.indentation()+(Ue===!1?0:j),te.context),oe}function Ge(te){return te.context.prev&&(te.context=te.context.prev),te.context.type}function U(te,fe,oe){return He[oe.context.type](te,fe,oe)}function Z(te,fe,oe,Ue){for(var we=Ue||1;we>0;we--)oe.context=oe.context.prev;return U(te,fe,oe)}function ce(te){var fe=te.current().toLowerCase();de.hasOwnProperty(fe)?qe=\"atom\":L.hasOwnProperty(fe)?qe=\"keyword\":qe=\"variable\"}var He={};return He.top=function(te,fe,oe){if(te==\"{\")return Re(oe,fe,\"block\");if(te==\"}\"&&oe.context.prev)return Ge(oe);if(Ee&&/@component/i.test(te))return Re(oe,fe,\"atComponentBlock\");if(/^@(-moz-)?document$/i.test(te))return Re(oe,fe,\"documentTypes\");if(/^@(media|supports|(-moz-)?document|import)$/i.test(te))return Re(oe,fe,\"atBlock\");if(/^@(font-face|counter-style)/i.test(te))return oe.stateArg=te,\"restricted_atBlock_before\";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(te))return\"keyframes\";if(te&&te.charAt(0)==\"@\")return Re(oe,fe,\"at\");if(te==\"hash\")qe=\"builtin\";else if(te==\"word\")qe=\"tag\";else{if(te==\"variable-definition\")return\"maybeprop\";if(te==\"interpolation\")return Re(oe,fe,\"interpolation\");if(te==\":\")return\"pseudo\";if(ze&&te==\"(\")return Re(oe,fe,\"parens\")}return oe.context.type},He.block=function(te,fe,oe){if(te==\"word\"){var Ue=fe.current().toLowerCase();return R.hasOwnProperty(Ue)?(qe=\"property\",\"maybeprop\"):le.hasOwnProperty(Ue)?(qe=ge?\"string-2\":\"property\",\"maybeprop\"):ze?(qe=fe.match(/^\\s*:(?:\\s|$)/,!1)?\"property\":\"tag\",\"block\"):(qe+=\" error\",\"maybeprop\")}else return te==\"meta\"?\"block\":!ze&&(te==\"hash\"||te==\"qualifier\")?(qe=\"error\",\"block\"):He.top(te,fe,oe)},He.maybeprop=function(te,fe,oe){return te==\":\"?Re(oe,fe,\"prop\"):U(te,fe,oe)},He.prop=function(te,fe,oe){if(te==\";\")return Ge(oe);if(te==\"{\"&&ze)return Re(oe,fe,\"propBlock\");if(te==\"}\"||te==\"{\")return Z(te,fe,oe);if(te==\"(\")return Re(oe,fe,\"parens\");if(te==\"hash\"&&!/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(fe.current()))qe+=\" error\";else if(te==\"word\")ce(fe);else if(te==\"interpolation\")return Re(oe,fe,\"interpolation\");return\"prop\"},He.propBlock=function(te,fe,oe){return te==\"}\"?Ge(oe):te==\"word\"?(qe=\"property\",\"maybeprop\"):oe.context.type},He.parens=function(te,fe,oe){return te==\"{\"||te==\"}\"?Z(te,fe,oe):te==\")\"?Ge(oe):te==\"(\"?Re(oe,fe,\"parens\"):te==\"interpolation\"?Re(oe,fe,\"interpolation\"):(te==\"word\"&&ce(fe),\"parens\")},He.pseudo=function(te,fe,oe){return te==\"meta\"?\"pseudo\":te==\"word\"?(qe=\"variable-3\",oe.context.type):U(te,fe,oe)},He.documentTypes=function(te,fe,oe){return te==\"word\"&&y.hasOwnProperty(fe.current())?(qe=\"tag\",oe.context.type):He.atBlock(te,fe,oe)},He.atBlock=function(te,fe,oe){if(te==\"(\")return Re(oe,fe,\"atBlock_parens\");if(te==\"}\"||te==\";\")return Z(te,fe,oe);if(te==\"{\")return Ge(oe)&&Re(oe,fe,ze?\"block\":\"top\");if(te==\"interpolation\")return Re(oe,fe,\"interpolation\");if(te==\"word\"){var Ue=fe.current().toLowerCase();Ue==\"only\"||Ue==\"not\"||Ue==\"and\"||Ue==\"or\"?qe=\"keyword\":K.hasOwnProperty(Ue)?qe=\"attribute\":X.hasOwnProperty(Ue)?qe=\"property\":N.hasOwnProperty(Ue)?qe=\"keyword\":R.hasOwnProperty(Ue)?qe=\"property\":le.hasOwnProperty(Ue)?qe=ge?\"string-2\":\"property\":de.hasOwnProperty(Ue)?qe=\"atom\":L.hasOwnProperty(Ue)?qe=\"keyword\":qe=\"error\"}return oe.context.type},He.atComponentBlock=function(te,fe,oe){return te==\"}\"?Z(te,fe,oe):te==\"{\"?Ge(oe)&&Re(oe,fe,ze?\"block\":\"top\",!1):(te==\"word\"&&(qe=\"error\"),oe.context.type)},He.atBlock_parens=function(te,fe,oe){return te==\")\"?Ge(oe):te==\"{\"||te==\"}\"?Z(te,fe,oe,2):He.atBlock(te,fe,oe)},He.restricted_atBlock_before=function(te,fe,oe){return te==\"{\"?Re(oe,fe,\"restricted_atBlock\"):te==\"word\"&&oe.stateArg==\"@counter-style\"?(qe=\"variable\",\"restricted_atBlock_before\"):U(te,fe,oe)},He.restricted_atBlock=function(te,fe,oe){return te==\"}\"?(oe.stateArg=null,Ge(oe)):te==\"word\"?(oe.stateArg==\"@font-face\"&&!xe.hasOwnProperty(fe.current().toLowerCase())||oe.stateArg==\"@counter-style\"&&!F.hasOwnProperty(fe.current().toLowerCase())?qe=\"error\":qe=\"property\",\"maybeprop\"):\"restricted_atBlock\"},He.keyframes=function(te,fe,oe){return te==\"word\"?(qe=\"variable\",\"keyframes\"):te==\"{\"?Re(oe,fe,\"top\"):U(te,fe,oe)},He.at=function(te,fe,oe){return te==\";\"?Ge(oe):te==\"{\"||te==\"}\"?Z(te,fe,oe):(te==\"word\"?qe=\"tag\":te==\"hash\"&&(qe=\"builtin\"),\"at\")},He.interpolation=function(te,fe,oe){return te==\"}\"?Ge(oe):te==\"{\"||te==\";\"?Z(te,fe,oe):(te==\"word\"?qe=\"variable\":te!=\"variable\"&&te!=\"(\"&&te!=\")\"&&(qe=\"error\"),\"interpolation\")},{startState:function(te){return{tokenize:null,state:Q?\"block\":\"top\",stateArg:null,context:new Je(Q?\"block\":\"top\",te||0,null)}},token:function(te,fe){if(!fe.tokenize&&te.eatSpace())return null;var oe=(fe.tokenize||Be)(te,fe);return oe&&typeof oe==\"object\"&&(Oe=oe[1],oe=oe[0]),qe=oe,Oe!=\"comment\"&&(fe.state=He[fe.state](Oe,te,fe)),qe},indent:function(te,fe){var oe=te.context,Ue=fe&&fe.charAt(0),we=oe.indent;return oe.type==\"prop\"&&(Ue==\"}\"||Ue==\")\")&&(oe=oe.prev),oe.prev&&(Ue==\"}\"&&(oe.type==\"block\"||oe.type==\"top\"||oe.type==\"interpolation\"||oe.type==\"restricted_atBlock\")?(oe=oe.prev,we=oe.indent):(Ue==\")\"&&(oe.type==\"parens\"||oe.type==\"atBlock_parens\")||Ue==\"{\"&&(oe.type==\"at\"||oe.type==\"atBlock\"))&&(we=Math.max(0,oe.indent-j))),we},electricChars:\"}\",blockCommentStart:\"/*\",blockCommentEnd:\"*/\",blockCommentContinue:\" * \",lineComment:pe,fold:\"brace\"}});function p(I){for(var D={},Q=0;Q<I.length;++Q)D[I[Q].toLowerCase()]=!0;return D}var v=[\"domain\",\"regexp\",\"url\",\"url-prefix\"],C=p(v),b=[\"all\",\"aural\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"embossed\"],S=p(b),s=[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"device-width\",\"min-device-width\",\"max-device-width\",\"device-height\",\"min-device-height\",\"max-device-height\",\"aspect-ratio\",\"min-aspect-ratio\",\"max-aspect-ratio\",\"device-aspect-ratio\",\"min-device-aspect-ratio\",\"max-device-aspect-ratio\",\"color\",\"min-color\",\"max-color\",\"color-index\",\"min-color-index\",\"max-color-index\",\"monochrome\",\"min-monochrome\",\"max-monochrome\",\"resolution\",\"min-resolution\",\"max-resolution\",\"scan\",\"grid\",\"orientation\",\"device-pixel-ratio\",\"min-device-pixel-ratio\",\"max-device-pixel-ratio\",\"pointer\",\"any-pointer\",\"hover\",\"any-hover\",\"prefers-color-scheme\",\"dynamic-range\",\"video-dynamic-range\"],h=p(s),g=[\"landscape\",\"portrait\",\"none\",\"coarse\",\"fine\",\"on-demand\",\"hover\",\"interlace\",\"progressive\",\"dark\",\"light\",\"standard\",\"high\"],T=p(g),w=[\"align-content\",\"align-items\",\"align-self\",\"alignment-adjust\",\"alignment-baseline\",\"all\",\"anchor-point\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"appearance\",\"azimuth\",\"backdrop-filter\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-blend-mode\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-position-x\",\"background-position-y\",\"background-repeat\",\"background-size\",\"baseline-shift\",\"binding\",\"bleed\",\"block-size\",\"bookmark-label\",\"bookmark-level\",\"bookmark-state\",\"bookmark-target\",\"border\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"caret-color\",\"clear\",\"clip\",\"color\",\"color-profile\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"contain\",\"content\",\"counter-increment\",\"counter-reset\",\"crop\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"dominant-baseline\",\"drop-initial-after-adjust\",\"drop-initial-after-align\",\"drop-initial-before-adjust\",\"drop-initial-before-align\",\"drop-initial-size\",\"drop-initial-value\",\"elevation\",\"empty-cells\",\"fit\",\"fit-content\",\"fit-position\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"float-offset\",\"flow-from\",\"flow-into\",\"font\",\"font-family\",\"font-feature-settings\",\"font-kerning\",\"font-language-override\",\"font-optical-sizing\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-alternates\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-variation-settings\",\"font-weight\",\"gap\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-gap\",\"grid-column-start\",\"grid-gap\",\"grid-row\",\"grid-row-end\",\"grid-row-gap\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"inline-box-align\",\"inset\",\"inset-block\",\"inset-block-end\",\"inset-block-start\",\"inset-inline\",\"inset-inline-end\",\"inset-inline-start\",\"isolation\",\"justify-content\",\"justify-items\",\"justify-self\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"line-height-step\",\"line-stacking\",\"line-stacking-ruby\",\"line-stacking-shift\",\"line-stacking-strategy\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"marks\",\"marquee-direction\",\"marquee-loop\",\"marquee-play-count\",\"marquee-speed\",\"marquee-style\",\"mask-clip\",\"mask-composite\",\"mask-image\",\"mask-mode\",\"mask-origin\",\"mask-position\",\"mask-repeat\",\"mask-size\",\"mask-type\",\"max-block-size\",\"max-height\",\"max-inline-size\",\"max-width\",\"min-block-size\",\"min-height\",\"min-inline-size\",\"min-width\",\"mix-blend-mode\",\"move-to\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"object-fit\",\"object-position\",\"offset\",\"offset-anchor\",\"offset-distance\",\"offset-path\",\"offset-position\",\"offset-rotate\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-style\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"page\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"page-policy\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pitch\",\"pitch-range\",\"place-content\",\"place-items\",\"place-self\",\"play-during\",\"position\",\"presentation-level\",\"punctuation-trim\",\"quotes\",\"region-break-after\",\"region-break-before\",\"region-break-inside\",\"region-fragment\",\"rendering-intent\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"richness\",\"right\",\"rotate\",\"rotation\",\"rotation-point\",\"row-gap\",\"ruby-align\",\"ruby-overhang\",\"ruby-position\",\"ruby-span\",\"scale\",\"scroll-behavior\",\"scroll-margin\",\"scroll-margin-block\",\"scroll-margin-block-end\",\"scroll-margin-block-start\",\"scroll-margin-bottom\",\"scroll-margin-inline\",\"scroll-margin-inline-end\",\"scroll-margin-inline-start\",\"scroll-margin-left\",\"scroll-margin-right\",\"scroll-margin-top\",\"scroll-padding\",\"scroll-padding-block\",\"scroll-padding-block-end\",\"scroll-padding-block-start\",\"scroll-padding-bottom\",\"scroll-padding-inline\",\"scroll-padding-inline-end\",\"scroll-padding-inline-start\",\"scroll-padding-left\",\"scroll-padding-right\",\"scroll-padding-top\",\"scroll-snap-align\",\"scroll-snap-type\",\"shape-image-threshold\",\"shape-inside\",\"shape-margin\",\"shape-outside\",\"size\",\"speak\",\"speak-as\",\"speak-header\",\"speak-numeral\",\"speak-punctuation\",\"speech-rate\",\"stress\",\"string-set\",\"tab-size\",\"table-layout\",\"target\",\"target-name\",\"target-new\",\"target-position\",\"text-align\",\"text-align-last\",\"text-combine-upright\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-skip\",\"text-decoration-skip-ink\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-height\",\"text-indent\",\"text-justify\",\"text-orientation\",\"text-outline\",\"text-overflow\",\"text-rendering\",\"text-shadow\",\"text-size-adjust\",\"text-space-collapse\",\"text-transform\",\"text-underline-position\",\"text-wrap\",\"top\",\"touch-action\",\"transform\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"translate\",\"unicode-bidi\",\"user-select\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"writing-mode\",\"z-index\",\"clip-path\",\"clip-rule\",\"mask\",\"enable-background\",\"filter\",\"flood-color\",\"flood-opacity\",\"lighting-color\",\"stop-color\",\"stop-opacity\",\"pointer-events\",\"color-interpolation\",\"color-interpolation-filters\",\"color-rendering\",\"fill\",\"fill-opacity\",\"fill-rule\",\"image-rendering\",\"marker\",\"marker-end\",\"marker-mid\",\"marker-start\",\"paint-order\",\"shape-rendering\",\"stroke\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke-width\",\"text-rendering\",\"baseline-shift\",\"dominant-baseline\",\"glyph-orientation-horizontal\",\"glyph-orientation-vertical\",\"text-anchor\",\"writing-mode\"],c=p(w),d=[\"accent-color\",\"aspect-ratio\",\"border-block\",\"border-block-color\",\"border-block-end\",\"border-block-end-color\",\"border-block-end-style\",\"border-block-end-width\",\"border-block-start\",\"border-block-start-color\",\"border-block-start-style\",\"border-block-start-width\",\"border-block-style\",\"border-block-width\",\"border-inline\",\"border-inline-color\",\"border-inline-end\",\"border-inline-end-color\",\"border-inline-end-style\",\"border-inline-end-width\",\"border-inline-start\",\"border-inline-start-color\",\"border-inline-start-style\",\"border-inline-start-width\",\"border-inline-style\",\"border-inline-width\",\"content-visibility\",\"margin-block\",\"margin-block-end\",\"margin-block-start\",\"margin-inline\",\"margin-inline-end\",\"margin-inline-start\",\"overflow-anchor\",\"overscroll-behavior\",\"padding-block\",\"padding-block-end\",\"padding-block-start\",\"padding-inline\",\"padding-inline-end\",\"padding-inline-start\",\"scroll-snap-stop\",\"scrollbar-3d-light-color\",\"scrollbar-arrow-color\",\"scrollbar-base-color\",\"scrollbar-dark-shadow-color\",\"scrollbar-face-color\",\"scrollbar-highlight-color\",\"scrollbar-shadow-color\",\"scrollbar-track-color\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"shape-inside\",\"zoom\"],k=p(d),z=[\"font-display\",\"font-family\",\"src\",\"unicode-range\",\"font-variant\",\"font-feature-settings\",\"font-stretch\",\"font-weight\",\"font-style\"],M=p(z),_=[\"additive-symbols\",\"fallback\",\"negative\",\"pad\",\"prefix\",\"range\",\"speak-as\",\"suffix\",\"symbols\",\"system\"],W=p(_),E=[\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkgrey\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkslategrey\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dimgrey\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightgrey\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightslategrey\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"slategrey\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"],O=p(E),G=[\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"afar\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"amharic\",\"amharic-abegede\",\"antialiased\",\"appworkspace\",\"arabic-indic\",\"armenian\",\"asterisks\",\"attr\",\"auto\",\"auto-flow\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"axis-pan\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"binary\",\"bengali\",\"blink\",\"block\",\"block-axis\",\"blur\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"brightness\",\"bullets\",\"button\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"cambodian\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"cjk-earthly-branch\",\"cjk-heavenly-stem\",\"cjk-ideographic\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"color\",\"color-burn\",\"color-dodge\",\"column\",\"column-reverse\",\"compact\",\"condensed\",\"conic-gradient\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"contrast\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"cubic-bezier\",\"currentcolor\",\"cursive\",\"cyclic\",\"darken\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"dense\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"devanagari\",\"difference\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"drop-shadow\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic\",\"ethiopic-abegede\",\"ethiopic-abegede-am-et\",\"ethiopic-abegede-gez\",\"ethiopic-abegede-ti-er\",\"ethiopic-abegede-ti-et\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-aa-et\",\"ethiopic-halehame-am-et\",\"ethiopic-halehame-gez\",\"ethiopic-halehame-om-et\",\"ethiopic-halehame-sid-et\",\"ethiopic-halehame-so-et\",\"ethiopic-halehame-ti-er\",\"ethiopic-halehame-ti-et\",\"ethiopic-halehame-tig\",\"ethiopic-numeric\",\"ew-resize\",\"exclusion\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fill-box\",\"fixed\",\"flat\",\"flex\",\"flex-end\",\"flex-start\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"georgian\",\"grayscale\",\"graytext\",\"grid\",\"groove\",\"gujarati\",\"gurmukhi\",\"hand\",\"hangul\",\"hangul-consonant\",\"hard-light\",\"hebrew\",\"help\",\"hidden\",\"hide\",\"higher\",\"highlight\",\"highlighttext\",\"hiragana\",\"hiragana-iroha\",\"horizontal\",\"hsl\",\"hsla\",\"hue\",\"hue-rotate\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-grid\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"japanese-formal\",\"japanese-informal\",\"justify\",\"kannada\",\"katakana\",\"katakana-iroha\",\"keep-all\",\"khmer\",\"korean-hangul-formal\",\"korean-hanja-formal\",\"korean-hanja-informal\",\"landscape\",\"lao\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"lighten\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-alpha\",\"lower-armenian\",\"lower-greek\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lower-roman\",\"lowercase\",\"ltr\",\"luminosity\",\"malayalam\",\"manipulation\",\"match\",\"matrix\",\"matrix3d\",\"media-play-button\",\"media-slider\",\"media-sliderthumb\",\"media-volume-slider\",\"media-volume-sliderthumb\",\"medium\",\"menu\",\"menulist\",\"menulist-button\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"mongolian\",\"monospace\",\"move\",\"multiple\",\"multiple_mask_images\",\"multiply\",\"myanmar\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"octal\",\"opacity\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"oriya\",\"oromo\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"persian\",\"perspective\",\"pinch-zoom\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeating-conic-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row\",\"row-resize\",\"row-reverse\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"saturate\",\"saturation\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"screen\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"searchfield\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"self-start\",\"self-end\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"sepia\",\"serif\",\"show\",\"sidama\",\"simp-chinese-formal\",\"simp-chinese-informal\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"soft-light\",\"solid\",\"somali\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"space-around\",\"space-between\",\"space-evenly\",\"spell-out\",\"square\",\"square-button\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"stroke-box\",\"sub\",\"subpixel-antialiased\",\"svg_masks\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"system-ui\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"tamil\",\"telugu\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thai\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"tibetan\",\"tigre\",\"tigrinya-er\",\"tigrinya-er-abegede\",\"tigrinya-et\",\"tigrinya-et-abegede\",\"to\",\"top\",\"trad-chinese-formal\",\"trad-chinese-informal\",\"transform\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"unidirectional-pan\",\"unset\",\"up\",\"upper-alpha\",\"upper-armenian\",\"upper-greek\",\"upper-hexadecimal\",\"upper-latin\",\"upper-norwegian\",\"upper-roman\",\"uppercase\",\"urdu\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"view-box\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"wrap\",\"wrap-reverse\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\"],J=p(G),re=v.concat(b).concat(s).concat(g).concat(w).concat(d).concat(E).concat(G);o.registerHelper(\"hintWords\",\"css\",re);function q(I,D){for(var Q=!1,j;(j=I.next())!=null;){if(Q&&j==\"/\"){D.tokenize=null;break}Q=j==\"*\"}return[\"comment\",\"comment\"]}o.defineMIME(\"text/css\",{documentTypes:C,mediaTypes:S,mediaFeatures:h,mediaValueKeywords:T,propertyKeywords:c,nonStandardPropertyKeywords:k,fontProperties:M,counterDescriptors:W,colorKeywords:O,valueKeywords:J,tokenHooks:{\"/\":function(I,D){return I.eat(\"*\")?(D.tokenize=q,q(I,D)):!1}},name:\"css\"}),o.defineMIME(\"text/x-scss\",{mediaTypes:S,mediaFeatures:h,mediaValueKeywords:T,propertyKeywords:c,nonStandardPropertyKeywords:k,colorKeywords:O,valueKeywords:J,fontProperties:M,allowNested:!0,lineComment:\"//\",tokenHooks:{\"/\":function(I,D){return I.eat(\"/\")?(I.skipToEnd(),[\"comment\",\"comment\"]):I.eat(\"*\")?(D.tokenize=q,q(I,D)):[\"operator\",\"operator\"]},\":\":function(I){return I.match(/^\\s*\\{/,!1)?[null,null]:!1},$:function(I){return I.match(/^[\\w-]+/),I.match(/^\\s*:/,!1)?[\"variable-2\",\"variable-definition\"]:[\"variable-2\",\"variable\"]},\"#\":function(I){return I.eat(\"{\")?[null,\"interpolation\"]:!1}},name:\"css\",helperType:\"scss\"}),o.defineMIME(\"text/x-less\",{mediaTypes:S,mediaFeatures:h,mediaValueKeywords:T,propertyKeywords:c,nonStandardPropertyKeywords:k,colorKeywords:O,valueKeywords:J,fontProperties:M,allowNested:!0,lineComment:\"//\",tokenHooks:{\"/\":function(I,D){return I.eat(\"/\")?(I.skipToEnd(),[\"comment\",\"comment\"]):I.eat(\"*\")?(D.tokenize=q,q(I,D)):[\"operator\",\"operator\"]},\"@\":function(I){return I.eat(\"{\")?[null,\"interpolation\"]:I.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i,!1)?!1:(I.eatWhile(/[\\w\\\\\\-]/),I.match(/^\\s*:/,!1)?[\"variable-2\",\"variable-definition\"]:[\"variable-2\",\"variable\"])},\"&\":function(){return[\"atom\",\"atom\"]}},name:\"css\",helperType:\"less\"}),o.defineMIME(\"text/x-gss\",{documentTypes:C,mediaTypes:S,mediaFeatures:h,propertyKeywords:c,nonStandardPropertyKeywords:k,fontProperties:M,counterDescriptors:W,colorKeywords:O,valueKeywords:J,supportsAtComponent:!0,tokenHooks:{\"/\":function(I,D){return I.eat(\"*\")?(D.tokenize=q,q(I,D)):!1}},name:\"css\",helperType:\"gss\"})})});var Ds=Ke((Ms,As)=>{(function(o){typeof Ms==\"object\"&&typeof As==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"diff\",function(){var p={\"+\":\"positive\",\"-\":\"negative\",\"@\":\"meta\"};return{token:function(v){var C=v.string.search(/[\\t ]+?$/);if(!v.sol()||C===0)return v.skipToEnd(),(\"error \"+(p[v.string.charAt(0)]||\"\")).replace(/ $/,\"\");var b=p[v.peek()]||v.skipToEnd();return C===-1?v.skipToEnd():v.pos=C,b}}}),o.defineMIME(\"text/x-diff\",\"diff\")})});var mn=Ke((qs,Fs)=>{(function(o){typeof qs==\"object\"&&typeof Fs==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";var p={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},v={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};o.defineMode(\"xml\",function(C,b){var S=C.indentUnit,s={},h=b.htmlMode?p:v;for(var g in h)s[g]=h[g];for(var g in b)s[g]=b[g];var T,w;function c(y,K){function X(le){return K.tokenize=le,le(y,K)}var N=y.next();if(N==\"<\")return y.eat(\"!\")?y.eat(\"[\")?y.match(\"CDATA[\")?X(z(\"atom\",\"]]>\")):null:y.match(\"--\")?X(z(\"comment\",\"-->\")):y.match(\"DOCTYPE\",!0,!0)?(y.eatWhile(/[\\w\\._\\-]/),X(M(1))):null:y.eat(\"?\")?(y.eatWhile(/[\\w\\._\\-]/),K.tokenize=z(\"meta\",\"?>\"),\"meta\"):(T=y.eat(\"/\")?\"closeTag\":\"openTag\",K.tokenize=d,\"tag bracket\");if(N==\"&\"){var R;return y.eat(\"#\")?y.eat(\"x\")?R=y.eatWhile(/[a-fA-F\\d]/)&&y.eat(\";\"):R=y.eatWhile(/[\\d]/)&&y.eat(\";\"):R=y.eatWhile(/[\\w\\.\\-:]/)&&y.eat(\";\"),R?\"atom\":\"error\"}else return y.eatWhile(/[^&<]/),null}c.isInText=!0;function d(y,K){var X=y.next();if(X==\">\"||X==\"/\"&&y.eat(\">\"))return K.tokenize=c,T=X==\">\"?\"endTag\":\"selfcloseTag\",\"tag bracket\";if(X==\"=\")return T=\"equals\",null;if(X==\"<\"){K.tokenize=c,K.state=G,K.tagName=K.tagStart=null;var N=K.tokenize(y,K);return N?N+\" tag error\":\"tag error\"}else return/[\\'\\\"]/.test(X)?(K.tokenize=k(X),K.stringStartCol=y.column(),K.tokenize(y,K)):(y.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/),\"word\")}function k(y){var K=function(X,N){for(;!X.eol();)if(X.next()==y){N.tokenize=d;break}return\"string\"};return K.isInAttribute=!0,K}function z(y,K){return function(X,N){for(;!X.eol();){if(X.match(K)){N.tokenize=c;break}X.next()}return y}}function M(y){return function(K,X){for(var N;(N=K.next())!=null;){if(N==\"<\")return X.tokenize=M(y+1),X.tokenize(K,X);if(N==\">\")if(y==1){X.tokenize=c;break}else return X.tokenize=M(y-1),X.tokenize(K,X)}return\"meta\"}}function _(y){return y&&y.toLowerCase()}function W(y,K,X){this.prev=y.context,this.tagName=K||\"\",this.indent=y.indented,this.startOfLine=X,(s.doNotIndent.hasOwnProperty(K)||y.context&&y.context.noIndent)&&(this.noIndent=!0)}function E(y){y.context&&(y.context=y.context.prev)}function O(y,K){for(var X;;){if(!y.context||(X=y.context.tagName,!s.contextGrabbers.hasOwnProperty(_(X))||!s.contextGrabbers[_(X)].hasOwnProperty(_(K))))return;E(y)}}function G(y,K,X){return y==\"openTag\"?(X.tagStart=K.column(),J):y==\"closeTag\"?re:G}function J(y,K,X){return y==\"word\"?(X.tagName=K.current(),w=\"tag\",D):s.allowMissingTagName&&y==\"endTag\"?(w=\"tag bracket\",D(y,K,X)):(w=\"error\",J)}function re(y,K,X){if(y==\"word\"){var N=K.current();return X.context&&X.context.tagName!=N&&s.implicitlyClosed.hasOwnProperty(_(X.context.tagName))&&E(X),X.context&&X.context.tagName==N||s.matchClosing===!1?(w=\"tag\",q):(w=\"tag error\",I)}else return s.allowMissingTagName&&y==\"endTag\"?(w=\"tag bracket\",q(y,K,X)):(w=\"error\",I)}function q(y,K,X){return y!=\"endTag\"?(w=\"error\",q):(E(X),G)}function I(y,K,X){return w=\"error\",q(y,K,X)}function D(y,K,X){if(y==\"word\")return w=\"attribute\",Q;if(y==\"endTag\"||y==\"selfcloseTag\"){var N=X.tagName,R=X.tagStart;return X.tagName=X.tagStart=null,y==\"selfcloseTag\"||s.autoSelfClosers.hasOwnProperty(_(N))?O(X,N):(O(X,N),X.context=new W(X,N,R==X.indented)),G}return w=\"error\",D}function Q(y,K,X){return y==\"equals\"?j:(s.allowMissing||(w=\"error\"),D(y,K,X))}function j(y,K,X){return y==\"string\"?V:y==\"word\"&&s.allowUnquoted?(w=\"string\",D):(w=\"error\",D(y,K,X))}function V(y,K,X){return y==\"string\"?V:D(y,K,X)}return{startState:function(y){var K={tokenize:c,state:G,indented:y||0,tagName:null,tagStart:null,context:null};return y!=null&&(K.baseIndent=y),K},token:function(y,K){if(!K.tagName&&y.sol()&&(K.indented=y.indentation()),y.eatSpace())return null;T=null;var X=K.tokenize(y,K);return(X||T)&&X!=\"comment\"&&(w=null,K.state=K.state(T||X,y,K),w&&(X=w==\"error\"?X+\" error\":w)),X},indent:function(y,K,X){var N=y.context;if(y.tokenize.isInAttribute)return y.tagStart==y.indented?y.stringStartCol+1:y.indented+S;if(N&&N.noIndent)return o.Pass;if(y.tokenize!=d&&y.tokenize!=c)return X?X.match(/^(\\s*)/)[0].length:0;if(y.tagName)return s.multilineTagIndentPastTag!==!1?y.tagStart+y.tagName.length+2:y.tagStart+S*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/<!\\[CDATA\\[/.test(K))return 0;var R=K&&/^<(\\/)?([\\w_:\\.-]*)/.exec(K);if(R&&R[1])for(;N;)if(N.tagName==R[2]){N=N.prev;break}else if(s.implicitlyClosed.hasOwnProperty(_(N.tagName)))N=N.prev;else break;else if(R)for(;N;){var le=s.contextGrabbers[_(N.tagName)];if(le&&le.hasOwnProperty(_(R[2])))N=N.prev;else break}for(;N&&N.prev&&!N.startOfLine;)N=N.prev;return N?N.indent+S:y.baseIndent||0},electricInput:/<\\/[\\s\\w:]+>$/,blockCommentStart:\"<!--\",blockCommentEnd:\"-->\",configuration:s.htmlMode?\"html\":\"xml\",helperType:s.htmlMode?\"html\":\"xml\",skipAttribute:function(y){y.state==j&&(y.state=D)},xmlCurrentTag:function(y){return y.tagName?{name:y.tagName,close:y.type==\"closeTag\"}:null},xmlCurrentContext:function(y){for(var K=[],X=y.context;X;X=X.prev)K.push(X.tagName);return K.reverse()}}}),o.defineMIME(\"text/xml\",\"xml\"),o.defineMIME(\"application/xml\",\"xml\"),o.mimeModes.hasOwnProperty(\"text/html\")||o.defineMIME(\"text/html\",{name:\"xml\",htmlMode:!0})})});var vn=Ke((Is,Ns)=>{(function(o){typeof Is==\"object\"&&typeof Ns==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"javascript\",function(p,v){var C=p.indentUnit,b=v.statementIndent,S=v.jsonld,s=v.json||S,h=v.trackScope!==!1,g=v.typescript,T=v.wordCharacters||/[\\w$\\xa1-\\uffff]/,w=(function(){function x(pt){return{type:pt,style:\"keyword\"}}var P=x(\"keyword a\"),ae=x(\"keyword b\"),he=x(\"keyword c\"),ne=x(\"keyword d\"),ye=x(\"operator\"),Xe={type:\"atom\",style:\"atom\"};return{if:x(\"if\"),while:P,with:P,else:ae,do:ae,try:ae,finally:ae,return:ne,break:ne,continue:ne,new:x(\"new\"),delete:he,void:he,throw:he,debugger:x(\"debugger\"),var:x(\"var\"),const:x(\"var\"),let:x(\"var\"),function:x(\"function\"),catch:x(\"catch\"),for:x(\"for\"),switch:x(\"switch\"),case:x(\"case\"),default:x(\"default\"),in:ye,typeof:ye,instanceof:ye,true:Xe,false:Xe,null:Xe,undefined:Xe,NaN:Xe,Infinity:Xe,this:x(\"this\"),class:x(\"class\"),super:x(\"atom\"),yield:he,export:x(\"export\"),import:x(\"import\"),extends:he,await:he}})(),c=/[+\\-*&%=<>!?|~^@]/,d=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;function k(x){for(var P=!1,ae,he=!1;(ae=x.next())!=null;){if(!P){if(ae==\"/\"&&!he)return;ae==\"[\"?he=!0:he&&ae==\"]\"&&(he=!1)}P=!P&&ae==\"\\\\\"}}var z,M;function _(x,P,ae){return z=x,M=ae,P}function W(x,P){var ae=x.next();if(ae=='\"'||ae==\"'\")return P.tokenize=E(ae),P.tokenize(x,P);if(ae==\".\"&&x.match(/^\\d[\\d_]*(?:[eE][+\\-]?[\\d_]+)?/))return _(\"number\",\"number\");if(ae==\".\"&&x.match(\"..\"))return _(\"spread\",\"meta\");if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(ae))return _(ae);if(ae==\"=\"&&x.eat(\">\"))return _(\"=>\",\"operator\");if(ae==\"0\"&&x.match(/^(?:x[\\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return _(\"number\",\"number\");if(/\\d/.test(ae))return x.match(/^[\\d_]*(?:n|(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)?/),_(\"number\",\"number\");if(ae==\"/\")return x.eat(\"*\")?(P.tokenize=O,O(x,P)):x.eat(\"/\")?(x.skipToEnd(),_(\"comment\",\"comment\")):Bt(x,P,1)?(k(x),x.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/),_(\"regexp\",\"string-2\")):(x.eat(\"=\"),_(\"operator\",\"operator\",x.current()));if(ae==\"`\")return P.tokenize=G,G(x,P);if(ae==\"#\"&&x.peek()==\"!\")return x.skipToEnd(),_(\"meta\",\"meta\");if(ae==\"#\"&&x.eatWhile(T))return _(\"variable\",\"property\");if(ae==\"<\"&&x.match(\"!--\")||ae==\"-\"&&x.match(\"->\")&&!/\\S/.test(x.string.slice(0,x.start)))return x.skipToEnd(),_(\"comment\",\"comment\");if(c.test(ae))return(ae!=\">\"||!P.lexical||P.lexical.type!=\">\")&&(x.eat(\"=\")?(ae==\"!\"||ae==\"=\")&&x.eat(\"=\"):/[<>*+\\-|&?]/.test(ae)&&(x.eat(ae),ae==\">\"&&x.eat(ae))),ae==\"?\"&&x.eat(\".\")?_(\".\"):_(\"operator\",\"operator\",x.current());if(T.test(ae)){x.eatWhile(T);var he=x.current();if(P.lastType!=\".\"){if(w.propertyIsEnumerable(he)){var ne=w[he];return _(ne.type,ne.style,he)}if(he==\"async\"&&x.match(/^(\\s|\\/\\*([^*]|\\*(?!\\/))*?\\*\\/)*[\\[\\(\\w]/,!1))return _(\"async\",\"keyword\",he)}return _(\"variable\",\"variable\",he)}}function E(x){return function(P,ae){var he=!1,ne;if(S&&P.peek()==\"@\"&&P.match(d))return ae.tokenize=W,_(\"jsonld-keyword\",\"meta\");for(;(ne=P.next())!=null&&!(ne==x&&!he);)he=!he&&ne==\"\\\\\";return he||(ae.tokenize=W),_(\"string\",\"string\")}}function O(x,P){for(var ae=!1,he;he=x.next();){if(he==\"/\"&&ae){P.tokenize=W;break}ae=he==\"*\"}return _(\"comment\",\"comment\")}function G(x,P){for(var ae=!1,he;(he=x.next())!=null;){if(!ae&&(he==\"`\"||he==\"$\"&&x.eat(\"{\"))){P.tokenize=W;break}ae=!ae&&he==\"\\\\\"}return _(\"quasi\",\"string-2\",x.current())}var J=\"([{}])\";function re(x,P){P.fatArrowAt&&(P.fatArrowAt=null);var ae=x.string.indexOf(\"=>\",x.start);if(!(ae<0)){if(g){var he=/:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(x.string.slice(x.start,ae));he&&(ae=he.index)}for(var ne=0,ye=!1,Xe=ae-1;Xe>=0;--Xe){var pt=x.string.charAt(Xe),Et=J.indexOf(pt);if(Et>=0&&Et<3){if(!ne){++Xe;break}if(--ne==0){pt==\"(\"&&(ye=!0);break}}else if(Et>=3&&Et<6)++ne;else if(T.test(pt))ye=!0;else if(/[\"'\\/`]/.test(pt))for(;;--Xe){if(Xe==0)return;var Zr=x.string.charAt(Xe-1);if(Zr==pt&&x.string.charAt(Xe-2)!=\"\\\\\"){Xe--;break}}else if(ye&&!ne){++Xe;break}}ye&&!ne&&(P.fatArrowAt=Xe)}}var q={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,\"jsonld-keyword\":!0};function I(x,P,ae,he,ne,ye){this.indented=x,this.column=P,this.type=ae,this.prev=ne,this.info=ye,he!=null&&(this.align=he)}function D(x,P){if(!h)return!1;for(var ae=x.localVars;ae;ae=ae.next)if(ae.name==P)return!0;for(var he=x.context;he;he=he.prev)for(var ae=he.vars;ae;ae=ae.next)if(ae.name==P)return!0}function Q(x,P,ae,he,ne){var ye=x.cc;for(j.state=x,j.stream=ne,j.marked=null,j.cc=ye,j.style=P,x.lexical.hasOwnProperty(\"align\")||(x.lexical.align=!0);;){var Xe=ye.length?ye.pop():s?Se:Oe;if(Xe(ae,he)){for(;ye.length&&ye[ye.length-1].lex;)ye.pop()();return j.marked?j.marked:ae==\"variable\"&&D(x,he)?\"variable-2\":P}}}var j={state:null,column:null,marked:null,cc:null};function V(){for(var x=arguments.length-1;x>=0;x--)j.cc.push(arguments[x])}function y(){return V.apply(null,arguments),!0}function K(x,P){for(var ae=P;ae;ae=ae.next)if(ae.name==x)return!0;return!1}function X(x){var P=j.state;if(j.marked=\"def\",!!h){if(P.context){if(P.lexical.info==\"var\"&&P.context&&P.context.block){var ae=N(x,P.context);if(ae!=null){P.context=ae;return}}else if(!K(x,P.localVars)){P.localVars=new xe(x,P.localVars);return}}v.globalVars&&!K(x,P.globalVars)&&(P.globalVars=new xe(x,P.globalVars))}}function N(x,P){if(P)if(P.block){var ae=N(x,P.prev);return ae?ae==P.prev?P:new le(ae,P.vars,!0):null}else return K(x,P.vars)?P:new le(P.prev,new xe(x,P.vars),!1);else return null}function R(x){return x==\"public\"||x==\"private\"||x==\"protected\"||x==\"abstract\"||x==\"readonly\"}function le(x,P,ae){this.prev=x,this.vars=P,this.block=ae}function xe(x,P){this.name=x,this.next=P}var F=new xe(\"this\",new xe(\"arguments\",null));function L(){j.state.context=new le(j.state.context,j.state.localVars,!1),j.state.localVars=F}function de(){j.state.context=new le(j.state.context,j.state.localVars,!0),j.state.localVars=null}L.lex=de.lex=!0;function ze(){j.state.localVars=j.state.context.vars,j.state.context=j.state.context.prev}ze.lex=!0;function pe(x,P){var ae=function(){var he=j.state,ne=he.indented;if(he.lexical.type==\"stat\")ne=he.lexical.indented;else for(var ye=he.lexical;ye&&ye.type==\")\"&&ye.align;ye=ye.prev)ne=ye.indented;he.lexical=new I(ne,j.stream.column(),x,null,he.lexical,P)};return ae.lex=!0,ae}function Ee(){var x=j.state;x.lexical.prev&&(x.lexical.type==\")\"&&(x.indented=x.lexical.indented),x.lexical=x.lexical.prev)}Ee.lex=!0;function ge(x){function P(ae){return ae==x?y():x==\";\"||ae==\"}\"||ae==\")\"||ae==\"]\"?V():y(P)}return P}function Oe(x,P){return x==\"var\"?y(pe(\"vardef\",P),Rr,ge(\";\"),Ee):x==\"keyword a\"?y(pe(\"form\"),Ze,Oe,Ee):x==\"keyword b\"?y(pe(\"form\"),Oe,Ee):x==\"keyword d\"?j.stream.match(/^\\s*$/,!1)?y():y(pe(\"stat\"),Je,ge(\";\"),Ee):x==\"debugger\"?y(ge(\";\")):x==\"{\"?y(pe(\"}\"),de,De,Ee,ze):x==\";\"?y():x==\"if\"?(j.state.lexical.info==\"else\"&&j.state.cc[j.state.cc.length-1]==Ee&&j.state.cc.pop()(),y(pe(\"form\"),Ze,Oe,Ee,Hr)):x==\"function\"?y(Ht):x==\"for\"?y(pe(\"form\"),de,ei,Oe,ze,Ee):x==\"class\"||g&&P==\"interface\"?(j.marked=\"keyword\",y(pe(\"form\",x==\"class\"?x:P),Wr,Ee)):x==\"variable\"?g&&P==\"declare\"?(j.marked=\"keyword\",y(Oe)):g&&(P==\"module\"||P==\"enum\"||P==\"type\")&&j.stream.match(/^\\s*\\w/,!1)?(j.marked=\"keyword\",P==\"enum\"?y(Ae):P==\"type\"?y(ti,ge(\"operator\"),Pe,ge(\";\")):y(pe(\"form\"),Ct,ge(\"{\"),pe(\"}\"),De,Ee,Ee)):g&&P==\"namespace\"?(j.marked=\"keyword\",y(pe(\"form\"),Se,Oe,Ee)):g&&P==\"abstract\"?(j.marked=\"keyword\",y(Oe)):y(pe(\"stat\"),Ue):x==\"switch\"?y(pe(\"form\"),Ze,ge(\"{\"),pe(\"}\",\"switch\"),de,De,Ee,Ee,ze):x==\"case\"?y(Se,ge(\":\")):x==\"default\"?y(ge(\":\")):x==\"catch\"?y(pe(\"form\"),L,qe,Oe,Ee,ze):x==\"export\"?y(pe(\"stat\"),Ur,Ee):x==\"import\"?y(pe(\"stat\"),gr,Ee):x==\"async\"?y(Oe):P==\"@\"?y(Se,Oe):V(pe(\"stat\"),Se,ge(\";\"),Ee)}function qe(x){if(x==\"(\")return y($t,ge(\")\"))}function Se(x,P){return ke(x,P,!1)}function Be(x,P){return ke(x,P,!0)}function Ze(x){return x!=\"(\"?V():y(pe(\")\"),Je,ge(\")\"),Ee)}function ke(x,P,ae){if(j.state.fatArrowAt==j.stream.start){var he=ae?He:ce;if(x==\"(\")return y(L,pe(\")\"),H($t,\")\"),Ee,ge(\"=>\"),he,ze);if(x==\"variable\")return V(L,Ct,ge(\"=>\"),he,ze)}var ne=ae?Ge:Re;return q.hasOwnProperty(x)?y(ne):x==\"function\"?y(Ht,ne):x==\"class\"||g&&P==\"interface\"?(j.marked=\"keyword\",y(pe(\"form\"),to,Ee)):x==\"keyword c\"||x==\"async\"?y(ae?Be:Se):x==\"(\"?y(pe(\")\"),Je,ge(\")\"),Ee,ne):x==\"operator\"||x==\"spread\"?y(ae?Be:Se):x==\"[\"?y(pe(\"]\"),at,Ee,ne):x==\"{\"?se(Me,\"}\",null,ne):x==\"quasi\"?V(U,ne):x==\"new\"?y(te(ae)):y()}function Je(x){return x.match(/[;\\}\\)\\],]/)?V():V(Se)}function Re(x,P){return x==\",\"?y(Je):Ge(x,P,!1)}function Ge(x,P,ae){var he=ae==!1?Re:Ge,ne=ae==!1?Se:Be;if(x==\"=>\")return y(L,ae?He:ce,ze);if(x==\"operator\")return/\\+\\+|--/.test(P)||g&&P==\"!\"?y(he):g&&P==\"<\"&&j.stream.match(/^([^<>]|<[^<>]*>)*>\\s*\\(/,!1)?y(pe(\">\"),H(Pe,\">\"),Ee,he):P==\"?\"?y(Se,ge(\":\"),ne):y(ne);if(x==\"quasi\")return V(U,he);if(x!=\";\"){if(x==\"(\")return se(Be,\")\",\"call\",he);if(x==\".\")return y(we,he);if(x==\"[\")return y(pe(\"]\"),Je,ge(\"]\"),Ee,he);if(g&&P==\"as\")return j.marked=\"keyword\",y(Pe,he);if(x==\"regexp\")return j.state.lastType=j.marked=\"operator\",j.stream.backUp(j.stream.pos-j.stream.start-1),y(ne)}}function U(x,P){return x!=\"quasi\"?V():P.slice(P.length-2)!=\"${\"?y(U):y(Je,Z)}function Z(x){if(x==\"}\")return j.marked=\"string-2\",j.state.tokenize=G,y(U)}function ce(x){return re(j.stream,j.state),V(x==\"{\"?Oe:Se)}function He(x){return re(j.stream,j.state),V(x==\"{\"?Oe:Be)}function te(x){return function(P){return P==\".\"?y(x?oe:fe):P==\"variable\"&&g?y(It,x?Ge:Re):V(x?Be:Se)}}function fe(x,P){if(P==\"target\")return j.marked=\"keyword\",y(Re)}function oe(x,P){if(P==\"target\")return j.marked=\"keyword\",y(Ge)}function Ue(x){return x==\":\"?y(Ee,Oe):V(Re,ge(\";\"),Ee)}function we(x){if(x==\"variable\")return j.marked=\"property\",y()}function Me(x,P){if(x==\"async\")return j.marked=\"property\",y(Me);if(x==\"variable\"||j.style==\"keyword\"){if(j.marked=\"property\",P==\"get\"||P==\"set\")return y(Le);var ae;return g&&j.state.fatArrowAt==j.stream.start&&(ae=j.stream.match(/^\\s*:\\s*/,!1))&&(j.state.fatArrowAt=j.stream.pos+ae[0].length),y($)}else{if(x==\"number\"||x==\"string\")return j.marked=S?\"property\":j.style+\" property\",y($);if(x==\"jsonld-keyword\")return y($);if(g&&R(P))return j.marked=\"keyword\",y(Me);if(x==\"[\")return y(Se,nt,ge(\"]\"),$);if(x==\"spread\")return y(Be,$);if(P==\"*\")return j.marked=\"keyword\",y(Me);if(x==\":\")return V($)}}function Le(x){return x!=\"variable\"?V($):(j.marked=\"property\",y(Ht))}function $(x){if(x==\":\")return y(Be);if(x==\"(\")return V(Ht)}function H(x,P,ae){function he(ne,ye){if(ae?ae.indexOf(ne)>-1:ne==\",\"){var Xe=j.state.lexical;return Xe.info==\"call\"&&(Xe.pos=(Xe.pos||0)+1),y(function(pt,Et){return pt==P||Et==P?V():V(x)},he)}return ne==P||ye==P?y():ae&&ae.indexOf(\";\")>-1?V(x):y(ge(P))}return function(ne,ye){return ne==P||ye==P?y():V(x,he)}}function se(x,P,ae){for(var he=3;he<arguments.length;he++)j.cc.push(arguments[he]);return y(pe(P,ae),H(x,P),Ee)}function De(x){return x==\"}\"?y():V(Oe,De)}function nt(x,P){if(g){if(x==\":\")return y(Pe);if(P==\"?\")return y(nt)}}function dt(x,P){if(g&&(x==\":\"||P==\"in\"))return y(Pe)}function Pt(x){if(g&&x==\":\")return j.stream.match(/^\\s*\\w+\\s+is\\b/,!1)?y(Se,Ft,Pe):y(Pe)}function Ft(x,P){if(P==\"is\")return j.marked=\"keyword\",y()}function Pe(x,P){if(P==\"keyof\"||P==\"typeof\"||P==\"infer\"||P==\"readonly\")return j.marked=\"keyword\",y(P==\"typeof\"?Be:Pe);if(x==\"variable\"||P==\"void\")return j.marked=\"type\",y(Rt);if(P==\"|\"||P==\"&\")return y(Pe);if(x==\"string\"||x==\"number\"||x==\"atom\")return y(Rt);if(x==\"[\")return y(pe(\"]\"),H(Pe,\"]\",\",\"),Ee,Rt);if(x==\"{\")return y(pe(\"}\"),Ie,Ee,Rt);if(x==\"(\")return y(H(ot,\")\"),xt,Rt);if(x==\"<\")return y(H(Pe,\">\"),Pe);if(x==\"quasi\")return V(_t,Rt)}function xt(x){if(x==\"=>\")return y(Pe)}function Ie(x){return x.match(/[\\}\\)\\]]/)?y():x==\",\"||x==\";\"?y(Ie):V(nr,Ie)}function nr(x,P){if(x==\"variable\"||j.style==\"keyword\")return j.marked=\"property\",y(nr);if(P==\"?\"||x==\"number\"||x==\"string\")return y(nr);if(x==\":\")return y(Pe);if(x==\"[\")return y(ge(\"variable\"),dt,ge(\"]\"),nr);if(x==\"(\")return V(hr,nr);if(!x.match(/[;\\}\\)\\],]/))return y()}function _t(x,P){return x!=\"quasi\"?V():P.slice(P.length-2)!=\"${\"?y(_t):y(Pe,it)}function it(x){if(x==\"}\")return j.marked=\"string-2\",j.state.tokenize=G,y(_t)}function ot(x,P){return x==\"variable\"&&j.stream.match(/^\\s*[?:]/,!1)||P==\"?\"?y(ot):x==\":\"?y(Pe):x==\"spread\"?y(ot):V(Pe)}function Rt(x,P){if(P==\"<\")return y(pe(\">\"),H(Pe,\">\"),Ee,Rt);if(P==\"|\"||x==\".\"||P==\"&\")return y(Pe);if(x==\"[\")return y(Pe,ge(\"]\"),Rt);if(P==\"extends\"||P==\"implements\")return j.marked=\"keyword\",y(Pe);if(P==\"?\")return y(Pe,ge(\":\"),Pe)}function It(x,P){if(P==\"<\")return y(pe(\">\"),H(Pe,\">\"),Ee,Rt)}function Wt(){return V(Pe,kt)}function kt(x,P){if(P==\"=\")return y(Pe)}function Rr(x,P){return P==\"enum\"?(j.marked=\"keyword\",y(Ae)):V(Ct,nt,Ut,eo)}function Ct(x,P){if(g&&R(P))return j.marked=\"keyword\",y(Ct);if(x==\"variable\")return X(P),y();if(x==\"spread\")return y(Ct);if(x==\"[\")return se(yn,\"]\");if(x==\"{\")return se(dr,\"}\")}function dr(x,P){return x==\"variable\"&&!j.stream.match(/^\\s*:/,!1)?(X(P),y(Ut)):(x==\"variable\"&&(j.marked=\"property\"),x==\"spread\"?y(Ct):x==\"}\"?V():x==\"[\"?y(Se,ge(\"]\"),ge(\":\"),dr):y(ge(\":\"),Ct,Ut))}function yn(){return V(Ct,Ut)}function Ut(x,P){if(P==\"=\")return y(Be)}function eo(x){if(x==\",\")return y(Rr)}function Hr(x,P){if(x==\"keyword b\"&&P==\"else\")return y(pe(\"form\",\"else\"),Oe,Ee)}function ei(x,P){if(P==\"await\")return y(ei);if(x==\"(\")return y(pe(\")\"),xn,Ee)}function xn(x){return x==\"var\"?y(Rr,pr):x==\"variable\"?y(pr):V(pr)}function pr(x,P){return x==\")\"?y():x==\";\"?y(pr):P==\"in\"||P==\"of\"?(j.marked=\"keyword\",y(Se,pr)):V(Se,pr)}function Ht(x,P){if(P==\"*\")return j.marked=\"keyword\",y(Ht);if(x==\"variable\")return X(P),y(Ht);if(x==\"(\")return y(L,pe(\")\"),H($t,\")\"),Ee,Pt,Oe,ze);if(g&&P==\"<\")return y(pe(\">\"),H(Wt,\">\"),Ee,Ht)}function hr(x,P){if(P==\"*\")return j.marked=\"keyword\",y(hr);if(x==\"variable\")return X(P),y(hr);if(x==\"(\")return y(L,pe(\")\"),H($t,\")\"),Ee,Pt,ze);if(g&&P==\"<\")return y(pe(\">\"),H(Wt,\">\"),Ee,hr)}function ti(x,P){if(x==\"keyword\"||x==\"variable\")return j.marked=\"type\",y(ti);if(P==\"<\")return y(pe(\">\"),H(Wt,\">\"),Ee)}function $t(x,P){return P==\"@\"&&y(Se,$t),x==\"spread\"?y($t):g&&R(P)?(j.marked=\"keyword\",y($t)):g&&x==\"this\"?y(nt,Ut):V(Ct,nt,Ut)}function to(x,P){return x==\"variable\"?Wr(x,P):Kt(x,P)}function Wr(x,P){if(x==\"variable\")return X(P),y(Kt)}function Kt(x,P){if(P==\"<\")return y(pe(\">\"),H(Wt,\">\"),Ee,Kt);if(P==\"extends\"||P==\"implements\"||g&&x==\",\")return P==\"implements\"&&(j.marked=\"keyword\"),y(g?Pe:Se,Kt);if(x==\"{\")return y(pe(\"}\"),Gt,Ee)}function Gt(x,P){if(x==\"async\"||x==\"variable\"&&(P==\"static\"||P==\"get\"||P==\"set\"||g&&R(P))&&j.stream.match(/^\\s+#?[\\w$\\xa1-\\uffff]/,!1))return j.marked=\"keyword\",y(Gt);if(x==\"variable\"||j.style==\"keyword\")return j.marked=\"property\",y(Cr,Gt);if(x==\"number\"||x==\"string\")return y(Cr,Gt);if(x==\"[\")return y(Se,nt,ge(\"]\"),Cr,Gt);if(P==\"*\")return j.marked=\"keyword\",y(Gt);if(g&&x==\"(\")return V(hr,Gt);if(x==\";\"||x==\",\")return y(Gt);if(x==\"}\")return y();if(P==\"@\")return y(Se,Gt)}function Cr(x,P){if(P==\"!\"||P==\"?\")return y(Cr);if(x==\":\")return y(Pe,Ut);if(P==\"=\")return y(Be);var ae=j.state.lexical.prev,he=ae&&ae.info==\"interface\";return V(he?hr:Ht)}function Ur(x,P){return P==\"*\"?(j.marked=\"keyword\",y(Gr,ge(\";\"))):P==\"default\"?(j.marked=\"keyword\",y(Se,ge(\";\"))):x==\"{\"?y(H($r,\"}\"),Gr,ge(\";\")):V(Oe)}function $r(x,P){if(P==\"as\")return j.marked=\"keyword\",y(ge(\"variable\"));if(x==\"variable\")return V(Be,$r)}function gr(x){return x==\"string\"?y():x==\"(\"?V(Se):x==\".\"?V(Re):V(Kr,Vt,Gr)}function Kr(x,P){return x==\"{\"?se(Kr,\"}\"):(x==\"variable\"&&X(P),P==\"*\"&&(j.marked=\"keyword\"),y(_n))}function Vt(x){if(x==\",\")return y(Kr,Vt)}function _n(x,P){if(P==\"as\")return j.marked=\"keyword\",y(Kr)}function Gr(x,P){if(P==\"from\")return j.marked=\"keyword\",y(Se)}function at(x){return x==\"]\"?y():V(H(Be,\"]\"))}function Ae(){return V(pe(\"form\"),Ct,ge(\"{\"),pe(\"}\"),H(ir,\"}\"),Ee,Ee)}function ir(){return V(Ct,Ut)}function kn(x,P){return x.lastType==\"operator\"||x.lastType==\",\"||c.test(P.charAt(0))||/[,.]/.test(P.charAt(0))}function Bt(x,P,ae){return P.tokenize==W&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(P.lastType)||P.lastType==\"quasi\"&&/\\{\\s*$/.test(x.string.slice(0,x.pos-(ae||0)))}return{startState:function(x){var P={tokenize:W,lastType:\"sof\",cc:[],lexical:new I((x||0)-C,0,\"block\",!1),localVars:v.localVars,context:v.localVars&&new le(null,null,!1),indented:x||0};return v.globalVars&&typeof v.globalVars==\"object\"&&(P.globalVars=v.globalVars),P},token:function(x,P){if(x.sol()&&(P.lexical.hasOwnProperty(\"align\")||(P.lexical.align=!1),P.indented=x.indentation(),re(x,P)),P.tokenize!=O&&x.eatSpace())return null;var ae=P.tokenize(x,P);return z==\"comment\"?ae:(P.lastType=z==\"operator\"&&(M==\"++\"||M==\"--\")?\"incdec\":z,Q(P,ae,z,M,x))},indent:function(x,P){if(x.tokenize==O||x.tokenize==G)return o.Pass;if(x.tokenize!=W)return 0;var ae=P&&P.charAt(0),he=x.lexical,ne;if(!/^\\s*else\\b/.test(P))for(var ye=x.cc.length-1;ye>=0;--ye){var Xe=x.cc[ye];if(Xe==Ee)he=he.prev;else if(Xe!=Hr&&Xe!=ze)break}for(;(he.type==\"stat\"||he.type==\"form\")&&(ae==\"}\"||(ne=x.cc[x.cc.length-1])&&(ne==Re||ne==Ge)&&!/^[,\\.=+\\-*:?[\\(]/.test(P));)he=he.prev;b&&he.type==\")\"&&he.prev.type==\"stat\"&&(he=he.prev);var pt=he.type,Et=ae==pt;return pt==\"vardef\"?he.indented+(x.lastType==\"operator\"||x.lastType==\",\"?he.info.length+1:0):pt==\"form\"&&ae==\"{\"?he.indented:pt==\"form\"?he.indented+C:pt==\"stat\"?he.indented+(kn(x,P)?b||C:0):he.info==\"switch\"&&!Et&&v.doubleIndentSwitch!=!1?he.indented+(/^(?:case|default)\\b/.test(P)?C:2*C):he.align?he.column+(Et?0:1):he.indented+(Et?0:C)},electricInput:/^\\s*(?:case .*?:|default:|\\{|\\})$/,blockCommentStart:s?null:\"/*\",blockCommentEnd:s?null:\"*/\",blockCommentContinue:s?null:\" * \",lineComment:s?null:\"//\",fold:\"brace\",closeBrackets:\"()[]{}''\\\"\\\"``\",helperType:s?\"json\":\"javascript\",jsonldMode:S,jsonMode:s,expressionAllowed:Bt,skipExpression:function(x){Q(x,\"atom\",\"atom\",\"true\",new o.StringStream(\"\",2,null))}}}),o.registerHelper(\"wordChars\",\"javascript\",/[\\w$]/),o.defineMIME(\"text/javascript\",\"javascript\"),o.defineMIME(\"text/ecmascript\",\"javascript\"),o.defineMIME(\"application/javascript\",\"javascript\"),o.defineMIME(\"application/x-javascript\",\"javascript\"),o.defineMIME(\"application/ecmascript\",\"javascript\"),o.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),o.defineMIME(\"application/x-json\",{name:\"javascript\",json:!0}),o.defineMIME(\"application/manifest+json\",{name:\"javascript\",json:!0}),o.defineMIME(\"application/ld+json\",{name:\"javascript\",jsonld:!0}),o.defineMIME(\"text/typescript\",{name:\"javascript\",typescript:!0}),o.defineMIME(\"application/typescript\",{name:\"javascript\",typescript:!0})})});var Qn=Ke((Os,Ps)=>{(function(o){typeof Os==\"object\"&&typeof Ps==\"object\"?o(We(),mn(),vn(),gn()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../xml/xml\",\"../javascript/javascript\",\"../css/css\"],o):o(CodeMirror)})(function(o){\"use strict\";var p={script:[[\"lang\",/(javascript|babel)/i,\"javascript\"],[\"type\",/^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,\"javascript\"],[\"type\",/./,\"text/plain\"],[null,null,\"javascript\"]],style:[[\"lang\",/^css$/i,\"css\"],[\"type\",/^(text\\/)?(x-)?(stylesheet|css)$/i,\"css\"],[\"type\",/./,\"text/plain\"],[null,null,\"css\"]]};function v(T,w,c){var d=T.current(),k=d.search(w);return k>-1?T.backUp(d.length-k):d.match(/<\\/?$/)&&(T.backUp(d.length),T.match(w,!1)||T.match(d)),c}var C={};function b(T){var w=C[T];return w||(C[T]=new RegExp(\"\\\\s+\"+T+`\\\\s*=\\\\s*('|\")?([^'\"]+)('|\")?\\\\s*`))}function S(T,w){var c=T.match(b(w));return c?/^\\s*(.*?)\\s*$/.exec(c[2])[1]:\"\"}function s(T,w){return new RegExp((w?\"^\":\"\")+\"</\\\\s*\"+T+\"\\\\s*>\",\"i\")}function h(T,w){for(var c in T)for(var d=w[c]||(w[c]=[]),k=T[c],z=k.length-1;z>=0;z--)d.unshift(k[z])}function g(T,w){for(var c=0;c<T.length;c++){var d=T[c];if(!d[0]||d[1].test(S(w,d[0])))return d[2]}}o.defineMode(\"htmlmixed\",function(T,w){var c=o.getMode(T,{name:\"xml\",htmlMode:!0,multilineTagIndentFactor:w.multilineTagIndentFactor,multilineTagIndentPastTag:w.multilineTagIndentPastTag,allowMissingTagName:w.allowMissingTagName}),d={},k=w&&w.tags,z=w&&w.scriptTypes;if(h(p,d),k&&h(k,d),z)for(var M=z.length-1;M>=0;M--)d.script.unshift([\"type\",z[M].matches,z[M].mode]);function _(W,E){var O=c.token(W,E.htmlState),G=/\\btag\\b/.test(O),J;if(G&&!/[<>\\s\\/]/.test(W.current())&&(J=E.htmlState.tagName&&E.htmlState.tagName.toLowerCase())&&d.hasOwnProperty(J))E.inTag=J+\" \";else if(E.inTag&&G&&/>$/.test(W.current())){var re=/^([\\S]+) (.*)/.exec(E.inTag);E.inTag=null;var q=W.current()==\">\"&&g(d[re[1]],re[2]),I=o.getMode(T,q),D=s(re[1],!0),Q=s(re[1],!1);E.token=function(j,V){return j.match(D,!1)?(V.token=_,V.localState=V.localMode=null,null):v(j,Q,V.localMode.token(j,V.localState))},E.localMode=I,E.localState=o.startState(I,c.indent(E.htmlState,\"\",\"\"))}else E.inTag&&(E.inTag+=W.current(),W.eol()&&(E.inTag+=\" \"));return O}return{startState:function(){var W=o.startState(c);return{token:_,inTag:null,localMode:null,localState:null,htmlState:W}},copyState:function(W){var E;return W.localState&&(E=o.copyState(W.localMode,W.localState)),{token:W.token,inTag:W.inTag,localMode:W.localMode,localState:E,htmlState:o.copyState(c,W.htmlState)}},token:function(W,E){return E.token(W,E)},indent:function(W,E,O){return!W.localMode||/^\\s*<\\//.test(E)?c.indent(W.htmlState,E,O):W.localMode.indent?W.localMode.indent(W.localState,E,O):o.Pass},innerMode:function(W){return{state:W.localState||W.htmlState,mode:W.localMode||c}}}},\"xml\",\"javascript\",\"css\"),o.defineMIME(\"text/html\",\"htmlmixed\")})});var Rs=Ke((Bs,js)=>{(function(o){typeof Bs==\"object\"&&typeof js==\"object\"?o(We(),Qn(),Yn()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../htmlmixed/htmlmixed\",\"../../addon/mode/overlay\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"django:inner\",function(){var p=[\"block\",\"endblock\",\"for\",\"endfor\",\"true\",\"false\",\"filter\",\"endfilter\",\"loop\",\"none\",\"self\",\"super\",\"if\",\"elif\",\"endif\",\"as\",\"else\",\"import\",\"with\",\"endwith\",\"without\",\"context\",\"ifequal\",\"endifequal\",\"ifnotequal\",\"endifnotequal\",\"extends\",\"include\",\"load\",\"comment\",\"endcomment\",\"empty\",\"url\",\"static\",\"trans\",\"blocktrans\",\"endblocktrans\",\"now\",\"regroup\",\"lorem\",\"ifchanged\",\"endifchanged\",\"firstof\",\"debug\",\"cycle\",\"csrf_token\",\"autoescape\",\"endautoescape\",\"spaceless\",\"endspaceless\",\"ssi\",\"templatetag\",\"verbatim\",\"endverbatim\",\"widthratio\"],v=[\"add\",\"addslashes\",\"capfirst\",\"center\",\"cut\",\"date\",\"default\",\"default_if_none\",\"dictsort\",\"dictsortreversed\",\"divisibleby\",\"escape\",\"escapejs\",\"filesizeformat\",\"first\",\"floatformat\",\"force_escape\",\"get_digit\",\"iriencode\",\"join\",\"last\",\"length\",\"length_is\",\"linebreaks\",\"linebreaksbr\",\"linenumbers\",\"ljust\",\"lower\",\"make_list\",\"phone2numeric\",\"pluralize\",\"pprint\",\"random\",\"removetags\",\"rjust\",\"safe\",\"safeseq\",\"slice\",\"slugify\",\"stringformat\",\"striptags\",\"time\",\"timesince\",\"timeuntil\",\"title\",\"truncatechars\",\"truncatechars_html\",\"truncatewords\",\"truncatewords_html\",\"unordered_list\",\"upper\",\"urlencode\",\"urlize\",\"urlizetrunc\",\"wordcount\",\"wordwrap\",\"yesno\"],C=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],b=[\"in\",\"not\",\"or\",\"and\"];p=new RegExp(\"^\\\\b(\"+p.join(\"|\")+\")\\\\b\"),v=new RegExp(\"^\\\\b(\"+v.join(\"|\")+\")\\\\b\"),C=new RegExp(\"^\\\\b(\"+C.join(\"|\")+\")\\\\b\"),b=new RegExp(\"^\\\\b(\"+b.join(\"|\")+\")\\\\b\");function S(c,d){if(c.match(\"{{\"))return d.tokenize=h,\"tag\";if(c.match(\"{%\"))return d.tokenize=g,\"tag\";if(c.match(\"{#\"))return d.tokenize=T,\"comment\";for(;c.next()!=null&&!c.match(/\\{[{%#]/,!1););return null}function s(c,d){return function(k,z){if(!z.escapeNext&&k.eat(c))z.tokenize=d;else{z.escapeNext&&(z.escapeNext=!1);var M=k.next();M==\"\\\\\"&&(z.escapeNext=!0)}return\"string\"}}function h(c,d){if(d.waitDot){if(d.waitDot=!1,c.peek()!=\".\")return\"null\";if(c.match(/\\.\\W+/))return\"error\";if(c.eat(\".\"))return d.waitProperty=!0,\"null\";throw Error(\"Unexpected error while waiting for property.\")}if(d.waitPipe){if(d.waitPipe=!1,c.peek()!=\"|\")return\"null\";if(c.match(/\\.\\W+/))return\"error\";if(c.eat(\"|\"))return d.waitFilter=!0,\"null\";throw Error(\"Unexpected error while waiting for filter.\")}return d.waitProperty&&(d.waitProperty=!1,c.match(/\\b(\\w+)\\b/))?(d.waitDot=!0,d.waitPipe=!0,\"property\"):d.waitFilter&&(d.waitFilter=!1,c.match(v))?\"variable-2\":c.eatSpace()?(d.waitProperty=!1,\"null\"):c.match(/\\b\\d+(\\.\\d+)?\\b/)?\"number\":c.match(\"'\")?(d.tokenize=s(\"'\",d.tokenize),\"string\"):c.match('\"')?(d.tokenize=s('\"',d.tokenize),\"string\"):c.match(/\\b(\\w+)\\b/)&&!d.foundVariable?(d.waitDot=!0,d.waitPipe=!0,\"variable\"):c.match(\"}}\")?(d.waitProperty=null,d.waitFilter=null,d.waitDot=null,d.waitPipe=null,d.tokenize=S,\"tag\"):(c.next(),\"null\")}function g(c,d){if(d.waitDot){if(d.waitDot=!1,c.peek()!=\".\")return\"null\";if(c.match(/\\.\\W+/))return\"error\";if(c.eat(\".\"))return d.waitProperty=!0,\"null\";throw Error(\"Unexpected error while waiting for property.\")}if(d.waitPipe){if(d.waitPipe=!1,c.peek()!=\"|\")return\"null\";if(c.match(/\\.\\W+/))return\"error\";if(c.eat(\"|\"))return d.waitFilter=!0,\"null\";throw Error(\"Unexpected error while waiting for filter.\")}if(d.waitProperty&&(d.waitProperty=!1,c.match(/\\b(\\w+)\\b/)))return d.waitDot=!0,d.waitPipe=!0,\"property\";if(d.waitFilter&&(d.waitFilter=!1,c.match(v)))return\"variable-2\";if(c.eatSpace())return d.waitProperty=!1,\"null\";if(c.match(/\\b\\d+(\\.\\d+)?\\b/))return\"number\";if(c.match(\"'\"))return d.tokenize=s(\"'\",d.tokenize),\"string\";if(c.match('\"'))return d.tokenize=s('\"',d.tokenize),\"string\";if(c.match(C))return\"operator\";if(c.match(b))return\"keyword\";var k=c.match(p);return k?(k[0]==\"comment\"&&(d.blockCommentTag=!0),\"keyword\"):c.match(/\\b(\\w+)\\b/)?(d.waitDot=!0,d.waitPipe=!0,\"variable\"):c.match(\"%}\")?(d.waitProperty=null,d.waitFilter=null,d.waitDot=null,d.waitPipe=null,d.blockCommentTag?(d.blockCommentTag=!1,d.tokenize=w):d.tokenize=S,\"tag\"):(c.next(),\"null\")}function T(c,d){return c.match(/^.*?#\\}/)?d.tokenize=S:c.skipToEnd(),\"comment\"}function w(c,d){return c.match(/\\{%\\s*endcomment\\s*%\\}/,!1)?(d.tokenize=g,c.match(\"{%\"),\"tag\"):(c.next(),\"comment\")}return{startState:function(){return{tokenize:S}},token:function(c,d){return d.tokenize(c,d)},blockCommentStart:\"{% comment %}\",blockCommentEnd:\"{% endcomment %}\"}}),o.defineMode(\"django\",function(p){var v=o.getMode(p,\"text/html\"),C=o.getMode(p,\"django:inner\");return o.overlayMode(v,C)}),o.defineMIME(\"text/x-django\",\"django\")})});var Di=Ke((Hs,Ws)=>{(function(o){typeof Hs==\"object\"&&typeof Ws==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineSimpleMode=function(w,c){o.defineMode(w,function(d){return o.simpleMode(d,c)})},o.simpleMode=function(w,c){p(c,\"start\");var d={},k=c.meta||{},z=!1;for(var M in c)if(M!=k&&c.hasOwnProperty(M))for(var _=d[M]=[],W=c[M],E=0;E<W.length;E++){var O=W[E];_.push(new b(O,c)),(O.indent||O.dedent)&&(z=!0)}var G={startState:function(){return{state:\"start\",pending:null,local:null,localState:null,indent:z?[]:null}},copyState:function(re){var q={state:re.state,pending:re.pending,local:re.local,localState:null,indent:re.indent&&re.indent.slice(0)};re.localState&&(q.localState=o.copyState(re.local.mode,re.localState)),re.stack&&(q.stack=re.stack.slice(0));for(var I=re.persistentStates;I;I=I.next)q.persistentStates={mode:I.mode,spec:I.spec,state:I.state==re.localState?q.localState:o.copyState(I.mode,I.state),next:q.persistentStates};return q},token:S(d,w),innerMode:function(re){return re.local&&{mode:re.local.mode,state:re.localState}},indent:T(d,k)};if(k)for(var J in k)k.hasOwnProperty(J)&&(G[J]=k[J]);return G};function p(w,c){if(!w.hasOwnProperty(c))throw new Error(\"Undefined state \"+c+\" in simple mode\")}function v(w,c){if(!w)return/(?:)/;var d=\"\";return w instanceof RegExp?(w.ignoreCase&&(d=\"i\"),w.unicode&&(d+=\"u\"),w=w.source):w=String(w),new RegExp((c===!1?\"\":\"^\")+\"(?:\"+w+\")\",d)}function C(w){if(!w)return null;if(w.apply)return w;if(typeof w==\"string\")return w.replace(/\\./g,\" \");for(var c=[],d=0;d<w.length;d++)c.push(w[d]&&w[d].replace(/\\./g,\" \"));return c}function b(w,c){(w.next||w.push)&&p(c,w.next||w.push),this.regex=v(w.regex),this.token=C(w.token),this.data=w}function S(w,c){return function(d,k){if(k.pending){var z=k.pending.shift();return k.pending.length==0&&(k.pending=null),d.pos+=z.text.length,z.token}if(k.local)if(k.local.end&&d.match(k.local.end)){var M=k.local.endToken||null;return k.local=k.localState=null,M}else{var M=k.local.mode.token(d,k.localState),_;return k.local.endScan&&(_=k.local.endScan.exec(d.current()))&&(d.pos=d.start+_.index),M}for(var W=w[k.state],E=0;E<W.length;E++){var O=W[E],G=(!O.data.sol||d.sol())&&d.match(O.regex);if(G){O.data.next?k.state=O.data.next:O.data.push?((k.stack||(k.stack=[])).push(k.state),k.state=O.data.push):O.data.pop&&k.stack&&k.stack.length&&(k.state=k.stack.pop()),O.data.mode&&h(c,k,O.data.mode,O.token),O.data.indent&&k.indent.push(d.indentation()+c.indentUnit),O.data.dedent&&k.indent.pop();var J=O.token;if(J&&J.apply&&(J=J(G)),G.length>2&&O.token&&typeof O.token!=\"string\"){for(var re=2;re<G.length;re++)G[re]&&(k.pending||(k.pending=[])).push({text:G[re],token:O.token[re-1]});return d.backUp(G[0].length-(G[1]?G[1].length:0)),J[0]}else return J&&J.join?J[0]:J}}return d.next(),null}}function s(w,c){if(w===c)return!0;if(!w||typeof w!=\"object\"||!c||typeof c!=\"object\")return!1;var d=0;for(var k in w)if(w.hasOwnProperty(k)){if(!c.hasOwnProperty(k)||!s(w[k],c[k]))return!1;d++}for(var k in c)c.hasOwnProperty(k)&&d--;return d==0}function h(w,c,d,k){var z;if(d.persistent)for(var M=c.persistentStates;M&&!z;M=M.next)(d.spec?s(d.spec,M.spec):d.mode==M.mode)&&(z=M);var _=z?z.mode:d.mode||o.getMode(w,d.spec),W=z?z.state:o.startState(_);d.persistent&&!z&&(c.persistentStates={mode:_,spec:d.spec,state:W,next:c.persistentStates}),c.localState=W,c.local={mode:_,end:d.end&&v(d.end),endScan:d.end&&d.forceEnd!==!1&&v(d.end,!1),endToken:k&&k.join?k[k.length-1]:k}}function g(w,c){for(var d=0;d<c.length;d++)if(c[d]===w)return!0}function T(w,c){return function(d,k,z){if(d.local&&d.local.mode.indent)return d.local.mode.indent(d.localState,k,z);if(d.indent==null||d.local||c.dontIndentStates&&g(d.state,c.dontIndentStates)>-1)return o.Pass;var M=d.indent.length-1,_=w[d.state];e:for(;;){for(var W=0;W<_.length;W++){var E=_[W];if(E.data.dedent&&E.data.dedentIfLineStart!==!1){var O=E.regex.exec(k);if(O&&O[0]){M--,(E.next||E.push)&&(_=w[E.next||E.push]),k=k.slice(O[0].length);continue e}}}break}return M<0?0:d.indent[M]}}})});var Ks=Ke((Us,$s)=>{(function(o){typeof Us==\"object\"&&typeof $s==\"object\"?o(We(),Di()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../../addon/mode/simple\"],o):o(CodeMirror)})(function(o){\"use strict\";var p=\"from\",v=new RegExp(\"^(\\\\s*)\\\\b(\"+p+\")\\\\b\",\"i\"),C=[\"run\",\"cmd\",\"entrypoint\",\"shell\"],b=new RegExp(\"^(\\\\s*)(\"+C.join(\"|\")+\")(\\\\s+\\\\[)\",\"i\"),S=\"expose\",s=new RegExp(\"^(\\\\s*)(\"+S+\")(\\\\s+)\",\"i\"),h=[\"arg\",\"from\",\"maintainer\",\"label\",\"env\",\"add\",\"copy\",\"volume\",\"user\",\"workdir\",\"onbuild\",\"stopsignal\",\"healthcheck\",\"shell\"],g=[p,S].concat(C).concat(h),T=\"(\"+g.join(\"|\")+\")\",w=new RegExp(\"^(\\\\s*)\"+T+\"(\\\\s*)(#.*)?$\",\"i\"),c=new RegExp(\"^(\\\\s*)\"+T+\"(\\\\s+)\",\"i\");o.defineSimpleMode(\"dockerfile\",{start:[{regex:/^\\s*#.*$/,sol:!0,token:\"comment\"},{regex:v,token:[null,\"keyword\"],sol:!0,next:\"from\"},{regex:w,token:[null,\"keyword\",null,\"error\"],sol:!0},{regex:b,token:[null,\"keyword\",null],sol:!0,next:\"array\"},{regex:s,token:[null,\"keyword\",null],sol:!0,next:\"expose\"},{regex:c,token:[null,\"keyword\",null],sol:!0,next:\"arguments\"},{regex:/./,token:null}],from:[{regex:/\\s*$/,token:null,next:\"start\"},{regex:/(\\s*)(#.*)$/,token:[null,\"error\"],next:\"start\"},{regex:/(\\s*\\S+\\s+)(as)/i,token:[null,\"keyword\"],next:\"start\"},{token:null,next:\"start\"}],single:[{regex:/(?:[^\\\\']|\\\\.)/,token:\"string\"},{regex:/'/,token:\"string\",pop:!0}],double:[{regex:/(?:[^\\\\\"]|\\\\.)/,token:\"string\"},{regex:/\"/,token:\"string\",pop:!0}],array:[{regex:/\\]/,token:null,next:\"start\"},{regex:/\"(?:[^\\\\\"]|\\\\.)*\"?/,token:\"string\"}],expose:[{regex:/\\d+$/,token:\"number\",next:\"start\"},{regex:/[^\\d]+$/,token:null,next:\"start\"},{regex:/\\d+/,token:\"number\"},{regex:/[^\\d]+/,token:null},{token:null,next:\"start\"}],arguments:[{regex:/^\\s*#.*$/,sol:!0,token:\"comment\"},{regex:/\"(?:[^\\\\\"]|\\\\.)*\"?$/,token:\"string\",next:\"start\"},{regex:/\"/,token:\"string\",push:\"double\"},{regex:/'(?:[^\\\\']|\\\\.)*'?$/,token:\"string\",next:\"start\"},{regex:/'/,token:\"string\",push:\"single\"},{regex:/[^#\"']+[\\\\`]$/,token:null},{regex:/[^#\"']+$/,token:null,next:\"start\"},{regex:/[^#\"']+/,token:null},{token:null,next:\"start\"}],meta:{lineComment:\"#\"}}),o.defineMIME(\"text/x-dockerfile\",\"dockerfile\")})});var Xs=Ke((Gs,Zs)=>{(function(o){typeof Gs==\"object\"&&typeof Zs==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.modeInfo=[{name:\"APL\",mime:\"text/apl\",mode:\"apl\",ext:[\"dyalog\",\"apl\"]},{name:\"PGP\",mimes:[\"application/pgp\",\"application/pgp-encrypted\",\"application/pgp-keys\",\"application/pgp-signature\"],mode:\"asciiarmor\",ext:[\"asc\",\"pgp\",\"sig\"]},{name:\"ASN.1\",mime:\"text/x-ttcn-asn\",mode:\"asn.1\",ext:[\"asn\",\"asn1\"]},{name:\"Asterisk\",mime:\"text/x-asterisk\",mode:\"asterisk\",file:/^extensions\\.conf$/i},{name:\"Brainfuck\",mime:\"text/x-brainfuck\",mode:\"brainfuck\",ext:[\"b\",\"bf\"]},{name:\"C\",mime:\"text/x-csrc\",mode:\"clike\",ext:[\"c\",\"h\",\"ino\"]},{name:\"C++\",mime:\"text/x-c++src\",mode:\"clike\",ext:[\"cpp\",\"c++\",\"cc\",\"cxx\",\"hpp\",\"h++\",\"hh\",\"hxx\"],alias:[\"cpp\"]},{name:\"Cobol\",mime:\"text/x-cobol\",mode:\"cobol\",ext:[\"cob\",\"cpy\",\"cbl\"]},{name:\"C#\",mime:\"text/x-csharp\",mode:\"clike\",ext:[\"cs\"],alias:[\"csharp\",\"cs\"]},{name:\"Clojure\",mime:\"text/x-clojure\",mode:\"clojure\",ext:[\"clj\",\"cljc\",\"cljx\"]},{name:\"ClojureScript\",mime:\"text/x-clojurescript\",mode:\"clojure\",ext:[\"cljs\"]},{name:\"Closure Stylesheets (GSS)\",mime:\"text/x-gss\",mode:\"css\",ext:[\"gss\"]},{name:\"CMake\",mime:\"text/x-cmake\",mode:\"cmake\",ext:[\"cmake\",\"cmake.in\"],file:/^CMakeLists\\.txt$/},{name:\"CoffeeScript\",mimes:[\"application/vnd.coffeescript\",\"text/coffeescript\",\"text/x-coffeescript\"],mode:\"coffeescript\",ext:[\"coffee\"],alias:[\"coffee\",\"coffee-script\"]},{name:\"Common Lisp\",mime:\"text/x-common-lisp\",mode:\"commonlisp\",ext:[\"cl\",\"lisp\",\"el\"],alias:[\"lisp\"]},{name:\"Cypher\",mime:\"application/x-cypher-query\",mode:\"cypher\",ext:[\"cyp\",\"cypher\"]},{name:\"Cython\",mime:\"text/x-cython\",mode:\"python\",ext:[\"pyx\",\"pxd\",\"pxi\"]},{name:\"Crystal\",mime:\"text/x-crystal\",mode:\"crystal\",ext:[\"cr\"]},{name:\"CSS\",mime:\"text/css\",mode:\"css\",ext:[\"css\"]},{name:\"CQL\",mime:\"text/x-cassandra\",mode:\"sql\",ext:[\"cql\"]},{name:\"D\",mime:\"text/x-d\",mode:\"d\",ext:[\"d\"]},{name:\"Dart\",mimes:[\"application/dart\",\"text/x-dart\"],mode:\"dart\",ext:[\"dart\"]},{name:\"diff\",mime:\"text/x-diff\",mode:\"diff\",ext:[\"diff\",\"patch\"]},{name:\"Django\",mime:\"text/x-django\",mode:\"django\"},{name:\"Dockerfile\",mime:\"text/x-dockerfile\",mode:\"dockerfile\",file:/^Dockerfile$/},{name:\"DTD\",mime:\"application/xml-dtd\",mode:\"dtd\",ext:[\"dtd\"]},{name:\"Dylan\",mime:\"text/x-dylan\",mode:\"dylan\",ext:[\"dylan\",\"dyl\",\"intr\"]},{name:\"EBNF\",mime:\"text/x-ebnf\",mode:\"ebnf\"},{name:\"ECL\",mime:\"text/x-ecl\",mode:\"ecl\",ext:[\"ecl\"]},{name:\"edn\",mime:\"application/edn\",mode:\"clojure\",ext:[\"edn\"]},{name:\"Eiffel\",mime:\"text/x-eiffel\",mode:\"eiffel\",ext:[\"e\"]},{name:\"Elm\",mime:\"text/x-elm\",mode:\"elm\",ext:[\"elm\"]},{name:\"Embedded JavaScript\",mime:\"application/x-ejs\",mode:\"htmlembedded\",ext:[\"ejs\"]},{name:\"Embedded Ruby\",mime:\"application/x-erb\",mode:\"htmlembedded\",ext:[\"erb\"]},{name:\"Erlang\",mime:\"text/x-erlang\",mode:\"erlang\",ext:[\"erl\"]},{name:\"Esper\",mime:\"text/x-esper\",mode:\"sql\"},{name:\"Factor\",mime:\"text/x-factor\",mode:\"factor\",ext:[\"factor\"]},{name:\"FCL\",mime:\"text/x-fcl\",mode:\"fcl\"},{name:\"Forth\",mime:\"text/x-forth\",mode:\"forth\",ext:[\"forth\",\"fth\",\"4th\"]},{name:\"Fortran\",mime:\"text/x-fortran\",mode:\"fortran\",ext:[\"f\",\"for\",\"f77\",\"f90\",\"f95\"]},{name:\"F#\",mime:\"text/x-fsharp\",mode:\"mllike\",ext:[\"fs\"],alias:[\"fsharp\"]},{name:\"Gas\",mime:\"text/x-gas\",mode:\"gas\",ext:[\"s\"]},{name:\"Gherkin\",mime:\"text/x-feature\",mode:\"gherkin\",ext:[\"feature\"]},{name:\"GitHub Flavored Markdown\",mime:\"text/x-gfm\",mode:\"gfm\",file:/^(readme|contributing|history)\\.md$/i},{name:\"Go\",mime:\"text/x-go\",mode:\"go\",ext:[\"go\"]},{name:\"Groovy\",mime:\"text/x-groovy\",mode:\"groovy\",ext:[\"groovy\",\"gradle\"],file:/^Jenkinsfile$/},{name:\"HAML\",mime:\"text/x-haml\",mode:\"haml\",ext:[\"haml\"]},{name:\"Haskell\",mime:\"text/x-haskell\",mode:\"haskell\",ext:[\"hs\"]},{name:\"Haskell (Literate)\",mime:\"text/x-literate-haskell\",mode:\"haskell-literate\",ext:[\"lhs\"]},{name:\"Haxe\",mime:\"text/x-haxe\",mode:\"haxe\",ext:[\"hx\"]},{name:\"HXML\",mime:\"text/x-hxml\",mode:\"haxe\",ext:[\"hxml\"]},{name:\"ASP.NET\",mime:\"application/x-aspx\",mode:\"htmlembedded\",ext:[\"aspx\"],alias:[\"asp\",\"aspx\"]},{name:\"HTML\",mime:\"text/html\",mode:\"htmlmixed\",ext:[\"html\",\"htm\",\"handlebars\",\"hbs\"],alias:[\"xhtml\"]},{name:\"HTTP\",mime:\"message/http\",mode:\"http\"},{name:\"IDL\",mime:\"text/x-idl\",mode:\"idl\",ext:[\"pro\"]},{name:\"Pug\",mime:\"text/x-pug\",mode:\"pug\",ext:[\"jade\",\"pug\"],alias:[\"jade\"]},{name:\"Java\",mime:\"text/x-java\",mode:\"clike\",ext:[\"java\"]},{name:\"Java Server Pages\",mime:\"application/x-jsp\",mode:\"htmlembedded\",ext:[\"jsp\"],alias:[\"jsp\"]},{name:\"JavaScript\",mimes:[\"text/javascript\",\"text/ecmascript\",\"application/javascript\",\"application/x-javascript\",\"application/ecmascript\"],mode:\"javascript\",ext:[\"js\"],alias:[\"ecmascript\",\"js\",\"node\"]},{name:\"JSON\",mimes:[\"application/json\",\"application/x-json\"],mode:\"javascript\",ext:[\"json\",\"map\"],alias:[\"json5\"]},{name:\"JSON-LD\",mime:\"application/ld+json\",mode:\"javascript\",ext:[\"jsonld\"],alias:[\"jsonld\"]},{name:\"JSX\",mime:\"text/jsx\",mode:\"jsx\",ext:[\"jsx\"]},{name:\"Jinja2\",mime:\"text/jinja2\",mode:\"jinja2\",ext:[\"j2\",\"jinja\",\"jinja2\"]},{name:\"Julia\",mime:\"text/x-julia\",mode:\"julia\",ext:[\"jl\"],alias:[\"jl\"]},{name:\"Kotlin\",mime:\"text/x-kotlin\",mode:\"clike\",ext:[\"kt\"]},{name:\"LESS\",mime:\"text/x-less\",mode:\"css\",ext:[\"less\"]},{name:\"LiveScript\",mime:\"text/x-livescript\",mode:\"livescript\",ext:[\"ls\"],alias:[\"ls\"]},{name:\"Lua\",mime:\"text/x-lua\",mode:\"lua\",ext:[\"lua\"]},{name:\"Markdown\",mime:\"text/x-markdown\",mode:\"markdown\",ext:[\"markdown\",\"md\",\"mkd\"]},{name:\"mIRC\",mime:\"text/mirc\",mode:\"mirc\"},{name:\"MariaDB SQL\",mime:\"text/x-mariadb\",mode:\"sql\"},{name:\"Mathematica\",mime:\"text/x-mathematica\",mode:\"mathematica\",ext:[\"m\",\"nb\",\"wl\",\"wls\"]},{name:\"Modelica\",mime:\"text/x-modelica\",mode:\"modelica\",ext:[\"mo\"]},{name:\"MUMPS\",mime:\"text/x-mumps\",mode:\"mumps\",ext:[\"mps\"]},{name:\"MS SQL\",mime:\"text/x-mssql\",mode:\"sql\"},{name:\"mbox\",mime:\"application/mbox\",mode:\"mbox\",ext:[\"mbox\"]},{name:\"MySQL\",mime:\"text/x-mysql\",mode:\"sql\"},{name:\"Nginx\",mime:\"text/x-nginx-conf\",mode:\"nginx\",file:/nginx.*\\.conf$/i},{name:\"NSIS\",mime:\"text/x-nsis\",mode:\"nsis\",ext:[\"nsh\",\"nsi\"]},{name:\"NTriples\",mimes:[\"application/n-triples\",\"application/n-quads\",\"text/n-triples\"],mode:\"ntriples\",ext:[\"nt\",\"nq\"]},{name:\"Objective-C\",mime:\"text/x-objectivec\",mode:\"clike\",ext:[\"m\"],alias:[\"objective-c\",\"objc\"]},{name:\"Objective-C++\",mime:\"text/x-objectivec++\",mode:\"clike\",ext:[\"mm\"],alias:[\"objective-c++\",\"objc++\"]},{name:\"OCaml\",mime:\"text/x-ocaml\",mode:\"mllike\",ext:[\"ml\",\"mli\",\"mll\",\"mly\"]},{name:\"Octave\",mime:\"text/x-octave\",mode:\"octave\",ext:[\"m\"]},{name:\"Oz\",mime:\"text/x-oz\",mode:\"oz\",ext:[\"oz\"]},{name:\"Pascal\",mime:\"text/x-pascal\",mode:\"pascal\",ext:[\"p\",\"pas\"]},{name:\"PEG.js\",mime:\"null\",mode:\"pegjs\",ext:[\"jsonld\"]},{name:\"Perl\",mime:\"text/x-perl\",mode:\"perl\",ext:[\"pl\",\"pm\"]},{name:\"PHP\",mimes:[\"text/x-php\",\"application/x-httpd-php\",\"application/x-httpd-php-open\"],mode:\"php\",ext:[\"php\",\"php3\",\"php4\",\"php5\",\"php7\",\"phtml\"]},{name:\"Pig\",mime:\"text/x-pig\",mode:\"pig\",ext:[\"pig\"]},{name:\"Plain Text\",mime:\"text/plain\",mode:\"null\",ext:[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\"]},{name:\"PLSQL\",mime:\"text/x-plsql\",mode:\"sql\",ext:[\"pls\"]},{name:\"PostgreSQL\",mime:\"text/x-pgsql\",mode:\"sql\"},{name:\"PowerShell\",mime:\"application/x-powershell\",mode:\"powershell\",ext:[\"ps1\",\"psd1\",\"psm1\"]},{name:\"Properties files\",mime:\"text/x-properties\",mode:\"properties\",ext:[\"properties\",\"ini\",\"in\"],alias:[\"ini\",\"properties\"]},{name:\"ProtoBuf\",mime:\"text/x-protobuf\",mode:\"protobuf\",ext:[\"proto\"]},{name:\"Python\",mime:\"text/x-python\",mode:\"python\",ext:[\"BUILD\",\"bzl\",\"py\",\"pyw\"],file:/^(BUCK|BUILD)$/},{name:\"Puppet\",mime:\"text/x-puppet\",mode:\"puppet\",ext:[\"pp\"]},{name:\"Q\",mime:\"text/x-q\",mode:\"q\",ext:[\"q\"]},{name:\"R\",mime:\"text/x-rsrc\",mode:\"r\",ext:[\"r\",\"R\"],alias:[\"rscript\"]},{name:\"reStructuredText\",mime:\"text/x-rst\",mode:\"rst\",ext:[\"rst\"],alias:[\"rst\"]},{name:\"RPM Changes\",mime:\"text/x-rpm-changes\",mode:\"rpm\"},{name:\"RPM Spec\",mime:\"text/x-rpm-spec\",mode:\"rpm\",ext:[\"spec\"]},{name:\"Ruby\",mime:\"text/x-ruby\",mode:\"ruby\",ext:[\"rb\"],alias:[\"jruby\",\"macruby\",\"rake\",\"rb\",\"rbx\"]},{name:\"Rust\",mime:\"text/x-rustsrc\",mode:\"rust\",ext:[\"rs\"]},{name:\"SAS\",mime:\"text/x-sas\",mode:\"sas\",ext:[\"sas\"]},{name:\"Sass\",mime:\"text/x-sass\",mode:\"sass\",ext:[\"sass\"]},{name:\"Scala\",mime:\"text/x-scala\",mode:\"clike\",ext:[\"scala\"]},{name:\"Scheme\",mime:\"text/x-scheme\",mode:\"scheme\",ext:[\"scm\",\"ss\"]},{name:\"SCSS\",mime:\"text/x-scss\",mode:\"css\",ext:[\"scss\"]},{name:\"Shell\",mimes:[\"text/x-sh\",\"application/x-sh\"],mode:\"shell\",ext:[\"sh\",\"ksh\",\"bash\"],alias:[\"bash\",\"sh\",\"zsh\"],file:/^PKGBUILD$/},{name:\"Sieve\",mime:\"application/sieve\",mode:\"sieve\",ext:[\"siv\",\"sieve\"]},{name:\"Slim\",mimes:[\"text/x-slim\",\"application/x-slim\"],mode:\"slim\",ext:[\"slim\"]},{name:\"Smalltalk\",mime:\"text/x-stsrc\",mode:\"smalltalk\",ext:[\"st\"]},{name:\"Smarty\",mime:\"text/x-smarty\",mode:\"smarty\",ext:[\"tpl\"]},{name:\"Solr\",mime:\"text/x-solr\",mode:\"solr\"},{name:\"SML\",mime:\"text/x-sml\",mode:\"mllike\",ext:[\"sml\",\"sig\",\"fun\",\"smackspec\"]},{name:\"Soy\",mime:\"text/x-soy\",mode:\"soy\",ext:[\"soy\"],alias:[\"closure template\"]},{name:\"SPARQL\",mime:\"application/sparql-query\",mode:\"sparql\",ext:[\"rq\",\"sparql\"],alias:[\"sparul\"]},{name:\"Spreadsheet\",mime:\"text/x-spreadsheet\",mode:\"spreadsheet\",alias:[\"excel\",\"formula\"]},{name:\"SQL\",mime:\"text/x-sql\",mode:\"sql\",ext:[\"sql\"]},{name:\"SQLite\",mime:\"text/x-sqlite\",mode:\"sql\"},{name:\"Squirrel\",mime:\"text/x-squirrel\",mode:\"clike\",ext:[\"nut\"]},{name:\"Stylus\",mime:\"text/x-styl\",mode:\"stylus\",ext:[\"styl\"]},{name:\"Swift\",mime:\"text/x-swift\",mode:\"swift\",ext:[\"swift\"]},{name:\"sTeX\",mime:\"text/x-stex\",mode:\"stex\"},{name:\"LaTeX\",mime:\"text/x-latex\",mode:\"stex\",ext:[\"text\",\"ltx\",\"tex\"],alias:[\"tex\"]},{name:\"SystemVerilog\",mime:\"text/x-systemverilog\",mode:\"verilog\",ext:[\"v\",\"sv\",\"svh\"]},{name:\"Tcl\",mime:\"text/x-tcl\",mode:\"tcl\",ext:[\"tcl\"]},{name:\"Textile\",mime:\"text/x-textile\",mode:\"textile\",ext:[\"textile\"]},{name:\"TiddlyWiki\",mime:\"text/x-tiddlywiki\",mode:\"tiddlywiki\"},{name:\"Tiki wiki\",mime:\"text/tiki\",mode:\"tiki\"},{name:\"TOML\",mime:\"text/x-toml\",mode:\"toml\",ext:[\"toml\"]},{name:\"Tornado\",mime:\"text/x-tornado\",mode:\"tornado\"},{name:\"troff\",mime:\"text/troff\",mode:\"troff\",ext:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"]},{name:\"TTCN\",mime:\"text/x-ttcn\",mode:\"ttcn\",ext:[\"ttcn\",\"ttcn3\",\"ttcnpp\"]},{name:\"TTCN_CFG\",mime:\"text/x-ttcn-cfg\",mode:\"ttcn-cfg\",ext:[\"cfg\"]},{name:\"Turtle\",mime:\"text/turtle\",mode:\"turtle\",ext:[\"ttl\"]},{name:\"TypeScript\",mime:\"application/typescript\",mode:\"javascript\",ext:[\"ts\"],alias:[\"ts\"]},{name:\"TypeScript-JSX\",mime:\"text/typescript-jsx\",mode:\"jsx\",ext:[\"tsx\"],alias:[\"tsx\"]},{name:\"Twig\",mime:\"text/x-twig\",mode:\"twig\"},{name:\"Web IDL\",mime:\"text/x-webidl\",mode:\"webidl\",ext:[\"webidl\"]},{name:\"VB.NET\",mime:\"text/x-vb\",mode:\"vb\",ext:[\"vb\"]},{name:\"VBScript\",mime:\"text/vbscript\",mode:\"vbscript\",ext:[\"vbs\"]},{name:\"Velocity\",mime:\"text/velocity\",mode:\"velocity\",ext:[\"vtl\"]},{name:\"Verilog\",mime:\"text/x-verilog\",mode:\"verilog\",ext:[\"v\"]},{name:\"VHDL\",mime:\"text/x-vhdl\",mode:\"vhdl\",ext:[\"vhd\",\"vhdl\"]},{name:\"Vue.js Component\",mimes:[\"script/x-vue\",\"text/x-vue\"],mode:\"vue\",ext:[\"vue\"]},{name:\"XML\",mimes:[\"application/xml\",\"text/xml\"],mode:\"xml\",ext:[\"xml\",\"xsl\",\"xsd\",\"svg\"],alias:[\"rss\",\"wsdl\",\"xsd\"]},{name:\"XQuery\",mime:\"application/xquery\",mode:\"xquery\",ext:[\"xy\",\"xquery\"]},{name:\"Yacas\",mime:\"text/x-yacas\",mode:\"yacas\",ext:[\"ys\"]},{name:\"YAML\",mimes:[\"text/x-yaml\",\"text/yaml\"],mode:\"yaml\",ext:[\"yaml\",\"yml\"],alias:[\"yml\"]},{name:\"Z80\",mime:\"text/x-z80\",mode:\"z80\",ext:[\"z80\"]},{name:\"mscgen\",mime:\"text/x-mscgen\",mode:\"mscgen\",ext:[\"mscgen\",\"mscin\",\"msc\"]},{name:\"xu\",mime:\"text/x-xu\",mode:\"mscgen\",ext:[\"xu\"]},{name:\"msgenny\",mime:\"text/x-msgenny\",mode:\"mscgen\",ext:[\"msgenny\"]},{name:\"WebAssembly\",mime:\"text/webassembly\",mode:\"wast\",ext:[\"wat\",\"wast\"]}];for(var p=0;p<o.modeInfo.length;p++){var v=o.modeInfo[p];v.mimes&&(v.mime=v.mimes[0])}o.findModeByMIME=function(C){C=C.toLowerCase();for(var b=0;b<o.modeInfo.length;b++){var S=o.modeInfo[b];if(S.mime==C)return S;if(S.mimes){for(var s=0;s<S.mimes.length;s++)if(S.mimes[s]==C)return S}}if(/\\+xml$/.test(C))return o.findModeByMIME(\"application/xml\");if(/\\+json$/.test(C))return o.findModeByMIME(\"application/json\")},o.findModeByExtension=function(C){C=C.toLowerCase();for(var b=0;b<o.modeInfo.length;b++){var S=o.modeInfo[b];if(S.ext){for(var s=0;s<S.ext.length;s++)if(S.ext[s]==C)return S}}},o.findModeByFileName=function(C){for(var b=0;b<o.modeInfo.length;b++){var S=o.modeInfo[b];if(S.file&&S.file.test(C))return S}var s=C.lastIndexOf(\".\"),h=s>-1&&C.substring(s+1,C.length);if(h)return o.findModeByExtension(h)},o.findModeByName=function(C){C=C.toLowerCase();for(var b=0;b<o.modeInfo.length;b++){var S=o.modeInfo[b];if(S.name.toLowerCase()==C)return S;if(S.alias){for(var s=0;s<S.alias.length;s++)if(S.alias[s].toLowerCase()==C)return S}}}})});var Jo=Ke((Ys,Qs)=>{(function(o){typeof Ys==\"object\"&&typeof Qs==\"object\"?o(We(),mn(),Xs()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../xml/xml\",\"../meta\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"markdown\",function(p,v){var C=o.getMode(p,\"text/html\"),b=C.name==\"null\";function S(F){if(o.findModeByName){var L=o.findModeByName(F);L&&(F=L.mime||L.mimes[0])}var de=o.getMode(p,F);return de.name==\"null\"?null:de}v.highlightFormatting===void 0&&(v.highlightFormatting=!1),v.maxBlockquoteDepth===void 0&&(v.maxBlockquoteDepth=0),v.taskLists===void 0&&(v.taskLists=!1),v.strikethrough===void 0&&(v.strikethrough=!1),v.emoji===void 0&&(v.emoji=!1),v.fencedCodeBlockHighlighting===void 0&&(v.fencedCodeBlockHighlighting=!0),v.fencedCodeBlockDefaultMode===void 0&&(v.fencedCodeBlockDefaultMode=\"text/plain\"),v.xml===void 0&&(v.xml=!0),v.tokenTypeOverrides===void 0&&(v.tokenTypeOverrides={});var s={header:\"header\",code:\"comment\",quote:\"quote\",list1:\"variable-2\",list2:\"variable-3\",list3:\"keyword\",hr:\"hr\",image:\"image\",imageAltText:\"image-alt-text\",imageMarker:\"image-marker\",formatting:\"formatting\",linkInline:\"link\",linkEmail:\"link\",linkText:\"link\",linkHref:\"string\",em:\"em\",strong:\"strong\",strikethrough:\"strikethrough\",emoji:\"builtin\"};for(var h in s)s.hasOwnProperty(h)&&v.tokenTypeOverrides[h]&&(s[h]=v.tokenTypeOverrides[h]);var g=/^([*\\-_])(?:\\s*\\1){2,}\\s*$/,T=/^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,w=/^\\[(x| )\\](?=\\s)/i,c=v.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,d=/^ {0,3}(?:\\={1,}|-{2,})\\s*$/,k=/^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,z=/^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/,M=/^\\s*\\[[^\\]]+?\\]:.*$/,_=/[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,W=\"    \";function E(F,L,de){return L.f=L.inline=de,de(F,L)}function O(F,L,de){return L.f=L.block=de,de(F,L)}function G(F){return!F||!/\\S/.test(F.string)}function J(F){if(F.linkTitle=!1,F.linkHref=!1,F.linkText=!1,F.em=!1,F.strong=!1,F.strikethrough=!1,F.quote=0,F.indentedCode=!1,F.f==q){var L=b;if(!L){var de=o.innerMode(C,F.htmlState);L=de.mode.name==\"xml\"&&de.state.tagStart===null&&!de.state.context&&de.state.tokenize.isInText}L&&(F.f=j,F.block=re,F.htmlState=null)}return F.trailingSpace=0,F.trailingSpaceNewLine=!1,F.prevLine=F.thisLine,F.thisLine={stream:null},null}function re(F,L){var de=F.column()===L.indentation,ze=G(L.prevLine.stream),pe=L.indentedCode,Ee=L.prevLine.hr,ge=L.list!==!1,Oe=(L.listStack[L.listStack.length-1]||0)+3;L.indentedCode=!1;var qe=L.indentation;if(L.indentationDiff===null&&(L.indentationDiff=L.indentation,ge)){for(L.list=null;qe<L.listStack[L.listStack.length-1];)L.listStack.pop(),L.listStack.length?L.indentation=L.listStack[L.listStack.length-1]:L.list=!1;L.list!==!1&&(L.indentationDiff=qe-L.listStack[L.listStack.length-1])}var Se=!ze&&!Ee&&!L.prevLine.header&&(!ge||!pe)&&!L.prevLine.fencedCodeEnd,Be=(L.list===!1||Ee||ze)&&L.indentation<=Oe&&F.match(g),Ze=null;if(L.indentationDiff>=4&&(pe||L.prevLine.fencedCodeEnd||L.prevLine.header||ze))return F.skipToEnd(),L.indentedCode=!0,s.code;if(F.eatSpace())return null;if(de&&L.indentation<=Oe&&(Ze=F.match(c))&&Ze[1].length<=6)return L.quote=0,L.header=Ze[1].length,L.thisLine.header=!0,v.highlightFormatting&&(L.formatting=\"header\"),L.f=L.inline,D(L);if(L.indentation<=Oe&&F.eat(\">\"))return L.quote=de?1:L.quote+1,v.highlightFormatting&&(L.formatting=\"quote\"),F.eatSpace(),D(L);if(!Be&&!L.setext&&de&&L.indentation<=Oe&&(Ze=F.match(T))){var ke=Ze[1]?\"ol\":\"ul\";return L.indentation=qe+F.current().length,L.list=!0,L.quote=0,L.listStack.push(L.indentation),L.em=!1,L.strong=!1,L.code=!1,L.strikethrough=!1,v.taskLists&&F.match(w,!1)&&(L.taskList=!0),L.f=L.inline,v.highlightFormatting&&(L.formatting=[\"list\",\"list-\"+ke]),D(L)}else{if(de&&L.indentation<=Oe&&(Ze=F.match(z,!0)))return L.quote=0,L.fencedEndRE=new RegExp(Ze[1]+\"+ *$\"),L.localMode=v.fencedCodeBlockHighlighting&&S(Ze[2]||v.fencedCodeBlockDefaultMode),L.localMode&&(L.localState=o.startState(L.localMode)),L.f=L.block=I,v.highlightFormatting&&(L.formatting=\"code-block\"),L.code=-1,D(L);if(L.setext||(!Se||!ge)&&!L.quote&&L.list===!1&&!L.code&&!Be&&!M.test(F.string)&&(Ze=F.lookAhead(1))&&(Ze=Ze.match(d)))return L.setext?(L.header=L.setext,L.setext=0,F.skipToEnd(),v.highlightFormatting&&(L.formatting=\"header\")):(L.header=Ze[0].charAt(0)==\"=\"?1:2,L.setext=L.header),L.thisLine.header=!0,L.f=L.inline,D(L);if(Be)return F.skipToEnd(),L.hr=!0,L.thisLine.hr=!0,s.hr;if(F.peek()===\"[\")return E(F,L,N)}return E(F,L,L.inline)}function q(F,L){var de=C.token(F,L.htmlState);if(!b){var ze=o.innerMode(C,L.htmlState);(ze.mode.name==\"xml\"&&ze.state.tagStart===null&&!ze.state.context&&ze.state.tokenize.isInText||L.md_inside&&F.current().indexOf(\">\")>-1)&&(L.f=j,L.block=re,L.htmlState=null)}return de}function I(F,L){var de=L.listStack[L.listStack.length-1]||0,ze=L.indentation<de,pe=de+3;if(L.fencedEndRE&&L.indentation<=pe&&(ze||F.match(L.fencedEndRE))){v.highlightFormatting&&(L.formatting=\"code-block\");var Ee;return ze||(Ee=D(L)),L.localMode=L.localState=null,L.block=re,L.f=j,L.fencedEndRE=null,L.code=0,L.thisLine.fencedCodeEnd=!0,ze?O(F,L,L.block):Ee}else return L.localMode?L.localMode.token(F,L.localState):(F.skipToEnd(),s.code)}function D(F){var L=[];if(F.formatting){L.push(s.formatting),typeof F.formatting==\"string\"&&(F.formatting=[F.formatting]);for(var de=0;de<F.formatting.length;de++)L.push(s.formatting+\"-\"+F.formatting[de]),F.formatting[de]===\"header\"&&L.push(s.formatting+\"-\"+F.formatting[de]+\"-\"+F.header),F.formatting[de]===\"quote\"&&(!v.maxBlockquoteDepth||v.maxBlockquoteDepth>=F.quote?L.push(s.formatting+\"-\"+F.formatting[de]+\"-\"+F.quote):L.push(\"error\"))}if(F.taskOpen)return L.push(\"meta\"),L.length?L.join(\" \"):null;if(F.taskClosed)return L.push(\"property\"),L.length?L.join(\" \"):null;if(F.linkHref?L.push(s.linkHref,\"url\"):(F.strong&&L.push(s.strong),F.em&&L.push(s.em),F.strikethrough&&L.push(s.strikethrough),F.emoji&&L.push(s.emoji),F.linkText&&L.push(s.linkText),F.code&&L.push(s.code),F.image&&L.push(s.image),F.imageAltText&&L.push(s.imageAltText,\"link\"),F.imageMarker&&L.push(s.imageMarker)),F.header&&L.push(s.header,s.header+\"-\"+F.header),F.quote&&(L.push(s.quote),!v.maxBlockquoteDepth||v.maxBlockquoteDepth>=F.quote?L.push(s.quote+\"-\"+F.quote):L.push(s.quote+\"-\"+v.maxBlockquoteDepth)),F.list!==!1){var ze=(F.listStack.length-1)%3;ze?ze===1?L.push(s.list2):L.push(s.list3):L.push(s.list1)}return F.trailingSpaceNewLine?L.push(\"trailing-space-new-line\"):F.trailingSpace&&L.push(\"trailing-space-\"+(F.trailingSpace%2?\"a\":\"b\")),L.length?L.join(\" \"):null}function Q(F,L){if(F.match(k,!0))return D(L)}function j(F,L){var de=L.text(F,L);if(typeof de<\"u\")return de;if(L.list)return L.list=null,D(L);if(L.taskList){var ze=F.match(w,!0)[1]===\" \";return ze?L.taskOpen=!0:L.taskClosed=!0,v.highlightFormatting&&(L.formatting=\"task\"),L.taskList=!1,D(L)}if(L.taskOpen=!1,L.taskClosed=!1,L.header&&F.match(/^#+$/,!0))return v.highlightFormatting&&(L.formatting=\"header\"),D(L);var pe=F.next();if(L.linkTitle){L.linkTitle=!1;var Ee=pe;pe===\"(\"&&(Ee=\")\"),Ee=(Ee+\"\").replace(/([.?*+^\\[\\]\\\\(){}|-])/g,\"\\\\$1\");var ge=\"^\\\\s*(?:[^\"+Ee+\"\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)\"+Ee;if(F.match(new RegExp(ge),!0))return s.linkHref}if(pe===\"`\"){var Oe=L.formatting;v.highlightFormatting&&(L.formatting=\"code\"),F.eatWhile(\"`\");var qe=F.current().length;if(L.code==0&&(!L.quote||qe==1))return L.code=qe,D(L);if(qe==L.code){var Se=D(L);return L.code=0,Se}else return L.formatting=Oe,D(L)}else if(L.code)return D(L);if(pe===\"\\\\\"&&(F.next(),v.highlightFormatting)){var Be=D(L),Ze=s.formatting+\"-escape\";return Be?Be+\" \"+Ze:Ze}if(pe===\"!\"&&F.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/,!1))return L.imageMarker=!0,L.image=!0,v.highlightFormatting&&(L.formatting=\"image\"),D(L);if(pe===\"[\"&&L.imageMarker&&F.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/,!1))return L.imageMarker=!1,L.imageAltText=!0,v.highlightFormatting&&(L.formatting=\"image\"),D(L);if(pe===\"]\"&&L.imageAltText){v.highlightFormatting&&(L.formatting=\"image\");var Be=D(L);return L.imageAltText=!1,L.image=!1,L.inline=L.f=y,Be}if(pe===\"[\"&&!L.image)return L.linkText&&F.match(/^.*?\\]/)||(L.linkText=!0,v.highlightFormatting&&(L.formatting=\"link\")),D(L);if(pe===\"]\"&&L.linkText){v.highlightFormatting&&(L.formatting=\"link\");var Be=D(L);return L.linkText=!1,L.inline=L.f=F.match(/\\(.*?\\)| ?\\[.*?\\]/,!1)?y:j,Be}if(pe===\"<\"&&F.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/,!1)){L.f=L.inline=V,v.highlightFormatting&&(L.formatting=\"link\");var Be=D(L);return Be?Be+=\" \":Be=\"\",Be+s.linkInline}if(pe===\"<\"&&F.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/,!1)){L.f=L.inline=V,v.highlightFormatting&&(L.formatting=\"link\");var Be=D(L);return Be?Be+=\" \":Be=\"\",Be+s.linkEmail}if(v.xml&&pe===\"<\"&&F.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i,!1)){var ke=F.string.indexOf(\">\",F.pos);if(ke!=-1){var Je=F.string.substring(F.start,ke);/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(Je)&&(L.md_inside=!0)}return F.backUp(1),L.htmlState=o.startState(C),O(F,L,q)}if(v.xml&&pe===\"<\"&&F.match(/^\\/\\w*?>/))return L.md_inside=!1,\"tag\";if(pe===\"*\"||pe===\"_\"){for(var Re=1,Ge=F.pos==1?\" \":F.string.charAt(F.pos-2);Re<3&&F.eat(pe);)Re++;var U=F.peek()||\" \",Z=!/\\s/.test(U)&&(!_.test(U)||/\\s/.test(Ge)||_.test(Ge)),ce=!/\\s/.test(Ge)&&(!_.test(Ge)||/\\s/.test(U)||_.test(U)),He=null,te=null;if(Re%2&&(!L.em&&Z&&(pe===\"*\"||!ce||_.test(Ge))?He=!0:L.em==pe&&ce&&(pe===\"*\"||!Z||_.test(U))&&(He=!1)),Re>1&&(!L.strong&&Z&&(pe===\"*\"||!ce||_.test(Ge))?te=!0:L.strong==pe&&ce&&(pe===\"*\"||!Z||_.test(U))&&(te=!1)),te!=null||He!=null){v.highlightFormatting&&(L.formatting=He==null?\"strong\":te==null?\"em\":\"strong em\"),He===!0&&(L.em=pe),te===!0&&(L.strong=pe);var Se=D(L);return He===!1&&(L.em=!1),te===!1&&(L.strong=!1),Se}}else if(pe===\" \"&&(F.eat(\"*\")||F.eat(\"_\"))){if(F.peek()===\" \")return D(L);F.backUp(1)}if(v.strikethrough){if(pe===\"~\"&&F.eatWhile(pe)){if(L.strikethrough){v.highlightFormatting&&(L.formatting=\"strikethrough\");var Se=D(L);return L.strikethrough=!1,Se}else if(F.match(/^[^\\s]/,!1))return L.strikethrough=!0,v.highlightFormatting&&(L.formatting=\"strikethrough\"),D(L)}else if(pe===\" \"&&F.match(\"~~\",!0)){if(F.peek()===\" \")return D(L);F.backUp(2)}}if(v.emoji&&pe===\":\"&&F.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)){L.emoji=!0,v.highlightFormatting&&(L.formatting=\"emoji\");var fe=D(L);return L.emoji=!1,fe}return pe===\" \"&&(F.match(/^ +$/,!1)?L.trailingSpace++:L.trailingSpace&&(L.trailingSpaceNewLine=!0)),D(L)}function V(F,L){var de=F.next();if(de===\">\"){L.f=L.inline=j,v.highlightFormatting&&(L.formatting=\"link\");var ze=D(L);return ze?ze+=\" \":ze=\"\",ze+s.linkInline}return F.match(/^[^>]+/,!0),s.linkInline}function y(F,L){if(F.eatSpace())return null;var de=F.next();return de===\"(\"||de===\"[\"?(L.f=L.inline=X(de===\"(\"?\")\":\"]\"),v.highlightFormatting&&(L.formatting=\"link-string\"),L.linkHref=!0,D(L)):\"error\"}var K={\")\":/^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\"]\":/^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/};function X(F){return function(L,de){var ze=L.next();if(ze===F){de.f=de.inline=j,v.highlightFormatting&&(de.formatting=\"link-string\");var pe=D(de);return de.linkHref=!1,pe}return L.match(K[F]),de.linkHref=!0,D(de)}}function N(F,L){return F.match(/^([^\\]\\\\]|\\\\.)*\\]:/,!1)?(L.f=R,F.next(),v.highlightFormatting&&(L.formatting=\"link\"),L.linkText=!0,D(L)):E(F,L,j)}function R(F,L){if(F.match(\"]:\",!0)){L.f=L.inline=le,v.highlightFormatting&&(L.formatting=\"link\");var de=D(L);return L.linkText=!1,de}return F.match(/^([^\\]\\\\]|\\\\.)+/,!0),s.linkText}function le(F,L){return F.eatSpace()?null:(F.match(/^[^\\s]+/,!0),F.peek()===void 0?L.linkTitle=!0:F.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/,!0),L.f=L.inline=j,s.linkHref+\" url\")}var xe={startState:function(){return{f:re,prevLine:{stream:null},thisLine:{stream:null},block:re,htmlState:null,indentation:0,inline:j,text:Q,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(F){return{f:F.f,prevLine:F.prevLine,thisLine:F.thisLine,block:F.block,htmlState:F.htmlState&&o.copyState(C,F.htmlState),indentation:F.indentation,localMode:F.localMode,localState:F.localMode?o.copyState(F.localMode,F.localState):null,inline:F.inline,text:F.text,formatting:!1,linkText:F.linkText,linkTitle:F.linkTitle,linkHref:F.linkHref,code:F.code,em:F.em,strong:F.strong,strikethrough:F.strikethrough,emoji:F.emoji,header:F.header,setext:F.setext,hr:F.hr,taskList:F.taskList,list:F.list,listStack:F.listStack.slice(0),quote:F.quote,indentedCode:F.indentedCode,trailingSpace:F.trailingSpace,trailingSpaceNewLine:F.trailingSpaceNewLine,md_inside:F.md_inside,fencedEndRE:F.fencedEndRE}},token:function(F,L){if(L.formatting=!1,F!=L.thisLine.stream){if(L.header=0,L.hr=!1,F.match(/^\\s*$/,!0))return J(L),null;if(L.prevLine=L.thisLine,L.thisLine={stream:F},L.taskList=!1,L.trailingSpace=0,L.trailingSpaceNewLine=!1,!L.localState&&(L.f=L.block,L.f!=q)){var de=F.match(/^\\s*/,!0)[0].replace(/\\t/g,W).length;if(L.indentation=de,L.indentationDiff=null,de>0)return null}}return L.f(F,L)},innerMode:function(F){return F.block==q?{state:F.htmlState,mode:C}:F.localState?{state:F.localState,mode:F.localMode}:{state:F,mode:xe}},indent:function(F,L,de){return F.block==q&&C.indent?C.indent(F.htmlState,L,de):F.localState&&F.localMode.indent?F.localMode.indent(F.localState,L,de):o.Pass},blankLine:J,getType:D,blockCommentStart:\"<!--\",blockCommentEnd:\"-->\",closeBrackets:\"()[]{}''\\\"\\\"``\",fold:\"markdown\"};return xe},\"xml\"),o.defineMIME(\"text/markdown\",\"markdown\"),o.defineMIME(\"text/x-markdown\",\"markdown\")})});var eu=Ke((Vs,Js)=>{(function(o){typeof Vs==\"object\"&&typeof Js==\"object\"?o(We(),Jo(),Yn()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../markdown/markdown\",\"../../addon/mode/overlay\"],o):o(CodeMirror)})(function(o){\"use strict\";var p=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i;o.defineMode(\"gfm\",function(v,C){var b=0;function S(T){return T.code=!1,null}var s={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(T){return{code:T.code,codeBlock:T.codeBlock,ateSpace:T.ateSpace}},token:function(T,w){if(w.combineTokens=null,w.codeBlock)return T.match(/^```+/)?(w.codeBlock=!1,null):(T.skipToEnd(),null);if(T.sol()&&(w.code=!1),T.sol()&&T.match(/^```+/))return T.skipToEnd(),w.codeBlock=!0,null;if(T.peek()===\"`\"){T.next();var c=T.pos;T.eatWhile(\"`\");var d=1+T.pos-c;return w.code?d===b&&(w.code=!1):(b=d,w.code=!0),null}else if(w.code)return T.next(),null;if(T.eatSpace())return w.ateSpace=!0,null;if((T.sol()||w.ateSpace)&&(w.ateSpace=!1,C.gitHubSpice!==!1)){if(T.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/))return w.combineTokens=!0,\"link\";if(T.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/))return w.combineTokens=!0,\"link\"}return T.match(p)&&T.string.slice(T.start-2,T.start)!=\"](\"&&(T.start==0||/\\W/.test(T.string.charAt(T.start-1)))?(w.combineTokens=!0,\"link\"):(T.next(),null)},blankLine:S},h={taskLists:!0,strikethrough:!0,emoji:!0};for(var g in C)h[g]=C[g];return h.name=\"markdown\",o.overlayMode(o.getMode(v,h),s)},\"markdown\"),o.defineMIME(\"text/x-gfm\",\"gfm\")})});var nu=Ke((tu,ru)=>{(function(o){typeof tu==\"object\"&&typeof ru==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"go\",function(p){var v=p.indentUnit,C={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0,any:!0,comparable:!0},b={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},S=/[+\\-*&^%:=<>!|\\/]/,s;function h(k,z){var M=k.next();if(M=='\"'||M==\"'\"||M==\"`\")return z.tokenize=g(M),z.tokenize(k,z);if(/[\\d\\.]/.test(M))return M==\".\"?k.match(/^[0-9_]+([eE][\\-+]?[0-9_]+)?/):M==\"0\"?k.match(/^[xX][0-9a-fA-F_]+/)||k.match(/^[0-7_]+/):k.match(/^[0-9_]*\\.?[0-9_]*([eE][\\-+]?[0-9_]+)?/),\"number\";if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(M))return s=M,null;if(M==\"/\"){if(k.eat(\"*\"))return z.tokenize=T,T(k,z);if(k.eat(\"/\"))return k.skipToEnd(),\"comment\"}if(S.test(M))return k.eatWhile(S),\"operator\";k.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);var _=k.current();return C.propertyIsEnumerable(_)?((_==\"case\"||_==\"default\")&&(s=\"case\"),\"keyword\"):b.propertyIsEnumerable(_)?\"atom\":\"variable\"}function g(k){return function(z,M){for(var _=!1,W,E=!1;(W=z.next())!=null;){if(W==k&&!_){E=!0;break}_=!_&&k!=\"`\"&&W==\"\\\\\"}return(E||!(_||k==\"`\"))&&(M.tokenize=h),\"string\"}}function T(k,z){for(var M=!1,_;_=k.next();){if(_==\"/\"&&M){z.tokenize=h;break}M=_==\"*\"}return\"comment\"}function w(k,z,M,_,W){this.indented=k,this.column=z,this.type=M,this.align=_,this.prev=W}function c(k,z,M){return k.context=new w(k.indented,z,M,null,k.context)}function d(k){if(k.context.prev){var z=k.context.type;return(z==\")\"||z==\"]\"||z==\"}\")&&(k.indented=k.context.indented),k.context=k.context.prev}}return{startState:function(k){return{tokenize:null,context:new w((k||0)-v,0,\"top\",!1),indented:0,startOfLine:!0}},token:function(k,z){var M=z.context;if(k.sol()&&(M.align==null&&(M.align=!1),z.indented=k.indentation(),z.startOfLine=!0,M.type==\"case\"&&(M.type=\"}\")),k.eatSpace())return null;s=null;var _=(z.tokenize||h)(k,z);return _==\"comment\"||(M.align==null&&(M.align=!0),s==\"{\"?c(z,k.column(),\"}\"):s==\"[\"?c(z,k.column(),\"]\"):s==\"(\"?c(z,k.column(),\")\"):s==\"case\"?M.type=\"case\":(s==\"}\"&&M.type==\"}\"||s==M.type)&&d(z),z.startOfLine=!1),_},indent:function(k,z){if(k.tokenize!=h&&k.tokenize!=null)return o.Pass;var M=k.context,_=z&&z.charAt(0);if(M.type==\"case\"&&/^(?:case|default)\\b/.test(z))return k.context.type=\"}\",M.indented;var W=_==M.type;return M.align?M.column+(W?0:1):M.indented+(W?0:v)},electricChars:\"{}):\",closeBrackets:\"()[]{}''\\\"\\\"``\",fold:\"brace\",blockCommentStart:\"/*\",blockCommentEnd:\"*/\",lineComment:\"//\"}}),o.defineMIME(\"text/x-go\",\"go\")})});var au=Ke((iu,ou)=>{(function(o){typeof iu==\"object\"&&typeof ou==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"http\",function(){function p(T,w){return T.skipToEnd(),w.cur=h,\"error\"}function v(T,w){return T.match(/^HTTP\\/\\d\\.\\d/)?(w.cur=C,\"keyword\"):T.match(/^[A-Z]+/)&&/[ \\t]/.test(T.peek())?(w.cur=S,\"keyword\"):p(T,w)}function C(T,w){var c=T.match(/^\\d+/);if(!c)return p(T,w);w.cur=b;var d=Number(c[0]);return d>=100&&d<200?\"positive informational\":d>=200&&d<300?\"positive success\":d>=300&&d<400?\"positive redirect\":d>=400&&d<500?\"negative client-error\":d>=500&&d<600?\"negative server-error\":\"error\"}function b(T,w){return T.skipToEnd(),w.cur=h,null}function S(T,w){return T.eatWhile(/\\S/),w.cur=s,\"string-2\"}function s(T,w){return T.match(/^HTTP\\/\\d\\.\\d$/)?(w.cur=h,\"keyword\"):p(T,w)}function h(T){return T.sol()&&!T.eat(/[ \\t]/)?T.match(/^.*?:/)?\"atom\":(T.skipToEnd(),\"error\"):(T.skipToEnd(),\"string\")}function g(T){return T.skipToEnd(),null}return{token:function(T,w){var c=w.cur;return c!=h&&c!=g&&T.eatSpace()?null:c(T,w)},blankLine:function(T){T.cur=g},startState:function(){return{cur:v}}}}),o.defineMIME(\"message/http\",\"http\")})});var uu=Ke((lu,su)=>{(function(o){typeof lu==\"object\"&&typeof su==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"jinja2\",function(){var p=[\"and\",\"as\",\"block\",\"endblock\",\"by\",\"cycle\",\"debug\",\"else\",\"elif\",\"extends\",\"filter\",\"endfilter\",\"firstof\",\"do\",\"for\",\"endfor\",\"if\",\"endif\",\"ifchanged\",\"endifchanged\",\"ifequal\",\"endifequal\",\"ifnotequal\",\"set\",\"raw\",\"endraw\",\"endifnotequal\",\"in\",\"include\",\"load\",\"not\",\"now\",\"or\",\"parsed\",\"regroup\",\"reversed\",\"spaceless\",\"call\",\"endcall\",\"macro\",\"endmacro\",\"endspaceless\",\"ssi\",\"templatetag\",\"openblock\",\"closeblock\",\"openvariable\",\"closevariable\",\"without\",\"context\",\"openbrace\",\"closebrace\",\"opencomment\",\"closecomment\",\"widthratio\",\"url\",\"with\",\"endwith\",\"get_current_language\",\"trans\",\"endtrans\",\"noop\",\"blocktrans\",\"endblocktrans\",\"get_available_languages\",\"get_current_language_bidi\",\"pluralize\",\"autoescape\",\"endautoescape\"],v=/^[+\\-*&%=<>!?|~^]/,C=/^[:\\[\\(\\{]/,b=[\"true\",\"false\"],S=/^(\\d[+\\-\\*\\/])?\\d+(\\.\\d+)?/;p=new RegExp(\"((\"+p.join(\")|(\")+\"))\\\\b\"),b=new RegExp(\"((\"+b.join(\")|(\")+\"))\\\\b\");function s(h,g){var T=h.peek();if(g.incomment)return h.skipTo(\"#}\")?(h.eatWhile(/\\#|}/),g.incomment=!1):h.skipToEnd(),\"comment\";if(g.intag){if(g.operator){if(g.operator=!1,h.match(b))return\"atom\";if(h.match(S))return\"number\"}if(g.sign){if(g.sign=!1,h.match(b))return\"atom\";if(h.match(S))return\"number\"}if(g.instring)return T==g.instring&&(g.instring=!1),h.next(),\"string\";if(T==\"'\"||T=='\"')return g.instring=T,h.next(),\"string\";if(g.inbraces>0&&T==\")\")h.next(),g.inbraces--;else if(T==\"(\")h.next(),g.inbraces++;else if(g.inbrackets>0&&T==\"]\")h.next(),g.inbrackets--;else if(T==\"[\")h.next(),g.inbrackets++;else{if(!g.lineTag&&(h.match(g.intag+\"}\")||h.eat(\"-\")&&h.match(g.intag+\"}\")))return g.intag=!1,\"tag\";if(h.match(v))return g.operator=!0,\"operator\";if(h.match(C))g.sign=!0;else{if(h.column()==1&&g.lineTag&&h.match(p))return\"keyword\";if(h.eat(\" \")||h.sol()){if(h.match(p))return\"keyword\";if(h.match(b))return\"atom\";if(h.match(S))return\"number\";h.sol()&&h.next()}else h.next()}}return\"variable\"}else if(h.eat(\"{\")){if(h.eat(\"#\"))return g.incomment=!0,h.skipTo(\"#}\")?(h.eatWhile(/\\#|}/),g.incomment=!1):h.skipToEnd(),\"comment\";if(T=h.eat(/\\{|%/))return g.intag=T,g.inbraces=0,g.inbrackets=0,T==\"{\"&&(g.intag=\"}\"),h.eat(\"-\"),\"tag\"}else if(h.eat(\"#\")){if(h.peek()==\"#\")return h.skipToEnd(),\"comment\";if(!h.eol())return g.intag=!0,g.lineTag=!0,g.inbraces=0,g.inbrackets=0,\"tag\"}h.next()}return{startState:function(){return{tokenize:s,inbrackets:0,inbraces:0}},token:function(h,g){var T=g.tokenize(h,g);return h.eol()&&g.lineTag&&!g.instring&&g.inbraces==0&&g.inbrackets==0&&(g.intag=!1,g.lineTag=!1),T},blockCommentStart:\"{#\",blockCommentEnd:\"#}\",lineComment:\"##\"}}),o.defineMIME(\"text/jinja2\",\"jinja2\")})});var du=Ke((cu,fu)=>{(function(o){typeof cu==\"object\"&&typeof fu==\"object\"?o(We(),mn(),vn()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../xml/xml\",\"../javascript/javascript\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(C,b,S,s){this.state=C,this.mode=b,this.depth=S,this.prev=s}function v(C){return new p(o.copyState(C.mode,C.state),C.mode,C.depth,C.prev&&v(C.prev))}o.defineMode(\"jsx\",function(C,b){var S=o.getMode(C,{name:\"xml\",allowMissing:!0,multilineTagIndentPastTag:!1,allowMissingTagName:!0}),s=o.getMode(C,b&&b.base||\"javascript\");function h(c){var d=c.tagName;c.tagName=null;var k=S.indent(c,\"\",\"\");return c.tagName=d,k}function g(c,d){return d.context.mode==S?T(c,d,d.context):w(c,d,d.context)}function T(c,d,k){if(k.depth==2)return c.match(/^.*?\\*\\//)?k.depth=1:c.skipToEnd(),\"comment\";if(c.peek()==\"{\"){S.skipAttribute(k.state);var z=h(k.state),M=k.state.context;if(M&&c.match(/^[^>]*>\\s*$/,!1)){for(;M.prev&&!M.startOfLine;)M=M.prev;M.startOfLine?z-=C.indentUnit:k.prev.state.lexical&&(z=k.prev.state.lexical.indented)}else k.depth==1&&(z+=C.indentUnit);return d.context=new p(o.startState(s,z),s,0,d.context),null}if(k.depth==1){if(c.peek()==\"<\")return S.skipAttribute(k.state),d.context=new p(o.startState(S,h(k.state)),S,0,d.context),null;if(c.match(\"//\"))return c.skipToEnd(),\"comment\";if(c.match(\"/*\"))return k.depth=2,g(c,d)}var _=S.token(c,k.state),W=c.current(),E;return/\\btag\\b/.test(_)?/>$/.test(W)?k.state.context?k.depth=0:d.context=d.context.prev:/^</.test(W)&&(k.depth=1):!_&&(E=W.indexOf(\"{\"))>-1&&c.backUp(W.length-E),_}function w(c,d,k){if(c.peek()==\"<\"&&!c.match(/^<([^<>]|<[^>]*>)+,\\s*>/,!1)&&s.expressionAllowed(c,k.state))return d.context=new p(o.startState(S,s.indent(k.state,\"\",\"\")),S,0,d.context),s.skipExpression(k.state),null;var z=s.token(c,k.state);if(!z&&k.depth!=null){var M=c.current();M==\"{\"?k.depth++:M==\"}\"&&--k.depth==0&&(d.context=d.context.prev)}return z}return{startState:function(){return{context:new p(o.startState(s),s)}},copyState:function(c){return{context:v(c.context)}},token:g,indent:function(c,d,k){return c.context.mode.indent(c.context.state,d,k)},innerMode:function(c){return c.context}}},\"xml\",\"javascript\"),o.defineMIME(\"text/jsx\",\"jsx\"),o.defineMIME(\"text/typescript-jsx\",{name:\"jsx\",base:{name:\"javascript\",typescript:!0}})})});var gu=Ke((pu,hu)=>{(function(o){typeof pu==\"object\"&&typeof hu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"nginx\",function(p){function v(k){for(var z={},M=k.split(\" \"),_=0;_<M.length;++_)z[M[_]]=!0;return z}var C=v(\"break return rewrite set accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23\"),b=v(\"http mail events server types location upstream charset_map limit_except if geo map\"),S=v(\"include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files\"),s=p.indentUnit,h;function g(k,z){return h=z,k}function T(k,z){k.eatWhile(/[\\w\\$_]/);var M=k.current();if(C.propertyIsEnumerable(M))return\"keyword\";if(b.propertyIsEnumerable(M))return\"variable-2\";if(S.propertyIsEnumerable(M))return\"string-2\";var _=k.next();if(_==\"@\")return k.eatWhile(/[\\w\\\\\\-]/),g(\"meta\",k.current());if(_==\"/\"&&k.eat(\"*\"))return z.tokenize=w,w(k,z);if(_==\"<\"&&k.eat(\"!\"))return z.tokenize=c,c(k,z);if(_==\"=\")g(null,\"compare\");else return(_==\"~\"||_==\"|\")&&k.eat(\"=\")?g(null,\"compare\"):_=='\"'||_==\"'\"?(z.tokenize=d(_),z.tokenize(k,z)):_==\"#\"?(k.skipToEnd(),g(\"comment\",\"comment\")):_==\"!\"?(k.match(/^\\s*\\w*/),g(\"keyword\",\"important\")):/\\d/.test(_)?(k.eatWhile(/[\\w.%]/),g(\"number\",\"unit\")):/[,.+>*\\/]/.test(_)?g(null,\"select-op\"):/[;{}:\\[\\]]/.test(_)?g(null,_):(k.eatWhile(/[\\w\\\\\\-]/),g(\"variable\",\"variable\"))}function w(k,z){for(var M=!1,_;(_=k.next())!=null;){if(M&&_==\"/\"){z.tokenize=T;break}M=_==\"*\"}return g(\"comment\",\"comment\")}function c(k,z){for(var M=0,_;(_=k.next())!=null;){if(M>=2&&_==\">\"){z.tokenize=T;break}M=_==\"-\"?M+1:0}return g(\"comment\",\"comment\")}function d(k){return function(z,M){for(var _=!1,W;(W=z.next())!=null&&!(W==k&&!_);)_=!_&&W==\"\\\\\";return _||(M.tokenize=T),g(\"string\",\"string\")}}return{startState:function(k){return{tokenize:T,baseIndent:k||0,stack:[]}},token:function(k,z){if(k.eatSpace())return null;h=null;var M=z.tokenize(k,z),_=z.stack[z.stack.length-1];return h==\"hash\"&&_==\"rule\"?M=\"atom\":M==\"variable\"&&(_==\"rule\"?M=\"number\":(!_||_==\"@media{\")&&(M=\"tag\")),_==\"rule\"&&/^[\\{\\};]$/.test(h)&&z.stack.pop(),h==\"{\"?_==\"@media\"?z.stack[z.stack.length-1]=\"@media{\":z.stack.push(\"{\"):h==\"}\"?z.stack.pop():h==\"@media\"?z.stack.push(\"@media\"):_==\"{\"&&h!=\"comment\"&&z.stack.push(\"rule\"),M},indent:function(k,z){var M=k.stack.length;return/^\\}/.test(z)&&(M-=k.stack[k.stack.length-1]==\"rule\"?2:1),k.baseIndent+M*s},electricChars:\"}\"}}),o.defineMIME(\"text/x-nginx-conf\",\"nginx\")})});var bu=Ke((mu,vu)=>{(function(o){typeof mu==\"object\"&&typeof vu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"pascal\",function(){function p(T){for(var w={},c=T.split(\" \"),d=0;d<c.length;++d)w[c[d]]=!0;return w}var v=p(\"absolute and array asm begin case const constructor destructor div do downto else end file for function goto if implementation in inherited inline interface label mod nil not object of operator or packed procedure program record reintroduce repeat self set shl shr string then to type unit until uses var while with xor as class dispinterface except exports finalization finally initialization inline is library on out packed property raise resourcestring threadvar try absolute abstract alias assembler bitpacked break cdecl continue cppdecl cvar default deprecated dynamic enumerator experimental export external far far16 forward generic helper implements index interrupt iocheck local message name near nodefault noreturn nostackframe oldfpccall otherwise overload override pascal platform private protected public published read register reintroduce result safecall saveregisters softfloat specialize static stdcall stored strict unaligned unimplemented varargs virtual write\"),C={null:!0},b=/[+\\-*&%=<>!?|\\/]/;function S(T,w){var c=T.next();if(c==\"#\"&&w.startOfLine)return T.skipToEnd(),\"meta\";if(c=='\"'||c==\"'\")return w.tokenize=s(c),w.tokenize(T,w);if(c==\"(\"&&T.eat(\"*\"))return w.tokenize=h,h(T,w);if(c==\"{\")return w.tokenize=g,g(T,w);if(/[\\[\\]\\(\\),;\\:\\.]/.test(c))return null;if(/\\d/.test(c))return T.eatWhile(/[\\w\\.]/),\"number\";if(c==\"/\"&&T.eat(\"/\"))return T.skipToEnd(),\"comment\";if(b.test(c))return T.eatWhile(b),\"operator\";T.eatWhile(/[\\w\\$_]/);var d=T.current().toLowerCase();return v.propertyIsEnumerable(d)?\"keyword\":C.propertyIsEnumerable(d)?\"atom\":\"variable\"}function s(T){return function(w,c){for(var d=!1,k,z=!1;(k=w.next())!=null;){if(k==T&&!d){z=!0;break}d=!d&&k==\"\\\\\"}return(z||!d)&&(c.tokenize=null),\"string\"}}function h(T,w){for(var c=!1,d;d=T.next();){if(d==\")\"&&c){w.tokenize=null;break}c=d==\"*\"}return\"comment\"}function g(T,w){for(var c;c=T.next();)if(c==\"}\"){w.tokenize=null;break}return\"comment\"}return{startState:function(){return{tokenize:null}},token:function(T,w){if(T.eatSpace())return null;var c=(w.tokenize||S)(T,w);return c==\"comment\"||c==\"meta\",c},electricChars:\"{}\"}}),o.defineMIME(\"text/x-pascal\",\"pascal\")})});var _u=Ke((yu,xu)=>{(function(o){typeof yu==\"object\"&&typeof xu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"perl\",function(){var S={\"->\":4,\"++\":4,\"--\":4,\"**\":4,\"=~\":4,\"!~\":4,\"*\":4,\"/\":4,\"%\":4,x:4,\"+\":4,\"-\":4,\".\":4,\"<<\":4,\">>\":4,\"<\":4,\">\":4,\"<=\":4,\">=\":4,lt:4,gt:4,le:4,ge:4,\"==\":4,\"!=\":4,\"<=>\":4,eq:4,ne:4,cmp:4,\"~~\":4,\"&\":4,\"|\":4,\"^\":4,\"&&\":4,\"||\":4,\"//\":4,\"..\":4,\"...\":4,\"?\":4,\":\":4,\"=\":4,\"+=\":4,\"-=\":4,\"*=\":4,\",\":4,\"=>\":4,\"::\":4,not:4,and:4,or:4,xor:4,BEGIN:[5,1],END:[5,1],PRINT:[5,1],PRINTF:[5,1],GETC:[5,1],READ:[5,1],READLINE:[5,1],DESTROY:[5,1],TIE:[5,1],TIEHANDLE:[5,1],UNTIE:[5,1],STDIN:5,STDIN_TOP:5,STDOUT:5,STDOUT_TOP:5,STDERR:5,STDERR_TOP:5,$ARG:5,$_:5,\"@ARG\":5,\"@_\":5,$LIST_SEPARATOR:5,'$\"':5,$PROCESS_ID:5,$PID:5,$$:5,$REAL_GROUP_ID:5,$GID:5,\"$(\":5,$EFFECTIVE_GROUP_ID:5,$EGID:5,\"$)\":5,$PROGRAM_NAME:5,$0:5,$SUBSCRIPT_SEPARATOR:5,$SUBSEP:5,\"$;\":5,$REAL_USER_ID:5,$UID:5,\"$<\":5,$EFFECTIVE_USER_ID:5,$EUID:5,\"$>\":5,$a:5,$b:5,$COMPILING:5,\"$^C\":5,$DEBUGGING:5,\"$^D\":5,\"${^ENCODING}\":5,$ENV:5,\"%ENV\":5,$SYSTEM_FD_MAX:5,\"$^F\":5,\"@F\":5,\"${^GLOBAL_PHASE}\":5,\"$^H\":5,\"%^H\":5,\"@INC\":5,\"%INC\":5,$INPLACE_EDIT:5,\"$^I\":5,\"$^M\":5,$OSNAME:5,\"$^O\":5,\"${^OPEN}\":5,$PERLDB:5,\"$^P\":5,$SIG:5,\"%SIG\":5,$BASETIME:5,\"$^T\":5,\"${^TAINT}\":5,\"${^UNICODE}\":5,\"${^UTF8CACHE}\":5,\"${^UTF8LOCALE}\":5,$PERL_VERSION:5,\"$^V\":5,\"${^WIN32_SLOPPY_STAT}\":5,$EXECUTABLE_NAME:5,\"$^X\":5,$1:5,$MATCH:5,\"$&\":5,\"${^MATCH}\":5,$PREMATCH:5,\"$`\":5,\"${^PREMATCH}\":5,$POSTMATCH:5,\"$'\":5,\"${^POSTMATCH}\":5,$LAST_PAREN_MATCH:5,\"$+\":5,$LAST_SUBMATCH_RESULT:5,\"$^N\":5,\"@LAST_MATCH_END\":5,\"@+\":5,\"%LAST_PAREN_MATCH\":5,\"%+\":5,\"@LAST_MATCH_START\":5,\"@-\":5,\"%LAST_MATCH_START\":5,\"%-\":5,$LAST_REGEXP_CODE_RESULT:5,\"$^R\":5,\"${^RE_DEBUG_FLAGS}\":5,\"${^RE_TRIE_MAXBUF}\":5,$ARGV:5,\"@ARGV\":5,ARGV:5,ARGVOUT:5,$OUTPUT_FIELD_SEPARATOR:5,$OFS:5,\"$,\":5,$INPUT_LINE_NUMBER:5,$NR:5,\"$.\":5,$INPUT_RECORD_SEPARATOR:5,$RS:5,\"$/\":5,$OUTPUT_RECORD_SEPARATOR:5,$ORS:5,\"$\\\\\":5,$OUTPUT_AUTOFLUSH:5,\"$|\":5,$ACCUMULATOR:5,\"$^A\":5,$FORMAT_FORMFEED:5,\"$^L\":5,$FORMAT_PAGE_NUMBER:5,\"$%\":5,$FORMAT_LINES_LEFT:5,\"$-\":5,$FORMAT_LINE_BREAK_CHARACTERS:5,\"$:\":5,$FORMAT_LINES_PER_PAGE:5,\"$=\":5,$FORMAT_TOP_NAME:5,\"$^\":5,$FORMAT_NAME:5,\"$~\":5,\"${^CHILD_ERROR_NATIVE}\":5,$EXTENDED_OS_ERROR:5,\"$^E\":5,$EXCEPTIONS_BEING_CAUGHT:5,\"$^S\":5,$WARNING:5,\"$^W\":5,\"${^WARNING_BITS}\":5,$OS_ERROR:5,$ERRNO:5,\"$!\":5,\"%OS_ERROR\":5,\"%ERRNO\":5,\"%!\":5,$CHILD_ERROR:5,\"$?\":5,$EVAL_ERROR:5,\"$@\":5,$OFMT:5,\"$#\":5,\"$*\":5,$ARRAY_BASE:5,\"$[\":5,$OLD_PERL_VERSION:5,\"$]\":5,if:[1,1],elsif:[1,1],else:[1,1],while:[1,1],unless:[1,1],for:[1,1],foreach:[1,1],abs:1,accept:1,alarm:1,atan2:1,bind:1,binmode:1,bless:1,bootstrap:1,break:1,caller:1,chdir:1,chmod:1,chomp:1,chop:1,chown:1,chr:1,chroot:1,close:1,closedir:1,connect:1,continue:[1,1],cos:1,crypt:1,dbmclose:1,dbmopen:1,default:1,defined:1,delete:1,die:1,do:1,dump:1,each:1,endgrent:1,endhostent:1,endnetent:1,endprotoent:1,endpwent:1,endservent:1,eof:1,eval:1,exec:1,exists:1,exit:1,exp:1,fcntl:1,fileno:1,flock:1,fork:1,format:1,formline:1,getc:1,getgrent:1,getgrgid:1,getgrnam:1,gethostbyaddr:1,gethostbyname:1,gethostent:1,getlogin:1,getnetbyaddr:1,getnetbyname:1,getnetent:1,getpeername:1,getpgrp:1,getppid:1,getpriority:1,getprotobyname:1,getprotobynumber:1,getprotoent:1,getpwent:1,getpwnam:1,getpwuid:1,getservbyname:1,getservbyport:1,getservent:1,getsockname:1,getsockopt:1,given:1,glob:1,gmtime:1,goto:1,grep:1,hex:1,import:1,index:1,int:1,ioctl:1,join:1,keys:1,kill:1,last:1,lc:1,lcfirst:1,length:1,link:1,listen:1,local:2,localtime:1,lock:1,log:1,lstat:1,m:null,map:1,mkdir:1,msgctl:1,msgget:1,msgrcv:1,msgsnd:1,my:2,new:1,next:1,no:1,oct:1,open:1,opendir:1,ord:1,our:2,pack:1,package:1,pipe:1,pop:1,pos:1,print:1,printf:1,prototype:1,push:1,q:null,qq:null,qr:null,quotemeta:null,qw:null,qx:null,rand:1,read:1,readdir:1,readline:1,readlink:1,readpipe:1,recv:1,redo:1,ref:1,rename:1,require:1,reset:1,return:1,reverse:1,rewinddir:1,rindex:1,rmdir:1,s:null,say:1,scalar:1,seek:1,seekdir:1,select:1,semctl:1,semget:1,semop:1,send:1,setgrent:1,sethostent:1,setnetent:1,setpgrp:1,setpriority:1,setprotoent:1,setpwent:1,setservent:1,setsockopt:1,shift:1,shmctl:1,shmget:1,shmread:1,shmwrite:1,shutdown:1,sin:1,sleep:1,socket:1,socketpair:1,sort:1,splice:1,split:1,sprintf:1,sqrt:1,srand:1,stat:1,state:1,study:1,sub:1,substr:1,symlink:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,tell:1,telldir:1,tie:1,tied:1,time:1,times:1,tr:null,truncate:1,uc:1,ucfirst:1,umask:1,undef:1,unlink:1,unpack:1,unshift:1,untie:1,use:1,utime:1,values:1,vec:1,wait:1,waitpid:1,wantarray:1,warn:1,when:1,write:1,y:null},s=\"string-2\",h=/[goseximacplud]/;function g(c,d,k,z,M){return d.chain=null,d.style=null,d.tail=null,d.tokenize=function(_,W){for(var E=!1,O,G=0;O=_.next();){if(O===k[G]&&!E)return k[++G]!==void 0?(W.chain=k[G],W.style=z,W.tail=M):M&&_.eatWhile(M),W.tokenize=w,z;E=!E&&O==\"\\\\\"}return z},d.tokenize(c,d)}function T(c,d,k){return d.tokenize=function(z,M){return z.string==k&&(M.tokenize=w),z.skipToEnd(),\"string\"},d.tokenize(c,d)}function w(c,d){if(c.eatSpace())return null;if(d.chain)return g(c,d,d.chain,d.style,d.tail);if(c.match(/^(\\-?((\\d[\\d_]*)?\\.\\d+(e[+-]?\\d+)?|\\d+\\.\\d*)|0x[\\da-fA-F_]+|0b[01_]+|\\d[\\d_]*(e[+-]?\\d+)?)/))return\"number\";if(c.match(/^<<(?=[_a-zA-Z])/))return c.eatWhile(/\\w/),T(c,d,c.current().substr(2));if(c.sol()&&c.match(/^\\=item(?!\\w)/))return T(c,d,\"=cut\");var k=c.next();if(k=='\"'||k==\"'\"){if(v(c,3)==\"<<\"+k){var z=c.pos;c.eatWhile(/\\w/);var M=c.current().substr(1);if(M&&c.eat(k))return T(c,d,M);c.pos=z}return g(c,d,[k],\"string\")}if(k==\"q\"){var _=p(c,-2);if(!(_&&/\\w/.test(_))){if(_=p(c,0),_==\"x\"){if(_=p(c,1),_==\"(\")return b(c,2),g(c,d,[\")\"],s,h);if(_==\"[\")return b(c,2),g(c,d,[\"]\"],s,h);if(_==\"{\")return b(c,2),g(c,d,[\"}\"],s,h);if(_==\"<\")return b(c,2),g(c,d,[\">\"],s,h);if(/[\\^'\"!~\\/]/.test(_))return b(c,1),g(c,d,[c.eat(_)],s,h)}else if(_==\"q\"){if(_=p(c,1),_==\"(\")return b(c,2),g(c,d,[\")\"],\"string\");if(_==\"[\")return b(c,2),g(c,d,[\"]\"],\"string\");if(_==\"{\")return b(c,2),g(c,d,[\"}\"],\"string\");if(_==\"<\")return b(c,2),g(c,d,[\">\"],\"string\");if(/[\\^'\"!~\\/]/.test(_))return b(c,1),g(c,d,[c.eat(_)],\"string\")}else if(_==\"w\"){if(_=p(c,1),_==\"(\")return b(c,2),g(c,d,[\")\"],\"bracket\");if(_==\"[\")return b(c,2),g(c,d,[\"]\"],\"bracket\");if(_==\"{\")return b(c,2),g(c,d,[\"}\"],\"bracket\");if(_==\"<\")return b(c,2),g(c,d,[\">\"],\"bracket\");if(/[\\^'\"!~\\/]/.test(_))return b(c,1),g(c,d,[c.eat(_)],\"bracket\")}else if(_==\"r\"){if(_=p(c,1),_==\"(\")return b(c,2),g(c,d,[\")\"],s,h);if(_==\"[\")return b(c,2),g(c,d,[\"]\"],s,h);if(_==\"{\")return b(c,2),g(c,d,[\"}\"],s,h);if(_==\"<\")return b(c,2),g(c,d,[\">\"],s,h);if(/[\\^'\"!~\\/]/.test(_))return b(c,1),g(c,d,[c.eat(_)],s,h)}else if(/[\\^'\"!~\\/(\\[{<]/.test(_)){if(_==\"(\")return b(c,1),g(c,d,[\")\"],\"string\");if(_==\"[\")return b(c,1),g(c,d,[\"]\"],\"string\");if(_==\"{\")return b(c,1),g(c,d,[\"}\"],\"string\");if(_==\"<\")return b(c,1),g(c,d,[\">\"],\"string\");if(/[\\^'\"!~\\/]/.test(_))return g(c,d,[c.eat(_)],\"string\")}}}if(k==\"m\"){var _=p(c,-2);if(!(_&&/\\w/.test(_))&&(_=c.eat(/[(\\[{<\\^'\"!~\\/]/),_)){if(/[\\^'\"!~\\/]/.test(_))return g(c,d,[_],s,h);if(_==\"(\")return g(c,d,[\")\"],s,h);if(_==\"[\")return g(c,d,[\"]\"],s,h);if(_==\"{\")return g(c,d,[\"}\"],s,h);if(_==\"<\")return g(c,d,[\">\"],s,h)}}if(k==\"s\"){var _=/[\\/>\\]})\\w]/.test(p(c,-2));if(!_&&(_=c.eat(/[(\\[{<\\^'\"!~\\/]/),_))return _==\"[\"?g(c,d,[\"]\",\"]\"],s,h):_==\"{\"?g(c,d,[\"}\",\"}\"],s,h):_==\"<\"?g(c,d,[\">\",\">\"],s,h):_==\"(\"?g(c,d,[\")\",\")\"],s,h):g(c,d,[_,_],s,h)}if(k==\"y\"){var _=/[\\/>\\]})\\w]/.test(p(c,-2));if(!_&&(_=c.eat(/[(\\[{<\\^'\"!~\\/]/),_))return _==\"[\"?g(c,d,[\"]\",\"]\"],s,h):_==\"{\"?g(c,d,[\"}\",\"}\"],s,h):_==\"<\"?g(c,d,[\">\",\">\"],s,h):_==\"(\"?g(c,d,[\")\",\")\"],s,h):g(c,d,[_,_],s,h)}if(k==\"t\"){var _=/[\\/>\\]})\\w]/.test(p(c,-2));if(!_&&(_=c.eat(\"r\"),_&&(_=c.eat(/[(\\[{<\\^'\"!~\\/]/),_)))return _==\"[\"?g(c,d,[\"]\",\"]\"],s,h):_==\"{\"?g(c,d,[\"}\",\"}\"],s,h):_==\"<\"?g(c,d,[\">\",\">\"],s,h):_==\"(\"?g(c,d,[\")\",\")\"],s,h):g(c,d,[_,_],s,h)}if(k==\"`\")return g(c,d,[k],\"variable-2\");if(k==\"/\")return/~\\s*$/.test(v(c))?g(c,d,[k],s,h):\"operator\";if(k==\"$\"){var z=c.pos;if(c.eatWhile(/\\d/)||c.eat(\"{\")&&c.eatWhile(/\\d/)&&c.eat(\"}\"))return\"variable-2\";c.pos=z}if(/[$@%]/.test(k)){var z=c.pos;if(c.eat(\"^\")&&c.eat(/[A-Z]/)||!/[@$%&]/.test(p(c,-2))&&c.eat(/[=|\\\\\\-#?@;:&`~\\^!\\[\\]*'\"$+.,\\/<>()]/)){var _=c.current();if(S[_])return\"variable-2\"}c.pos=z}if(/[$@%&]/.test(k)&&(c.eatWhile(/[\\w$]/)||c.eat(\"{\")&&c.eatWhile(/[\\w$]/)&&c.eat(\"}\"))){var _=c.current();return S[_]?\"variable-2\":\"variable\"}if(k==\"#\"&&p(c,-2)!=\"$\")return c.skipToEnd(),\"comment\";if(/[:+\\-\\^*$&%@=<>!?|\\/~\\.]/.test(k)){var z=c.pos;if(c.eatWhile(/[:+\\-\\^*$&%@=<>!?|\\/~\\.]/),S[c.current()])return\"operator\";c.pos=z}if(k==\"_\"&&c.pos==1){if(C(c,6)==\"_END__\")return g(c,d,[\"\\0\"],\"comment\");if(C(c,7)==\"_DATA__\")return g(c,d,[\"\\0\"],\"variable-2\");if(C(c,7)==\"_C__\")return g(c,d,[\"\\0\"],\"string\")}if(/\\w/.test(k)){var z=c.pos;if(p(c,-2)==\"{\"&&(p(c,0)==\"}\"||c.eatWhile(/\\w/)&&p(c,0)==\"}\"))return\"string\";c.pos=z}if(/[A-Z]/.test(k)){var W=p(c,-2),z=c.pos;if(c.eatWhile(/[A-Z_]/),/[\\da-z]/.test(p(c,0)))c.pos=z;else{var _=S[c.current()];return _?(_[1]&&(_=_[0]),W!=\":\"?_==1?\"keyword\":_==2?\"def\":_==3?\"atom\":_==4?\"operator\":_==5?\"variable-2\":\"meta\":\"meta\"):\"meta\"}}if(/[a-zA-Z_]/.test(k)){var W=p(c,-2);c.eatWhile(/\\w/);var _=S[c.current()];return _?(_[1]&&(_=_[0]),W!=\":\"?_==1?\"keyword\":_==2?\"def\":_==3?\"atom\":_==4?\"operator\":_==5?\"variable-2\":\"meta\":\"meta\"):\"meta\"}return null}return{startState:function(){return{tokenize:w,chain:null,style:null,tail:null}},token:function(c,d){return(d.tokenize||w)(c,d)},lineComment:\"#\"}}),o.registerHelper(\"wordChars\",\"perl\",/[\\w$]/),o.defineMIME(\"text/x-perl\",\"perl\");function p(S,s){return S.string.charAt(S.pos+(s||0))}function v(S,s){if(s){var h=S.pos-s;return S.string.substr(h>=0?h:0,s)}else return S.string.substr(0,S.pos-1)}function C(S,s){var h=S.string.length,g=h-S.pos+1;return S.string.substr(S.pos,s&&s<h?s:g)}function b(S,s){var h=S.pos+s,g;h<=0?S.pos=0:h>=(g=S.string.length-1)?S.pos=g:S.pos=h}})});var Su=Ke((ku,wu)=>{(function(o){typeof ku==\"object\"&&typeof wu==\"object\"?o(We(),Qn(),Vo()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../htmlmixed/htmlmixed\",\"../clike/clike\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(T){for(var w={},c=T.split(\" \"),d=0;d<c.length;++d)w[c[d]]=!0;return w}function v(T,w,c){return T.length==0?C(w):function(d,k){for(var z=T[0],M=0;M<z.length;M++)if(d.match(z[M][0]))return k.tokenize=v(T.slice(1),w),z[M][1];return k.tokenize=C(w,c),\"string\"}}function C(T,w){return function(c,d){return b(c,d,T,w)}}function b(T,w,c,d){if(d!==!1&&T.match(\"${\",!1)||T.match(\"{$\",!1))return w.tokenize=null,\"string\";if(d!==!1&&T.match(/^\\$[a-zA-Z_][a-zA-Z0-9_]*/))return T.match(\"[\",!1)&&(w.tokenize=v([[[\"[\",null]],[[/\\d[\\w\\.]*/,\"number\"],[/\\$[a-zA-Z_][a-zA-Z0-9_]*/,\"variable-2\"],[/[\\w\\$]+/,\"variable\"]],[[\"]\",null]]],c,d)),T.match(/^->\\w/,!1)&&(w.tokenize=v([[[\"->\",null]],[[/[\\w]+/,\"variable\"]]],c,d)),\"variable-2\";for(var k=!1;!T.eol()&&(k||d===!1||!T.match(\"{$\",!1)&&!T.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*|\\$\\{)/,!1));){if(!k&&T.match(c)){w.tokenize=null,w.tokStack.pop(),w.tokStack.pop();break}k=T.next()==\"\\\\\"&&!k}return\"string\"}var S=\"abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally readonly match\",s=\"true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__\",h=\"func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage memory_get_peak_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count\";o.registerHelper(\"hintWords\",\"php\",[S,s,h].join(\" \").split(\" \")),o.registerHelper(\"wordChars\",\"php\",/[\\w$]/);var g={name:\"clike\",helperType:\"php\",keywords:p(S),blockKeywords:p(\"catch do else elseif for foreach if switch try while finally\"),defKeywords:p(\"class enum function interface namespace trait\"),atoms:p(s),builtin:p(h),multiLineStrings:!0,hooks:{$:function(T){return T.eatWhile(/[\\w\\$_]/),\"variable-2\"},\"<\":function(T,w){var c;if(c=T.match(/^<<\\s*/)){var d=T.eat(/['\"]/);T.eatWhile(/[\\w\\.]/);var k=T.current().slice(c[0].length+(d?2:1));if(d&&T.eat(d),k)return(w.tokStack||(w.tokStack=[])).push(k,0),w.tokenize=C(k,d!=\"'\"),\"string\"}return!1},\"#\":function(T){for(;!T.eol()&&!T.match(\"?>\",!1);)T.next();return\"comment\"},\"/\":function(T){if(T.eat(\"/\")){for(;!T.eol()&&!T.match(\"?>\",!1);)T.next();return\"comment\"}return!1},'\"':function(T,w){return(w.tokStack||(w.tokStack=[])).push('\"',0),w.tokenize=C('\"'),\"string\"},\"{\":function(T,w){return w.tokStack&&w.tokStack.length&&w.tokStack[w.tokStack.length-1]++,!1},\"}\":function(T,w){return w.tokStack&&w.tokStack.length>0&&!--w.tokStack[w.tokStack.length-1]&&(w.tokenize=C(w.tokStack[w.tokStack.length-2])),!1}}};o.defineMode(\"php\",function(T,w){var c=o.getMode(T,w&&w.htmlMode||\"text/html\"),d=o.getMode(T,g);function k(z,M){var _=M.curMode==d;if(z.sol()&&M.pending&&M.pending!='\"'&&M.pending!=\"'\"&&(M.pending=null),_)return _&&M.php.tokenize==null&&z.match(\"?>\")?(M.curMode=c,M.curState=M.html,M.php.context.prev||(M.php=null),\"meta\"):d.token(z,M.curState);if(z.match(/^<\\?\\w*/))return M.curMode=d,M.php||(M.php=o.startState(d,c.indent(M.html,\"\",\"\"))),M.curState=M.php,\"meta\";if(M.pending=='\"'||M.pending==\"'\"){for(;!z.eol()&&z.next()!=M.pending;);var W=\"string\"}else if(M.pending&&z.pos<M.pending.end){z.pos=M.pending.end;var W=M.pending.style}else var W=c.token(z,M.curState);M.pending&&(M.pending=null);var E=z.current(),O=E.search(/<\\?/),G;return O!=-1&&(W==\"string\"&&(G=E.match(/[\\'\\\"]$/))&&!/\\?>/.test(E)?M.pending=G[0]:M.pending={end:z.pos,style:W},z.backUp(E.length-O)),W}return{startState:function(){var z=o.startState(c),M=w.startOpen?o.startState(d):null;return{html:z,php:M,curMode:w.startOpen?d:c,curState:w.startOpen?M:z,pending:null}},copyState:function(z){var M=z.html,_=o.copyState(c,M),W=z.php,E=W&&o.copyState(d,W),O;return z.curMode==c?O=_:O=E,{html:_,php:E,curMode:z.curMode,curState:O,pending:z.pending}},token:k,indent:function(z,M,_){return z.curMode!=d&&/^\\s*<\\//.test(M)||z.curMode==d&&/^\\?>/.test(M)?c.indent(z.html,M,_):z.curMode.indent(z.curState,M,_)},blockCommentStart:\"/*\",blockCommentEnd:\"*/\",lineComment:\"//\",innerMode:function(z){return{state:z.curState,mode:z.curMode}}}},\"htmlmixed\",\"clike\"),o.defineMIME(\"application/x-httpd-php\",\"php\"),o.defineMIME(\"application/x-httpd-php-open\",{name:\"php\",startOpen:!0}),o.defineMIME(\"text/x-php\",g)})});var Cu=Ke((Tu,Lu)=>{(function(o){typeof Tu==\"object\"&&typeof Lu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(s){return new RegExp(\"^((\"+s.join(\")|(\")+\"))\\\\b\",\"i\")}var v=[\"package\",\"message\",\"import\",\"syntax\",\"required\",\"optional\",\"repeated\",\"reserved\",\"default\",\"extensions\",\"packed\",\"bool\",\"bytes\",\"double\",\"enum\",\"float\",\"string\",\"int32\",\"int64\",\"uint32\",\"uint64\",\"sint32\",\"sint64\",\"fixed32\",\"fixed64\",\"sfixed32\",\"sfixed64\",\"option\",\"service\",\"rpc\",\"returns\"],C=p(v);o.registerHelper(\"hintWords\",\"protobuf\",v);var b=new RegExp(\"^[_A-Za-z\\xA1-\\uFFFF][_A-Za-z0-9\\xA1-\\uFFFF]*\");function S(s){return s.eatSpace()?null:s.match(\"//\")?(s.skipToEnd(),\"comment\"):s.match(/^[0-9\\.+-]/,!1)&&(s.match(/^[+-]?0x[0-9a-fA-F]+/)||s.match(/^[+-]?\\d*\\.\\d+([EeDd][+-]?\\d+)?/)||s.match(/^[+-]?\\d+([EeDd][+-]?\\d+)?/))?\"number\":s.match(/^\"([^\"]|(\"\"))*\"/)||s.match(/^'([^']|(''))*'/)?\"string\":s.match(C)?\"keyword\":s.match(b)?\"variable\":(s.next(),null)}o.defineMode(\"protobuf\",function(){return{token:S,fold:\"brace\"}}),o.defineMIME(\"text/x-protobuf\",\"protobuf\")})});var Mu=Ke((Eu,zu)=>{(function(o){typeof Eu==\"object\"&&typeof zu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(h){return new RegExp(\"^((\"+h.join(\")|(\")+\"))\\\\b\")}var v=p([\"and\",\"or\",\"not\",\"is\"]),C=[\"as\",\"assert\",\"break\",\"class\",\"continue\",\"def\",\"del\",\"elif\",\"else\",\"except\",\"finally\",\"for\",\"from\",\"global\",\"if\",\"import\",\"lambda\",\"pass\",\"raise\",\"return\",\"try\",\"while\",\"with\",\"yield\",\"in\",\"False\",\"True\"],b=[\"abs\",\"all\",\"any\",\"bin\",\"bool\",\"bytearray\",\"callable\",\"chr\",\"classmethod\",\"compile\",\"complex\",\"delattr\",\"dict\",\"dir\",\"divmod\",\"enumerate\",\"eval\",\"filter\",\"float\",\"format\",\"frozenset\",\"getattr\",\"globals\",\"hasattr\",\"hash\",\"help\",\"hex\",\"id\",\"input\",\"int\",\"isinstance\",\"issubclass\",\"iter\",\"len\",\"list\",\"locals\",\"map\",\"max\",\"memoryview\",\"min\",\"next\",\"object\",\"oct\",\"open\",\"ord\",\"pow\",\"property\",\"range\",\"repr\",\"reversed\",\"round\",\"set\",\"setattr\",\"slice\",\"sorted\",\"staticmethod\",\"str\",\"sum\",\"super\",\"tuple\",\"type\",\"vars\",\"zip\",\"__import__\",\"NotImplemented\",\"Ellipsis\",\"__debug__\"];o.registerHelper(\"hintWords\",\"python\",C.concat(b).concat([\"exec\",\"print\"]));function S(h){return h.scopes[h.scopes.length-1]}o.defineMode(\"python\",function(h,g){for(var T=\"error\",w=g.delimiters||g.singleDelimiters||/^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/,c=[g.singleOperators,g.doubleOperators,g.doubleDelimiters,g.tripleDelimiters,g.operators||/^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/],d=0;d<c.length;d++)c[d]||c.splice(d--,1);var k=g.hangingIndent||h.indentUnit,z=C,M=b;g.extra_keywords!=null&&(z=z.concat(g.extra_keywords)),g.extra_builtins!=null&&(M=M.concat(g.extra_builtins));var _=!(g.version&&Number(g.version)<3);if(_){var W=g.identifiers||/^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;z=z.concat([\"nonlocal\",\"None\",\"aiter\",\"anext\",\"async\",\"await\",\"breakpoint\",\"match\",\"case\"]),M=M.concat([\"ascii\",\"bytes\",\"exec\",\"print\"]);var E=new RegExp(`^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\"{3}|['\"]))`,\"i\")}else{var W=g.identifiers||/^[_A-Za-z][_A-Za-z0-9]*/;z=z.concat([\"exec\",\"print\"]),M=M.concat([\"apply\",\"basestring\",\"buffer\",\"cmp\",\"coerce\",\"execfile\",\"file\",\"intern\",\"long\",\"raw_input\",\"reduce\",\"reload\",\"unichr\",\"unicode\",\"xrange\",\"None\"]);var E=new RegExp(`^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))`,\"i\")}var O=p(z),G=p(M);function J(K,X){var N=K.sol()&&X.lastToken!=\"\\\\\";if(N&&(X.indent=K.indentation()),N&&S(X).type==\"py\"){var R=S(X).offset;if(K.eatSpace()){var le=K.indentation();return le>R?D(X):le<R&&j(K,X)&&K.peek()!=\"#\"&&(X.errorToken=!0),null}else{var xe=re(K,X);return R>0&&j(K,X)&&(xe+=\" \"+T),xe}}return re(K,X)}function re(K,X,N){if(K.eatSpace())return null;if(!N&&K.match(/^#.*/))return\"comment\";if(K.match(/^[0-9\\.]/,!1)){var R=!1;if(K.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)&&(R=!0),K.match(/^[\\d_]+\\.\\d*/)&&(R=!0),K.match(/^\\.\\d+/)&&(R=!0),R)return K.eat(/J/i),\"number\";var le=!1;if(K.match(/^0x[0-9a-f_]+/i)&&(le=!0),K.match(/^0b[01_]+/i)&&(le=!0),K.match(/^0o[0-7_]+/i)&&(le=!0),K.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)&&(K.eat(/J/i),le=!0),K.match(/^0(?![\\dx])/i)&&(le=!0),le)return K.eat(/L/i),\"number\"}if(K.match(E)){var xe=K.current().toLowerCase().indexOf(\"f\")!==-1;return xe?(X.tokenize=q(K.current(),X.tokenize),X.tokenize(K,X)):(X.tokenize=I(K.current(),X.tokenize),X.tokenize(K,X))}for(var F=0;F<c.length;F++)if(K.match(c[F]))return\"operator\";return K.match(w)?\"punctuation\":X.lastToken==\".\"&&K.match(W)?\"property\":K.match(O)||K.match(v)?\"keyword\":K.match(G)?\"builtin\":K.match(/^(self|cls)\\b/)?\"variable-2\":K.match(W)?X.lastToken==\"def\"||X.lastToken==\"class\"?\"def\":\"variable\":(K.next(),N?null:T)}function q(K,X){for(;\"rubf\".indexOf(K.charAt(0).toLowerCase())>=0;)K=K.substr(1);var N=K.length==1,R=\"string\";function le(F){return function(L,de){var ze=re(L,de,!0);return ze==\"punctuation\"&&(L.current()==\"{\"?de.tokenize=le(F+1):L.current()==\"}\"&&(F>1?de.tokenize=le(F-1):de.tokenize=xe)),ze}}function xe(F,L){for(;!F.eol();)if(F.eatWhile(/[^'\"\\{\\}\\\\]/),F.eat(\"\\\\\")){if(F.next(),N&&F.eol())return R}else{if(F.match(K))return L.tokenize=X,R;if(F.match(\"{{\"))return R;if(F.match(\"{\",!1))return L.tokenize=le(0),F.current()?R:L.tokenize(F,L);if(F.match(\"}}\"))return R;if(F.match(\"}\"))return T;F.eat(/['\"]/)}if(N){if(g.singleLineStringErrors)return T;L.tokenize=X}return R}return xe.isString=!0,xe}function I(K,X){for(;\"rubf\".indexOf(K.charAt(0).toLowerCase())>=0;)K=K.substr(1);var N=K.length==1,R=\"string\";function le(xe,F){for(;!xe.eol();)if(xe.eatWhile(/[^'\"\\\\]/),xe.eat(\"\\\\\")){if(xe.next(),N&&xe.eol())return R}else{if(xe.match(K))return F.tokenize=X,R;xe.eat(/['\"]/)}if(N){if(g.singleLineStringErrors)return T;F.tokenize=X}return R}return le.isString=!0,le}function D(K){for(;S(K).type!=\"py\";)K.scopes.pop();K.scopes.push({offset:S(K).offset+h.indentUnit,type:\"py\",align:null})}function Q(K,X,N){var R=K.match(/^[\\s\\[\\{\\(]*(?:#|$)/,!1)?null:K.column()+1;X.scopes.push({offset:X.indent+k,type:N,align:R})}function j(K,X){for(var N=K.indentation();X.scopes.length>1&&S(X).offset>N;){if(S(X).type!=\"py\")return!0;X.scopes.pop()}return S(X).offset!=N}function V(K,X){K.sol()&&(X.beginningOfLine=!0,X.dedent=!1);var N=X.tokenize(K,X),R=K.current();if(X.beginningOfLine&&R==\"@\")return K.match(W,!1)?\"meta\":_?\"operator\":T;if(/\\S/.test(R)&&(X.beginningOfLine=!1),(N==\"variable\"||N==\"builtin\")&&X.lastToken==\"meta\"&&(N=\"meta\"),(R==\"pass\"||R==\"return\")&&(X.dedent=!0),R==\"lambda\"&&(X.lambda=!0),R==\":\"&&!X.lambda&&S(X).type==\"py\"&&K.match(/^\\s*(?:#|$)/,!1)&&D(X),R.length==1&&!/string|comment/.test(N)){var le=\"[({\".indexOf(R);if(le!=-1&&Q(K,X,\"])}\".slice(le,le+1)),le=\"])}\".indexOf(R),le!=-1)if(S(X).type==R)X.indent=X.scopes.pop().offset-k;else return T}return X.dedent&&K.eol()&&S(X).type==\"py\"&&X.scopes.length>1&&X.scopes.pop(),N}var y={startState:function(K){return{tokenize:J,scopes:[{offset:K||0,type:\"py\",align:null}],indent:K||0,lastToken:null,lambda:!1,dedent:0}},token:function(K,X){var N=X.errorToken;N&&(X.errorToken=!1);var R=V(K,X);return R&&R!=\"comment\"&&(X.lastToken=R==\"keyword\"||R==\"punctuation\"?K.current():R),R==\"punctuation\"&&(R=null),K.eol()&&X.lambda&&(X.lambda=!1),N?R+\" \"+T:R},indent:function(K,X){if(K.tokenize!=J)return K.tokenize.isString?o.Pass:0;var N=S(K),R=N.type==X.charAt(0)||N.type==\"py\"&&!K.dedent&&/^(else:|elif |except |finally:)/.test(X);return N.align!=null?N.align-(R?1:0):N.offset-(R?k:0)},electricInput:/^\\s*([\\}\\]\\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:`'\"`},lineComment:\"#\",fold:\"indent\"};return y}),o.defineMIME(\"text/x-python\",\"python\");var s=function(h){return h.split(\" \")};o.defineMIME(\"text/x-cython\",{name:\"python\",extra_keywords:s(\"by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE\")})})});var qu=Ke((Au,Du)=>{(function(o){typeof Au==\"object\"&&typeof Du==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(g){for(var T={},w=0,c=g.length;w<c;++w)T[g[w]]=!0;return T}var v=[\"alias\",\"and\",\"BEGIN\",\"begin\",\"break\",\"case\",\"class\",\"def\",\"defined?\",\"do\",\"else\",\"elsif\",\"END\",\"end\",\"ensure\",\"false\",\"for\",\"if\",\"in\",\"module\",\"next\",\"not\",\"or\",\"redo\",\"rescue\",\"retry\",\"return\",\"self\",\"super\",\"then\",\"true\",\"undef\",\"unless\",\"until\",\"when\",\"while\",\"yield\",\"nil\",\"raise\",\"throw\",\"catch\",\"fail\",\"loop\",\"callcc\",\"caller\",\"lambda\",\"proc\",\"public\",\"protected\",\"private\",\"require\",\"load\",\"require_relative\",\"extend\",\"autoload\",\"__END__\",\"__FILE__\",\"__LINE__\",\"__dir__\"],C=p(v),b=p([\"def\",\"class\",\"case\",\"for\",\"while\",\"until\",\"module\",\"catch\",\"loop\",\"proc\",\"begin\"]),S=p([\"end\",\"until\"]),s={\"[\":\"]\",\"{\":\"}\",\"(\":\")\"},h={\"]\":\"[\",\"}\":\"{\",\")\":\"(\"};o.defineMode(\"ruby\",function(g){var T;function w(E,O,G){return G.tokenize.push(E),E(O,G)}function c(E,O){if(E.sol()&&E.match(\"=begin\")&&E.eol())return O.tokenize.push(W),\"comment\";if(E.eatSpace())return null;var G=E.next(),J;if(G==\"`\"||G==\"'\"||G=='\"')return w(M(G,\"string\",G=='\"'||G==\"`\"),E,O);if(G==\"/\")return d(E)?w(M(G,\"string-2\",!0),E,O):\"operator\";if(G==\"%\"){var re=\"string\",q=!0;E.eat(\"s\")?re=\"atom\":E.eat(/[WQ]/)?re=\"string\":E.eat(/[r]/)?re=\"string-2\":E.eat(/[wxq]/)&&(re=\"string\",q=!1);var I=E.eat(/[^\\w\\s=]/);return I?(s.propertyIsEnumerable(I)&&(I=s[I]),w(M(I,re,q,!0),E,O)):\"operator\"}else{if(G==\"#\")return E.skipToEnd(),\"comment\";if(G==\"<\"&&(J=E.match(/^<([-~])[\\`\\\"\\']?([a-zA-Z_?]\\w*)[\\`\\\"\\']?(?:;|$)/)))return w(_(J[2],J[1]),E,O);if(G==\"0\")return E.eat(\"x\")?E.eatWhile(/[\\da-fA-F]/):E.eat(\"b\")?E.eatWhile(/[01]/):E.eatWhile(/[0-7]/),\"number\";if(/\\d/.test(G))return E.match(/^[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+\\-]?[\\d_]+)?/),\"number\";if(G==\"?\"){for(;E.match(/^\\\\[CM]-/););return E.eat(\"\\\\\")?E.eatWhile(/\\w/):E.next(),\"string\"}else{if(G==\":\")return E.eat(\"'\")?w(M(\"'\",\"atom\",!1),E,O):E.eat('\"')?w(M('\"',\"atom\",!0),E,O):E.eat(/[\\<\\>]/)?(E.eat(/[\\<\\>]/),\"atom\"):E.eat(/[\\+\\-\\*\\/\\&\\|\\:\\!]/)?\"atom\":E.eat(/[a-zA-Z$@_\\xa1-\\uffff]/)?(E.eatWhile(/[\\w$\\xa1-\\uffff]/),E.eat(/[\\?\\!\\=]/),\"atom\"):\"operator\";if(G==\"@\"&&E.match(/^@?[a-zA-Z_\\xa1-\\uffff]/))return E.eat(\"@\"),E.eatWhile(/[\\w\\xa1-\\uffff]/),\"variable-2\";if(G==\"$\")return E.eat(/[a-zA-Z_]/)?E.eatWhile(/[\\w]/):E.eat(/\\d/)?E.eat(/\\d/):E.next(),\"variable-3\";if(/[a-zA-Z_\\xa1-\\uffff]/.test(G))return E.eatWhile(/[\\w\\xa1-\\uffff]/),E.eat(/[\\?\\!]/),E.eat(\":\")?\"atom\":\"ident\";if(G==\"|\"&&(O.varList||O.lastTok==\"{\"||O.lastTok==\"do\"))return T=\"|\",null;if(/[\\(\\)\\[\\]{}\\\\;]/.test(G))return T=G,null;if(G==\"-\"&&E.eat(\">\"))return\"arrow\";if(/[=+\\-\\/*:\\.^%<>~|]/.test(G)){var D=E.eatWhile(/[=+\\-\\/*:\\.^%<>~|]/);return G==\".\"&&!D&&(T=\".\"),\"operator\"}else return null}}}function d(E){for(var O=E.pos,G=0,J,re=!1,q=!1;(J=E.next())!=null;)if(q)q=!1;else{if(\"[{(\".indexOf(J)>-1)G++;else if(\"]})\".indexOf(J)>-1){if(G--,G<0)break}else if(J==\"/\"&&G==0){re=!0;break}q=J==\"\\\\\"}return E.backUp(E.pos-O),re}function k(E){return E||(E=1),function(O,G){if(O.peek()==\"}\"){if(E==1)return G.tokenize.pop(),G.tokenize[G.tokenize.length-1](O,G);G.tokenize[G.tokenize.length-1]=k(E-1)}else O.peek()==\"{\"&&(G.tokenize[G.tokenize.length-1]=k(E+1));return c(O,G)}}function z(){var E=!1;return function(O,G){return E?(G.tokenize.pop(),G.tokenize[G.tokenize.length-1](O,G)):(E=!0,c(O,G))}}function M(E,O,G,J){return function(re,q){var I=!1,D;for(q.context.type===\"read-quoted-paused\"&&(q.context=q.context.prev,re.eat(\"}\"));(D=re.next())!=null;){if(D==E&&(J||!I)){q.tokenize.pop();break}if(G&&D==\"#\"&&!I){if(re.eat(\"{\")){E==\"}\"&&(q.context={prev:q.context,type:\"read-quoted-paused\"}),q.tokenize.push(k());break}else if(/[@\\$]/.test(re.peek())){q.tokenize.push(z());break}}I=!I&&D==\"\\\\\"}return O}}function _(E,O){return function(G,J){return O&&G.eatSpace(),G.match(E)?J.tokenize.pop():G.skipToEnd(),\"string\"}}function W(E,O){return E.sol()&&E.match(\"=end\")&&E.eol()&&O.tokenize.pop(),E.skipToEnd(),\"comment\"}return{startState:function(){return{tokenize:[c],indented:0,context:{type:\"top\",indented:-g.indentUnit},continuedLine:!1,lastTok:null,varList:!1}},token:function(E,O){T=null,E.sol()&&(O.indented=E.indentation());var G=O.tokenize[O.tokenize.length-1](E,O),J,re=T;if(G==\"ident\"){var q=E.current();G=O.lastTok==\".\"?\"property\":C.propertyIsEnumerable(E.current())?\"keyword\":/^[A-Z]/.test(q)?\"tag\":O.lastTok==\"def\"||O.lastTok==\"class\"||O.varList?\"def\":\"variable\",G==\"keyword\"&&(re=q,b.propertyIsEnumerable(q)?J=\"indent\":S.propertyIsEnumerable(q)?J=\"dedent\":((q==\"if\"||q==\"unless\")&&E.column()==E.indentation()||q==\"do\"&&O.context.indented<O.indented)&&(J=\"indent\"))}return(T||G&&G!=\"comment\")&&(O.lastTok=re),T==\"|\"&&(O.varList=!O.varList),J==\"indent\"||/[\\(\\[\\{]/.test(T)?O.context={prev:O.context,type:T||G,indented:O.indented}:(J==\"dedent\"||/[\\)\\]\\}]/.test(T))&&O.context.prev&&(O.context=O.context.prev),E.eol()&&(O.continuedLine=T==\"\\\\\"||G==\"operator\"),G},indent:function(E,O){if(E.tokenize[E.tokenize.length-1]!=c)return o.Pass;var G=O&&O.charAt(0),J=E.context,re=J.type==h[G]||J.type==\"keyword\"&&/^(?:end|until|else|elsif|when|rescue)\\b/.test(O);return J.indented+(re?0:g.indentUnit)+(E.continuedLine?g.indentUnit:0)},electricInput:/^\\s*(?:end|rescue|elsif|else|\\})$/,lineComment:\"#\",fold:\"indent\"}}),o.defineMIME(\"text/x-ruby\",\"ruby\"),o.registerHelper(\"hintWords\",\"ruby\",v)})});var Nu=Ke((Fu,Iu)=>{(function(o){typeof Fu==\"object\"&&typeof Iu==\"object\"?o(We(),Di()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../../addon/mode/simple\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineSimpleMode(\"rust\",{start:[{regex:/b?\"/,token:\"string\",next:\"string\"},{regex:/b?r\"/,token:\"string\",next:\"string_raw\"},{regex:/b?r#+\"/,token:\"string\",next:\"string_raw_hash\"},{regex:/'(?:[^'\\\\]|\\\\(?:[nrt0'\"]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\}))'/,token:\"string-2\"},{regex:/b'(?:[^']|\\\\(?:['\\\\nrt0]|x[\\da-fA-F]{2}))'/,token:\"string-2\"},{regex:/(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/,token:\"number\"},{regex:/(let(?:\\s+mut)?|fn|enum|mod|struct|type|union)(\\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:[\"keyword\",null,\"def\"]},{regex:/(?:abstract|alignof|as|async|await|box|break|continue|const|crate|do|dyn|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b/,token:\"keyword\"},{regex:/\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\\b/,token:\"atom\"},{regex:/\\b(?:true|false|Some|None|Ok|Err)\\b/,token:\"builtin\"},{regex:/\\b(fn)(\\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:[\"keyword\",null,\"def\"]},{regex:/#!?\\[.*\\]/,token:\"meta\"},{regex:/\\/\\/.*/,token:\"comment\"},{regex:/\\/\\*/,token:\"comment\",next:\"comment\"},{regex:/[-+\\/*=<>!]+/,token:\"operator\"},{regex:/[a-zA-Z_]\\w*!/,token:\"variable-3\"},{regex:/[a-zA-Z_]\\w*/,token:\"variable\"},{regex:/[\\{\\[\\(]/,indent:!0},{regex:/[\\}\\]\\)]/,dedent:!0}],string:[{regex:/\"/,token:\"string\",next:\"start\"},{regex:/(?:[^\\\\\"]|\\\\(?:.|$))*/,token:\"string\"}],string_raw:[{regex:/\"/,token:\"string\",next:\"start\"},{regex:/[^\"]*/,token:\"string\"}],string_raw_hash:[{regex:/\"#+/,token:\"string\",next:\"start\"},{regex:/(?:[^\"]|\"(?!#))*/,token:\"string\"}],comment:[{regex:/.*?\\*\\//,token:\"comment\",next:\"start\"},{regex:/.*/,token:\"comment\"}],meta:{dontIndentStates:[\"comment\"],electricInput:/^\\s*\\}$/,blockCommentStart:\"/*\",blockCommentEnd:\"*/\",lineComment:\"//\",fold:\"brace\"}}),o.defineMIME(\"text/x-rustsrc\",\"rust\"),o.defineMIME(\"text/rust\",\"rust\")})});var ea=Ke((Ou,Pu)=>{(function(o){typeof Ou==\"object\"&&typeof Pu==\"object\"?o(We(),gn()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../css/css\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"sass\",function(p){var v=o.mimeModes[\"text/css\"],C=v.propertyKeywords||{},b=v.colorKeywords||{},S=v.valueKeywords||{},s=v.fontProperties||{};function h(q){return new RegExp(\"^\"+q.join(\"|\"))}var g=[\"true\",\"false\",\"null\",\"auto\"],T=new RegExp(\"^\"+g.join(\"|\")),w=[\"\\\\(\",\"\\\\)\",\"=\",\">\",\"<\",\"==\",\">=\",\"<=\",\"\\\\+\",\"-\",\"\\\\!=\",\"/\",\"\\\\*\",\"%\",\"and\",\"or\",\"not\",\";\",\"\\\\{\",\"\\\\}\",\":\"],c=h(w),d=/^::?[a-zA-Z_][\\w\\-]*/,k;function z(q){return!q.peek()||q.match(/\\s+$/,!1)}function M(q,I){var D=q.peek();return D===\")\"?(q.next(),I.tokenizer=J,\"operator\"):D===\"(\"?(q.next(),q.eatSpace(),\"operator\"):D===\"'\"||D==='\"'?(I.tokenizer=W(q.next()),\"string\"):(I.tokenizer=W(\")\",!1),\"string\")}function _(q,I){return function(D,Q){return D.sol()&&D.indentation()<=q?(Q.tokenizer=J,J(D,Q)):(I&&D.skipTo(\"*/\")?(D.next(),D.next(),Q.tokenizer=J):D.skipToEnd(),\"comment\")}}function W(q,I){I==null&&(I=!0);function D(Q,j){var V=Q.next(),y=Q.peek(),K=Q.string.charAt(Q.pos-2),X=V!==\"\\\\\"&&y===q||V===q&&K!==\"\\\\\";return X?(V!==q&&I&&Q.next(),z(Q)&&(j.cursorHalf=0),j.tokenizer=J,\"string\"):V===\"#\"&&y===\"{\"?(j.tokenizer=E(D),Q.next(),\"operator\"):\"string\"}return D}function E(q){return function(I,D){return I.peek()===\"}\"?(I.next(),D.tokenizer=q,\"operator\"):J(I,D)}}function O(q){if(q.indentCount==0){q.indentCount++;var I=q.scopes[0].offset,D=I+p.indentUnit;q.scopes.unshift({offset:D})}}function G(q){q.scopes.length!=1&&q.scopes.shift()}function J(q,I){var D=q.peek();if(q.match(\"/*\"))return I.tokenizer=_(q.indentation(),!0),I.tokenizer(q,I);if(q.match(\"//\"))return I.tokenizer=_(q.indentation(),!1),I.tokenizer(q,I);if(q.match(\"#{\"))return I.tokenizer=E(J),\"operator\";if(D==='\"'||D===\"'\")return q.next(),I.tokenizer=W(D),\"string\";if(I.cursorHalf){if(D===\"#\"&&(q.next(),q.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/))||q.match(/^-?[0-9\\.]+/))return z(q)&&(I.cursorHalf=0),\"number\";if(q.match(/^(px|em|in)\\b/))return z(q)&&(I.cursorHalf=0),\"unit\";if(q.match(T))return z(q)&&(I.cursorHalf=0),\"keyword\";if(q.match(/^url/)&&q.peek()===\"(\")return I.tokenizer=M,z(q)&&(I.cursorHalf=0),\"atom\";if(D===\"$\")return q.next(),q.eatWhile(/[\\w-]/),z(q)&&(I.cursorHalf=0),\"variable-2\";if(D===\"!\")return q.next(),I.cursorHalf=0,q.match(/^[\\w]+/)?\"keyword\":\"operator\";if(q.match(c))return z(q)&&(I.cursorHalf=0),\"operator\";if(q.eatWhile(/[\\w-]/))return z(q)&&(I.cursorHalf=0),k=q.current().toLowerCase(),S.hasOwnProperty(k)?\"atom\":b.hasOwnProperty(k)?\"keyword\":C.hasOwnProperty(k)?(I.prevProp=q.current().toLowerCase(),\"property\"):\"tag\";if(z(q))return I.cursorHalf=0,null}else{if(D===\"-\"&&q.match(/^-\\w+-/))return\"meta\";if(D===\".\"){if(q.next(),q.match(/^[\\w-]+/))return O(I),\"qualifier\";if(q.peek()===\"#\")return O(I),\"tag\"}if(D===\"#\"){if(q.next(),q.match(/^[\\w-]+/))return O(I),\"builtin\";if(q.peek()===\"#\")return O(I),\"tag\"}if(D===\"$\")return q.next(),q.eatWhile(/[\\w-]/),\"variable-2\";if(q.match(/^-?[0-9\\.]+/))return\"number\";if(q.match(/^(px|em|in)\\b/))return\"unit\";if(q.match(T))return\"keyword\";if(q.match(/^url/)&&q.peek()===\"(\")return I.tokenizer=M,\"atom\";if(D===\"=\"&&q.match(/^=[\\w-]+/))return O(I),\"meta\";if(D===\"+\"&&q.match(/^\\+[\\w-]+/))return\"variable-3\";if(D===\"@\"&&q.match(\"@extend\")&&(q.match(/\\s*[\\w]/)||G(I)),q.match(/^@(else if|if|media|else|for|each|while|mixin|function)/))return O(I),\"def\";if(D===\"@\")return q.next(),q.eatWhile(/[\\w-]/),\"def\";if(q.eatWhile(/[\\w-]/))if(q.match(/ *: *[\\w-\\+\\$#!\\(\"']/,!1)){k=q.current().toLowerCase();var Q=I.prevProp+\"-\"+k;return C.hasOwnProperty(Q)?\"property\":C.hasOwnProperty(k)?(I.prevProp=k,\"property\"):s.hasOwnProperty(k)?\"property\":\"tag\"}else return q.match(/ *:/,!1)?(O(I),I.cursorHalf=1,I.prevProp=q.current().toLowerCase(),\"property\"):(q.match(/ *,/,!1)||O(I),\"tag\");if(D===\":\")return q.match(d)?\"variable-3\":(q.next(),I.cursorHalf=1,\"operator\")}return q.match(c)?\"operator\":(q.next(),null)}function re(q,I){q.sol()&&(I.indentCount=0);var D=I.tokenizer(q,I),Q=q.current();if((Q===\"@return\"||Q===\"}\")&&G(I),D!==null){for(var j=q.pos-Q.length,V=j+p.indentUnit*I.indentCount,y=[],K=0;K<I.scopes.length;K++){var X=I.scopes[K];X.offset<=V&&y.push(X)}I.scopes=y}return D}return{startState:function(){return{tokenizer:J,scopes:[{offset:0,type:\"sass\"}],indentCount:0,cursorHalf:0,definedVars:[],definedMixins:[]}},token:function(q,I){var D=re(q,I);return I.lastToken={style:D,content:q.current()},D},indent:function(q){return q.scopes[0].offset},blockCommentStart:\"/*\",blockCommentEnd:\"*/\",lineComment:\"//\",fold:\"indent\"}},\"css\"),o.defineMIME(\"text/x-sass\",\"sass\")})});var Ru=Ke((Bu,ju)=>{(function(o){typeof Bu==\"object\"&&typeof ju==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"shell\",function(){var p={};function v(d,k){for(var z=0;z<k.length;z++)p[k[z]]=d}var C=[\"true\",\"false\"],b=[\"if\",\"then\",\"do\",\"else\",\"elif\",\"while\",\"until\",\"for\",\"in\",\"esac\",\"fi\",\"fin\",\"fil\",\"done\",\"exit\",\"set\",\"unset\",\"export\",\"function\"],S=[\"ab\",\"awk\",\"bash\",\"beep\",\"cat\",\"cc\",\"cd\",\"chown\",\"chmod\",\"chroot\",\"clear\",\"cp\",\"curl\",\"cut\",\"diff\",\"echo\",\"find\",\"gawk\",\"gcc\",\"get\",\"git\",\"grep\",\"hg\",\"kill\",\"killall\",\"ln\",\"ls\",\"make\",\"mkdir\",\"openssl\",\"mv\",\"nc\",\"nl\",\"node\",\"npm\",\"ping\",\"ps\",\"restart\",\"rm\",\"rmdir\",\"sed\",\"service\",\"sh\",\"shopt\",\"shred\",\"source\",\"sort\",\"sleep\",\"ssh\",\"start\",\"stop\",\"su\",\"sudo\",\"svn\",\"tee\",\"telnet\",\"top\",\"touch\",\"vi\",\"vim\",\"wall\",\"wc\",\"wget\",\"who\",\"write\",\"yes\",\"zsh\"];o.registerHelper(\"hintWords\",\"shell\",C.concat(b,S)),v(\"atom\",C),v(\"keyword\",b),v(\"builtin\",S);function s(d,k){if(d.eatSpace())return null;var z=d.sol(),M=d.next();if(M===\"\\\\\")return d.next(),null;if(M===\"'\"||M==='\"'||M===\"`\")return k.tokens.unshift(h(M,M===\"`\"?\"quote\":\"string\")),c(d,k);if(M===\"#\")return z&&d.eat(\"!\")?(d.skipToEnd(),\"meta\"):(d.skipToEnd(),\"comment\");if(M===\"$\")return k.tokens.unshift(T),c(d,k);if(M===\"+\"||M===\"=\")return\"operator\";if(M===\"-\")return d.eat(\"-\"),d.eatWhile(/\\w/),\"attribute\";if(M==\"<\"){if(d.match(\"<<\"))return\"operator\";var _=d.match(/^<-?\\s*['\"]?([^'\"]*)['\"]?/);if(_)return k.tokens.unshift(w(_[1])),\"string-2\"}if(/\\d/.test(M)&&(d.eatWhile(/\\d/),d.eol()||!/\\w/.test(d.peek())))return\"number\";d.eatWhile(/[\\w-]/);var W=d.current();return d.peek()===\"=\"&&/\\w+/.test(W)?\"def\":p.hasOwnProperty(W)?p[W]:null}function h(d,k){var z=d==\"(\"?\")\":d==\"{\"?\"}\":d;return function(M,_){for(var W,E=!1;(W=M.next())!=null;){if(W===z&&!E){_.tokens.shift();break}else if(W===\"$\"&&!E&&d!==\"'\"&&M.peek()!=z){E=!0,M.backUp(1),_.tokens.unshift(T);break}else{if(!E&&d!==z&&W===d)return _.tokens.unshift(h(d,k)),c(M,_);if(!E&&/['\"]/.test(W)&&!/['\"]/.test(d)){_.tokens.unshift(g(W,\"string\")),M.backUp(1);break}}E=!E&&W===\"\\\\\"}return k}}function g(d,k){return function(z,M){return M.tokens[0]=h(d,k),z.next(),c(z,M)}}var T=function(d,k){k.tokens.length>1&&d.eat(\"$\");var z=d.next();return/['\"({]/.test(z)?(k.tokens[0]=h(z,z==\"(\"?\"quote\":z==\"{\"?\"def\":\"string\"),c(d,k)):(/\\d/.test(z)||d.eatWhile(/\\w/),k.tokens.shift(),\"def\")};function w(d){return function(k,z){return k.sol()&&k.string==d&&z.tokens.shift(),k.skipToEnd(),\"string-2\"}}function c(d,k){return(k.tokens[0]||s)(d,k)}return{startState:function(){return{tokens:[]}},token:function(d,k){return c(d,k)},closeBrackets:\"()[]{}''\\\"\\\"``\",lineComment:\"#\",fold:\"brace\"}}),o.defineMIME(\"text/x-sh\",\"shell\"),o.defineMIME(\"application/x-sh\",\"shell\")})});var Uu=Ke((Hu,Wu)=>{(function(o){typeof Hu==\"object\"&&typeof Wu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"sql\",function(g,T){var w=T.client||{},c=T.atoms||{false:!0,true:!0,null:!0},d=T.builtin||s(h),k=T.keywords||s(S),z=T.operatorChars||/^[*+\\-%<>!=&|~^\\/]/,M=T.support||{},_=T.hooks||{},W=T.dateSQL||{date:!0,time:!0,timestamp:!0},E=T.backslashStringEscapes!==!1,O=T.brackets||/^[\\{}\\(\\)\\[\\]]/,G=T.punctuation||/^[;.,:]/;function J(Q,j){var V=Q.next();if(_[V]){var y=_[V](Q,j);if(y!==!1)return y}if(M.hexNumber&&(V==\"0\"&&Q.match(/^[xX][0-9a-fA-F]+/)||(V==\"x\"||V==\"X\")&&Q.match(/^'[0-9a-fA-F]*'/)))return\"number\";if(M.binaryNumber&&((V==\"b\"||V==\"B\")&&Q.match(/^'[01]*'/)||V==\"0\"&&Q.match(/^b[01]+/)))return\"number\";if(V.charCodeAt(0)>47&&V.charCodeAt(0)<58)return Q.match(/^[0-9]*(\\.[0-9]+)?([eE][-+]?[0-9]+)?/),M.decimallessFloat&&Q.match(/^\\.(?!\\.)/),\"number\";if(V==\"?\"&&(Q.eatSpace()||Q.eol()||Q.eat(\";\")))return\"variable-3\";if(V==\"'\"||V=='\"'&&M.doubleQuote)return j.tokenize=re(V),j.tokenize(Q,j);if((M.nCharCast&&(V==\"n\"||V==\"N\")||M.charsetCast&&V==\"_\"&&Q.match(/[a-z][a-z0-9]*/i))&&(Q.peek()==\"'\"||Q.peek()=='\"'))return\"keyword\";if(M.escapeConstant&&(V==\"e\"||V==\"E\")&&(Q.peek()==\"'\"||Q.peek()=='\"'&&M.doubleQuote))return j.tokenize=function(X,N){return(N.tokenize=re(X.next(),!0))(X,N)},\"keyword\";if(M.commentSlashSlash&&V==\"/\"&&Q.eat(\"/\"))return Q.skipToEnd(),\"comment\";if(M.commentHash&&V==\"#\"||V==\"-\"&&Q.eat(\"-\")&&(!M.commentSpaceRequired||Q.eat(\" \")))return Q.skipToEnd(),\"comment\";if(V==\"/\"&&Q.eat(\"*\"))return j.tokenize=q(1),j.tokenize(Q,j);if(V==\".\"){if(M.zerolessFloat&&Q.match(/^(?:\\d+(?:e[+-]?\\d+)?)/i))return\"number\";if(Q.match(/^\\.+/))return null;if(Q.match(/^[\\w\\d_$#]+/))return\"variable-2\"}else{if(z.test(V))return Q.eatWhile(z),\"operator\";if(O.test(V))return\"bracket\";if(G.test(V))return Q.eatWhile(G),\"punctuation\";if(V==\"{\"&&(Q.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||Q.match(/^( )*(d|D|t|T|ts|TS)( )*\"[^\"]*\"( )*}/)))return\"number\";Q.eatWhile(/^[_\\w\\d]/);var K=Q.current().toLowerCase();return W.hasOwnProperty(K)&&(Q.match(/^( )+'[^']*'/)||Q.match(/^( )+\"[^\"]*\"/))?\"number\":c.hasOwnProperty(K)?\"atom\":d.hasOwnProperty(K)?\"type\":k.hasOwnProperty(K)?\"keyword\":w.hasOwnProperty(K)?\"builtin\":null}}function re(Q,j){return function(V,y){for(var K=!1,X;(X=V.next())!=null;){if(X==Q&&!K){y.tokenize=J;break}K=(E||j)&&!K&&X==\"\\\\\"}return\"string\"}}function q(Q){return function(j,V){var y=j.match(/^.*?(\\/\\*|\\*\\/)/);return y?y[1]==\"/*\"?V.tokenize=q(Q+1):Q>1?V.tokenize=q(Q-1):V.tokenize=J:j.skipToEnd(),\"comment\"}}function I(Q,j,V){j.context={prev:j.context,indent:Q.indentation(),col:Q.column(),type:V}}function D(Q){Q.indent=Q.context.indent,Q.context=Q.context.prev}return{startState:function(){return{tokenize:J,context:null}},token:function(Q,j){if(Q.sol()&&j.context&&j.context.align==null&&(j.context.align=!1),j.tokenize==J&&Q.eatSpace())return null;var V=j.tokenize(Q,j);if(V==\"comment\")return V;j.context&&j.context.align==null&&(j.context.align=!0);var y=Q.current();return y==\"(\"?I(Q,j,\")\"):y==\"[\"?I(Q,j,\"]\"):j.context&&j.context.type==y&&D(j),V},indent:function(Q,j){var V=Q.context;if(!V)return o.Pass;var y=j.charAt(0)==V.type;return V.align?V.col+(y?0:1):V.indent+(y?0:g.indentUnit)},blockCommentStart:\"/*\",blockCommentEnd:\"*/\",lineComment:M.commentSlashSlash?\"//\":M.commentHash?\"#\":\"--\",closeBrackets:\"()[]{}''\\\"\\\"``\",config:T}});function p(g){for(var T;(T=g.next())!=null;)if(T==\"`\"&&!g.eat(\"`\"))return\"variable-2\";return g.backUp(g.current().length-1),g.eatWhile(/\\w/)?\"variable-2\":null}function v(g){for(var T;(T=g.next())!=null;)if(T=='\"'&&!g.eat('\"'))return\"variable-2\";return g.backUp(g.current().length-1),g.eatWhile(/\\w/)?\"variable-2\":null}function C(g){return g.eat(\"@\")&&(g.match(\"session.\"),g.match(\"local.\"),g.match(\"global.\")),g.eat(\"'\")?(g.match(/^.*'/),\"variable-2\"):g.eat('\"')?(g.match(/^.*\"/),\"variable-2\"):g.eat(\"`\")?(g.match(/^.*`/),\"variable-2\"):g.match(/^[0-9a-zA-Z$\\.\\_]+/)?\"variable-2\":null}function b(g){return g.eat(\"N\")?\"atom\":g.match(/^[a-zA-Z.#!?]/)?\"variable-2\":null}var S=\"alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit \";function s(g){for(var T={},w=g.split(\" \"),c=0;c<w.length;++c)T[w[c]]=!0;return T}var h=\"bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric\";o.defineMIME(\"text/x-sql\",{name:\"sql\",keywords:s(S+\"begin\"),builtin:s(h),atoms:s(\"false true null unknown\"),dateSQL:s(\"date time timestamp\"),support:s(\"doubleQuote binaryNumber hexNumber\")}),o.defineMIME(\"text/x-mssql\",{name:\"sql\",client:s(\"$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id\"),keywords:s(S+\"begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with\"),builtin:s(\"bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table \"),atoms:s(\"is not null like and or in left right between inner outer join all any some cross unpivot pivot exists\"),operatorChars:/^[*+\\-%<>!=^\\&|\\/]/,brackets:/^[\\{}\\(\\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:s(\"date datetimeoffset datetime2 smalldatetime datetime time\"),hooks:{\"@\":C}}),o.defineMIME(\"text/x-mysql\",{name:\"sql\",client:s(\"charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee\"),keywords:s(S+\"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat\"),builtin:s(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric\"),atoms:s(\"false true null unknown\"),operatorChars:/^[*+\\-%<>!=&|^]/,dateSQL:s(\"date time timestamp\"),support:s(\"decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired\"),hooks:{\"@\":C,\"`\":p,\"\\\\\":b}}),o.defineMIME(\"text/x-mariadb\",{name:\"sql\",client:s(\"charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee\"),keywords:s(S+\"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat\"),builtin:s(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric\"),atoms:s(\"false true null unknown\"),operatorChars:/^[*+\\-%<>!=&|^]/,dateSQL:s(\"date time timestamp\"),support:s(\"decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired\"),hooks:{\"@\":C,\"`\":p,\"\\\\\":b}}),o.defineMIME(\"text/x-sqlite\",{name:\"sql\",client:s(\"auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width\"),keywords:s(S+\"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without\"),builtin:s(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real\"),atoms:s(\"null current_date current_time current_timestamp\"),operatorChars:/^[*+\\-%<>!=&|/~]/,dateSQL:s(\"date time timestamp datetime\"),support:s(\"decimallessFloat zerolessFloat\"),identifierQuote:'\"',hooks:{\"@\":C,\":\":C,\"?\":C,$:C,'\"':v,\"`\":p}}),o.defineMIME(\"text/x-cassandra\",{name:\"sql\",client:{},keywords:s(\"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime\"),builtin:s(\"ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint\"),atoms:s(\"false true infinity NaN\"),operatorChars:/^[<>=]/,dateSQL:{},support:s(\"commentSlashSlash decimallessFloat\"),hooks:{}}),o.defineMIME(\"text/x-plsql\",{name:\"sql\",client:s(\"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap\"),keywords:s(\"abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work\"),builtin:s(\"abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml\"),operatorChars:/^[*\\/+\\-%<>!=~]/,dateSQL:s(\"date time timestamp\"),support:s(\"doubleQuote nCharCast zerolessFloat binaryNumber hexNumber\")}),o.defineMIME(\"text/x-hive\",{name:\"sql\",keywords:s(\"select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year\"),builtin:s(\"bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar\"),atoms:s(\"false true null unknown\"),operatorChars:/^[*+\\-%<>!=]/,dateSQL:s(\"date timestamp\"),support:s(\"doubleQuote binaryNumber hexNumber\")}),o.defineMIME(\"text/x-pgsql\",{name:\"sql\",client:s(\"source\"),keywords:s(S+\"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone\"),builtin:s(\"bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time zone timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml\"),atoms:s(\"false true null unknown\"),operatorChars:/^[*\\/+\\-%<>!=&|^\\/#@?~]/,backslashStringEscapes:!1,identifierQuote:'\"',hooks:{'\"':v},dateSQL:s(\"date time timestamp\"),support:s(\"decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant\")}),o.defineMIME(\"text/x-gql\",{name:\"sql\",keywords:s(\"ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where\"),atoms:s(\"false true\"),builtin:s(\"blob datetime first key __key__ string integer double boolean null\"),operatorChars:/^[*+\\-%<>!=]/}),o.defineMIME(\"text/x-gpsql\",{name:\"sql\",client:s(\"source\"),keywords:s(\"abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone\"),builtin:s(\"bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml\"),atoms:s(\"false true null unknown\"),operatorChars:/^[*+\\-%<>!=&|^\\/#@?~]/,dateSQL:s(\"date time timestamp\"),support:s(\"decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast\")}),o.defineMIME(\"text/x-sparksql\",{name:\"sql\",keywords:s(\"add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with\"),builtin:s(\"abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with\"),atoms:s(\"false true null\"),operatorChars:/^[*\\/+\\-%<>!=~&|^]/,dateSQL:s(\"date time timestamp\"),support:s(\"doubleQuote zerolessFloat\")}),o.defineMIME(\"text/x-esper\",{name:\"sql\",client:s(\"source\"),keywords:s(\"alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window\"),builtin:{},atoms:s(\"false true null\"),operatorChars:/^[*+\\-%<>!=&|^\\/#@?~]/,dateSQL:s(\"time\"),support:s(\"decimallessFloat zerolessFloat binaryNumber hexNumber\")}),o.defineMIME(\"text/x-trino\",{name:\"sql\",keywords:s(\"abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with\"),builtin:s(\"array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone\"),atoms:s(\"false true null unknown\"),operatorChars:/^[[\\]|<>=!\\-+*/%]/,dateSQL:s(\"date time timestamp zone\"),support:s(\"decimallessFloat zerolessFloat hexNumber\")})})});var ta=Ke(($u,Ku)=>{(function(o){typeof $u==\"object\"&&typeof Ku==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"stylus\",function(E){for(var O=E.indentUnit,G=\"\",J=_(p),re=/^(a|b|i|s|col|em)$/i,q=_(S),I=_(s),D=_(T),Q=_(g),j=_(v),V=M(v),y=_(b),K=_(C),X=_(h),N=/^\\s*([.]{2,3}|&&|\\|\\||\\*\\*|[?!=:]?=|[-+*\\/%<>]=?|\\?:|\\~)/,R=M(w),le=_(c),xe=new RegExp(/^\\-(moz|ms|o|webkit)-/i),F=_(d),L=\"\",de={},ze,pe,Ee,ge;G.length<O;)G+=\" \";function Oe($,H){if(L=$.string.match(/(^[\\w-]+\\s*=\\s*$)|(^\\s*[\\w-]+\\s*=\\s*[\\w-])|(^\\s*(\\.|#|@|\\$|\\&|\\[|\\d|\\+|::?|\\{|\\>|~|\\/)?\\s*[\\w-]*([a-z0-9-]|\\*|\\/\\*)(\\(|,)?)/),H.context.line.firstWord=L?L[0].replace(/^\\s*/,\"\"):\"\",H.context.line.indent=$.indentation(),ze=$.peek(),$.match(\"//\"))return $.skipToEnd(),[\"comment\",\"comment\"];if($.match(\"/*\"))return H.tokenize=qe,qe($,H);if(ze=='\"'||ze==\"'\")return $.next(),H.tokenize=Se(ze),H.tokenize($,H);if(ze==\"@\")return $.next(),$.eatWhile(/[\\w\\\\-]/),[\"def\",$.current()];if(ze==\"#\"){if($.next(),$.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\\b(?!-)/i))return[\"atom\",\"atom\"];if($.match(/^[a-z][\\w-]*/i))return[\"builtin\",\"hash\"]}return $.match(xe)?[\"meta\",\"vendor-prefixes\"]:$.match(/^-?[0-9]?\\.?[0-9]/)?($.eatWhile(/[a-z%]/i),[\"number\",\"unit\"]):ze==\"!\"?($.next(),[$.match(/^(important|optional)/i)?\"keyword\":\"operator\",\"important\"]):ze==\".\"&&$.match(/^\\.[a-z][\\w-]*/i)?[\"qualifier\",\"qualifier\"]:$.match(V)?($.peek()==\"(\"&&(H.tokenize=Be),[\"property\",\"word\"]):$.match(/^[a-z][\\w-]*\\(/i)?($.backUp(1),[\"keyword\",\"mixin\"]):$.match(/^(\\+|-)[a-z][\\w-]*\\(/i)?($.backUp(1),[\"keyword\",\"block-mixin\"]):$.string.match(/^\\s*&/)&&$.match(/^[-_]+[a-z][\\w-]*/)?[\"qualifier\",\"qualifier\"]:$.match(/^(\\/|&)(-|_|:|\\.|#|[a-z])/)?($.backUp(1),[\"variable-3\",\"reference\"]):$.match(/^&{1}\\s*$/)?[\"variable-3\",\"reference\"]:$.match(R)?[\"operator\",\"operator\"]:$.match(/^\\$?[-_]*[a-z0-9]+[\\w-]*/i)?$.match(/^(\\.|\\[)[\\w-\\'\\\"\\]]+/i,!1)&&!U($.current())?($.match(\".\"),[\"variable-2\",\"variable-name\"]):[\"variable-2\",\"word\"]:$.match(N)?[\"operator\",$.current()]:/[:;,{}\\[\\]\\(\\)]/.test(ze)?($.next(),[null,ze]):($.next(),[null,null])}function qe($,H){for(var se=!1,De;(De=$.next())!=null;){if(se&&De==\"/\"){H.tokenize=null;break}se=De==\"*\"}return[\"comment\",\"comment\"]}function Se($){return function(H,se){for(var De=!1,nt;(nt=H.next())!=null;){if(nt==$&&!De){$==\")\"&&H.backUp(1);break}De=!De&&nt==\"\\\\\"}return(nt==$||!De&&$!=\")\")&&(se.tokenize=null),[\"string\",\"string\"]}}function Be($,H){return $.next(),$.match(/\\s*[\\\"\\')]/,!1)?H.tokenize=null:H.tokenize=Se(\")\"),[null,\"(\"]}function Ze($,H,se,De){this.type=$,this.indent=H,this.prev=se,this.line=De||{firstWord:\"\",indent:0}}function ke($,H,se,De){return De=De>=0?De:O,$.context=new Ze(se,H.indentation()+De,$.context),se}function Je($,H){var se=$.context.indent-O;return H=H||!1,$.context=$.context.prev,H&&($.context.indent=se),$.context.type}function Re($,H,se){return de[se.context.type]($,H,se)}function Ge($,H,se,De){for(var nt=De||1;nt>0;nt--)se.context=se.context.prev;return Re($,H,se)}function U($){return $.toLowerCase()in J}function Z($){return $=$.toLowerCase(),$ in q||$ in X}function ce($){return $.toLowerCase()in le}function He($){return $.toLowerCase().match(xe)}function te($){var H=$.toLowerCase(),se=\"variable-2\";return U($)?se=\"tag\":ce($)?se=\"block-keyword\":Z($)?se=\"property\":H in D||H in F?se=\"atom\":H==\"return\"||H in Q?se=\"keyword\":$.match(/^[A-Z]/)&&(se=\"string\"),se}function fe($,H){return Me(H)&&($==\"{\"||$==\"]\"||$==\"hash\"||$==\"qualifier\")||$==\"block-mixin\"}function oe($,H){return $==\"{\"&&H.match(/^\\s*\\$?[\\w-]+/i,!1)}function Ue($,H){return $==\":\"&&H.match(/^[a-z-]+/,!1)}function we($){return $.sol()||$.string.match(new RegExp(\"^\\\\s*\"+W($.current())))}function Me($){return $.eol()||$.match(/^\\s*$/,!1)}function Le($){var H=/^\\s*[-_]*[a-z0-9]+[\\w-]*/i,se=typeof $==\"string\"?$.match(H):$.string.match(H);return se?se[0].replace(/^\\s*/,\"\"):\"\"}return de.block=function($,H,se){if($==\"comment\"&&we(H)||$==\",\"&&Me(H)||$==\"mixin\")return ke(se,H,\"block\",0);if(oe($,H))return ke(se,H,\"interpolation\");if(Me(H)&&$==\"]\"&&!/^\\s*(\\.|#|:|\\[|\\*|&)/.test(H.string)&&!U(Le(H)))return ke(se,H,\"block\",0);if(fe($,H))return ke(se,H,\"block\");if($==\"}\"&&Me(H))return ke(se,H,\"block\",0);if($==\"variable-name\")return H.string.match(/^\\s?\\$[\\w-\\.\\[\\]\\'\\\"]+$/)||ce(Le(H))?ke(se,H,\"variableName\"):ke(se,H,\"variableName\",0);if($==\"=\")return!Me(H)&&!ce(Le(H))?ke(se,H,\"block\",0):ke(se,H,\"block\");if($==\"*\"&&(Me(H)||H.match(/\\s*(,|\\.|#|\\[|:|{)/,!1)))return ge=\"tag\",ke(se,H,\"block\");if(Ue($,H))return ke(se,H,\"pseudo\");if(/@(font-face|media|supports|(-moz-)?document)/.test($))return ke(se,H,Me(H)?\"block\":\"atBlock\");if(/@(-(moz|ms|o|webkit)-)?keyframes$/.test($))return ke(se,H,\"keyframes\");if(/@extends?/.test($))return ke(se,H,\"extend\",0);if($&&$.charAt(0)==\"@\")return H.indentation()>0&&Z(H.current().slice(1))?(ge=\"variable-2\",\"block\"):/(@import|@require|@charset)/.test($)?ke(se,H,\"block\",0):ke(se,H,\"block\");if($==\"reference\"&&Me(H))return ke(se,H,\"block\");if($==\"(\")return ke(se,H,\"parens\");if($==\"vendor-prefixes\")return ke(se,H,\"vendorPrefixes\");if($==\"word\"){var De=H.current();if(ge=te(De),ge==\"property\")return we(H)?ke(se,H,\"block\",0):(ge=\"atom\",\"block\");if(ge==\"tag\"){if(/embed|menu|pre|progress|sub|table/.test(De)&&Z(Le(H))||H.string.match(new RegExp(\"\\\\[\\\\s*\"+De+\"|\"+De+\"\\\\s*\\\\]\")))return ge=\"atom\",\"block\";if(re.test(De)&&(we(H)&&H.string.match(/=/)||!we(H)&&!H.string.match(/^(\\s*\\.|#|\\&|\\[|\\/|>|\\*)/)&&!U(Le(H))))return ge=\"variable-2\",ce(Le(H))?\"block\":ke(se,H,\"block\",0);if(Me(H))return ke(se,H,\"block\")}if(ge==\"block-keyword\")return ge=\"keyword\",H.current(/(if|unless)/)&&!we(H)?\"block\":ke(se,H,\"block\");if(De==\"return\")return ke(se,H,\"block\",0);if(ge==\"variable-2\"&&H.string.match(/^\\s?\\$[\\w-\\.\\[\\]\\'\\\"]+$/))return ke(se,H,\"block\")}return se.context.type},de.parens=function($,H,se){if($==\"(\")return ke(se,H,\"parens\");if($==\")\")return se.context.prev.type==\"parens\"?Je(se):H.string.match(/^[a-z][\\w-]*\\(/i)&&Me(H)||ce(Le(H))||/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(Le(H))||!H.string.match(/^-?[a-z][\\w-\\.\\[\\]\\'\\\"]*\\s*=/)&&U(Le(H))?ke(se,H,\"block\"):H.string.match(/^[\\$-]?[a-z][\\w-\\.\\[\\]\\'\\\"]*\\s*=/)||H.string.match(/^\\s*(\\(|\\)|[0-9])/)||H.string.match(/^\\s+[a-z][\\w-]*\\(/i)||H.string.match(/^\\s+[\\$-]?[a-z]/i)?ke(se,H,\"block\",0):Me(H)?ke(se,H,\"block\"):ke(se,H,\"block\",0);if($&&$.charAt(0)==\"@\"&&Z(H.current().slice(1))&&(ge=\"variable-2\"),$==\"word\"){var De=H.current();ge=te(De),ge==\"tag\"&&re.test(De)&&(ge=\"variable-2\"),(ge==\"property\"||De==\"to\")&&(ge=\"atom\")}return $==\"variable-name\"?ke(se,H,\"variableName\"):Ue($,H)?ke(se,H,\"pseudo\"):se.context.type},de.vendorPrefixes=function($,H,se){return $==\"word\"?(ge=\"property\",ke(se,H,\"block\",0)):Je(se)},de.pseudo=function($,H,se){return Z(Le(H.string))?Ge($,H,se):(H.match(/^[a-z-]+/),ge=\"variable-3\",Me(H)?ke(se,H,\"block\"):Je(se))},de.atBlock=function($,H,se){if($==\"(\")return ke(se,H,\"atBlock_parens\");if(fe($,H))return ke(se,H,\"block\");if(oe($,H))return ke(se,H,\"interpolation\");if($==\"word\"){var De=H.current().toLowerCase();if(/^(only|not|and|or)$/.test(De)?ge=\"keyword\":j.hasOwnProperty(De)?ge=\"tag\":K.hasOwnProperty(De)?ge=\"attribute\":y.hasOwnProperty(De)?ge=\"property\":I.hasOwnProperty(De)?ge=\"string-2\":ge=te(H.current()),ge==\"tag\"&&Me(H))return ke(se,H,\"block\")}return $==\"operator\"&&/^(not|and|or)$/.test(H.current())&&(ge=\"keyword\"),se.context.type},de.atBlock_parens=function($,H,se){if($==\"{\"||$==\"}\")return se.context.type;if($==\")\")return Me(H)?ke(se,H,\"block\"):ke(se,H,\"atBlock\");if($==\"word\"){var De=H.current().toLowerCase();return ge=te(De),/^(max|min)/.test(De)&&(ge=\"property\"),ge==\"tag\"&&(re.test(De)?ge=\"variable-2\":ge=\"atom\"),se.context.type}return de.atBlock($,H,se)},de.keyframes=function($,H,se){return H.indentation()==\"0\"&&($==\"}\"&&we(H)||$==\"]\"||$==\"hash\"||$==\"qualifier\"||U(H.current()))?Ge($,H,se):$==\"{\"?ke(se,H,\"keyframes\"):$==\"}\"?we(H)?Je(se,!0):ke(se,H,\"keyframes\"):$==\"unit\"&&/^[0-9]+\\%$/.test(H.current())?ke(se,H,\"keyframes\"):$==\"word\"&&(ge=te(H.current()),ge==\"block-keyword\")?(ge=\"keyword\",ke(se,H,\"keyframes\")):/@(font-face|media|supports|(-moz-)?document)/.test($)?ke(se,H,Me(H)?\"block\":\"atBlock\"):$==\"mixin\"?ke(se,H,\"block\",0):se.context.type},de.interpolation=function($,H,se){return $==\"{\"&&Je(se)&&ke(se,H,\"block\"),$==\"}\"?H.string.match(/^\\s*(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/i)||H.string.match(/^\\s*[a-z]/i)&&U(Le(H))?ke(se,H,\"block\"):!H.string.match(/^(\\{|\\s*\\&)/)||H.match(/\\s*[\\w-]/,!1)?ke(se,H,\"block\",0):ke(se,H,\"block\"):$==\"variable-name\"?ke(se,H,\"variableName\",0):($==\"word\"&&(ge=te(H.current()),ge==\"tag\"&&(ge=\"atom\")),se.context.type)},de.extend=function($,H,se){return $==\"[\"||$==\"=\"?\"extend\":$==\"]\"?Je(se):$==\"word\"?(ge=te(H.current()),\"extend\"):Je(se)},de.variableName=function($,H,se){return $==\"string\"||$==\"[\"||$==\"]\"||H.current().match(/^(\\.|\\$)/)?(H.current().match(/^\\.[\\w-]+/i)&&(ge=\"variable-2\"),\"variableName\"):Ge($,H,se)},{startState:function($){return{tokenize:null,state:\"block\",context:new Ze(\"block\",$||0,null)}},token:function($,H){return!H.tokenize&&$.eatSpace()?null:(pe=(H.tokenize||Oe)($,H),pe&&typeof pe==\"object\"&&(Ee=pe[1],pe=pe[0]),ge=pe,H.state=de[H.state](Ee,$,H),ge)},indent:function($,H,se){var De=$.context,nt=H&&H.charAt(0),dt=De.indent,Pt=Le(H),Ft=se.match(/^\\s*/)[0].replace(/\\t/g,G).length,Pe=$.context.prev?$.context.prev.line.firstWord:\"\",xt=$.context.prev?$.context.prev.line.indent:Ft;return De.prev&&(nt==\"}\"&&(De.type==\"block\"||De.type==\"atBlock\"||De.type==\"keyframes\")||nt==\")\"&&(De.type==\"parens\"||De.type==\"atBlock_parens\")||nt==\"{\"&&De.type==\"at\")?dt=De.indent-O:/(\\})/.test(nt)||(/@|\\$|\\d/.test(nt)||/^\\{/.test(H)||/^\\s*\\/(\\/|\\*)/.test(H)||/^\\s*\\/\\*/.test(Pe)||/^\\s*[\\w-\\.\\[\\]\\'\\\"]+\\s*(\\?|:|\\+)?=/i.test(H)||/^(\\+|-)?[a-z][\\w-]*\\(/i.test(H)||/^return/.test(H)||ce(Pt)?dt=Ft:/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(nt)||U(Pt)?/\\,\\s*$/.test(Pe)?dt=xt:/^\\s+/.test(se)&&(/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(Pe)||U(Pe))?dt=Ft<=xt?xt:xt+O:dt=Ft:!/,\\s*$/.test(se)&&(He(Pt)||Z(Pt))&&(ce(Pe)?dt=Ft<=xt?xt:xt+O:/^\\{/.test(Pe)?dt=Ft<=xt?Ft:xt+O:He(Pe)||Z(Pe)?dt=Ft>=xt?xt:Ft:/^(\\.|#|:|\\[|\\*|&|@|\\+|\\-|>|~|\\/)/.test(Pe)||/=\\s*$/.test(Pe)||U(Pe)||/^\\$[\\w-\\.\\[\\]\\'\\\"]/.test(Pe)?dt=xt+O:dt=Ft)),dt},electricChars:\"}\",blockCommentStart:\"/*\",blockCommentEnd:\"*/\",blockCommentContinue:\" * \",lineComment:\"//\",fold:\"indent\"}});var p=[\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"bgsound\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"nobr\",\"noframes\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"var\",\"video\"],v=[\"domain\",\"regexp\",\"url-prefix\",\"url\"],C=[\"all\",\"aural\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"embossed\"],b=[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"device-width\",\"min-device-width\",\"max-device-width\",\"device-height\",\"min-device-height\",\"max-device-height\",\"aspect-ratio\",\"min-aspect-ratio\",\"max-aspect-ratio\",\"device-aspect-ratio\",\"min-device-aspect-ratio\",\"max-device-aspect-ratio\",\"color\",\"min-color\",\"max-color\",\"color-index\",\"min-color-index\",\"max-color-index\",\"monochrome\",\"min-monochrome\",\"max-monochrome\",\"resolution\",\"min-resolution\",\"max-resolution\",\"scan\",\"grid\",\"dynamic-range\",\"video-dynamic-range\"],S=[\"align-content\",\"align-items\",\"align-self\",\"alignment-adjust\",\"alignment-baseline\",\"anchor-point\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"appearance\",\"azimuth\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"baseline-shift\",\"binding\",\"bleed\",\"bookmark-label\",\"bookmark-level\",\"bookmark-state\",\"bookmark-target\",\"border\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"clear\",\"clip\",\"color\",\"color-profile\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"content\",\"counter-increment\",\"counter-reset\",\"crop\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"dominant-baseline\",\"drop-initial-after-adjust\",\"drop-initial-after-align\",\"drop-initial-before-adjust\",\"drop-initial-before-align\",\"drop-initial-size\",\"drop-initial-value\",\"elevation\",\"empty-cells\",\"fit\",\"fit-position\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"float-offset\",\"flow-from\",\"flow-into\",\"font\",\"font-feature-settings\",\"font-family\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-alternates\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-weight\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-position\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-start\",\"grid-row\",\"grid-row-end\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"inline-box-align\",\"justify-content\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"line-stacking\",\"line-stacking-ruby\",\"line-stacking-shift\",\"line-stacking-strategy\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"marker-offset\",\"marks\",\"marquee-direction\",\"marquee-loop\",\"marquee-play-count\",\"marquee-speed\",\"marquee-style\",\"max-height\",\"max-width\",\"min-height\",\"min-width\",\"move-to\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-style\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"page\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"page-policy\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pitch\",\"pitch-range\",\"play-during\",\"position\",\"presentation-level\",\"punctuation-trim\",\"quotes\",\"region-break-after\",\"region-break-before\",\"region-break-inside\",\"region-fragment\",\"rendering-intent\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"richness\",\"right\",\"rotation\",\"rotation-point\",\"ruby-align\",\"ruby-overhang\",\"ruby-position\",\"ruby-span\",\"shape-image-threshold\",\"shape-inside\",\"shape-margin\",\"shape-outside\",\"size\",\"speak\",\"speak-as\",\"speak-header\",\"speak-numeral\",\"speak-punctuation\",\"speech-rate\",\"stress\",\"string-set\",\"tab-size\",\"table-layout\",\"target\",\"target-name\",\"target-new\",\"target-position\",\"text-align\",\"text-align-last\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-skip\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-height\",\"text-indent\",\"text-justify\",\"text-outline\",\"text-overflow\",\"text-shadow\",\"text-size-adjust\",\"text-space-collapse\",\"text-transform\",\"text-underline-position\",\"text-wrap\",\"top\",\"transform\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"z-index\",\"clip-path\",\"clip-rule\",\"mask\",\"enable-background\",\"filter\",\"flood-color\",\"flood-opacity\",\"lighting-color\",\"stop-color\",\"stop-opacity\",\"pointer-events\",\"color-interpolation\",\"color-interpolation-filters\",\"color-rendering\",\"fill\",\"fill-opacity\",\"fill-rule\",\"image-rendering\",\"marker\",\"marker-end\",\"marker-mid\",\"marker-start\",\"shape-rendering\",\"stroke\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke-width\",\"text-rendering\",\"baseline-shift\",\"dominant-baseline\",\"glyph-orientation-horizontal\",\"glyph-orientation-vertical\",\"text-anchor\",\"writing-mode\",\"font-smoothing\",\"osx-font-smoothing\"],s=[\"scrollbar-arrow-color\",\"scrollbar-base-color\",\"scrollbar-dark-shadow-color\",\"scrollbar-face-color\",\"scrollbar-highlight-color\",\"scrollbar-shadow-color\",\"scrollbar-3d-light-color\",\"scrollbar-track-color\",\"shape-inside\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"zoom\"],h=[\"font-family\",\"src\",\"unicode-range\",\"font-variant\",\"font-feature-settings\",\"font-stretch\",\"font-weight\",\"font-style\"],g=[\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"],T=[\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"afar\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"amharic\",\"amharic-abegede\",\"antialiased\",\"appworkspace\",\"arabic-indic\",\"armenian\",\"asterisks\",\"attr\",\"auto\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"binary\",\"bengali\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"cambodian\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"cjk-earthly-branch\",\"cjk-heavenly-stem\",\"cjk-ideographic\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"column\",\"compact\",\"condensed\",\"conic-gradient\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"devanagari\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic\",\"ethiopic-abegede\",\"ethiopic-abegede-am-et\",\"ethiopic-abegede-gez\",\"ethiopic-abegede-ti-er\",\"ethiopic-abegede-ti-et\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-aa-et\",\"ethiopic-halehame-am-et\",\"ethiopic-halehame-gez\",\"ethiopic-halehame-om-et\",\"ethiopic-halehame-sid-et\",\"ethiopic-halehame-so-et\",\"ethiopic-halehame-ti-er\",\"ethiopic-halehame-ti-et\",\"ethiopic-halehame-tig\",\"ethiopic-numeric\",\"ew-resize\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fixed\",\"flat\",\"flex\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"georgian\",\"graytext\",\"groove\",\"gujarati\",\"gurmukhi\",\"hand\",\"hangul\",\"hangul-consonant\",\"hebrew\",\"help\",\"hidden\",\"hide\",\"high\",\"higher\",\"highlight\",\"highlighttext\",\"hiragana\",\"hiragana-iroha\",\"horizontal\",\"hsl\",\"hsla\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"japanese-formal\",\"japanese-informal\",\"justify\",\"kannada\",\"katakana\",\"katakana-iroha\",\"keep-all\",\"khmer\",\"korean-hangul-formal\",\"korean-hanja-formal\",\"korean-hanja-informal\",\"landscape\",\"lao\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-alpha\",\"lower-armenian\",\"lower-greek\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lower-roman\",\"lowercase\",\"ltr\",\"malayalam\",\"match\",\"matrix\",\"matrix3d\",\"media-play-button\",\"media-slider\",\"media-sliderthumb\",\"media-volume-slider\",\"media-volume-sliderthumb\",\"medium\",\"menu\",\"menulist\",\"menulist-button\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"mongolian\",\"monospace\",\"move\",\"multiple\",\"myanmar\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"octal\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"oriya\",\"oromo\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"persian\",\"perspective\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeating-conic-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row-resize\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"searchfield\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"sidama\",\"simp-chinese-formal\",\"simp-chinese-informal\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"solid\",\"somali\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"spell-out\",\"square\",\"square-button\",\"standard\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"sub\",\"subpixel-antialiased\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"tamil\",\"telugu\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thai\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"tibetan\",\"tigre\",\"tigrinya-er\",\"tigrinya-er-abegede\",\"tigrinya-et\",\"tigrinya-et-abegede\",\"to\",\"top\",\"trad-chinese-formal\",\"trad-chinese-informal\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"up\",\"upper-alpha\",\"upper-armenian\",\"upper-greek\",\"upper-hexadecimal\",\"upper-latin\",\"upper-norwegian\",\"upper-roman\",\"uppercase\",\"urdu\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\",\"bicubic\",\"optimizespeed\",\"grayscale\",\"row\",\"row-reverse\",\"wrap\",\"wrap-reverse\",\"column-reverse\",\"flex-start\",\"flex-end\",\"space-between\",\"space-around\",\"unset\"],w=[\"in\",\"and\",\"or\",\"not\",\"is not\",\"is a\",\"is\",\"isnt\",\"defined\",\"if unless\"],c=[\"for\",\"if\",\"else\",\"unless\",\"from\",\"to\"],d=[\"null\",\"true\",\"false\",\"href\",\"title\",\"type\",\"not-allowed\",\"readonly\",\"disabled\"],k=[\"@font-face\",\"@keyframes\",\"@media\",\"@viewport\",\"@page\",\"@host\",\"@supports\",\"@block\",\"@css\"],z=p.concat(v,C,b,S,s,g,T,h,w,c,d,k);function M(E){return E=E.sort(function(O,G){return G>O}),new RegExp(\"^((\"+E.join(\")|(\")+\"))\\\\b\")}function _(E){for(var O={},G=0;G<E.length;++G)O[E[G]]=!0;return O}function W(E){return E.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")}o.registerHelper(\"hintWords\",\"stylus\",z),o.defineMIME(\"text/x-styl\",\"stylus\")})});var Xu=Ke((Gu,Zu)=>{(function(o){typeof Gu==\"object\"&&typeof Zu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";function p(q){for(var I={},D=0;D<q.length;D++)I[q[D]]=!0;return I}var v=p([\"_\",\"var\",\"let\",\"actor\",\"class\",\"enum\",\"extension\",\"import\",\"protocol\",\"struct\",\"func\",\"typealias\",\"associatedtype\",\"open\",\"public\",\"internal\",\"fileprivate\",\"private\",\"deinit\",\"init\",\"new\",\"override\",\"self\",\"subscript\",\"super\",\"convenience\",\"dynamic\",\"final\",\"indirect\",\"lazy\",\"required\",\"static\",\"unowned\",\"unowned(safe)\",\"unowned(unsafe)\",\"weak\",\"as\",\"is\",\"break\",\"case\",\"continue\",\"default\",\"else\",\"fallthrough\",\"for\",\"guard\",\"if\",\"in\",\"repeat\",\"switch\",\"where\",\"while\",\"defer\",\"return\",\"inout\",\"mutating\",\"nonmutating\",\"isolated\",\"nonisolated\",\"catch\",\"do\",\"rethrows\",\"throw\",\"throws\",\"async\",\"await\",\"try\",\"didSet\",\"get\",\"set\",\"willSet\",\"assignment\",\"associativity\",\"infix\",\"left\",\"none\",\"operator\",\"postfix\",\"precedence\",\"precedencegroup\",\"prefix\",\"right\",\"Any\",\"AnyObject\",\"Type\",\"dynamicType\",\"Self\",\"Protocol\",\"__COLUMN__\",\"__FILE__\",\"__FUNCTION__\",\"__LINE__\"]),C=p([\"var\",\"let\",\"actor\",\"class\",\"enum\",\"extension\",\"import\",\"protocol\",\"struct\",\"func\",\"typealias\",\"associatedtype\",\"for\"]),b=p([\"true\",\"false\",\"nil\",\"self\",\"super\",\"_\"]),S=p([\"Array\",\"Bool\",\"Character\",\"Dictionary\",\"Double\",\"Float\",\"Int\",\"Int8\",\"Int16\",\"Int32\",\"Int64\",\"Never\",\"Optional\",\"Set\",\"String\",\"UInt8\",\"UInt16\",\"UInt32\",\"UInt64\",\"Void\"]),s=\"+-/*%=|&<>~^?!\",h=\":;,.(){}[]\",g=/^\\-?0b[01][01_]*/,T=/^\\-?0o[0-7][0-7_]*/,w=/^\\-?0x[\\dA-Fa-f][\\dA-Fa-f_]*(?:(?:\\.[\\dA-Fa-f][\\dA-Fa-f_]*)?[Pp]\\-?\\d[\\d_]*)?/,c=/^\\-?\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[Ee]\\-?\\d[\\d_]*)?/,d=/^\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1/,k=/^\\.(?:\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1)/,z=/^\\#[A-Za-z]+/,M=/^@(?:\\$\\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\\1)/;function _(q,I,D){if(q.sol()&&(I.indented=q.indentation()),q.eatSpace())return null;var Q=q.peek();if(Q==\"/\"){if(q.match(\"//\"))return q.skipToEnd(),\"comment\";if(q.match(\"/*\"))return I.tokenize.push(O),O(q,I)}if(q.match(z))return\"builtin\";if(q.match(M))return\"attribute\";if(q.match(g)||q.match(T)||q.match(w)||q.match(c))return\"number\";if(q.match(k))return\"property\";if(s.indexOf(Q)>-1)return q.next(),\"operator\";if(h.indexOf(Q)>-1)return q.next(),q.match(\"..\"),\"punctuation\";var j;if(j=q.match(/(\"\"\"|\"|')/)){var V=E.bind(null,j[0]);return I.tokenize.push(V),V(q,I)}if(q.match(d)){var y=q.current();return S.hasOwnProperty(y)?\"variable-2\":b.hasOwnProperty(y)?\"atom\":v.hasOwnProperty(y)?(C.hasOwnProperty(y)&&(I.prev=\"define\"),\"keyword\"):D==\"define\"?\"def\":\"variable\"}return q.next(),null}function W(){var q=0;return function(I,D,Q){var j=_(I,D,Q);if(j==\"punctuation\"){if(I.current()==\"(\")++q;else if(I.current()==\")\"){if(q==0)return I.backUp(1),D.tokenize.pop(),D.tokenize[D.tokenize.length-1](I,D);--q}}return j}}function E(q,I,D){for(var Q=q.length==1,j,V=!1;j=I.peek();)if(V){if(I.next(),j==\"(\")return D.tokenize.push(W()),\"string\";V=!1}else{if(I.match(q))return D.tokenize.pop(),\"string\";I.next(),V=j==\"\\\\\"}return Q&&D.tokenize.pop(),\"string\"}function O(q,I){for(var D;D=q.next();)if(D===\"/\"&&q.eat(\"*\"))I.tokenize.push(O);else if(D===\"*\"&&q.eat(\"/\")){I.tokenize.pop();break}return\"comment\"}function G(q,I,D){this.prev=q,this.align=I,this.indented=D}function J(q,I){var D=I.match(/^\\s*($|\\/[\\/\\*])/,!1)?null:I.column()+1;q.context=new G(q.context,D,q.indented)}function re(q){q.context&&(q.indented=q.context.indented,q.context=q.context.prev)}o.defineMode(\"swift\",function(q){return{startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(I,D){var Q=D.prev;D.prev=null;var j=D.tokenize[D.tokenize.length-1]||_,V=j(I,D,Q);if(!V||V==\"comment\"?D.prev=Q:D.prev||(D.prev=V),V==\"punctuation\"){var y=/[\\(\\[\\{]|([\\]\\)\\}])/.exec(I.current());y&&(y[1]?re:J)(D,I)}return V},indent:function(I,D){var Q=I.context;if(!Q)return 0;var j=/^[\\]\\}\\)]/.test(D);return Q.align!=null?Q.align-(j?1:0):Q.indented+(j?0:q.indentUnit)},electricInput:/^\\s*[\\)\\}\\]]$/,lineComment:\"//\",blockCommentStart:\"/*\",blockCommentEnd:\"*/\",fold:\"brace\",closeBrackets:\"()[]{}''\\\"\\\"``\"}}),o.defineMIME(\"text/x-swift\",\"swift\")})});var Vu=Ke((Yu,Qu)=>{(function(o){typeof Yu==\"object\"&&typeof Qu==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"coffeescript\",function(p,v){var C=\"error\";function b(I){return new RegExp(\"^((\"+I.join(\")|(\")+\"))\\\\b\")}var S=/^(?:->|=>|\\+[+=]?|-[\\-=]?|\\*[\\*=]?|\\/[\\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\\|=?|\\^=?|\\~|!|\\?|(or|and|\\|\\||&&|\\?)=)/,s=/^(?:[()\\[\\]{},:`=;]|\\.\\.?\\.?)/,h=/^[_A-Za-z$][_A-Za-z$0-9]*/,g=/^@[_A-Za-z$][_A-Za-z$0-9]*/,T=b([\"and\",\"or\",\"not\",\"is\",\"isnt\",\"in\",\"instanceof\",\"typeof\"]),w=[\"for\",\"while\",\"loop\",\"if\",\"unless\",\"else\",\"switch\",\"try\",\"catch\",\"finally\",\"class\"],c=[\"break\",\"by\",\"continue\",\"debugger\",\"delete\",\"do\",\"in\",\"of\",\"new\",\"return\",\"then\",\"this\",\"@\",\"throw\",\"when\",\"until\",\"extends\"],d=b(w.concat(c));w=b(w);var k=/^('{3}|\\\"{3}|['\\\"])/,z=/^(\\/{3}|\\/)/,M=[\"Infinity\",\"NaN\",\"undefined\",\"null\",\"true\",\"false\",\"on\",\"off\",\"yes\",\"no\"],_=b(M);function W(I,D){if(I.sol()){D.scope.align===null&&(D.scope.align=!1);var Q=D.scope.offset;if(I.eatSpace()){var j=I.indentation();return j>Q&&D.scope.type==\"coffee\"?\"indent\":j<Q?\"dedent\":null}else Q>0&&J(I,D)}if(I.eatSpace())return null;var V=I.peek();if(I.match(\"####\"))return I.skipToEnd(),\"comment\";if(I.match(\"###\"))return D.tokenize=O,D.tokenize(I,D);if(V===\"#\")return I.skipToEnd(),\"comment\";if(I.match(/^-?[0-9\\.]/,!1)){var y=!1;if(I.match(/^-?\\d*\\.\\d+(e[\\+\\-]?\\d+)?/i)&&(y=!0),I.match(/^-?\\d+\\.\\d*/)&&(y=!0),I.match(/^-?\\.\\d+/)&&(y=!0),y)return I.peek()==\".\"&&I.backUp(1),\"number\";var K=!1;if(I.match(/^-?0x[0-9a-f]+/i)&&(K=!0),I.match(/^-?[1-9]\\d*(e[\\+\\-]?\\d+)?/)&&(K=!0),I.match(/^-?0(?![\\dx])/i)&&(K=!0),K)return\"number\"}if(I.match(k))return D.tokenize=E(I.current(),!1,\"string\"),D.tokenize(I,D);if(I.match(z)){if(I.current()!=\"/\"||I.match(/^.*\\//,!1))return D.tokenize=E(I.current(),!0,\"string-2\"),D.tokenize(I,D);I.backUp(1)}return I.match(S)||I.match(T)?\"operator\":I.match(s)?\"punctuation\":I.match(_)?\"atom\":I.match(g)||D.prop&&I.match(h)?\"property\":I.match(d)?\"keyword\":I.match(h)?\"variable\":(I.next(),C)}function E(I,D,Q){return function(j,V){for(;!j.eol();)if(j.eatWhile(/[^'\"\\/\\\\]/),j.eat(\"\\\\\")){if(j.next(),D&&j.eol())return Q}else{if(j.match(I))return V.tokenize=W,Q;j.eat(/['\"\\/]/)}return D&&(v.singleLineStringErrors?Q=C:V.tokenize=W),Q}}function O(I,D){for(;!I.eol();){if(I.eatWhile(/[^#]/),I.match(\"###\")){D.tokenize=W;break}I.eatWhile(\"#\")}return\"comment\"}function G(I,D,Q){Q=Q||\"coffee\";for(var j=0,V=!1,y=null,K=D.scope;K;K=K.prev)if(K.type===\"coffee\"||K.type==\"}\"){j=K.offset+p.indentUnit;break}Q!==\"coffee\"?(V=null,y=I.column()+I.current().length):D.scope.align&&(D.scope.align=!1),D.scope={offset:j,type:Q,prev:D.scope,align:V,alignOffset:y}}function J(I,D){if(D.scope.prev)if(D.scope.type===\"coffee\"){for(var Q=I.indentation(),j=!1,V=D.scope;V;V=V.prev)if(Q===V.offset){j=!0;break}if(!j)return!0;for(;D.scope.prev&&D.scope.offset!==Q;)D.scope=D.scope.prev;return!1}else return D.scope=D.scope.prev,!1}function re(I,D){var Q=D.tokenize(I,D),j=I.current();j===\"return\"&&(D.dedent=!0),((j===\"->\"||j===\"=>\")&&I.eol()||Q===\"indent\")&&G(I,D);var V=\"[({\".indexOf(j);if(V!==-1&&G(I,D,\"])}\".slice(V,V+1)),w.exec(j)&&G(I,D),j==\"then\"&&J(I,D),Q===\"dedent\"&&J(I,D))return C;if(V=\"])}\".indexOf(j),V!==-1){for(;D.scope.type==\"coffee\"&&D.scope.prev;)D.scope=D.scope.prev;D.scope.type==j&&(D.scope=D.scope.prev)}return D.dedent&&I.eol()&&(D.scope.type==\"coffee\"&&D.scope.prev&&(D.scope=D.scope.prev),D.dedent=!1),Q}var q={startState:function(I){return{tokenize:W,scope:{offset:I||0,type:\"coffee\",prev:null,align:!1},prop:!1,dedent:0}},token:function(I,D){var Q=D.scope.align===null&&D.scope;Q&&I.sol()&&(Q.align=!1);var j=re(I,D);return j&&j!=\"comment\"&&(Q&&(Q.align=!0),D.prop=j==\"punctuation\"&&I.current()==\".\"),j},indent:function(I,D){if(I.tokenize!=W)return 0;var Q=I.scope,j=D&&\"])}\".indexOf(D.charAt(0))>-1;if(j)for(;Q.type==\"coffee\"&&Q.prev;)Q=Q.prev;var V=j&&Q.type===D.charAt(0);return Q.align?Q.alignOffset-(V?1:0):(V?Q.prev:Q).offset},lineComment:\"#\",fold:\"indent\"};return q}),o.defineMIME(\"application/vnd.coffeescript\",\"coffeescript\"),o.defineMIME(\"text/x-coffeescript\",\"coffeescript\"),o.defineMIME(\"text/coffeescript\",\"coffeescript\")})});var tc=Ke((Ju,ec)=>{(function(o){typeof Ju==\"object\"&&typeof ec==\"object\"?o(We(),vn(),gn(),Qn()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../javascript/javascript\",\"../css/css\",\"../htmlmixed/htmlmixed\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"pug\",function(p){var v=\"keyword\",C=\"meta\",b=\"builtin\",S=\"qualifier\",s={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},h=o.getMode(p,\"javascript\");function g(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,this.javaScriptArguments=!1,this.javaScriptArgumentsDepth=0,this.isInterpolating=!1,this.interpolationNesting=0,this.jsState=o.startState(h),this.restOfLine=\"\",this.isIncludeFiltered=!1,this.isEach=!1,this.lastTag=\"\",this.scriptType=\"\",this.isAttrs=!1,this.attrsNest=[],this.inAttributeName=!0,this.attributeIsType=!1,this.attrValue=\"\",this.indentOf=1/0,this.indentToken=\"\",this.innerMode=null,this.innerState=null,this.innerModeForLine=!1}g.prototype.copy=function(){var U=new g;return U.javaScriptLine=this.javaScriptLine,U.javaScriptLineExcludesColon=this.javaScriptLineExcludesColon,U.javaScriptArguments=this.javaScriptArguments,U.javaScriptArgumentsDepth=this.javaScriptArgumentsDepth,U.isInterpolating=this.isInterpolating,U.interpolationNesting=this.interpolationNesting,U.jsState=o.copyState(h,this.jsState),U.innerMode=this.innerMode,this.innerMode&&this.innerState&&(U.innerState=o.copyState(this.innerMode,this.innerState)),U.restOfLine=this.restOfLine,U.isIncludeFiltered=this.isIncludeFiltered,U.isEach=this.isEach,U.lastTag=this.lastTag,U.scriptType=this.scriptType,U.isAttrs=this.isAttrs,U.attrsNest=this.attrsNest.slice(),U.inAttributeName=this.inAttributeName,U.attributeIsType=this.attributeIsType,U.attrValue=this.attrValue,U.indentOf=this.indentOf,U.indentToken=this.indentToken,U.innerModeForLine=this.innerModeForLine,U};function T(U,Z){if(U.sol()&&(Z.javaScriptLine=!1,Z.javaScriptLineExcludesColon=!1),Z.javaScriptLine){if(Z.javaScriptLineExcludesColon&&U.peek()===\":\"){Z.javaScriptLine=!1,Z.javaScriptLineExcludesColon=!1;return}var ce=h.token(U,Z.jsState);return U.eol()&&(Z.javaScriptLine=!1),ce||!0}}function w(U,Z){if(Z.javaScriptArguments){if(Z.javaScriptArgumentsDepth===0&&U.peek()!==\"(\"){Z.javaScriptArguments=!1;return}if(U.peek()===\"(\"?Z.javaScriptArgumentsDepth++:U.peek()===\")\"&&Z.javaScriptArgumentsDepth--,Z.javaScriptArgumentsDepth===0){Z.javaScriptArguments=!1;return}var ce=h.token(U,Z.jsState);return ce||!0}}function c(U){if(U.match(/^yield\\b/))return\"keyword\"}function d(U){if(U.match(/^(?:doctype) *([^\\n]+)?/))return C}function k(U,Z){if(U.match(\"#{\"))return Z.isInterpolating=!0,Z.interpolationNesting=0,\"punctuation\"}function z(U,Z){if(Z.isInterpolating){if(U.peek()===\"}\"){if(Z.interpolationNesting--,Z.interpolationNesting<0)return U.next(),Z.isInterpolating=!1,\"punctuation\"}else U.peek()===\"{\"&&Z.interpolationNesting++;return h.token(U,Z.jsState)||!0}}function M(U,Z){if(U.match(/^case\\b/))return Z.javaScriptLine=!0,v}function _(U,Z){if(U.match(/^when\\b/))return Z.javaScriptLine=!0,Z.javaScriptLineExcludesColon=!0,v}function W(U){if(U.match(/^default\\b/))return v}function E(U,Z){if(U.match(/^extends?\\b/))return Z.restOfLine=\"string\",v}function O(U,Z){if(U.match(/^append\\b/))return Z.restOfLine=\"variable\",v}function G(U,Z){if(U.match(/^prepend\\b/))return Z.restOfLine=\"variable\",v}function J(U,Z){if(U.match(/^block\\b *(?:(prepend|append)\\b)?/))return Z.restOfLine=\"variable\",v}function re(U,Z){if(U.match(/^include\\b/))return Z.restOfLine=\"string\",v}function q(U,Z){if(U.match(/^include:([a-zA-Z0-9\\-]+)/,!1)&&U.match(\"include\"))return Z.isIncludeFiltered=!0,v}function I(U,Z){if(Z.isIncludeFiltered){var ce=R(U,Z);return Z.isIncludeFiltered=!1,Z.restOfLine=\"string\",ce}}function D(U,Z){if(U.match(/^mixin\\b/))return Z.javaScriptLine=!0,v}function Q(U,Z){if(U.match(/^\\+([-\\w]+)/))return U.match(/^\\( *[-\\w]+ *=/,!1)||(Z.javaScriptArguments=!0,Z.javaScriptArgumentsDepth=0),\"variable\";if(U.match(\"+#{\",!1))return U.next(),Z.mixinCallAfter=!0,k(U,Z)}function j(U,Z){if(Z.mixinCallAfter)return Z.mixinCallAfter=!1,U.match(/^\\( *[-\\w]+ *=/,!1)||(Z.javaScriptArguments=!0,Z.javaScriptArgumentsDepth=0),!0}function V(U,Z){if(U.match(/^(if|unless|else if|else)\\b/))return Z.javaScriptLine=!0,v}function y(U,Z){if(U.match(/^(- *)?(each|for)\\b/))return Z.isEach=!0,v}function K(U,Z){if(Z.isEach){if(U.match(/^ in\\b/))return Z.javaScriptLine=!0,Z.isEach=!1,v;if(U.sol()||U.eol())Z.isEach=!1;else if(U.next()){for(;!U.match(/^ in\\b/,!1)&&U.next(););return\"variable\"}}}function X(U,Z){if(U.match(/^while\\b/))return Z.javaScriptLine=!0,v}function N(U,Z){var ce;if(ce=U.match(/^(\\w(?:[-:\\w]*\\w)?)\\/?/))return Z.lastTag=ce[1].toLowerCase(),Z.lastTag===\"script\"&&(Z.scriptType=\"application/javascript\"),\"tag\"}function R(U,Z){if(U.match(/^:([\\w\\-]+)/)){var ce;return p&&p.innerModes&&(ce=p.innerModes(U.current().substring(1))),ce||(ce=U.current().substring(1)),typeof ce==\"string\"&&(ce=o.getMode(p,ce)),Be(U,Z,ce),\"atom\"}}function le(U,Z){if(U.match(/^(!?=|-)/))return Z.javaScriptLine=!0,\"punctuation\"}function xe(U){if(U.match(/^#([\\w-]+)/))return b}function F(U){if(U.match(/^\\.([\\w-]+)/))return S}function L(U,Z){if(U.peek()==\"(\")return U.next(),Z.isAttrs=!0,Z.attrsNest=[],Z.inAttributeName=!0,Z.attrValue=\"\",Z.attributeIsType=!1,\"punctuation\"}function de(U,Z){if(Z.isAttrs){if(s[U.peek()]&&Z.attrsNest.push(s[U.peek()]),Z.attrsNest[Z.attrsNest.length-1]===U.peek())Z.attrsNest.pop();else if(U.eat(\")\"))return Z.isAttrs=!1,\"punctuation\";if(Z.inAttributeName&&U.match(/^[^=,\\)!]+/))return(U.peek()===\"=\"||U.peek()===\"!\")&&(Z.inAttributeName=!1,Z.jsState=o.startState(h),Z.lastTag===\"script\"&&U.current().trim().toLowerCase()===\"type\"?Z.attributeIsType=!0:Z.attributeIsType=!1),\"attribute\";var ce=h.token(U,Z.jsState);if(Z.attributeIsType&&ce===\"string\"&&(Z.scriptType=U.current().toString()),Z.attrsNest.length===0&&(ce===\"string\"||ce===\"variable\"||ce===\"keyword\"))try{return Function(\"\",\"var x \"+Z.attrValue.replace(/,\\s*$/,\"\").replace(/^!/,\"\")),Z.inAttributeName=!0,Z.attrValue=\"\",U.backUp(U.current().length),de(U,Z)}catch{}return Z.attrValue+=U.current(),ce||!0}}function ze(U,Z){if(U.match(/^&attributes\\b/))return Z.javaScriptArguments=!0,Z.javaScriptArgumentsDepth=0,\"keyword\"}function pe(U){if(U.sol()&&U.eatSpace())return\"indent\"}function Ee(U,Z){if(U.match(/^ *\\/\\/(-)?([^\\n]*)/))return Z.indentOf=U.indentation(),Z.indentToken=\"comment\",\"comment\"}function ge(U){if(U.match(/^: */))return\"colon\"}function Oe(U,Z){if(U.match(/^(?:\\| ?| )([^\\n]+)/))return\"string\";if(U.match(/^(<[^\\n]*)/,!1))return Be(U,Z,\"htmlmixed\"),Z.innerModeForLine=!0,Ze(U,Z,!0)}function qe(U,Z){if(U.eat(\".\")){var ce=null;return Z.lastTag===\"script\"&&Z.scriptType.toLowerCase().indexOf(\"javascript\")!=-1?ce=Z.scriptType.toLowerCase().replace(/\"|'/g,\"\"):Z.lastTag===\"style\"&&(ce=\"css\"),Be(U,Z,ce),\"dot\"}}function Se(U){return U.next(),null}function Be(U,Z,ce){ce=o.mimeModes[ce]||ce,ce=p.innerModes&&p.innerModes(ce)||ce,ce=o.mimeModes[ce]||ce,ce=o.getMode(p,ce),Z.indentOf=U.indentation(),ce&&ce.name!==\"null\"?Z.innerMode=ce:Z.indentToken=\"string\"}function Ze(U,Z,ce){if(U.indentation()>Z.indentOf||Z.innerModeForLine&&!U.sol()||ce)return Z.innerMode?(Z.innerState||(Z.innerState=Z.innerMode.startState?o.startState(Z.innerMode,U.indentation()):{}),U.hideFirstChars(Z.indentOf+2,function(){return Z.innerMode.token(U,Z.innerState)||!0})):(U.skipToEnd(),Z.indentToken);U.sol()&&(Z.indentOf=1/0,Z.indentToken=null,Z.innerMode=null,Z.innerState=null)}function ke(U,Z){if(U.sol()&&(Z.restOfLine=\"\"),Z.restOfLine){U.skipToEnd();var ce=Z.restOfLine;return Z.restOfLine=\"\",ce}}function Je(){return new g}function Re(U){return U.copy()}function Ge(U,Z){var ce=Ze(U,Z)||ke(U,Z)||z(U,Z)||I(U,Z)||K(U,Z)||de(U,Z)||T(U,Z)||w(U,Z)||j(U,Z)||c(U)||d(U)||k(U,Z)||M(U,Z)||_(U,Z)||W(U)||E(U,Z)||O(U,Z)||G(U,Z)||J(U,Z)||re(U,Z)||q(U,Z)||D(U,Z)||Q(U,Z)||V(U,Z)||y(U,Z)||X(U,Z)||N(U,Z)||R(U,Z)||le(U,Z)||xe(U)||F(U)||L(U,Z)||ze(U,Z)||pe(U)||Oe(U,Z)||Ee(U,Z)||ge(U)||qe(U,Z)||Se(U);return ce===!0?null:ce}return{startState:Je,copyState:Re,token:Ge}},\"javascript\",\"css\",\"htmlmixed\"),o.defineMIME(\"text/x-pug\",\"pug\"),o.defineMIME(\"text/x-jade\",\"pug\")})});var ic=Ke((rc,nc)=>{(function(o){typeof rc==\"object\"&&typeof nc==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.multiplexingMode=function(p){var v=Array.prototype.slice.call(arguments,1);function C(b,S,s,h){if(typeof S==\"string\"){var g=b.indexOf(S,s);return h&&g>-1?g+S.length:g}var T=S.exec(s?b.slice(s):b);return T?T.index+s+(h?T[0].length:0):-1}return{startState:function(){return{outer:o.startState(p),innerActive:null,inner:null,startingInner:!1}},copyState:function(b){return{outer:o.copyState(p,b.outer),innerActive:b.innerActive,inner:b.innerActive&&o.copyState(b.innerActive.mode,b.inner),startingInner:b.startingInner}},token:function(b,S){if(S.innerActive){var z=S.innerActive,h=b.string;if(!z.close&&b.sol())return S.innerActive=S.inner=null,this.token(b,S);var w=z.close&&!S.startingInner?C(h,z.close,b.pos,z.parseDelimiters):-1;if(w==b.pos&&!z.parseDelimiters)return b.match(z.close),S.innerActive=S.inner=null,z.delimStyle&&z.delimStyle+\" \"+z.delimStyle+\"-close\";w>-1&&(b.string=h.slice(0,w));var M=z.mode.token(b,S.inner);return w>-1?b.string=h:b.pos>b.start&&(S.startingInner=!1),w==b.pos&&z.parseDelimiters&&(S.innerActive=S.inner=null),z.innerStyle&&(M?M=M+\" \"+z.innerStyle:M=z.innerStyle),M}else{for(var s=1/0,h=b.string,g=0;g<v.length;++g){var T=v[g],w=C(h,T.open,b.pos);if(w==b.pos){T.parseDelimiters||b.match(T.open),S.startingInner=!!T.parseDelimiters,S.innerActive=T;var c=0;if(p.indent){var d=p.indent(S.outer,\"\",\"\");d!==o.Pass&&(c=d)}return S.inner=o.startState(T.mode,c),T.delimStyle&&T.delimStyle+\" \"+T.delimStyle+\"-open\"}else w!=-1&&w<s&&(s=w)}s!=1/0&&(b.string=h.slice(0,s));var k=p.token(b,S.outer);return s!=1/0&&(b.string=h),k}},indent:function(b,S,s){var h=b.innerActive?b.innerActive.mode:p;return h.indent?h.indent(b.innerActive?b.inner:b.outer,S,s):o.Pass},blankLine:function(b){var S=b.innerActive?b.innerActive.mode:p;if(S.blankLine&&S.blankLine(b.innerActive?b.inner:b.outer),b.innerActive)b.innerActive.close===`\n`&&(b.innerActive=b.inner=null);else for(var s=0;s<v.length;++s){var h=v[s];h.open===`\n`&&(b.innerActive=h,b.inner=o.startState(h.mode,S.indent?S.indent(b.outer,\"\",\"\"):0))}},electricChars:p.electricChars,innerMode:function(b){return b.inner?{state:b.inner,mode:b.innerActive.mode}:{state:b.outer,mode:p}}}}})});var lc=Ke((oc,ac)=>{(function(o){typeof oc==\"object\"&&typeof ac==\"object\"?o(We(),Di(),ic()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../../addon/mode/simple\",\"../../addon/mode/multiplex\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineSimpleMode(\"handlebars-tags\",{start:[{regex:/\\{\\{\\{/,push:\"handlebars_raw\",token:\"tag\"},{regex:/\\{\\{!--/,push:\"dash_comment\",token:\"comment\"},{regex:/\\{\\{!/,push:\"comment\",token:\"comment\"},{regex:/\\{\\{/,push:\"handlebars\",token:\"tag\"}],handlebars_raw:[{regex:/\\}\\}\\}/,pop:!0,token:\"tag\"}],handlebars:[{regex:/\\}\\}/,pop:!0,token:\"tag\"},{regex:/\"(?:[^\\\\\"]|\\\\.)*\"?/,token:\"string\"},{regex:/'(?:[^\\\\']|\\\\.)*'?/,token:\"string\"},{regex:/>|[#\\/]([A-Za-z_]\\w*)/,token:\"keyword\"},{regex:/(?:else|this)\\b/,token:\"keyword\"},{regex:/\\d+/i,token:\"number\"},{regex:/=|~|@|true|false/,token:\"atom\"},{regex:/(?:\\.\\.\\/)*(?:[A-Za-z_][\\w\\.]*)+/,token:\"variable-2\"}],dash_comment:[{regex:/--\\}\\}/,pop:!0,token:\"comment\"},{regex:/./,token:\"comment\"}],comment:[{regex:/\\}\\}/,pop:!0,token:\"comment\"},{regex:/./,token:\"comment\"}],meta:{blockCommentStart:\"{{--\",blockCommentEnd:\"--}}\"}}),o.defineMode(\"handlebars\",function(p,v){var C=o.getMode(p,\"handlebars-tags\");return!v||!v.base?C:o.multiplexingMode(o.getMode(p,v.base),{open:\"{{\",close:/\\}\\}\\}?/,mode:C,parseDelimiters:!0})}),o.defineMIME(\"text/x-handlebars-template\",\"handlebars\")})});var cc=Ke((sc,uc)=>{(function(o){\"use strict\";typeof sc==\"object\"&&typeof uc==\"object\"?o(We(),Yn(),mn(),vn(),Vu(),gn(),ea(),ta(),tc(),lc()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\",\"../../addon/mode/overlay\",\"../xml/xml\",\"../javascript/javascript\",\"../coffeescript/coffeescript\",\"../css/css\",\"../sass/sass\",\"../stylus/stylus\",\"../pug/pug\",\"../handlebars/handlebars\"],o):o(CodeMirror)})(function(o){var p={script:[[\"lang\",/coffee(script)?/,\"coffeescript\"],[\"type\",/^(?:text|application)\\/(?:x-)?coffee(?:script)?$/,\"coffeescript\"],[\"lang\",/^babel$/,\"javascript\"],[\"type\",/^text\\/babel$/,\"javascript\"],[\"type\",/^text\\/ecmascript-\\d+$/,\"javascript\"]],style:[[\"lang\",/^stylus$/i,\"stylus\"],[\"lang\",/^sass$/i,\"sass\"],[\"lang\",/^less$/i,\"text/x-less\"],[\"lang\",/^scss$/i,\"text/x-scss\"],[\"type\",/^(text\\/)?(x-)?styl(us)?$/i,\"stylus\"],[\"type\",/^text\\/sass/i,\"sass\"],[\"type\",/^(text\\/)?(x-)?scss$/i,\"text/x-scss\"],[\"type\",/^(text\\/)?(x-)?less$/i,\"text/x-less\"]],template:[[\"lang\",/^vue-template$/i,\"vue\"],[\"lang\",/^pug$/i,\"pug\"],[\"lang\",/^handlebars$/i,\"handlebars\"],[\"type\",/^(text\\/)?(x-)?pug$/i,\"pug\"],[\"type\",/^text\\/x-handlebars-template$/i,\"handlebars\"],[null,null,\"vue-template\"]]};o.defineMode(\"vue-template\",function(v,C){var b={token:function(S){if(S.match(/^\\{\\{.*?\\}\\}/))return\"meta mustache\";for(;S.next()&&!S.match(\"{{\",!1););return null}};return o.overlayMode(o.getMode(v,C.backdrop||\"text/html\"),b)}),o.defineMode(\"vue\",function(v){return o.getMode(v,{name:\"htmlmixed\",tags:p})},\"htmlmixed\",\"xml\",\"javascript\",\"coffeescript\",\"css\",\"sass\",\"stylus\",\"pug\",\"handlebars\"),o.defineMIME(\"script/x-vue\",\"vue\"),o.defineMIME(\"text/x-vue\",\"vue\")})});var pc=Ke((fc,dc)=>{(function(o){typeof fc==\"object\"&&typeof dc==\"object\"?o(We()):typeof define==\"function\"&&define.amd?define([\"../../lib/codemirror\"],o):o(CodeMirror)})(function(o){\"use strict\";o.defineMode(\"yaml\",function(){var p=[\"true\",\"false\",\"on\",\"off\",\"yes\",\"no\"],v=new RegExp(\"\\\\b((\"+p.join(\")|(\")+\"))$\",\"i\");return{token:function(C,b){var S=C.peek(),s=b.escaped;if(b.escaped=!1,S==\"#\"&&(C.pos==0||/\\s/.test(C.string.charAt(C.pos-1))))return C.skipToEnd(),\"comment\";if(C.match(/^('([^']|\\\\.)*'?|\"([^\"]|\\\\.)*\"?)/))return\"string\";if(b.literal&&C.indentation()>b.keyCol)return C.skipToEnd(),\"string\";if(b.literal&&(b.literal=!1),C.sol()){if(b.keyCol=0,b.pair=!1,b.pairStart=!1,C.match(\"---\")||C.match(\"...\"))return\"def\";if(C.match(/\\s*-\\s+/))return\"meta\"}if(C.match(/^(\\{|\\}|\\[|\\])/))return S==\"{\"?b.inlinePairs++:S==\"}\"?b.inlinePairs--:S==\"[\"?b.inlineList++:b.inlineList--,\"meta\";if(b.inlineList>0&&!s&&S==\",\")return C.next(),\"meta\";if(b.inlinePairs>0&&!s&&S==\",\")return b.keyCol=0,b.pair=!1,b.pairStart=!1,C.next(),\"meta\";if(b.pairStart){if(C.match(/^\\s*(\\||\\>)\\s*/))return b.literal=!0,\"meta\";if(C.match(/^\\s*(\\&|\\*)[a-z0-9\\._-]+\\b/i))return\"variable-2\";if(b.inlinePairs==0&&C.match(/^\\s*-?[0-9\\.\\,]+\\s?$/)||b.inlinePairs>0&&C.match(/^\\s*-?[0-9\\.\\,]+\\s?(?=(,|}))/))return\"number\";if(C.match(v))return\"keyword\"}return!b.pair&&C.match(/^\\s*(?:[,\\[\\]{}&*!|>'\"%@`][^\\s'\":]|[^\\s,\\[\\]{}#&*!|>'\"%@`])[^#:]*(?=:($|\\s))/)?(b.pair=!0,b.keyCol=C.indentation(),\"atom\"):b.pair&&C.match(/^:\\s*/)?(b.pairStart=!0,\"meta\"):(b.pairStart=!1,b.escaped=S==\"\\\\\",C.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:\"#\",fold:\"indent\"}}),o.defineMIME(\"text/x-yaml\",\"yaml\"),o.defineMIME(\"text/yaml\",\"yaml\")})});var $d={};function qd(o){for(var p;(p=Md.exec(o))!==null;){var v=p[0];if(v.indexOf(\"target=\")===-1){var C=v.replace(/>$/,' target=\"_blank\">');o=o.replace(v,C)}}return o}function Fd(o){for(var p=new DOMParser,v=p.parseFromString(o,\"text/html\"),C=v.getElementsByTagName(\"li\"),b=0;b<C.length;b++)for(var S=C[b],s=0;s<S.children.length;s++){var h=S.children[s];h instanceof HTMLInputElement&&h.type===\"checkbox\"&&(S.style.marginLeft=\"-1.5em\",S.style.listStyleType=\"none\")}return v.documentElement.innerHTML}function vc(o){return mc?o=o.replace(\"Ctrl\",\"Cmd\"):o=o.replace(\"Cmd\",\"Ctrl\"),o}function Id(o,p,v,C){var b=qi(o,!1,p,v,\"button\",C);b.classList.add(\"easymde-dropdown\"),b.onclick=function(){b.focus()};var S=document.createElement(\"div\");S.className=\"easymde-dropdown-content\";for(var s=0;s<o.children.length;s++){var h=o.children[s],g;typeof h==\"string\"&&h in Pr?g=qi(Pr[h],!0,p,v,\"button\",C):g=qi(h,!0,p,v,\"button\",C),g.addEventListener(\"click\",function(T){T.stopPropagation()},!1),S.appendChild(g)}return b.appendChild(S),b}function qi(o,p,v,C,b,S){o=o||{};var s=document.createElement(b);if(o.attributes)for(var h in o.attributes)Object.prototype.hasOwnProperty.call(o.attributes,h)&&s.setAttribute(h,o.attributes[h]);s.className=o.name,s.setAttribute(\"type\",b),v=v??!0,o.text&&(s.innerText=o.text),o.name&&o.name in C&&(Vn[o.name]=o.action),o.title&&v&&(s.title=Od(o.title,o.action,C),mc&&(s.title=s.title.replace(\"Ctrl\",\"\\u2318\"),s.title=s.title.replace(\"Alt\",\"\\u2325\"))),o.title&&s.setAttribute(\"aria-label\",o.title),o.noDisable&&s.classList.add(\"no-disable\"),o.noMobile&&s.classList.add(\"no-mobile\");var g=[];typeof o.className<\"u\"&&(g=o.className.split(\" \"));for(var T=[],w=0;w<g.length;w++){var c=g[w];c.match(/^fa([srlb]|(-[\\w-]*)|$)/)?T.push(c):s.classList.add(c)}if(s.tabIndex=-1,T.length>0){for(var d=document.createElement(\"i\"),k=0;k<T.length;k++){var z=T[k];d.classList.add(z)}s.appendChild(d)}return typeof o.icon<\"u\"&&(s.innerHTML=o.icon),o.action&&p&&(typeof o.action==\"function\"?s.onclick=function(M){M.preventDefault(),o.action(S)}:typeof o.action==\"string\"&&(s.onclick=function(M){M.preventDefault(),window.open(o.action,\"_blank\")})),s}function Nd(){var o=document.createElement(\"i\");return o.className=\"separator\",o.innerHTML=\"|\",o}function Od(o,p,v){var C,b=o;return p&&(C=Dd(p),v[C]&&(b+=\" (\"+vc(v[C])+\")\")),b}function Tr(o,p){p=p||o.getCursor(\"start\");var v=o.getTokenAt(p);if(!v.type)return{};for(var C=v.type.split(\" \"),b={},S,s,h=0;h<C.length;h++)S=C[h],S===\"strong\"?b.bold=!0:S===\"variable-2\"?(s=o.getLine(p.line),/^\\s*\\d+\\.\\s/.test(s)?b[\"ordered-list\"]=!0:b[\"unordered-list\"]=!0):S===\"atom\"?b.quote=!0:S===\"em\"?b.italic=!0:S===\"quote\"?b.quote=!0:S===\"strikethrough\"?b.strikethrough=!0:S===\"comment\"?b.code=!0:S===\"link\"&&!b.image?b.link=!0:S===\"image\"?b.image=!0:S.match(/^header(-[1-6])?$/)&&(b[S.replace(\"header\",\"heading\")]=!0);return b}function Br(o){var p=o.codemirror;p.setOption(\"fullScreen\",!p.getOption(\"fullScreen\")),p.getOption(\"fullScreen\")?(hc=document.body.style.overflow,document.body.style.overflow=\"hidden\"):document.body.style.overflow=hc;var v=p.getWrapperElement(),C=v.nextSibling;if(C.classList.contains(\"editor-preview-active-side\"))if(o.options.sideBySideFullscreen===!1){var b=v.parentNode;p.getOption(\"fullScreen\")?b.classList.remove(\"sided--no-fullscreen\"):b.classList.add(\"sided--no-fullscreen\")}else bn(o);if(o.options.onToggleFullScreen&&o.options.onToggleFullScreen(p.getOption(\"fullScreen\")||!1),typeof o.options.maxHeight<\"u\"&&(p.getOption(\"fullScreen\")?(p.getScrollerElement().style.removeProperty(\"height\"),C.style.removeProperty(\"height\")):(p.getScrollerElement().style.height=o.options.maxHeight,o.setPreviewMaxHeight())),o.toolbar_div.classList.toggle(\"fullscreen\"),o.toolbarElements&&o.toolbarElements.fullscreen){var S=o.toolbarElements.fullscreen;S.classList.toggle(\"active\")}}function Ii(o){sa(o,\"bold\",o.options.blockStyles.bold)}function Ni(o){sa(o,\"italic\",o.options.blockStyles.italic)}function Oi(o){sa(o,\"strikethrough\",\"~~\")}function Pi(o){var p=o.options.blockStyles.code;function v(K){if(typeof K!=\"object\")throw\"fencing_line() takes a 'line' object (not a line number, or line text).  Got: \"+typeof K+\": \"+K;return K.styles&&K.styles[2]&&K.styles[2].indexOf(\"formatting-code-block\")!==-1}function C(K){return K.state.base.base||K.state.base}function b(K,X,N,R,le){N=N||K.getLineHandle(X),R=R||K.getTokenAt({line:X,ch:1}),le=le||!!N.text&&K.getTokenAt({line:X,ch:N.text.length-1});var xe=R.type?R.type.split(\" \"):[];return le&&C(le).indentedCode?\"indented\":xe.indexOf(\"comment\")===-1?!1:C(R).fencedChars||C(le).fencedChars||v(N)?\"fenced\":\"single\"}function S(K,X,N,R){var le=X.line+1,xe=N.line+1,F=X.line!==N.line,L=R+`\n`,de=`\n`+R;F&&xe++,F&&N.ch===0&&(de=R+`\n`,xe--),jr(K,!1,[L,de]),K.setSelection({line:le,ch:0},{line:xe,ch:0})}var s=o.codemirror,h=s.getCursor(\"start\"),g=s.getCursor(\"end\"),T=s.getTokenAt({line:h.line,ch:h.ch||1}),w=s.getLineHandle(h.line),c=b(s,h.line,w,T),d,k,z;if(c===\"single\"){var M=w.text.slice(0,h.ch).replace(\"`\",\"\"),_=w.text.slice(h.ch).replace(\"`\",\"\");s.replaceRange(M+_,{line:h.line,ch:0},{line:h.line,ch:99999999999999}),h.ch--,h!==g&&g.ch--,s.setSelection(h,g),s.focus()}else if(c===\"fenced\")if(h.line!==g.line||h.ch!==g.ch){for(d=h.line;d>=0&&(w=s.getLineHandle(d),!v(w));d--);var W=s.getTokenAt({line:d,ch:1}),E=C(W).fencedChars,O,G,J,re;v(s.getLineHandle(h.line))?(O=\"\",G=h.line):v(s.getLineHandle(h.line-1))?(O=\"\",G=h.line-1):(O=E+`\n`,G=h.line),v(s.getLineHandle(g.line))?(J=\"\",re=g.line,g.ch===0&&(re+=1)):g.ch!==0&&v(s.getLineHandle(g.line+1))?(J=\"\",re=g.line+1):(J=E+`\n`,re=g.line+1),g.ch===0&&(re-=1),s.operation(function(){s.replaceRange(J,{line:re,ch:0},{line:re+(J?0:1),ch:0}),s.replaceRange(O,{line:G,ch:0},{line:G+(O?0:1),ch:0})}),s.setSelection({line:G+(O?1:0),ch:0},{line:re+(O?1:-1),ch:0}),s.focus()}else{var q=h.line;if(v(s.getLineHandle(h.line))&&(b(s,h.line+1)===\"fenced\"?(d=h.line,q=h.line+1):(k=h.line,q=h.line-1)),d===void 0)for(d=q;d>=0&&(w=s.getLineHandle(d),!v(w));d--);if(k===void 0)for(z=s.lineCount(),k=q;k<z&&(w=s.getLineHandle(k),!v(w));k++);s.operation(function(){s.replaceRange(\"\",{line:d,ch:0},{line:d+1,ch:0}),s.replaceRange(\"\",{line:k-1,ch:0},{line:k,ch:0})}),s.focus()}else if(c===\"indented\"){if(h.line!==g.line||h.ch!==g.ch)d=h.line,k=g.line,g.ch===0&&k--;else{for(d=h.line;d>=0;d--)if(w=s.getLineHandle(d),!w.text.match(/^\\s*$/)&&b(s,d,w)!==\"indented\"){d+=1;break}for(z=s.lineCount(),k=h.line;k<z;k++)if(w=s.getLineHandle(k),!w.text.match(/^\\s*$/)&&b(s,k,w)!==\"indented\"){k-=1;break}}var I=s.getLineHandle(k+1),D=I&&s.getTokenAt({line:k+1,ch:I.text.length-1}),Q=D&&C(D).indentedCode;Q&&s.replaceRange(`\n`,{line:k+1,ch:0});for(var j=d;j<=k;j++)s.indentLine(j,\"subtract\");s.focus()}else{var V=h.line===g.line&&h.ch===g.ch&&h.ch===0,y=h.line!==g.line;V||y?S(s,h,g,p):jr(s,!1,[\"`\",\"`\"])}}function Bi(o){la(o.codemirror,\"quote\")}function Jn(o){Lr(o.codemirror,\"smaller\")}function ji(o){Lr(o.codemirror,\"bigger\")}function Ri(o){Lr(o.codemirror,void 0,1)}function Hi(o){Lr(o.codemirror,void 0,2)}function Wi(o){Lr(o.codemirror,void 0,3)}function na(o){Lr(o.codemirror,void 0,4)}function ia(o){Lr(o.codemirror,void 0,5)}function oa(o){Lr(o.codemirror,void 0,6)}function Ui(o){var p=o.codemirror,v=\"*\";[\"-\",\"+\",\"*\"].includes(o.options.unorderedListStyle)&&(v=o.options.unorderedListStyle),la(p,\"unordered-list\",v)}function $i(o){la(o.codemirror,\"ordered-list\")}function Ki(o){Pd(o.codemirror)}function Gi(o){var p=o.options,v=\"https://\";if(p.promptURLs){var C=prompt(p.promptTexts.link,v);if(!C)return!1;v=bc(C)}xc(o,\"link\",p.insertTexts.link,v)}function Zi(o){var p=o.options,v=\"https://\";if(p.promptURLs){var C=prompt(p.promptTexts.image,v);if(!C)return!1;v=bc(C)}xc(o,\"image\",p.insertTexts.image,v)}function bc(o){return encodeURI(o).replace(/([\\\\()])/g,\"\\\\$1\")}function aa(o){o.openBrowseFileWindow()}function yc(o,p){var v=o.codemirror,C=Tr(v),b=o.options,S=p.substr(p.lastIndexOf(\"/\")+1),s=S.substring(S.lastIndexOf(\".\")+1).replace(/\\?.*$/,\"\").toLowerCase();if([\"png\",\"jpg\",\"jpeg\",\"gif\",\"svg\",\"apng\",\"avif\",\"webp\"].includes(s))jr(v,C.image,b.insertTexts.uploadedImage,p);else{var h=b.insertTexts.link;h[0]=\"[\"+S,jr(v,C.link,h,p)}o.updateStatusBar(\"upload-image\",o.options.imageTexts.sbOnUploaded.replace(\"#image_name#\",S)),setTimeout(function(){o.updateStatusBar(\"upload-image\",o.options.imageTexts.sbInit)},1e3)}function Xi(o){var p=o.codemirror,v=Tr(p),C=o.options;jr(p,v.table,C.insertTexts.table)}function Yi(o){var p=o.codemirror,v=Tr(p),C=o.options;jr(p,v.image,C.insertTexts.horizontalRule)}function Qi(o){var p=o.codemirror;p.undo(),p.focus()}function Vi(o){var p=o.codemirror;p.redo(),p.focus()}function bn(o){var p=o.codemirror,v=p.getWrapperElement(),C=v.nextSibling,b=o.toolbarElements&&o.toolbarElements[\"side-by-side\"],S=!1,s=v.parentNode;C.classList.contains(\"editor-preview-active-side\")?(o.options.sideBySideFullscreen===!1&&s.classList.remove(\"sided--no-fullscreen\"),C.classList.remove(\"editor-preview-active-side\"),b&&b.classList.remove(\"active\"),v.classList.remove(\"CodeMirror-sided\")):(setTimeout(function(){p.getOption(\"fullScreen\")||(o.options.sideBySideFullscreen===!1?s.classList.add(\"sided--no-fullscreen\"):Br(o)),C.classList.add(\"editor-preview-active-side\")},1),b&&b.classList.add(\"active\"),v.classList.add(\"CodeMirror-sided\"),S=!0);var h=v.lastChild;if(h.classList.contains(\"editor-preview-active\")){h.classList.remove(\"editor-preview-active\");var g=o.toolbarElements.preview,T=o.toolbar_div;g.classList.remove(\"active\"),T.classList.remove(\"disabled-for-preview\")}var w=function(){var d=o.options.previewRender(o.value(),C);d!=null&&(C.innerHTML=d)};if(p.sideBySideRenderingFunction||(p.sideBySideRenderingFunction=w),S){var c=o.options.previewRender(o.value(),C);c!=null&&(C.innerHTML=c),p.on(\"update\",p.sideBySideRenderingFunction)}else p.off(\"update\",p.sideBySideRenderingFunction);p.refresh()}function Ji(o){var p=o.codemirror,v=p.getWrapperElement(),C=o.toolbar_div,b=o.options.toolbar?o.toolbarElements.preview:!1,S=v.lastChild,s=p.getWrapperElement().nextSibling;if(s.classList.contains(\"editor-preview-active-side\")&&bn(o),!S||!S.classList.contains(\"editor-preview-full\")){if(S=document.createElement(\"div\"),S.className=\"editor-preview-full\",o.options.previewClass)if(Array.isArray(o.options.previewClass))for(var h=0;h<o.options.previewClass.length;h++)S.classList.add(o.options.previewClass[h]);else typeof o.options.previewClass==\"string\"&&S.classList.add(o.options.previewClass);v.appendChild(S)}S.classList.contains(\"editor-preview-active\")?(S.classList.remove(\"editor-preview-active\"),b&&(b.classList.remove(\"active\"),C.classList.remove(\"disabled-for-preview\"))):(setTimeout(function(){S.classList.add(\"editor-preview-active\")},1),b&&(b.classList.add(\"active\"),C.classList.add(\"disabled-for-preview\")));var g=o.options.previewRender(o.value(),S);g!==null&&(S.innerHTML=g)}function jr(o,p,v,C){if(!o.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")){var b,S=v[0],s=v[1],h={},g={};Object.assign(h,o.getCursor(\"start\")),Object.assign(g,o.getCursor(\"end\")),C&&(S=S.replace(\"#url#\",C),s=s.replace(\"#url#\",C)),p?(b=o.getLine(h.line),S=b.slice(0,h.ch),s=b.slice(h.ch),o.replaceRange(S+s,{line:h.line,ch:0})):(b=o.getSelection(),o.replaceSelection(S+b+s),h.ch+=S.length,h!==g&&(g.ch+=S.length)),o.setSelection(h,g),o.focus()}}function Lr(o,p,v){if(!o.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")){for(var C=o.getCursor(\"start\"),b=o.getCursor(\"end\"),S=C.line;S<=b.line;S++)(function(s){var h=o.getLine(s),g=h.search(/[^#]/);p!==void 0?g<=0?p==\"bigger\"?h=\"###### \"+h:h=\"# \"+h:g==6&&p==\"smaller\"?h=h.substr(7):g==1&&p==\"bigger\"?h=h.substr(2):p==\"bigger\"?h=h.substr(1):h=\"#\"+h:g<=0?h=\"#\".repeat(v)+\" \"+h:g==v?h=h.substr(g+1):h=\"#\".repeat(v)+\" \"+h.substr(g+1),o.replaceRange(h,{line:s,ch:0},{line:s,ch:99999999999999})})(S);o.focus()}}function la(o,p,v){if(!o.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")){for(var C=/^(\\s*)(\\*|-|\\+|\\d*\\.)(\\s+)/,b=/^\\s*/,S=Tr(o),s=o.getCursor(\"start\"),h=o.getCursor(\"end\"),g={quote:/^(\\s*)>\\s+/,\"unordered-list\":C,\"ordered-list\":C},T=function(z,M){var _={quote:\">\",\"unordered-list\":v,\"ordered-list\":\"%%i.\"};return _[z].replace(\"%%i\",M)},w=function(z,M){var _={quote:\">\",\"unordered-list\":\"\\\\\"+v,\"ordered-list\":\"\\\\d+.\"},W=new RegExp(_[z]);return M&&W.test(M)},c=function(z,M,_){var W=C.exec(M),E=T(z,d);return W!==null?(w(z,W[2])&&(E=\"\"),M=W[1]+E+W[3]+M.replace(b,\"\").replace(g[z],\"$1\")):_==!1&&(M=E+\" \"+M),M},d=1,k=s.line;k<=h.line;k++)(function(z){var M=o.getLine(z);S[p]?M=M.replace(g[p],\"$1\"):(p==\"unordered-list\"&&(M=c(\"ordered-list\",M,!0)),M=c(p,M,!1),d+=1),o.replaceRange(M,{line:z,ch:0},{line:z,ch:99999999999999})})(k);o.focus()}}function xc(o,p,v,C){if(!(!o.codemirror||o.isPreviewActive())){var b=o.codemirror,S=Tr(b),s=S[p];if(!s){jr(b,s,v,C);return}var h=b.getCursor(\"start\"),g=b.getCursor(\"end\"),T=b.getLine(h.line),w=T.slice(0,h.ch),c=T.slice(h.ch);p==\"link\"?w=w.replace(/(.*)[^!]\\[/,\"$1\"):p==\"image\"&&(w=w.replace(/(.*)!\\[$/,\"$1\")),c=c.replace(/]\\(.*?\\)/,\"\"),b.replaceRange(w+c,{line:h.line,ch:0},{line:h.line,ch:99999999999999}),h.ch-=v[0].length,h!==g&&(g.ch-=v[0].length),b.setSelection(h,g),b.focus()}}function sa(o,p,v,C){if(!(!o.codemirror||o.isPreviewActive())){C=typeof C>\"u\"?v:C;var b=o.codemirror,S=Tr(b),s,h=v,g=C,T=b.getCursor(\"start\"),w=b.getCursor(\"end\");S[p]?(s=b.getLine(T.line),h=s.slice(0,T.ch),g=s.slice(T.ch),p==\"bold\"?(h=h.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/,\"\"),g=g.replace(/(\\*\\*|__)/,\"\")):p==\"italic\"?(h=h.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/,\"\"),g=g.replace(/(\\*|_)/,\"\")):p==\"strikethrough\"&&(h=h.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/,\"\"),g=g.replace(/(\\*\\*|~~)/,\"\")),b.replaceRange(h+g,{line:T.line,ch:0},{line:T.line,ch:99999999999999}),p==\"bold\"||p==\"strikethrough\"?(T.ch-=2,T!==w&&(w.ch-=2)):p==\"italic\"&&(T.ch-=1,T!==w&&(w.ch-=1))):(s=b.getSelection(),p==\"bold\"?(s=s.split(\"**\").join(\"\"),s=s.split(\"__\").join(\"\")):p==\"italic\"?(s=s.split(\"*\").join(\"\"),s=s.split(\"_\").join(\"\")):p==\"strikethrough\"&&(s=s.split(\"~~\").join(\"\")),b.replaceSelection(h+s+g),T.ch+=v.length,w.ch=T.ch+s.length),b.setSelection(T,w),b.focus()}}function Pd(o){if(!o.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\"))for(var p=o.getCursor(\"start\"),v=o.getCursor(\"end\"),C,b=p.line;b<=v.line;b++)C=o.getLine(b),C=C.replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/,\"\"),o.replaceRange(C,{line:b,ch:0},{line:b,ch:99999999999999})}function Fi(o,p){if(Math.abs(o)<1024)return\"\"+o+p[0];var v=0;do o/=1024,++v;while(Math.abs(o)>=1024&&v<p.length);return\"\"+o.toFixed(1)+p[v]}function _c(o,p){for(var v in p)Object.prototype.hasOwnProperty.call(p,v)&&(p[v]instanceof Array?o[v]=p[v].concat(o[v]instanceof Array?o[v]:[]):p[v]!==null&&typeof p[v]==\"object\"&&p[v].constructor===Object?o[v]=_c(o[v]||{},p[v]):o[v]=p[v]);return o}function fr(o){for(var p=1;p<arguments.length;p++)o=_c(o,arguments[p]);return o}function gc(o){var p=/[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g,v=o.match(p),C=0;if(v===null)return C;for(var b=0;b<v.length;b++)v[b].charCodeAt(0)>=19968?C+=v[b].length:C+=1;return C}function Te(o){o=o||{},o.parent=this;var p=!0;if(o.autoDownloadFontAwesome===!1&&(p=!1),o.autoDownloadFontAwesome!==!0)for(var v=document.styleSheets,C=0;C<v.length;C++)v[C].href&&v[C].href.indexOf(\"//maxcdn.bootstrapcdn.com/font-awesome/\")>-1&&(p=!1);if(p){var b=document.createElement(\"link\");b.rel=\"stylesheet\",b.href=\"https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css\",document.getElementsByTagName(\"head\")[0].appendChild(b)}if(o.element)this.element=o.element;else if(o.element===null){console.log(\"EasyMDE: Error. No element was found.\");return}if(o.toolbar===void 0){o.toolbar=[];for(var S in Pr)Object.prototype.hasOwnProperty.call(Pr,S)&&(S.indexOf(\"separator-\")!=-1&&o.toolbar.push(\"|\"),(Pr[S].default===!0||o.showIcons&&o.showIcons.constructor===Array&&o.showIcons.indexOf(S)!=-1)&&o.toolbar.push(S))}if(Object.prototype.hasOwnProperty.call(o,\"previewClass\")||(o.previewClass=\"editor-preview\"),Object.prototype.hasOwnProperty.call(o,\"status\")||(o.status=[\"autosave\",\"lines\",\"words\",\"cursor\"],o.uploadImage&&o.status.unshift(\"upload-image\")),o.previewRender||(o.previewRender=function(h){return this.parent.markdown(h)}),o.parsingConfig=fr({highlightFormatting:!0},o.parsingConfig||{}),o.insertTexts=fr({},Bd,o.insertTexts||{}),o.promptTexts=fr({},jd,o.promptTexts||{}),o.blockStyles=fr({},Hd,o.blockStyles||{}),o.autosave!=null&&(o.autosave.timeFormat=fr({},Rd,o.autosave.timeFormat||{})),o.iconClassMap=fr({},et,o.iconClassMap||{}),o.shortcuts=fr({},Ad,o.shortcuts||{}),o.maxHeight=o.maxHeight||void 0,o.direction=o.direction||\"ltr\",typeof o.maxHeight<\"u\"?o.minHeight=o.maxHeight:o.minHeight=o.minHeight||\"300px\",o.errorCallback=o.errorCallback||function(h){alert(h)},o.uploadImage=o.uploadImage||!1,o.imageMaxSize=o.imageMaxSize||2097152,o.imageAccept=o.imageAccept||\"image/png, image/jpeg, image/gif, image/avif\",o.imageTexts=fr({},Wd,o.imageTexts||{}),o.errorMessages=fr({},Ud,o.errorMessages||{}),o.imagePathAbsolute=o.imagePathAbsolute||!1,o.imageCSRFName=o.imageCSRFName||\"csrfmiddlewaretoken\",o.imageCSRFHeader=o.imageCSRFHeader||!1,o.autosave!=null&&o.autosave.unique_id!=null&&o.autosave.unique_id!=\"\"&&(o.autosave.uniqueId=o.autosave.unique_id),o.overlayMode&&o.overlayMode.combine===void 0&&(o.overlayMode.combine=!0),this.options=o,this.render(),o.initialValue&&(!this.options.autosave||this.options.autosave.foundSavedValue!==!0)&&this.value(o.initialValue),o.uploadImage){var s=this;this.codemirror.on(\"dragenter\",function(h,g){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbOnDragEnter),g.stopPropagation(),g.preventDefault()}),this.codemirror.on(\"dragend\",function(h,g){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbInit),g.stopPropagation(),g.preventDefault()}),this.codemirror.on(\"dragleave\",function(h,g){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbInit),g.stopPropagation(),g.preventDefault()}),this.codemirror.on(\"dragover\",function(h,g){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbOnDragEnter),g.stopPropagation(),g.preventDefault()}),this.codemirror.on(\"drop\",function(h,g){g.stopPropagation(),g.preventDefault(),o.imageUploadFunction?s.uploadImagesUsingCustomFunction(o.imageUploadFunction,g.dataTransfer.files):s.uploadImages(g.dataTransfer.files)}),this.codemirror.on(\"paste\",function(h,g){o.imageUploadFunction?s.uploadImagesUsingCustomFunction(o.imageUploadFunction,g.clipboardData.files):s.uploadImages(g.clipboardData.files)})}}function kc(){if(typeof localStorage==\"object\")try{localStorage.setItem(\"smde_localStorage\",1),localStorage.removeItem(\"smde_localStorage\")}catch{return!1}else return!1;return!0}var mc,Md,Vn,Ad,Dd,ra,hc,et,Pr,Bd,jd,Rd,Hd,Wd,Ud,wc=Cd(()=>{mc=/Mac/.test(navigator.platform),Md=new RegExp(/(<a.*?https?:\\/\\/.*?[^a]>)+?/g),Vn={toggleBold:Ii,toggleItalic:Ni,drawLink:Gi,toggleHeadingSmaller:Jn,toggleHeadingBigger:ji,drawImage:Zi,toggleBlockquote:Bi,toggleOrderedList:$i,toggleUnorderedList:Ui,toggleCodeBlock:Pi,togglePreview:Ji,toggleStrikethrough:Oi,toggleHeading1:Ri,toggleHeading2:Hi,toggleHeading3:Wi,toggleHeading4:na,toggleHeading5:ia,toggleHeading6:oa,cleanBlock:Ki,drawTable:Xi,drawHorizontalRule:Yi,undo:Qi,redo:Vi,toggleSideBySide:bn,toggleFullScreen:Br},Ad={toggleBold:\"Cmd-B\",toggleItalic:\"Cmd-I\",drawLink:\"Cmd-K\",toggleHeadingSmaller:\"Cmd-H\",toggleHeadingBigger:\"Shift-Cmd-H\",toggleHeading1:\"Ctrl+Alt+1\",toggleHeading2:\"Ctrl+Alt+2\",toggleHeading3:\"Ctrl+Alt+3\",toggleHeading4:\"Ctrl+Alt+4\",toggleHeading5:\"Ctrl+Alt+5\",toggleHeading6:\"Ctrl+Alt+6\",cleanBlock:\"Cmd-E\",drawImage:\"Cmd-Alt-I\",toggleBlockquote:\"Cmd-'\",toggleOrderedList:\"Cmd-Alt-L\",toggleUnorderedList:\"Cmd-L\",toggleCodeBlock:\"Cmd-Alt-C\",togglePreview:\"Cmd-P\",toggleSideBySide:\"F9\",toggleFullScreen:\"F11\"},Dd=function(o){for(var p in Vn)if(Vn[p]===o)return p;return null},ra=function(){var o=!1;return(function(p){(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(p)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(p.substr(0,4)))&&(o=!0)})(navigator.userAgent||navigator.vendor||window.opera),o};hc=\"\";et={bold:\"fa fa-bold\",italic:\"fa fa-italic\",strikethrough:\"fa fa-strikethrough\",heading:\"fa fa-header fa-heading\",\"heading-smaller\":\"fa fa-header fa-heading header-smaller\",\"heading-bigger\":\"fa fa-header fa-heading header-bigger\",\"heading-1\":\"fa fa-header fa-heading header-1\",\"heading-2\":\"fa fa-header fa-heading header-2\",\"heading-3\":\"fa fa-header fa-heading header-3\",code:\"fa fa-code\",quote:\"fa fa-quote-left\",\"ordered-list\":\"fa fa-list-ol\",\"unordered-list\":\"fa fa-list-ul\",\"clean-block\":\"fa fa-eraser\",link:\"fa fa-link\",image:\"fa fa-image\",\"upload-image\":\"fa fa-image\",table:\"fa fa-table\",\"horizontal-rule\":\"fa fa-minus\",preview:\"fa fa-eye\",\"side-by-side\":\"fa fa-columns\",fullscreen:\"fa fa-arrows-alt\",guide:\"fa fa-question-circle\",undo:\"fa fa-undo\",redo:\"fa fa-repeat fa-redo\"},Pr={bold:{name:\"bold\",action:Ii,className:et.bold,title:\"Bold\",default:!0},italic:{name:\"italic\",action:Ni,className:et.italic,title:\"Italic\",default:!0},strikethrough:{name:\"strikethrough\",action:Oi,className:et.strikethrough,title:\"Strikethrough\"},heading:{name:\"heading\",action:Jn,className:et.heading,title:\"Heading\",default:!0},\"heading-smaller\":{name:\"heading-smaller\",action:Jn,className:et[\"heading-smaller\"],title:\"Smaller Heading\"},\"heading-bigger\":{name:\"heading-bigger\",action:ji,className:et[\"heading-bigger\"],title:\"Bigger Heading\"},\"heading-1\":{name:\"heading-1\",action:Ri,className:et[\"heading-1\"],title:\"Big Heading\"},\"heading-2\":{name:\"heading-2\",action:Hi,className:et[\"heading-2\"],title:\"Medium Heading\"},\"heading-3\":{name:\"heading-3\",action:Wi,className:et[\"heading-3\"],title:\"Small Heading\"},\"separator-1\":{name:\"separator-1\"},code:{name:\"code\",action:Pi,className:et.code,title:\"Code\"},quote:{name:\"quote\",action:Bi,className:et.quote,title:\"Quote\",default:!0},\"unordered-list\":{name:\"unordered-list\",action:Ui,className:et[\"unordered-list\"],title:\"Generic List\",default:!0},\"ordered-list\":{name:\"ordered-list\",action:$i,className:et[\"ordered-list\"],title:\"Numbered List\",default:!0},\"clean-block\":{name:\"clean-block\",action:Ki,className:et[\"clean-block\"],title:\"Clean block\"},\"separator-2\":{name:\"separator-2\"},link:{name:\"link\",action:Gi,className:et.link,title:\"Create Link\",default:!0},image:{name:\"image\",action:Zi,className:et.image,title:\"Insert Image\",default:!0},\"upload-image\":{name:\"upload-image\",action:aa,className:et[\"upload-image\"],title:\"Import an image\"},table:{name:\"table\",action:Xi,className:et.table,title:\"Insert Table\"},\"horizontal-rule\":{name:\"horizontal-rule\",action:Yi,className:et[\"horizontal-rule\"],title:\"Insert Horizontal Line\"},\"separator-3\":{name:\"separator-3\"},preview:{name:\"preview\",action:Ji,className:et.preview,noDisable:!0,title:\"Toggle Preview\",default:!0},\"side-by-side\":{name:\"side-by-side\",action:bn,className:et[\"side-by-side\"],noDisable:!0,noMobile:!0,title:\"Toggle Side by Side\",default:!0},fullscreen:{name:\"fullscreen\",action:Br,className:et.fullscreen,noDisable:!0,noMobile:!0,title:\"Toggle Fullscreen\",default:!0},\"separator-4\":{name:\"separator-4\"},guide:{name:\"guide\",action:\"https://www.markdownguide.org/basic-syntax/\",className:et.guide,noDisable:!0,title:\"Markdown Guide\",default:!0},\"separator-5\":{name:\"separator-5\"},undo:{name:\"undo\",action:Qi,className:et.undo,noDisable:!0,title:\"Undo\"},redo:{name:\"redo\",action:Vi,className:et.redo,noDisable:!0,title:\"Redo\"}},Bd={link:[\"[\",\"](#url#)\"],image:[\"![\",\"](#url#)\"],uploadedImage:[\"![](#url#)\",\"\"],table:[\"\",`\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text     | Text     | Text     |\n\n`],horizontalRule:[\"\",`\n\n-----\n\n`]},jd={link:\"URL for the link:\",image:\"URL of the image:\"},Rd={locale:\"en-US\",format:{hour:\"2-digit\",minute:\"2-digit\"}},Hd={bold:\"**\",code:\"```\",italic:\"*\"},Wd={sbInit:\"Attach files by drag and dropping or pasting from clipboard.\",sbOnDragEnter:\"Drop image to upload it.\",sbOnDrop:\"Uploading image #images_names#...\",sbProgress:\"Uploading #file_name#: #progress#%\",sbOnUploaded:\"Uploaded #image_name#\",sizeUnits:\" B, KB, MB\"},Ud={noFileGiven:\"You must select a file.\",typeNotAllowed:\"This image type is not allowed.\",fileTooLarge:`Image #image_name# is too big (#image_size#).\nMaximum file size is #image_max_size#.`,importError:\"Something went wrong when uploading the image #image_name#.\"};Te.prototype.uploadImages=function(o,p,v){if(o.length!==0){for(var C=[],b=0;b<o.length;b++)C.push(o[b].name),this.uploadImage(o[b],p,v);this.updateStatusBar(\"upload-image\",this.options.imageTexts.sbOnDrop.replace(\"#images_names#\",C.join(\", \")))}};Te.prototype.uploadImagesUsingCustomFunction=function(o,p){if(p.length!==0){for(var v=[],C=0;C<p.length;C++)v.push(p[C].name),this.uploadImageUsingCustomFunction(o,p[C]);this.updateStatusBar(\"upload-image\",this.options.imageTexts.sbOnDrop.replace(\"#images_names#\",v.join(\", \")))}};Te.prototype.updateStatusBar=function(o,p){if(this.gui.statusbar){var v=this.gui.statusbar.getElementsByClassName(o);v.length===1?this.gui.statusbar.getElementsByClassName(o)[0].textContent=p:v.length===0?console.log(\"EasyMDE: status bar item \"+o+\" was not found.\"):console.log(\"EasyMDE: Several status bar items named \"+o+\" was found.\")}};Te.prototype.markdown=function(o){if(marked){var p;if(this.options&&this.options.renderingConfig&&this.options.renderingConfig.markedOptions?p=this.options.renderingConfig.markedOptions:p={},this.options&&this.options.renderingConfig&&this.options.renderingConfig.singleLineBreaks===!1?p.breaks=!1:p.breaks=!0,this.options&&this.options.renderingConfig&&this.options.renderingConfig.codeSyntaxHighlighting===!0){var v=this.options.renderingConfig.hljs||window.hljs;v&&(p.highlight=function(b,S){return S&&v.getLanguage(S)?v.highlight(S,b).value:v.highlightAuto(b).value})}marked.setOptions(p);var C=marked.parse(o);return this.options.renderingConfig&&typeof this.options.renderingConfig.sanitizerFunction==\"function\"&&(C=this.options.renderingConfig.sanitizerFunction.call(this,C)),C=qd(C),C=Fd(C),C}};Te.prototype.render=function(o){if(o||(o=this.element||document.getElementsByTagName(\"textarea\")[0]),this._rendered&&this._rendered===o)return;this.element=o;var p=this.options,v=this,C={};function b(E){let O=E.getInputField(),G=O.form;if(G){let J=Array.from(G.elements).filter(q=>!(q.closest&&q.closest(\".editor-toolbar\")||q.offsetParent===null)),re=J.indexOf(O);re!==-1&&re+1<J.length&&J[re+1]&&J[re+1].focus()}}function S(E){let O=E.getInputField(),G=O.form;if(G){let J=Array.from(G.elements).filter(q=>!(q.closest&&q.closest(\".editor-toolbar\")||q.offsetParent===null)),re=J.indexOf(O);if(re!==-1)for(let q=re-1;q>=0;q--){let I=J[q];if(I){I.focus();break}}}}for(var s in p.shortcuts)p.shortcuts[s]!==null&&Vn[s]!==null&&(function(E){C[vc(p.shortcuts[E])]=function(){var O=Vn[E];typeof O==\"function\"?O(v):typeof O==\"string\"&&window.open(O,\"_blank\")}})(s);C.Enter=\"newlineAndIndentContinueMarkdownList\",C.Tab=E=>{let O=E.getSelection();O&&O.length>0?E.execCommand(\"indentMore\"):b(E)},C[\"Shift-Tab\"]=E=>{let O=E.getSelection();O&&O.length>0?E.execCommand(\"indentLess\"):S(E)},C.Esc=function(E){E.getOption(\"fullScreen\")&&Br(v)},this.documentOnKeyDown=function(E){E=E||window.event,E.keyCode==27&&v.codemirror.getOption(\"fullScreen\")&&Br(v)},document.addEventListener(\"keydown\",this.documentOnKeyDown,!1);var h,g;p.overlayMode?(CodeMirror.defineMode(\"overlay-mode\",function(E){return CodeMirror.overlayMode(CodeMirror.getMode(E,p.spellChecker!==!1?\"spell-checker\":\"gfm\"),p.overlayMode.mode,p.overlayMode.combine)}),h=\"overlay-mode\",g=p.parsingConfig,g.gitHubSpice=!1):(h=p.parsingConfig,h.name=\"gfm\",h.gitHubSpice=!1),p.spellChecker!==!1&&(h=\"spell-checker\",g=p.parsingConfig,g.name=\"gfm\",g.gitHubSpice=!1,typeof p.spellChecker==\"function\"?p.spellChecker({codeMirrorInstance:CodeMirror}):CodeMirrorSpellChecker({codeMirrorInstance:CodeMirror}));function T(E,O,G){return{addNew:!1}}if(CodeMirror.getMode(\"php\").mime=\"text/x-php\",this.codemirror=CodeMirror.fromTextArea(o,{mode:h,backdrop:g,theme:p.theme!=null?p.theme:\"easymde\",tabSize:p.tabSize!=null?p.tabSize:2,indentUnit:p.tabSize!=null?p.tabSize:2,indentWithTabs:p.indentWithTabs!==!1,lineNumbers:p.lineNumbers===!0,autofocus:p.autofocus===!0,extraKeys:C,direction:p.direction,lineWrapping:p.lineWrapping!==!1,allowDropFileTypes:[\"text/plain\"],placeholder:p.placeholder||o.getAttribute(\"placeholder\")||\"\",styleSelectedText:p.styleSelectedText!=null?p.styleSelectedText:!ra(),scrollbarStyle:p.scrollbarStyle!=null?p.scrollbarStyle:\"native\",configureMouse:T,inputStyle:p.inputStyle!=null?p.inputStyle:ra()?\"contenteditable\":\"textarea\",spellcheck:p.nativeSpellcheck!=null?p.nativeSpellcheck:!0,autoRefresh:p.autoRefresh!=null?p.autoRefresh:!1}),this.codemirror.getScrollerElement().style.minHeight=p.minHeight,typeof p.maxHeight<\"u\"&&(this.codemirror.getScrollerElement().style.height=p.maxHeight),p.forceSync===!0){var w=this.codemirror;w.on(\"change\",function(){w.save()})}this.gui={};var c=document.createElement(\"div\");c.classList.add(\"EasyMDEContainer\"),c.setAttribute(\"role\",\"application\");var d=this.codemirror.getWrapperElement();d.parentNode.insertBefore(c,d),c.appendChild(d),p.toolbar!==!1&&(this.gui.toolbar=this.createToolbar()),p.status!==!1&&(this.gui.statusbar=this.createStatusbar()),p.autosave!=null&&p.autosave.enabled===!0&&(this.autosave(),this.codemirror.on(\"change\",function(){clearTimeout(v._autosave_timeout),v._autosave_timeout=setTimeout(function(){v.autosave()},v.options.autosave.submit_delay||v.options.autosave.delay||1e3)}));function k(E,O){var G,J=window.getComputedStyle(document.querySelector(\".CodeMirror-sizer\")).width.replace(\"px\",\"\");return E<J?G=O+\"px\":G=O/E*100+\"%\",G}var z=this;function M(E,O){E.setAttribute(\"data-img-src\",O.url),E.setAttribute(\"style\",\"--bg-image:url(\"+O.url+\");--width:\"+O.naturalWidth+\"px;--height:\"+k(O.naturalWidth,O.naturalHeight)),z.codemirror.setSize()}function _(){p.previewImagesInEditor&&c.querySelectorAll(\".cm-image-marker\").forEach(function(E){var O=E.parentElement;if(O.innerText.match(/^!\\[.*?\\]\\(.*\\)/g)&&!O.hasAttribute(\"data-img-src\")){var G=O.innerText.match(\"\\\\((.*)\\\\)\");if(window.EMDEimagesCache||(window.EMDEimagesCache={}),G&&G.length>=2){var J=G[1];if(p.imagesPreviewHandler){var re=p.imagesPreviewHandler(G[1]);typeof re==\"string\"&&(J=re)}if(window.EMDEimagesCache[J])M(O,window.EMDEimagesCache[J]);else{var q=document.createElement(\"img\");q.onload=function(){window.EMDEimagesCache[J]={naturalWidth:q.naturalWidth,naturalHeight:q.naturalHeight,url:J},M(O,window.EMDEimagesCache[J])},q.src=J}}}})}this.codemirror.on(\"update\",function(){_()}),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(p.autofocus===!0||o.autofocus)&&this.codemirror.focus();var W=this.codemirror;setTimeout(function(){W.refresh()}.bind(W),0)};Te.prototype.cleanup=function(){document.removeEventListener(\"keydown\",this.documentOnKeyDown)};Te.prototype.autosave=function(){if(kc()){var o=this;if(this.options.autosave.uniqueId==null||this.options.autosave.uniqueId==\"\"){console.log(\"EasyMDE: You must set a uniqueId to use the autosave feature\");return}this.options.autosave.binded!==!0&&(o.element.form!=null&&o.element.form!=null&&o.element.form.addEventListener(\"submit\",function(){clearTimeout(o.autosaveTimeoutId),o.autosaveTimeoutId=void 0,localStorage.removeItem(\"smde_\"+o.options.autosave.uniqueId)}),this.options.autosave.binded=!0),this.options.autosave.loaded!==!0&&(typeof localStorage.getItem(\"smde_\"+this.options.autosave.uniqueId)==\"string\"&&localStorage.getItem(\"smde_\"+this.options.autosave.uniqueId)!=\"\"&&(this.codemirror.setValue(localStorage.getItem(\"smde_\"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0);var p=o.value();p!==\"\"?localStorage.setItem(\"smde_\"+this.options.autosave.uniqueId,p):localStorage.removeItem(\"smde_\"+this.options.autosave.uniqueId);var v=document.getElementById(\"autosaved\");if(v!=null&&v!=null&&v!=\"\"){var C=new Date,b=new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale,\"en-US\"],this.options.autosave.timeFormat.format).format(C),S=this.options.autosave.text==null?\"Autosaved: \":this.options.autosave.text;v.innerHTML=S+b}}else console.log(\"EasyMDE: localStorage not available, cannot autosave\")};Te.prototype.clearAutosavedValue=function(){if(kc()){if(this.options.autosave==null||this.options.autosave.uniqueId==null||this.options.autosave.uniqueId==\"\"){console.log(\"EasyMDE: You must set a uniqueId to clear the autosave value\");return}localStorage.removeItem(\"smde_\"+this.options.autosave.uniqueId)}else console.log(\"EasyMDE: localStorage not available, cannot autosave\")};Te.prototype.openBrowseFileWindow=function(o,p){var v=this,C=this.gui.toolbar.getElementsByClassName(\"imageInput\")[0];C.click();function b(S){v.options.imageUploadFunction?v.uploadImagesUsingCustomFunction(v.options.imageUploadFunction,S.target.files):v.uploadImages(S.target.files,o,p),C.removeEventListener(\"change\",b)}C.addEventListener(\"change\",b)};Te.prototype.uploadImage=function(o,p,v){var C=this;p=p||function(T){yc(C,T)};function b(g){C.updateStatusBar(\"upload-image\",g),setTimeout(function(){C.updateStatusBar(\"upload-image\",C.options.imageTexts.sbInit)},1e4),v&&typeof v==\"function\"&&v(g),C.options.errorCallback(g)}function S(g){var T=C.options.imageTexts.sizeUnits.split(\",\");return g.replace(\"#image_name#\",o.name).replace(\"#image_size#\",Fi(o.size,T)).replace(\"#image_max_size#\",Fi(C.options.imageMaxSize,T))}if(o.size>this.options.imageMaxSize){b(S(this.options.errorMessages.fileTooLarge));return}var s=new FormData;s.append(\"image\",o),C.options.imageCSRFToken&&!C.options.imageCSRFHeader&&s.append(C.options.imageCSRFName,C.options.imageCSRFToken);var h=new XMLHttpRequest;h.upload.onprogress=function(g){if(g.lengthComputable){var T=\"\"+Math.round(g.loaded*100/g.total);C.updateStatusBar(\"upload-image\",C.options.imageTexts.sbProgress.replace(\"#file_name#\",o.name).replace(\"#progress#\",T))}},h.open(\"POST\",this.options.imageUploadEndpoint),C.options.imageCSRFToken&&C.options.imageCSRFHeader&&h.setRequestHeader(C.options.imageCSRFName,C.options.imageCSRFToken),h.onload=function(){try{var g=JSON.parse(this.responseText)}catch{console.error(\"EasyMDE: The server did not return a valid json.\"),b(S(C.options.errorMessages.importError));return}this.status===200&&g&&!g.error&&g.data&&g.data.filePath?p((C.options.imagePathAbsolute?\"\":window.location.origin+\"/\")+g.data.filePath):g.error&&g.error in C.options.errorMessages?b(S(C.options.errorMessages[g.error])):g.error?b(S(g.error)):(console.error(\"EasyMDE: Received an unexpected response after uploading the image.\"+this.status+\" (\"+this.statusText+\")\"),b(S(C.options.errorMessages.importError)))},h.onerror=function(g){console.error(\"EasyMDE: An unexpected error occurred when trying to upload the image.\"+g.target.status+\" (\"+g.target.statusText+\")\"),b(C.options.errorMessages.importError)},h.send(s)};Te.prototype.uploadImageUsingCustomFunction=function(o,p){var v=this;function C(s){yc(v,s)}function b(s){var h=S(s);v.updateStatusBar(\"upload-image\",h),setTimeout(function(){v.updateStatusBar(\"upload-image\",v.options.imageTexts.sbInit)},1e4),v.options.errorCallback(h)}function S(s){var h=v.options.imageTexts.sizeUnits.split(\",\");return s.replace(\"#image_name#\",p.name).replace(\"#image_size#\",Fi(p.size,h)).replace(\"#image_max_size#\",Fi(v.options.imageMaxSize,h))}o.apply(this,[p,C,b])};Te.prototype.setPreviewMaxHeight=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling,C=parseInt(window.getComputedStyle(p).paddingTop),b=parseInt(window.getComputedStyle(p).borderTopWidth),S=parseInt(this.options.maxHeight),s=S+C*2+b*2,h=s.toString()+\"px\";v.style.height=h};Te.prototype.createSideBySide=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling;if(!v||!v.classList.contains(\"editor-preview-side\")){if(v=document.createElement(\"div\"),v.className=\"editor-preview-side\",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var C=0;C<this.options.previewClass.length;C++)v.classList.add(this.options.previewClass[C]);else typeof this.options.previewClass==\"string\"&&v.classList.add(this.options.previewClass);p.parentNode.insertBefore(v,p.nextSibling)}if(typeof this.options.maxHeight<\"u\"&&this.setPreviewMaxHeight(),this.options.syncSideBySidePreviewScroll===!1)return v;var b=!1,S=!1;return o.on(\"scroll\",function(s){if(b){b=!1;return}S=!0;var h=s.getScrollInfo().height-s.getScrollInfo().clientHeight,g=parseFloat(s.getScrollInfo().top)/h,T=(v.scrollHeight-v.clientHeight)*g;v.scrollTop=T}),v.onscroll=function(){if(S){S=!1;return}b=!0;var s=v.scrollHeight-v.clientHeight,h=parseFloat(v.scrollTop)/s,g=(o.getScrollInfo().height-o.getScrollInfo().clientHeight)*h;o.scrollTo(0,g)},v};Te.prototype.createToolbar=function(o){if(o=o||this.options.toolbar,!(!o||o.length===0)){var p;for(p=0;p<o.length;p++)Pr[o[p]]!=null&&(o[p]=Pr[o[p]]);var v=document.createElement(\"div\");v.className=\"editor-toolbar\",v.setAttribute(\"role\",\"toolbar\");var C=this,b={};for(C.toolbar=o,p=0;p<o.length;p++)if(!(o[p].name==\"guide\"&&C.options.toolbarGuideIcon===!1)&&!(C.options.hideIcons&&C.options.hideIcons.indexOf(o[p].name)!=-1)&&!((o[p].name==\"fullscreen\"||o[p].name==\"side-by-side\")&&ra())){if(o[p]===\"|\"){for(var S=!1,s=p+1;s<o.length;s++)o[s]!==\"|\"&&(!C.options.hideIcons||C.options.hideIcons.indexOf(o[s].name)==-1)&&(S=!0);if(!S)continue}(function(T){var w;if(T===\"|\"?w=Nd():T.children?w=Id(T,C.options.toolbarTips,C.options.shortcuts,C):w=qi(T,!0,C.options.toolbarTips,C.options.shortcuts,\"button\",C),b[T.name||T]=w,v.appendChild(w),T.name===\"upload-image\"){var c=document.createElement(\"input\");c.className=\"imageInput\",c.type=\"file\",c.multiple=!0,c.name=\"image\",c.accept=C.options.imageAccept,c.style.display=\"none\",c.style.opacity=0,v.appendChild(c)}})(o[p])}C.toolbar_div=v,C.toolbarElements=b;var h=this.codemirror;h.on(\"cursorActivity\",function(){var T=Tr(h);for(var w in b)(function(c){var d=b[c];T[c]?d.classList.add(\"active\"):c!=\"fullscreen\"&&c!=\"side-by-side\"&&d.classList.remove(\"active\")})(w)});var g=h.getWrapperElement();return g.parentNode.insertBefore(v,g),v}};Te.prototype.createStatusbar=function(o){o=o||this.options.status;var p=this.options,v=this.codemirror;if(!(!o||o.length===0)){var C=[],b,S,s,h;for(b=0;b<o.length;b++)if(S=void 0,s=void 0,h=void 0,typeof o[b]==\"object\")C.push({className:o[b].className,defaultValue:o[b].defaultValue,onUpdate:o[b].onUpdate,onActivity:o[b].onActivity});else{var g=o[b];g===\"words\"?(h=function(k){k.innerHTML=gc(v.getValue())},S=function(k){k.innerHTML=gc(v.getValue())}):g===\"lines\"?(h=function(k){k.innerHTML=v.lineCount()},S=function(k){k.innerHTML=v.lineCount()}):g===\"cursor\"?(h=function(k){k.innerHTML=\"1:1\"},s=function(k){var z=v.getCursor(),M=z.line+1,_=z.ch+1;k.innerHTML=M+\":\"+_}):g===\"autosave\"?h=function(k){p.autosave!=null&&p.autosave.enabled===!0&&k.setAttribute(\"id\",\"autosaved\")}:g===\"upload-image\"&&(h=function(k){k.innerHTML=p.imageTexts.sbInit}),C.push({className:g,defaultValue:h,onUpdate:S,onActivity:s})}var T=document.createElement(\"div\");for(T.className=\"editor-statusbar\",b=0;b<C.length;b++){var w=C[b],c=document.createElement(\"span\");c.className=w.className,typeof w.defaultValue==\"function\"&&w.defaultValue(c),typeof w.onUpdate==\"function\"&&this.codemirror.on(\"update\",(function(k,z){return function(){z.onUpdate(k)}})(c,w)),typeof w.onActivity==\"function\"&&this.codemirror.on(\"cursorActivity\",(function(k,z){return function(){z.onActivity(k)}})(c,w)),T.appendChild(c)}var d=this.codemirror.getWrapperElement();return d.parentNode.insertBefore(T,d.nextSibling),T}};Te.prototype.value=function(o){var p=this.codemirror;if(o===void 0)return p.getValue();if(p.getDoc().setValue(o),this.isPreviewActive()){var v=p.getWrapperElement(),C=v.lastChild,b=this.options.previewRender(o,C);b!==null&&(C.innerHTML=b)}return this};Te.toggleBold=Ii;Te.toggleItalic=Ni;Te.toggleStrikethrough=Oi;Te.toggleBlockquote=Bi;Te.toggleHeadingSmaller=Jn;Te.toggleHeadingBigger=ji;Te.toggleHeading1=Ri;Te.toggleHeading2=Hi;Te.toggleHeading3=Wi;Te.toggleHeading4=na;Te.toggleHeading5=ia;Te.toggleHeading6=oa;Te.toggleCodeBlock=Pi;Te.toggleUnorderedList=Ui;Te.toggleOrderedList=$i;Te.cleanBlock=Ki;Te.drawLink=Gi;Te.drawImage=Zi;Te.drawUploadedImage=aa;Te.drawTable=Xi;Te.drawHorizontalRule=Yi;Te.undo=Qi;Te.redo=Vi;Te.togglePreview=Ji;Te.toggleSideBySide=bn;Te.toggleFullScreen=Br;Te.prototype.toggleBold=function(){Ii(this)};Te.prototype.toggleItalic=function(){Ni(this)};Te.prototype.toggleStrikethrough=function(){Oi(this)};Te.prototype.toggleBlockquote=function(){Bi(this)};Te.prototype.toggleHeadingSmaller=function(){Jn(this)};Te.prototype.toggleHeadingBigger=function(){ji(this)};Te.prototype.toggleHeading1=function(){Ri(this)};Te.prototype.toggleHeading2=function(){Hi(this)};Te.prototype.toggleHeading3=function(){Wi(this)};Te.prototype.toggleHeading4=function(){na(this)};Te.prototype.toggleHeading5=function(){ia(this)};Te.prototype.toggleHeading6=function(){oa(this)};Te.prototype.toggleCodeBlock=function(){Pi(this)};Te.prototype.toggleUnorderedList=function(){Ui(this)};Te.prototype.toggleOrderedList=function(){$i(this)};Te.prototype.cleanBlock=function(){Ki(this)};Te.prototype.drawLink=function(){Gi(this)};Te.prototype.drawImage=function(){Zi(this)};Te.prototype.drawUploadedImage=function(){aa(this)};Te.prototype.drawTable=function(){Xi(this)};Te.prototype.drawHorizontalRule=function(){Yi(this)};Te.prototype.undo=function(){Qi(this)};Te.prototype.redo=function(){Vi(this)};Te.prototype.togglePreview=function(){Ji(this)};Te.prototype.toggleSideBySide=function(){bn(this)};Te.prototype.toggleFullScreen=function(){Br(this)};Te.prototype.isPreviewActive=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.lastChild;return v.classList.contains(\"editor-preview-active\")};Te.prototype.isSideBySideActive=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.nextSibling;return v.classList.contains(\"editor-preview-active-side\")};Te.prototype.isFullscreenActive=function(){var o=this.codemirror;return o.getOption(\"fullScreen\")};Te.prototype.getState=function(){var o=this.codemirror;return Tr(o)};Te.prototype.toTextArea=function(){var o=this.codemirror,p=o.getWrapperElement(),v=p.parentNode;v&&(this.gui.toolbar&&v.removeChild(this.gui.toolbar),this.gui.statusbar&&v.removeChild(this.gui.statusbar),this.gui.sideBySide&&v.removeChild(this.gui.sideBySide)),v.parentNode.insertBefore(p,v),v.remove(),o.toTextArea(),this.autosaveTimeoutId&&(clearTimeout(this.autosaveTimeoutId),this.autosaveTimeoutId=void 0,this.clearAutosavedValue())};window.EasyMDE=Te});window.CodeMirror=We();We();Yn();ps();ms();ys();ks();Vo();Cs();gn();Ds();Rs();Ks();eu();nu();Qn();au();vn();uu();du();Jo();gu();bu();_u();Su();Cu();Mu();qu();Nu();ea();Ru();Uu();ta();Xu();cc();mn();pc();wc();CodeMirror.commands.tabAndIndentMarkdownList=function(o){var p=o.listSelections(),v=p[0].head,C=o.getStateAfter(v.line),b=C.list!==!1;if(b){o.execCommand(\"indentMore\");return}if(o.options.indentWithTabs){o.execCommand(\"insertTab\");return}var S=Array(o.options.tabSize+1).join(\" \");o.replaceSelection(S)};CodeMirror.commands.shiftTabAndUnindentMarkdownList=function(o){var p=o.listSelections(),v=p[0].head,C=o.getStateAfter(v.line),b=C.list!==!1;if(b){o.execCommand(\"indentLess\");return}if(o.options.indentWithTabs){o.execCommand(\"insertTab\");return}var S=Array(o.options.tabSize+1).join(\" \");o.replaceSelection(S)};function Kd({canAttachFiles:o,isLiveDebounced:p,isLiveOnBlur:v,liveDebounce:C,maxHeight:b,minHeight:S,placeholder:s,setUpUsing:h,state:g,translations:T,toolbarButtons:w,uploadFileAttachmentUsing:c}){return{editor:null,state:g,async init(){this.$root.closest(\".fi-modal\")&&await new Promise(d=>setTimeout(d,300)),this.$root._editor&&(this.$root._editor.toTextArea(),this.$root._editor=null),this.$root._editor=this.editor=new EasyMDE({autoDownloadFontAwesome:!1,autoRefresh:!0,autoSave:!1,element:this.$refs.editor,imageAccept:\"image/png, image/jpeg, image/gif, image/avif, image/webp\",imageUploadFunction:c,initialValue:this.state??\"\",maxHeight:b,minHeight:S,placeholder:s,previewImagesInEditor:!0,spellChecker:!1,status:[{className:\"upload-image\",defaultValue:\"\"}],toolbar:this.getToolbar(),uploadImage:o}),this.editor.codemirror.setOption(\"direction\",document.documentElement?.dir??\"ltr\"),this.editor.codemirror.on(\"changes\",(d,k)=>{try{let z=k[k.length-1];if(z.origin===\"+input\"){let M=\"(https://)\",_=z.text[z.text.length-1];if(_.endsWith(M)&&_!==\"[]\"+M){let W=z.from,E=z.to,G=z.text.length>1?0:W.ch;setTimeout(()=>{d.setSelection({line:E.line,ch:G+_.lastIndexOf(\"(\")+1},{line:E.line,ch:G+_.lastIndexOf(\")\")})},25)}}}catch{}}),this.editor.codemirror.on(\"change\",Alpine.debounce(()=>{this.editor&&(this.state=this.editor.value(),p&&this.$wire.commit())},C??300)),v&&this.editor.codemirror.on(\"blur\",()=>this.$wire.commit()),this.$watch(\"state\",()=>{this.editor&&(this.editor.codemirror.hasFocus()||Alpine.raw(this.editor).value(this.state??\"\"))}),h&&h(this)},destroy(){this.editor.cleanup(),this.editor=null},getToolbar(){let d=[];return w.forEach(k=>{k.forEach(z=>d.push(this.getToolbarButton(z))),k.length>0&&d.push(\"|\")}),d[d.length-1]===\"|\"&&d.pop(),d},getToolbarButton(d){if(d===\"bold\")return this.getBoldToolbarButton();if(d===\"italic\")return this.getItalicToolbarButton();if(d===\"strike\")return this.getStrikeToolbarButton();if(d===\"link\")return this.getLinkToolbarButton();if(d===\"heading\")return this.getHeadingToolbarButton();if(d===\"blockquote\")return this.getBlockquoteToolbarButton();if(d===\"codeBlock\")return this.getCodeBlockToolbarButton();if(d===\"bulletList\")return this.getBulletListToolbarButton();if(d===\"orderedList\")return this.getOrderedListToolbarButton();if(d===\"table\")return this.getTableToolbarButton();if(d===\"attachFiles\")return this.getAttachFilesToolbarButton();if(d===\"undo\")return this.getUndoToolbarButton();if(d===\"redo\")return this.getRedoToolbarButton();console.error(`Markdown editor toolbar button \"${d}\" not found.`)},getBoldToolbarButton(){return{name:\"bold\",action:EasyMDE.toggleBold,title:T.tools?.bold}},getItalicToolbarButton(){return{name:\"italic\",action:EasyMDE.toggleItalic,title:T.tools?.italic}},getStrikeToolbarButton(){return{name:\"strikethrough\",action:EasyMDE.toggleStrikethrough,title:T.tools?.strike}},getLinkToolbarButton(){return{name:\"link\",action:EasyMDE.drawLink,title:T.tools?.link}},getHeadingToolbarButton(){return{name:\"heading\",action:EasyMDE.toggleHeadingSmaller,title:T.tools?.heading}},getBlockquoteToolbarButton(){return{name:\"quote\",action:EasyMDE.toggleBlockquote,title:T.tools?.blockquote}},getCodeBlockToolbarButton(){return{name:\"code\",action:EasyMDE.toggleCodeBlock,title:T.tools?.code_block}},getBulletListToolbarButton(){return{name:\"unordered-list\",action:EasyMDE.toggleUnorderedList,title:T.tools?.bullet_list}},getOrderedListToolbarButton(){return{name:\"ordered-list\",action:EasyMDE.toggleOrderedList,title:T.tools?.ordered_list}},getTableToolbarButton(){return{name:\"table\",action:EasyMDE.drawTable,title:T.tools?.table}},getAttachFilesToolbarButton(){return{name:\"upload-image\",action:EasyMDE.drawUploadedImage,title:T.tools?.attach_files}},getUndoToolbarButton(){return{name:\"undo\",action:EasyMDE.undo,title:T.tools?.undo}},getRedoToolbarButton(){return{name:\"redo\",action:EasyMDE.redo,title:T.tools?.redo}}}}export{Kd as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/rich-editor.js",
    "content": "function ge(t){this.content=t}ge.prototype={constructor:ge,find:function(t){for(var e=0;e<this.content.length;e+=2)if(this.content[e]===t)return e;return-1},get:function(t){var e=this.find(t);return e==-1?void 0:this.content[e+1]},update:function(t,e,n){var r=n&&n!=t?this.remove(n):this,o=r.find(t),i=r.content.slice();return o==-1?i.push(n||t,e):(i[o+1]=e,n&&(i[o]=n)),new ge(i)},remove:function(t){var e=this.find(t);if(e==-1)return this;var n=this.content.slice();return n.splice(e,2),new ge(n)},addToStart:function(t,e){return new ge([t,e].concat(this.remove(t).content))},addToEnd:function(t,e){var n=this.remove(t).content.slice();return n.push(t,e),new ge(n)},addBefore:function(t,e,n){var r=this.remove(e),o=r.content.slice(),i=r.find(t);return o.splice(i==-1?o.length:i,0,e,n),new ge(o)},forEach:function(t){for(var e=0;e<this.content.length;e+=2)t(this.content[e],this.content[e+1])},prepend:function(t){return t=ge.from(t),t.size?new ge(t.content.concat(this.subtract(t).content)):this},append:function(t){return t=ge.from(t),t.size?new ge(this.subtract(t).content.concat(t.content)):this},subtract:function(t){var e=this;t=ge.from(t);for(var n=0;n<t.content.length;n+=2)e=e.remove(t.content[n]);return e},toObject:function(){var t={};return this.forEach(function(e,n){t[e]=n}),t},get size(){return this.content.length>>1}};ge.from=function(t){if(t instanceof ge)return t;var e=[];if(t)for(var n in t)e.push(n,t[n]);return new ge(e)};var vi=ge;function ba(t,e,n){for(let r=0;;r++){if(r==t.childCount||r==e.childCount)return t.childCount==e.childCount?null:n;let o=t.child(r),i=e.child(r);if(o==i){n+=o.nodeSize;continue}if(!o.sameMarkup(i))return n;if(o.isText&&o.text!=i.text){for(let s=0;o.text[s]==i.text[s];s++)n++;return n}if(o.content.size||i.content.size){let s=ba(o.content,i.content,n+1);if(s!=null)return s}n+=o.nodeSize}}function wa(t,e,n,r){for(let o=t.childCount,i=e.childCount;;){if(o==0||i==0)return o==i?null:{a:n,b:r};let s=t.child(--o),l=e.child(--i),a=s.nodeSize;if(s==l){n-=a,r-=a;continue}if(!s.sameMarkup(l))return{a:n,b:r};if(s.isText&&s.text!=l.text){let c=0,d=Math.min(s.text.length,l.text.length);for(;c<d&&s.text[s.text.length-c-1]==l.text[l.text.length-c-1];)c++,n--,r--;return{a:n,b:r}}if(s.content.size||l.content.size){let c=wa(s.content,l.content,n-1,r-1);if(c)return c}n-=a,r-=a}}var v=class t{constructor(e,n){if(this.content=e,this.size=n||0,n==null)for(let r=0;r<e.length;r++)this.size+=e[r].nodeSize}nodesBetween(e,n,r,o=0,i){for(let s=0,l=0;l<n;s++){let a=this.content[s],c=l+a.nodeSize;if(c>e&&r(a,o+l,i||null,s)!==!1&&a.content.size){let d=l+1;a.nodesBetween(Math.max(0,e-d),Math.min(a.content.size,n-d),r,o+d)}l=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,n,r,o){let i=\"\",s=!0;return this.nodesBetween(e,n,(l,a)=>{let c=l.isText?l.text.slice(Math.max(e,a)-a,n-a):l.isLeaf?o?typeof o==\"function\"?o(l):o:l.type.spec.leafText?l.type.spec.leafText(l):\"\":\"\";l.isBlock&&(l.isLeaf&&c||l.isTextblock)&&r&&(s?s=!1:i+=r),i+=c},0),i}append(e){if(!e.size)return this;if(!this.size)return e;let n=this.lastChild,r=e.firstChild,o=this.content.slice(),i=0;for(n.isText&&n.sameMarkup(r)&&(o[o.length-1]=n.withText(n.text+r.text),i=1);i<e.content.length;i++)o.push(e.content[i]);return new t(o,this.size+e.size)}cut(e,n=this.size){if(e==0&&n==this.size)return this;let r=[],o=0;if(n>e)for(let i=0,s=0;s<n;i++){let l=this.content[i],a=s+l.nodeSize;a>e&&((s<e||a>n)&&(l.isText?l=l.cut(Math.max(0,e-s),Math.min(l.text.length,n-s)):l=l.cut(Math.max(0,e-s-1),Math.min(l.content.size,n-s-1))),r.push(l),o+=l.nodeSize),s=a}return new t(r,o)}cutByIndex(e,n){return e==n?t.empty:e==0&&n==this.content.length?this:new t(this.content.slice(e,n))}replaceChild(e,n){let r=this.content[e];if(r==n)return this;let o=this.content.slice(),i=this.size+n.nodeSize-r.nodeSize;return o[e]=n,new t(o,i)}addToStart(e){return new t([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new t(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let n=0;n<this.content.length;n++)if(!this.content[n].eq(e.content[n]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let n=this.content[e];if(!n)throw new RangeError(\"Index \"+e+\" out of range for \"+this);return n}maybeChild(e){return this.content[e]||null}forEach(e){for(let n=0,r=0;n<this.content.length;n++){let o=this.content[n];e(o,r,n),r+=o.nodeSize}}findDiffStart(e,n=0){return ba(this,e,n)}findDiffEnd(e,n=this.size,r=e.size){return wa(this,e,n,r)}findIndex(e){if(e==0)return Ar(0,e);if(e==this.size)return Ar(this.content.length,e);if(e>this.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let n=0,r=0;;n++){let o=this.child(n),i=r+o.nodeSize;if(i>=e)return i==e?Ar(n+1,i):Ar(n,r);r=i}}toString(){return\"<\"+this.toStringInner()+\">\"}toStringInner(){return this.content.join(\", \")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,n){if(!n)return t.empty;if(!Array.isArray(n))throw new RangeError(\"Invalid input for Fragment.fromJSON\");return new t(n.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return t.empty;let n,r=0;for(let o=0;o<e.length;o++){let i=e[o];r+=i.nodeSize,o&&i.isText&&e[o-1].sameMarkup(i)?(n||(n=e.slice(0,o)),n[n.length-1]=i.withText(n[n.length-1].text+i.text)):n&&n.push(i)}return new t(n||e,r)}static from(e){if(!e)return t.empty;if(e instanceof t)return e;if(Array.isArray(e))return this.fromArray(e);if(e.attrs)return new t([e],e.nodeSize);throw new RangeError(\"Can not convert \"+e+\" to a Fragment\"+(e.nodesBetween?\" (looks like multiple versions of prosemirror-model were loaded)\":\"\"))}};v.empty=new v([],0);var Mi={index:0,offset:0};function Ar(t,e){return Mi.index=t,Mi.offset=e,Mi}function Nr(t,e){if(t===e)return!0;if(!(t&&typeof t==\"object\")||!(e&&typeof e==\"object\"))return!1;let n=Array.isArray(t);if(Array.isArray(e)!=n)return!1;if(n){if(t.length!=e.length)return!1;for(let r=0;r<t.length;r++)if(!Nr(t[r],e[r]))return!1}else{for(let r in t)if(!(r in e)||!Nr(t[r],e[r]))return!1;for(let r in e)if(!(r in t))return!1}return!0}var J=class t{constructor(e,n){this.type=e,this.attrs=n}addToSet(e){let n,r=!1;for(let o=0;o<e.length;o++){let i=e[o];if(this.eq(i))return e;if(this.type.excludes(i.type))n||(n=e.slice(0,o));else{if(i.type.excludes(this.type))return e;!r&&i.type.rank>this.type.rank&&(n||(n=e.slice(0,o)),n.push(this),r=!0),n&&n.push(i)}}return n||(n=e.slice()),r||n.push(this),n}removeFromSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return e.slice(0,n).concat(e.slice(n+1));return e}isInSet(e){for(let n=0;n<e.length;n++)if(this.eq(e[n]))return!0;return!1}eq(e){return this==e||this.type==e.type&&Nr(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,n){if(!n)throw new RangeError(\"Invalid input for Mark.fromJSON\");let r=e.marks[n.type];if(!r)throw new RangeError(`There is no mark type ${n.type} in this schema`);let o=r.create(n.attrs);return r.checkAttrs(o.attrs),o}static sameSet(e,n){if(e==n)return!0;if(e.length!=n.length)return!1;for(let r=0;r<e.length;r++)if(!e[r].eq(n[r]))return!1;return!0}static setFrom(e){if(!e||Array.isArray(e)&&e.length==0)return t.none;if(e instanceof t)return[e];let n=e.slice();return n.sort((r,o)=>r.type.rank-o.type.rank),n}};J.none=[];var Ft=class extends Error{},E=class t{constructor(e,n,r){this.content=e,this.openStart=n,this.openEnd=r}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,n){let r=ka(this.content,e+this.openStart,n);return r&&new t(r,this.openStart,this.openEnd)}removeBetween(e,n){return new t(xa(this.content,e+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+\"(\"+this.openStart+\",\"+this.openEnd+\")\"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,n){if(!n)return t.empty;let r=n.openStart||0,o=n.openEnd||0;if(typeof r!=\"number\"||typeof o!=\"number\")throw new RangeError(\"Invalid input for Slice.fromJSON\");return new t(v.fromJSON(e,n.content),r,o)}static maxOpen(e,n=!0){let r=0,o=0;for(let i=e.firstChild;i&&!i.isLeaf&&(n||!i.type.spec.isolating);i=i.firstChild)r++;for(let i=e.lastChild;i&&!i.isLeaf&&(n||!i.type.spec.isolating);i=i.lastChild)o++;return new t(e,r,o)}};E.empty=new E(v.empty,0,0);function xa(t,e,n){let{index:r,offset:o}=t.findIndex(e),i=t.maybeChild(r),{index:s,offset:l}=t.findIndex(n);if(o==e||i.isText){if(l!=n&&!t.child(s).isText)throw new RangeError(\"Removing non-flat range\");return t.cut(0,e).append(t.cut(n))}if(r!=s)throw new RangeError(\"Removing non-flat range\");return t.replaceChild(r,i.copy(xa(i.content,e-o-1,n-o-1)))}function ka(t,e,n,r){let{index:o,offset:i}=t.findIndex(e),s=t.maybeChild(o);if(i==e||s.isText)return r&&!r.canReplace(o,o,n)?null:t.cut(0,e).append(n).append(t.cut(e));let l=ka(s.content,e-i-1,n,s);return l&&t.replaceChild(o,s.copy(l))}function sp(t,e,n){if(n.openStart>t.depth)throw new Ft(\"Inserted content deeper than insertion position\");if(t.depth-n.openStart!=e.depth-n.openEnd)throw new Ft(\"Inconsistent open depths\");return Sa(t,e,n,0)}function Sa(t,e,n,r){let o=t.index(r),i=t.node(r);if(o==e.index(r)&&r<t.depth-n.openStart){let s=Sa(t,e,n,r+1);return i.copy(i.content.replaceChild(o,s))}else if(n.content.size)if(!n.openStart&&!n.openEnd&&t.depth==r&&e.depth==r){let s=t.parent,l=s.content;return $t(s,l.cut(0,t.parentOffset).append(n.content).append(l.cut(e.parentOffset)))}else{let{start:s,end:l}=lp(n,t);return $t(i,va(t,s,l,e,r))}else return $t(i,Or(t,e,r))}function Ca(t,e){if(!e.type.compatibleContent(t.type))throw new Ft(\"Cannot join \"+e.type.name+\" onto \"+t.type.name)}function Ai(t,e,n){let r=t.node(n);return Ca(r,e.node(n)),r}function Ht(t,e){let n=e.length-1;n>=0&&t.isText&&t.sameMarkup(e[n])?e[n]=t.withText(e[n].text+t.text):e.push(t)}function zn(t,e,n,r){let o=(e||t).node(n),i=0,s=e?e.index(n):o.childCount;t&&(i=t.index(n),t.depth>n?i++:t.textOffset&&(Ht(t.nodeAfter,r),i++));for(let l=i;l<s;l++)Ht(o.child(l),r);e&&e.depth==n&&e.textOffset&&Ht(e.nodeBefore,r)}function $t(t,e){return t.type.checkContent(e),t.copy(e)}function va(t,e,n,r,o){let i=t.depth>o&&Ai(t,e,o+1),s=r.depth>o&&Ai(n,r,o+1),l=[];return zn(null,t,o,l),i&&s&&e.index(o)==n.index(o)?(Ca(i,s),Ht($t(i,va(t,e,n,r,o+1)),l)):(i&&Ht($t(i,Or(t,e,o+1)),l),zn(e,n,o,l),s&&Ht($t(s,Or(n,r,o+1)),l)),zn(r,null,o,l),new v(l)}function Or(t,e,n){let r=[];if(zn(null,t,n,r),t.depth>n){let o=Ai(t,e,n+1);Ht($t(o,Or(t,e,n+1)),r)}return zn(e,null,n,r),new v(r)}function lp(t,e){let n=e.depth-t.openStart,o=e.node(n).copy(t.content);for(let i=n-1;i>=0;i--)o=e.node(i).copy(v.from(o));return{start:o.resolveNoCache(t.openStart+n),end:o.resolveNoCache(o.content.size-t.openEnd-n)}}var Rr=class t{constructor(e,n,r){this.pos=e,this.path=n,this.parentOffset=r,this.depth=n.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError(\"There is no position before the top-level node\");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError(\"There is no position after the top-level node\");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,n=this.index(this.depth);if(n==e.childCount)return null;let r=this.pos-this.path[this.path.length-1],o=e.child(n);return r?e.child(n).cut(r):o}get nodeBefore(){let e=this.index(this.depth),n=this.pos-this.path[this.path.length-1];return n?this.parent.child(e).cut(0,n):e==0?null:this.parent.child(e-1)}posAtIndex(e,n){n=this.resolveDepth(n);let r=this.path[n*3],o=n==0?0:this.path[n*3-1]+1;for(let i=0;i<e;i++)o+=r.child(i).nodeSize;return o}marks(){let e=this.parent,n=this.index();if(e.content.size==0)return J.none;if(this.textOffset)return e.child(n).marks;let r=e.maybeChild(n-1),o=e.maybeChild(n);if(!r){let l=r;r=o,o=l}let i=r.marks;for(var s=0;s<i.length;s++)i[s].type.spec.inclusive===!1&&(!o||!i[s].isInSet(o.marks))&&(i=i[s--].removeFromSet(i));return i}marksAcross(e){let n=this.parent.maybeChild(this.index());if(!n||!n.isInline)return null;let r=n.marks,o=e.parent.maybeChild(e.index());for(var i=0;i<r.length;i++)r[i].type.spec.inclusive===!1&&(!o||!r[i].isInSet(o.marks))&&(r=r[i--].removeFromSet(r));return r}sharedDepth(e){for(let n=this.depth;n>0;n--)if(this.start(n)<=e&&this.end(n)>=e)return n;return 0}blockRange(e=this,n){if(e.pos<this.pos)return e.blockRange(this);for(let r=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);r>=0;r--)if(e.pos<=this.end(r)&&(!n||n(this.node(r))))return new Vt(this,e,r);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e=\"\";for(let n=1;n<=this.depth;n++)e+=(e?\"/\":\"\")+this.node(n).type.name+\"_\"+this.index(n-1);return e+\":\"+this.parentOffset}static resolve(e,n){if(!(n>=0&&n<=e.content.size))throw new RangeError(\"Position \"+n+\" out of range\");let r=[],o=0,i=n;for(let s=e;;){let{index:l,offset:a}=s.content.findIndex(i),c=i-a;if(r.push(s,l,o+a),!c||(s=s.child(l),s.isText))break;i=c-1,o+=a+1}return new t(n,r,i)}static resolveCached(e,n){let r=ca.get(e);if(r)for(let i=0;i<r.elts.length;i++){let s=r.elts[i];if(s.pos==n)return s}else ca.set(e,r=new Ei);let o=r.elts[r.i]=t.resolve(e,n);return r.i=(r.i+1)%ap,o}},Ei=class{constructor(){this.elts=[],this.i=0}},ap=12,ca=new WeakMap,Vt=class{constructor(e,n,r){this.$from=e,this.$to=n,this.depth=r}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}},cp=Object.create(null),ie=class t{constructor(e,n,r,o=J.none){this.type=e,this.attrs=n,this.marks=o,this.content=r||v.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,n,r,o=0){this.content.nodesBetween(e,n,r,o,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,\"\")}textBetween(e,n,r,o){return this.content.textBetween(e,n,r,o)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,n,r){return this.type==e&&Nr(this.attrs,n||e.defaultAttrs||cp)&&J.sameSet(this.marks,r||J.none)}copy(e=null){return e==this.content?this:new t(this.type,this.attrs,e,this.marks)}mark(e){return e==this.marks?this:new t(this.type,this.attrs,this.content,e)}cut(e,n=this.content.size){return e==0&&n==this.content.size?this:this.copy(this.content.cut(e,n))}slice(e,n=this.content.size,r=!1){if(e==n)return E.empty;let o=this.resolve(e),i=this.resolve(n),s=r?0:o.sharedDepth(n),l=o.start(s),c=o.node(s).content.cut(o.pos-l,i.pos-l);return new E(c,o.depth-s,i.depth-s)}replace(e,n,r){return sp(this.resolve(e),this.resolve(n),r)}nodeAt(e){for(let n=this;;){let{index:r,offset:o}=n.content.findIndex(e);if(n=n.maybeChild(r),!n)return null;if(o==e||n.isText)return n;e-=o+1}}childAfter(e){let{index:n,offset:r}=this.content.findIndex(e);return{node:this.content.maybeChild(n),index:n,offset:r}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:n,offset:r}=this.content.findIndex(e);if(r<e)return{node:this.content.child(n),index:n,offset:r};let o=this.content.child(n-1);return{node:o,index:n-1,offset:r-o.nodeSize}}resolve(e){return Rr.resolveCached(this,e)}resolveNoCache(e){return Rr.resolve(this,e)}rangeHasMark(e,n,r){let o=!1;return n>e&&this.nodesBetween(e,n,i=>(r.isInSet(i.marks)&&(o=!0),!o)),o}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=\"(\"+this.content.toStringInner()+\")\"),Ma(this.marks,e)}contentMatchAt(e){let n=this.type.contentMatch.matchFragment(this.content,0,e);if(!n)throw new Error(\"Called contentMatchAt on a node with invalid content\");return n}canReplace(e,n,r=v.empty,o=0,i=r.childCount){let s=this.contentMatchAt(e).matchFragment(r,o,i),l=s&&s.matchFragment(this.content,n);if(!l||!l.validEnd)return!1;for(let a=o;a<i;a++)if(!this.type.allowsMarks(r.child(a).marks))return!1;return!0}canReplaceWith(e,n,r,o){if(o&&!this.type.allowsMarks(o))return!1;let i=this.contentMatchAt(e).matchType(r),s=i&&i.matchFragment(this.content,n);return s?s.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),this.type.checkAttrs(this.attrs);let e=J.none;for(let n=0;n<this.marks.length;n++){let r=this.marks[n];r.type.checkAttrs(r.attrs),e=r.addToSet(e)}if(!J.sameSet(e,this.marks))throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(n=>n.type.name)}`);this.content.forEach(n=>n.check())}toJSON(){let e={type:this.type.name};for(let n in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(n=>n.toJSON())),e}static fromJSON(e,n){if(!n)throw new RangeError(\"Invalid input for Node.fromJSON\");let r;if(n.marks){if(!Array.isArray(n.marks))throw new RangeError(\"Invalid mark data for Node.fromJSON\");r=n.marks.map(e.markFromJSON)}if(n.type==\"text\"){if(typeof n.text!=\"string\")throw new RangeError(\"Invalid text node in JSON\");return e.text(n.text,r)}let o=v.fromJSON(e,n.content),i=e.nodeType(n.type).create(n.attrs,o,r);return i.type.checkAttrs(i.attrs),i}};ie.prototype.text=void 0;var Ni=class t extends ie{constructor(e,n,r,o){if(super(e,n,null,o),!r)throw new RangeError(\"Empty text nodes are not allowed\");this.text=r}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):Ma(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,n){return this.text.slice(e,n)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new t(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new t(this.type,this.attrs,e,this.marks)}cut(e=0,n=this.text.length){return e==0&&n==this.text.length?this:this.withText(this.text.slice(e,n))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function Ma(t,e){for(let n=t.length-1;n>=0;n--)e=t[n].type.name+\"(\"+e+\")\";return e}var _t=class t{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,n){let r=new Oi(e,n);if(r.next==null)return t.empty;let o=Ta(r);r.next&&r.err(\"Unexpected trailing text\");let i=gp(mp(o));return yp(i,r),i}matchType(e){for(let n=0;n<this.next.length;n++)if(this.next[n].type==e)return this.next[n].next;return null}matchFragment(e,n=0,r=e.childCount){let o=this;for(let i=n;o&&i<r;i++)o=o.matchType(e.child(i).type);return o}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:n}=this.next[e];if(!(n.isText||n.hasRequiredAttrs()))return n}return null}compatible(e){for(let n=0;n<this.next.length;n++)for(let r=0;r<e.next.length;r++)if(this.next[n].type==e.next[r].type)return!0;return!1}fillBefore(e,n=!1,r=0){let o=[this];function i(s,l){let a=s.matchFragment(e,r);if(a&&(!n||a.validEnd))return v.from(l.map(c=>c.createAndFill()));for(let c=0;c<s.next.length;c++){let{type:d,next:u}=s.next[c];if(!(d.isText||d.hasRequiredAttrs())&&o.indexOf(u)==-1){o.push(u);let f=i(u,l.concat(d));if(f)return f}}return null}return i(this,[])}findWrapping(e){for(let r=0;r<this.wrapCache.length;r+=2)if(this.wrapCache[r]==e)return this.wrapCache[r+1];let n=this.computeWrapping(e);return this.wrapCache.push(e,n),n}computeWrapping(e){let n=Object.create(null),r=[{match:this,type:null,via:null}];for(;r.length;){let o=r.shift(),i=o.match;if(i.matchType(e)){let s=[];for(let l=o;l.type;l=l.via)s.push(l.type);return s.reverse()}for(let s=0;s<i.next.length;s++){let{type:l,next:a}=i.next[s];!l.isLeaf&&!l.hasRequiredAttrs()&&!(l.name in n)&&(!o.type||a.validEnd)&&(r.push({match:l.contentMatch,type:l,via:o}),n[l.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function n(r){e.push(r);for(let o=0;o<r.next.length;o++)e.indexOf(r.next[o].next)==-1&&n(r.next[o].next)}return n(this),e.map((r,o)=>{let i=o+(r.validEnd?\"*\":\" \")+\" \";for(let s=0;s<r.next.length;s++)i+=(s?\", \":\"\")+r.next[s].type.name+\"->\"+e.indexOf(r.next[s].next);return i}).join(`\n`)}};_t.empty=new _t(!0);var Oi=class{constructor(e,n){this.string=e,this.nodeTypes=n,this.inline=null,this.pos=0,this.tokens=e.split(/\\s*(?=\\b|\\W|$)/),this.tokens[this.tokens.length-1]==\"\"&&this.tokens.pop(),this.tokens[0]==\"\"&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+\" (in content expression '\"+this.string+\"')\")}};function Ta(t){let e=[];do e.push(dp(t));while(t.eat(\"|\"));return e.length==1?e[0]:{type:\"choice\",exprs:e}}function dp(t){let e=[];do e.push(up(t));while(t.next&&t.next!=\")\"&&t.next!=\"|\");return e.length==1?e[0]:{type:\"seq\",exprs:e}}function up(t){let e=pp(t);for(;;)if(t.eat(\"+\"))e={type:\"plus\",expr:e};else if(t.eat(\"*\"))e={type:\"star\",expr:e};else if(t.eat(\"?\"))e={type:\"opt\",expr:e};else if(t.eat(\"{\"))e=fp(t,e);else break;return e}function da(t){/\\D/.test(t.next)&&t.err(\"Expected number, got '\"+t.next+\"'\");let e=Number(t.next);return t.pos++,e}function fp(t,e){let n=da(t),r=n;return t.eat(\",\")&&(t.next!=\"}\"?r=da(t):r=-1),t.eat(\"}\")||t.err(\"Unclosed braced range\"),{type:\"range\",min:n,max:r,expr:e}}function hp(t,e){let n=t.nodeTypes,r=n[e];if(r)return[r];let o=[];for(let i in n){let s=n[i];s.isInGroup(e)&&o.push(s)}return o.length==0&&t.err(\"No node type or group '\"+e+\"' found\"),o}function pp(t){if(t.eat(\"(\")){let e=Ta(t);return t.eat(\")\")||t.err(\"Missing closing paren\"),e}else if(/\\W/.test(t.next))t.err(\"Unexpected token '\"+t.next+\"'\");else{let e=hp(t,t.next).map(n=>(t.inline==null?t.inline=n.isInline:t.inline!=n.isInline&&t.err(\"Mixing inline and block content\"),{type:\"name\",value:n}));return t.pos++,e.length==1?e[0]:{type:\"choice\",exprs:e}}}function mp(t){let e=[[]];return o(i(t,0),n()),e;function n(){return e.push([])-1}function r(s,l,a){let c={term:a,to:l};return e[s].push(c),c}function o(s,l){s.forEach(a=>a.to=l)}function i(s,l){if(s.type==\"choice\")return s.exprs.reduce((a,c)=>a.concat(i(c,l)),[]);if(s.type==\"seq\")for(let a=0;;a++){let c=i(s.exprs[a],l);if(a==s.exprs.length-1)return c;o(c,l=n())}else if(s.type==\"star\"){let a=n();return r(l,a),o(i(s.expr,a),a),[r(a)]}else if(s.type==\"plus\"){let a=n();return o(i(s.expr,l),a),o(i(s.expr,a),a),[r(a)]}else{if(s.type==\"opt\")return[r(l)].concat(i(s.expr,l));if(s.type==\"range\"){let a=l;for(let c=0;c<s.min;c++){let d=n();o(i(s.expr,a),d),a=d}if(s.max==-1)o(i(s.expr,a),a);else for(let c=s.min;c<s.max;c++){let d=n();r(a,d),o(i(s.expr,a),d),a=d}return[r(a)]}else{if(s.type==\"name\")return[r(l,void 0,s.value)];throw new Error(\"Unknown expr type\")}}}}function Aa(t,e){return e-t}function ua(t,e){let n=[];return r(e),n.sort(Aa);function r(o){let i=t[o];if(i.length==1&&!i[0].term)return r(i[0].to);n.push(o);for(let s=0;s<i.length;s++){let{term:l,to:a}=i[s];!l&&n.indexOf(a)==-1&&r(a)}}}function gp(t){let e=Object.create(null);return n(ua(t,0));function n(r){let o=[];r.forEach(s=>{t[s].forEach(({term:l,to:a})=>{if(!l)return;let c;for(let d=0;d<o.length;d++)o[d][0]==l&&(c=o[d][1]);ua(t,a).forEach(d=>{c||o.push([l,c=[]]),c.indexOf(d)==-1&&c.push(d)})})});let i=e[r.join(\",\")]=new _t(r.indexOf(t.length-1)>-1);for(let s=0;s<o.length;s++){let l=o[s][1].sort(Aa);i.next.push({type:o[s][0],next:e[l.join(\",\")]||n(l)})}return i}}function yp(t,e){for(let n=0,r=[t];n<r.length;n++){let o=r[n],i=!o.validEnd,s=[];for(let l=0;l<o.next.length;l++){let{type:a,next:c}=o.next[l];s.push(a.name),i&&!(a.isText||a.hasRequiredAttrs())&&(i=!1),r.indexOf(c)==-1&&r.push(c)}i&&e.err(\"Only non-generatable nodes (\"+s.join(\", \")+\") in a required position (see https://prosemirror.net/docs/guide/#generatable)\")}}function Ea(t){let e=Object.create(null);for(let n in t){let r=t[n];if(!r.hasDefault)return null;e[n]=r.default}return e}function Na(t,e){let n=Object.create(null);for(let r in t){let o=e&&e[r];if(o===void 0){let i=t[r];if(i.hasDefault)o=i.default;else throw new RangeError(\"No value supplied for attribute \"+r)}n[r]=o}return n}function Oa(t,e,n,r){for(let o in e)if(!(o in t))throw new RangeError(`Unsupported attribute ${o} for ${n} of type ${o}`);for(let o in t){let i=t[o];i.validate&&i.validate(e[o])}}function Ra(t,e){let n=Object.create(null);if(e)for(let r in e)n[r]=new Ri(t,r,e[r]);return n}var Dr=class t{constructor(e,n,r){this.name=e,this.schema=n,this.spec=r,this.markSet=null,this.groups=r.group?r.group.split(\" \"):[],this.attrs=Ra(e,r.attrs),this.defaultAttrs=Ea(this.attrs),this.contentMatch=null,this.inlineContent=null,this.isBlock=!(r.inline||e==\"text\"),this.isText=e==\"text\"}get isInline(){return!this.isBlock}get isTextblock(){return this.isBlock&&this.inlineContent}get isLeaf(){return this.contentMatch==_t.empty}get isAtom(){return this.isLeaf||!!this.spec.atom}isInGroup(e){return this.groups.indexOf(e)>-1}get whitespace(){return this.spec.whitespace||(this.spec.code?\"pre\":\"normal\")}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:Na(this.attrs,e)}create(e=null,n,r){if(this.isText)throw new Error(\"NodeType.create can't construct text nodes\");return new ie(this,this.computeAttrs(e),v.from(n),J.setFrom(r))}createChecked(e=null,n,r){return n=v.from(n),this.checkContent(n),new ie(this,this.computeAttrs(e),n,J.setFrom(r))}createAndFill(e=null,n,r){if(e=this.computeAttrs(e),n=v.from(n),n.size){let s=this.contentMatch.fillBefore(n);if(!s)return null;n=s.append(n)}let o=this.contentMatch.matchFragment(n),i=o&&o.fillBefore(v.empty,!0);return i?new ie(this,e,n.append(i),J.setFrom(r)):null}validContent(e){let n=this.contentMatch.matchFragment(e);if(!n||!n.validEnd)return!1;for(let r=0;r<e.childCount;r++)if(!this.allowsMarks(e.child(r).marks))return!1;return!0}checkContent(e){if(!this.validContent(e))throw new RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0,50)}`)}checkAttrs(e){Oa(this.attrs,e,\"node\",this.name)}allowsMarkType(e){return this.markSet==null||this.markSet.indexOf(e)>-1}allowsMarks(e){if(this.markSet==null)return!0;for(let n=0;n<e.length;n++)if(!this.allowsMarkType(e[n].type))return!1;return!0}allowedMarks(e){if(this.markSet==null)return e;let n;for(let r=0;r<e.length;r++)this.allowsMarkType(e[r].type)?n&&n.push(e[r]):n||(n=e.slice(0,r));return n?n.length?n:J.none:e}static compile(e,n){let r=Object.create(null);e.forEach((i,s)=>r[i]=new t(i,n,s));let o=n.spec.topNode||\"doc\";if(!r[o])throw new RangeError(\"Schema is missing its top node type ('\"+o+\"')\");if(!r.text)throw new RangeError(\"Every schema needs a 'text' type\");for(let i in r.text.attrs)throw new RangeError(\"The text node type should not have attributes\");return r}};function bp(t,e,n){let r=n.split(\"|\");return o=>{let i=o===null?\"null\":typeof o;if(r.indexOf(i)<0)throw new RangeError(`Expected value of type ${r} for attribute ${e} on type ${t}, got ${i}`)}}var Ri=class{constructor(e,n,r){this.hasDefault=Object.prototype.hasOwnProperty.call(r,\"default\"),this.default=r.default,this.validate=typeof r.validate==\"string\"?bp(e,n,r.validate):r.validate}get isRequired(){return!this.hasDefault}},$n=class t{constructor(e,n,r,o){this.name=e,this.rank=n,this.schema=r,this.spec=o,this.attrs=Ra(e,o.attrs),this.excluded=null;let i=Ea(this.attrs);this.instance=i?new J(this,i):null}create(e=null){return!e&&this.instance?this.instance:new J(this,Na(this.attrs,e))}static compile(e,n){let r=Object.create(null),o=0;return e.forEach((i,s)=>r[i]=new t(i,o++,n,s)),r}removeFromSet(e){for(var n=0;n<e.length;n++)e[n].type==this&&(e=e.slice(0,n).concat(e.slice(n+1)),n--);return e}isInSet(e){for(let n=0;n<e.length;n++)if(e[n].type==this)return e[n]}checkAttrs(e){Oa(this.attrs,e,\"mark\",this.name)}excludes(e){return this.excluded.indexOf(e)>-1}},fn=class{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let n=this.spec={};for(let o in e)n[o]=e[o];n.nodes=vi.from(e.nodes),n.marks=vi.from(e.marks||{}),this.nodes=Dr.compile(this.spec.nodes,this),this.marks=$n.compile(this.spec.marks,this);let r=Object.create(null);for(let o in this.nodes){if(o in this.marks)throw new RangeError(o+\" can not be both a node and a mark\");let i=this.nodes[o],s=i.spec.content||\"\",l=i.spec.marks;if(i.contentMatch=r[s]||(r[s]=_t.parse(s,this.nodes)),i.inlineContent=i.contentMatch.inlineContent,i.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError(\"Multiple linebreak nodes defined\");if(!i.isInline||!i.isLeaf)throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");this.linebreakReplacement=i}i.markSet=l==\"_\"?null:l?fa(this,l.split(\" \")):l==\"\"||!i.inlineContent?[]:null}for(let o in this.marks){let i=this.marks[o],s=i.spec.excludes;i.excluded=s==null?[i]:s==\"\"?[]:fa(this,s.split(\" \"))}this.nodeFromJSON=o=>ie.fromJSON(this,o),this.markFromJSON=o=>J.fromJSON(this,o),this.topNodeType=this.nodes[this.spec.topNode||\"doc\"],this.cached.wrappings=Object.create(null)}node(e,n=null,r,o){if(typeof e==\"string\")e=this.nodeType(e);else if(e instanceof Dr){if(e.schema!=this)throw new RangeError(\"Node type from different schema used (\"+e.name+\")\")}else throw new RangeError(\"Invalid node type: \"+e);return e.createChecked(n,r,o)}text(e,n){let r=this.nodes.text;return new Ni(r,r.defaultAttrs,e,J.setFrom(n))}mark(e,n){return typeof e==\"string\"&&(e=this.marks[e]),e.create(n)}nodeType(e){let n=this.nodes[e];if(!n)throw new RangeError(\"Unknown node type: \"+e);return n}};function fa(t,e){let n=[];for(let r=0;r<e.length;r++){let o=e[r],i=t.marks[o],s=i;if(i)n.push(i);else for(let l in t.marks){let a=t.marks[l];(o==\"_\"||a.spec.group&&a.spec.group.split(\" \").indexOf(o)>-1)&&n.push(s=a)}if(!s)throw new SyntaxError(\"Unknown mark type: '\"+e[r]+\"'\")}return n}function wp(t){return t.tag!=null}function xp(t){return t.style!=null}var Xe=class t{constructor(e,n){this.schema=e,this.rules=n,this.tags=[],this.styles=[];let r=this.matchedStyles=[];n.forEach(o=>{if(wp(o))this.tags.push(o);else if(xp(o)){let i=/[^=]*/.exec(o.style)[0];r.indexOf(i)<0&&r.push(i),this.styles.push(o)}}),this.normalizeLists=!this.tags.some(o=>{if(!/^(ul|ol)\\b/.test(o.tag)||!o.node)return!1;let i=e.nodes[o.node];return i.contentMatch.matchType(i)})}parse(e,n={}){let r=new Ir(this,n,!1);return r.addAll(e,J.none,n.from,n.to),r.finish()}parseSlice(e,n={}){let r=new Ir(this,n,!0);return r.addAll(e,J.none,n.from,n.to),E.maxOpen(r.finish())}matchTag(e,n,r){for(let o=r?this.tags.indexOf(r)+1:0;o<this.tags.length;o++){let i=this.tags[o];if(Cp(e,i.tag)&&(i.namespace===void 0||e.namespaceURI==i.namespace)&&(!i.context||n.matchesContext(i.context))){if(i.getAttrs){let s=i.getAttrs(e);if(s===!1)continue;i.attrs=s||void 0}return i}}}matchStyle(e,n,r,o){for(let i=o?this.styles.indexOf(o)+1:0;i<this.styles.length;i++){let s=this.styles[i],l=s.style;if(!(l.indexOf(e)!=0||s.context&&!r.matchesContext(s.context)||l.length>e.length&&(l.charCodeAt(e.length)!=61||l.slice(e.length+1)!=n))){if(s.getAttrs){let a=s.getAttrs(n);if(a===!1)continue;s.attrs=a||void 0}return s}}}static schemaRules(e){let n=[];function r(o){let i=o.priority==null?50:o.priority,s=0;for(;s<n.length;s++){let l=n[s];if((l.priority==null?50:l.priority)<i)break}n.splice(s,0,o)}for(let o in e.marks){let i=e.marks[o].spec.parseDOM;i&&i.forEach(s=>{r(s=pa(s)),s.mark||s.ignore||s.clearMark||(s.mark=o)})}for(let o in e.nodes){let i=e.nodes[o].spec.parseDOM;i&&i.forEach(s=>{r(s=pa(s)),s.node||s.ignore||s.mark||(s.node=o)})}return n}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new t(e,t.schemaRules(e)))}},Da={address:!0,article:!0,aside:!0,blockquote:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},kp={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},Ia={ol:!0,ul:!0},Fn=1,Di=2,Hn=4;function ha(t,e,n){return e!=null?(e?Fn:0)|(e===\"full\"?Di:0):t&&t.whitespace==\"pre\"?Fn|Di:n&~Hn}var un=class{constructor(e,n,r,o,i,s){this.type=e,this.attrs=n,this.marks=r,this.solid=o,this.options=s,this.content=[],this.activeMarks=J.none,this.match=i||(s&Hn?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let n=this.type.contentMatch.fillBefore(v.from(e));if(n)this.match=this.type.contentMatch.matchFragment(n);else{let r=this.type.contentMatch,o;return(o=r.findWrapping(e.type))?(this.match=r,o):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&Fn)){let r=this.content[this.content.length-1],o;if(r&&r.isText&&(o=/[ \\t\\r\\n\\u000c]+$/.exec(r.text))){let i=r;r.text.length==o[0].length?this.content.pop():this.content[this.content.length-1]=i.withText(i.text.slice(0,i.text.length-o[0].length))}}let n=v.from(this.content);return!e&&this.match&&(n=n.append(this.match.fillBefore(v.empty,!0))),this.type?this.type.create(this.attrs,n,this.marks):n}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!Da.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}},Ir=class{constructor(e,n,r){this.parser=e,this.options=n,this.isOpen=r,this.open=0,this.localPreserveWS=!1;let o=n.topNode,i,s=ha(null,n.preserveWhitespace,0)|(r?Hn:0);o?i=new un(o.type,o.attrs,J.none,!0,n.topMatch||o.type.contentMatch,s):r?i=new un(null,null,J.none,!0,null,s):i=new un(e.schema.topNodeType,null,J.none,!0,null,s),this.nodes=[i],this.find=n.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,n){e.nodeType==3?this.addTextNode(e,n):e.nodeType==1&&this.addElement(e,n)}addTextNode(e,n){let r=e.nodeValue,o=this.top,i=o.options&Di?\"full\":this.localPreserveWS||(o.options&Fn)>0,{schema:s}=this.parser;if(i===\"full\"||o.inlineContext(e)||/[^ \\t\\r\\n\\u000c]/.test(r)){if(i)if(i===\"full\")r=r.replace(/\\r\\n?/g,`\n`);else if(s.linebreakReplacement&&/[\\r\\n]/.test(r)&&this.top.findWrapping(s.linebreakReplacement.create())){let l=r.split(/\\r?\\n|\\r/);for(let a=0;a<l.length;a++)a&&this.insertNode(s.linebreakReplacement.create(),n,!0),l[a]&&this.insertNode(s.text(l[a]),n,!/\\S/.test(l[a]));r=\"\"}else r=r.replace(/\\r?\\n|\\r/g,\" \");else if(r=r.replace(/[ \\t\\r\\n\\u000c]+/g,\" \"),/^[ \\t\\r\\n\\u000c]/.test(r)&&this.open==this.nodes.length-1){let l=o.content[o.content.length-1],a=e.previousSibling;(!l||a&&a.nodeName==\"BR\"||l.isText&&/[ \\t\\r\\n\\u000c]$/.test(l.text))&&(r=r.slice(1))}r&&this.insertNode(s.text(r),n,!/\\S/.test(r)),this.findInText(e)}else this.findInside(e)}addElement(e,n,r){let o=this.localPreserveWS,i=this.top;(e.tagName==\"PRE\"||/pre/.test(e.style&&e.style.whiteSpace))&&(this.localPreserveWS=!0);let s=e.nodeName.toLowerCase(),l;Ia.hasOwnProperty(s)&&this.parser.normalizeLists&&Sp(e);let a=this.options.ruleFromNode&&this.options.ruleFromNode(e)||(l=this.parser.matchTag(e,this,r));e:if(a?a.ignore:kp.hasOwnProperty(s))this.findInside(e),this.ignoreFallback(e,n);else if(!a||a.skip||a.closeParent){a&&a.closeParent?this.open=Math.max(0,this.open-1):a&&a.skip.nodeType&&(e=a.skip);let c,d=this.needsBlock;if(Da.hasOwnProperty(s))i.content.length&&i.content[0].isInline&&this.open&&(this.open--,i=this.top),c=!0,i.type||(this.needsBlock=!0);else if(!e.firstChild){this.leafFallback(e,n);break e}let u=a&&a.skip?n:this.readStyles(e,n);u&&this.addAll(e,u),c&&this.sync(i),this.needsBlock=d}else{let c=this.readStyles(e,n);c&&this.addElementByRule(e,a,c,a.consuming===!1?l:void 0)}this.localPreserveWS=o}leafFallback(e,n){e.nodeName==\"BR\"&&this.top.type&&this.top.type.inlineContent&&this.addTextNode(e.ownerDocument.createTextNode(`\n`),n)}ignoreFallback(e,n){e.nodeName==\"BR\"&&(!this.top.type||!this.top.type.inlineContent)&&this.findPlace(this.parser.schema.text(\"-\"),n,!0)}readStyles(e,n){let r=e.style;if(r&&r.length)for(let o=0;o<this.parser.matchedStyles.length;o++){let i=this.parser.matchedStyles[o],s=r.getPropertyValue(i);if(s)for(let l=void 0;;){let a=this.parser.matchStyle(i,s,this,l);if(!a)break;if(a.ignore)return null;if(a.clearMark?n=n.filter(c=>!a.clearMark(c)):n=n.concat(this.parser.schema.marks[a.mark].create(a.attrs)),a.consuming===!1)l=a;else break}}return n}addElementByRule(e,n,r,o){let i,s;if(n.node)if(s=this.parser.schema.nodes[n.node],s.isLeaf)this.insertNode(s.create(n.attrs),r,e.nodeName==\"BR\")||this.leafFallback(e,r);else{let a=this.enter(s,n.attrs||null,r,n.preserveWhitespace);a&&(i=!0,r=a)}else{let a=this.parser.schema.marks[n.mark];r=r.concat(a.create(n.attrs))}let l=this.top;if(s&&s.isLeaf)this.findInside(e);else if(o)this.addElement(e,r,o);else if(n.getContent)this.findInside(e),n.getContent(e,this.parser.schema).forEach(a=>this.insertNode(a,r,!1));else{let a=e;typeof n.contentElement==\"string\"?a=e.querySelector(n.contentElement):typeof n.contentElement==\"function\"?a=n.contentElement(e):n.contentElement&&(a=n.contentElement),this.findAround(e,a,!0),this.addAll(a,r),this.findAround(e,a,!1)}i&&this.sync(l)&&this.open--}addAll(e,n,r,o){let i=r||0;for(let s=r?e.childNodes[r]:e.firstChild,l=o==null?null:e.childNodes[o];s!=l;s=s.nextSibling,++i)this.findAtPoint(e,i),this.addDOM(s,n);this.findAtPoint(e,i)}findPlace(e,n,r){let o,i;for(let s=this.open,l=0;s>=0;s--){let a=this.nodes[s],c=a.findWrapping(e);if(c&&(!o||o.length>c.length+l)&&(o=c,i=a,!c.length))break;if(a.solid){if(r)break;l+=2}}if(!o)return null;this.sync(i);for(let s=0;s<o.length;s++)n=this.enterInner(o[s],null,n,!1);return n}insertNode(e,n,r){if(e.isInline&&this.needsBlock&&!this.top.type){let i=this.textblockFromContext();i&&(n=this.enterInner(i,null,n))}let o=this.findPlace(e,n,r);if(o){this.closeExtra();let i=this.top;i.match&&(i.match=i.match.matchType(e.type));let s=J.none;for(let l of o.concat(e.marks))(i.type?i.type.allowsMarkType(l.type):ma(l.type,e.type))&&(s=l.addToSet(s));return i.content.push(e.mark(s)),!0}return!1}enter(e,n,r,o){let i=this.findPlace(e.create(n),r,!1);return i&&(i=this.enterInner(e,n,r,!0,o)),i}enterInner(e,n,r,o=!1,i){this.closeExtra();let s=this.top;s.match=s.match&&s.match.matchType(e);let l=ha(e,i,s.options);s.options&Hn&&s.content.length==0&&(l|=Hn);let a=J.none;return r=r.filter(c=>(s.type?s.type.allowsMarkType(c.type):ma(c.type,e))?(a=c.addToSet(a),!1):!0),this.nodes.push(new un(e,n,a,o,null,l)),this.open++,r}closeExtra(e=!1){let n=this.nodes.length-1;if(n>this.open){for(;n>this.open;n--)this.nodes[n-1].content.push(this.nodes[n].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let n=this.open;n>=0;n--){if(this.nodes[n]==e)return this.open=n,!0;this.localPreserveWS&&(this.nodes[n].options|=Fn)}return!1}get currentPos(){this.closeExtra();let e=0;for(let n=this.open;n>=0;n--){let r=this.nodes[n].content;for(let o=r.length-1;o>=0;o--)e+=r[o].nodeSize;n&&e++}return e}findAtPoint(e,n){if(this.find)for(let r=0;r<this.find.length;r++)this.find[r].node==e&&this.find[r].offset==n&&(this.find[r].pos=this.currentPos)}findInside(e){if(this.find)for(let n=0;n<this.find.length;n++)this.find[n].pos==null&&e.nodeType==1&&e.contains(this.find[n].node)&&(this.find[n].pos=this.currentPos)}findAround(e,n,r){if(e!=n&&this.find)for(let o=0;o<this.find.length;o++)this.find[o].pos==null&&e.nodeType==1&&e.contains(this.find[o].node)&&n.compareDocumentPosition(this.find[o].node)&(r?2:4)&&(this.find[o].pos=this.currentPos)}findInText(e){if(this.find)for(let n=0;n<this.find.length;n++)this.find[n].node==e&&(this.find[n].pos=this.currentPos-(e.nodeValue.length-this.find[n].offset))}matchesContext(e){if(e.indexOf(\"|\")>-1)return e.split(/\\s*\\|\\s*/).some(this.matchesContext,this);let n=e.split(\"/\"),r=this.options.context,o=!this.isOpen&&(!r||r.parent.type==this.nodes[0].type),i=-(r?r.depth+1:0)+(o?0:1),s=(l,a)=>{for(;l>=0;l--){let c=n[l];if(c==\"\"){if(l==n.length-1||l==0)continue;for(;a>=i;a--)if(s(l-1,a))return!0;return!1}else{let d=a>0||a==0&&o?this.nodes[a].type:r&&a>=i?r.node(a-i).type:null;if(!d||d.name!=c&&!d.isInGroup(c))return!1;a--}}return!0};return s(n.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let n=e.depth;n>=0;n--){let r=e.node(n).contentMatchAt(e.indexAfter(n)).defaultType;if(r&&r.isTextblock&&r.defaultAttrs)return r}for(let n in this.parser.schema.nodes){let r=this.parser.schema.nodes[n];if(r.isTextblock&&r.defaultAttrs)return r}}};function Sp(t){for(let e=t.firstChild,n=null;e;e=e.nextSibling){let r=e.nodeType==1?e.nodeName.toLowerCase():null;r&&Ia.hasOwnProperty(r)&&n?(n.appendChild(e),e=n):r==\"li\"?n=e:r&&(n=null)}}function Cp(t,e){return(t.matches||t.msMatchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector).call(t,e)}function pa(t){let e={};for(let n in t)e[n]=t[n];return e}function ma(t,e){let n=e.schema.nodes;for(let r in n){let o=n[r];if(!o.allowsMarkType(t))continue;let i=[],s=l=>{i.push(l);for(let a=0;a<l.edgeCount;a++){let{type:c,next:d}=l.edge(a);if(c==e||i.indexOf(d)<0&&s(d))return!0}};if(s(o.contentMatch))return!0}}var ct=class t{constructor(e,n){this.nodes=e,this.marks=n}serializeFragment(e,n={},r){r||(r=Ti(n).createDocumentFragment());let o=r,i=[];return e.forEach(s=>{if(i.length||s.marks.length){let l=0,a=0;for(;l<i.length&&a<s.marks.length;){let c=s.marks[a];if(!this.marks[c.type.name]){a++;continue}if(!c.eq(i[l][0])||c.type.spec.spanning===!1)break;l++,a++}for(;l<i.length;)o=i.pop()[1];for(;a<s.marks.length;){let c=s.marks[a++],d=this.serializeMark(c,s.isInline,n);d&&(i.push([c,o]),o.appendChild(d.dom),o=d.contentDOM||d.dom)}}o.appendChild(this.serializeNodeInner(s,n))}),r}serializeNodeInner(e,n){let{dom:r,contentDOM:o}=Er(Ti(n),this.nodes[e.type.name](e),null,e.attrs);if(o){if(e.isLeaf)throw new RangeError(\"Content hole not allowed in a leaf node spec\");this.serializeFragment(e.content,n,o)}return r}serializeNode(e,n={}){let r=this.serializeNodeInner(e,n);for(let o=e.marks.length-1;o>=0;o--){let i=this.serializeMark(e.marks[o],e.isInline,n);i&&((i.contentDOM||i.dom).appendChild(r),r=i.dom)}return r}serializeMark(e,n,r={}){let o=this.marks[e.type.name];return o&&Er(Ti(r),o(e,n),null,e.attrs)}static renderSpec(e,n,r=null,o){return Er(e,n,r,o)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new t(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let n=ga(e.nodes);return n.text||(n.text=r=>r.text),n}static marksFromSchema(e){return ga(e.marks)}};function ga(t){let e={};for(let n in t){let r=t[n].spec.toDOM;r&&(e[n]=r)}return e}function Ti(t){return t.document||window.document}var ya=new WeakMap;function vp(t){let e=ya.get(t);return e===void 0&&ya.set(t,e=Mp(t)),e}function Mp(t){let e=null;function n(r){if(r&&typeof r==\"object\")if(Array.isArray(r))if(typeof r[0]==\"string\")e||(e=[]),e.push(r);else for(let o=0;o<r.length;o++)n(r[o]);else for(let o in r)n(r[o])}return n(t),e}function Er(t,e,n,r){if(typeof e==\"string\")return{dom:t.createTextNode(e)};if(e.nodeType!=null)return{dom:e};if(e.dom&&e.dom.nodeType!=null)return e;let o=e[0],i;if(typeof o!=\"string\")throw new RangeError(\"Invalid array passed to renderSpec\");if(r&&(i=vp(r))&&i.indexOf(e)>-1)throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");let s=o.indexOf(\" \");s>0&&(n=o.slice(0,s),o=o.slice(s+1));let l,a=n?t.createElementNS(n,o):t.createElement(o),c=e[1],d=1;if(c&&typeof c==\"object\"&&c.nodeType==null&&!Array.isArray(c)){d=2;for(let u in c)if(c[u]!=null){let f=u.indexOf(\" \");f>0?a.setAttributeNS(u.slice(0,f),u.slice(f+1),c[u]):u==\"style\"&&a.style?a.style.cssText=c[u]:a.setAttribute(u,c[u])}}for(let u=d;u<e.length;u++){let f=e[u];if(f===0){if(u<e.length-1||u>d)throw new RangeError(\"Content hole must be the only child of its parent node\");return{dom:a,contentDOM:a}}else{let{dom:h,contentDOM:p}=Er(t,f,n,r);if(a.appendChild(h),p){if(l)throw new RangeError(\"Multiple content holes\");l=p}}}return{dom:a,contentDOM:l}}var Ba=65535,za=Math.pow(2,16);function Tp(t,e){return t+e*za}function Pa(t){return t&Ba}function Ap(t){return(t-(t&Ba))/za}var Ha=1,$a=2,Pr=4,Fa=8,Wn=class{constructor(e,n,r){this.pos=e,this.delInfo=n,this.recover=r}get deleted(){return(this.delInfo&Fa)>0}get deletedBefore(){return(this.delInfo&(Ha|Pr))>0}get deletedAfter(){return(this.delInfo&($a|Pr))>0}get deletedAcross(){return(this.delInfo&Pr)>0}},dt=class t{constructor(e,n=!1){if(this.ranges=e,this.inverted=n,!e.length&&t.empty)return t.empty}recover(e){let n=0,r=Pa(e);if(!this.inverted)for(let o=0;o<r;o++)n+=this.ranges[o*3+2]-this.ranges[o*3+1];return this.ranges[r*3]+n+Ap(e)}mapResult(e,n=1){return this._map(e,n,!1)}map(e,n=1){return this._map(e,n,!0)}_map(e,n,r){let o=0,i=this.inverted?2:1,s=this.inverted?1:2;for(let l=0;l<this.ranges.length;l+=3){let a=this.ranges[l]-(this.inverted?o:0);if(a>e)break;let c=this.ranges[l+i],d=this.ranges[l+s],u=a+c;if(e<=u){let f=c?e==a?-1:e==u?1:n:n,h=a+o+(f<0?0:d);if(r)return h;let p=e==(n<0?a:u)?null:Tp(l/3,e-a),m=e==a?$a:e==u?Ha:Pr;return(n<0?e!=a:e!=u)&&(m|=Fa),new Wn(h,m,p)}o+=d-c}return r?e+o:new Wn(e+o,0,null)}touches(e,n){let r=0,o=Pa(n),i=this.inverted?2:1,s=this.inverted?1:2;for(let l=0;l<this.ranges.length;l+=3){let a=this.ranges[l]-(this.inverted?r:0);if(a>e)break;let c=this.ranges[l+i],d=a+c;if(e<=d&&l==o*3)return!0;r+=this.ranges[l+s]-c}return!1}forEach(e){let n=this.inverted?2:1,r=this.inverted?1:2;for(let o=0,i=0;o<this.ranges.length;o+=3){let s=this.ranges[o],l=s-(this.inverted?i:0),a=s+(this.inverted?0:i),c=this.ranges[o+n],d=this.ranges[o+r];e(l,l+c,a,a+d),i+=d-c}}invert(){return new t(this.ranges,!this.inverted)}toString(){return(this.inverted?\"-\":\"\")+JSON.stringify(this.ranges)}static offset(e){return e==0?t.empty:new t(e<0?[0,-e,0]:[0,0,e])}};dt.empty=new dt([]);var jn=class t{constructor(e,n,r=0,o=e?e.length:0){this.mirror=n,this.from=r,this.to=o,this._maps=e||[],this.ownData=!(e||n)}get maps(){return this._maps}slice(e=0,n=this.maps.length){return new t(this._maps,this.mirror,e,n)}appendMap(e,n){this.ownData||(this._maps=this._maps.slice(),this.mirror=this.mirror&&this.mirror.slice(),this.ownData=!0),this.to=this._maps.push(e),n!=null&&this.setMirror(this._maps.length-1,n)}appendMapping(e){for(let n=0,r=this._maps.length;n<e._maps.length;n++){let o=e.getMirror(n);this.appendMap(e._maps[n],o!=null&&o<n?r+o:void 0)}}getMirror(e){if(this.mirror){for(let n=0;n<this.mirror.length;n++)if(this.mirror[n]==e)return this.mirror[n+(n%2?-1:1)]}}setMirror(e,n){this.mirror||(this.mirror=[]),this.mirror.push(e,n)}appendMappingInverted(e){for(let n=e.maps.length-1,r=this._maps.length+e._maps.length;n>=0;n--){let o=e.getMirror(n);this.appendMap(e._maps[n].invert(),o!=null&&o>n?r-o-1:void 0)}}invert(){let e=new t;return e.appendMappingInverted(this),e}map(e,n=1){if(this.mirror)return this._map(e,n,!0);for(let r=this.from;r<this.to;r++)e=this._maps[r].map(e,n);return e}mapResult(e,n=1){return this._map(e,n,!1)}_map(e,n,r){let o=0;for(let i=this.from;i<this.to;i++){let s=this._maps[i],l=s.mapResult(e,n);if(l.recover!=null){let a=this.getMirror(i);if(a!=null&&a>i&&a<this.to){i=a,e=this._maps[a].recover(l.recover);continue}}o|=l.delInfo,e=l.pos}return r?e:new Wn(e,o,null)}},Ii=Object.create(null),ce=class{getMap(){return dt.empty}merge(e){return null}static fromJSON(e,n){if(!n||!n.stepType)throw new RangeError(\"Invalid input for Step.fromJSON\");let r=Ii[n.stepType];if(!r)throw new RangeError(`No step type ${n.stepType} defined`);return r.fromJSON(e,n)}static jsonID(e,n){if(e in Ii)throw new RangeError(\"Duplicate use of step JSON ID \"+e);return Ii[e]=n,n.prototype.jsonID=e,n}},ue=class t{constructor(e,n){this.doc=e,this.failed=n}static ok(e){return new t(e,null)}static fail(e){return new t(null,e)}static fromReplace(e,n,r,o){try{return t.ok(e.replace(n,r,o))}catch(i){if(i instanceof Ft)return t.fail(i.message);throw i}}};function Hi(t,e,n){let r=[];for(let o=0;o<t.childCount;o++){let i=t.child(o);i.content.size&&(i=i.copy(Hi(i.content,e,i))),i.isInline&&(i=e(i,n,o)),r.push(i)}return v.fromArray(r)}var Un=class t extends ce{constructor(e,n,r){super(),this.from=e,this.to=n,this.mark=r}apply(e){let n=e.slice(this.from,this.to),r=e.resolve(this.from),o=r.node(r.sharedDepth(this.to)),i=new E(Hi(n.content,(s,l)=>!s.isAtom||!l.type.allowsMarkType(this.mark.type)?s:s.mark(this.mark.addToSet(s.marks)),o),n.openStart,n.openEnd);return ue.fromReplace(e,this.from,this.to,i)}invert(){return new ut(this.from,this.to,this.mark)}map(e){let n=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return n.deleted&&r.deleted||n.pos>=r.pos?null:new t(n.pos,r.pos,this.mark)}merge(e){return e instanceof t&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new t(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:\"addMark\",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\")throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");return new t(n.from,n.to,e.markFromJSON(n.mark))}};ce.jsonID(\"addMark\",Un);var ut=class t extends ce{constructor(e,n,r){super(),this.from=e,this.to=n,this.mark=r}apply(e){let n=e.slice(this.from,this.to),r=new E(Hi(n.content,o=>o.mark(this.mark.removeFromSet(o.marks)),e),n.openStart,n.openEnd);return ue.fromReplace(e,this.from,this.to,r)}invert(){return new Un(this.from,this.to,this.mark)}map(e){let n=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return n.deleted&&r.deleted||n.pos>=r.pos?null:new t(n.pos,r.pos,this.mark)}merge(e){return e instanceof t&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new t(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:\"removeMark\",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\")throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");return new t(n.from,n.to,e.markFromJSON(n.mark))}};ce.jsonID(\"removeMark\",ut);var Kn=class t extends ce{constructor(e,n){super(),this.pos=e,this.mark=n}apply(e){let n=e.nodeAt(this.pos);if(!n)return ue.fail(\"No node at mark step's position\");let r=n.type.create(n.attrs,null,this.mark.addToSet(n.marks));return ue.fromReplace(e,this.pos,this.pos+1,new E(v.from(r),0,n.isLeaf?0:1))}invert(e){let n=e.nodeAt(this.pos);if(n){let r=this.mark.addToSet(n.marks);if(r.length==n.marks.length){for(let o=0;o<n.marks.length;o++)if(!n.marks[o].isInSet(r))return new t(this.pos,n.marks[o]);return new t(this.pos,this.mark)}}return new hn(this.pos,this.mark)}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new t(n.pos,this.mark)}toJSON(){return{stepType:\"addNodeMark\",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,n){if(typeof n.pos!=\"number\")throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");return new t(n.pos,e.markFromJSON(n.mark))}};ce.jsonID(\"addNodeMark\",Kn);var hn=class t extends ce{constructor(e,n){super(),this.pos=e,this.mark=n}apply(e){let n=e.nodeAt(this.pos);if(!n)return ue.fail(\"No node at mark step's position\");let r=n.type.create(n.attrs,null,this.mark.removeFromSet(n.marks));return ue.fromReplace(e,this.pos,this.pos+1,new E(v.from(r),0,n.isLeaf?0:1))}invert(e){let n=e.nodeAt(this.pos);return!n||!this.mark.isInSet(n.marks)?this:new Kn(this.pos,this.mark)}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new t(n.pos,this.mark)}toJSON(){return{stepType:\"removeNodeMark\",pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(e,n){if(typeof n.pos!=\"number\")throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");return new t(n.pos,e.markFromJSON(n.mark))}};ce.jsonID(\"removeNodeMark\",hn);var ye=class t extends ce{constructor(e,n,r,o=!1){super(),this.from=e,this.to=n,this.slice=r,this.structure=o}apply(e){return this.structure&&Bi(e,this.from,this.to)?ue.fail(\"Structure replace would overwrite content\"):ue.fromReplace(e,this.from,this.to,this.slice)}getMap(){return new dt([this.from,this.to-this.from,this.slice.size])}invert(e){return new t(this.from,this.from+this.slice.size,e.slice(this.from,this.to))}map(e){let n=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return n.deletedAcross&&r.deletedAcross?null:new t(n.pos,Math.max(n.pos,r.pos),this.slice,this.structure)}merge(e){if(!(e instanceof t)||e.structure||this.structure)return null;if(this.from+this.slice.size==e.from&&!this.slice.openEnd&&!e.slice.openStart){let n=this.slice.size+e.slice.size==0?E.empty:new E(this.slice.content.append(e.slice.content),this.slice.openStart,e.slice.openEnd);return new t(this.from,this.to+(e.to-e.from),n,this.structure)}else if(e.to==this.from&&!this.slice.openStart&&!e.slice.openEnd){let n=this.slice.size+e.slice.size==0?E.empty:new E(e.slice.content.append(this.slice.content),e.slice.openStart,this.slice.openEnd);return new t(e.from,this.to,n,this.structure)}else return null}toJSON(){let e={stepType:\"replace\",from:this.from,to:this.to};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\")throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");return new t(n.from,n.to,E.fromJSON(e,n.slice),!!n.structure)}};ce.jsonID(\"replace\",ye);var se=class t extends ce{constructor(e,n,r,o,i,s,l=!1){super(),this.from=e,this.to=n,this.gapFrom=r,this.gapTo=o,this.slice=i,this.insert=s,this.structure=l}apply(e){if(this.structure&&(Bi(e,this.from,this.gapFrom)||Bi(e,this.gapTo,this.to)))return ue.fail(\"Structure gap-replace would overwrite content\");let n=e.slice(this.gapFrom,this.gapTo);if(n.openStart||n.openEnd)return ue.fail(\"Gap is not a flat range\");let r=this.slice.insertAt(this.insert,n.content);return r?ue.fromReplace(e,this.from,this.to,r):ue.fail(\"Content does not fit in gap\")}getMap(){return new dt([this.from,this.gapFrom-this.from,this.insert,this.gapTo,this.to-this.gapTo,this.slice.size-this.insert])}invert(e){let n=this.gapTo-this.gapFrom;return new t(this.from,this.from+this.slice.size+n,this.from+this.insert,this.from+this.insert+n,e.slice(this.from,this.to).removeBetween(this.gapFrom-this.from,this.gapTo-this.from),this.gapFrom-this.from,this.structure)}map(e){let n=e.mapResult(this.from,1),r=e.mapResult(this.to,-1),o=this.from==this.gapFrom?n.pos:e.map(this.gapFrom,-1),i=this.to==this.gapTo?r.pos:e.map(this.gapTo,1);return n.deletedAcross&&r.deletedAcross||o<n.pos||i>r.pos?null:new t(n.pos,r.pos,o,i,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:\"replaceAround\",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,n){if(typeof n.from!=\"number\"||typeof n.to!=\"number\"||typeof n.gapFrom!=\"number\"||typeof n.gapTo!=\"number\"||typeof n.insert!=\"number\")throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");return new t(n.from,n.to,n.gapFrom,n.gapTo,E.fromJSON(e,n.slice),n.insert,!!n.structure)}};ce.jsonID(\"replaceAround\",se);function Bi(t,e,n){let r=t.resolve(e),o=n-e,i=r.depth;for(;o>0&&i>0&&r.indexAfter(i)==r.node(i).childCount;)i--,o--;if(o>0){let s=r.node(i).maybeChild(r.indexAfter(i));for(;o>0;){if(!s||s.isLeaf)return!0;s=s.firstChild,o--}}return!1}function Ep(t,e,n,r){let o=[],i=[],s,l;t.doc.nodesBetween(e,n,(a,c,d)=>{if(!a.isInline)return;let u=a.marks;if(!r.isInSet(u)&&d.type.allowsMarkType(r.type)){let f=Math.max(c,e),h=Math.min(c+a.nodeSize,n),p=r.addToSet(u);for(let m=0;m<u.length;m++)u[m].isInSet(p)||(s&&s.to==f&&s.mark.eq(u[m])?s.to=h:o.push(s=new ut(f,h,u[m])));l&&l.to==f?l.to=h:i.push(l=new Un(f,h,r))}}),o.forEach(a=>t.step(a)),i.forEach(a=>t.step(a))}function Np(t,e,n,r){let o=[],i=0;t.doc.nodesBetween(e,n,(s,l)=>{if(!s.isInline)return;i++;let a=null;if(r instanceof $n){let c=s.marks,d;for(;d=r.isInSet(c);)(a||(a=[])).push(d),c=d.removeFromSet(c)}else r?r.isInSet(s.marks)&&(a=[r]):a=s.marks;if(a&&a.length){let c=Math.min(l+s.nodeSize,n);for(let d=0;d<a.length;d++){let u=a[d],f;for(let h=0;h<o.length;h++){let p=o[h];p.step==i-1&&u.eq(o[h].style)&&(f=p)}f?(f.to=c,f.step=i):o.push({style:u,from:Math.max(l,e),to:c,step:i})}}}),o.forEach(s=>t.step(new ut(s.from,s.to,s.style)))}function $i(t,e,n,r=n.contentMatch,o=!0){let i=t.doc.nodeAt(e),s=[],l=e+1;for(let a=0;a<i.childCount;a++){let c=i.child(a),d=l+c.nodeSize,u=r.matchType(c.type);if(!u)s.push(new ye(l,d,E.empty));else{r=u;for(let f=0;f<c.marks.length;f++)n.allowsMarkType(c.marks[f].type)||t.step(new ut(l,d,c.marks[f]));if(o&&c.isText&&n.whitespace!=\"pre\"){let f,h=/\\r?\\n|\\r/g,p;for(;f=h.exec(c.text);)p||(p=new E(v.from(n.schema.text(\" \",n.allowedMarks(c.marks))),0,0)),s.push(new ye(l+f.index,l+f.index+f[0].length,p))}}l=d}if(!r.validEnd){let a=r.fillBefore(v.empty,!0);t.replace(l,l,new E(a,0,0))}for(let a=s.length-1;a>=0;a--)t.step(s[a])}function Op(t,e,n){return(e==0||t.canReplace(e,t.childCount))&&(n==t.childCount||t.canReplace(0,n))}function ft(t){let n=t.parent.content.cutByIndex(t.startIndex,t.endIndex);for(let r=t.depth,o=0,i=0;;--r){let s=t.$from.node(r),l=t.$from.index(r)+o,a=t.$to.indexAfter(r)-i;if(r<t.depth&&s.canReplace(l,a,n))return r;if(r==0||s.type.spec.isolating||!Op(s,l,a))break;l&&(o=1),a<s.childCount&&(i=1)}return null}function Rp(t,e,n){let{$from:r,$to:o,depth:i}=e,s=r.before(i+1),l=o.after(i+1),a=s,c=l,d=v.empty,u=0;for(let p=i,m=!1;p>n;p--)m||r.index(p)>0?(m=!0,d=v.from(r.node(p).copy(d)),u++):a--;let f=v.empty,h=0;for(let p=i,m=!1;p>n;p--)m||o.after(p+1)<o.end(p)?(m=!0,f=v.from(o.node(p).copy(f)),h++):c++;t.step(new se(a,c,s,l,new E(d.append(f),u,h),d.size-u,!0))}function mn(t,e,n=null,r=t){let o=Dp(t,e),i=o&&Ip(r,e);return i?o.map(La).concat({type:e,attrs:n}).concat(i.map(La)):null}function La(t){return{type:t,attrs:null}}function Dp(t,e){let{parent:n,startIndex:r,endIndex:o}=t,i=n.contentMatchAt(r).findWrapping(e);if(!i)return null;let s=i.length?i[0]:e;return n.canReplaceWith(r,o,s)?i:null}function Ip(t,e){let{parent:n,startIndex:r,endIndex:o}=t,i=n.child(r),s=e.contentMatch.findWrapping(i.type);if(!s)return null;let a=(s.length?s[s.length-1]:e).contentMatch;for(let c=r;a&&c<o;c++)a=a.matchType(n.child(c).type);return!a||!a.validEnd?null:s}function Pp(t,e,n){let r=v.empty;for(let s=n.length-1;s>=0;s--){if(r.size){let l=n[s].type.contentMatch.matchFragment(r);if(!l||!l.validEnd)throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\")}r=v.from(n[s].type.create(n[s].attrs,r))}let o=e.start,i=e.end;t.step(new se(o,i,o,i,new E(r,0,0),n.length,!0))}function Lp(t,e,n,r,o){if(!r.isTextblock)throw new RangeError(\"Type given to setBlockType should be a textblock\");let i=t.steps.length;t.doc.nodesBetween(e,n,(s,l)=>{let a=typeof o==\"function\"?o(s):o;if(s.isTextblock&&!s.hasMarkup(r,a)&&Bp(t.doc,t.mapping.slice(i).map(l),r)){let c=null;if(r.schema.linebreakReplacement){let h=r.whitespace==\"pre\",p=!!r.contentMatch.matchType(r.schema.linebreakReplacement);h&&!p?c=!1:!h&&p&&(c=!0)}c===!1&&_a(t,s,l,i),$i(t,t.mapping.slice(i).map(l,1),r,void 0,c===null);let d=t.mapping.slice(i),u=d.map(l,1),f=d.map(l+s.nodeSize,1);return t.step(new se(u,f,u+1,f-1,new E(v.from(r.create(a,null,s.marks)),0,0),1,!0)),c===!0&&Va(t,s,l,i),!1}})}function Va(t,e,n,r){e.forEach((o,i)=>{if(o.isText){let s,l=/\\r?\\n|\\r/g;for(;s=l.exec(o.text);){let a=t.mapping.slice(r).map(n+1+i+s.index);t.replaceWith(a,a+1,e.type.schema.linebreakReplacement.create())}}})}function _a(t,e,n,r){e.forEach((o,i)=>{if(o.type==o.type.schema.linebreakReplacement){let s=t.mapping.slice(r).map(n+1+i);t.replaceWith(s,s+1,e.type.schema.text(`\n`))}})}function Bp(t,e,n){let r=t.resolve(e),o=r.index();return r.parent.canReplaceWith(o,o+1,n)}function zp(t,e,n,r,o){let i=t.doc.nodeAt(e);if(!i)throw new RangeError(\"No node at given position\");n||(n=i.type);let s=n.create(r,null,o||i.marks);if(i.isLeaf)return t.replaceWith(e,e+i.nodeSize,s);if(!n.validContent(i.content))throw new RangeError(\"Invalid content for node type \"+n.name);t.step(new se(e,e+i.nodeSize,e+1,e+i.nodeSize-1,new E(v.from(s),0,0),1,!0))}function Ee(t,e,n=1,r){let o=t.resolve(e),i=o.depth-n,s=r&&r[r.length-1]||o.parent;if(i<0||o.parent.type.spec.isolating||!o.parent.canReplace(o.index(),o.parent.childCount)||!s.type.validContent(o.parent.content.cutByIndex(o.index(),o.parent.childCount)))return!1;for(let c=o.depth-1,d=n-2;c>i;c--,d--){let u=o.node(c),f=o.index(c);if(u.type.spec.isolating)return!1;let h=u.content.cutByIndex(f,u.childCount),p=r&&r[d+1];p&&(h=h.replaceChild(0,p.type.create(p.attrs)));let m=r&&r[d]||u;if(!u.canReplace(f+1,u.childCount)||!m.type.validContent(h))return!1}let l=o.indexAfter(i),a=r&&r[0];return o.node(i).canReplaceWith(l,l,a?a.type:o.node(i+1).type)}function Hp(t,e,n=1,r){let o=t.doc.resolve(e),i=v.empty,s=v.empty;for(let l=o.depth,a=o.depth-n,c=n-1;l>a;l--,c--){i=v.from(o.node(l).copy(i));let d=r&&r[c];s=v.from(d?d.type.create(d.attrs,s):o.node(l).copy(s))}t.step(new ye(e,e,new E(i.append(s),n,n),!0))}function Re(t,e){let n=t.resolve(e),r=n.index();return Wa(n.nodeBefore,n.nodeAfter)&&n.parent.canReplace(r,r+1)}function $p(t,e){e.content.size||t.type.compatibleContent(e.type);let n=t.contentMatchAt(t.childCount),{linebreakReplacement:r}=t.type.schema;for(let o=0;o<e.childCount;o++){let i=e.child(o),s=i.type==r?t.type.schema.nodes.text:i.type;if(n=n.matchType(s),!n||!t.type.allowsMarks(i.marks))return!1}return n.validEnd}function Wa(t,e){return!!(t&&e&&!t.isLeaf&&$p(t,e))}function Wt(t,e,n=-1){let r=t.resolve(e);for(let o=r.depth;;o--){let i,s,l=r.index(o);if(o==r.depth?(i=r.nodeBefore,s=r.nodeAfter):n>0?(i=r.node(o+1),l++,s=r.node(o).maybeChild(l)):(i=r.node(o).maybeChild(l-1),s=r.node(o+1)),i&&!i.isTextblock&&Wa(i,s)&&r.node(o).canReplace(l,l+1))return e;if(o==0)break;e=n<0?r.before(o):r.after(o)}}function Fp(t,e,n){let r=null,{linebreakReplacement:o}=t.doc.type.schema,i=t.doc.resolve(e-n),s=i.node().type;if(o&&s.inlineContent){let d=s.whitespace==\"pre\",u=!!s.contentMatch.matchType(o);d&&!u?r=!1:!d&&u&&(r=!0)}let l=t.steps.length;if(r===!1){let d=t.doc.resolve(e+n);_a(t,d.node(),d.before(),l)}s.inlineContent&&$i(t,e+n-1,s,i.node().contentMatchAt(i.index()),r==null);let a=t.mapping.slice(l),c=a.map(e-n);if(t.step(new ye(c,a.map(e+n,-1),E.empty,!0)),r===!0){let d=t.doc.resolve(c);Va(t,d.node(),d.before(),t.steps.length)}return t}function Vp(t,e,n){let r=t.resolve(e);if(r.parent.canReplaceWith(r.index(),r.index(),n))return e;if(r.parentOffset==0)for(let o=r.depth-1;o>=0;o--){let i=r.index(o);if(r.node(o).canReplaceWith(i,i,n))return r.before(o+1);if(i>0)return null}if(r.parentOffset==r.parent.content.size)for(let o=r.depth-1;o>=0;o--){let i=r.indexAfter(o);if(r.node(o).canReplaceWith(i,i,n))return r.after(o+1);if(i<r.node(o).childCount)return null}return null}function zr(t,e,n){let r=t.resolve(e);if(!n.content.size)return e;let o=n.content;for(let i=0;i<n.openStart;i++)o=o.firstChild.content;for(let i=1;i<=(n.openStart==0&&n.size?2:1);i++)for(let s=r.depth;s>=0;s--){let l=s==r.depth?0:r.pos<=(r.start(s+1)+r.end(s+1))/2?-1:1,a=r.index(s)+(l>0?1:0),c=r.node(s),d=!1;if(i==1)d=c.canReplace(a,a,o);else{let u=c.contentMatchAt(a).findWrapping(o.firstChild.type);d=u&&c.canReplaceWith(a,a,u[0])}if(d)return l==0?r.pos:l<0?r.before(s+1):r.after(s+1)}return null}function qn(t,e,n=e,r=E.empty){if(e==n&&!r.size)return null;let o=t.resolve(e),i=t.resolve(n);return ja(o,i,r)?new ye(e,n,r):new zi(o,i,r).fit()}function ja(t,e,n){return!n.openStart&&!n.openEnd&&t.start()==e.start()&&t.parent.canReplace(t.index(),e.index(),n.content)}var zi=class{constructor(e,n,r){this.$from=e,this.$to=n,this.unplaced=r,this.frontier=[],this.placed=v.empty;for(let o=0;o<=e.depth;o++){let i=e.node(o);this.frontier.push({type:i.type,match:i.contentMatchAt(e.indexAfter(o))})}for(let o=e.depth;o>0;o--)this.placed=v.from(e.node(o).copy(this.placed))}get depth(){return this.frontier.length-1}fit(){for(;this.unplaced.size;){let c=this.findFittable();c?this.placeNodes(c):this.openMore()||this.dropNode()}let e=this.mustMoveInline(),n=this.placed.size-this.depth-this.$from.depth,r=this.$from,o=this.close(e<0?this.$to:r.doc.resolve(e));if(!o)return null;let i=this.placed,s=r.depth,l=o.depth;for(;s&&l&&i.childCount==1;)i=i.firstChild.content,s--,l--;let a=new E(i,s,l);return e>-1?new se(r.pos,e,this.$to.pos,this.$to.end(),a,n):a.size||r.pos!=this.$to.pos?new ye(r.pos,o.pos,a):null}findFittable(){let e=this.unplaced.openStart;for(let n=this.unplaced.content,r=0,o=this.unplaced.openEnd;r<e;r++){let i=n.firstChild;if(n.childCount>1&&(o=0),i.type.spec.isolating&&o<=r){e=r;break}n=i.content}for(let n=1;n<=2;n++)for(let r=n==1?e:this.unplaced.openStart;r>=0;r--){let o,i=null;r?(i=Pi(this.unplaced.content,r-1).firstChild,o=i.content):o=this.unplaced.content;let s=o.firstChild;for(let l=this.depth;l>=0;l--){let{type:a,match:c}=this.frontier[l],d,u=null;if(n==1&&(s?c.matchType(s.type)||(u=c.fillBefore(v.from(s),!1)):i&&a.compatibleContent(i.type)))return{sliceDepth:r,frontierDepth:l,parent:i,inject:u};if(n==2&&s&&(d=c.findWrapping(s.type)))return{sliceDepth:r,frontierDepth:l,parent:i,wrap:d};if(i&&c.matchType(i.type))break}}}openMore(){let{content:e,openStart:n,openEnd:r}=this.unplaced,o=Pi(e,n);return!o.childCount||o.firstChild.isLeaf?!1:(this.unplaced=new E(e,n+1,Math.max(r,o.size+n>=e.size-r?n+1:0)),!0)}dropNode(){let{content:e,openStart:n,openEnd:r}=this.unplaced,o=Pi(e,n);if(o.childCount<=1&&n>0){let i=e.size-n<=n+o.size;this.unplaced=new E(Vn(e,n-1,1),n-1,i?n-1:r)}else this.unplaced=new E(Vn(e,n,1),n,r)}placeNodes({sliceDepth:e,frontierDepth:n,parent:r,inject:o,wrap:i}){for(;this.depth>n;)this.closeFrontierNode();if(i)for(let m=0;m<i.length;m++)this.openFrontierNode(i[m]);let s=this.unplaced,l=r?r.content:s.content,a=s.openStart-e,c=0,d=[],{match:u,type:f}=this.frontier[n];if(o){for(let m=0;m<o.childCount;m++)d.push(o.child(m));u=u.matchFragment(o)}let h=l.size+e-(s.content.size-s.openEnd);for(;c<l.childCount;){let m=l.child(c),g=u.matchType(m.type);if(!g)break;c++,(c>1||a==0||m.content.size)&&(u=g,d.push(Ua(m.mark(f.allowedMarks(m.marks)),c==1?a:0,c==l.childCount?h:-1)))}let p=c==l.childCount;p||(h=-1),this.placed=_n(this.placed,n,v.from(d)),this.frontier[n].match=u,p&&h<0&&r&&r.type==this.frontier[this.depth].type&&this.frontier.length>1&&this.closeFrontierNode();for(let m=0,g=l;m<h;m++){let y=g.lastChild;this.frontier.push({type:y.type,match:y.contentMatchAt(y.childCount)}),g=y.content}this.unplaced=p?e==0?E.empty:new E(Vn(s.content,e-1,1),e-1,h<0?s.openEnd:e-1):new E(Vn(s.content,e,c),s.openStart,s.openEnd)}mustMoveInline(){if(!this.$to.parent.isTextblock)return-1;let e=this.frontier[this.depth],n;if(!e.type.isTextblock||!Li(this.$to,this.$to.depth,e.type,e.match,!1)||this.$to.depth==this.depth&&(n=this.findCloseLevel(this.$to))&&n.depth==this.depth)return-1;let{depth:r}=this.$to,o=this.$to.after(r);for(;r>1&&o==this.$to.end(--r);)++o;return o}findCloseLevel(e){e:for(let n=Math.min(this.depth,e.depth);n>=0;n--){let{match:r,type:o}=this.frontier[n],i=n<e.depth&&e.end(n+1)==e.pos+(e.depth-(n+1)),s=Li(e,n,o,r,i);if(s){for(let l=n-1;l>=0;l--){let{match:a,type:c}=this.frontier[l],d=Li(e,l,c,a,!0);if(!d||d.childCount)continue e}return{depth:n,fit:s,move:i?e.doc.resolve(e.after(n+1)):e}}}}close(e){let n=this.findCloseLevel(e);if(!n)return null;for(;this.depth>n.depth;)this.closeFrontierNode();n.fit.childCount&&(this.placed=_n(this.placed,n.depth,n.fit)),e=n.move;for(let r=n.depth+1;r<=e.depth;r++){let o=e.node(r),i=o.type.contentMatch.fillBefore(o.content,!0,e.index(r));this.openFrontierNode(o.type,o.attrs,i)}return e}openFrontierNode(e,n=null,r){let o=this.frontier[this.depth];o.match=o.match.matchType(e),this.placed=_n(this.placed,this.depth,v.from(e.create(n,r))),this.frontier.push({type:e,match:e.contentMatch})}closeFrontierNode(){let n=this.frontier.pop().match.fillBefore(v.empty,!0);n.childCount&&(this.placed=_n(this.placed,this.frontier.length,n))}};function Vn(t,e,n){return e==0?t.cutByIndex(n,t.childCount):t.replaceChild(0,t.firstChild.copy(Vn(t.firstChild.content,e-1,n)))}function _n(t,e,n){return e==0?t.append(n):t.replaceChild(t.childCount-1,t.lastChild.copy(_n(t.lastChild.content,e-1,n)))}function Pi(t,e){for(let n=0;n<e;n++)t=t.firstChild.content;return t}function Ua(t,e,n){if(e<=0)return t;let r=t.content;return e>1&&(r=r.replaceChild(0,Ua(r.firstChild,e-1,r.childCount==1?n-1:0))),e>0&&(r=t.type.contentMatch.fillBefore(r).append(r),n<=0&&(r=r.append(t.type.contentMatch.matchFragment(r).fillBefore(v.empty,!0)))),t.copy(r)}function Li(t,e,n,r,o){let i=t.node(e),s=o?t.indexAfter(e):t.index(e);if(s==i.childCount&&!n.compatibleContent(i.type))return null;let l=r.fillBefore(i.content,!0,s);return l&&!_p(n,i.content,s)?l:null}function _p(t,e,n){for(let r=n;r<e.childCount;r++)if(!t.allowsMarks(e.child(r).marks))return!0;return!1}function Wp(t){return t.spec.defining||t.spec.definingForContent}function jp(t,e,n,r){if(!r.size)return t.deleteRange(e,n);let o=t.doc.resolve(e),i=t.doc.resolve(n);if(ja(o,i,r))return t.step(new ye(e,n,r));let s=qa(o,i);s[s.length-1]==0&&s.pop();let l=-(o.depth+1);s.unshift(l);for(let f=o.depth,h=o.pos-1;f>0;f--,h--){let p=o.node(f).type.spec;if(p.defining||p.definingAsContext||p.isolating)break;s.indexOf(f)>-1?l=f:o.before(f)==h&&s.splice(1,0,-f)}let a=s.indexOf(l),c=[],d=r.openStart;for(let f=r.content,h=0;;h++){let p=f.firstChild;if(c.push(p),h==r.openStart)break;f=p.content}for(let f=d-1;f>=0;f--){let h=c[f],p=Wp(h.type);if(p&&!h.sameMarkup(o.node(Math.abs(l)-1)))d=f;else if(p||!h.type.isTextblock)break}for(let f=r.openStart;f>=0;f--){let h=(f+d+1)%(r.openStart+1),p=c[h];if(p)for(let m=0;m<s.length;m++){let g=s[(m+a)%s.length],y=!0;g<0&&(y=!1,g=-g);let w=o.node(g-1),b=o.index(g-1);if(w.canReplaceWith(b,b,p.type,p.marks))return t.replace(o.before(g),y?i.after(g):n,new E(Ka(r.content,0,r.openStart,h),h,r.openEnd))}}let u=t.steps.length;for(let f=s.length-1;f>=0&&(t.replace(e,n,r),!(t.steps.length>u));f--){let h=s[f];h<0||(e=o.before(h),n=i.after(h))}}function Ka(t,e,n,r,o){if(e<n){let i=t.firstChild;t=t.replaceChild(0,i.copy(Ka(i.content,e+1,n,r,i)))}if(e>r){let i=o.contentMatchAt(0),s=i.fillBefore(t).append(t);t=s.append(i.matchFragment(s).fillBefore(v.empty,!0))}return t}function Up(t,e,n,r){if(!r.isInline&&e==n&&t.doc.resolve(e).parent.content.size){let o=Vp(t.doc,e,r.type);o!=null&&(e=n=o)}t.replaceRange(e,n,new E(v.from(r),0,0))}function Kp(t,e,n){let r=t.doc.resolve(e),o=t.doc.resolve(n),i=qa(r,o);for(let s=0;s<i.length;s++){let l=i[s],a=s==i.length-1;if(a&&l==0||r.node(l).type.contentMatch.validEnd)return t.delete(r.start(l),o.end(l));if(l>0&&(a||r.node(l-1).canReplace(r.index(l-1),o.indexAfter(l-1))))return t.delete(r.before(l),o.after(l))}for(let s=1;s<=r.depth&&s<=o.depth;s++)if(e-r.start(s)==r.depth-s&&n>r.end(s)&&o.end(s)-n!=o.depth-s&&r.start(s-1)==o.start(s-1)&&r.node(s-1).canReplace(r.index(s-1),o.index(s-1)))return t.delete(r.before(s),n);t.delete(e,n)}function qa(t,e){let n=[],r=Math.min(t.depth,e.depth);for(let o=r;o>=0;o--){let i=t.start(o);if(i<t.pos-(t.depth-o)||e.end(o)>e.pos+(e.depth-o)||t.node(o).type.spec.isolating||e.node(o).type.spec.isolating)break;(i==e.start(o)||o==t.depth&&o==e.depth&&t.parent.inlineContent&&e.parent.inlineContent&&o&&e.start(o-1)==i-1)&&n.push(o)}return n}var Lr=class t extends ce{constructor(e,n,r){super(),this.pos=e,this.attr=n,this.value=r}apply(e){let n=e.nodeAt(this.pos);if(!n)return ue.fail(\"No node at attribute step's position\");let r=Object.create(null);for(let i in n.attrs)r[i]=n.attrs[i];r[this.attr]=this.value;let o=n.type.create(r,null,n.marks);return ue.fromReplace(e,this.pos,this.pos+1,new E(v.from(o),0,n.isLeaf?0:1))}getMap(){return dt.empty}invert(e){return new t(this.pos,this.attr,e.nodeAt(this.pos).attrs[this.attr])}map(e){let n=e.mapResult(this.pos,1);return n.deletedAfter?null:new t(n.pos,this.attr,this.value)}toJSON(){return{stepType:\"attr\",pos:this.pos,attr:this.attr,value:this.value}}static fromJSON(e,n){if(typeof n.pos!=\"number\"||typeof n.attr!=\"string\")throw new RangeError(\"Invalid input for AttrStep.fromJSON\");return new t(n.pos,n.attr,n.value)}};ce.jsonID(\"attr\",Lr);var Br=class t extends ce{constructor(e,n){super(),this.attr=e,this.value=n}apply(e){let n=Object.create(null);for(let o in e.attrs)n[o]=e.attrs[o];n[this.attr]=this.value;let r=e.type.create(n,e.content,e.marks);return ue.ok(r)}getMap(){return dt.empty}invert(e){return new t(this.attr,e.attrs[this.attr])}map(e){return this}toJSON(){return{stepType:\"docAttr\",attr:this.attr,value:this.value}}static fromJSON(e,n){if(typeof n.attr!=\"string\")throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");return new t(n.attr,n.value)}};ce.jsonID(\"docAttr\",Br);var pn=class extends Error{};pn=function t(e){let n=Error.call(this,e);return n.__proto__=t.prototype,n};pn.prototype=Object.create(Error.prototype);pn.prototype.constructor=pn;pn.prototype.name=\"TransformError\";var Tt=class{constructor(e){this.doc=e,this.steps=[],this.docs=[],this.mapping=new jn}get before(){return this.docs.length?this.docs[0]:this.doc}step(e){let n=this.maybeStep(e);if(n.failed)throw new pn(n.failed);return this}maybeStep(e){let n=e.apply(this.doc);return n.failed||this.addStep(e,n.doc),n}get docChanged(){return this.steps.length>0}addStep(e,n){this.docs.push(this.doc),this.steps.push(e),this.mapping.appendMap(e.getMap()),this.doc=n}replace(e,n=e,r=E.empty){let o=qn(this.doc,e,n,r);return o&&this.step(o),this}replaceWith(e,n,r){return this.replace(e,n,new E(v.from(r),0,0))}delete(e,n){return this.replace(e,n,E.empty)}insert(e,n){return this.replaceWith(e,e,n)}replaceRange(e,n,r){return jp(this,e,n,r),this}replaceRangeWith(e,n,r){return Up(this,e,n,r),this}deleteRange(e,n){return Kp(this,e,n),this}lift(e,n){return Rp(this,e,n),this}join(e,n=1){return Fp(this,e,n),this}wrap(e,n){return Pp(this,e,n),this}setBlockType(e,n=e,r,o=null){return Lp(this,e,n,r,o),this}setNodeMarkup(e,n,r=null,o){return zp(this,e,n,r,o),this}setNodeAttribute(e,n,r){return this.step(new Lr(e,n,r)),this}setDocAttribute(e,n){return this.step(new Br(e,n)),this}addNodeMark(e,n){return this.step(new Kn(e,n)),this}removeNodeMark(e,n){let r=this.doc.nodeAt(e);if(!r)throw new RangeError(\"No node at position \"+e);if(n instanceof J)n.isInSet(r.marks)&&this.step(new hn(e,n));else{let o=r.marks,i,s=[];for(;i=n.isInSet(o);)s.push(new hn(e,i)),o=i.removeFromSet(o);for(let l=s.length-1;l>=0;l--)this.step(s[l])}return this}split(e,n=1,r){return Hp(this,e,n,r),this}addMark(e,n,r){return Ep(this,e,n,r),this}removeMark(e,n,r){return Np(this,e,n,r),this}clearIncompatible(e,n,r){return $i(this,e,n,r),this}};var Fi=Object.create(null),I=class{constructor(e,n,r){this.$anchor=e,this.$head=n,this.ranges=r||[new yn(e.min(n),e.max(n))]}get anchor(){return this.$anchor.pos}get head(){return this.$head.pos}get from(){return this.$from.pos}get to(){return this.$to.pos}get $from(){return this.ranges[0].$from}get $to(){return this.ranges[0].$to}get empty(){let e=this.ranges;for(let n=0;n<e.length;n++)if(e[n].$from.pos!=e[n].$to.pos)return!1;return!0}content(){return this.$from.doc.slice(this.from,this.to,!0)}replace(e,n=E.empty){let r=n.content.lastChild,o=null;for(let l=0;l<n.openEnd;l++)o=r,r=r.lastChild;let i=e.steps.length,s=this.ranges;for(let l=0;l<s.length;l++){let{$from:a,$to:c}=s[l],d=e.mapping.slice(i);e.replaceRange(d.map(a.pos),d.map(c.pos),l?E.empty:n),l==0&&Xa(e,i,(r?r.isInline:o&&o.isTextblock)?-1:1)}}replaceWith(e,n){let r=e.steps.length,o=this.ranges;for(let i=0;i<o.length;i++){let{$from:s,$to:l}=o[i],a=e.mapping.slice(r),c=a.map(s.pos),d=a.map(l.pos);i?e.deleteRange(c,d):(e.replaceRangeWith(c,d,n),Xa(e,r,n.isInline?-1:1))}}static findFrom(e,n,r=!1){let o=e.parent.inlineContent?new D(e):gn(e.node(0),e.parent,e.pos,e.index(),n,r);if(o)return o;for(let i=e.depth-1;i>=0;i--){let s=n<0?gn(e.node(0),e.node(i),e.before(i+1),e.index(i),n,r):gn(e.node(0),e.node(i),e.after(i+1),e.index(i)+1,n,r);if(s)return s}return null}static near(e,n=1){return this.findFrom(e,n)||this.findFrom(e,-n)||new ke(e.node(0))}static atStart(e){return gn(e,e,0,0,1)||new ke(e)}static atEnd(e){return gn(e,e,e.content.size,e.childCount,-1)||new ke(e)}static fromJSON(e,n){if(!n||!n.type)throw new RangeError(\"Invalid input for Selection.fromJSON\");let r=Fi[n.type];if(!r)throw new RangeError(`No selection type ${n.type} defined`);return r.fromJSON(e,n)}static jsonID(e,n){if(e in Fi)throw new RangeError(\"Duplicate use of selection JSON ID \"+e);return Fi[e]=n,n.prototype.jsonID=e,n}getBookmark(){return D.between(this.$anchor,this.$head).getBookmark()}};I.prototype.visible=!0;var yn=class{constructor(e,n){this.$from=e,this.$to=n}},Ja=!1;function Ga(t){!Ja&&!t.parent.inlineContent&&(Ja=!0,console.warn(\"TextSelection endpoint not pointing into a node with inline content (\"+t.parent.type.name+\")\"))}var D=class t extends I{constructor(e,n=e){Ga(e),Ga(n),super(e,n)}get $cursor(){return this.$anchor.pos==this.$head.pos?this.$head:null}map(e,n){let r=e.resolve(n.map(this.head));if(!r.parent.inlineContent)return I.near(r);let o=e.resolve(n.map(this.anchor));return new t(o.parent.inlineContent?o:r,r)}replace(e,n=E.empty){if(super.replace(e,n),n==E.empty){let r=this.$from.marksAcross(this.$to);r&&e.ensureMarks(r)}}eq(e){return e instanceof t&&e.anchor==this.anchor&&e.head==this.head}getBookmark(){return new $r(this.anchor,this.head)}toJSON(){return{type:\"text\",anchor:this.anchor,head:this.head}}static fromJSON(e,n){if(typeof n.anchor!=\"number\"||typeof n.head!=\"number\")throw new RangeError(\"Invalid input for TextSelection.fromJSON\");return new t(e.resolve(n.anchor),e.resolve(n.head))}static create(e,n,r=n){let o=e.resolve(n);return new this(o,r==n?o:e.resolve(r))}static between(e,n,r){let o=e.pos-n.pos;if((!r||o)&&(r=o>=0?1:-1),!n.parent.inlineContent){let i=I.findFrom(n,r,!0)||I.findFrom(n,-r,!0);if(i)n=i.$head;else return I.near(n,r)}return e.parent.inlineContent||(o==0?e=n:(e=(I.findFrom(e,-r,!0)||I.findFrom(e,r,!0)).$anchor,e.pos<n.pos!=o<0&&(e=n))),new t(e,n)}};I.jsonID(\"text\",D);var $r=class t{constructor(e,n){this.anchor=e,this.head=n}map(e){return new t(e.map(this.anchor),e.map(this.head))}resolve(e){return D.between(e.resolve(this.anchor),e.resolve(this.head))}},L=class t extends I{constructor(e){let n=e.nodeAfter,r=e.node(0).resolve(e.pos+n.nodeSize);super(e,r),this.node=n}map(e,n){let{deleted:r,pos:o}=n.mapResult(this.anchor),i=e.resolve(o);return r?I.near(i):new t(i)}content(){return new E(v.from(this.node),0,0)}eq(e){return e instanceof t&&e.anchor==this.anchor}toJSON(){return{type:\"node\",anchor:this.anchor}}getBookmark(){return new _i(this.anchor)}static fromJSON(e,n){if(typeof n.anchor!=\"number\")throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");return new t(e.resolve(n.anchor))}static create(e,n){return new t(e.resolve(n))}static isSelectable(e){return!e.isText&&e.type.spec.selectable!==!1}};L.prototype.visible=!1;I.jsonID(\"node\",L);var _i=class t{constructor(e){this.anchor=e}map(e){let{deleted:n,pos:r}=e.mapResult(this.anchor);return n?new $r(r,r):new t(r)}resolve(e){let n=e.resolve(this.anchor),r=n.nodeAfter;return r&&L.isSelectable(r)?new L(n):I.near(n)}},ke=class t extends I{constructor(e){super(e.resolve(0),e.resolve(e.content.size))}replace(e,n=E.empty){if(n==E.empty){e.delete(0,e.doc.content.size);let r=I.atStart(e.doc);r.eq(e.selection)||e.setSelection(r)}else super.replace(e,n)}toJSON(){return{type:\"all\"}}static fromJSON(e){return new t(e)}map(e){return new t(e)}eq(e){return e instanceof t}getBookmark(){return qp}};I.jsonID(\"all\",ke);var qp={map(){return this},resolve(t){return new ke(t)}};function gn(t,e,n,r,o,i=!1){if(e.inlineContent)return D.create(t,n);for(let s=r-(o>0?0:1);o>0?s<e.childCount:s>=0;s+=o){let l=e.child(s);if(l.isAtom){if(!i&&L.isSelectable(l))return L.create(t,n-(o<0?l.nodeSize:0))}else{let a=gn(t,l,n+o,o<0?l.childCount:0,o,i);if(a)return a}n+=l.nodeSize*o}return null}function Xa(t,e,n){let r=t.steps.length-1;if(r<e)return;let o=t.steps[r];if(!(o instanceof ye||o instanceof se))return;let i=t.mapping.maps[r],s;i.forEach((l,a,c,d)=>{s==null&&(s=d)}),t.setSelection(I.near(t.doc.resolve(s),n))}var Ya=1,Hr=2,Qa=4,Wi=class extends Tt{constructor(e){super(e.doc),this.curSelectionFor=0,this.updated=0,this.meta=Object.create(null),this.time=Date.now(),this.curSelection=e.selection,this.storedMarks=e.storedMarks}get selection(){return this.curSelectionFor<this.steps.length&&(this.curSelection=this.curSelection.map(this.doc,this.mapping.slice(this.curSelectionFor)),this.curSelectionFor=this.steps.length),this.curSelection}setSelection(e){if(e.$from.doc!=this.doc)throw new RangeError(\"Selection passed to setSelection must point at the current document\");return this.curSelection=e,this.curSelectionFor=this.steps.length,this.updated=(this.updated|Ya)&~Hr,this.storedMarks=null,this}get selectionSet(){return(this.updated&Ya)>0}setStoredMarks(e){return this.storedMarks=e,this.updated|=Hr,this}ensureMarks(e){return J.sameSet(this.storedMarks||this.selection.$from.marks(),e)||this.setStoredMarks(e),this}addStoredMark(e){return this.ensureMarks(e.addToSet(this.storedMarks||this.selection.$head.marks()))}removeStoredMark(e){return this.ensureMarks(e.removeFromSet(this.storedMarks||this.selection.$head.marks()))}get storedMarksSet(){return(this.updated&Hr)>0}addStep(e,n){super.addStep(e,n),this.updated=this.updated&~Hr,this.storedMarks=null}setTime(e){return this.time=e,this}replaceSelection(e){return this.selection.replace(this,e),this}replaceSelectionWith(e,n=!0){let r=this.selection;return n&&(e=e.mark(this.storedMarks||(r.empty?r.$from.marks():r.$from.marksAcross(r.$to)||J.none))),r.replaceWith(this,e),this}deleteSelection(){return this.selection.replace(this),this}insertText(e,n,r){let o=this.doc.type.schema;if(n==null)return e?this.replaceSelectionWith(o.text(e),!0):this.deleteSelection();{if(r==null&&(r=n),!e)return this.deleteRange(n,r);let i=this.storedMarks;if(!i){let s=this.doc.resolve(n);i=r==n?s.marks():s.marksAcross(this.doc.resolve(r))}return this.replaceRangeWith(n,r,o.text(e,i)),!this.selection.empty&&this.selection.to==n+e.length&&this.setSelection(I.near(this.selection.$to)),this}}setMeta(e,n){return this.meta[typeof e==\"string\"?e:e.key]=n,this}getMeta(e){return this.meta[typeof e==\"string\"?e:e.key]}get isGeneric(){for(let e in this.meta)return!1;return!0}scrollIntoView(){return this.updated|=Qa,this}get scrolledIntoView(){return(this.updated&Qa)>0}};function Za(t,e){return!e||!t?t:t.bind(e)}var jt=class{constructor(e,n,r){this.name=e,this.init=Za(n.init,r),this.apply=Za(n.apply,r)}},Jp=[new jt(\"doc\",{init(t){return t.doc||t.schema.topNodeType.createAndFill()},apply(t){return t.doc}}),new jt(\"selection\",{init(t,e){return t.selection||I.atStart(e.doc)},apply(t){return t.selection}}),new jt(\"storedMarks\",{init(t){return t.storedMarks||null},apply(t,e,n,r){return r.selection.$cursor?t.storedMarks:null}}),new jt(\"scrollToSelection\",{init(){return 0},apply(t,e){return t.scrolledIntoView?e+1:e}})],Jn=class{constructor(e,n){this.schema=e,this.plugins=[],this.pluginsByKey=Object.create(null),this.fields=Jp.slice(),n&&n.forEach(r=>{if(this.pluginsByKey[r.key])throw new RangeError(\"Adding different instances of a keyed plugin (\"+r.key+\")\");this.plugins.push(r),this.pluginsByKey[r.key]=r,r.spec.state&&this.fields.push(new jt(r.key,r.spec.state,r))})}},Fr=class t{constructor(e){this.config=e}get schema(){return this.config.schema}get plugins(){return this.config.plugins}apply(e){return this.applyTransaction(e).state}filterTransaction(e,n=-1){for(let r=0;r<this.config.plugins.length;r++)if(r!=n){let o=this.config.plugins[r];if(o.spec.filterTransaction&&!o.spec.filterTransaction.call(o,e,this))return!1}return!0}applyTransaction(e){if(!this.filterTransaction(e))return{state:this,transactions:[]};let n=[e],r=this.applyInner(e),o=null;for(;;){let i=!1;for(let s=0;s<this.config.plugins.length;s++){let l=this.config.plugins[s];if(l.spec.appendTransaction){let a=o?o[s].n:0,c=o?o[s].state:this,d=a<n.length&&l.spec.appendTransaction.call(l,a?n.slice(a):n,c,r);if(d&&r.filterTransaction(d,s)){if(d.setMeta(\"appendedTransaction\",e),!o){o=[];for(let u=0;u<this.config.plugins.length;u++)o.push(u<s?{state:r,n:n.length}:{state:this,n:0})}n.push(d),r=r.applyInner(d),i=!0}o&&(o[s]={state:r,n:n.length})}}if(!i)return{state:r,transactions:n}}}applyInner(e){if(!e.before.eq(this.doc))throw new RangeError(\"Applying a mismatched transaction\");let n=new t(this.config),r=this.config.fields;for(let o=0;o<r.length;o++){let i=r[o];n[i.name]=i.apply(e,this[i.name],this,n)}return n}get tr(){return new Wi(this)}static create(e){let n=new Jn(e.doc?e.doc.type.schema:e.schema,e.plugins),r=new t(n);for(let o=0;o<n.fields.length;o++)r[n.fields[o].name]=n.fields[o].init(e,r);return r}reconfigure(e){let n=new Jn(this.schema,e.plugins),r=n.fields,o=new t(n);for(let i=0;i<r.length;i++){let s=r[i].name;o[s]=this.hasOwnProperty(s)?this[s]:r[i].init(e,o)}return o}toJSON(e){let n={doc:this.doc.toJSON(),selection:this.selection.toJSON()};if(this.storedMarks&&(n.storedMarks=this.storedMarks.map(r=>r.toJSON())),e&&typeof e==\"object\")for(let r in e){if(r==\"doc\"||r==\"selection\")throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");let o=e[r],i=o.spec.state;i&&i.toJSON&&(n[r]=i.toJSON.call(o,this[o.key]))}return n}static fromJSON(e,n,r){if(!n)throw new RangeError(\"Invalid input for EditorState.fromJSON\");if(!e.schema)throw new RangeError(\"Required config field 'schema' missing\");let o=new Jn(e.schema,e.plugins),i=new t(o);return o.fields.forEach(s=>{if(s.name==\"doc\")i.doc=ie.fromJSON(e.schema,n.doc);else if(s.name==\"selection\")i.selection=I.fromJSON(i.doc,n.selection);else if(s.name==\"storedMarks\")n.storedMarks&&(i.storedMarks=n.storedMarks.map(e.schema.markFromJSON));else{if(r)for(let l in r){let a=r[l],c=a.spec.state;if(a.key==s.name&&c&&c.fromJSON&&Object.prototype.hasOwnProperty.call(n,l)){i[s.name]=c.fromJSON.call(a,e,n[l],i);return}}i[s.name]=s.init(e,i)}}),i}};function ec(t,e,n){for(let r in t){let o=t[r];o instanceof Function?o=o.bind(e):r==\"handleDOMEvents\"&&(o=ec(o,e,{})),n[r]=o}return n}var P=class{constructor(e){this.spec=e,this.props={},e.props&&ec(e.props,this,this.props),this.key=e.key?e.key.key:tc(\"plugin\")}getState(e){return e[this.key]}},Vi=Object.create(null);function tc(t){return t in Vi?t+\"$\"+ ++Vi[t]:(Vi[t]=0,t+\"$\")}var H=class{constructor(e=\"key\"){this.key=tc(e)}get(e){return e.config.pluginsByKey[this.key]}getState(e){return e[this.key]}};var Vr=(t,e)=>t.selection.empty?!1:(e&&e(t.tr.deleteSelection().scrollIntoView()),!0);function rc(t,e){let{$cursor:n}=t.selection;return!n||(e?!e.endOfTextblock(\"backward\",t):n.parentOffset>0)?null:n}var Ui=(t,e,n)=>{let r=rc(t,n);if(!r)return!1;let o=qi(r);if(!o){let s=r.blockRange(),l=s&&ft(s);return l==null?!1:(e&&e(t.tr.lift(s,l).scrollIntoView()),!0)}let i=o.nodeBefore;if(fc(t,o,e,-1))return!0;if(r.parent.content.size==0&&(bn(i,\"end\")||L.isSelectable(i)))for(let s=r.depth;;s--){let l=qn(t.doc,r.before(s),r.after(s),E.empty);if(l&&l.slice.size<l.to-l.from){if(e){let a=t.tr.step(l);a.setSelection(bn(i,\"end\")?I.findFrom(a.doc.resolve(a.mapping.map(o.pos,-1)),-1):L.create(a.doc,o.pos-i.nodeSize)),e(a.scrollIntoView())}return!0}if(s==1||r.node(s-1).childCount>1)break}return i.isAtom&&o.depth==r.depth-1?(e&&e(t.tr.delete(o.pos-i.nodeSize,o.pos).scrollIntoView()),!0):!1},oc=(t,e,n)=>{let r=rc(t,n);if(!r)return!1;let o=qi(r);return o?sc(t,o,e):!1},ic=(t,e,n)=>{let r=lc(t,n);if(!r)return!1;let o=Xi(r);return o?sc(t,o,e):!1};function sc(t,e,n){let r=e.nodeBefore,o=r,i=e.pos-1;for(;!o.isTextblock;i--){if(o.type.spec.isolating)return!1;let d=o.lastChild;if(!d)return!1;o=d}let s=e.nodeAfter,l=s,a=e.pos+1;for(;!l.isTextblock;a++){if(l.type.spec.isolating)return!1;let d=l.firstChild;if(!d)return!1;l=d}let c=qn(t.doc,i,a,E.empty);if(!c||c.from!=i||c instanceof ye&&c.slice.size>=a-i)return!1;if(n){let d=t.tr.step(c);d.setSelection(D.create(d.doc,i)),n(d.scrollIntoView())}return!0}function bn(t,e,n=!1){for(let r=t;r;r=e==\"start\"?r.firstChild:r.lastChild){if(r.isTextblock)return!0;if(n&&r.childCount!=1)return!1}return!1}var Ki=(t,e,n)=>{let{$head:r,empty:o}=t.selection,i=r;if(!o)return!1;if(r.parent.isTextblock){if(n?!n.endOfTextblock(\"backward\",t):r.parentOffset>0)return!1;i=qi(r)}let s=i&&i.nodeBefore;return!s||!L.isSelectable(s)?!1:(e&&e(t.tr.setSelection(L.create(t.doc,i.pos-s.nodeSize)).scrollIntoView()),!0)};function qi(t){if(!t.parent.type.spec.isolating)for(let e=t.depth-1;e>=0;e--){if(t.index(e)>0)return t.doc.resolve(t.before(e+1));if(t.node(e).type.spec.isolating)break}return null}function lc(t,e){let{$cursor:n}=t.selection;return!n||(e?!e.endOfTextblock(\"forward\",t):n.parentOffset<n.parent.content.size)?null:n}var Ji=(t,e,n)=>{let r=lc(t,n);if(!r)return!1;let o=Xi(r);if(!o)return!1;let i=o.nodeAfter;if(fc(t,o,e,1))return!0;if(r.parent.content.size==0&&(bn(i,\"start\")||L.isSelectable(i))){let s=qn(t.doc,r.before(),r.after(),E.empty);if(s&&s.slice.size<s.to-s.from){if(e){let l=t.tr.step(s);l.setSelection(bn(i,\"start\")?I.findFrom(l.doc.resolve(l.mapping.map(o.pos)),1):L.create(l.doc,l.mapping.map(o.pos))),e(l.scrollIntoView())}return!0}}return i.isAtom&&o.depth==r.depth-1?(e&&e(t.tr.delete(o.pos,o.pos+i.nodeSize).scrollIntoView()),!0):!1},Gi=(t,e,n)=>{let{$head:r,empty:o}=t.selection,i=r;if(!o)return!1;if(r.parent.isTextblock){if(n?!n.endOfTextblock(\"forward\",t):r.parentOffset<r.parent.content.size)return!1;i=Xi(r)}let s=i&&i.nodeAfter;return!s||!L.isSelectable(s)?!1:(e&&e(t.tr.setSelection(L.create(t.doc,i.pos)).scrollIntoView()),!0)};function Xi(t){if(!t.parent.type.spec.isolating)for(let e=t.depth-1;e>=0;e--){let n=t.node(e);if(t.index(e)+1<n.childCount)return t.doc.resolve(t.after(e+1));if(n.type.spec.isolating)break}return null}var ac=(t,e)=>{let n=t.selection,r=n instanceof L,o;if(r){if(n.node.isTextblock||!Re(t.doc,n.from))return!1;o=n.from}else if(o=Wt(t.doc,n.from,-1),o==null)return!1;if(e){let i=t.tr.join(o);r&&i.setSelection(L.create(i.doc,o-t.doc.resolve(o).nodeBefore.nodeSize)),e(i.scrollIntoView())}return!0},cc=(t,e)=>{let n=t.selection,r;if(n instanceof L){if(n.node.isTextblock||!Re(t.doc,n.to))return!1;r=n.to}else if(r=Wt(t.doc,n.to,1),r==null)return!1;return e&&e(t.tr.join(r).scrollIntoView()),!0},dc=(t,e)=>{let{$from:n,$to:r}=t.selection,o=n.blockRange(r),i=o&&ft(o);return i==null?!1:(e&&e(t.tr.lift(o,i).scrollIntoView()),!0)},Yi=(t,e)=>{let{$head:n,$anchor:r}=t.selection;return!n.parent.type.spec.code||!n.sameParent(r)?!1:(e&&e(t.tr.insertText(`\n`).scrollIntoView()),!0)};function Qi(t){for(let e=0;e<t.edgeCount;e++){let{type:n}=t.edge(e);if(n.isTextblock&&!n.hasRequiredAttrs())return n}return null}var Zi=(t,e)=>{let{$head:n,$anchor:r}=t.selection;if(!n.parent.type.spec.code||!n.sameParent(r))return!1;let o=n.node(-1),i=n.indexAfter(-1),s=Qi(o.contentMatchAt(i));if(!s||!o.canReplaceWith(i,i,s))return!1;if(e){let l=n.after(),a=t.tr.replaceWith(l,l,s.createAndFill());a.setSelection(I.near(a.doc.resolve(l),1)),e(a.scrollIntoView())}return!0},es=(t,e)=>{let n=t.selection,{$from:r,$to:o}=n;if(n instanceof ke||r.parent.inlineContent||o.parent.inlineContent)return!1;let i=Qi(o.parent.contentMatchAt(o.indexAfter()));if(!i||!i.isTextblock)return!1;if(e){let s=(!r.parentOffset&&o.index()<o.parent.childCount?r:o).pos,l=t.tr.insert(s,i.createAndFill());l.setSelection(D.create(l.doc,s+1)),e(l.scrollIntoView())}return!0},ts=(t,e)=>{let{$cursor:n}=t.selection;if(!n||n.parent.content.size)return!1;if(n.depth>1&&n.after()!=n.end(-1)){let i=n.before();if(Ee(t.doc,i))return e&&e(t.tr.split(i).scrollIntoView()),!0}let r=n.blockRange(),o=r&&ft(r);return o==null?!1:(e&&e(t.tr.lift(r,o).scrollIntoView()),!0)};function Gp(t){return(e,n)=>{let{$from:r,$to:o}=e.selection;if(e.selection instanceof L&&e.selection.node.isBlock)return!r.parentOffset||!Ee(e.doc,r.pos)?!1:(n&&n(e.tr.split(r.pos).scrollIntoView()),!0);if(!r.depth)return!1;let i=[],s,l,a=!1,c=!1;for(let h=r.depth;;h--)if(r.node(h).isBlock){a=r.end(h)==r.pos+(r.depth-h),c=r.start(h)==r.pos-(r.depth-h),l=Qi(r.node(h-1).contentMatchAt(r.indexAfter(h-1)));let m=t&&t(o.parent,a,r);i.unshift(m||(a&&l?{type:l}:null)),s=h;break}else{if(h==1)return!1;i.unshift(null)}let d=e.tr;(e.selection instanceof D||e.selection instanceof ke)&&d.deleteSelection();let u=d.mapping.map(r.pos),f=Ee(d.doc,u,i.length,i);if(f||(i[0]=l?{type:l}:null,f=Ee(d.doc,u,i.length,i)),!f)return!1;if(d.split(u,i.length,i),!a&&c&&r.node(s).type!=l){let h=d.mapping.map(r.before(s)),p=d.doc.resolve(h);l&&r.node(s-1).canReplaceWith(p.index(),p.index()+1,l)&&d.setNodeMarkup(d.mapping.map(r.before(s)),l)}return n&&n(d.scrollIntoView()),!0}}var Xp=Gp();var uc=(t,e)=>{let{$from:n,to:r}=t.selection,o,i=n.sharedDepth(r);return i==0?!1:(o=n.before(i),e&&e(t.tr.setSelection(L.create(t.doc,o))),!0)},Yp=(t,e)=>(e&&e(t.tr.setSelection(new ke(t.doc))),!0);function Qp(t,e,n){let r=e.nodeBefore,o=e.nodeAfter,i=e.index();return!r||!o||!r.type.compatibleContent(o.type)?!1:!r.content.size&&e.parent.canReplace(i-1,i)?(n&&n(t.tr.delete(e.pos-r.nodeSize,e.pos).scrollIntoView()),!0):!e.parent.canReplace(i,i+1)||!(o.isTextblock||Re(t.doc,e.pos))?!1:(n&&n(t.tr.join(e.pos).scrollIntoView()),!0)}function fc(t,e,n,r){let o=e.nodeBefore,i=e.nodeAfter,s,l,a=o.type.spec.isolating||i.type.spec.isolating;if(!a&&Qp(t,e,n))return!0;let c=!a&&e.parent.canReplace(e.index(),e.index()+1);if(c&&(s=(l=o.contentMatchAt(o.childCount)).findWrapping(i.type))&&l.matchType(s[0]||i.type).validEnd){if(n){let h=e.pos+i.nodeSize,p=v.empty;for(let y=s.length-1;y>=0;y--)p=v.from(s[y].create(null,p));p=v.from(o.copy(p));let m=t.tr.step(new se(e.pos-1,h,e.pos,h,new E(p,1,0),s.length,!0)),g=m.doc.resolve(h+2*s.length);g.nodeAfter&&g.nodeAfter.type==o.type&&Re(m.doc,g.pos)&&m.join(g.pos),n(m.scrollIntoView())}return!0}let d=i.type.spec.isolating||r>0&&a?null:I.findFrom(e,1),u=d&&d.$from.blockRange(d.$to),f=u&&ft(u);if(f!=null&&f>=e.depth)return n&&n(t.tr.lift(u,f).scrollIntoView()),!0;if(c&&bn(i,\"start\",!0)&&bn(o,\"end\")){let h=o,p=[];for(;p.push(h),!h.isTextblock;)h=h.lastChild;let m=i,g=1;for(;!m.isTextblock;m=m.firstChild)g++;if(h.canReplace(h.childCount,h.childCount,m.content)){if(n){let y=v.empty;for(let b=p.length-1;b>=0;b--)y=v.from(p[b].copy(y));let w=t.tr.step(new se(e.pos-p.length,e.pos+i.nodeSize,e.pos+g,e.pos+i.nodeSize-g,new E(y,p.length,0),0,!0));n(w.scrollIntoView())}return!0}}return!1}function hc(t){return function(e,n){let r=e.selection,o=t<0?r.$from:r.$to,i=o.depth;for(;o.node(i).isInline;){if(!i)return!1;i--}return o.node(i).isTextblock?(n&&n(e.tr.setSelection(D.create(e.doc,t<0?o.start(i):o.end(i)))),!0):!1}}var ns=hc(-1),rs=hc(1);function pc(t,e=null){return function(n,r){let{$from:o,$to:i}=n.selection,s=o.blockRange(i),l=s&&mn(s,t,e);return l?(r&&r(n.tr.wrap(s,l).scrollIntoView()),!0):!1}}function is(t,e=null){return function(n,r){let o=!1;for(let i=0;i<n.selection.ranges.length&&!o;i++){let{$from:{pos:s},$to:{pos:l}}=n.selection.ranges[i];n.doc.nodesBetween(s,l,(a,c)=>{if(o)return!1;if(!(!a.isTextblock||a.hasMarkup(t,e)))if(a.type==t)o=!0;else{let d=n.doc.resolve(c),u=d.index();o=d.parent.canReplaceWith(u,u+1,t)}})}if(!o)return!1;if(r){let i=n.tr;for(let s=0;s<n.selection.ranges.length;s++){let{$from:{pos:l},$to:{pos:a}}=n.selection.ranges[s];i.setBlockType(l,a,t,e)}r(i.scrollIntoView())}return!0}}function ss(...t){return function(e,n,r){for(let o=0;o<t.length;o++)if(t[o](e,n,r))return!0;return!1}}var ji=ss(Vr,Ui,Ki),nc=ss(Vr,Ji,Gi),At={Enter:ss(Yi,es,ts,Xp),\"Mod-Enter\":Zi,Backspace:ji,\"Mod-Backspace\":ji,\"Shift-Backspace\":ji,Delete:nc,\"Mod-Delete\":nc,\"Mod-a\":Yp},Zp={\"Ctrl-h\":At.Backspace,\"Alt-Backspace\":At[\"Mod-Backspace\"],\"Ctrl-d\":At.Delete,\"Ctrl-Alt-Backspace\":At[\"Mod-Delete\"],\"Alt-Delete\":At[\"Mod-Delete\"],\"Alt-d\":At[\"Mod-Delete\"],\"Ctrl-a\":ns,\"Ctrl-e\":rs};for(let t in At)Zp[t]=At[t];var ck=typeof navigator<\"u\"?/Mac|iP(hone|[oa]d)/.test(navigator.platform):typeof os<\"u\"&&os.platform?os.platform()==\"darwin\":!1;function mc(t,e=null){return function(n,r){let{$from:o,$to:i}=n.selection,s=o.blockRange(i);if(!s)return!1;let l=r?n.tr:null;return em(l,s,t,e)?(r&&r(l.scrollIntoView()),!0):!1}}function em(t,e,n,r=null){let o=!1,i=e,s=e.$from.doc;if(e.depth>=2&&e.$from.node(e.depth-1).type.compatibleContent(n)&&e.startIndex==0){if(e.$from.index(e.depth-1)==0)return!1;let a=s.resolve(e.start-2);i=new Vt(a,a,e.depth),e.endIndex<e.parent.childCount&&(e=new Vt(e.$from,s.resolve(e.$to.end(e.depth)),e.depth)),o=!0}let l=mn(i,n,r,e);return l?(t&&tm(t,e,l,o,n),!0):!1}function tm(t,e,n,r,o){let i=v.empty;for(let d=n.length-1;d>=0;d--)i=v.from(n[d].type.create(n[d].attrs,i));t.step(new se(e.start-(r?2:0),e.end,e.start,e.end,new E(i,0,0),n.length,!0));let s=0;for(let d=0;d<n.length;d++)n[d].type==o&&(s=d+1);let l=n.length-s,a=e.start+n.length-(r?2:0),c=e.parent;for(let d=e.startIndex,u=e.endIndex,f=!0;d<u;d++,f=!1)!f&&Ee(t.doc,a,l)&&(t.split(a,l),a+=2*l),a+=c.child(d).nodeSize;return t}function gc(t){return function(e,n){let{$from:r,$to:o}=e.selection,i=r.blockRange(o,s=>s.childCount>0&&s.firstChild.type==t);return i?n?r.node(i.depth-1).type==t?nm(e,n,t,i):rm(e,n,i):!0:!1}}function nm(t,e,n,r){let o=t.tr,i=r.end,s=r.$to.end(r.depth);i<s&&(o.step(new se(i-1,s,i,s,new E(v.from(n.create(null,r.parent.copy())),1,0),1,!0)),r=new Vt(o.doc.resolve(r.$from.pos),o.doc.resolve(s),r.depth));let l=ft(r);if(l==null)return!1;o.lift(r,l);let a=o.doc.resolve(o.mapping.map(i,-1)-1);return Re(o.doc,a.pos)&&a.nodeBefore.type==a.nodeAfter.type&&o.join(a.pos),e(o.scrollIntoView()),!0}function rm(t,e,n){let r=t.tr,o=n.parent;for(let h=n.end,p=n.endIndex-1,m=n.startIndex;p>m;p--)h-=o.child(p).nodeSize,r.delete(h-1,h+1);let i=r.doc.resolve(n.start),s=i.nodeAfter;if(r.mapping.map(n.end)!=n.start+i.nodeAfter.nodeSize)return!1;let l=n.startIndex==0,a=n.endIndex==o.childCount,c=i.node(-1),d=i.index(-1);if(!c.canReplace(d+(l?0:1),d+1,s.content.append(a?v.empty:v.from(o))))return!1;let u=i.pos,f=u+s.nodeSize;return r.step(new se(u-(l?1:0),f+(a?1:0),u+1,f-1,new E((l?v.empty:v.from(o.copy(v.empty))).append(a?v.empty:v.from(o.copy(v.empty))),l?0:1,a?0:1),l?0:1)),e(r.scrollIntoView()),!0}function yc(t){return function(e,n){let{$from:r,$to:o}=e.selection,i=r.blockRange(o,c=>c.childCount>0&&c.firstChild.type==t);if(!i)return!1;let s=i.startIndex;if(s==0)return!1;let l=i.parent,a=l.child(s-1);if(a.type!=t)return!1;if(n){let c=a.lastChild&&a.lastChild.type==l.type,d=v.from(c?t.create():null),u=new E(v.from(t.create(null,v.from(l.type.create(null,d)))),c?3:1,0),f=i.start,h=i.end;n(e.tr.step(new se(f-(c?3:1),h,f,h,u,1,!0)).scrollIntoView())}return!0}}var fe=function(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e},Cn=function(t){let e=t.assignedSlot||t.parentNode;return e&&e.nodeType==11?e.host:e},fs=null,pt=function(t,e,n){let r=fs||(fs=document.createRange());return r.setEnd(t,n??t.nodeValue.length),r.setStart(t,e||0),r},om=function(){fs=null},Yt=function(t,e,n,r){return n&&(bc(t,e,n,r,-1)||bc(t,e,n,r,1))},im=/^(img|br|input|textarea|hr)$/i;function bc(t,e,n,r,o){for(var i;;){if(t==n&&e==r)return!0;if(e==(o<0?0:Ie(t))){let s=t.parentNode;if(!s||s.nodeType!=1||nr(t)||im.test(t.nodeName)||t.contentEditable==\"false\")return!1;e=fe(t)+(o<0?0:1),t=s}else if(t.nodeType==1){let s=t.childNodes[e+(o<0?-1:0)];if(s.nodeType==1&&s.contentEditable==\"false\")if(!((i=s.pmViewDesc)===null||i===void 0)&&i.ignoreForSelection)e+=o;else return!1;else t=s,e=o<0?Ie(t):0}else return!1}}function Ie(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function sm(t,e){for(;;){if(t.nodeType==3&&e)return t;if(t.nodeType==1&&e>0){if(t.contentEditable==\"false\")return null;t=t.childNodes[e-1],e=Ie(t)}else if(t.parentNode&&!nr(t))e=fe(t),t=t.parentNode;else return null}}function lm(t,e){for(;;){if(t.nodeType==3&&e<t.nodeValue.length)return t;if(t.nodeType==1&&e<t.childNodes.length){if(t.contentEditable==\"false\")return null;t=t.childNodes[e],e=0}else if(t.parentNode&&!nr(t))e=fe(t)+1,t=t.parentNode;else return null}}function am(t,e,n){for(let r=e==0,o=e==Ie(t);r||o;){if(t==n)return!0;let i=fe(t);if(t=t.parentNode,!t)return!1;r=r&&i==0,o=o&&i==Ie(t)}}function nr(t){let e;for(let n=t;n&&!(e=n.pmViewDesc);n=n.parentNode);return e&&e.node&&e.node.isBlock&&(e.dom==t||e.contentDOM==t)}var Qr=function(t){return t.focusNode&&Yt(t.focusNode,t.focusOffset,t.anchorNode,t.anchorOffset)};function Ut(t,e){let n=document.createEvent(\"Event\");return n.initEvent(\"keydown\",!0,!0),n.keyCode=t,n.key=n.code=e,n}function cm(t){let e=t.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function dm(t,e,n){if(t.caretPositionFromPoint)try{let r=t.caretPositionFromPoint(e,n);if(r)return{node:r.offsetNode,offset:Math.min(Ie(r.offsetNode),r.offset)}}catch{}if(t.caretRangeFromPoint){let r=t.caretRangeFromPoint(e,n);if(r)return{node:r.startContainer,offset:Math.min(Ie(r.startContainer),r.startOffset)}}}var Ye=typeof navigator<\"u\"?navigator:null,wc=typeof document<\"u\"?document:null,It=Ye&&Ye.userAgent||\"\",hs=/Edge\\/(\\d+)/.exec(It),Yc=/MSIE \\d/.exec(It),ps=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(It),ve=!!(Yc||ps||hs),Rt=Yc?document.documentMode:ps?+ps[1]:hs?+hs[1]:0,Pe=!ve&&/gecko\\/(\\d+)/i.test(It);Pe&&+(/Firefox\\/(\\d+)/.exec(It)||[0,0])[1];var ms=!ve&&/Chrome\\/(\\d+)/.exec(It),de=!!ms,Qc=ms?+ms[1]:0,we=!ve&&!!Ye&&/Apple Computer/.test(Ye.vendor),vn=we&&(/Mobile\\/\\w+/.test(It)||!!Ye&&Ye.maxTouchPoints>2),De=vn||(Ye?/Mac/.test(Ye.platform):!1),Zc=Ye?/Win/.test(Ye.platform):!1,mt=/Android \\d/.test(It),rr=!!wc&&\"webkitFontSmoothing\"in wc.documentElement.style,um=rr?+(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent)||[0,0])[1]:0;function fm(t){let e=t.defaultView&&t.defaultView.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.documentElement.clientWidth,top:0,bottom:t.documentElement.clientHeight}}function ht(t,e){return typeof t==\"number\"?t:t[e]}function hm(t){let e=t.getBoundingClientRect(),n=e.width/t.offsetWidth||1,r=e.height/t.offsetHeight||1;return{left:e.left,right:e.left+t.clientWidth*n,top:e.top,bottom:e.top+t.clientHeight*r}}function xc(t,e,n){let r=t.someProp(\"scrollThreshold\")||0,o=t.someProp(\"scrollMargin\")||5,i=t.dom.ownerDocument;for(let s=n||t.dom;s;){if(s.nodeType!=1){s=Cn(s);continue}let l=s,a=l==i.body,c=a?fm(i):hm(l),d=0,u=0;if(e.top<c.top+ht(r,\"top\")?u=-(c.top-e.top+ht(o,\"top\")):e.bottom>c.bottom-ht(r,\"bottom\")&&(u=e.bottom-e.top>c.bottom-c.top?e.top+ht(o,\"top\")-c.top:e.bottom-c.bottom+ht(o,\"bottom\")),e.left<c.left+ht(r,\"left\")?d=-(c.left-e.left+ht(o,\"left\")):e.right>c.right-ht(r,\"right\")&&(d=e.right-c.right+ht(o,\"right\")),d||u)if(a)i.defaultView.scrollBy(d,u);else{let h=l.scrollLeft,p=l.scrollTop;u&&(l.scrollTop+=u),d&&(l.scrollLeft+=d);let m=l.scrollLeft-h,g=l.scrollTop-p;e={left:e.left-m,top:e.top-g,right:e.right-m,bottom:e.bottom-g}}let f=a?\"fixed\":getComputedStyle(s).position;if(/^(fixed|sticky)$/.test(f))break;s=f==\"absolute\"?s.offsetParent:Cn(s)}}function pm(t){let e=t.dom.getBoundingClientRect(),n=Math.max(0,e.top),r,o;for(let i=(e.left+e.right)/2,s=n+1;s<Math.min(innerHeight,e.bottom);s+=5){let l=t.root.elementFromPoint(i,s);if(!l||l==t.dom||!t.dom.contains(l))continue;let a=l.getBoundingClientRect();if(a.top>=n-20){r=l,o=a.top;break}}return{refDOM:r,refTop:o,stack:ed(t.dom)}}function ed(t){let e=[],n=t.ownerDocument;for(let r=t;r&&(e.push({dom:r,top:r.scrollTop,left:r.scrollLeft}),t!=n);r=Cn(r));return e}function mm({refDOM:t,refTop:e,stack:n}){let r=t?t.getBoundingClientRect().top:0;td(n,r==0?0:r-e)}function td(t,e){for(let n=0;n<t.length;n++){let{dom:r,top:o,left:i}=t[n];r.scrollTop!=o+e&&(r.scrollTop=o+e),r.scrollLeft!=i&&(r.scrollLeft=i)}}var wn=null;function gm(t){if(t.setActive)return t.setActive();if(wn)return t.focus(wn);let e=ed(t);t.focus(wn==null?{get preventScroll(){return wn={preventScroll:!0},!0}}:void 0),wn||(wn=!1,td(e,0))}function nd(t,e){let n,r=2e8,o,i=0,s=e.top,l=e.top,a,c;for(let d=t.firstChild,u=0;d;d=d.nextSibling,u++){let f;if(d.nodeType==1)f=d.getClientRects();else if(d.nodeType==3)f=pt(d).getClientRects();else continue;for(let h=0;h<f.length;h++){let p=f[h];if(p.top<=s&&p.bottom>=l){s=Math.max(p.bottom,s),l=Math.min(p.top,l);let m=p.left>e.left?p.left-e.left:p.right<e.left?e.left-p.right:0;if(m<r){n=d,r=m,o=m&&n.nodeType==3?{left:p.right<e.left?p.right:p.left,top:e.top}:e,d.nodeType==1&&m&&(i=u+(e.left>=(p.left+p.right)/2?1:0));continue}}else p.top>e.top&&!a&&p.left<=e.left&&p.right>=e.left&&(a=d,c={left:Math.max(p.left,Math.min(p.right,e.left)),top:p.top});!n&&(e.left>=p.right&&e.top>=p.top||e.left>=p.left&&e.top>=p.bottom)&&(i=u+1)}}return!n&&a&&(n=a,o=c,r=0),n&&n.nodeType==3?ym(n,o):!n||r&&n.nodeType==1?{node:t,offset:i}:nd(n,o)}function ym(t,e){let n=t.nodeValue.length,r=document.createRange(),o;for(let i=0;i<n;i++){r.setEnd(t,i+1),r.setStart(t,i);let s=Et(r,1);if(s.top!=s.bottom&&Os(e,s)){o={node:t,offset:i+(e.left>=(s.left+s.right)/2?1:0)};break}}return r.detach(),o||{node:t,offset:0}}function Os(t,e){return t.left>=e.left-1&&t.left<=e.right+1&&t.top>=e.top-1&&t.top<=e.bottom+1}function bm(t,e){let n=t.parentNode;return n&&/^li$/i.test(n.nodeName)&&e.left<t.getBoundingClientRect().left?n:t}function wm(t,e,n){let{node:r,offset:o}=nd(e,n),i=-1;if(r.nodeType==1&&!r.firstChild){let s=r.getBoundingClientRect();i=s.left!=s.right&&n.left>(s.left+s.right)/2?1:-1}return t.docView.posFromDOM(r,o,i)}function xm(t,e,n,r){let o=-1;for(let i=e,s=!1;i!=t.dom;){let l=t.docView.nearestDesc(i,!0),a;if(!l)return null;if(l.dom.nodeType==1&&(l.node.isBlock&&l.parent||!l.contentDOM)&&((a=l.dom.getBoundingClientRect()).width||a.height)&&(l.node.isBlock&&l.parent&&!/^T(R|BODY|HEAD|FOOT)$/.test(l.dom.nodeName)&&(!s&&a.left>r.left||a.top>r.top?o=l.posBefore:(!s&&a.right<r.left||a.bottom<r.top)&&(o=l.posAfter),s=!0),!l.contentDOM&&o<0&&!l.node.isText))return(l.node.isBlock?r.top<(a.top+a.bottom)/2:r.left<(a.left+a.right)/2)?l.posBefore:l.posAfter;i=l.dom.parentNode}return o>-1?o:t.docView.posFromDOM(e,n,-1)}function rd(t,e,n){let r=t.childNodes.length;if(r&&n.top<n.bottom)for(let o=Math.max(0,Math.min(r-1,Math.floor(r*(e.top-n.top)/(n.bottom-n.top))-2)),i=o;;){let s=t.childNodes[i];if(s.nodeType==1){let l=s.getClientRects();for(let a=0;a<l.length;a++){let c=l[a];if(Os(e,c))return rd(s,e,c)}}if((i=(i+1)%r)==o)break}return t}function km(t,e){let n=t.dom.ownerDocument,r,o=0,i=dm(n,e.left,e.top);i&&({node:r,offset:o}=i);let s=(t.root.elementFromPoint?t.root:n).elementFromPoint(e.left,e.top),l;if(!s||!t.dom.contains(s.nodeType!=1?s.parentNode:s)){let c=t.dom.getBoundingClientRect();if(!Os(e,c)||(s=rd(t.dom,e,c),!s))return null}if(we)for(let c=s;r&&c;c=Cn(c))c.draggable&&(r=void 0);if(s=bm(s,e),r){if(Pe&&r.nodeType==1&&(o=Math.min(o,r.childNodes.length),o<r.childNodes.length)){let d=r.childNodes[o],u;d.nodeName==\"IMG\"&&(u=d.getBoundingClientRect()).right<=e.left&&u.bottom>e.top&&o++}let c;rr&&o&&r.nodeType==1&&(c=r.childNodes[o-1]).nodeType==1&&c.contentEditable==\"false\"&&c.getBoundingClientRect().top>=e.top&&o--,r==t.dom&&o==r.childNodes.length-1&&r.lastChild.nodeType==1&&e.top>r.lastChild.getBoundingClientRect().bottom?l=t.state.doc.content.size:(o==0||r.nodeType!=1||r.childNodes[o-1].nodeName!=\"BR\")&&(l=xm(t,r,o,e))}l==null&&(l=wm(t,s,e));let a=t.docView.nearestDesc(s,!0);return{pos:l,inside:a?a.posAtStart-a.border:-1}}function kc(t){return t.top<t.bottom||t.left<t.right}function Et(t,e){let n=t.getClientRects();if(n.length){let r=n[e<0?0:n.length-1];if(kc(r))return r}return Array.prototype.find.call(n,kc)||t.getBoundingClientRect()}var Sm=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;function od(t,e,n){let{node:r,offset:o,atom:i}=t.docView.domFromPos(e,n<0?-1:1),s=rr||Pe;if(r.nodeType==3)if(s&&(Sm.test(r.nodeValue)||(n<0?!o:o==r.nodeValue.length))){let a=Et(pt(r,o,o),n);if(Pe&&o&&/\\s/.test(r.nodeValue[o-1])&&o<r.nodeValue.length){let c=Et(pt(r,o-1,o-1),-1);if(c.top==a.top){let d=Et(pt(r,o,o+1),-1);if(d.top!=a.top)return Gn(d,d.left<c.left)}}return a}else{let a=o,c=o,d=n<0?1:-1;return n<0&&!o?(c++,d=-1):n>=0&&o==r.nodeValue.length?(a--,d=1):n<0?a--:c++,Gn(Et(pt(r,a,c),d),d<0)}if(!t.state.doc.resolve(e-(i||0)).parent.inlineContent){if(i==null&&o&&(n<0||o==Ie(r))){let a=r.childNodes[o-1];if(a.nodeType==1)return ls(a.getBoundingClientRect(),!1)}if(i==null&&o<Ie(r)){let a=r.childNodes[o];if(a.nodeType==1)return ls(a.getBoundingClientRect(),!0)}return ls(r.getBoundingClientRect(),n>=0)}if(i==null&&o&&(n<0||o==Ie(r))){let a=r.childNodes[o-1],c=a.nodeType==3?pt(a,Ie(a)-(s?0:1)):a.nodeType==1&&(a.nodeName!=\"BR\"||!a.nextSibling)?a:null;if(c)return Gn(Et(c,1),!1)}if(i==null&&o<Ie(r)){let a=r.childNodes[o];for(;a.pmViewDesc&&a.pmViewDesc.ignoreForCoords;)a=a.nextSibling;let c=a?a.nodeType==3?pt(a,0,s?0:1):a.nodeType==1?a:null:null;if(c)return Gn(Et(c,-1),!0)}return Gn(Et(r.nodeType==3?pt(r):r,-n),n>=0)}function Gn(t,e){if(t.width==0)return t;let n=e?t.left:t.right;return{top:t.top,bottom:t.bottom,left:n,right:n}}function ls(t,e){if(t.height==0)return t;let n=e?t.top:t.bottom;return{top:n,bottom:n,left:t.left,right:t.right}}function id(t,e,n){let r=t.state,o=t.root.activeElement;r!=e&&t.updateState(e),o!=t.dom&&t.focus();try{return n()}finally{r!=e&&t.updateState(r),o!=t.dom&&o&&o.focus()}}function Cm(t,e,n){let r=e.selection,o=n==\"up\"?r.$from:r.$to;return id(t,e,()=>{let{node:i}=t.docView.domFromPos(o.pos,n==\"up\"?-1:1);for(;;){let l=t.docView.nearestDesc(i,!0);if(!l)break;if(l.node.isBlock){i=l.contentDOM||l.dom;break}i=l.dom.parentNode}let s=od(t,o.pos,1);for(let l=i.firstChild;l;l=l.nextSibling){let a;if(l.nodeType==1)a=l.getClientRects();else if(l.nodeType==3)a=pt(l,0,l.nodeValue.length).getClientRects();else continue;for(let c=0;c<a.length;c++){let d=a[c];if(d.bottom>d.top+1&&(n==\"up\"?s.top-d.top>(d.bottom-s.top)*2:d.bottom-s.bottom>(s.bottom-d.top)*2))return!1}}return!0})}var vm=/[\\u0590-\\u08ac]/;function Mm(t,e,n){let{$head:r}=e.selection;if(!r.parent.isTextblock)return!1;let o=r.parentOffset,i=!o,s=o==r.parent.content.size,l=t.domSelection();return l?!vm.test(r.parent.textContent)||!l.modify?n==\"left\"||n==\"backward\"?i:s:id(t,e,()=>{let{focusNode:a,focusOffset:c,anchorNode:d,anchorOffset:u}=t.domSelectionRange(),f=l.caretBidiLevel;l.modify(\"move\",n,\"character\");let h=r.depth?t.docView.domAfterPos(r.before()):t.dom,{focusNode:p,focusOffset:m}=t.domSelectionRange(),g=p&&!h.contains(p.nodeType==1?p:p.parentNode)||a==p&&c==m;try{l.collapse(d,u),a&&(a!=d||c!=u)&&l.extend&&l.extend(a,c)}catch{}return f!=null&&(l.caretBidiLevel=f),g}):r.pos==r.start()||r.pos==r.end()}var Sc=null,Cc=null,vc=!1;function Tm(t,e,n){return Sc==e&&Cc==n?vc:(Sc=e,Cc=n,vc=n==\"up\"||n==\"down\"?Cm(t,e,n):Mm(t,e,n))}var Le=0,Mc=1,Kt=2,Qe=3,Qt=class{constructor(e,n,r,o){this.parent=e,this.children=n,this.dom=r,this.contentDOM=o,this.dirty=Le,r.pmViewDesc=this}matchesWidget(e){return!1}matchesMark(e){return!1}matchesNode(e,n,r){return!1}matchesHack(e){return!1}parseRule(){return null}stopEvent(e){return!1}get size(){let e=0;for(let n=0;n<this.children.length;n++)e+=this.children[n].size;return e}get border(){return 0}destroy(){this.parent=void 0,this.dom.pmViewDesc==this&&(this.dom.pmViewDesc=void 0);for(let e=0;e<this.children.length;e++)this.children[e].destroy()}posBeforeChild(e){for(let n=0,r=this.posAtStart;;n++){let o=this.children[n];if(o==e)return r;r+=o.size}}get posBefore(){return this.parent.posBeforeChild(this)}get posAtStart(){return this.parent?this.parent.posBeforeChild(this)+this.border:0}get posAfter(){return this.posBefore+this.size}get posAtEnd(){return this.posAtStart+this.size-2*this.border}localPosFromDOM(e,n,r){if(this.contentDOM&&this.contentDOM.contains(e.nodeType==1?e:e.parentNode))if(r<0){let i,s;if(e==this.contentDOM)i=e.childNodes[n-1];else{for(;e.parentNode!=this.contentDOM;)e=e.parentNode;i=e.previousSibling}for(;i&&!((s=i.pmViewDesc)&&s.parent==this);)i=i.previousSibling;return i?this.posBeforeChild(s)+s.size:this.posAtStart}else{let i,s;if(e==this.contentDOM)i=e.childNodes[n];else{for(;e.parentNode!=this.contentDOM;)e=e.parentNode;i=e.nextSibling}for(;i&&!((s=i.pmViewDesc)&&s.parent==this);)i=i.nextSibling;return i?this.posBeforeChild(s):this.posAtEnd}let o;if(e==this.dom&&this.contentDOM)o=n>fe(this.contentDOM);else if(this.contentDOM&&this.contentDOM!=this.dom&&this.dom.contains(this.contentDOM))o=e.compareDocumentPosition(this.contentDOM)&2;else if(this.dom.firstChild){if(n==0)for(let i=e;;i=i.parentNode){if(i==this.dom){o=!1;break}if(i.previousSibling)break}if(o==null&&n==e.childNodes.length)for(let i=e;;i=i.parentNode){if(i==this.dom){o=!0;break}if(i.nextSibling)break}}return o??r>0?this.posAtEnd:this.posAtStart}nearestDesc(e,n=!1){for(let r=!0,o=e;o;o=o.parentNode){let i=this.getDesc(o),s;if(i&&(!n||i.node))if(r&&(s=i.nodeDOM)&&!(s.nodeType==1?s.contains(e.nodeType==1?e:e.parentNode):s==e))r=!1;else return i}}getDesc(e){let n=e.pmViewDesc;for(let r=n;r;r=r.parent)if(r==this)return n}posFromDOM(e,n,r){for(let o=e;o;o=o.parentNode){let i=this.getDesc(o);if(i)return i.localPosFromDOM(e,n,r)}return-1}descAt(e){for(let n=0,r=0;n<this.children.length;n++){let o=this.children[n],i=r+o.size;if(r==e&&i!=r){for(;!o.border&&o.children.length;)for(let s=0;s<o.children.length;s++){let l=o.children[s];if(l.size){o=l;break}}return o}if(e<i)return o.descAt(e-r-o.border);r=i}}domFromPos(e,n){if(!this.contentDOM)return{node:this.dom,offset:0,atom:e+1};let r=0,o=0;for(let i=0;r<this.children.length;r++){let s=this.children[r],l=i+s.size;if(l>e||s instanceof jr){o=e-i;break}i=l}if(o)return this.children[r].domFromPos(o-this.children[r].border,n);for(let i;r&&!(i=this.children[r-1]).size&&i instanceof _r&&i.side>=0;r--);if(n<=0){let i,s=!0;for(;i=r?this.children[r-1]:null,!(!i||i.dom.parentNode==this.contentDOM);r--,s=!1);return i&&n&&s&&!i.border&&!i.domAtom?i.domFromPos(i.size,n):{node:this.contentDOM,offset:i?fe(i.dom)+1:0}}else{let i,s=!0;for(;i=r<this.children.length?this.children[r]:null,!(!i||i.dom.parentNode==this.contentDOM);r++,s=!1);return i&&s&&!i.border&&!i.domAtom?i.domFromPos(0,n):{node:this.contentDOM,offset:i?fe(i.dom):this.contentDOM.childNodes.length}}}parseRange(e,n,r=0){if(this.children.length==0)return{node:this.contentDOM,from:e,to:n,fromOffset:0,toOffset:this.contentDOM.childNodes.length};let o=-1,i=-1;for(let s=r,l=0;;l++){let a=this.children[l],c=s+a.size;if(o==-1&&e<=c){let d=s+a.border;if(e>=d&&n<=c-a.border&&a.node&&a.contentDOM&&this.contentDOM.contains(a.contentDOM))return a.parseRange(e,n,d);e=s;for(let u=l;u>0;u--){let f=this.children[u-1];if(f.size&&f.dom.parentNode==this.contentDOM&&!f.emptyChildAt(1)){o=fe(f.dom)+1;break}e-=f.size}o==-1&&(o=0)}if(o>-1&&(c>n||l==this.children.length-1)){n=c;for(let d=l+1;d<this.children.length;d++){let u=this.children[d];if(u.size&&u.dom.parentNode==this.contentDOM&&!u.emptyChildAt(-1)){i=fe(u.dom);break}n+=u.size}i==-1&&(i=this.contentDOM.childNodes.length);break}s=c}return{node:this.contentDOM,from:e,to:n,fromOffset:o,toOffset:i}}emptyChildAt(e){if(this.border||!this.contentDOM||!this.children.length)return!1;let n=this.children[e<0?0:this.children.length-1];return n.size==0||n.emptyChildAt(e)}domAfterPos(e){let{node:n,offset:r}=this.domFromPos(e,0);if(n.nodeType!=1||r==n.childNodes.length)throw new RangeError(\"No node after pos \"+e);return n.childNodes[r]}setSelection(e,n,r,o=!1){let i=Math.min(e,n),s=Math.max(e,n);for(let h=0,p=0;h<this.children.length;h++){let m=this.children[h],g=p+m.size;if(i>p&&s<g)return m.setSelection(e-p-m.border,n-p-m.border,r,o);p=g}let l=this.domFromPos(e,e?-1:1),a=n==e?l:this.domFromPos(n,n?-1:1),c=r.root.getSelection(),d=r.domSelectionRange(),u=!1;if((Pe||we)&&e==n){let{node:h,offset:p}=l;if(h.nodeType==3){if(u=!!(p&&h.nodeValue[p-1]==`\n`),u&&p==h.nodeValue.length)for(let m=h,g;m;m=m.parentNode){if(g=m.nextSibling){g.nodeName==\"BR\"&&(l=a={node:g.parentNode,offset:fe(g)+1});break}let y=m.pmViewDesc;if(y&&y.node&&y.node.isBlock)break}}else{let m=h.childNodes[p-1];u=m&&(m.nodeName==\"BR\"||m.contentEditable==\"false\")}}if(Pe&&d.focusNode&&d.focusNode!=a.node&&d.focusNode.nodeType==1){let h=d.focusNode.childNodes[d.focusOffset];h&&h.contentEditable==\"false\"&&(o=!0)}if(!(o||u&&we)&&Yt(l.node,l.offset,d.anchorNode,d.anchorOffset)&&Yt(a.node,a.offset,d.focusNode,d.focusOffset))return;let f=!1;if((c.extend||e==n)&&!(u&&Pe)){c.collapse(l.node,l.offset);try{e!=n&&c.extend(a.node,a.offset),f=!0}catch{}}if(!f){if(e>n){let p=l;l=a,a=p}let h=document.createRange();h.setEnd(a.node,a.offset),h.setStart(l.node,l.offset),c.removeAllRanges(),c.addRange(h)}}ignoreMutation(e){return!this.contentDOM&&e.type!=\"selection\"}get contentLost(){return this.contentDOM&&this.contentDOM!=this.dom&&!this.dom.contains(this.contentDOM)}markDirty(e,n){for(let r=0,o=0;o<this.children.length;o++){let i=this.children[o],s=r+i.size;if(r==s?e<=s&&n>=r:e<s&&n>r){let l=r+i.border,a=s-i.border;if(e>=l&&n<=a){this.dirty=e==r||n==s?Kt:Mc,e==l&&n==a&&(i.contentLost||i.dom.parentNode!=this.contentDOM)?i.dirty=Qe:i.markDirty(e-l,n-l);return}else i.dirty=i.dom==i.contentDOM&&i.dom.parentNode==this.contentDOM&&!i.children.length?Kt:Qe}r=s}this.dirty=Kt}markParentsDirty(){let e=1;for(let n=this.parent;n;n=n.parent,e++){let r=e==1?Kt:Mc;n.dirty<r&&(n.dirty=r)}}get domAtom(){return!1}get ignoreForCoords(){return!1}get ignoreForSelection(){return!1}isText(e){return!1}},_r=class extends Qt{constructor(e,n,r,o){let i,s=n.type.toDOM;if(typeof s==\"function\"&&(s=s(r,()=>{if(!i)return o;if(i.parent)return i.parent.posBeforeChild(i)})),!n.type.spec.raw){if(s.nodeType!=1){let l=document.createElement(\"span\");l.appendChild(s),s=l}s.contentEditable=\"false\",s.classList.add(\"ProseMirror-widget\")}super(e,[],s,null),this.widget=n,this.widget=n,i=this}matchesWidget(e){return this.dirty==Le&&e.type.eq(this.widget.type)}parseRule(){return{ignore:!0}}stopEvent(e){let n=this.widget.spec.stopEvent;return n?n(e):!1}ignoreMutation(e){return e.type!=\"selection\"||this.widget.spec.ignoreSelection}destroy(){this.widget.type.destroy(this.dom),super.destroy()}get domAtom(){return!0}get ignoreForSelection(){return!!this.widget.type.spec.relaxedSide}get side(){return this.widget.type.side}},gs=class extends Qt{constructor(e,n,r,o){super(e,[],n,null),this.textDOM=r,this.text=o}get size(){return this.text.length}localPosFromDOM(e,n){return e!=this.textDOM?this.posAtStart+(n?this.size:0):this.posAtStart+n}domFromPos(e){return{node:this.textDOM,offset:e}}ignoreMutation(e){return e.type===\"characterData\"&&e.target.nodeValue==e.oldValue}},Mn=class t extends Qt{constructor(e,n,r,o,i){super(e,[],r,o),this.mark=n,this.spec=i}static create(e,n,r,o){let i=o.nodeViews[n.type.name],s=i&&i(n,o,r);return(!s||!s.dom)&&(s=ct.renderSpec(document,n.type.spec.toDOM(n,r),null,n.attrs)),new t(e,n,s.dom,s.contentDOM||s.dom,s)}parseRule(){return this.dirty&Qe||this.mark.type.spec.reparseInView?null:{mark:this.mark.type.name,attrs:this.mark.attrs,contentElement:this.contentDOM}}matchesMark(e){return this.dirty!=Qe&&this.mark.eq(e)}markDirty(e,n){if(super.markDirty(e,n),this.dirty!=Le){let r=this.parent;for(;!r.node;)r=r.parent;r.dirty<this.dirty&&(r.dirty=this.dirty),this.dirty=Le}}slice(e,n,r){let o=t.create(this.parent,this.mark,!0,r),i=this.children,s=this.size;n<s&&(i=xs(i,n,s,r)),e>0&&(i=xs(i,0,e,r));for(let l=0;l<i.length;l++)i[l].parent=o;return o.children=i,o}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}},Dt=class t extends Qt{constructor(e,n,r,o,i,s,l,a,c){super(e,[],i,s),this.node=n,this.outerDeco=r,this.innerDeco=o,this.nodeDOM=l}static create(e,n,r,o,i,s){let l=i.nodeViews[n.type.name],a,c=l&&l(n,i,()=>{if(!a)return s;if(a.parent)return a.parent.posBeforeChild(a)},r,o),d=c&&c.dom,u=c&&c.contentDOM;if(n.isText){if(!d)d=document.createTextNode(n.text);else if(d.nodeType!=3)throw new RangeError(\"Text must be rendered as a DOM text node\")}else d||({dom:d,contentDOM:u}=ct.renderSpec(document,n.type.spec.toDOM(n),null,n.attrs));!u&&!n.isText&&d.nodeName!=\"BR\"&&(d.hasAttribute(\"contenteditable\")||(d.contentEditable=\"false\"),n.type.spec.draggable&&(d.draggable=!0));let f=d;return d=ad(d,r,n),c?a=new ys(e,n,r,o,d,u||null,f,c,i,s+1):n.isText?new Wr(e,n,r,o,d,f,i):new t(e,n,r,o,d,u||null,f,i,s+1)}parseRule(){if(this.node.type.spec.reparseInView)return null;let e={node:this.node.type.name,attrs:this.node.attrs};if(this.node.type.whitespace==\"pre\"&&(e.preserveWhitespace=\"full\"),!this.contentDOM)e.getContent=()=>this.node.content;else if(!this.contentLost)e.contentElement=this.contentDOM;else{for(let n=this.children.length-1;n>=0;n--){let r=this.children[n];if(this.dom.contains(r.dom.parentNode)){e.contentElement=r.dom.parentNode;break}}e.contentElement||(e.getContent=()=>v.empty)}return e}matchesNode(e,n,r){return this.dirty==Le&&e.eq(this.node)&&Ur(n,this.outerDeco)&&r.eq(this.innerDeco)}get size(){return this.node.nodeSize}get border(){return this.node.isLeaf?0:1}updateChildren(e,n){let r=this.node.inlineContent,o=n,i=e.composing?this.localCompositionInfo(e,n):null,s=i&&i.pos>-1?i:null,l=i&&i.pos<0,a=new ws(this,s&&s.node,e);Om(this.node,this.innerDeco,(c,d,u)=>{c.spec.marks?a.syncToMarks(c.spec.marks,r,e):c.type.side>=0&&!u&&a.syncToMarks(d==this.node.childCount?J.none:this.node.child(d).marks,r,e),a.placeWidget(c,e,o)},(c,d,u,f)=>{a.syncToMarks(c.marks,r,e);let h;a.findNodeMatch(c,d,u,f)||l&&e.state.selection.from>o&&e.state.selection.to<o+c.nodeSize&&(h=a.findIndexWithChild(i.node))>-1&&a.updateNodeAt(c,d,u,h,e)||a.updateNextNode(c,d,u,e,f,o)||a.addNode(c,d,u,e,o),o+=c.nodeSize}),a.syncToMarks([],r,e),this.node.isTextblock&&a.addTextblockHacks(),a.destroyRest(),(a.changed||this.dirty==Kt)&&(s&&this.protectLocalComposition(e,s),sd(this.contentDOM,this.children,e),vn&&Rm(this.dom))}localCompositionInfo(e,n){let{from:r,to:o}=e.state.selection;if(!(e.state.selection instanceof D)||r<n||o>n+this.node.content.size)return null;let i=e.input.compositionNode;if(!i||!this.dom.contains(i.parentNode))return null;if(this.node.inlineContent){let s=i.nodeValue,l=Dm(this.node.content,s,r-n,o-n);return l<0?null:{node:i,pos:l,text:s}}else return{node:i,pos:-1,text:\"\"}}protectLocalComposition(e,{node:n,pos:r,text:o}){if(this.getDesc(n))return;let i=n;for(;i.parentNode!=this.contentDOM;i=i.parentNode){for(;i.previousSibling;)i.parentNode.removeChild(i.previousSibling);for(;i.nextSibling;)i.parentNode.removeChild(i.nextSibling);i.pmViewDesc&&(i.pmViewDesc=void 0)}let s=new gs(this,i,n,o);e.input.compositionNodes.push(s),this.children=xs(this.children,r,r+o.length,e,s)}update(e,n,r,o){return this.dirty==Qe||!e.sameMarkup(this.node)?!1:(this.updateInner(e,n,r,o),!0)}updateInner(e,n,r,o){this.updateOuterDeco(n),this.node=e,this.innerDeco=r,this.contentDOM&&this.updateChildren(o,this.posAtStart),this.dirty=Le}updateOuterDeco(e){if(Ur(e,this.outerDeco))return;let n=this.nodeDOM.nodeType!=1,r=this.dom;this.dom=ld(this.dom,this.nodeDOM,bs(this.outerDeco,this.node,n),bs(e,this.node,n)),this.dom!=r&&(r.pmViewDesc=void 0,this.dom.pmViewDesc=this),this.outerDeco=e}selectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.add(\"ProseMirror-selectednode\"),(this.contentDOM||!this.node.type.spec.draggable)&&(this.nodeDOM.draggable=!0))}deselectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.remove(\"ProseMirror-selectednode\"),(this.contentDOM||!this.node.type.spec.draggable)&&this.nodeDOM.removeAttribute(\"draggable\"))}get domAtom(){return this.node.isAtom}};function Tc(t,e,n,r,o){ad(r,e,t);let i=new Dt(void 0,t,e,n,r,r,r,o,0);return i.contentDOM&&i.updateChildren(o,0),i}var Wr=class t extends Dt{constructor(e,n,r,o,i,s,l){super(e,n,r,o,i,null,s,l,0)}parseRule(){let e=this.nodeDOM.parentNode;for(;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}}update(e,n,r,o){return this.dirty==Qe||this.dirty!=Le&&!this.inParent()||!e.sameMarkup(this.node)?!1:(this.updateOuterDeco(n),(this.dirty!=Le||e.text!=this.node.text)&&e.text!=this.nodeDOM.nodeValue&&(this.nodeDOM.nodeValue=e.text,o.trackWrites==this.nodeDOM&&(o.trackWrites=null)),this.node=e,this.dirty=Le,!0)}inParent(){let e=this.parent.contentDOM;for(let n=this.nodeDOM;n;n=n.parentNode)if(n==e)return!0;return!1}domFromPos(e){return{node:this.nodeDOM,offset:e}}localPosFromDOM(e,n,r){return e==this.nodeDOM?this.posAtStart+Math.min(n,this.node.text.length):super.localPosFromDOM(e,n,r)}ignoreMutation(e){return e.type!=\"characterData\"&&e.type!=\"selection\"}slice(e,n,r){let o=this.node.cut(e,n),i=document.createTextNode(o.text);return new t(this.parent,o,this.outerDeco,this.innerDeco,i,i,r)}markDirty(e,n){super.markDirty(e,n),this.dom!=this.nodeDOM&&(e==0||n==this.nodeDOM.nodeValue.length)&&(this.dirty=Qe)}get domAtom(){return!1}isText(e){return this.node.text==e}},jr=class extends Qt{parseRule(){return{ignore:!0}}matchesHack(e){return this.dirty==Le&&this.dom.nodeName==e}get domAtom(){return!0}get ignoreForCoords(){return this.dom.nodeName==\"IMG\"}},ys=class extends Dt{constructor(e,n,r,o,i,s,l,a,c,d){super(e,n,r,o,i,s,l,c,d),this.spec=a}update(e,n,r,o){if(this.dirty==Qe)return!1;if(this.spec.update&&(this.node.type==e.type||this.spec.multiType)){let i=this.spec.update(e,n,r);return i&&this.updateInner(e,n,r,o),i}else return!this.contentDOM&&!e.isLeaf?!1:super.update(e,n,r,o)}selectNode(){this.spec.selectNode?this.spec.selectNode():super.selectNode()}deselectNode(){this.spec.deselectNode?this.spec.deselectNode():super.deselectNode()}setSelection(e,n,r,o){this.spec.setSelection?this.spec.setSelection(e,n,r.root):super.setSelection(e,n,r,o)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}stopEvent(e){return this.spec.stopEvent?this.spec.stopEvent(e):!1}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}};function sd(t,e,n){let r=t.firstChild,o=!1;for(let i=0;i<e.length;i++){let s=e[i],l=s.dom;if(l.parentNode==t){for(;l!=r;)r=Ac(r),o=!0;r=r.nextSibling}else o=!0,t.insertBefore(l,r);if(s instanceof Mn){let a=r?r.previousSibling:t.lastChild;sd(s.contentDOM,s.children,n),r=a?a.nextSibling:t.firstChild}}for(;r;)r=Ac(r),o=!0;o&&n.trackWrites==t&&(n.trackWrites=null)}var Xn=function(t){t&&(this.nodeName=t)};Xn.prototype=Object.create(null);var qt=[new Xn];function bs(t,e,n){if(t.length==0)return qt;let r=n?qt[0]:new Xn,o=[r];for(let i=0;i<t.length;i++){let s=t[i].type.attrs;if(s){s.nodeName&&o.push(r=new Xn(s.nodeName));for(let l in s){let a=s[l];a!=null&&(n&&o.length==1&&o.push(r=new Xn(e.isInline?\"span\":\"div\")),l==\"class\"?r.class=(r.class?r.class+\" \":\"\")+a:l==\"style\"?r.style=(r.style?r.style+\";\":\"\")+a:l!=\"nodeName\"&&(r[l]=a))}}}return o}function ld(t,e,n,r){if(n==qt&&r==qt)return e;let o=e;for(let i=0;i<r.length;i++){let s=r[i],l=n[i];if(i){let a;l&&l.nodeName==s.nodeName&&o!=t&&(a=o.parentNode)&&a.nodeName.toLowerCase()==s.nodeName||(a=document.createElement(s.nodeName),a.pmIsDeco=!0,a.appendChild(o),l=qt[0]),o=a}Am(o,l||qt[0],s)}return o}function Am(t,e,n){for(let r in e)r!=\"class\"&&r!=\"style\"&&r!=\"nodeName\"&&!(r in n)&&t.removeAttribute(r);for(let r in n)r!=\"class\"&&r!=\"style\"&&r!=\"nodeName\"&&n[r]!=e[r]&&t.setAttribute(r,n[r]);if(e.class!=n.class){let r=e.class?e.class.split(\" \").filter(Boolean):[],o=n.class?n.class.split(\" \").filter(Boolean):[];for(let i=0;i<r.length;i++)o.indexOf(r[i])==-1&&t.classList.remove(r[i]);for(let i=0;i<o.length;i++)r.indexOf(o[i])==-1&&t.classList.add(o[i]);t.classList.length==0&&t.removeAttribute(\"class\")}if(e.style!=n.style){if(e.style){let r=/\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g,o;for(;o=r.exec(e.style);)t.style.removeProperty(o[1])}n.style&&(t.style.cssText+=n.style)}}function ad(t,e,n){return ld(t,t,qt,bs(e,n,t.nodeType!=1))}function Ur(t,e){if(t.length!=e.length)return!1;for(let n=0;n<t.length;n++)if(!t[n].type.eq(e[n].type))return!1;return!0}function Ac(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}var ws=class{constructor(e,n,r){this.lock=n,this.view=r,this.index=0,this.stack=[],this.changed=!1,this.top=e,this.preMatch=Em(e.node.content,e)}destroyBetween(e,n){if(e!=n){for(let r=e;r<n;r++)this.top.children[r].destroy();this.top.children.splice(e,n-e),this.changed=!0}}destroyRest(){this.destroyBetween(this.index,this.top.children.length)}syncToMarks(e,n,r){let o=0,i=this.stack.length>>1,s=Math.min(i,e.length);for(;o<s&&(o==i-1?this.top:this.stack[o+1<<1]).matchesMark(e[o])&&e[o].type.spec.spanning!==!1;)o++;for(;o<i;)this.destroyRest(),this.top.dirty=Le,this.index=this.stack.pop(),this.top=this.stack.pop(),i--;for(;i<e.length;){this.stack.push(this.top,this.index+1);let l=-1;for(let a=this.index;a<Math.min(this.index+3,this.top.children.length);a++){let c=this.top.children[a];if(c.matchesMark(e[i])&&!this.isLocked(c.dom)){l=a;break}}if(l>-1)l>this.index&&(this.changed=!0,this.destroyBetween(this.index,l)),this.top=this.top.children[this.index];else{let a=Mn.create(this.top,e[i],n,r);this.top.children.splice(this.index,0,a),this.top=a,this.changed=!0}this.index=0,i++}}findNodeMatch(e,n,r,o){let i=-1,s;if(o>=this.preMatch.index&&(s=this.preMatch.matches[o-this.preMatch.index]).parent==this.top&&s.matchesNode(e,n,r))i=this.top.children.indexOf(s,this.index);else for(let l=this.index,a=Math.min(this.top.children.length,l+5);l<a;l++){let c=this.top.children[l];if(c.matchesNode(e,n,r)&&!this.preMatch.matched.has(c)){i=l;break}}return i<0?!1:(this.destroyBetween(this.index,i),this.index++,!0)}updateNodeAt(e,n,r,o,i){let s=this.top.children[o];return s.dirty==Qe&&s.dom==s.contentDOM&&(s.dirty=Kt),s.update(e,n,r,i)?(this.destroyBetween(this.index,o),this.index++,!0):!1}findIndexWithChild(e){for(;;){let n=e.parentNode;if(!n)return-1;if(n==this.top.contentDOM){let r=e.pmViewDesc;if(r){for(let o=this.index;o<this.top.children.length;o++)if(this.top.children[o]==r)return o}return-1}e=n}}updateNextNode(e,n,r,o,i,s){for(let l=this.index;l<this.top.children.length;l++){let a=this.top.children[l];if(a instanceof Dt){let c=this.preMatch.matched.get(a);if(c!=null&&c!=i)return!1;let d=a.dom,u,f=this.isLocked(d)&&!(e.isText&&a.node&&a.node.isText&&a.nodeDOM.nodeValue==e.text&&a.dirty!=Qe&&Ur(n,a.outerDeco));if(!f&&a.update(e,n,r,o))return this.destroyBetween(this.index,l),a.dom!=d&&(this.changed=!0),this.index++,!0;if(!f&&(u=this.recreateWrapper(a,e,n,r,o,s)))return this.destroyBetween(this.index,l),this.top.children[this.index]=u,u.contentDOM&&(u.dirty=Kt,u.updateChildren(o,s+1),u.dirty=Le),this.changed=!0,this.index++,!0;break}}return!1}recreateWrapper(e,n,r,o,i,s){if(e.dirty||n.isAtom||!e.children.length||!e.node.content.eq(n.content)||!Ur(r,e.outerDeco)||!o.eq(e.innerDeco))return null;let l=Dt.create(this.top,n,r,o,i,s);if(l.contentDOM){l.children=e.children,e.children=[];for(let a of l.children)a.parent=l}return e.destroy(),l}addNode(e,n,r,o,i){let s=Dt.create(this.top,e,n,r,o,i);s.contentDOM&&s.updateChildren(o,i+1),this.top.children.splice(this.index++,0,s),this.changed=!0}placeWidget(e,n,r){let o=this.index<this.top.children.length?this.top.children[this.index]:null;if(o&&o.matchesWidget(e)&&(e==o.widget||!o.widget.type.toDOM.parentNode))this.index++;else{let i=new _r(this.top,e,n,r);this.top.children.splice(this.index++,0,i),this.changed=!0}}addTextblockHacks(){let e=this.top.children[this.index-1],n=this.top;for(;e instanceof Mn;)n=e,e=n.children[n.children.length-1];(!e||!(e instanceof Wr)||/\\n$/.test(e.node.text)||this.view.requiresGeckoHackNode&&/\\s$/.test(e.node.text))&&((we||de)&&e&&e.dom.contentEditable==\"false\"&&this.addHackNode(\"IMG\",n),this.addHackNode(\"BR\",this.top))}addHackNode(e,n){if(n==this.top&&this.index<n.children.length&&n.children[this.index].matchesHack(e))this.index++;else{let r=document.createElement(e);e==\"IMG\"&&(r.className=\"ProseMirror-separator\",r.alt=\"\"),e==\"BR\"&&(r.className=\"ProseMirror-trailingBreak\");let o=new jr(this.top,[],r,null);n!=this.top?n.children.push(o):n.children.splice(this.index++,0,o),this.changed=!0}}isLocked(e){return this.lock&&(e==this.lock||e.nodeType==1&&e.contains(this.lock.parentNode))}};function Em(t,e){let n=e,r=n.children.length,o=t.childCount,i=new Map,s=[];e:for(;o>0;){let l;for(;;)if(r){let c=n.children[r-1];if(c instanceof Mn)n=c,r=c.children.length;else{l=c,r--;break}}else{if(n==e)break e;r=n.parent.children.indexOf(n),n=n.parent}let a=l.node;if(a){if(a!=t.child(o-1))break;--o,i.set(l,o),s.push(l)}}return{index:o,matched:i,matches:s.reverse()}}function Nm(t,e){return t.type.side-e.type.side}function Om(t,e,n,r){let o=e.locals(t),i=0;if(o.length==0){for(let c=0;c<t.childCount;c++){let d=t.child(c);r(d,o,e.forChild(i,d),c),i+=d.nodeSize}return}let s=0,l=[],a=null;for(let c=0;;){let d,u;for(;s<o.length&&o[s].to==i;){let g=o[s++];g.widget&&(d?(u||(u=[d])).push(g):d=g)}if(d)if(u){u.sort(Nm);for(let g=0;g<u.length;g++)n(u[g],c,!!a)}else n(d,c,!!a);let f,h;if(a)h=-1,f=a,a=null;else if(c<t.childCount)h=c,f=t.child(c++);else break;for(let g=0;g<l.length;g++)l[g].to<=i&&l.splice(g--,1);for(;s<o.length&&o[s].from<=i&&o[s].to>i;)l.push(o[s++]);let p=i+f.nodeSize;if(f.isText){let g=p;s<o.length&&o[s].from<g&&(g=o[s].from);for(let y=0;y<l.length;y++)l[y].to<g&&(g=l[y].to);g<p&&(a=f.cut(g-i),f=f.cut(0,g-i),p=g,h=-1)}else for(;s<o.length&&o[s].to<p;)s++;let m=f.isInline&&!f.isLeaf?l.filter(g=>!g.inline):l.slice();r(f,m,e.forChild(i,f),h),i=p}}function Rm(t){if(t.nodeName==\"UL\"||t.nodeName==\"OL\"){let e=t.style.cssText;t.style.cssText=e+\"; list-style: square !important\",window.getComputedStyle(t).listStyle,t.style.cssText=e}}function Dm(t,e,n,r){for(let o=0,i=0;o<t.childCount&&i<=r;){let s=t.child(o++),l=i;if(i+=s.nodeSize,!s.isText)continue;let a=s.text;for(;o<t.childCount;){let c=t.child(o++);if(i+=c.nodeSize,!c.isText)break;a+=c.text}if(i>=n){if(i>=r&&a.slice(r-e.length-l,r-l)==e)return r-e.length;let c=l<r?a.lastIndexOf(e,r-l-1):-1;if(c>=0&&c+e.length+l>=n)return l+c;if(n==r&&a.length>=r+e.length-l&&a.slice(r-l,r-l+e.length)==e)return r}}return-1}function xs(t,e,n,r,o){let i=[];for(let s=0,l=0;s<t.length;s++){let a=t[s],c=l,d=l+=a.size;c>=n||d<=e?i.push(a):(c<e&&i.push(a.slice(0,e-c,r)),o&&(i.push(o),o=void 0),d>n&&i.push(a.slice(n-c,a.size,r)))}return i}function Rs(t,e=null){let n=t.domSelectionRange(),r=t.state.doc;if(!n.focusNode)return null;let o=t.docView.nearestDesc(n.focusNode),i=o&&o.size==0,s=t.docView.posFromDOM(n.focusNode,n.focusOffset,1);if(s<0)return null;let l=r.resolve(s),a,c;if(Qr(n)){for(a=s;o&&!o.node;)o=o.parent;let u=o.node;if(o&&u.isAtom&&L.isSelectable(u)&&o.parent&&!(u.isInline&&am(n.focusNode,n.focusOffset,o.dom))){let f=o.posBefore;c=new L(s==f?l:r.resolve(f))}}else{if(n instanceof t.dom.ownerDocument.defaultView.Selection&&n.rangeCount>1){let u=s,f=s;for(let h=0;h<n.rangeCount;h++){let p=n.getRangeAt(h);u=Math.min(u,t.docView.posFromDOM(p.startContainer,p.startOffset,1)),f=Math.max(f,t.docView.posFromDOM(p.endContainer,p.endOffset,-1))}if(u<0)return null;[a,s]=f==t.state.selection.anchor?[f,u]:[u,f],l=r.resolve(s)}else a=t.docView.posFromDOM(n.anchorNode,n.anchorOffset,1);if(a<0)return null}let d=r.resolve(a);if(!c){let u=e==\"pointer\"||t.state.selection.head<l.pos&&!i?1:-1;c=Ds(t,d,l,u)}return c}function cd(t){return t.editable?t.hasFocus():ud(t)&&document.activeElement&&document.activeElement.contains(t.dom)}function gt(t,e=!1){let n=t.state.selection;if(dd(t,n),!!cd(t)){if(!e&&t.input.mouseDown&&t.input.mouseDown.allowDefault&&de){let r=t.domSelectionRange(),o=t.domObserver.currentSelection;if(r.anchorNode&&o.anchorNode&&Yt(r.anchorNode,r.anchorOffset,o.anchorNode,o.anchorOffset)){t.input.mouseDown.delayedSelectionSync=!0,t.domObserver.setCurSelection();return}}if(t.domObserver.disconnectSelection(),t.cursorWrapper)Pm(t);else{let{anchor:r,head:o}=n,i,s;Ec&&!(n instanceof D)&&(n.$from.parent.inlineContent||(i=Nc(t,n.from)),!n.empty&&!n.$from.parent.inlineContent&&(s=Nc(t,n.to))),t.docView.setSelection(r,o,t,e),Ec&&(i&&Oc(i),s&&Oc(s)),n.visible?t.dom.classList.remove(\"ProseMirror-hideselection\"):(t.dom.classList.add(\"ProseMirror-hideselection\"),\"onselectionchange\"in document&&Im(t))}t.domObserver.setCurSelection(),t.domObserver.connectSelection()}}var Ec=we||de&&Qc<63;function Nc(t,e){let{node:n,offset:r}=t.docView.domFromPos(e,0),o=r<n.childNodes.length?n.childNodes[r]:null,i=r?n.childNodes[r-1]:null;if(we&&o&&o.contentEditable==\"false\")return as(o);if((!o||o.contentEditable==\"false\")&&(!i||i.contentEditable==\"false\")){if(o)return as(o);if(i)return as(i)}}function as(t){return t.contentEditable=\"true\",we&&t.draggable&&(t.draggable=!1,t.wasDraggable=!0),t}function Oc(t){t.contentEditable=\"false\",t.wasDraggable&&(t.draggable=!0,t.wasDraggable=null)}function Im(t){let e=t.dom.ownerDocument;e.removeEventListener(\"selectionchange\",t.input.hideSelectionGuard);let n=t.domSelectionRange(),r=n.anchorNode,o=n.anchorOffset;e.addEventListener(\"selectionchange\",t.input.hideSelectionGuard=()=>{(n.anchorNode!=r||n.anchorOffset!=o)&&(e.removeEventListener(\"selectionchange\",t.input.hideSelectionGuard),setTimeout(()=>{(!cd(t)||t.state.selection.visible)&&t.dom.classList.remove(\"ProseMirror-hideselection\")},20))})}function Pm(t){let e=t.domSelection();if(!e)return;let n=t.cursorWrapper.dom,r=n.nodeName==\"IMG\";r?e.collapse(n.parentNode,fe(n)+1):e.collapse(n,0),!r&&!t.state.selection.visible&&ve&&Rt<=11&&(n.disabled=!0,n.disabled=!1)}function dd(t,e){if(e instanceof L){let n=t.docView.descAt(e.from);n!=t.lastSelectedViewDesc&&(Rc(t),n&&n.selectNode(),t.lastSelectedViewDesc=n)}else Rc(t)}function Rc(t){t.lastSelectedViewDesc&&(t.lastSelectedViewDesc.parent&&t.lastSelectedViewDesc.deselectNode(),t.lastSelectedViewDesc=void 0)}function Ds(t,e,n,r){return t.someProp(\"createSelectionBetween\",o=>o(t,e,n))||D.between(e,n,r)}function Dc(t){return t.editable&&!t.hasFocus()?!1:ud(t)}function ud(t){let e=t.domSelectionRange();if(!e.anchorNode)return!1;try{return t.dom.contains(e.anchorNode.nodeType==3?e.anchorNode.parentNode:e.anchorNode)&&(t.editable||t.dom.contains(e.focusNode.nodeType==3?e.focusNode.parentNode:e.focusNode))}catch{return!1}}function Lm(t){let e=t.docView.domFromPos(t.state.selection.anchor,0),n=t.domSelectionRange();return Yt(e.node,e.offset,n.anchorNode,n.anchorOffset)}function ks(t,e){let{$anchor:n,$head:r}=t.selection,o=e>0?n.max(r):n.min(r),i=o.parent.inlineContent?o.depth?t.doc.resolve(e>0?o.after():o.before()):null:o;return i&&I.findFrom(i,e)}function Nt(t,e){return t.dispatch(t.state.tr.setSelection(e).scrollIntoView()),!0}function Ic(t,e,n){let r=t.state.selection;if(r instanceof D)if(n.indexOf(\"s\")>-1){let{$head:o}=r,i=o.textOffset?null:e<0?o.nodeBefore:o.nodeAfter;if(!i||i.isText||!i.isLeaf)return!1;let s=t.state.doc.resolve(o.pos+i.nodeSize*(e<0?-1:1));return Nt(t,new D(r.$anchor,s))}else if(r.empty){if(t.endOfTextblock(e>0?\"forward\":\"backward\")){let o=ks(t.state,e);return o&&o instanceof L?Nt(t,o):!1}else if(!(De&&n.indexOf(\"m\")>-1)){let o=r.$head,i=o.textOffset?null:e<0?o.nodeBefore:o.nodeAfter,s;if(!i||i.isText)return!1;let l=e<0?o.pos-i.nodeSize:o.pos;return i.isAtom||(s=t.docView.descAt(l))&&!s.contentDOM?L.isSelectable(i)?Nt(t,new L(e<0?t.state.doc.resolve(o.pos-i.nodeSize):o)):rr?Nt(t,new D(t.state.doc.resolve(e<0?l:l+i.nodeSize))):!1:!1}}else return!1;else{if(r instanceof L&&r.node.isInline)return Nt(t,new D(e>0?r.$to:r.$from));{let o=ks(t.state,e);return o?Nt(t,o):!1}}}function Kr(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function Yn(t,e){let n=t.pmViewDesc;return n&&n.size==0&&(e<0||t.nextSibling||t.nodeName!=\"BR\")}function xn(t,e){return e<0?Bm(t):zm(t)}function Bm(t){let e=t.domSelectionRange(),n=e.focusNode,r=e.focusOffset;if(!n)return;let o,i,s=!1;for(Pe&&n.nodeType==1&&r<Kr(n)&&Yn(n.childNodes[r],-1)&&(s=!0);;)if(r>0){if(n.nodeType!=1)break;{let l=n.childNodes[r-1];if(Yn(l,-1))o=n,i=--r;else if(l.nodeType==3)n=l,r=n.nodeValue.length;else break}}else{if(fd(n))break;{let l=n.previousSibling;for(;l&&Yn(l,-1);)o=n.parentNode,i=fe(l),l=l.previousSibling;if(l)n=l,r=Kr(n);else{if(n=n.parentNode,n==t.dom)break;r=0}}}s?Ss(t,n,r):o&&Ss(t,o,i)}function zm(t){let e=t.domSelectionRange(),n=e.focusNode,r=e.focusOffset;if(!n)return;let o=Kr(n),i,s;for(;;)if(r<o){if(n.nodeType!=1)break;let l=n.childNodes[r];if(Yn(l,1))i=n,s=++r;else break}else{if(fd(n))break;{let l=n.nextSibling;for(;l&&Yn(l,1);)i=l.parentNode,s=fe(l)+1,l=l.nextSibling;if(l)n=l,r=0,o=Kr(n);else{if(n=n.parentNode,n==t.dom)break;r=o=0}}}i&&Ss(t,i,s)}function fd(t){let e=t.pmViewDesc;return e&&e.node&&e.node.isBlock}function Hm(t,e){for(;t&&e==t.childNodes.length&&!nr(t);)e=fe(t)+1,t=t.parentNode;for(;t&&e<t.childNodes.length;){let n=t.childNodes[e];if(n.nodeType==3)return n;if(n.nodeType==1&&n.contentEditable==\"false\")break;t=n,e=0}}function $m(t,e){for(;t&&!e&&!nr(t);)e=fe(t),t=t.parentNode;for(;t&&e;){let n=t.childNodes[e-1];if(n.nodeType==3)return n;if(n.nodeType==1&&n.contentEditable==\"false\")break;t=n,e=t.childNodes.length}}function Ss(t,e,n){if(e.nodeType!=3){let i,s;(s=Hm(e,n))?(e=s,n=0):(i=$m(e,n))&&(e=i,n=i.nodeValue.length)}let r=t.domSelection();if(!r)return;if(Qr(r)){let i=document.createRange();i.setEnd(e,n),i.setStart(e,n),r.removeAllRanges(),r.addRange(i)}else r.extend&&r.extend(e,n);t.domObserver.setCurSelection();let{state:o}=t;setTimeout(()=>{t.state==o&&gt(t)},50)}function Pc(t,e){let n=t.state.doc.resolve(e);if(!(de||Zc)&&n.parent.inlineContent){let o=t.coordsAtPos(e);if(e>n.start()){let i=t.coordsAtPos(e-1),s=(i.top+i.bottom)/2;if(s>o.top&&s<o.bottom&&Math.abs(i.left-o.left)>1)return i.left<o.left?\"ltr\":\"rtl\"}if(e<n.end()){let i=t.coordsAtPos(e+1),s=(i.top+i.bottom)/2;if(s>o.top&&s<o.bottom&&Math.abs(i.left-o.left)>1)return i.left>o.left?\"ltr\":\"rtl\"}}return getComputedStyle(t.dom).direction==\"rtl\"?\"rtl\":\"ltr\"}function Lc(t,e,n){let r=t.state.selection;if(r instanceof D&&!r.empty||n.indexOf(\"s\")>-1||De&&n.indexOf(\"m\")>-1)return!1;let{$from:o,$to:i}=r;if(!o.parent.inlineContent||t.endOfTextblock(e<0?\"up\":\"down\")){let s=ks(t.state,e);if(s&&s instanceof L)return Nt(t,s)}if(!o.parent.inlineContent){let s=e<0?o:i,l=r instanceof ke?I.near(s,e):I.findFrom(s,e);return l?Nt(t,l):!1}return!1}function Bc(t,e){if(!(t.state.selection instanceof D))return!0;let{$head:n,$anchor:r,empty:o}=t.state.selection;if(!n.sameParent(r))return!0;if(!o)return!1;if(t.endOfTextblock(e>0?\"forward\":\"backward\"))return!0;let i=!n.textOffset&&(e<0?n.nodeBefore:n.nodeAfter);if(i&&!i.isText){let s=t.state.tr;return e<0?s.delete(n.pos-i.nodeSize,n.pos):s.delete(n.pos,n.pos+i.nodeSize),t.dispatch(s),!0}return!1}function zc(t,e,n){t.domObserver.stop(),e.contentEditable=n,t.domObserver.start()}function Fm(t){if(!we||t.state.selection.$head.parentOffset>0)return!1;let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(e&&e.nodeType==1&&n==0&&e.firstChild&&e.firstChild.contentEditable==\"false\"){let r=e.firstChild;zc(t,r,\"true\"),setTimeout(()=>zc(t,r,\"false\"),20)}return!1}function Vm(t){let e=\"\";return t.ctrlKey&&(e+=\"c\"),t.metaKey&&(e+=\"m\"),t.altKey&&(e+=\"a\"),t.shiftKey&&(e+=\"s\"),e}function _m(t,e){let n=e.keyCode,r=Vm(e);if(n==8||De&&n==72&&r==\"c\")return Bc(t,-1)||xn(t,-1);if(n==46&&!e.shiftKey||De&&n==68&&r==\"c\")return Bc(t,1)||xn(t,1);if(n==13||n==27)return!0;if(n==37||De&&n==66&&r==\"c\"){let o=n==37?Pc(t,t.state.selection.from)==\"ltr\"?-1:1:-1;return Ic(t,o,r)||xn(t,o)}else if(n==39||De&&n==70&&r==\"c\"){let o=n==39?Pc(t,t.state.selection.from)==\"ltr\"?1:-1:1;return Ic(t,o,r)||xn(t,o)}else{if(n==38||De&&n==80&&r==\"c\")return Lc(t,-1,r)||xn(t,-1);if(n==40||De&&n==78&&r==\"c\")return Fm(t)||Lc(t,1,r)||xn(t,1);if(r==(De?\"m\":\"c\")&&(n==66||n==73||n==89||n==90))return!0}return!1}function Is(t,e){t.someProp(\"transformCopied\",h=>{e=h(e,t)});let n=[],{content:r,openStart:o,openEnd:i}=e;for(;o>1&&i>1&&r.childCount==1&&r.firstChild.childCount==1;){o--,i--;let h=r.firstChild;n.push(h.type.name,h.attrs!=h.type.defaultAttrs?h.attrs:null),r=h.content}let s=t.someProp(\"clipboardSerializer\")||ct.fromSchema(t.state.schema),l=bd(),a=l.createElement(\"div\");a.appendChild(s.serializeFragment(r,{document:l}));let c=a.firstChild,d,u=0;for(;c&&c.nodeType==1&&(d=yd[c.nodeName.toLowerCase()]);){for(let h=d.length-1;h>=0;h--){let p=l.createElement(d[h]);for(;a.firstChild;)p.appendChild(a.firstChild);a.appendChild(p),u++}c=a.firstChild}c&&c.nodeType==1&&c.setAttribute(\"data-pm-slice\",`${o} ${i}${u?` -${u}`:\"\"} ${JSON.stringify(n)}`);let f=t.someProp(\"clipboardTextSerializer\",h=>h(e,t))||e.content.textBetween(0,e.content.size,`\n\n`);return{dom:a,text:f,slice:e}}function hd(t,e,n,r,o){let i=o.parent.type.spec.code,s,l;if(!n&&!e)return null;let a=!!e&&(r||i||!n);if(a){if(t.someProp(\"transformPastedText\",f=>{e=f(e,i||r,t)}),i)return l=new E(v.from(t.state.schema.text(e.replace(/\\r\\n?/g,`\n`))),0,0),t.someProp(\"transformPasted\",f=>{l=f(l,t,!0)}),l;let u=t.someProp(\"clipboardTextParser\",f=>f(e,o,r,t));if(u)l=u;else{let f=o.marks(),{schema:h}=t.state,p=ct.fromSchema(h);s=document.createElement(\"div\"),e.split(/(?:\\r\\n?|\\n)+/).forEach(m=>{let g=s.appendChild(document.createElement(\"p\"));m&&g.appendChild(p.serializeNode(h.text(m,f)))})}}else t.someProp(\"transformPastedHTML\",u=>{n=u(n,t)}),s=Km(n),rr&&qm(s);let c=s&&s.querySelector(\"[data-pm-slice]\"),d=c&&/^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(c.getAttribute(\"data-pm-slice\")||\"\");if(d&&d[3])for(let u=+d[3];u>0;u--){let f=s.firstChild;for(;f&&f.nodeType!=1;)f=f.nextSibling;if(!f)break;s=f}if(l||(l=(t.someProp(\"clipboardParser\")||t.someProp(\"domParser\")||Xe.fromSchema(t.state.schema)).parseSlice(s,{preserveWhitespace:!!(a||d),context:o,ruleFromNode(f){return f.nodeName==\"BR\"&&!f.nextSibling&&f.parentNode&&!Wm.test(f.parentNode.nodeName)?{ignore:!0}:null}})),d)l=Jm(Hc(l,+d[1],+d[2]),d[4]);else if(l=E.maxOpen(jm(l.content,o),!0),l.openStart||l.openEnd){let u=0,f=0;for(let h=l.content.firstChild;u<l.openStart&&!h.type.spec.isolating;u++,h=h.firstChild);for(let h=l.content.lastChild;f<l.openEnd&&!h.type.spec.isolating;f++,h=h.lastChild);l=Hc(l,u,f)}return t.someProp(\"transformPasted\",u=>{l=u(l,t,a)}),l}var Wm=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function jm(t,e){if(t.childCount<2)return t;for(let n=e.depth;n>=0;n--){let o=e.node(n).contentMatchAt(e.index(n)),i,s=[];if(t.forEach(l=>{if(!s)return;let a=o.findWrapping(l.type),c;if(!a)return s=null;if(c=s.length&&i.length&&md(a,i,l,s[s.length-1],0))s[s.length-1]=c;else{s.length&&(s[s.length-1]=gd(s[s.length-1],i.length));let d=pd(l,a);s.push(d),o=o.matchType(d.type),i=a}}),s)return v.from(s)}return t}function pd(t,e,n=0){for(let r=e.length-1;r>=n;r--)t=e[r].create(null,v.from(t));return t}function md(t,e,n,r,o){if(o<t.length&&o<e.length&&t[o]==e[o]){let i=md(t,e,n,r.lastChild,o+1);if(i)return r.copy(r.content.replaceChild(r.childCount-1,i));if(r.contentMatchAt(r.childCount).matchType(o==t.length-1?n.type:t[o+1]))return r.copy(r.content.append(v.from(pd(n,t,o+1))))}}function gd(t,e){if(e==0)return t;let n=t.content.replaceChild(t.childCount-1,gd(t.lastChild,e-1)),r=t.contentMatchAt(t.childCount).fillBefore(v.empty,!0);return t.copy(n.append(r))}function Cs(t,e,n,r,o,i){let s=e<0?t.firstChild:t.lastChild,l=s.content;return t.childCount>1&&(i=0),o<r-1&&(l=Cs(l,e,n,r,o+1,i)),o>=n&&(l=e<0?s.contentMatchAt(0).fillBefore(l,i<=o).append(l):l.append(s.contentMatchAt(s.childCount).fillBefore(v.empty,!0))),t.replaceChild(e<0?0:t.childCount-1,s.copy(l))}function Hc(t,e,n){return e<t.openStart&&(t=new E(Cs(t.content,-1,e,t.openStart,0,t.openEnd),e,t.openEnd)),n<t.openEnd&&(t=new E(Cs(t.content,1,n,t.openEnd,0,0),t.openStart,n)),t}var yd={thead:[\"table\"],tbody:[\"table\"],tfoot:[\"table\"],caption:[\"table\"],colgroup:[\"table\"],col:[\"table\",\"colgroup\"],tr:[\"table\",\"tbody\"],td:[\"table\",\"tbody\",\"tr\"],th:[\"table\",\"tbody\",\"tr\"]},$c=null;function bd(){return $c||($c=document.implementation.createHTMLDocument(\"title\"))}var cs=null;function Um(t){let e=window.trustedTypes;return e?(cs||(cs=e.defaultPolicy||e.createPolicy(\"ProseMirrorClipboard\",{createHTML:n=>n})),cs.createHTML(t)):t}function Km(t){let e=/^(\\s*<meta [^>]*>)*/.exec(t);e&&(t=t.slice(e[0].length));let n=bd().createElement(\"div\"),r=/<([a-z][^>\\s]+)/i.exec(t),o;if((o=r&&yd[r[1].toLowerCase()])&&(t=o.map(i=>\"<\"+i+\">\").join(\"\")+t+o.map(i=>\"</\"+i+\">\").reverse().join(\"\")),n.innerHTML=Um(t),o)for(let i=0;i<o.length;i++)n=n.querySelector(o[i])||n;return n}function qm(t){let e=t.querySelectorAll(de?\"span:not([class]):not([style])\":\"span.Apple-converted-space\");for(let n=0;n<e.length;n++){let r=e[n];r.childNodes.length==1&&r.textContent==\"\\xA0\"&&r.parentNode&&r.parentNode.replaceChild(t.ownerDocument.createTextNode(\" \"),r)}}function Jm(t,e){if(!t.size)return t;let n=t.content.firstChild.type.schema,r;try{r=JSON.parse(e)}catch{return t}let{content:o,openStart:i,openEnd:s}=t;for(let l=r.length-2;l>=0;l-=2){let a=n.nodes[r[l]];if(!a||a.hasRequiredAttrs())break;o=v.from(a.create(r[l+1],o)),i++,s++}return new E(o,i,s)}var Se={},Ce={},Gm={touchstart:!0,touchmove:!0},vs=class{constructor(){this.shiftKey=!1,this.mouseDown=null,this.lastKeyCode=null,this.lastKeyCodeTime=0,this.lastClick={time:0,x:0,y:0,type:\"\",button:0},this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastIOSEnter=0,this.lastIOSEnterFallbackTimeout=-1,this.lastFocus=0,this.lastTouch=0,this.lastChromeDelete=0,this.composing=!1,this.compositionNode=null,this.composingTimeout=-1,this.compositionNodes=[],this.compositionEndedAt=-2e8,this.compositionID=1,this.compositionPendingChanges=0,this.domChangeCount=0,this.eventHandlers=Object.create(null),this.hideSelectionGuard=null}};function Xm(t){for(let e in Se){let n=Se[e];t.dom.addEventListener(e,t.input.eventHandlers[e]=r=>{Qm(t,r)&&!Ps(t,r)&&(t.editable||!(r.type in Ce))&&n(t,r)},Gm[e]?{passive:!0}:void 0)}we&&t.dom.addEventListener(\"input\",()=>null),Ms(t)}function Ot(t,e){t.input.lastSelectionOrigin=e,t.input.lastSelectionTime=Date.now()}function Ym(t){t.domObserver.stop();for(let e in t.input.eventHandlers)t.dom.removeEventListener(e,t.input.eventHandlers[e]);clearTimeout(t.input.composingTimeout),clearTimeout(t.input.lastIOSEnterFallbackTimeout)}function Ms(t){t.someProp(\"handleDOMEvents\",e=>{for(let n in e)t.input.eventHandlers[n]||t.dom.addEventListener(n,t.input.eventHandlers[n]=r=>Ps(t,r))})}function Ps(t,e){return t.someProp(\"handleDOMEvents\",n=>{let r=n[e.type];return r?r(t,e)||e.defaultPrevented:!1})}function Qm(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let n=e.target;n!=t.dom;n=n.parentNode)if(!n||n.nodeType==11||n.pmViewDesc&&n.pmViewDesc.stopEvent(e))return!1;return!0}function Zm(t,e){!Ps(t,e)&&Se[e.type]&&(t.editable||!(e.type in Ce))&&Se[e.type](t,e)}Ce.keydown=(t,e)=>{let n=e;if(t.input.shiftKey=n.keyCode==16||n.shiftKey,!xd(t,n)&&(t.input.lastKeyCode=n.keyCode,t.input.lastKeyCodeTime=Date.now(),!(mt&&de&&n.keyCode==13)))if(n.keyCode!=229&&t.domObserver.forceFlush(),vn&&n.keyCode==13&&!n.ctrlKey&&!n.altKey&&!n.metaKey){let r=Date.now();t.input.lastIOSEnter=r,t.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{t.input.lastIOSEnter==r&&(t.someProp(\"handleKeyDown\",o=>o(t,Ut(13,\"Enter\"))),t.input.lastIOSEnter=0)},200)}else t.someProp(\"handleKeyDown\",r=>r(t,n))||_m(t,n)?n.preventDefault():Ot(t,\"key\")};Ce.keyup=(t,e)=>{e.keyCode==16&&(t.input.shiftKey=!1)};Ce.keypress=(t,e)=>{let n=e;if(xd(t,n)||!n.charCode||n.ctrlKey&&!n.altKey||De&&n.metaKey)return;if(t.someProp(\"handleKeyPress\",o=>o(t,n))){n.preventDefault();return}let r=t.state.selection;if(!(r instanceof D)||!r.$from.sameParent(r.$to)){let o=String.fromCharCode(n.charCode),i=()=>t.state.tr.insertText(o).scrollIntoView();!/[\\r\\n]/.test(o)&&!t.someProp(\"handleTextInput\",s=>s(t,r.$from.pos,r.$to.pos,o,i))&&t.dispatch(i()),n.preventDefault()}};function Zr(t){return{left:t.clientX,top:t.clientY}}function eg(t,e){let n=e.x-t.clientX,r=e.y-t.clientY;return n*n+r*r<100}function Ls(t,e,n,r,o){if(r==-1)return!1;let i=t.state.doc.resolve(r);for(let s=i.depth+1;s>0;s--)if(t.someProp(e,l=>s>i.depth?l(t,n,i.nodeAfter,i.before(s),o,!0):l(t,n,i.node(s),i.before(s),o,!1)))return!0;return!1}function Sn(t,e,n){if(t.focused||t.focus(),t.state.selection.eq(e))return;let r=t.state.tr.setSelection(e);n==\"pointer\"&&r.setMeta(\"pointer\",!0),t.dispatch(r)}function tg(t,e){if(e==-1)return!1;let n=t.state.doc.resolve(e),r=n.nodeAfter;return r&&r.isAtom&&L.isSelectable(r)?(Sn(t,new L(n),\"pointer\"),!0):!1}function ng(t,e){if(e==-1)return!1;let n=t.state.selection,r,o;n instanceof L&&(r=n.node);let i=t.state.doc.resolve(e);for(let s=i.depth+1;s>0;s--){let l=s>i.depth?i.nodeAfter:i.node(s);if(L.isSelectable(l)){r&&n.$from.depth>0&&s>=n.$from.depth&&i.before(n.$from.depth+1)==n.$from.pos?o=i.before(n.$from.depth):o=i.before(s);break}}return o!=null?(Sn(t,L.create(t.state.doc,o),\"pointer\"),!0):!1}function rg(t,e,n,r,o){return Ls(t,\"handleClickOn\",e,n,r)||t.someProp(\"handleClick\",i=>i(t,e,r))||(o?ng(t,n):tg(t,n))}function og(t,e,n,r){return Ls(t,\"handleDoubleClickOn\",e,n,r)||t.someProp(\"handleDoubleClick\",o=>o(t,e,r))}function ig(t,e,n,r){return Ls(t,\"handleTripleClickOn\",e,n,r)||t.someProp(\"handleTripleClick\",o=>o(t,e,r))||sg(t,n,r)}function sg(t,e,n){if(n.button!=0)return!1;let r=t.state.doc;if(e==-1)return r.inlineContent?(Sn(t,D.create(r,0,r.content.size),\"pointer\"),!0):!1;let o=r.resolve(e);for(let i=o.depth+1;i>0;i--){let s=i>o.depth?o.nodeAfter:o.node(i),l=o.before(i);if(s.inlineContent)Sn(t,D.create(r,l+1,l+1+s.content.size),\"pointer\");else if(L.isSelectable(s))Sn(t,L.create(r,l),\"pointer\");else continue;return!0}}function Bs(t){return qr(t)}var wd=De?\"metaKey\":\"ctrlKey\";Se.mousedown=(t,e)=>{let n=e;t.input.shiftKey=n.shiftKey;let r=Bs(t),o=Date.now(),i=\"singleClick\";o-t.input.lastClick.time<500&&eg(n,t.input.lastClick)&&!n[wd]&&t.input.lastClick.button==n.button&&(t.input.lastClick.type==\"singleClick\"?i=\"doubleClick\":t.input.lastClick.type==\"doubleClick\"&&(i=\"tripleClick\")),t.input.lastClick={time:o,x:n.clientX,y:n.clientY,type:i,button:n.button};let s=t.posAtCoords(Zr(n));s&&(i==\"singleClick\"?(t.input.mouseDown&&t.input.mouseDown.done(),t.input.mouseDown=new Ts(t,s,n,!!r)):(i==\"doubleClick\"?og:ig)(t,s.pos,s.inside,n)?n.preventDefault():Ot(t,\"pointer\"))};var Ts=class{constructor(e,n,r,o){this.view=e,this.pos=n,this.event=r,this.flushed=o,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!r[wd],this.allowDefault=r.shiftKey;let i,s;if(n.inside>-1)i=e.state.doc.nodeAt(n.inside),s=n.inside;else{let d=e.state.doc.resolve(n.pos);i=d.parent,s=d.depth?d.before():0}let l=o?null:r.target,a=l?e.docView.nearestDesc(l,!0):null;this.target=a&&a.nodeDOM.nodeType==1?a.nodeDOM:null;let{selection:c}=e.state;(r.button==0&&i.type.spec.draggable&&i.type.spec.selectable!==!1||c instanceof L&&c.from<=s&&c.to>s)&&(this.mightDrag={node:i,pos:s,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&Pe&&!this.target.hasAttribute(\"contentEditable\"))}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout(()=>{this.view.input.mouseDown==this&&this.target.setAttribute(\"contentEditable\",\"false\")},20),this.view.domObserver.start()),e.root.addEventListener(\"mouseup\",this.up=this.up.bind(this)),e.root.addEventListener(\"mousemove\",this.move=this.move.bind(this)),Ot(e,\"pointer\")}done(){this.view.root.removeEventListener(\"mouseup\",this.up),this.view.root.removeEventListener(\"mousemove\",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute(\"draggable\"),this.mightDrag.setUneditable&&this.target.removeAttribute(\"contentEditable\"),this.view.domObserver.start()),this.delayedSelectionSync&&setTimeout(()=>gt(this.view)),this.view.input.mouseDown=null}up(e){if(this.done(),!this.view.dom.contains(e.target))return;let n=this.pos;this.view.state.doc!=this.startDoc&&(n=this.view.posAtCoords(Zr(e))),this.updateAllowDefault(e),this.allowDefault||!n?Ot(this.view,\"pointer\"):rg(this.view,n.pos,n.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||we&&this.mightDrag&&!this.mightDrag.node.isAtom||de&&!this.view.state.selection.visible&&Math.min(Math.abs(n.pos-this.view.state.selection.from),Math.abs(n.pos-this.view.state.selection.to))<=2)?(Sn(this.view,I.near(this.view.state.doc.resolve(n.pos)),\"pointer\"),e.preventDefault()):Ot(this.view,\"pointer\")}move(e){this.updateAllowDefault(e),Ot(this.view,\"pointer\"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}};Se.touchstart=t=>{t.input.lastTouch=Date.now(),Bs(t),Ot(t,\"pointer\")};Se.touchmove=t=>{t.input.lastTouch=Date.now(),Ot(t,\"pointer\")};Se.contextmenu=t=>Bs(t);function xd(t,e){return t.composing?!0:we&&Math.abs(e.timeStamp-t.input.compositionEndedAt)<500?(t.input.compositionEndedAt=-2e8,!0):!1}var lg=mt?5e3:-1;Ce.compositionstart=Ce.compositionupdate=t=>{if(!t.composing){t.domObserver.flush();let{state:e}=t,n=e.selection.$to;if(e.selection instanceof D&&(e.storedMarks||!n.textOffset&&n.parentOffset&&n.nodeBefore.marks.some(r=>r.type.spec.inclusive===!1)||de&&Zc&&ag(t)))t.markCursor=t.state.storedMarks||n.marks(),qr(t,!0),t.markCursor=null;else if(qr(t,!e.selection.empty),Pe&&e.selection.empty&&n.parentOffset&&!n.textOffset&&n.nodeBefore.marks.length){let r=t.domSelectionRange();for(let o=r.focusNode,i=r.focusOffset;o&&o.nodeType==1&&i!=0;){let s=i<0?o.lastChild:o.childNodes[i-1];if(!s)break;if(s.nodeType==3){let l=t.domSelection();l&&l.collapse(s,s.nodeValue.length);break}else o=s,i=-1}}t.input.composing=!0}kd(t,lg)};function ag(t){let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(!e||e.nodeType!=1||n>=e.childNodes.length)return!1;let r=e.childNodes[n];return r.nodeType==1&&r.contentEditable==\"false\"}Ce.compositionend=(t,e)=>{t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=e.timeStamp,t.input.compositionPendingChanges=t.domObserver.pendingRecords().length?t.input.compositionID:0,t.input.compositionNode=null,t.input.compositionPendingChanges&&Promise.resolve().then(()=>t.domObserver.flush()),t.input.compositionID++,kd(t,20))};function kd(t,e){clearTimeout(t.input.composingTimeout),e>-1&&(t.input.composingTimeout=setTimeout(()=>qr(t),e))}function Sd(t){for(t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=dg());t.input.compositionNodes.length>0;)t.input.compositionNodes.pop().markParentsDirty()}function cg(t){let e=t.domSelectionRange();if(!e.focusNode)return null;let n=sm(e.focusNode,e.focusOffset),r=lm(e.focusNode,e.focusOffset);if(n&&r&&n!=r){let o=r.pmViewDesc,i=t.domObserver.lastChangedTextNode;if(n==i||r==i)return i;if(!o||!o.isText(r.nodeValue))return r;if(t.input.compositionNode==r){let s=n.pmViewDesc;if(!(!s||!s.isText(n.nodeValue)))return r}}return n||r}function dg(){let t=document.createEvent(\"Event\");return t.initEvent(\"event\",!0,!0),t.timeStamp}function qr(t,e=!1){if(!(mt&&t.domObserver.flushingSoon>=0)){if(t.domObserver.forceFlush(),Sd(t),e||t.docView&&t.docView.dirty){let n=Rs(t),r=t.state.selection;return n&&!n.eq(r)?t.dispatch(t.state.tr.setSelection(n)):(t.markCursor||e)&&!r.$from.node(r.$from.sharedDepth(r.to)).inlineContent?t.dispatch(t.state.tr.deleteSelection()):t.updateState(t.state),!0}return!1}}function ug(t,e){if(!t.dom.parentNode)return;let n=t.dom.parentNode.appendChild(document.createElement(\"div\"));n.appendChild(e),n.style.cssText=\"position: fixed; left: -10000px; top: 10px\";let r=getSelection(),o=document.createRange();o.selectNodeContents(e),t.dom.blur(),r.removeAllRanges(),r.addRange(o),setTimeout(()=>{n.parentNode&&n.parentNode.removeChild(n),t.focus()},50)}var Qn=ve&&Rt<15||vn&&um<604;Se.copy=Ce.cut=(t,e)=>{let n=e,r=t.state.selection,o=n.type==\"cut\";if(r.empty)return;let i=Qn?null:n.clipboardData,s=r.content(),{dom:l,text:a}=Is(t,s);i?(n.preventDefault(),i.clearData(),i.setData(\"text/html\",l.innerHTML),i.setData(\"text/plain\",a)):ug(t,l),o&&t.dispatch(t.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\",\"cut\"))};function fg(t){return t.openStart==0&&t.openEnd==0&&t.content.childCount==1?t.content.firstChild:null}function hg(t,e){if(!t.dom.parentNode)return;let n=t.input.shiftKey||t.state.selection.$from.parent.type.spec.code,r=t.dom.parentNode.appendChild(document.createElement(n?\"textarea\":\"div\"));n||(r.contentEditable=\"true\"),r.style.cssText=\"position: fixed; left: -10000px; top: 10px\",r.focus();let o=t.input.shiftKey&&t.input.lastKeyCode!=45;setTimeout(()=>{t.focus(),r.parentNode&&r.parentNode.removeChild(r),n?Zn(t,r.value,null,o,e):Zn(t,r.textContent,r.innerHTML,o,e)},50)}function Zn(t,e,n,r,o){let i=hd(t,e,n,r,t.state.selection.$from);if(t.someProp(\"handlePaste\",a=>a(t,o,i||E.empty)))return!0;if(!i)return!1;let s=fg(i),l=s?t.state.tr.replaceSelectionWith(s,r):t.state.tr.replaceSelection(i);return t.dispatch(l.scrollIntoView().setMeta(\"paste\",!0).setMeta(\"uiEvent\",\"paste\")),!0}function Cd(t){let e=t.getData(\"text/plain\")||t.getData(\"Text\");if(e)return e;let n=t.getData(\"text/uri-list\");return n?n.replace(/\\r?\\n/g,\" \"):\"\"}Ce.paste=(t,e)=>{let n=e;if(t.composing&&!mt)return;let r=Qn?null:n.clipboardData,o=t.input.shiftKey&&t.input.lastKeyCode!=45;r&&Zn(t,Cd(r),r.getData(\"text/html\"),o,n)?n.preventDefault():hg(t,n)};var Jr=class{constructor(e,n,r){this.slice=e,this.move=n,this.node=r}},pg=De?\"altKey\":\"ctrlKey\";function vd(t,e){let n=t.someProp(\"dragCopies\",r=>!r(e));return n??!e[pg]}Se.dragstart=(t,e)=>{let n=e,r=t.input.mouseDown;if(r&&r.done(),!n.dataTransfer)return;let o=t.state.selection,i=o.empty?null:t.posAtCoords(Zr(n)),s;if(!(i&&i.pos>=o.from&&i.pos<=(o instanceof L?o.to-1:o.to))){if(r&&r.mightDrag)s=L.create(t.state.doc,r.mightDrag.pos);else if(n.target&&n.target.nodeType==1){let u=t.docView.nearestDesc(n.target,!0);u&&u.node.type.spec.draggable&&u!=t.docView&&(s=L.create(t.state.doc,u.posBefore))}}let l=(s||t.state.selection).content(),{dom:a,text:c,slice:d}=Is(t,l);(!n.dataTransfer.files.length||!de||Qc>120)&&n.dataTransfer.clearData(),n.dataTransfer.setData(Qn?\"Text\":\"text/html\",a.innerHTML),n.dataTransfer.effectAllowed=\"copyMove\",Qn||n.dataTransfer.setData(\"text/plain\",c),t.dragging=new Jr(d,vd(t,n),s)};Se.dragend=t=>{let e=t.dragging;window.setTimeout(()=>{t.dragging==e&&(t.dragging=null)},50)};Ce.dragover=Ce.dragenter=(t,e)=>e.preventDefault();Ce.drop=(t,e)=>{try{mg(t,e,t.dragging)}finally{t.dragging=null}};function mg(t,e,n){if(!e.dataTransfer)return;let r=t.posAtCoords(Zr(e));if(!r)return;let o=t.state.doc.resolve(r.pos),i=n&&n.slice;i?t.someProp(\"transformPasted\",h=>{i=h(i,t,!1)}):i=hd(t,Cd(e.dataTransfer),Qn?null:e.dataTransfer.getData(\"text/html\"),!1,o);let s=!!(n&&vd(t,e));if(t.someProp(\"handleDrop\",h=>h(t,e,i||E.empty,s))){e.preventDefault();return}if(!i)return;e.preventDefault();let l=i?zr(t.state.doc,o.pos,i):o.pos;l==null&&(l=o.pos);let a=t.state.tr;if(s){let{node:h}=n;h?h.replace(a):a.deleteSelection()}let c=a.mapping.map(l),d=i.openStart==0&&i.openEnd==0&&i.content.childCount==1,u=a.doc;if(d?a.replaceRangeWith(c,c,i.content.firstChild):a.replaceRange(c,c,i),a.doc.eq(u))return;let f=a.doc.resolve(c);if(d&&L.isSelectable(i.content.firstChild)&&f.nodeAfter&&f.nodeAfter.sameMarkup(i.content.firstChild))a.setSelection(new L(f));else{let h=a.mapping.map(l);a.mapping.maps[a.mapping.maps.length-1].forEach((p,m,g,y)=>h=y),a.setSelection(Ds(t,f,a.doc.resolve(h)))}t.focus(),t.dispatch(a.setMeta(\"uiEvent\",\"drop\"))}Se.focus=t=>{t.input.lastFocus=Date.now(),t.focused||(t.domObserver.stop(),t.dom.classList.add(\"ProseMirror-focused\"),t.domObserver.start(),t.focused=!0,setTimeout(()=>{t.docView&&t.hasFocus()&&!t.domObserver.currentSelection.eq(t.domSelectionRange())&&gt(t)},20))};Se.blur=(t,e)=>{let n=e;t.focused&&(t.domObserver.stop(),t.dom.classList.remove(\"ProseMirror-focused\"),t.domObserver.start(),n.relatedTarget&&t.dom.contains(n.relatedTarget)&&t.domObserver.currentSelection.clear(),t.focused=!1)};Se.beforeinput=(t,e)=>{if(de&&mt&&e.inputType==\"deleteContentBackward\"){t.domObserver.flushSoon();let{domChangeCount:r}=t.input;setTimeout(()=>{if(t.input.domChangeCount!=r||(t.dom.blur(),t.focus(),t.someProp(\"handleKeyDown\",i=>i(t,Ut(8,\"Backspace\")))))return;let{$cursor:o}=t.state.selection;o&&o.pos>0&&t.dispatch(t.state.tr.delete(o.pos-1,o.pos).scrollIntoView())},50)}};for(let t in Ce)Se[t]=Ce[t];function er(t,e){if(t==e)return!0;for(let n in t)if(t[n]!==e[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}var Gr=class t{constructor(e,n){this.toDOM=e,this.spec=n||Gt,this.side=this.spec.side||0}map(e,n,r,o){let{pos:i,deleted:s}=e.mapResult(n.from+o,this.side<0?-1:1);return s?null:new te(i-r,i-r,this)}valid(){return!0}eq(e){return this==e||e instanceof t&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&er(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}},Jt=class t{constructor(e,n){this.attrs=e,this.spec=n||Gt}map(e,n,r,o){let i=e.map(n.from+o,this.spec.inclusiveStart?-1:1)-r,s=e.map(n.to+o,this.spec.inclusiveEnd?1:-1)-r;return i>=s?null:new te(i,s,this)}valid(e,n){return n.from<n.to}eq(e){return this==e||e instanceof t&&er(this.attrs,e.attrs)&&er(this.spec,e.spec)}static is(e){return e.type instanceof t}destroy(){}},As=class t{constructor(e,n){this.attrs=e,this.spec=n||Gt}map(e,n,r,o){let i=e.mapResult(n.from+o,1);if(i.deleted)return null;let s=e.mapResult(n.to+o,-1);return s.deleted||s.pos<=i.pos?null:new te(i.pos-r,s.pos-r,this)}valid(e,n){let{index:r,offset:o}=e.content.findIndex(n.from),i;return o==n.from&&!(i=e.child(r)).isText&&o+i.nodeSize==n.to}eq(e){return this==e||e instanceof t&&er(this.attrs,e.attrs)&&er(this.spec,e.spec)}destroy(){}},te=class t{constructor(e,n,r){this.from=e,this.to=n,this.type=r}copy(e,n){return new t(e,n,this.type)}eq(e,n=0){return this.type.eq(e.type)&&this.from+n==e.from&&this.to+n==e.to}map(e,n,r){return this.type.map(e,this,n,r)}static widget(e,n,r){return new t(e,e,new Gr(n,r))}static inline(e,n,r,o){return new t(e,n,new Jt(r,o))}static node(e,n,r,o){return new t(e,n,new As(r,o))}get spec(){return this.type.spec}get inline(){return this.type instanceof Jt}get widget(){return this.type instanceof Gr}},kn=[],Gt={},Y=class t{constructor(e,n){this.local=e.length?e:kn,this.children=n.length?n:kn}static create(e,n){return n.length?Yr(n,e,0,Gt):be}find(e,n,r){let o=[];return this.findInner(e??0,n??1e9,o,0,r),o}findInner(e,n,r,o,i){for(let s=0;s<this.local.length;s++){let l=this.local[s];l.from<=n&&l.to>=e&&(!i||i(l.spec))&&r.push(l.copy(l.from+o,l.to+o))}for(let s=0;s<this.children.length;s+=3)if(this.children[s]<n&&this.children[s+1]>e){let l=this.children[s]+1;this.children[s+2].findInner(e-l,n-l,r,o+l,i)}}map(e,n,r){return this==be||e.maps.length==0?this:this.mapInner(e,n,0,0,r||Gt)}mapInner(e,n,r,o,i){let s;for(let l=0;l<this.local.length;l++){let a=this.local[l].map(e,r,o);a&&a.type.valid(n,a)?(s||(s=[])).push(a):i.onRemove&&i.onRemove(this.local[l].spec)}return this.children.length?gg(this.children,s||[],e,n,r,o,i):s?new t(s.sort(Xt),kn):be}add(e,n){return n.length?this==be?t.create(e,n):this.addInner(e,n,0):this}addInner(e,n,r){let o,i=0;e.forEach((l,a)=>{let c=a+r,d;if(d=Td(n,l,c)){for(o||(o=this.children.slice());i<o.length&&o[i]<a;)i+=3;o[i]==a?o[i+2]=o[i+2].addInner(l,d,c+1):o.splice(i,0,a,a+l.nodeSize,Yr(d,l,c+1,Gt)),i+=3}});let s=Md(i?Ad(n):n,-r);for(let l=0;l<s.length;l++)s[l].type.valid(e,s[l])||s.splice(l--,1);return new t(s.length?this.local.concat(s).sort(Xt):this.local,o||this.children)}remove(e){return e.length==0||this==be?this:this.removeInner(e,0)}removeInner(e,n){let r=this.children,o=this.local;for(let i=0;i<r.length;i+=3){let s,l=r[i]+n,a=r[i+1]+n;for(let d=0,u;d<e.length;d++)(u=e[d])&&u.from>l&&u.to<a&&(e[d]=null,(s||(s=[])).push(u));if(!s)continue;r==this.children&&(r=this.children.slice());let c=r[i+2].removeInner(s,l+1);c!=be?r[i+2]=c:(r.splice(i,3),i-=3)}if(o.length){for(let i=0,s;i<e.length;i++)if(s=e[i])for(let l=0;l<o.length;l++)o[l].eq(s,n)&&(o==this.local&&(o=this.local.slice()),o.splice(l--,1))}return r==this.children&&o==this.local?this:o.length||r.length?new t(o,r):be}forChild(e,n){if(this==be)return this;if(n.isLeaf)return t.empty;let r,o;for(let l=0;l<this.children.length;l+=3)if(this.children[l]>=e){this.children[l]==e&&(r=this.children[l+2]);break}let i=e+1,s=i+n.content.size;for(let l=0;l<this.local.length;l++){let a=this.local[l];if(a.from<s&&a.to>i&&a.type instanceof Jt){let c=Math.max(i,a.from)-i,d=Math.min(s,a.to)-i;c<d&&(o||(o=[])).push(a.copy(c,d))}}if(o){let l=new t(o.sort(Xt),kn);return r?new Xr([l,r]):l}return r||be}eq(e){if(this==e)return!0;if(!(e instanceof t)||this.local.length!=e.local.length||this.children.length!=e.children.length)return!1;for(let n=0;n<this.local.length;n++)if(!this.local[n].eq(e.local[n]))return!1;for(let n=0;n<this.children.length;n+=3)if(this.children[n]!=e.children[n]||this.children[n+1]!=e.children[n+1]||!this.children[n+2].eq(e.children[n+2]))return!1;return!0}locals(e){return zs(this.localsInner(e))}localsInner(e){if(this==be)return kn;if(e.inlineContent||!this.local.some(Jt.is))return this.local;let n=[];for(let r=0;r<this.local.length;r++)this.local[r].type instanceof Jt||n.push(this.local[r]);return n}forEachSet(e){e(this)}};Y.empty=new Y([],[]);Y.removeOverlap=zs;var be=Y.empty,Xr=class t{constructor(e){this.members=e}map(e,n){let r=this.members.map(o=>o.map(e,n,Gt));return t.from(r)}forChild(e,n){if(n.isLeaf)return Y.empty;let r=[];for(let o=0;o<this.members.length;o++){let i=this.members[o].forChild(e,n);i!=be&&(i instanceof t?r=r.concat(i.members):r.push(i))}return t.from(r)}eq(e){if(!(e instanceof t)||e.members.length!=this.members.length)return!1;for(let n=0;n<this.members.length;n++)if(!this.members[n].eq(e.members[n]))return!1;return!0}locals(e){let n,r=!0;for(let o=0;o<this.members.length;o++){let i=this.members[o].localsInner(e);if(i.length)if(!n)n=i;else{r&&(n=n.slice(),r=!1);for(let s=0;s<i.length;s++)n.push(i[s])}}return n?zs(r?n:n.sort(Xt)):kn}static from(e){switch(e.length){case 0:return be;case 1:return e[0];default:return new t(e.every(n=>n instanceof Y)?e:e.reduce((n,r)=>n.concat(r instanceof Y?r:r.members),[]))}}forEachSet(e){for(let n=0;n<this.members.length;n++)this.members[n].forEachSet(e)}};function gg(t,e,n,r,o,i,s){let l=t.slice();for(let c=0,d=i;c<n.maps.length;c++){let u=0;n.maps[c].forEach((f,h,p,m)=>{let g=m-p-(h-f);for(let y=0;y<l.length;y+=3){let w=l[y+1];if(w<0||f>w+d-u)continue;let b=l[y]+d-u;h>=b?l[y+1]=f<=b?-2:-1:f>=d&&g&&(l[y]+=g,l[y+1]+=g)}u+=g}),d=n.maps[c].map(d,-1)}let a=!1;for(let c=0;c<l.length;c+=3)if(l[c+1]<0){if(l[c+1]==-2){a=!0,l[c+1]=-1;continue}let d=n.map(t[c]+i),u=d-o;if(u<0||u>=r.content.size){a=!0;continue}let f=n.map(t[c+1]+i,-1),h=f-o,{index:p,offset:m}=r.content.findIndex(u),g=r.maybeChild(p);if(g&&m==u&&m+g.nodeSize==h){let y=l[c+2].mapInner(n,g,d+1,t[c]+i+1,s);y!=be?(l[c]=u,l[c+1]=h,l[c+2]=y):(l[c+1]=-2,a=!0)}else a=!0}if(a){let c=yg(l,t,e,n,o,i,s),d=Yr(c,r,0,s);e=d.local;for(let u=0;u<l.length;u+=3)l[u+1]<0&&(l.splice(u,3),u-=3);for(let u=0,f=0;u<d.children.length;u+=3){let h=d.children[u];for(;f<l.length&&l[f]<h;)f+=3;l.splice(f,0,d.children[u],d.children[u+1],d.children[u+2])}}return new Y(e.sort(Xt),l)}function Md(t,e){if(!e||!t.length)return t;let n=[];for(let r=0;r<t.length;r++){let o=t[r];n.push(new te(o.from+e,o.to+e,o.type))}return n}function yg(t,e,n,r,o,i,s){function l(a,c){for(let d=0;d<a.local.length;d++){let u=a.local[d].map(r,o,c);u?n.push(u):s.onRemove&&s.onRemove(a.local[d].spec)}for(let d=0;d<a.children.length;d+=3)l(a.children[d+2],a.children[d]+c+1)}for(let a=0;a<t.length;a+=3)t[a+1]==-1&&l(t[a+2],e[a]+i+1);return n}function Td(t,e,n){if(e.isLeaf)return null;let r=n+e.nodeSize,o=null;for(let i=0,s;i<t.length;i++)(s=t[i])&&s.from>n&&s.to<r&&((o||(o=[])).push(s),t[i]=null);return o}function Ad(t){let e=[];for(let n=0;n<t.length;n++)t[n]!=null&&e.push(t[n]);return e}function Yr(t,e,n,r){let o=[],i=!1;e.forEach((l,a)=>{let c=Td(t,l,a+n);if(c){i=!0;let d=Yr(c,l,n+a+1,r);d!=be&&o.push(a,a+l.nodeSize,d)}});let s=Md(i?Ad(t):t,-n).sort(Xt);for(let l=0;l<s.length;l++)s[l].type.valid(e,s[l])||(r.onRemove&&r.onRemove(s[l].spec),s.splice(l--,1));return s.length||o.length?new Y(s,o):be}function Xt(t,e){return t.from-e.from||t.to-e.to}function zs(t){let e=t;for(let n=0;n<e.length-1;n++){let r=e[n];if(r.from!=r.to)for(let o=n+1;o<e.length;o++){let i=e[o];if(i.from==r.from){i.to!=r.to&&(e==t&&(e=t.slice()),e[o]=i.copy(i.from,r.to),Fc(e,o+1,i.copy(r.to,i.to)));continue}else{i.from<r.to&&(e==t&&(e=t.slice()),e[n]=r.copy(r.from,i.from),Fc(e,o,r.copy(i.from,r.to)));break}}}return e}function Fc(t,e,n){for(;e<t.length&&Xt(n,t[e])>0;)e++;t.splice(e,0,n)}function ds(t){let e=[];return t.someProp(\"decorations\",n=>{let r=n(t.state);r&&r!=be&&e.push(r)}),t.cursorWrapper&&e.push(Y.create(t.state.doc,[t.cursorWrapper.deco])),Xr.from(e)}var bg={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},wg=ve&&Rt<=11,Es=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}set(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}clear(){this.anchorNode=this.focusNode=null}eq(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset}},Ns=class{constructor(e,n){this.view=e,this.handleDOMChange=n,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new Es,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(r=>{for(let o=0;o<r.length;o++)this.queue.push(r[o]);ve&&Rt<=11&&r.some(o=>o.type==\"childList\"&&o.removedNodes.length||o.type==\"characterData\"&&o.oldValue.length>o.target.nodeValue.length)?this.flushSoon():this.flush()}),wg&&(this.onCharData=r=>{this.queue.push({target:r.target,type:\"characterData\",oldValue:r.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this)}flushSoon(){this.flushingSoon<0&&(this.flushingSoon=window.setTimeout(()=>{this.flushingSoon=-1,this.flush()},20))}forceFlush(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())}start(){this.observer&&(this.observer.takeRecords(),this.observer.observe(this.view.dom,bg)),this.onCharData&&this.view.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.connectSelection()}stop(){if(this.observer){let e=this.observer.takeRecords();if(e.length){for(let n=0;n<e.length;n++)this.queue.push(e[n]);window.setTimeout(()=>this.flush(),20)}this.observer.disconnect()}this.onCharData&&this.view.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData),this.disconnectSelection()}connectSelection(){this.view.dom.ownerDocument.addEventListener(\"selectionchange\",this.onSelectionChange)}disconnectSelection(){this.view.dom.ownerDocument.removeEventListener(\"selectionchange\",this.onSelectionChange)}suppressSelectionUpdates(){this.suppressingSelectionUpdates=!0,setTimeout(()=>this.suppressingSelectionUpdates=!1,50)}onSelectionChange(){if(Dc(this.view)){if(this.suppressingSelectionUpdates)return gt(this.view);if(ve&&Rt<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&Yt(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return this.flushSoon()}this.flush()}}setCurSelection(){this.currentSelection.set(this.view.domSelectionRange())}ignoreSelectionChange(e){if(!e.focusNode)return!0;let n=new Set,r;for(let i=e.focusNode;i;i=Cn(i))n.add(i);for(let i=e.anchorNode;i;i=Cn(i))if(n.has(i)){r=i;break}let o=r&&this.view.docView.nearestDesc(r);if(o&&o.ignoreMutation({type:\"selection\",target:r.nodeType==3?r.parentNode:r}))return this.setCurSelection(),!0}pendingRecords(){if(this.observer)for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}flush(){let{view:e}=this;if(!e.docView||this.flushingSoon>-1)return;let n=this.pendingRecords();n.length&&(this.queue=[]);let r=e.domSelectionRange(),o=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(r)&&Dc(e)&&!this.ignoreSelectionChange(r),i=-1,s=-1,l=!1,a=[];if(e.editable)for(let d=0;d<n.length;d++){let u=this.registerMutation(n[d],a);u&&(i=i<0?u.from:Math.min(u.from,i),s=s<0?u.to:Math.max(u.to,s),u.typeOver&&(l=!0))}if(Pe&&a.length){let d=a.filter(u=>u.nodeName==\"BR\");if(d.length==2){let[u,f]=d;u.parentNode&&u.parentNode.parentNode==f.parentNode?f.remove():u.remove()}else{let{focusNode:u}=this.currentSelection;for(let f of d){let h=f.parentNode;h&&h.nodeName==\"LI\"&&(!u||Sg(e,u)!=h)&&f.remove()}}}else if((de||we)&&a.some(d=>d.nodeName==\"BR\")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let d of a)if(d.nodeName==\"BR\"&&d.parentNode){let u=d.nextSibling;u&&u.nodeType==1&&u.contentEditable==\"false\"&&d.parentNode.removeChild(d)}}let c=null;i<0&&o&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)<Date.now()-300&&Qr(r)&&(c=Rs(e))&&c.eq(I.near(e.state.doc.resolve(0),1))?(e.input.lastFocus=0,gt(e),this.currentSelection.set(r),e.scrollToSelection()):(i>-1||o)&&(i>-1&&(e.docView.markDirty(i,s),xg(e)),this.handleDOMChange(i,s,l,a),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(r)||gt(e),this.currentSelection.set(r))}registerMutation(e,n){if(n.indexOf(e.target)>-1)return null;let r=this.view.docView.nearestDesc(e.target);if(e.type==\"attributes\"&&(r==this.view.docView||e.attributeName==\"contenteditable\"||e.attributeName==\"style\"&&!e.oldValue&&!e.target.getAttribute(\"style\"))||!r||r.ignoreMutation(e))return null;if(e.type==\"childList\"){for(let d=0;d<e.addedNodes.length;d++){let u=e.addedNodes[d];n.push(u),u.nodeType==3&&(this.lastChangedTextNode=u)}if(r.contentDOM&&r.contentDOM!=r.dom&&!r.contentDOM.contains(e.target))return{from:r.posBefore,to:r.posAfter};let o=e.previousSibling,i=e.nextSibling;if(ve&&Rt<=11&&e.addedNodes.length)for(let d=0;d<e.addedNodes.length;d++){let{previousSibling:u,nextSibling:f}=e.addedNodes[d];(!u||Array.prototype.indexOf.call(e.addedNodes,u)<0)&&(o=u),(!f||Array.prototype.indexOf.call(e.addedNodes,f)<0)&&(i=f)}let s=o&&o.parentNode==e.target?fe(o)+1:0,l=r.localPosFromDOM(e.target,s,-1),a=i&&i.parentNode==e.target?fe(i):e.target.childNodes.length,c=r.localPosFromDOM(e.target,a,1);return{from:l,to:c}}else return e.type==\"attributes\"?{from:r.posAtStart-r.border,to:r.posAtEnd+r.border}:(this.lastChangedTextNode=e.target,{from:r.posAtStart,to:r.posAtEnd,typeOver:e.target.nodeValue==e.oldValue})}},Vc=new WeakMap,_c=!1;function xg(t){if(!Vc.has(t)&&(Vc.set(t,null),[\"normal\",\"nowrap\",\"pre-line\"].indexOf(getComputedStyle(t.dom).whiteSpace)!==-1)){if(t.requiresGeckoHackNode=Pe,_c)return;console.warn(\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\"),_c=!0}}function Wc(t,e){let n=e.startContainer,r=e.startOffset,o=e.endContainer,i=e.endOffset,s=t.domAtPos(t.state.selection.anchor);return Yt(s.node,s.offset,o,i)&&([n,r,o,i]=[o,i,n,r]),{anchorNode:n,anchorOffset:r,focusNode:o,focusOffset:i}}function kg(t,e){if(e.getComposedRanges){let o=e.getComposedRanges(t.root)[0];if(o)return Wc(t,o)}let n;function r(o){o.preventDefault(),o.stopImmediatePropagation(),n=o.getTargetRanges()[0]}return t.dom.addEventListener(\"beforeinput\",r,!0),document.execCommand(\"indent\"),t.dom.removeEventListener(\"beforeinput\",r,!0),n?Wc(t,n):null}function Sg(t,e){for(let n=e.parentNode;n&&n!=t.dom;n=n.parentNode){let r=t.docView.nearestDesc(n,!0);if(r&&r.node.isBlock)return n}return null}function Cg(t,e,n){let{node:r,fromOffset:o,toOffset:i,from:s,to:l}=t.docView.parseRange(e,n),a=t.domSelectionRange(),c,d=a.anchorNode;if(d&&t.dom.contains(d.nodeType==1?d:d.parentNode)&&(c=[{node:d,offset:a.anchorOffset}],Qr(a)||c.push({node:a.focusNode,offset:a.focusOffset})),de&&t.input.lastKeyCode===8)for(let g=i;g>o;g--){let y=r.childNodes[g-1],w=y.pmViewDesc;if(y.nodeName==\"BR\"&&!w){i=g;break}if(!w||w.size)break}let u=t.state.doc,f=t.someProp(\"domParser\")||Xe.fromSchema(t.state.schema),h=u.resolve(s),p=null,m=f.parse(r,{topNode:h.parent,topMatch:h.parent.contentMatchAt(h.index()),topOpen:!0,from:o,to:i,preserveWhitespace:h.parent.type.whitespace==\"pre\"?\"full\":!0,findPositions:c,ruleFromNode:vg,context:h});if(c&&c[0].pos!=null){let g=c[0].pos,y=c[1]&&c[1].pos;y==null&&(y=g),p={anchor:g+s,head:y+s}}return{doc:m,sel:p,from:s,to:l}}function vg(t){let e=t.pmViewDesc;if(e)return e.parseRule();if(t.nodeName==\"BR\"&&t.parentNode){if(we&&/^(ul|ol)$/i.test(t.parentNode.nodeName)){let n=document.createElement(\"div\");return n.appendChild(document.createElement(\"li\")),{skip:n}}else if(t.parentNode.lastChild==t||we&&/^(tr|table)$/i.test(t.parentNode.nodeName))return{ignore:!0}}else if(t.nodeName==\"IMG\"&&t.getAttribute(\"mark-placeholder\"))return{ignore:!0};return null}var Mg=/^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;function Tg(t,e,n,r,o){let i=t.input.compositionPendingChanges||(t.composing?t.input.compositionID:0);if(t.input.compositionPendingChanges=0,e<0){let k=t.input.lastSelectionTime>Date.now()-50?t.input.lastSelectionOrigin:null,O=Rs(t,k);if(O&&!t.state.selection.eq(O)){if(de&&mt&&t.input.lastKeyCode===13&&Date.now()-100<t.input.lastKeyCodeTime&&t.someProp(\"handleKeyDown\",A=>A(t,Ut(13,\"Enter\"))))return;let T=t.state.tr.setSelection(O);k==\"pointer\"?T.setMeta(\"pointer\",!0):k==\"key\"&&T.scrollIntoView(),i&&T.setMeta(\"composition\",i),t.dispatch(T)}return}let s=t.state.doc.resolve(e),l=s.sharedDepth(n);e=s.before(l+1),n=t.state.doc.resolve(n).after(l+1);let a=t.state.selection,c=Cg(t,e,n),d=t.state.doc,u=d.slice(c.from,c.to),f,h;t.input.lastKeyCode===8&&Date.now()-100<t.input.lastKeyCodeTime?(f=t.state.selection.to,h=\"end\"):(f=t.state.selection.from,h=\"start\"),t.input.lastKeyCode=null;let p=Ng(u.content,c.doc.content,c.from,f,h);if(p&&t.input.domChangeCount++,(vn&&t.input.lastIOSEnter>Date.now()-225||mt)&&o.some(k=>k.nodeType==1&&!Mg.test(k.nodeName))&&(!p||p.endA>=p.endB)&&t.someProp(\"handleKeyDown\",k=>k(t,Ut(13,\"Enter\")))){t.input.lastIOSEnter=0;return}if(!p)if(r&&a instanceof D&&!a.empty&&a.$head.sameParent(a.$anchor)&&!t.composing&&!(c.sel&&c.sel.anchor!=c.sel.head))p={start:a.from,endA:a.to,endB:a.to};else{if(c.sel){let k=jc(t,t.state.doc,c.sel);if(k&&!k.eq(t.state.selection)){let O=t.state.tr.setSelection(k);i&&O.setMeta(\"composition\",i),t.dispatch(O)}}return}t.state.selection.from<t.state.selection.to&&p.start==p.endB&&t.state.selection instanceof D&&(p.start>t.state.selection.from&&p.start<=t.state.selection.from+2&&t.state.selection.from>=c.from?p.start=t.state.selection.from:p.endA<t.state.selection.to&&p.endA>=t.state.selection.to-2&&t.state.selection.to<=c.to&&(p.endB+=t.state.selection.to-p.endA,p.endA=t.state.selection.to)),ve&&Rt<=11&&p.endB==p.start+1&&p.endA==p.start&&p.start>c.from&&c.doc.textBetween(p.start-c.from-1,p.start-c.from+1)==\" \\xA0\"&&(p.start--,p.endA--,p.endB--);let m=c.doc.resolveNoCache(p.start-c.from),g=c.doc.resolveNoCache(p.endB-c.from),y=d.resolve(p.start),w=m.sameParent(g)&&m.parent.inlineContent&&y.end()>=p.endA;if((vn&&t.input.lastIOSEnter>Date.now()-225&&(!w||o.some(k=>k.nodeName==\"DIV\"||k.nodeName==\"P\"))||!w&&m.pos<c.doc.content.size&&(!m.sameParent(g)||!m.parent.inlineContent)&&m.pos<g.pos&&!/\\S/.test(c.doc.textBetween(m.pos,g.pos,\"\",\"\")))&&t.someProp(\"handleKeyDown\",k=>k(t,Ut(13,\"Enter\")))){t.input.lastIOSEnter=0;return}if(t.state.selection.anchor>p.start&&Eg(d,p.start,p.endA,m,g)&&t.someProp(\"handleKeyDown\",k=>k(t,Ut(8,\"Backspace\")))){mt&&de&&t.domObserver.suppressSelectionUpdates();return}de&&p.endB==p.start&&(t.input.lastChromeDelete=Date.now()),mt&&!w&&m.start()!=g.start()&&g.parentOffset==0&&m.depth==g.depth&&c.sel&&c.sel.anchor==c.sel.head&&c.sel.head==p.endA&&(p.endB-=2,g=c.doc.resolveNoCache(p.endB-c.from),setTimeout(()=>{t.someProp(\"handleKeyDown\",function(k){return k(t,Ut(13,\"Enter\"))})},20));let b=p.start,C=p.endA,x=k=>{let O=k||t.state.tr.replace(b,C,c.doc.slice(p.start-c.from,p.endB-c.from));if(c.sel){let T=jc(t,O.doc,c.sel);T&&!(de&&t.composing&&T.empty&&(p.start!=p.endB||t.input.lastChromeDelete<Date.now()-100)&&(T.head==b||T.head==O.mapping.map(C)-1)||ve&&T.empty&&T.head==b)&&O.setSelection(T)}return i&&O.setMeta(\"composition\",i),O.scrollIntoView()},S;if(w)if(m.pos==g.pos){ve&&Rt<=11&&m.parentOffset==0&&(t.domObserver.suppressSelectionUpdates(),setTimeout(()=>gt(t),20));let k=x(t.state.tr.delete(b,C)),O=d.resolve(p.start).marksAcross(d.resolve(p.endA));O&&k.ensureMarks(O),t.dispatch(k)}else if(p.endA==p.endB&&(S=Ag(m.parent.content.cut(m.parentOffset,g.parentOffset),y.parent.content.cut(y.parentOffset,p.endA-y.start())))){let k=x(t.state.tr);S.type==\"add\"?k.addMark(b,C,S.mark):k.removeMark(b,C,S.mark),t.dispatch(k)}else if(m.parent.child(m.index()).isText&&m.index()==g.index()-(g.textOffset?0:1)){let k=m.parent.textBetween(m.parentOffset,g.parentOffset),O=()=>x(t.state.tr.insertText(k,b,C));t.someProp(\"handleTextInput\",T=>T(t,b,C,k,O))||t.dispatch(O())}else t.dispatch(x());else t.dispatch(x())}function jc(t,e,n){return Math.max(n.anchor,n.head)>e.content.size?null:Ds(t,e.resolve(n.anchor),e.resolve(n.head))}function Ag(t,e){let n=t.firstChild.marks,r=e.firstChild.marks,o=n,i=r,s,l,a;for(let d=0;d<r.length;d++)o=r[d].removeFromSet(o);for(let d=0;d<n.length;d++)i=n[d].removeFromSet(i);if(o.length==1&&i.length==0)l=o[0],s=\"add\",a=d=>d.mark(l.addToSet(d.marks));else if(o.length==0&&i.length==1)l=i[0],s=\"remove\",a=d=>d.mark(l.removeFromSet(d.marks));else return null;let c=[];for(let d=0;d<e.childCount;d++)c.push(a(e.child(d)));if(v.from(c).eq(t))return{mark:l,type:s}}function Eg(t,e,n,r,o){if(n-e<=o.pos-r.pos||us(r,!0,!1)<o.pos)return!1;let i=t.resolve(e);if(!r.parent.isTextblock){let l=i.nodeAfter;return l!=null&&n==e+l.nodeSize}if(i.parentOffset<i.parent.content.size||!i.parent.isTextblock)return!1;let s=t.resolve(us(i,!0,!0));return!s.parent.isTextblock||s.pos>n||us(s,!0,!1)<n?!1:r.parent.content.cut(r.parentOffset).eq(s.parent.content)}function us(t,e,n){let r=t.depth,o=e?t.end():t.pos;for(;r>0&&(e||t.indexAfter(r)==t.node(r).childCount);)r--,o++,e=!1;if(n){let i=t.node(r).maybeChild(t.indexAfter(r));for(;i&&!i.isLeaf;)i=i.firstChild,o++}return o}function Ng(t,e,n,r,o){let i=t.findDiffStart(e,n);if(i==null)return null;let{a:s,b:l}=t.findDiffEnd(e,n+t.size,n+e.size);if(o==\"end\"){let a=Math.max(0,i-Math.min(s,l));r-=s+a-i}if(s<i&&t.size<e.size){let a=r<=i&&r>=s?i-r:0;i-=a,i&&i<e.size&&Uc(e.textBetween(i-1,i+1))&&(i+=a?1:-1),l=i+(l-s),s=i}else if(l<i){let a=r<=i&&r>=l?i-r:0;i-=a,i&&i<t.size&&Uc(t.textBetween(i-1,i+1))&&(i+=a?1:-1),s=i+(s-l),l=i}return{start:i,endA:s,endB:l}}function Uc(t){if(t.length!=2)return!1;let e=t.charCodeAt(0),n=t.charCodeAt(1);return e>=56320&&e<=57343&&n>=55296&&n<=56319}var tr=class{constructor(e,n){this._root=null,this.focused=!1,this.trackWrites=null,this.mounted=!1,this.markCursor=null,this.cursorWrapper=null,this.lastSelectedViewDesc=void 0,this.input=new vs,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=n,this.state=n.state,this.directPlugins=n.plugins||[],this.directPlugins.forEach(Xc),this.dispatch=this.dispatch.bind(this),this.dom=e&&e.mount||document.createElement(\"div\"),e&&(e.appendChild?e.appendChild(this.dom):typeof e==\"function\"?e(this.dom):e.mount&&(this.mounted=!0)),this.editable=Jc(this),qc(this),this.nodeViews=Gc(this),this.docView=Tc(this.state.doc,Kc(this),ds(this),this.dom,this),this.domObserver=new Ns(this,(r,o,i,s)=>Tg(this,r,o,i,s)),this.domObserver.start(),Xm(this),this.updatePluginViews()}get composing(){return this.input.composing}get props(){if(this._props.state!=this.state){let e=this._props;this._props={};for(let n in e)this._props[n]=e[n];this._props.state=this.state}return this._props}update(e){e.handleDOMEvents!=this._props.handleDOMEvents&&Ms(this);let n=this._props;this._props=e,e.plugins&&(e.plugins.forEach(Xc),this.directPlugins=e.plugins),this.updateStateInner(e.state,n)}setProps(e){let n={};for(let r in this._props)n[r]=this._props[r];n.state=this.state;for(let r in e)n[r]=e[r];this.update(n)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,n){var r;let o=this.state,i=!1,s=!1;e.storedMarks&&this.composing&&(Sd(this),s=!0),this.state=e;let l=o.plugins!=e.plugins||this._props.plugins!=n.plugins;if(l||this._props.plugins!=n.plugins||this._props.nodeViews!=n.nodeViews){let h=Gc(this);Rg(h,this.nodeViews)&&(this.nodeViews=h,i=!0)}(l||n.handleDOMEvents!=this._props.handleDOMEvents)&&Ms(this),this.editable=Jc(this),qc(this);let a=ds(this),c=Kc(this),d=o.plugins!=e.plugins&&!o.doc.eq(e.doc)?\"reset\":e.scrollToSelection>o.scrollToSelection?\"to selection\":\"preserve\",u=i||!this.docView.matchesNode(e.doc,c,a);(u||!e.selection.eq(o.selection))&&(s=!0);let f=d==\"preserve\"&&s&&this.dom.style.overflowAnchor==null&&pm(this);if(s){this.domObserver.stop();let h=u&&(ve||de)&&!this.composing&&!o.selection.empty&&!e.selection.empty&&Og(o.selection,e.selection);if(u){let p=de?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=cg(this)),(i||!this.docView.update(e.doc,c,a,this))&&(this.docView.updateOuterDeco(c),this.docView.destroy(),this.docView=Tc(e.doc,c,a,this.dom,this)),p&&!this.trackWrites&&(h=!0)}h||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&Lm(this))?gt(this,h):(dd(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(o),!((r=this.dragging)===null||r===void 0)&&r.node&&!o.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,o),d==\"reset\"?this.dom.scrollTop=0:d==\"to selection\"?this.scrollToSelection():f&&mm(f)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp(\"handleScrollToSelection\",n=>n(this)))if(this.state.selection instanceof L){let n=this.docView.domAfterPos(this.state.selection.from);n.nodeType==1&&xc(this,n.getBoundingClientRect(),e)}else xc(this,this.coordsAtPos(this.state.selection.head,1),e)}}destroyPluginViews(){let e;for(;e=this.pluginViews.pop();)e.destroy&&e.destroy()}updatePluginViews(e){if(!e||e.plugins!=this.state.plugins||this.directPlugins!=this.prevDirectPlugins){this.prevDirectPlugins=this.directPlugins,this.destroyPluginViews();for(let n=0;n<this.directPlugins.length;n++){let r=this.directPlugins[n];r.spec.view&&this.pluginViews.push(r.spec.view(this))}for(let n=0;n<this.state.plugins.length;n++){let r=this.state.plugins[n];r.spec.view&&this.pluginViews.push(r.spec.view(this))}}else for(let n=0;n<this.pluginViews.length;n++){let r=this.pluginViews[n];r.update&&r.update(this,e)}}updateDraggedNode(e,n){let r=e.node,o=-1;if(this.state.doc.nodeAt(r.from)==r.node)o=r.from;else{let i=r.from+(this.state.doc.content.size-n.doc.content.size);(i>0&&this.state.doc.nodeAt(i))==r.node&&(o=i)}this.dragging=new Jr(e.slice,e.move,o<0?void 0:L.create(this.state.doc,o))}someProp(e,n){let r=this._props&&this._props[e],o;if(r!=null&&(o=n?n(r):r))return o;for(let s=0;s<this.directPlugins.length;s++){let l=this.directPlugins[s].props[e];if(l!=null&&(o=n?n(l):l))return o}let i=this.state.plugins;if(i)for(let s=0;s<i.length;s++){let l=i[s].props[e];if(l!=null&&(o=n?n(l):l))return o}}hasFocus(){if(ve){let e=this.root.activeElement;if(e==this.dom)return!0;if(!e||!this.dom.contains(e))return!1;for(;e&&this.dom!=e&&this.dom.contains(e);){if(e.contentEditable==\"false\")return!1;e=e.parentElement}return!0}return this.root.activeElement==this.dom}focus(){this.domObserver.stop(),this.editable&&gm(this.dom),gt(this),this.domObserver.start()}get root(){let e=this._root;if(e==null){for(let n=this.dom.parentNode;n;n=n.parentNode)if(n.nodeType==9||n.nodeType==11&&n.host)return n.getSelection||(Object.getPrototypeOf(n).getSelection=()=>n.ownerDocument.getSelection()),this._root=n}return e||document}updateRoot(){this._root=null}posAtCoords(e){return km(this,e)}coordsAtPos(e,n=1){return od(this,e,n)}domAtPos(e,n=0){return this.docView.domFromPos(e,n)}nodeDOM(e){let n=this.docView.descAt(e);return n?n.nodeDOM:null}posAtDOM(e,n,r=-1){let o=this.docView.posFromDOM(e,n,r);if(o==null)throw new RangeError(\"DOM position not inside the editor\");return o}endOfTextblock(e,n){return Tm(this,n||this.state,e)}pasteHTML(e,n){return Zn(this,\"\",e,!1,n||new ClipboardEvent(\"paste\"))}pasteText(e,n){return Zn(this,e,null,!0,n||new ClipboardEvent(\"paste\"))}serializeForClipboard(e){return Is(this,e)}destroy(){this.docView&&(Ym(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],ds(this),this),this.dom.textContent=\"\"):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,om())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return Zm(this,e)}domSelectionRange(){let e=this.domSelection();return e?we&&this.root.nodeType===11&&cm(this.dom.ownerDocument)==this.dom&&kg(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}};tr.prototype.dispatch=function(t){let e=this._props.dispatchTransaction;e?e.call(this,t):this.updateState(this.state.apply(t))};function Kc(t){let e=Object.create(null);return e.class=\"ProseMirror\",e.contenteditable=String(t.editable),t.someProp(\"attributes\",n=>{if(typeof n==\"function\"&&(n=n(t.state)),n)for(let r in n)r==\"class\"?e.class+=\" \"+n[r]:r==\"style\"?e.style=(e.style?e.style+\";\":\"\")+n[r]:!e[r]&&r!=\"contenteditable\"&&r!=\"nodeName\"&&(e[r]=String(n[r]))}),e.translate||(e.translate=\"no\"),[te.node(0,t.state.doc.content.size,e)]}function qc(t){if(t.markCursor){let e=document.createElement(\"img\");e.className=\"ProseMirror-separator\",e.setAttribute(\"mark-placeholder\",\"true\"),e.setAttribute(\"alt\",\"\"),t.cursorWrapper={dom:e,deco:te.widget(t.state.selection.from,e,{raw:!0,marks:t.markCursor})}}else t.cursorWrapper=null}function Jc(t){return!t.someProp(\"editable\",e=>e(t.state)===!1)}function Og(t,e){let n=Math.min(t.$anchor.sharedDepth(t.head),e.$anchor.sharedDepth(e.head));return t.$anchor.start(n)!=e.$anchor.start(n)}function Gc(t){let e=Object.create(null);function n(r){for(let o in r)Object.prototype.hasOwnProperty.call(e,o)||(e[o]=r[o])}return t.someProp(\"nodeViews\",n),t.someProp(\"markViews\",n),e}function Rg(t,e){let n=0,r=0;for(let o in t){if(t[o]!=e[o])return!0;n++}for(let o in e)r++;return n!=r}function Xc(t){if(t.spec.state||t.spec.filterTransaction||t.spec.appendTransaction)throw new RangeError(\"Plugins passed directly to the view must not have a state component\")}var yt={8:\"Backspace\",9:\"Tab\",10:\"Enter\",12:\"NumLock\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",44:\"PrintScreen\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Meta\",92:\"Meta\",106:\"*\",107:\"+\",108:\",\",109:\"-\",110:\".\",111:\"/\",144:\"NumLock\",145:\"ScrollLock\",160:\"Shift\",161:\"Shift\",162:\"Control\",163:\"Control\",164:\"Alt\",165:\"Alt\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"},to={48:\")\",49:\"!\",50:\"@\",51:\"#\",52:\"$\",53:\"%\",54:\"^\",55:\"&\",56:\"*\",57:\"(\",59:\":\",61:\"+\",173:\"_\",186:\":\",187:\"+\",188:\"<\",189:\"_\",190:\">\",191:\"?\",192:\"~\",219:\"{\",220:\"|\",221:\"}\",222:'\"'},Dg=typeof navigator<\"u\"&&/Mac/.test(navigator.platform),Ig=typeof navigator<\"u\"&&/MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);for(le=0;le<10;le++)yt[48+le]=yt[96+le]=String(le);var le;for(le=1;le<=24;le++)yt[le+111]=\"F\"+le;var le;for(le=65;le<=90;le++)yt[le]=String.fromCharCode(le+32),to[le]=String.fromCharCode(le);var le;for(eo in yt)to.hasOwnProperty(eo)||(to[eo]=yt[eo]);var eo;function Ed(t){var e=Dg&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||Ig&&t.shiftKey&&t.key&&t.key.length==1||t.key==\"Unidentified\",n=!e&&t.key||(t.shiftKey?to:yt)[t.keyCode]||t.key||\"Unidentified\";return n==\"Esc\"&&(n=\"Escape\"),n==\"Del\"&&(n=\"Delete\"),n==\"Left\"&&(n=\"ArrowLeft\"),n==\"Up\"&&(n=\"ArrowUp\"),n==\"Right\"&&(n=\"ArrowRight\"),n==\"Down\"&&(n=\"ArrowDown\"),n}var Pg=typeof navigator<\"u\"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),Lg=typeof navigator<\"u\"&&/Win/.test(navigator.platform);function Bg(t){let e=t.split(/-(?!$)/),n=e[e.length-1];n==\"Space\"&&(n=\" \");let r,o,i,s;for(let l=0;l<e.length-1;l++){let a=e[l];if(/^(cmd|meta|m)$/i.test(a))s=!0;else if(/^a(lt)?$/i.test(a))r=!0;else if(/^(c|ctrl|control)$/i.test(a))o=!0;else if(/^s(hift)?$/i.test(a))i=!0;else if(/^mod$/i.test(a))Pg?s=!0:o=!0;else throw new Error(\"Unrecognized modifier name: \"+a)}return r&&(n=\"Alt-\"+n),o&&(n=\"Ctrl-\"+n),s&&(n=\"Meta-\"+n),i&&(n=\"Shift-\"+n),n}function zg(t){let e=Object.create(null);for(let n in t)e[Bg(n)]=t[n];return e}function Hs(t,e,n=!0){return e.altKey&&(t=\"Alt-\"+t),e.ctrlKey&&(t=\"Ctrl-\"+t),e.metaKey&&(t=\"Meta-\"+t),n&&e.shiftKey&&(t=\"Shift-\"+t),t}function Nd(t){return new P({props:{handleKeyDown:or(t)}})}function or(t){let e=zg(t);return function(n,r){let o=Ed(r),i,s=e[Hs(o,r)];if(s&&s(n.state,n.dispatch,n))return!0;if(o.length==1&&o!=\" \"){if(r.shiftKey){let l=e[Hs(o,r,!1)];if(l&&l(n.state,n.dispatch,n))return!0}if((r.altKey||r.metaKey||r.ctrlKey)&&!(Lg&&r.ctrlKey&&r.altKey)&&(i=yt[r.keyCode])&&i!=o){let l=e[Hs(i,r)];if(l&&l(n.state,n.dispatch,n))return!0}}return!1}}var Hg=Object.defineProperty,js=(t,e)=>{for(var n in e)Hg(t,n,{get:e[n],enumerable:!0})};function co(t){let{state:e,transaction:n}=t,{selection:r}=n,{doc:o}=n,{storedMarks:i}=n;return{...e,apply:e.apply.bind(e),applyTransaction:e.applyTransaction.bind(e),plugins:e.plugins,schema:e.schema,reconfigure:e.reconfigure.bind(e),toJSON:e.toJSON.bind(e),get storedMarks(){return i},get selection(){return r},get doc(){return o},get tr(){return r=n.selection,o=n.doc,i=n.storedMarks,n}}}var uo=class{constructor(t){this.editor=t.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=t.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){let{rawCommands:t,editor:e,state:n}=this,{view:r}=e,{tr:o}=n,i=this.buildProps(o);return Object.fromEntries(Object.entries(t).map(([s,l])=>[s,(...c)=>{let d=l(...c)(i);return!o.getMeta(\"preventDispatch\")&&!this.hasCustomState&&r.dispatch(o),d}]))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(t,e=!0){let{rawCommands:n,editor:r,state:o}=this,{view:i}=r,s=[],l=!!t,a=t||o.tr,c=()=>(!l&&e&&!a.getMeta(\"preventDispatch\")&&!this.hasCustomState&&i.dispatch(a),s.every(u=>u===!0)),d={...Object.fromEntries(Object.entries(n).map(([u,f])=>[u,(...p)=>{let m=this.buildProps(a,e),g=f(...p)(m);return s.push(g),d}])),run:c};return d}createCan(t){let{rawCommands:e,state:n}=this,r=!1,o=t||n.tr,i=this.buildProps(o,r);return{...Object.fromEntries(Object.entries(e).map(([l,a])=>[l,(...c)=>a(...c)({...i,dispatch:void 0})])),chain:()=>this.createChain(o,r)}}buildProps(t,e=!0){let{rawCommands:n,editor:r,state:o}=this,{view:i}=r,s={tr:t,editor:r,view:i,state:co({state:o,transaction:t}),dispatch:e?()=>{}:void 0,chain:()=>this.createChain(t,e),can:()=>this.createCan(t),get commands(){return Object.fromEntries(Object.entries(n).map(([l,a])=>[l,(...c)=>a(...c)(s)]))}};return s}},Hd={};js(Hd,{blur:()=>$g,clearContent:()=>Fg,clearNodes:()=>Vg,command:()=>_g,createParagraphNear:()=>Wg,cut:()=>jg,deleteCurrentNode:()=>Ug,deleteNode:()=>Kg,deleteRange:()=>qg,deleteSelection:()=>Jg,enter:()=>Gg,exitCode:()=>Xg,extendMarkRange:()=>Yg,first:()=>Qg,focus:()=>ey,forEach:()=>ty,insertContent:()=>ny,insertContentAt:()=>iy,joinBackward:()=>ay,joinDown:()=>ly,joinForward:()=>cy,joinItemBackward:()=>dy,joinItemForward:()=>uy,joinTextblockBackward:()=>fy,joinTextblockForward:()=>hy,joinUp:()=>sy,keyboardShortcut:()=>my,lift:()=>gy,liftEmptyBlock:()=>yy,liftListItem:()=>by,newlineInCode:()=>wy,resetAttributes:()=>xy,scrollIntoView:()=>ky,selectAll:()=>Sy,selectNodeBackward:()=>Cy,selectNodeForward:()=>vy,selectParentNode:()=>My,selectTextblockEnd:()=>Ty,selectTextblockStart:()=>Ay,setContent:()=>Ey,setMark:()=>Vy,setMeta:()=>_y,setNode:()=>Wy,setNodeSelection:()=>jy,setTextDirection:()=>Uy,setTextSelection:()=>Ky,sinkListItem:()=>qy,splitBlock:()=>Jy,splitListItem:()=>Gy,toggleList:()=>Xy,toggleMark:()=>Yy,toggleNode:()=>Qy,toggleWrap:()=>Zy,undoInputRule:()=>eb,unsetAllMarks:()=>tb,unsetMark:()=>nb,unsetTextDirection:()=>rb,updateAttributes:()=>ob,wrapIn:()=>ib,wrapInList:()=>sb});var $g=()=>({editor:t,view:e})=>(requestAnimationFrame(()=>{var n;t.isDestroyed||(e.dom.blur(),(n=window?.getSelection())==null||n.removeAllRanges())}),!0),Fg=(t=!0)=>({commands:e})=>e.setContent(\"\",{emitUpdate:t}),Vg=()=>({state:t,tr:e,dispatch:n})=>{let{selection:r}=e,{ranges:o}=r;return n&&o.forEach(({$from:i,$to:s})=>{t.doc.nodesBetween(i.pos,s.pos,(l,a)=>{if(l.type.isText)return;let{doc:c,mapping:d}=e,u=c.resolve(d.map(a)),f=c.resolve(d.map(a+l.nodeSize)),h=u.blockRange(f);if(!h)return;let p=ft(h);if(l.type.isTextblock){let{defaultType:m}=u.parent.contentMatchAt(u.index());e.setNodeMarkup(h.start,m)}(p||p===0)&&e.lift(h,p)})}),!0},_g=t=>e=>t(e),Wg=()=>({state:t,dispatch:e})=>es(t,e),jg=(t,e)=>({editor:n,tr:r})=>{let{state:o}=n,i=o.doc.slice(t.from,t.to);r.deleteRange(t.from,t.to);let s=r.mapping.map(e);return r.insert(s,i.content),r.setSelection(new D(r.doc.resolve(Math.max(s-1,0)))),!0},Ug=()=>({tr:t,dispatch:e})=>{let{selection:n}=t,r=n.$anchor.node();if(r.content.size>0)return!1;let o=t.selection.$anchor;for(let i=o.depth;i>0;i-=1)if(o.node(i).type===r.type){if(e){let l=o.before(i),a=o.after(i);t.delete(l,a).scrollIntoView()}return!0}return!1};function ne(t,e){if(typeof t==\"string\"){if(!e.nodes[t])throw Error(`There is no node type named '${t}'. Maybe you forgot to add the extension?`);return e.nodes[t]}return t}var Kg=t=>({tr:e,state:n,dispatch:r})=>{let o=ne(t,n.schema),i=e.selection.$anchor;for(let s=i.depth;s>0;s-=1)if(i.node(s).type===o){if(r){let a=i.before(s),c=i.after(s);e.delete(a,c).scrollIntoView()}return!0}return!1},qg=t=>({tr:e,dispatch:n})=>{let{from:r,to:o}=t;return n&&e.delete(r,o),!0},Jg=()=>({state:t,dispatch:e})=>Vr(t,e),Gg=()=>({commands:t})=>t.keyboardShortcut(\"Enter\"),Xg=()=>({state:t,dispatch:e})=>Zi(t,e);function Us(t){return Object.prototype.toString.call(t)===\"[object RegExp]\"}function lo(t,e,n={strict:!0}){let r=Object.keys(e);return r.length?r.every(o=>n.strict?e[o]===t[o]:Us(e[o])?e[o].test(t[o]):e[o]===t[o]):!0}function $d(t,e,n={}){return t.find(r=>r.type===e&&lo(Object.fromEntries(Object.keys(n).map(o=>[o,r.attrs[o]])),n))}function Od(t,e,n={}){return!!$d(t,e,n)}function Ks(t,e,n){var r;if(!t||!e)return;let o=t.parent.childAfter(t.parentOffset);if((!o.node||!o.node.marks.some(d=>d.type===e))&&(o=t.parent.childBefore(t.parentOffset)),!o.node||!o.node.marks.some(d=>d.type===e)||(n=n||((r=o.node.marks[0])==null?void 0:r.attrs),!$d([...o.node.marks],e,n)))return;let s=o.index,l=t.start()+o.offset,a=s+1,c=l+o.node.nodeSize;for(;s>0&&Od([...t.parent.child(s-1).marks],e,n);)s-=1,l-=t.parent.child(s).nodeSize;for(;a<t.parent.childCount&&Od([...t.parent.child(a).marks],e,n);)c+=t.parent.child(a).nodeSize,a+=1;return{from:l,to:c}}function wt(t,e){if(typeof t==\"string\"){if(!e.marks[t])throw Error(`There is no mark type named '${t}'. Maybe you forgot to add the extension?`);return e.marks[t]}return t}var Yg=(t,e={})=>({tr:n,state:r,dispatch:o})=>{let i=wt(t,r.schema),{doc:s,selection:l}=n,{$from:a,from:c,to:d}=l;if(o){let u=Ks(a,i,e);if(u&&u.from<=c&&u.to>=d){let f=D.create(s,u.from,u.to);n.setSelection(f)}}return!0},Qg=t=>e=>{let n=typeof t==\"function\"?t(e):t;for(let r=0;r<n.length;r+=1)if(n[r](e))return!0;return!1};function fo(t){return t instanceof D}function bt(t=0,e=0,n=0){return Math.min(Math.max(t,e),n)}function Fd(t,e=null){if(!e)return null;let n=I.atStart(t),r=I.atEnd(t);if(e===\"start\"||e===!0)return n;if(e===\"end\")return r;let o=n.from,i=r.to;return e===\"all\"?D.create(t,bt(0,o,i),bt(t.content.size,o,i)):D.create(t,bt(e,o,i),bt(e,o,i))}function Zg(){return navigator.platform===\"Android\"||/android/i.test(navigator.userAgent)}function qs(){return[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"ontouchend\"in document}var ey=(t=null,e={})=>({editor:n,view:r,tr:o,dispatch:i})=>{e={scrollIntoView:!0,...e};let s=()=>{(qs()||Zg())&&r.dom.focus(),requestAnimationFrame(()=>{n.isDestroyed||(r.focus(),e?.scrollIntoView&&n.commands.scrollIntoView())})};if(r.hasFocus()&&t===null||t===!1)return!0;if(i&&t===null&&!fo(n.state.selection))return s(),!0;let l=Fd(o.doc,t)||n.state.selection,a=n.state.selection.eq(l);return i&&(a||o.setSelection(l),a&&o.storedMarks&&o.setStoredMarks(o.storedMarks),s()),!0},ty=(t,e)=>n=>t.every((r,o)=>e(r,{...n,index:o})),ny=(t,e)=>({tr:n,commands:r})=>r.insertContentAt({from:n.selection.from,to:n.selection.to},t,e),Vd=t=>{let e=t.childNodes;for(let n=e.length-1;n>=0;n-=1){let r=e[n];r.nodeType===3&&r.nodeValue&&/^(\\n\\s\\s|\\n)$/.test(r.nodeValue)?t.removeChild(r):r.nodeType===1&&Vd(r)}return t};function no(t){if(typeof window>\"u\")throw new Error(\"[tiptap error]: there is no window object available, so this function cannot be used\");let e=`<body>${t}</body>`,n=new window.DOMParser().parseFromString(e,\"text/html\").body;return Vd(n)}function ir(t,e,n){if(t instanceof ie||t instanceof v)return t;n={slice:!0,parseOptions:{},...n};let r=typeof t==\"object\"&&t!==null,o=typeof t==\"string\";if(r)try{if(Array.isArray(t)&&t.length>0)return v.fromArray(t.map(l=>e.nodeFromJSON(l)));let s=e.nodeFromJSON(t);return n.errorOnInvalidContent&&s.check(),s}catch(i){if(n.errorOnInvalidContent)throw new Error(\"[tiptap error]: Invalid JSON content\",{cause:i});return console.warn(\"[tiptap warn]: Invalid content.\",\"Passed value:\",t,\"Error:\",i),ir(\"\",e,n)}if(o){if(n.errorOnInvalidContent){let s=!1,l=\"\",a=new fn({topNode:e.spec.topNode,marks:e.spec.marks,nodes:e.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:\"inline*\",group:\"block\",parseDOM:[{tag:\"*\",getAttrs:c=>(s=!0,l=typeof c==\"string\"?c:c.outerHTML,null)}]}})});if(n.slice?Xe.fromSchema(a).parseSlice(no(t),n.parseOptions):Xe.fromSchema(a).parse(no(t),n.parseOptions),n.errorOnInvalidContent&&s)throw new Error(\"[tiptap error]: Invalid HTML content\",{cause:new Error(`Invalid element found: ${l}`)})}let i=Xe.fromSchema(e);return n.slice?i.parseSlice(no(t),n.parseOptions).content:i.parse(no(t),n.parseOptions)}return ir(\"\",e,n)}function ry(t,e,n){let r=t.steps.length-1;if(r<e)return;let o=t.steps[r];if(!(o instanceof ye||o instanceof se))return;let i=t.mapping.maps[r],s=0;i.forEach((l,a,c,d)=>{s===0&&(s=d)}),t.setSelection(I.near(t.doc.resolve(s),n))}var oy=t=>!(\"type\"in t),iy=(t,e,n)=>({tr:r,dispatch:o,editor:i})=>{var s;if(o){n={parseOptions:i.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...n};let l,a=g=>{i.emit(\"contentError\",{editor:i,error:g,disableCollaboration:()=>{\"collaboration\"in i.storage&&typeof i.storage.collaboration==\"object\"&&i.storage.collaboration&&(i.storage.collaboration.isDisabled=!0)}})},c={preserveWhitespace:\"full\",...n.parseOptions};if(!n.errorOnInvalidContent&&!i.options.enableContentCheck&&i.options.emitContentError)try{ir(e,i.schema,{parseOptions:c,errorOnInvalidContent:!0})}catch(g){a(g)}try{l=ir(e,i.schema,{parseOptions:c,errorOnInvalidContent:(s=n.errorOnInvalidContent)!=null?s:i.options.enableContentCheck})}catch(g){return a(g),!1}let{from:d,to:u}=typeof t==\"number\"?{from:t,to:t}:{from:t.from,to:t.to},f=!0,h=!0;if((oy(l)?l:[l]).forEach(g=>{g.check(),f=f?g.isText&&g.marks.length===0:!1,h=h?g.isBlock:!1}),d===u&&h){let{parent:g}=r.doc.resolve(d);g.isTextblock&&!g.type.spec.code&&!g.childCount&&(d-=1,u+=1)}let m;if(f){if(Array.isArray(e))m=e.map(g=>g.text||\"\").join(\"\");else if(e instanceof v){let g=\"\";e.forEach(y=>{y.text&&(g+=y.text)}),m=g}else typeof e==\"object\"&&e&&e.text?m=e.text:m=e;r.insertText(m,d,u)}else{m=l;let g=r.doc.resolve(d),y=g.node(),w=g.parentOffset===0,b=y.isText||y.isTextblock,C=y.content.size>0;w&&b&&C&&(d=Math.max(0,d-1)),r.replaceWith(d,u,m)}n.updateSelection&&ry(r,r.steps.length-1,-1),n.applyInputRules&&r.setMeta(\"applyInputRules\",{from:d,text:m}),n.applyPasteRules&&r.setMeta(\"applyPasteRules\",{from:d,text:m})}return!0},sy=()=>({state:t,dispatch:e})=>ac(t,e),ly=()=>({state:t,dispatch:e})=>cc(t,e),ay=()=>({state:t,dispatch:e})=>Ui(t,e),cy=()=>({state:t,dispatch:e})=>Ji(t,e),dy=()=>({state:t,dispatch:e,tr:n})=>{try{let r=Wt(t.doc,t.selection.$from.pos,-1);return r==null?!1:(n.join(r,2),e&&e(n),!0)}catch{return!1}},uy=()=>({state:t,dispatch:e,tr:n})=>{try{let r=Wt(t.doc,t.selection.$from.pos,1);return r==null?!1:(n.join(r,2),e&&e(n),!0)}catch{return!1}},fy=()=>({state:t,dispatch:e})=>oc(t,e),hy=()=>({state:t,dispatch:e})=>ic(t,e);function _d(){return typeof navigator<\"u\"?/Mac/.test(navigator.platform):!1}function py(t){let e=t.split(/-(?!$)/),n=e[e.length-1];n===\"Space\"&&(n=\" \");let r,o,i,s;for(let l=0;l<e.length-1;l+=1){let a=e[l];if(/^(cmd|meta|m)$/i.test(a))s=!0;else if(/^a(lt)?$/i.test(a))r=!0;else if(/^(c|ctrl|control)$/i.test(a))o=!0;else if(/^s(hift)?$/i.test(a))i=!0;else if(/^mod$/i.test(a))qs()||_d()?s=!0:o=!0;else throw new Error(`Unrecognized modifier name: ${a}`)}return r&&(n=`Alt-${n}`),o&&(n=`Ctrl-${n}`),s&&(n=`Meta-${n}`),i&&(n=`Shift-${n}`),n}var my=t=>({editor:e,view:n,tr:r,dispatch:o})=>{let i=py(t).split(/-(?!$)/),s=i.find(c=>![\"Alt\",\"Ctrl\",\"Meta\",\"Shift\"].includes(c)),l=new KeyboardEvent(\"keydown\",{key:s===\"Space\"?\" \":s,altKey:i.includes(\"Alt\"),ctrlKey:i.includes(\"Ctrl\"),metaKey:i.includes(\"Meta\"),shiftKey:i.includes(\"Shift\"),bubbles:!0,cancelable:!0}),a=e.captureTransaction(()=>{n.someProp(\"handleKeyDown\",c=>c(n,l))});return a?.steps.forEach(c=>{let d=c.map(r.mapping);d&&o&&r.maybeStep(d)}),!0};function Ze(t,e,n={}){let{from:r,to:o,empty:i}=t.selection,s=e?ne(e,t.schema):null,l=[];t.doc.nodesBetween(r,o,(u,f)=>{if(u.isText)return;let h=Math.max(r,f),p=Math.min(o,f+u.nodeSize);l.push({node:u,from:h,to:p})});let a=o-r,c=l.filter(u=>s?s.name===u.node.type.name:!0).filter(u=>lo(u.node.attrs,n,{strict:!1}));return i?!!c.length:c.reduce((u,f)=>u+f.to-f.from,0)>=a}var gy=(t,e={})=>({state:n,dispatch:r})=>{let o=ne(t,n.schema);return Ze(n,o,e)?dc(n,r):!1},yy=()=>({state:t,dispatch:e})=>ts(t,e),by=t=>({state:e,dispatch:n})=>{let r=ne(t,e.schema);return gc(r)(e,n)},wy=()=>({state:t,dispatch:e})=>Yi(t,e);function ho(t,e){return e.nodes[t]?\"node\":e.marks[t]?\"mark\":null}function Rd(t,e){let n=typeof e==\"string\"?[e]:e;return Object.keys(t).reduce((r,o)=>(n.includes(o)||(r[o]=t[o]),r),{})}var xy=(t,e)=>({tr:n,state:r,dispatch:o})=>{let i=null,s=null,l=ho(typeof t==\"string\"?t:t.name,r.schema);if(!l)return!1;l===\"node\"&&(i=ne(t,r.schema)),l===\"mark\"&&(s=wt(t,r.schema));let a=!1;return n.selection.ranges.forEach(c=>{r.doc.nodesBetween(c.$from.pos,c.$to.pos,(d,u)=>{i&&i===d.type&&(a=!0,o&&n.setNodeMarkup(u,void 0,Rd(d.attrs,e))),s&&d.marks.length&&d.marks.forEach(f=>{s===f.type&&(a=!0,o&&n.addMark(u,u+d.nodeSize,s.create(Rd(f.attrs,e))))})})}),a},ky=()=>({tr:t,dispatch:e})=>(e&&t.scrollIntoView(),!0),Sy=()=>({tr:t,dispatch:e})=>{if(e){let n=new ke(t.doc);t.setSelection(n)}return!0},Cy=()=>({state:t,dispatch:e})=>Ki(t,e),vy=()=>({state:t,dispatch:e})=>Gi(t,e),My=()=>({state:t,dispatch:e})=>uc(t,e),Ty=()=>({state:t,dispatch:e})=>rs(t,e),Ay=()=>({state:t,dispatch:e})=>ns(t,e);function _s(t,e,n={},r={}){return ir(t,e,{slice:!1,parseOptions:n,errorOnInvalidContent:r.errorOnInvalidContent})}var Ey=(t,{errorOnInvalidContent:e,emitUpdate:n=!0,parseOptions:r={}}={})=>({editor:o,tr:i,dispatch:s,commands:l})=>{let{doc:a}=i;if(r.preserveWhitespace!==\"full\"){let c=_s(t,o.schema,r,{errorOnInvalidContent:e??o.options.enableContentCheck});return s&&i.replaceWith(0,a.content.size,c).setMeta(\"preventUpdate\",!n),!0}return s&&i.setMeta(\"preventUpdate\",!n),l.insertContentAt({from:0,to:a.content.size},t,{parseOptions:r,errorOnInvalidContent:e??o.options.enableContentCheck})};function Wd(t,e){let n=wt(e,t.schema),{from:r,to:o,empty:i}=t.selection,s=[];i?(t.storedMarks&&s.push(...t.storedMarks),s.push(...t.selection.$head.marks())):t.doc.nodesBetween(r,o,a=>{s.push(...a.marks)});let l=s.find(a=>a.type.name===n.name);return l?{...l.attrs}:{}}function Js(t,e){let n=new Tt(t);return e.forEach(r=>{r.steps.forEach(o=>{n.step(o)})}),n}function sr(t){for(let e=0;e<t.edgeCount;e+=1){let{type:n}=t.edge(e);if(n.isTextblock&&!n.hasRequiredAttrs())return n}return null}function En(t,e){let n=[];return t.descendants((r,o)=>{e(r)&&n.push({node:r,pos:o})}),n}function jd(t,e,n){let r=[];return t.nodesBetween(e.from,e.to,(o,i)=>{n(o)&&r.push({node:o,pos:i})}),r}function Gs(t,e){for(let n=t.depth;n>0;n-=1){let r=t.node(n);if(e(r))return{pos:n>0?t.before(n):0,start:t.start(n),depth:n,node:r}}}function et(t){return e=>Gs(e.$from,t)}function B(t,e,n){return t.config[e]===void 0&&t.parent?B(t.parent,e,n):typeof t.config[e]==\"function\"?t.config[e].bind({...n,parent:t.parent?B(t.parent,e,n):null}):t.config[e]}function Xs(t){return t.map(e=>{let n={name:e.name,options:e.options,storage:e.storage},r=B(e,\"addExtensions\",n);return r?[e,...Xs(r())]:e}).flat(10)}function Ys(t,e){let n=ct.fromSchema(e).serializeFragment(t),o=document.implementation.createHTMLDocument().createElement(\"div\");return o.appendChild(n),o.innerHTML}function Ud(t){return typeof t==\"function\"}function G(t,e=void 0,...n){return Ud(t)?e?t.bind(e)(...n):t(...n):t}function Ny(t={}){return Object.keys(t).length===0&&t.constructor===Object}function An(t){let e=t.filter(o=>o.type===\"extension\"),n=t.filter(o=>o.type===\"node\"),r=t.filter(o=>o.type===\"mark\");return{baseExtensions:e,nodeExtensions:n,markExtensions:r}}function Kd(t){let e=[],{nodeExtensions:n,markExtensions:r}=An(t),o=[...n,...r],i={default:null,validate:void 0,rendered:!0,renderHTML:null,parseHTML:null,keepOnSplit:!0,isRequired:!1};return t.forEach(s=>{let l={name:s.name,options:s.options,storage:s.storage,extensions:o},a=B(s,\"addGlobalAttributes\",l);if(!a)return;a().forEach(d=>{d.types.forEach(u=>{Object.entries(d.attributes).forEach(([f,h])=>{e.push({type:u,name:f,attribute:{...i,...h}})})})})}),o.forEach(s=>{let l={name:s.name,options:s.options,storage:s.storage},a=B(s,\"addAttributes\",l);if(!a)return;let c=a();Object.entries(c).forEach(([d,u])=>{let f={...i,...u};typeof f?.default==\"function\"&&(f.default=f.default()),f?.isRequired&&f?.default===void 0&&delete f.default,e.push({type:s.name,name:d,attribute:f})})}),e}function R(...t){return t.filter(e=>!!e).reduce((e,n)=>{let r={...e};return Object.entries(n).forEach(([o,i])=>{if(!r[o]){r[o]=i;return}if(o===\"class\"){let l=i?String(i).split(\" \"):[],a=r[o]?r[o].split(\" \"):[],c=l.filter(d=>!a.includes(d));r[o]=[...a,...c].join(\" \")}else if(o===\"style\"){let l=i?i.split(\";\").map(d=>d.trim()).filter(Boolean):[],a=r[o]?r[o].split(\";\").map(d=>d.trim()).filter(Boolean):[],c=new Map;a.forEach(d=>{let[u,f]=d.split(\":\").map(h=>h.trim());c.set(u,f)}),l.forEach(d=>{let[u,f]=d.split(\":\").map(h=>h.trim());c.set(u,f)}),r[o]=Array.from(c.entries()).map(([d,u])=>`${d}: ${u}`).join(\"; \")}else r[o]=i}),r},{})}function ao(t,e){return e.filter(n=>n.type===t.type.name).filter(n=>n.attribute.rendered).map(n=>n.attribute.renderHTML?n.attribute.renderHTML(t.attrs)||{}:{[n.name]:t.attrs[n.name]}).reduce((n,r)=>R(n,r),{})}function Oy(t){return typeof t!=\"string\"?t:t.match(/^[+-]?(?:\\d*\\.)?\\d+$/)?Number(t):t===\"true\"?!0:t===\"false\"?!1:t}function Dd(t,e){return\"style\"in t?t:{...t,getAttrs:n=>{let r=t.getAttrs?t.getAttrs(n):t.attrs;if(r===!1)return!1;let o=e.reduce((i,s)=>{let l=s.attribute.parseHTML?s.attribute.parseHTML(n):Oy(n.getAttribute(s.name));return l==null?i:{...i,[s.name]:l}},{});return{...r,...o}}}}function Id(t){return Object.fromEntries(Object.entries(t).filter(([e,n])=>e===\"attrs\"&&Ny(n)?!1:n!=null))}function Pd(t){var e,n;let r={};return!((e=t?.attribute)!=null&&e.isRequired)&&\"default\"in(t?.attribute||{})&&(r.default=t.attribute.default),((n=t?.attribute)==null?void 0:n.validate)!==void 0&&(r.validate=t.attribute.validate),[t.name,r]}function Ry(t,e){var n;let r=Kd(t),{nodeExtensions:o,markExtensions:i}=An(t),s=(n=o.find(c=>B(c,\"topNode\")))==null?void 0:n.name,l=Object.fromEntries(o.map(c=>{let d=r.filter(y=>y.type===c.name),u={name:c.name,options:c.options,storage:c.storage,editor:e},f=t.reduce((y,w)=>{let b=B(w,\"extendNodeSchema\",u);return{...y,...b?b(c):{}}},{}),h=Id({...f,content:G(B(c,\"content\",u)),marks:G(B(c,\"marks\",u)),group:G(B(c,\"group\",u)),inline:G(B(c,\"inline\",u)),atom:G(B(c,\"atom\",u)),selectable:G(B(c,\"selectable\",u)),draggable:G(B(c,\"draggable\",u)),code:G(B(c,\"code\",u)),whitespace:G(B(c,\"whitespace\",u)),linebreakReplacement:G(B(c,\"linebreakReplacement\",u)),defining:G(B(c,\"defining\",u)),isolating:G(B(c,\"isolating\",u)),attrs:Object.fromEntries(d.map(Pd))}),p=G(B(c,\"parseHTML\",u));p&&(h.parseDOM=p.map(y=>Dd(y,d)));let m=B(c,\"renderHTML\",u);m&&(h.toDOM=y=>m({node:y,HTMLAttributes:ao(y,d)}));let g=B(c,\"renderText\",u);return g&&(h.toText=g),[c.name,h]})),a=Object.fromEntries(i.map(c=>{let d=r.filter(g=>g.type===c.name),u={name:c.name,options:c.options,storage:c.storage,editor:e},f=t.reduce((g,y)=>{let w=B(y,\"extendMarkSchema\",u);return{...g,...w?w(c):{}}},{}),h=Id({...f,inclusive:G(B(c,\"inclusive\",u)),excludes:G(B(c,\"excludes\",u)),group:G(B(c,\"group\",u)),spanning:G(B(c,\"spanning\",u)),code:G(B(c,\"code\",u)),attrs:Object.fromEntries(d.map(Pd))}),p=G(B(c,\"parseHTML\",u));p&&(h.parseDOM=p.map(g=>Dd(g,d)));let m=B(c,\"renderHTML\",u);return m&&(h.toDOM=g=>m({mark:g,HTMLAttributes:ao(g,d)})),[c.name,h]}));return new fn({topNode:s,nodes:l,marks:a})}function Dy(t){let e=t.filter((n,r)=>t.indexOf(n)!==r);return Array.from(new Set(e))}function Qs(t){return t.sort((n,r)=>{let o=B(n,\"priority\")||100,i=B(r,\"priority\")||100;return o>i?-1:o<i?1:0})}function qd(t){let e=Qs(Xs(t)),n=Dy(e.map(r=>r.name));return n.length&&console.warn(`[tiptap warn]: Duplicate extension names found: [${n.map(r=>`'${r}'`).join(\", \")}]. This can lead to issues.`),e}function Jd(t,e,n){let{from:r,to:o}=e,{blockSeparator:i=`\n\n`,textSerializers:s={}}=n||{},l=\"\";return t.nodesBetween(r,o,(a,c,d,u)=>{var f;a.isBlock&&c>r&&(l+=i);let h=s?.[a.type.name];if(h)return d&&(l+=h({node:a,pos:c,parent:d,index:u,range:e})),!1;a.isText&&(l+=(f=a?.text)==null?void 0:f.slice(Math.max(r,c)-c,o-c))}),l}function Iy(t,e){let n={from:0,to:t.content.size};return Jd(t,n,e)}function Gd(t){return Object.fromEntries(Object.entries(t.nodes).filter(([,e])=>e.spec.toText).map(([e,n])=>[e,n.spec.toText]))}function Py(t,e){let n=ne(e,t.schema),{from:r,to:o}=t.selection,i=[];t.doc.nodesBetween(r,o,l=>{i.push(l)});let s=i.reverse().find(l=>l.type.name===n.name);return s?{...s.attrs}:{}}function Zs(t,e){let n=ho(typeof e==\"string\"?e:e.name,t.schema);return n===\"node\"?Py(t,e):n===\"mark\"?Wd(t,e):{}}function Ly(t,e=JSON.stringify){let n={};return t.filter(r=>{let o=e(r);return Object.prototype.hasOwnProperty.call(n,o)?!1:n[o]=!0})}function By(t){let e=Ly(t);return e.length===1?e:e.filter((n,r)=>!e.filter((i,s)=>s!==r).some(i=>n.oldRange.from>=i.oldRange.from&&n.oldRange.to<=i.oldRange.to&&n.newRange.from>=i.newRange.from&&n.newRange.to<=i.newRange.to))}function el(t){let{mapping:e,steps:n}=t,r=[];return e.maps.forEach((o,i)=>{let s=[];if(o.ranges.length)o.forEach((l,a)=>{s.push({from:l,to:a})});else{let{from:l,to:a}=n[i];if(l===void 0||a===void 0)return;s.push({from:l,to:a})}s.forEach(({from:l,to:a})=>{let c=e.slice(i).map(l,-1),d=e.slice(i).map(a),u=e.invert().map(c,-1),f=e.invert().map(d);r.push({oldRange:{from:u,to:f},newRange:{from:c,to:d}})})}),By(r)}function po(t,e,n){let r=[];return t===e?n.resolve(t).marks().forEach(o=>{let i=n.resolve(t),s=Ks(i,o.type);s&&r.push({mark:o,...s})}):n.nodesBetween(t,e,(o,i)=>{!o||o?.nodeSize===void 0||r.push(...o.marks.map(s=>({from:i,to:i+o.nodeSize,mark:s})))}),r}var Xd=(t,e,n,r=20)=>{let o=t.doc.resolve(n),i=r,s=null;for(;i>0&&s===null;){let l=o.node(i);l?.type.name===e?s=l:i-=1}return[s,i]};function $s(t,e){return e.nodes[t]||e.marks[t]||null}function so(t,e,n){return Object.fromEntries(Object.entries(n).filter(([r])=>{let o=t.find(i=>i.type===e&&i.name===r);return o?o.attribute.keepOnSplit:!1}))}var zy=(t,e=500)=>{let n=\"\",r=t.parentOffset;return t.parent.nodesBetween(Math.max(0,r-e),r,(o,i,s,l)=>{var a,c;let d=((c=(a=o.type.spec).toText)==null?void 0:c.call(a,{node:o,pos:i,parent:s,index:l}))||o.textContent||\"%leaf%\";n+=o.isAtom&&!o.isText?d:d.slice(0,Math.max(0,r-i))}),n};function Ws(t,e,n={}){let{empty:r,ranges:o}=t.selection,i=e?wt(e,t.schema):null;if(r)return!!(t.storedMarks||t.selection.$from.marks()).filter(u=>i?i.name===u.type.name:!0).find(u=>lo(u.attrs,n,{strict:!1}));let s=0,l=[];if(o.forEach(({$from:u,$to:f})=>{let h=u.pos,p=f.pos;t.doc.nodesBetween(h,p,(m,g)=>{if(!m.isText&&!m.marks.length)return;let y=Math.max(h,g),w=Math.min(p,g+m.nodeSize),b=w-y;s+=b,l.push(...m.marks.map(C=>({mark:C,from:y,to:w})))})}),s===0)return!1;let a=l.filter(u=>i?i.name===u.mark.type.name:!0).filter(u=>lo(u.mark.attrs,n,{strict:!1})).reduce((u,f)=>u+f.to-f.from,0),c=l.filter(u=>i?u.mark.type!==i&&u.mark.type.excludes(i):!0).reduce((u,f)=>u+f.to-f.from,0);return(a>0?a+c:a)>=s}function tl(t,e,n={}){if(!e)return Ze(t,null,n)||Ws(t,null,n);let r=ho(e,t.schema);return r===\"node\"?Ze(t,e,n):r===\"mark\"?Ws(t,e,n):!1}var Yd=(t,e)=>{let{$from:n,$to:r,$anchor:o}=t.selection;if(e){let i=et(l=>l.type.name===e)(t.selection);if(!i)return!1;let s=t.doc.resolve(i.pos+1);return o.pos+1===s.end()}return!(r.parentOffset<r.parent.nodeSize-2||n.pos!==r.pos)},Qd=t=>{let{$from:e,$to:n}=t.selection;return!(e.parentOffset>0||e.pos!==n.pos)};function Ld(t,e){return Array.isArray(e)?e.some(n=>(typeof n==\"string\"?n:n.name)===t.name):e}function Bd(t,e){let{nodeExtensions:n}=An(e),r=n.find(s=>s.name===t);if(!r)return!1;let o={name:r.name,options:r.options,storage:r.storage},i=G(B(r,\"group\",o));return typeof i!=\"string\"?!1:i.split(\" \").includes(\"list\")}function lr(t,{checkChildren:e=!0,ignoreWhitespace:n=!1}={}){var r;if(n){if(t.type.name===\"hardBreak\")return!0;if(t.isText)return/^\\s*$/m.test((r=t.text)!=null?r:\"\")}if(t.isText)return!t.text;if(t.isAtom||t.isLeaf)return!1;if(t.content.childCount===0)return!0;if(e){let o=!0;return t.content.forEach(i=>{o!==!1&&(lr(i,{ignoreWhitespace:n,checkChildren:e})||(o=!1))}),o}return!1}function mo(t){return t instanceof L}var Zd=class eu{constructor(e){this.position=e}static fromJSON(e){return new eu(e.position)}toJSON(){return{position:this.position}}};function Hy(t,e){let n=e.mapping.mapResult(t.position);return{position:new Zd(n.pos),mapResult:n}}function $y(t){return new Zd(t)}function tu(t,e,n){let o=t.state.doc.content.size,i=bt(e,0,o),s=bt(n,0,o),l=t.coordsAtPos(i),a=t.coordsAtPos(s,-1),c=Math.min(l.top,a.top),d=Math.max(l.bottom,a.bottom),u=Math.min(l.left,a.left),f=Math.max(l.right,a.right),h=f-u,p=d-c,y={top:c,bottom:d,left:u,right:f,width:h,height:p,x:u,y:c};return{...y,toJSON:()=>y}}function Fy(t,e,n){var r;let{selection:o}=e,i=null;if(fo(o)&&(i=o.$cursor),i){let l=(r=t.storedMarks)!=null?r:i.marks();return i.parent.type.allowsMarkType(n)&&(!!n.isInSet(l)||!l.some(c=>c.type.excludes(n)))}let{ranges:s}=o;return s.some(({$from:l,$to:a})=>{let c=l.depth===0?t.doc.inlineContent&&t.doc.type.allowsMarkType(n):!1;return t.doc.nodesBetween(l.pos,a.pos,(d,u,f)=>{if(c)return!1;if(d.isInline){let h=!f||f.type.allowsMarkType(n),p=!!n.isInSet(d.marks)||!d.marks.some(m=>m.type.excludes(n));c=h&&p}return!c}),c})}var Vy=(t,e={})=>({tr:n,state:r,dispatch:o})=>{let{selection:i}=n,{empty:s,ranges:l}=i,a=wt(t,r.schema);if(o)if(s){let c=Wd(r,a);n.addStoredMark(a.create({...c,...e}))}else l.forEach(c=>{let d=c.$from.pos,u=c.$to.pos;r.doc.nodesBetween(d,u,(f,h)=>{let p=Math.max(h,d),m=Math.min(h+f.nodeSize,u);f.marks.find(y=>y.type===a)?f.marks.forEach(y=>{a===y.type&&n.addMark(p,m,a.create({...y.attrs,...e}))}):n.addMark(p,m,a.create(e))})});return Fy(r,n,a)},_y=(t,e)=>({tr:n})=>(n.setMeta(t,e),!0),Wy=(t,e={})=>({state:n,dispatch:r,chain:o})=>{let i=ne(t,n.schema),s;return n.selection.$anchor.sameParent(n.selection.$head)&&(s=n.selection.$anchor.parent.attrs),i.isTextblock?o().command(({commands:l})=>is(i,{...s,...e})(n)?!0:l.clearNodes()).command(({state:l})=>is(i,{...s,...e})(l,r)).run():(console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.'),!1)},jy=t=>({tr:e,dispatch:n})=>{if(n){let{doc:r}=e,o=bt(t,0,r.content.size),i=L.create(r,o);e.setSelection(i)}return!0},Uy=(t,e)=>({tr:n,state:r,dispatch:o})=>{let{selection:i}=r,s,l;return typeof e==\"number\"?(s=e,l=e):e&&\"from\"in e&&\"to\"in e?(s=e.from,l=e.to):(s=i.from,l=i.to),o&&n.doc.nodesBetween(s,l,(a,c)=>{a.isText||n.setNodeMarkup(c,void 0,{...a.attrs,dir:t})}),!0},Ky=t=>({tr:e,dispatch:n})=>{if(n){let{doc:r}=e,{from:o,to:i}=typeof t==\"number\"?{from:t,to:t}:t,s=D.atStart(r).from,l=D.atEnd(r).to,a=bt(o,s,l),c=bt(i,s,l),d=D.create(r,a,c);e.setSelection(d)}return!0},qy=t=>({state:e,dispatch:n})=>{let r=ne(t,e.schema);return yc(r)(e,n)};function zd(t,e){let n=t.storedMarks||t.selection.$to.parentOffset&&t.selection.$from.marks();if(n){let r=n.filter(o=>e?.includes(o.type.name));t.tr.ensureMarks(r)}}var Jy=({keepMarks:t=!0}={})=>({tr:e,state:n,dispatch:r,editor:o})=>{let{selection:i,doc:s}=e,{$from:l,$to:a}=i,c=o.extensionManager.attributes,d=so(c,l.node().type.name,l.node().attrs);if(i instanceof L&&i.node.isBlock)return!l.parentOffset||!Ee(s,l.pos)?!1:(r&&(t&&zd(n,o.extensionManager.splittableMarks),e.split(l.pos).scrollIntoView()),!0);if(!l.parent.isBlock)return!1;let u=a.parentOffset===a.parent.content.size,f=l.depth===0?void 0:sr(l.node(-1).contentMatchAt(l.indexAfter(-1))),h=u&&f?[{type:f,attrs:d}]:void 0,p=Ee(e.doc,e.mapping.map(l.pos),1,h);if(!h&&!p&&Ee(e.doc,e.mapping.map(l.pos),1,f?[{type:f}]:void 0)&&(p=!0,h=f?[{type:f,attrs:d}]:void 0),r){if(p&&(i instanceof D&&e.deleteSelection(),e.split(e.mapping.map(l.pos),1,h),f&&!u&&!l.parentOffset&&l.parent.type!==f)){let m=e.mapping.map(l.before()),g=e.doc.resolve(m);l.node(-1).canReplaceWith(g.index(),g.index()+1,f)&&e.setNodeMarkup(e.mapping.map(l.before()),f)}t&&zd(n,o.extensionManager.splittableMarks),e.scrollIntoView()}return p},Gy=(t,e={})=>({tr:n,state:r,dispatch:o,editor:i})=>{var s;let l=ne(t,r.schema),{$from:a,$to:c}=r.selection,d=r.selection.node;if(d&&d.isBlock||a.depth<2||!a.sameParent(c))return!1;let u=a.node(-1);if(u.type!==l)return!1;let f=i.extensionManager.attributes;if(a.parent.content.size===0&&a.node(-1).childCount===a.indexAfter(-1)){if(a.depth===2||a.node(-3).type!==l||a.index(-2)!==a.node(-2).childCount-1)return!1;if(o){let y=v.empty,w=a.index(-1)?1:a.index(-2)?2:3;for(let O=a.depth-w;O>=a.depth-3;O-=1)y=v.from(a.node(O).copy(y));let b=a.indexAfter(-1)<a.node(-2).childCount?1:a.indexAfter(-2)<a.node(-3).childCount?2:3,C={...so(f,a.node().type.name,a.node().attrs),...e},x=((s=l.contentMatch.defaultType)==null?void 0:s.createAndFill(C))||void 0;y=y.append(v.from(l.createAndFill(null,x)||void 0));let S=a.before(a.depth-(w-1));n.replace(S,a.after(-b),new E(y,4-w,0));let k=-1;n.doc.nodesBetween(S,n.doc.content.size,(O,T)=>{if(k>-1)return!1;O.isTextblock&&O.content.size===0&&(k=T+1)}),k>-1&&n.setSelection(D.near(n.doc.resolve(k))),n.scrollIntoView()}return!0}let h=c.pos===a.end()?u.contentMatchAt(0).defaultType:null,p={...so(f,u.type.name,u.attrs),...e},m={...so(f,a.node().type.name,a.node().attrs),...e};n.delete(a.pos,c.pos);let g=h?[{type:l,attrs:p},{type:h,attrs:m}]:[{type:l,attrs:p}];if(!Ee(n.doc,a.pos,2))return!1;if(o){let{selection:y,storedMarks:w}=r,{splittableMarks:b}=i.extensionManager,C=w||y.$to.parentOffset&&y.$from.marks();if(n.split(a.pos,2,g).scrollIntoView(),!C||!o)return!0;let x=C.filter(S=>b.includes(S.type.name));n.ensureMarks(x)}return!0},Fs=(t,e)=>{let n=et(s=>s.type===e)(t.selection);if(!n)return!0;let r=t.doc.resolve(Math.max(0,n.pos-1)).before(n.depth);if(r===void 0)return!0;let o=t.doc.nodeAt(r);return n.node.type===o?.type&&Re(t.doc,n.pos)&&t.join(n.pos),!0},Vs=(t,e)=>{let n=et(s=>s.type===e)(t.selection);if(!n)return!0;let r=t.doc.resolve(n.start).after(n.depth);if(r===void 0)return!0;let o=t.doc.nodeAt(r);return n.node.type===o?.type&&Re(t.doc,r)&&t.join(r),!0},Xy=(t,e,n,r={})=>({editor:o,tr:i,state:s,dispatch:l,chain:a,commands:c,can:d})=>{let{extensions:u,splittableMarks:f}=o.extensionManager,h=ne(t,s.schema),p=ne(e,s.schema),{selection:m,storedMarks:g}=s,{$from:y,$to:w}=m,b=y.blockRange(w),C=g||m.$to.parentOffset&&m.$from.marks();if(!b)return!1;let x=et(S=>Bd(S.type.name,u))(m);if(b.depth>=1&&x&&b.depth-x.depth<=1){if(x.node.type===h)return c.liftListItem(p);if(Bd(x.node.type.name,u)&&h.validContent(x.node.content)&&l)return a().command(()=>(i.setNodeMarkup(x.pos,h),!0)).command(()=>Fs(i,h)).command(()=>Vs(i,h)).run()}return!n||!C||!l?a().command(()=>d().wrapInList(h,r)?!0:c.clearNodes()).wrapInList(h,r).command(()=>Fs(i,h)).command(()=>Vs(i,h)).run():a().command(()=>{let S=d().wrapInList(h,r),k=C.filter(O=>f.includes(O.type.name));return i.ensureMarks(k),S?!0:c.clearNodes()}).wrapInList(h,r).command(()=>Fs(i,h)).command(()=>Vs(i,h)).run()},Yy=(t,e={},n={})=>({state:r,commands:o})=>{let{extendEmptyMarkRange:i=!1}=n,s=wt(t,r.schema);return Ws(r,s,e)?o.unsetMark(s,{extendEmptyMarkRange:i}):o.setMark(s,e)},Qy=(t,e,n={})=>({state:r,commands:o})=>{let i=ne(t,r.schema),s=ne(e,r.schema),l=Ze(r,i,n),a;return r.selection.$anchor.sameParent(r.selection.$head)&&(a=r.selection.$anchor.parent.attrs),l?o.setNode(s,a):o.setNode(i,{...a,...n})},Zy=(t,e={})=>({state:n,commands:r})=>{let o=ne(t,n.schema);return Ze(n,o,e)?r.lift(o):r.wrapIn(o,e)},eb=()=>({state:t,dispatch:e})=>{let n=t.plugins;for(let r=0;r<n.length;r+=1){let o=n[r],i;if(o.spec.isInputRules&&(i=o.getState(t))){if(e){let s=t.tr,l=i.transform;for(let a=l.steps.length-1;a>=0;a-=1)s.step(l.steps[a].invert(l.docs[a]));if(i.text){let a=s.doc.resolve(i.from).marks();s.replaceWith(i.from,i.to,t.schema.text(i.text,a))}else s.delete(i.from,i.to)}return!0}}return!1},tb=()=>({tr:t,dispatch:e})=>{let{selection:n}=t,{empty:r,ranges:o}=n;return r||e&&o.forEach(i=>{t.removeMark(i.$from.pos,i.$to.pos)}),!0},nb=(t,e={})=>({tr:n,state:r,dispatch:o})=>{var i;let{extendEmptyMarkRange:s=!1}=e,{selection:l}=n,a=wt(t,r.schema),{$from:c,empty:d,ranges:u}=l;if(!o)return!0;if(d&&s){let{from:f,to:h}=l,p=(i=c.marks().find(g=>g.type===a))==null?void 0:i.attrs,m=Ks(c,a,p);m&&(f=m.from,h=m.to),n.removeMark(f,h,a)}else u.forEach(f=>{n.removeMark(f.$from.pos,f.$to.pos,a)});return n.removeStoredMark(a),!0},rb=t=>({tr:e,state:n,dispatch:r})=>{let{selection:o}=n,i,s;return typeof t==\"number\"?(i=t,s=t):t&&\"from\"in t&&\"to\"in t?(i=t.from,s=t.to):(i=o.from,s=o.to),r&&e.doc.nodesBetween(i,s,(l,a)=>{if(l.isText)return;let c={...l.attrs};delete c.dir,e.setNodeMarkup(a,void 0,c)}),!0},ob=(t,e={})=>({tr:n,state:r,dispatch:o})=>{let i=null,s=null,l=ho(typeof t==\"string\"?t:t.name,r.schema);if(!l)return!1;l===\"node\"&&(i=ne(t,r.schema)),l===\"mark\"&&(s=wt(t,r.schema));let a=!1;return n.selection.ranges.forEach(c=>{let d=c.$from.pos,u=c.$to.pos,f,h,p,m;n.selection.empty?r.doc.nodesBetween(d,u,(g,y)=>{i&&i===g.type&&(a=!0,p=Math.max(y,d),m=Math.min(y+g.nodeSize,u),f=y,h=g)}):r.doc.nodesBetween(d,u,(g,y)=>{y<d&&i&&i===g.type&&(a=!0,p=Math.max(y,d),m=Math.min(y+g.nodeSize,u),f=y,h=g),y>=d&&y<=u&&(i&&i===g.type&&(a=!0,o&&n.setNodeMarkup(y,void 0,{...g.attrs,...e})),s&&g.marks.length&&g.marks.forEach(w=>{if(s===w.type&&(a=!0,o)){let b=Math.max(y,d),C=Math.min(y+g.nodeSize,u);n.addMark(b,C,s.create({...w.attrs,...e}))}}))}),h&&(f!==void 0&&o&&n.setNodeMarkup(f,void 0,{...h.attrs,...e}),s&&h.marks.length&&h.marks.forEach(g=>{s===g.type&&o&&n.addMark(p,m,s.create({...g.attrs,...e}))}))}),a},ib=(t,e={})=>({state:n,dispatch:r})=>{let o=ne(t,n.schema);return pc(o,e)(n,r)},sb=(t,e={})=>({state:n,dispatch:r})=>{let o=ne(t,n.schema);return mc(o,e)(n,r)},lb=class{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){let n=this.callbacks[t];return n&&n.forEach(r=>r.apply(this,e)),this}off(t,e){let n=this.callbacks[t];return n&&(e?this.callbacks[t]=n.filter(r=>r!==e):delete this.callbacks[t]),this}once(t,e){let n=(...r)=>{this.off(t,n),e.apply(this,r)};return this.on(t,n)}removeAllListeners(){this.callbacks={}}},go=class{constructor(t){var e;this.find=t.find,this.handler=t.handler,this.undoable=(e=t.undoable)!=null?e:!0}},ab=(t,e)=>{if(Us(e))return e.exec(t);let n=e(t);if(!n)return null;let r=[n.text];return r.index=n.index,r.input=t,r.data=n.data,n.replaceWith&&(n.text.includes(n.replaceWith)||console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".'),r.push(n.replaceWith)),r};function ro(t){var e;let{editor:n,from:r,to:o,text:i,rules:s,plugin:l}=t,{view:a}=n;if(a.composing)return!1;let c=a.state.doc.resolve(r);if(c.parent.type.spec.code||(e=c.nodeBefore||c.nodeAfter)!=null&&e.marks.find(f=>f.type.spec.code))return!1;let d=!1,u=zy(c)+i;return s.forEach(f=>{if(d)return;let h=ab(u,f.find);if(!h)return;let p=a.state.tr,m=co({state:a.state,transaction:p}),g={from:r-(h[0].length-i.length),to:o},{commands:y,chain:w,can:b}=new uo({editor:n,state:m});f.handler({state:m,range:g,match:h,commands:y,chain:w,can:b})===null||!p.steps.length||(f.undoable&&p.setMeta(l,{transform:p,from:r,to:o,text:i}),a.dispatch(p),d=!0)}),d}function cb(t){let{editor:e,rules:n}=t,r=new P({state:{init(){return null},apply(o,i,s){let l=o.getMeta(r);if(l)return l;let a=o.getMeta(\"applyInputRules\");return!!a&&setTimeout(()=>{let{text:d}=a;typeof d==\"string\"?d=d:d=Ys(v.from(d),s.schema);let{from:u}=a,f=u+d.length;ro({editor:e,from:u,to:f,text:d,rules:n,plugin:r})}),o.selectionSet||o.docChanged?null:i}},props:{handleTextInput(o,i,s,l){return ro({editor:e,from:i,to:s,text:l,rules:n,plugin:r})},handleDOMEvents:{compositionend:o=>(setTimeout(()=>{let{$cursor:i}=o.state.selection;i&&ro({editor:e,from:i.pos,to:i.pos,text:\"\",rules:n,plugin:r})}),!1)},handleKeyDown(o,i){if(i.key!==\"Enter\")return!1;let{$cursor:s}=o.state.selection;return s?ro({editor:e,from:s.pos,to:s.pos,text:`\n`,rules:n,plugin:r}):!1}},isInputRules:!0});return r}function db(t){return Object.prototype.toString.call(t).slice(8,-1)}function oo(t){return db(t)!==\"Object\"?!1:t.constructor===Object&&Object.getPrototypeOf(t)===Object.prototype}function nu(t,e){let n={...t};return oo(t)&&oo(e)&&Object.keys(e).forEach(r=>{oo(e[r])&&oo(t[r])?n[r]=nu(t[r],e[r]):n[r]=e[r]}),n}var nl=class{constructor(t={}){this.type=\"extendable\",this.parent=null,this.child=null,this.name=\"\",this.config={name:this.name},this.config={...this.config,...t},this.name=this.config.name}get options(){return{...G(B(this,\"addOptions\",{name:this.name}))||{}}}get storage(){return{...G(B(this,\"addStorage\",{name:this.name,options:this.options}))||{}}}configure(t={}){let e=this.extend({...this.config,addOptions:()=>nu(this.options,t)});return e.name=this.name,e.parent=this.parent,e}extend(t={}){let e=new this.constructor({...this.config,...t});return e.parent=this,this.child=e,e.name=\"name\"in t?t.name:e.parent.name,e}},ee=class ru extends nl{constructor(){super(...arguments),this.type=\"mark\"}static create(e={}){let n=typeof e==\"function\"?e():e;return new ru(n)}static handleExit({editor:e,mark:n}){let{tr:r}=e.state,o=e.state.selection.$from;if(o.pos===o.end()){let s=o.marks();if(!!!s.find(c=>c?.type.name===n.name))return!1;let a=s.find(c=>c?.type.name===n.name);return a&&r.removeStoredMark(a),r.insertText(\" \",o.pos),e.view.dispatch(r),!0}return!1}configure(e){return super.configure(e)}extend(e){let n=typeof e==\"function\"?e():e;return super.extend(n)}};function ub(t){return typeof t==\"number\"}var fb=class{constructor(t){this.find=t.find,this.handler=t.handler}},hb=(t,e,n)=>{if(Us(e))return[...t.matchAll(e)];let r=e(t,n);return r?r.map(o=>{let i=[o.text];return i.index=o.index,i.input=t,i.data=o.data,o.replaceWith&&(o.text.includes(o.replaceWith)||console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".'),i.push(o.replaceWith)),i}):[]};function pb(t){let{editor:e,state:n,from:r,to:o,rule:i,pasteEvent:s,dropEvent:l}=t,{commands:a,chain:c,can:d}=new uo({editor:e,state:n}),u=[];return n.doc.nodesBetween(r,o,(h,p)=>{var m,g,y,w,b;if((g=(m=h.type)==null?void 0:m.spec)!=null&&g.code||!(h.isText||h.isTextblock||h.isInline))return;let C=(b=(w=(y=h.content)==null?void 0:y.size)!=null?w:h.nodeSize)!=null?b:0,x=Math.max(r,p),S=Math.min(o,p+C);if(x>=S)return;let k=h.isText?h.text||\"\":h.textBetween(x-p,S-p,void 0,\"\\uFFFC\");hb(k,i.find,s).forEach(T=>{if(T.index===void 0)return;let A=x+T.index+1,$=A+T[0].length,z={from:n.tr.mapping.map(A),to:n.tr.mapping.map($)},K=i.handler({state:n,range:z,match:T,commands:a,chain:c,can:d,pasteEvent:s,dropEvent:l});u.push(K)})}),u.every(h=>h!==null)}var io=null,mb=t=>{var e;let n=new ClipboardEvent(\"paste\",{clipboardData:new DataTransfer});return(e=n.clipboardData)==null||e.setData(\"text/html\",t),n};function gb(t){let{editor:e,rules:n}=t,r=null,o=!1,i=!1,s=typeof ClipboardEvent<\"u\"?new ClipboardEvent(\"paste\"):null,l;try{l=typeof DragEvent<\"u\"?new DragEvent(\"drop\"):null}catch{l=null}let a=({state:d,from:u,to:f,rule:h,pasteEvt:p})=>{let m=d.tr,g=co({state:d,transaction:m});if(!(!pb({editor:e,state:g,from:Math.max(u-1,0),to:f.b-1,rule:h,pasteEvent:p,dropEvent:l})||!m.steps.length)){try{l=typeof DragEvent<\"u\"?new DragEvent(\"drop\"):null}catch{l=null}return s=typeof ClipboardEvent<\"u\"?new ClipboardEvent(\"paste\"):null,m}};return n.map(d=>new P({view(u){let f=p=>{var m;r=(m=u.dom.parentElement)!=null&&m.contains(p.target)?u.dom.parentElement:null,r&&(io=e)},h=()=>{io&&(io=null)};return window.addEventListener(\"dragstart\",f),window.addEventListener(\"dragend\",h),{destroy(){window.removeEventListener(\"dragstart\",f),window.removeEventListener(\"dragend\",h)}}},props:{handleDOMEvents:{drop:(u,f)=>{if(i=r===u.dom.parentElement,l=f,!i){let h=io;h?.isEditable&&setTimeout(()=>{let p=h.state.selection;p&&h.commands.deleteRange({from:p.from,to:p.to})},10)}return!1},paste:(u,f)=>{var h;let p=(h=f.clipboardData)==null?void 0:h.getData(\"text/html\");return s=f,o=!!p?.includes(\"data-pm-slice\"),!1}}},appendTransaction:(u,f,h)=>{let p=u[0],m=p.getMeta(\"uiEvent\")===\"paste\"&&!o,g=p.getMeta(\"uiEvent\")===\"drop\"&&!i,y=p.getMeta(\"applyPasteRules\"),w=!!y;if(!m&&!g&&!w)return;if(w){let{text:x}=y;typeof x==\"string\"?x=x:x=Ys(v.from(x),h.schema);let{from:S}=y,k=S+x.length,O=mb(x);return a({rule:d,state:h,from:S,to:{b:k},pasteEvt:O})}let b=f.doc.content.findDiffStart(h.doc.content),C=f.doc.content.findDiffEnd(h.doc.content);if(!(!ub(b)||!C||b===C.b))return a({rule:d,state:h,from:b,to:C,pasteEvt:s})}}))}var yo=class{constructor(t,e){this.splittableMarks=[],this.editor=e,this.baseExtensions=t,this.extensions=qd(t),this.schema=Ry(this.extensions,e),this.setupExtensions()}get commands(){return this.extensions.reduce((t,e)=>{let n={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:$s(e.name,this.schema)},r=B(e,\"addCommands\",n);return r?{...t,...r()}:t},{})}get plugins(){let{editor:t}=this;return Qs([...this.extensions].reverse()).flatMap(r=>{let o={name:r.name,options:r.options,storage:this.editor.extensionStorage[r.name],editor:t,type:$s(r.name,this.schema)},i=[],s=B(r,\"addKeyboardShortcuts\",o),l={};if(r.type===\"mark\"&&B(r,\"exitable\",o)&&(l.ArrowRight=()=>ee.handleExit({editor:t,mark:r})),s){let f=Object.fromEntries(Object.entries(s()).map(([h,p])=>[h,()=>p({editor:t})]));l={...l,...f}}let a=Nd(l);i.push(a);let c=B(r,\"addInputRules\",o);if(Ld(r,t.options.enableInputRules)&&c){let f=c();if(f&&f.length){let h=cb({editor:t,rules:f}),p=Array.isArray(h)?h:[h];i.push(...p)}}let d=B(r,\"addPasteRules\",o);if(Ld(r,t.options.enablePasteRules)&&d){let f=d();if(f&&f.length){let h=gb({editor:t,rules:f});i.push(...h)}}let u=B(r,\"addProseMirrorPlugins\",o);if(u){let f=u();i.push(...f)}return i})}get attributes(){return Kd(this.extensions)}get nodeViews(){let{editor:t}=this,{nodeExtensions:e}=An(this.extensions);return Object.fromEntries(e.filter(n=>!!B(n,\"addNodeView\")).map(n=>{let r=this.attributes.filter(a=>a.type===n.name),o={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:ne(n.name,this.schema)},i=B(n,\"addNodeView\",o);if(!i)return[];let s=i();if(!s)return[];let l=(a,c,d,u,f)=>{let h=ao(a,r);return s({node:a,view:c,getPos:d,decorations:u,innerDecorations:f,editor:t,extension:n,HTMLAttributes:h})};return[n.name,l]}))}get markViews(){let{editor:t}=this,{markExtensions:e}=An(this.extensions);return Object.fromEntries(e.filter(n=>!!B(n,\"addMarkView\")).map(n=>{let r=this.attributes.filter(l=>l.type===n.name),o={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:wt(n.name,this.schema)},i=B(n,\"addMarkView\",o);if(!i)return[];let s=(l,a,c)=>{let d=ao(l,r);return i()({mark:l,view:a,inline:c,editor:t,extension:n,HTMLAttributes:d,updateAttributes:u=>{Ab(l,t,u)}})};return[n.name,s]}))}setupExtensions(){let t=this.extensions;this.editor.extensionStorage=Object.fromEntries(t.map(e=>[e.name,e.storage])),t.forEach(e=>{var n;let r={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:$s(e.name,this.schema)};e.type===\"mark\"&&((n=G(B(e,\"keepOnSplit\",r)))==null||n)&&this.splittableMarks.push(e.name);let o=B(e,\"onBeforeCreate\",r),i=B(e,\"onCreate\",r),s=B(e,\"onUpdate\",r),l=B(e,\"onSelectionUpdate\",r),a=B(e,\"onTransaction\",r),c=B(e,\"onFocus\",r),d=B(e,\"onBlur\",r),u=B(e,\"onDestroy\",r);o&&this.editor.on(\"beforeCreate\",o),i&&this.editor.on(\"create\",i),s&&this.editor.on(\"update\",s),l&&this.editor.on(\"selectionUpdate\",l),a&&this.editor.on(\"transaction\",a),c&&this.editor.on(\"focus\",c),d&&this.editor.on(\"blur\",d),u&&this.editor.on(\"destroy\",u)})}};yo.resolve=qd;yo.sort=Qs;yo.flatten=Xs;var yb={};js(yb,{ClipboardTextSerializer:()=>iu,Commands:()=>su,Delete:()=>lu,Drop:()=>au,Editable:()=>cu,FocusEvents:()=>uu,Keymap:()=>fu,Paste:()=>hu,Tabindex:()=>pu,TextDirection:()=>mu,focusEventsPluginKey:()=>du});var U=class ou extends nl{constructor(){super(...arguments),this.type=\"extension\"}static create(e={}){let n=typeof e==\"function\"?e():e;return new ou(n)}configure(e){return super.configure(e)}extend(e){let n=typeof e==\"function\"?e():e;return super.extend(n)}},iu=U.create({name:\"clipboardTextSerializer\",addOptions(){return{blockSeparator:void 0}},addProseMirrorPlugins(){return[new P({key:new H(\"clipboardTextSerializer\"),props:{clipboardTextSerializer:()=>{let{editor:t}=this,{state:e,schema:n}=t,{doc:r,selection:o}=e,{ranges:i}=o,s=Math.min(...i.map(d=>d.$from.pos)),l=Math.max(...i.map(d=>d.$to.pos)),a=Gd(n);return Jd(r,{from:s,to:l},{...this.options.blockSeparator!==void 0?{blockSeparator:this.options.blockSeparator}:{},textSerializers:a})}}})]}}),su=U.create({name:\"commands\",addCommands(){return{...Hd}}}),lu=U.create({name:\"delete\",onUpdate({transaction:t,appendedTransactions:e}){var n,r,o;let i=()=>{var s,l,a,c;if((c=(a=(l=(s=this.editor.options.coreExtensionOptions)==null?void 0:s.delete)==null?void 0:l.filterTransaction)==null?void 0:a.call(l,t))!=null?c:t.getMeta(\"y-sync$\"))return;let d=Js(t.before,[t,...e]);el(d).forEach(h=>{d.mapping.mapResult(h.oldRange.from).deletedAfter&&d.mapping.mapResult(h.oldRange.to).deletedBefore&&d.before.nodesBetween(h.oldRange.from,h.oldRange.to,(p,m)=>{let g=m+p.nodeSize-2,y=h.oldRange.from<=m&&g<=h.oldRange.to;this.editor.emit(\"delete\",{type:\"node\",node:p,from:m,to:g,newFrom:d.mapping.map(m),newTo:d.mapping.map(g),deletedRange:h.oldRange,newRange:h.newRange,partial:!y,editor:this.editor,transaction:t,combinedTransform:d})})});let f=d.mapping;d.steps.forEach((h,p)=>{var m,g;if(h instanceof ut){let y=f.slice(p).map(h.from,-1),w=f.slice(p).map(h.to),b=f.invert().map(y,-1),C=f.invert().map(w),x=(m=d.doc.nodeAt(y-1))==null?void 0:m.marks.some(k=>k.eq(h.mark)),S=(g=d.doc.nodeAt(w))==null?void 0:g.marks.some(k=>k.eq(h.mark));this.editor.emit(\"delete\",{type:\"mark\",mark:h.mark,from:h.from,to:h.to,deletedRange:{from:b,to:C},newRange:{from:y,to:w},partial:!!(S||x),editor:this.editor,transaction:t,combinedTransform:d})}})};(o=(r=(n=this.editor.options.coreExtensionOptions)==null?void 0:n.delete)==null?void 0:r.async)==null||o?setTimeout(i,0):i()}}),au=U.create({name:\"drop\",addProseMirrorPlugins(){return[new P({key:new H(\"tiptapDrop\"),props:{handleDrop:(t,e,n,r)=>{this.editor.emit(\"drop\",{editor:this.editor,event:e,slice:n,moved:r})}}})]}}),cu=U.create({name:\"editable\",addProseMirrorPlugins(){return[new P({key:new H(\"editable\"),props:{editable:()=>this.editor.options.editable}})]}}),du=new H(\"focusEvents\"),uu=U.create({name:\"focusEvents\",addProseMirrorPlugins(){let{editor:t}=this;return[new P({key:du,props:{handleDOMEvents:{focus:(e,n)=>{t.isFocused=!0;let r=t.state.tr.setMeta(\"focus\",{event:n}).setMeta(\"addToHistory\",!1);return e.dispatch(r),!1},blur:(e,n)=>{t.isFocused=!1;let r=t.state.tr.setMeta(\"blur\",{event:n}).setMeta(\"addToHistory\",!1);return e.dispatch(r),!1}}}})]}}),fu=U.create({name:\"keymap\",addKeyboardShortcuts(){let t=()=>this.editor.commands.first(({commands:s})=>[()=>s.undoInputRule(),()=>s.command(({tr:l})=>{let{selection:a,doc:c}=l,{empty:d,$anchor:u}=a,{pos:f,parent:h}=u,p=u.parent.isTextblock&&f>0?l.doc.resolve(f-1):u,m=p.parent.type.spec.isolating,g=u.pos-u.parentOffset,y=m&&p.parent.childCount===1?g===u.pos:I.atStart(c).from===f;return!d||!h.type.isTextblock||h.textContent.length||!y||y&&u.parent.type.name===\"paragraph\"?!1:s.clearNodes()}),()=>s.deleteSelection(),()=>s.joinBackward(),()=>s.selectNodeBackward()]),e=()=>this.editor.commands.first(({commands:s})=>[()=>s.deleteSelection(),()=>s.deleteCurrentNode(),()=>s.joinForward(),()=>s.selectNodeForward()]),r={Enter:()=>this.editor.commands.first(({commands:s})=>[()=>s.newlineInCode(),()=>s.createParagraphNear(),()=>s.liftEmptyBlock(),()=>s.splitBlock()]),\"Mod-Enter\":()=>this.editor.commands.exitCode(),Backspace:t,\"Mod-Backspace\":t,\"Shift-Backspace\":t,Delete:e,\"Mod-Delete\":e,\"Mod-a\":()=>this.editor.commands.selectAll()},o={...r},i={...r,\"Ctrl-h\":t,\"Alt-Backspace\":t,\"Ctrl-d\":e,\"Ctrl-Alt-Backspace\":e,\"Alt-Delete\":e,\"Alt-d\":e,\"Ctrl-a\":()=>this.editor.commands.selectTextblockStart(),\"Ctrl-e\":()=>this.editor.commands.selectTextblockEnd()};return qs()||_d()?i:o},addProseMirrorPlugins(){return[new P({key:new H(\"clearDocument\"),appendTransaction:(t,e,n)=>{if(t.some(m=>m.getMeta(\"composition\")))return;let r=t.some(m=>m.docChanged)&&!e.doc.eq(n.doc),o=t.some(m=>m.getMeta(\"preventClearDocument\"));if(!r||o)return;let{empty:i,from:s,to:l}=e.selection,a=I.atStart(e.doc).from,c=I.atEnd(e.doc).to;if(i||!(s===a&&l===c)||!lr(n.doc))return;let f=n.tr,h=co({state:n,transaction:f}),{commands:p}=new uo({editor:this.editor,state:h});if(p.clearNodes(),!!f.steps.length)return f}})]}}),hu=U.create({name:\"paste\",addProseMirrorPlugins(){return[new P({key:new H(\"tiptapPaste\"),props:{handlePaste:(t,e,n)=>{this.editor.emit(\"paste\",{editor:this.editor,event:e,slice:n})}}})]}}),pu=U.create({name:\"tabindex\",addProseMirrorPlugins(){return[new P({key:new H(\"tabindex\"),props:{attributes:()=>this.editor.isEditable?{tabindex:\"0\"}:{}}})]}}),mu=U.create({name:\"textDirection\",addOptions(){return{direction:void 0}},addGlobalAttributes(){if(!this.options.direction)return[];let{nodeExtensions:t}=An(this.extensions);return[{types:t.filter(e=>e.name!==\"text\").map(e=>e.name),attributes:{dir:{default:this.options.direction,parseHTML:e=>{let n=e.getAttribute(\"dir\");return n&&(n===\"ltr\"||n===\"rtl\"||n===\"auto\")?n:this.options.direction},renderHTML:e=>e.dir?{dir:e.dir}:{}}}}]},addProseMirrorPlugins(){return[new P({key:new H(\"textDirection\"),props:{attributes:()=>{let t=this.options.direction;return t?{dir:t}:{}}}})]}}),bb=class Tn{constructor(e,n,r=!1,o=null){this.currentNode=null,this.actualDepth=null,this.isBlock=r,this.resolvedPos=e,this.editor=n,this.currentNode=o}get name(){return this.node.type.name}get node(){return this.currentNode||this.resolvedPos.node()}get element(){return this.editor.view.domAtPos(this.pos).node}get depth(){var e;return(e=this.actualDepth)!=null?e:this.resolvedPos.depth}get pos(){return this.resolvedPos.pos}get content(){return this.node.content}set content(e){let n=this.from,r=this.to;if(this.isBlock){if(this.content.size===0){console.error(`You can\\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);return}n=this.from+1,r=this.to-1}this.editor.commands.insertContentAt({from:n,to:r},e)}get attributes(){return this.node.attrs}get textContent(){return this.node.textContent}get size(){return this.node.nodeSize}get from(){return this.isBlock?this.pos:this.resolvedPos.start(this.resolvedPos.depth)}get range(){return{from:this.from,to:this.to}}get to(){return this.isBlock?this.pos+this.size:this.resolvedPos.end(this.resolvedPos.depth)+(this.node.isText?0:1)}get parent(){if(this.depth===0)return null;let e=this.resolvedPos.start(this.resolvedPos.depth-1),n=this.resolvedPos.doc.resolve(e);return new Tn(n,this.editor)}get before(){let e=this.resolvedPos.doc.resolve(this.from-(this.isBlock?1:2));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.from-3)),new Tn(e,this.editor)}get after(){let e=this.resolvedPos.doc.resolve(this.to+(this.isBlock?2:1));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.to+3)),new Tn(e,this.editor)}get children(){let e=[];return this.node.content.forEach((n,r)=>{let o=n.isBlock&&!n.isTextblock,i=n.isAtom&&!n.isText,s=this.pos+r+(i?0:1);if(s<0||s>this.resolvedPos.doc.nodeSize-2)return;let l=this.resolvedPos.doc.resolve(s);if(!o&&l.depth<=this.depth)return;let a=new Tn(l,this.editor,o,o?n:null);o&&(a.actualDepth=this.depth+1),e.push(new Tn(l,this.editor,o,o?n:null))}),e}get firstChild(){return this.children[0]||null}get lastChild(){let e=this.children;return e[e.length-1]||null}closest(e,n={}){let r=null,o=this.parent;for(;o&&!r;){if(o.node.type.name===e)if(Object.keys(n).length>0){let i=o.node.attrs,s=Object.keys(n);for(let l=0;l<s.length;l+=1){let a=s[l];if(i[a]!==n[a])break}}else r=o;o=o.parent}return r}querySelector(e,n={}){return this.querySelectorAll(e,n,!0)[0]||null}querySelectorAll(e,n={},r=!1){let o=[];if(!this.children||this.children.length===0)return o;let i=Object.keys(n);return this.children.forEach(s=>{r&&o.length>0||(s.node.type.name===e&&i.every(a=>n[a]===s.node.attrs[a])&&o.push(s),!(r&&o.length>0)&&(o=o.concat(s.querySelectorAll(e,n,r))))}),o}setAttribute(e){let{tr:n}=this.editor.state;n.setNodeMarkup(this.from,void 0,{...this.node.attrs,...e}),this.editor.view.dispatch(n)}},wb=`.ProseMirror {\n  position: relative;\n}\n\n.ProseMirror {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  white-space: break-spaces;\n  -webkit-font-variant-ligatures: none;\n  font-variant-ligatures: none;\n  font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n  white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n  white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n  white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n  display: inline !important;\n  border: none !important;\n  margin: 0 !important;\n  width: 0 !important;\n  height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n  display: none;\n  pointer-events: none;\n  position: absolute;\n  margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n  content: \"\";\n  display: block;\n  position: absolute;\n  top: -2px;\n  width: 20px;\n  border-top: 1px solid black;\n  animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n  to {\n    visibility: hidden;\n  }\n}\n\n.ProseMirror-hideselection *::selection {\n  background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n  background: transparent;\n}\n\n.ProseMirror-hideselection * {\n  caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n  display: block;\n}`;function xb(t,e,n){let r=document.querySelector(`style[data-tiptap-style${n?`-${n}`:\"\"}]`);if(r!==null)return r;let o=document.createElement(\"style\");return e&&o.setAttribute(\"nonce\",e),o.setAttribute(`data-tiptap-style${n?`-${n}`:\"\"}`,\"\"),o.innerHTML=t,document.getElementsByTagName(\"head\")[0].appendChild(o),o}var gu=class extends lb{constructor(t={}){super(),this.css=null,this.className=\"tiptap\",this.editorView=null,this.isFocused=!1,this.isInitialized=!1,this.extensionStorage={},this.instanceId=Math.random().toString(36).slice(2,9),this.options={element:typeof document<\"u\"?document.createElement(\"div\"):null,content:\"\",injectCSS:!0,injectNonce:void 0,extensions:[],autofocus:!1,editable:!0,textDirection:void 0,editorProps:{},parseOptions:{},coreExtensionOptions:{},enableInputRules:!0,enablePasteRules:!0,enableCoreExtensions:!0,enableContentCheck:!1,emitContentError:!1,onBeforeCreate:()=>null,onCreate:()=>null,onMount:()=>null,onUnmount:()=>null,onUpdate:()=>null,onSelectionUpdate:()=>null,onTransaction:()=>null,onFocus:()=>null,onBlur:()=>null,onDestroy:()=>null,onContentError:({error:r})=>{throw r},onPaste:()=>null,onDrop:()=>null,onDelete:()=>null},this.isCapturingTransaction=!1,this.capturedTransaction=null,this.utils={getUpdatedPosition:Hy,createMappablePosition:$y},this.setOptions(t),this.createExtensionManager(),this.createCommandManager(),this.createSchema(),this.on(\"beforeCreate\",this.options.onBeforeCreate),this.emit(\"beforeCreate\",{editor:this}),this.on(\"mount\",this.options.onMount),this.on(\"unmount\",this.options.onUnmount),this.on(\"contentError\",this.options.onContentError),this.on(\"create\",this.options.onCreate),this.on(\"update\",this.options.onUpdate),this.on(\"selectionUpdate\",this.options.onSelectionUpdate),this.on(\"transaction\",this.options.onTransaction),this.on(\"focus\",this.options.onFocus),this.on(\"blur\",this.options.onBlur),this.on(\"destroy\",this.options.onDestroy),this.on(\"drop\",({event:r,slice:o,moved:i})=>this.options.onDrop(r,o,i)),this.on(\"paste\",({event:r,slice:o})=>this.options.onPaste(r,o)),this.on(\"delete\",this.options.onDelete);let e=this.createDoc(),n=Fd(e,this.options.autofocus);this.editorState=Fr.create({doc:e,schema:this.schema,selection:n||void 0}),this.options.element&&this.mount(this.options.element)}mount(t){if(typeof document>\"u\")throw new Error(\"[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.\");this.createView(t),this.emit(\"mount\",{editor:this}),this.css&&!document.head.contains(this.css)&&document.head.appendChild(this.css),window.setTimeout(()=>{this.isDestroyed||(this.options.autofocus!==!1&&this.options.autofocus!==null&&this.commands.focus(this.options.autofocus),this.emit(\"create\",{editor:this}),this.isInitialized=!0)},0)}unmount(){if(this.editorView){let t=this.editorView.dom;t?.editor&&delete t.editor,this.editorView.destroy()}if(this.editorView=null,this.isInitialized=!1,this.css&&!document.querySelectorAll(`.${this.className}`).length)try{typeof this.css.remove==\"function\"?this.css.remove():this.css.parentNode&&this.css.parentNode.removeChild(this.css)}catch(t){console.warn(\"Failed to remove CSS element:\",t)}this.css=null,this.emit(\"unmount\",{editor:this})}get storage(){return this.extensionStorage}get commands(){return this.commandManager.commands}chain(){return this.commandManager.chain()}can(){return this.commandManager.can()}injectCSS(){this.options.injectCSS&&typeof document<\"u\"&&(this.css=xb(wb,this.options.injectNonce))}setOptions(t={}){this.options={...this.options,...t},!(!this.editorView||!this.state||this.isDestroyed)&&(this.options.editorProps&&this.view.setProps(this.options.editorProps),this.view.updateState(this.state))}setEditable(t,e=!0){this.setOptions({editable:t}),e&&this.emit(\"update\",{editor:this,transaction:this.state.tr,appendedTransactions:[]})}get isEditable(){return this.options.editable&&this.view&&this.view.editable}get view(){return this.editorView?this.editorView:new Proxy({state:this.editorState,updateState:t=>{this.editorState=t},dispatch:t=>{this.dispatchTransaction(t)},composing:!1,dragging:null,editable:!0,isDestroyed:!1},{get:(t,e)=>{if(this.editorView)return this.editorView[e];if(e===\"state\")return this.editorState;if(e in t)return Reflect.get(t,e);throw new Error(`[tiptap error]: The editor view is not available. Cannot access view['${e}']. The editor may not be mounted yet.`)}})}get state(){return this.editorView&&(this.editorState=this.view.state),this.editorState}registerPlugin(t,e){let n=Ud(e)?e(t,[...this.state.plugins]):[...this.state.plugins,t],r=this.state.reconfigure({plugins:n});return this.view.updateState(r),r}unregisterPlugin(t){if(this.isDestroyed)return;let e=this.state.plugins,n=e;if([].concat(t).forEach(o=>{let i=typeof o==\"string\"?`${o}$`:o.key;n=n.filter(s=>!s.key.startsWith(i))}),e.length===n.length)return;let r=this.state.reconfigure({plugins:n});return this.view.updateState(r),r}createExtensionManager(){var t,e;let r=[...this.options.enableCoreExtensions?[cu,iu.configure({blockSeparator:(e=(t=this.options.coreExtensionOptions)==null?void 0:t.clipboardTextSerializer)==null?void 0:e.blockSeparator}),su,uu,fu,pu,au,hu,lu,mu.configure({direction:this.options.textDirection})].filter(o=>typeof this.options.enableCoreExtensions==\"object\"?this.options.enableCoreExtensions[o.name]!==!1:!0):[],...this.options.extensions].filter(o=>[\"extension\",\"node\",\"mark\"].includes(o?.type));this.extensionManager=new yo(r,this)}createCommandManager(){this.commandManager=new uo({editor:this})}createSchema(){this.schema=this.extensionManager.schema}createDoc(){let t;try{t=_s(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:this.options.enableContentCheck})}catch(e){if(!(e instanceof Error)||![\"[tiptap error]: Invalid JSON content\",\"[tiptap error]: Invalid HTML content\"].includes(e.message))throw e;this.emit(\"contentError\",{editor:this,error:e,disableCollaboration:()=>{\"collaboration\"in this.storage&&typeof this.storage.collaboration==\"object\"&&this.storage.collaboration&&(this.storage.collaboration.isDisabled=!0),this.options.extensions=this.options.extensions.filter(n=>n.name!==\"collaboration\"),this.createExtensionManager()}}),t=_s(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:!1})}return t}createView(t){var e;this.editorView=new tr(t,{...this.options.editorProps,attributes:{role:\"textbox\",...(e=this.options.editorProps)==null?void 0:e.attributes},dispatchTransaction:this.dispatchTransaction.bind(this),state:this.editorState,markViews:this.extensionManager.markViews,nodeViews:this.extensionManager.nodeViews});let n=this.state.reconfigure({plugins:this.extensionManager.plugins});this.view.updateState(n),this.prependClass(),this.injectCSS();let r=this.view.dom;r.editor=this}createNodeViews(){this.view.isDestroyed||this.view.setProps({markViews:this.extensionManager.markViews,nodeViews:this.extensionManager.nodeViews})}prependClass(){this.view.dom.className=`${this.className} ${this.view.dom.className}`}captureTransaction(t){this.isCapturingTransaction=!0,t(),this.isCapturingTransaction=!1;let e=this.capturedTransaction;return this.capturedTransaction=null,e}dispatchTransaction(t){if(this.view.isDestroyed)return;if(this.isCapturingTransaction){if(!this.capturedTransaction){this.capturedTransaction=t;return}t.steps.forEach(c=>{var d;return(d=this.capturedTransaction)==null?void 0:d.step(c)});return}let{state:e,transactions:n}=this.state.applyTransaction(t),r=!this.state.selection.eq(e.selection),o=n.includes(t),i=this.state;if(this.emit(\"beforeTransaction\",{editor:this,transaction:t,nextState:e}),!o)return;this.view.updateState(e),this.emit(\"transaction\",{editor:this,transaction:t,appendedTransactions:n.slice(1)}),r&&this.emit(\"selectionUpdate\",{editor:this,transaction:t});let s=n.findLast(c=>c.getMeta(\"focus\")||c.getMeta(\"blur\")),l=s?.getMeta(\"focus\"),a=s?.getMeta(\"blur\");l&&this.emit(\"focus\",{editor:this,event:l.event,transaction:s}),a&&this.emit(\"blur\",{editor:this,event:a.event,transaction:s}),!(t.getMeta(\"preventUpdate\")||!n.some(c=>c.docChanged)||i.doc.eq(e.doc))&&this.emit(\"update\",{editor:this,transaction:t,appendedTransactions:n.slice(1)})}getAttributes(t){return Zs(this.state,t)}isActive(t,e){let n=typeof t==\"string\"?t:null,r=typeof t==\"string\"?e:t;return tl(this.state,n,r)}getJSON(){return this.state.doc.toJSON()}getHTML(){return Ys(this.state.doc.content,this.schema)}getText(t){let{blockSeparator:e=`\n\n`,textSerializers:n={}}=t||{};return Iy(this.state.doc,{blockSeparator:e,textSerializers:{...Gd(this.schema),...n}})}get isEmpty(){return lr(this.state.doc)}destroy(){this.emit(\"destroy\"),this.unmount(),this.removeAllListeners()}get isDestroyed(){var t,e;return(e=(t=this.editorView)==null?void 0:t.isDestroyed)!=null?e:!0}$node(t,e){var n;return((n=this.$doc)==null?void 0:n.querySelector(t,e))||null}$nodes(t,e){var n;return((n=this.$doc)==null?void 0:n.querySelectorAll(t,e))||null}$pos(t){let e=this.state.doc.resolve(t);return new bb(e,this)}get $doc(){return this.$pos(0)}};function Be(t){return new go({find:t.find,handler:({state:e,range:n,match:r})=>{let o=G(t.getAttributes,void 0,r);if(o===!1||o===null)return null;let{tr:i}=e,s=r[r.length-1],l=r[0];if(s){let a=l.search(/\\S/),c=n.from+l.indexOf(s),d=c+s.length;if(po(n.from,n.to,e.doc).filter(h=>h.mark.type.excluded.find(m=>m===t.type&&m!==h.mark.type)).filter(h=>h.to>c).length)return null;d<n.to&&i.delete(d,n.to),c>n.from&&i.delete(n.from+a,c);let f=n.from+a+s.length;i.addMark(n.from+a,f,t.type.create(o||{})),i.removeStoredMark(t.type)}},undoable:t.undoable})}function bo(t){return new go({find:t.find,handler:({state:e,range:n,match:r})=>{let o=G(t.getAttributes,void 0,r)||{},{tr:i}=e,s=n.from,l=n.to,a=t.type.create(o);if(r[1]){let c=r[0].lastIndexOf(r[1]),d=s+c;d>l?d=l:l=d+r[1].length;let u=r[0][r[0].length-1];i.insertText(u,s+r[0].length-1),i.replaceWith(d,l,a)}else if(r[0]){let c=t.type.isInline?s:s-1;i.insert(c,t.type.create(o)).delete(i.mapping.map(s),i.mapping.map(l))}i.scrollIntoView()},undoable:t.undoable})}function ar(t){return new go({find:t.find,handler:({state:e,range:n,match:r})=>{let o=e.doc.resolve(n.from),i=G(t.getAttributes,void 0,r)||{};if(!o.node(-1).canReplaceWith(o.index(-1),o.indexAfter(-1),t.type))return null;e.tr.delete(n.from,n.to).setBlockType(n.from,n.from,t.type,i)},undoable:t.undoable})}function tt(t){return new go({find:t.find,handler:({state:e,range:n,match:r,chain:o})=>{let i=G(t.getAttributes,void 0,r)||{},s=e.tr.delete(n.from,n.to),a=s.doc.resolve(n.from).blockRange(),c=a&&mn(a,t.type,i);if(!c)return null;if(s.wrap(a,c),t.keepMarks&&t.editor){let{selection:u,storedMarks:f}=e,{splittableMarks:h}=t.editor.extensionManager,p=f||u.$to.parentOffset&&u.$from.marks();if(p){let m=p.filter(g=>h.includes(g.type.name));s.ensureMarks(m)}}if(t.keepAttributes){let u=t.type.name===\"bulletList\"||t.type.name===\"orderedList\"?\"listItem\":\"taskList\";o().updateAttributes(u,i).run()}let d=s.doc.resolve(n.from-1).nodeBefore;d&&d.type===t.type&&Re(s.doc,n.from-1)&&(!t.joinPredicate||t.joinPredicate(r,d))&&s.join(n.from-1)},undoable:t.undoable})}var kb=t=>\"touches\"in t,yu=class{constructor(t){this.directions=[\"bottom-left\",\"bottom-right\",\"top-left\",\"top-right\"],this.minSize={height:8,width:8},this.preserveAspectRatio=!1,this.classNames={container:\"\",wrapper:\"\",handle:\"\",resizing:\"\"},this.initialWidth=0,this.initialHeight=0,this.aspectRatio=1,this.isResizing=!1,this.activeHandle=null,this.startX=0,this.startY=0,this.startWidth=0,this.startHeight=0,this.isShiftKeyPressed=!1,this.lastEditableState=void 0,this.handleMap=new Map,this.handleMouseMove=l=>{if(!this.isResizing||!this.activeHandle)return;let a=l.clientX-this.startX,c=l.clientY-this.startY;this.handleResize(a,c)},this.handleTouchMove=l=>{if(!this.isResizing||!this.activeHandle)return;let a=l.touches[0];if(!a)return;let c=a.clientX-this.startX,d=a.clientY-this.startY;this.handleResize(c,d)},this.handleMouseUp=()=>{if(!this.isResizing)return;let l=this.element.offsetWidth,a=this.element.offsetHeight;this.onCommit(l,a),this.isResizing=!1,this.activeHandle=null,this.container.dataset.resizeState=\"false\",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener(\"mousemove\",this.handleMouseMove),document.removeEventListener(\"mouseup\",this.handleMouseUp),document.removeEventListener(\"keydown\",this.handleKeyDown),document.removeEventListener(\"keyup\",this.handleKeyUp)},this.handleKeyDown=l=>{l.key===\"Shift\"&&(this.isShiftKeyPressed=!0)},this.handleKeyUp=l=>{l.key===\"Shift\"&&(this.isShiftKeyPressed=!1)};var e,n,r,o,i,s;this.node=t.node,this.editor=t.editor,this.element=t.element,this.contentElement=t.contentElement,this.getPos=t.getPos,this.onResize=t.onResize,this.onCommit=t.onCommit,this.onUpdate=t.onUpdate,(e=t.options)!=null&&e.min&&(this.minSize={...this.minSize,...t.options.min}),(n=t.options)!=null&&n.max&&(this.maxSize=t.options.max),(r=t?.options)!=null&&r.directions&&(this.directions=t.options.directions),(o=t.options)!=null&&o.preserveAspectRatio&&(this.preserveAspectRatio=t.options.preserveAspectRatio),(i=t.options)!=null&&i.className&&(this.classNames={container:t.options.className.container||\"\",wrapper:t.options.className.wrapper||\"\",handle:t.options.className.handle||\"\",resizing:t.options.className.resizing||\"\"}),(s=t.options)!=null&&s.createCustomHandle&&(this.createCustomHandle=t.options.createCustomHandle),this.wrapper=this.createWrapper(),this.container=this.createContainer(),this.applyInitialSize(),this.attachHandles(),this.editor.on(\"update\",this.handleEditorUpdate.bind(this))}get dom(){return this.container}get contentDOM(){return this.contentElement}handleEditorUpdate(){let t=this.editor.isEditable;t!==this.lastEditableState&&(this.lastEditableState=t,t?t&&this.handleMap.size===0&&this.attachHandles():this.removeHandles())}update(t,e,n){return t.type!==this.node.type?!1:(this.node=t,this.onUpdate?this.onUpdate(t,e,n):!0)}destroy(){this.isResizing&&(this.container.dataset.resizeState=\"false\",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener(\"mousemove\",this.handleMouseMove),document.removeEventListener(\"mouseup\",this.handleMouseUp),document.removeEventListener(\"keydown\",this.handleKeyDown),document.removeEventListener(\"keyup\",this.handleKeyUp),this.isResizing=!1,this.activeHandle=null),this.editor.off(\"update\",this.handleEditorUpdate.bind(this)),this.container.remove()}createContainer(){let t=document.createElement(\"div\");return t.dataset.resizeContainer=\"\",t.dataset.node=this.node.type.name,t.style.display=\"flex\",this.classNames.container&&(t.className=this.classNames.container),t.appendChild(this.wrapper),t}createWrapper(){let t=document.createElement(\"div\");return t.style.position=\"relative\",t.style.display=\"block\",t.dataset.resizeWrapper=\"\",this.classNames.wrapper&&(t.className=this.classNames.wrapper),t.appendChild(this.element),t}createHandle(t){let e=document.createElement(\"div\");return e.dataset.resizeHandle=t,e.style.position=\"absolute\",this.classNames.handle&&(e.className=this.classNames.handle),e}positionHandle(t,e){let n=e.includes(\"top\"),r=e.includes(\"bottom\"),o=e.includes(\"left\"),i=e.includes(\"right\");n&&(t.style.top=\"0\"),r&&(t.style.bottom=\"0\"),o&&(t.style.left=\"0\"),i&&(t.style.right=\"0\"),(e===\"top\"||e===\"bottom\")&&(t.style.left=\"0\",t.style.right=\"0\"),(e===\"left\"||e===\"right\")&&(t.style.top=\"0\",t.style.bottom=\"0\")}attachHandles(){this.directions.forEach(t=>{let e;this.createCustomHandle?e=this.createCustomHandle(t):e=this.createHandle(t),e instanceof HTMLElement||(console.warn(`[ResizableNodeView] createCustomHandle(\"${t}\") did not return an HTMLElement. Falling back to default handle.`),e=this.createHandle(t)),this.createCustomHandle||this.positionHandle(e,t),e.addEventListener(\"mousedown\",n=>this.handleResizeStart(n,t)),e.addEventListener(\"touchstart\",n=>this.handleResizeStart(n,t)),this.handleMap.set(t,e),this.wrapper.appendChild(e)})}removeHandles(){this.handleMap.forEach(t=>t.remove()),this.handleMap.clear()}applyInitialSize(){let t=this.node.attrs.width,e=this.node.attrs.height;t?(this.element.style.width=`${t}px`,this.initialWidth=t):this.initialWidth=this.element.offsetWidth,e?(this.element.style.height=`${e}px`,this.initialHeight=e):this.initialHeight=this.element.offsetHeight,this.initialWidth>0&&this.initialHeight>0&&(this.aspectRatio=this.initialWidth/this.initialHeight)}handleResizeStart(t,e){t.preventDefault(),t.stopPropagation(),this.isResizing=!0,this.activeHandle=e,kb(t)?(this.startX=t.touches[0].clientX,this.startY=t.touches[0].clientY):(this.startX=t.clientX,this.startY=t.clientY),this.startWidth=this.element.offsetWidth,this.startHeight=this.element.offsetHeight,this.startWidth>0&&this.startHeight>0&&(this.aspectRatio=this.startWidth/this.startHeight);let n=this.getPos();this.container.dataset.resizeState=\"true\",this.classNames.resizing&&this.container.classList.add(this.classNames.resizing),document.addEventListener(\"mousemove\",this.handleMouseMove),document.addEventListener(\"touchmove\",this.handleTouchMove),document.addEventListener(\"mouseup\",this.handleMouseUp),document.addEventListener(\"keydown\",this.handleKeyDown),document.addEventListener(\"keyup\",this.handleKeyUp)}handleResize(t,e){if(!this.activeHandle)return;let n=this.preserveAspectRatio||this.isShiftKeyPressed,{width:r,height:o}=this.calculateNewDimensions(this.activeHandle,t,e),i=this.applyConstraints(r,o,n);this.element.style.width=`${i.width}px`,this.element.style.height=`${i.height}px`,this.onResize&&this.onResize(i.width,i.height)}calculateNewDimensions(t,e,n){let r=this.startWidth,o=this.startHeight,i=t.includes(\"right\"),s=t.includes(\"left\"),l=t.includes(\"bottom\"),a=t.includes(\"top\");return i?r=this.startWidth+e:s&&(r=this.startWidth-e),l?o=this.startHeight+n:a&&(o=this.startHeight-n),(t===\"right\"||t===\"left\")&&(r=this.startWidth+(i?e:-e)),(t===\"top\"||t===\"bottom\")&&(o=this.startHeight+(l?n:-n)),this.preserveAspectRatio||this.isShiftKeyPressed?this.applyAspectRatio(r,o,t):{width:r,height:o}}applyConstraints(t,e,n){var r,o,i,s;if(!n){let c=Math.max(this.minSize.width,t),d=Math.max(this.minSize.height,e);return(r=this.maxSize)!=null&&r.width&&(c=Math.min(this.maxSize.width,c)),(o=this.maxSize)!=null&&o.height&&(d=Math.min(this.maxSize.height,d)),{width:c,height:d}}let l=t,a=e;return l<this.minSize.width&&(l=this.minSize.width,a=l/this.aspectRatio),a<this.minSize.height&&(a=this.minSize.height,l=a*this.aspectRatio),(i=this.maxSize)!=null&&i.width&&l>this.maxSize.width&&(l=this.maxSize.width,a=l/this.aspectRatio),(s=this.maxSize)!=null&&s.height&&a>this.maxSize.height&&(a=this.maxSize.height,l=a*this.aspectRatio),{width:l,height:a}}applyAspectRatio(t,e,n){let r=n===\"left\"||n===\"right\",o=n===\"top\"||n===\"bottom\";return r?{width:t,height:t/this.aspectRatio}:o?{width:e*this.aspectRatio,height:e}:{width:t,height:t/this.aspectRatio}}};function bu(t,e){let{selection:n}=t,{$from:r}=n;if(n instanceof L){let i=r.index();return r.parent.canReplaceWith(i,i+1,e)}let o=r.depth;for(;o>=0;){let i=r.index(o);if(r.node(o).contentMatchAt(i).matchType(e))return!0;o-=1}return!1}function wu(t){return t.replace(/[-/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}var Sb={};js(Sb,{createAtomBlockMarkdownSpec:()=>Cb,createBlockMarkdownSpec:()=>Zt,createInlineMarkdownSpec:()=>Tb,parseAttributes:()=>rl,parseIndentedBlocks:()=>wo,renderNestedMarkdownContent:()=>cr,serializeAttributes:()=>ol});function rl(t){if(!t?.trim())return{};let e={},n=[],r=t.replace(/[\"']([^\"']*)[\"']/g,c=>(n.push(c),`__QUOTED_${n.length-1}__`)),o=r.match(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g);if(o){let c=o.map(d=>d.trim().slice(1));e.class=c.join(\" \")}let i=r.match(/(?:^|\\s)#([a-zA-Z][\\w-]*)/);i&&(e.id=i[1]);let s=/([a-zA-Z][\\w-]*)\\s*=\\s*(__QUOTED_\\d+__)/g;Array.from(r.matchAll(s)).forEach(([,c,d])=>{var u;let f=parseInt(((u=d.match(/__QUOTED_(\\d+)__/))==null?void 0:u[1])||\"0\",10),h=n[f];h&&(e[c]=h.slice(1,-1))});let a=r.replace(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g,\"\").replace(/(?:^|\\s)#([a-zA-Z][\\w-]*)/g,\"\").replace(/([a-zA-Z][\\w-]*)\\s*=\\s*__QUOTED_\\d+__/g,\"\").trim();return a&&a.split(/\\s+/).filter(Boolean).forEach(d=>{d.match(/^[a-zA-Z][\\w-]*$/)&&(e[d]=!0)}),e}function ol(t){if(!t||Object.keys(t).length===0)return\"\";let e=[];return t.class&&String(t.class).split(/\\s+/).filter(Boolean).forEach(r=>e.push(`.${r}`)),t.id&&e.push(`#${t.id}`),Object.entries(t).forEach(([n,r])=>{n===\"class\"||n===\"id\"||(r===!0?e.push(n):r!==!1&&r!=null&&e.push(`${n}=\"${String(r)}\"`))}),e.join(\" \")}function Cb(t){let{nodeName:e,name:n,parseAttributes:r=rl,serializeAttributes:o=ol,defaultAttributes:i={},requiredAttributes:s=[],allowedAttributes:l}=t,a=n||e,c=d=>{if(!l)return d;let u={};return l.forEach(f=>{f in d&&(u[f]=d[f])}),u};return{parseMarkdown:(d,u)=>{let f={...i,...d.attributes};return u.createNode(e,f,[])},markdownTokenizer:{name:e,level:\"block\",start(d){var u;let f=new RegExp(`^:::${a}(?:\\\\s|$)`,\"m\"),h=(u=d.match(f))==null?void 0:u.index;return h!==void 0?h:-1},tokenize(d,u,f){let h=new RegExp(`^:::${a}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*:::(?:\\\\n|$)`),p=d.match(h);if(!p)return;let m=p[1]||\"\",g=r(m);if(!s.find(w=>!(w in g)))return{type:e,raw:p[0],attributes:g}}},renderMarkdown:d=>{let u=c(d.attrs||{}),f=o(u),h=f?` {${f}}`:\"\";return`:::${a}${h} :::`}}}function Zt(t){let{nodeName:e,name:n,getContent:r,parseAttributes:o=rl,serializeAttributes:i=ol,defaultAttributes:s={},content:l=\"block\",allowedAttributes:a}=t,c=n||e,d=u=>{if(!a)return u;let f={};return a.forEach(h=>{h in u&&(f[h]=u[h])}),f};return{parseMarkdown:(u,f)=>{let h;if(r){let m=r(u);h=typeof m==\"string\"?[{type:\"text\",text:m}]:m}else l===\"block\"?h=f.parseChildren(u.tokens||[]):h=f.parseInline(u.tokens||[]);let p={...s,...u.attributes};return f.createNode(e,p,h)},markdownTokenizer:{name:e,level:\"block\",start(u){var f;let h=new RegExp(`^:::${c}`,\"m\"),p=(f=u.match(h))==null?void 0:f.index;return p!==void 0?p:-1},tokenize(u,f,h){var p;let m=new RegExp(`^:::${c}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*\\\\n`),g=u.match(m);if(!g)return;let[y,w=\"\"]=g,b=o(w),C=1,x=y.length,S=\"\",k=/^:::([\\w-]*)(\\s.*)?/gm,O=u.slice(x);for(k.lastIndex=0;;){let T=k.exec(O);if(T===null)break;let A=T.index,$=T[1];if(!((p=T[2])!=null&&p.endsWith(\":::\"))){if($)C+=1;else if(C-=1,C===0){let z=O.slice(0,A);S=z.trim();let K=u.slice(0,x+A+T[0].length),V=[];if(S)if(l===\"block\")for(V=h.blockTokens(z),V.forEach(N=>{N.text&&(!N.tokens||N.tokens.length===0)&&(N.tokens=h.inlineTokens(N.text))});V.length>0;){let N=V[V.length-1];if(N.type===\"paragraph\"&&(!N.text||N.text.trim()===\"\"))V.pop();else break}else V=h.inlineTokens(S);return{type:e,raw:K,attributes:b,content:S,tokens:V}}}}}},renderMarkdown:(u,f)=>{let h=d(u.attrs||{}),p=i(h),m=p?` {${p}}`:\"\",g=f.renderChildren(u.content||[],`\n\n`);return`:::${c}${m}\n\n${g}\n\n:::`}}}function vb(t){if(!t.trim())return{};let e={},n=/(\\w+)=(?:\"([^\"]*)\"|'([^']*)')/g,r=n.exec(t);for(;r!==null;){let[,o,i,s]=r;e[o]=i||s,r=n.exec(t)}return e}function Mb(t){return Object.entries(t).filter(([,e])=>e!=null).map(([e,n])=>`${e}=\"${n}\"`).join(\" \")}function Tb(t){let{nodeName:e,name:n,getContent:r,parseAttributes:o=vb,serializeAttributes:i=Mb,defaultAttributes:s={},selfClosing:l=!1,allowedAttributes:a}=t,c=n||e,d=f=>{if(!a)return f;let h={};return a.forEach(p=>{let m=typeof p==\"string\"?p:p.name,g=typeof p==\"string\"?void 0:p.skipIfDefault;if(m in f){let y=f[m];if(g!==void 0&&y===g)return;h[m]=y}}),h},u=c.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");return{parseMarkdown:(f,h)=>{let p={...s,...f.attributes};if(l)return h.createNode(e,p);let m=r?r(f):f.content||\"\";return m?h.createNode(e,p,[h.createTextNode(m)]):h.createNode(e,p,[])},markdownTokenizer:{name:e,level:\"inline\",start(f){let h=l?new RegExp(`\\\\[${u}\\\\s*[^\\\\]]*\\\\]`):new RegExp(`\\\\[${u}\\\\s*[^\\\\]]*\\\\][\\\\s\\\\S]*?\\\\[\\\\/${u}\\\\]`),p=f.match(h),m=p?.index;return m!==void 0?m:-1},tokenize(f,h,p){let m=l?new RegExp(`^\\\\[${u}\\\\s*([^\\\\]]*)\\\\]`):new RegExp(`^\\\\[${u}\\\\s*([^\\\\]]*)\\\\]([\\\\s\\\\S]*?)\\\\[\\\\/${u}\\\\]`),g=f.match(m);if(!g)return;let y=\"\",w=\"\";if(l){let[,C]=g;w=C}else{let[,C,x]=g;w=C,y=x||\"\"}let b=o(w.trim());return{type:e,raw:g[0],content:y.trim(),attributes:b}}},renderMarkdown:f=>{let h=\"\";r?h=r(f):f.content&&f.content.length>0&&(h=f.content.filter(y=>y.type===\"text\").map(y=>y.text).join(\"\"));let p=d(f.attrs||{}),m=i(p),g=m?` ${m}`:\"\";return l?`[${c}${g}]`:`[${c}${g}]${h}[/${c}]`}}}function wo(t,e,n){var r,o,i,s;let l=t.split(`\n`),a=[],c=\"\",d=0,u=e.baseIndentSize||2;for(;d<l.length;){let f=l[d],h=f.match(e.itemPattern);if(!h){if(a.length>0)break;if(f.trim()===\"\"){d+=1,c=`${c}${f}\n`;continue}else return}let p=e.extractItemData(h),{indentLevel:m,mainContent:g}=p;c=`${c}${f}\n`;let y=[g];for(d+=1;d<l.length;){let x=l[d];if(x.trim()===\"\"){let k=l.slice(d+1).findIndex(A=>A.trim()!==\"\");if(k===-1)break;if((((o=(r=l[d+1+k].match(/^(\\s*)/))==null?void 0:r[1])==null?void 0:o.length)||0)>m){y.push(x),c=`${c}${x}\n`,d+=1;continue}else break}if((((s=(i=x.match(/^(\\s*)/))==null?void 0:i[1])==null?void 0:s.length)||0)>m)y.push(x),c=`${c}${x}\n`,d+=1;else break}let w,b=y.slice(1);if(b.length>0){let x=b.map(S=>S.slice(m+u)).join(`\n`);x.trim()&&(e.customNestedParser?w=e.customNestedParser(x):w=n.blockTokens(x))}let C=e.createToken(p,w);a.push(C)}if(a.length!==0)return{items:a,raw:c}}function cr(t,e,n,r){if(!t||!Array.isArray(t.content))return\"\";let o=typeof n==\"function\"?n(r):n,[i,...s]=t.content,l=e.renderChildren([i]),a=[`${o}${l}`];return s&&s.length>0&&s.forEach(c=>{let d=e.renderChildren([c]);if(d){let u=d.split(`\n`).map(f=>f?e.indent(f):\"\").join(`\n`);a.push(u)}}),a.join(`\n`)}function Ab(t,e,n={}){let{state:r}=e,{doc:o,tr:i}=r,s=t;o.descendants((l,a)=>{let c=i.mapping.map(a),d=i.mapping.map(a)+l.nodeSize,u=null;if(l.marks.forEach(h=>{if(h!==s)return!1;u=h}),!u)return;let f=!1;if(Object.keys(n).forEach(h=>{n[h]!==u.attrs[h]&&(f=!0)}),f){let h=t.type.create({...t.attrs,...n});i.removeMark(c,d,t.type),i.addMark(c,d,h)}}),i.docChanged&&e.view.dispatch(i)}var F=class xu extends nl{constructor(){super(...arguments),this.type=\"node\"}static create(e={}){let n=typeof e==\"function\"?e():e;return new xu(n)}configure(e){return super.configure(e)}extend(e){let n=typeof e==\"function\"?e():e;return super.extend(n)}};function Me(t){return new fb({find:t.find,handler:({state:e,range:n,match:r,pasteEvent:o})=>{let i=G(t.getAttributes,void 0,r,o);if(i===!1||i===null)return null;let{tr:s}=e,l=r[r.length-1],a=r[0],c=n.to;if(l){let d=a.search(/\\S/),u=n.from+a.indexOf(l),f=u+l.length;if(po(n.from,n.to,e.doc).filter(p=>p.mark.type.excluded.find(g=>g===t.type&&g!==p.mark.type)).filter(p=>p.to>u).length)return null;f<n.to&&s.delete(f,n.to),u>n.from&&s.delete(n.from+d,u),c=n.from+d+l.length,s.addMark(n.from+d,c,t.type.create(i||{})),s.removeStoredMark(t.type)}}})}function ku(t={}){return new P({view(e){return new il(e,t)}})}var il=class{constructor(e,n){var r;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=(r=n.width)!==null&&r!==void 0?r:1,this.color=n.color===!1?void 0:n.color||\"black\",this.class=n.class,this.handlers=[\"dragover\",\"dragend\",\"drop\",\"dragleave\"].map(o=>{let i=s=>{this[o](s)};return e.dom.addEventListener(o,i),{name:o,handler:i}})}destroy(){this.handlers.forEach(({name:e,handler:n})=>this.editorView.dom.removeEventListener(e,n))}update(e,n){this.cursorPos!=null&&n.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),n=!e.parent.inlineContent,r,o=this.editorView.dom,i=o.getBoundingClientRect(),s=i.width/o.offsetWidth,l=i.height/o.offsetHeight;if(n){let u=e.nodeBefore,f=e.nodeAfter;if(u||f){let h=this.editorView.nodeDOM(this.cursorPos-(u?u.nodeSize:0));if(h){let p=h.getBoundingClientRect(),m=u?p.bottom:p.top;u&&f&&(m=(m+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let g=this.width/2*l;r={left:p.left,right:p.right,top:m-g,bottom:m+g}}}}if(!r){let u=this.editorView.coordsAtPos(this.cursorPos),f=this.width/2*s;r={left:u.left-f,right:u.left+f,top:u.top,bottom:u.bottom}}let a=this.editorView.dom.offsetParent;this.element||(this.element=a.appendChild(document.createElement(\"div\")),this.class&&(this.element.className=this.class),this.element.style.cssText=\"position: absolute; z-index: 50; pointer-events: none;\",this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle(\"prosemirror-dropcursor-block\",n),this.element.classList.toggle(\"prosemirror-dropcursor-inline\",!n);let c,d;if(!a||a==document.body&&getComputedStyle(a).position==\"static\")c=-pageXOffset,d=-pageYOffset;else{let u=a.getBoundingClientRect(),f=u.width/a.offsetWidth,h=u.height/a.offsetHeight;c=u.left-a.scrollLeft*f,d=u.top-a.scrollTop*h}this.element.style.left=(r.left-c)/s+\"px\",this.element.style.top=(r.top-d)/l+\"px\",this.element.style.width=(r.right-r.left)/s+\"px\",this.element.style.height=(r.bottom-r.top)/l+\"px\"}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let n=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),r=n&&n.inside>=0&&this.editorView.state.doc.nodeAt(n.inside),o=r&&r.type.spec.disableDropCursor,i=typeof o==\"function\"?o(this.editorView,n,e):o;if(n&&!i){let s=n.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let l=zr(this.editorView.state.doc,s,this.editorView.dragging.slice);l!=null&&(s=l)}this.setCursor(s),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}};var ae=class t extends I{constructor(e){super(e,e)}map(e,n){let r=e.resolve(n.map(this.head));return t.valid(r)?new t(r):I.near(r)}content(){return E.empty}eq(e){return e instanceof t&&e.head==this.head}toJSON(){return{type:\"gapcursor\",pos:this.head}}static fromJSON(e,n){if(typeof n.pos!=\"number\")throw new RangeError(\"Invalid input for GapCursor.fromJSON\");return new t(e.resolve(n.pos))}getBookmark(){return new sl(this.anchor)}static valid(e){let n=e.parent;if(n.isTextblock||!Eb(e)||!Nb(e))return!1;let r=n.type.spec.allowGapCursor;if(r!=null)return r;let o=n.contentMatchAt(e.index()).defaultType;return o&&o.isTextblock}static findGapCursorFrom(e,n,r=!1){e:for(;;){if(!r&&t.valid(e))return e;let o=e.pos,i=null;for(let s=e.depth;;s--){let l=e.node(s);if(n>0?e.indexAfter(s)<l.childCount:e.index(s)>0){i=l.child(n>0?e.indexAfter(s):e.index(s)-1);break}else if(s==0)return null;o+=n;let a=e.doc.resolve(o);if(t.valid(a))return a}for(;;){let s=n>0?i.firstChild:i.lastChild;if(!s){if(i.isAtom&&!i.isText&&!L.isSelectable(i)){e=e.doc.resolve(o+i.nodeSize*n),r=!1;continue e}break}i=s,o+=n;let l=e.doc.resolve(o);if(t.valid(l))return l}return null}}};ae.prototype.visible=!1;ae.findFrom=ae.findGapCursorFrom;I.jsonID(\"gapcursor\",ae);var sl=class t{constructor(e){this.pos=e}map(e){return new t(e.map(this.pos))}resolve(e){let n=e.resolve(this.pos);return ae.valid(n)?new ae(n):I.near(n)}};function Su(t){return t.isAtom||t.spec.isolating||t.spec.createGapCursor}function Eb(t){for(let e=t.depth;e>=0;e--){let n=t.index(e),r=t.node(e);if(n==0){if(r.type.spec.isolating)return!0;continue}for(let o=r.child(n-1);;o=o.lastChild){if(o.childCount==0&&!o.inlineContent||Su(o.type))return!0;if(o.inlineContent)return!1}}return!0}function Nb(t){for(let e=t.depth;e>=0;e--){let n=t.indexAfter(e),r=t.node(e);if(n==r.childCount){if(r.type.spec.isolating)return!0;continue}for(let o=r.child(n);;o=o.firstChild){if(o.childCount==0&&!o.inlineContent||Su(o.type))return!0;if(o.inlineContent)return!1}}return!0}function Cu(){return new P({props:{decorations:Ib,createSelectionBetween(t,e,n){return e.pos==n.pos&&ae.valid(n)?new ae(n):null},handleClick:Rb,handleKeyDown:Ob,handleDOMEvents:{beforeinput:Db}}})}var Ob=or({ArrowLeft:xo(\"horiz\",-1),ArrowRight:xo(\"horiz\",1),ArrowUp:xo(\"vert\",-1),ArrowDown:xo(\"vert\",1)});function xo(t,e){let n=t==\"vert\"?e>0?\"down\":\"up\":e>0?\"right\":\"left\";return function(r,o,i){let s=r.selection,l=e>0?s.$to:s.$from,a=s.empty;if(s instanceof D){if(!i.endOfTextblock(n)||l.depth==0)return!1;a=!1,l=r.doc.resolve(e>0?l.after():l.before())}let c=ae.findGapCursorFrom(l,e,a);return c?(o&&o(r.tr.setSelection(new ae(c))),!0):!1}}function Rb(t,e,n){if(!t||!t.editable)return!1;let r=t.state.doc.resolve(e);if(!ae.valid(r))return!1;let o=t.posAtCoords({left:n.clientX,top:n.clientY});return o&&o.inside>-1&&L.isSelectable(t.state.doc.nodeAt(o.inside))?!1:(t.dispatch(t.state.tr.setSelection(new ae(r))),!0)}function Db(t,e){if(e.inputType!=\"insertCompositionText\"||!(t.state.selection instanceof ae))return!1;let{$from:n}=t.state.selection,r=n.parent.contentMatchAt(n.index()).findWrapping(t.state.schema.nodes.text);if(!r)return!1;let o=v.empty;for(let s=r.length-1;s>=0;s--)o=v.from(r[s].createAndFill(null,o));let i=t.state.tr.replace(n.pos,n.pos,new E(o,0,0));return i.setSelection(D.near(i.doc.resolve(n.pos+1))),t.dispatch(i),!1}function Ib(t){if(!(t.selection instanceof ae))return null;let e=document.createElement(\"div\");return e.className=\"ProseMirror-gapcursor\",Y.create(t.doc,[te.widget(t.selection.head,e,{key:\"gapcursor\"})])}var ko=200,he=function(){};he.prototype.append=function(e){return e.length?(e=he.from(e),!this.length&&e||e.length<ko&&this.leafAppend(e)||this.length<ko&&e.leafPrepend(this)||this.appendInner(e)):this};he.prototype.prepend=function(e){return e.length?he.from(e).append(this):this};he.prototype.appendInner=function(e){return new Pb(this,e)};he.prototype.slice=function(e,n){return e===void 0&&(e=0),n===void 0&&(n=this.length),e>=n?he.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,n))};he.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};he.prototype.forEach=function(e,n,r){n===void 0&&(n=0),r===void 0&&(r=this.length),n<=r?this.forEachInner(e,n,r,0):this.forEachInvertedInner(e,n,r,0)};he.prototype.map=function(e,n,r){n===void 0&&(n=0),r===void 0&&(r=this.length);var o=[];return this.forEach(function(i,s){return o.push(e(i,s))},n,r),o};he.from=function(e){return e instanceof he?e:e&&e.length?new vu(e):he.empty};var vu=(function(t){function e(r){t.call(this),this.values=r}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(o,i){return o==0&&i==this.length?this:new e(this.values.slice(o,i))},e.prototype.getInner=function(o){return this.values[o]},e.prototype.forEachInner=function(o,i,s,l){for(var a=i;a<s;a++)if(o(this.values[a],l+a)===!1)return!1},e.prototype.forEachInvertedInner=function(o,i,s,l){for(var a=i-1;a>=s;a--)if(o(this.values[a],l+a)===!1)return!1},e.prototype.leafAppend=function(o){if(this.length+o.length<=ko)return new e(this.values.concat(o.flatten()))},e.prototype.leafPrepend=function(o){if(this.length+o.length<=ko)return new e(o.flatten().concat(this.values))},n.length.get=function(){return this.values.length},n.depth.get=function(){return 0},Object.defineProperties(e.prototype,n),e})(he);he.empty=new vu([]);var Pb=(function(t){function e(n,r){t.call(this),this.left=n,this.right=r,this.length=n.length+r.length,this.depth=Math.max(n.depth,r.depth)+1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(r){return r<this.left.length?this.left.get(r):this.right.get(r-this.left.length)},e.prototype.forEachInner=function(r,o,i,s){var l=this.left.length;if(o<l&&this.left.forEachInner(r,o,Math.min(i,l),s)===!1||i>l&&this.right.forEachInner(r,Math.max(o-l,0),Math.min(this.length,i)-l,s+l)===!1)return!1},e.prototype.forEachInvertedInner=function(r,o,i,s){var l=this.left.length;if(o>l&&this.right.forEachInvertedInner(r,o-l,Math.max(i,l)-l,s+l)===!1||i<l&&this.left.forEachInvertedInner(r,Math.min(o,l),i,s)===!1)return!1},e.prototype.sliceInner=function(r,o){if(r==0&&o==this.length)return this;var i=this.left.length;return o<=i?this.left.slice(r,o):r>=i?this.right.slice(r-i,o-i):this.left.slice(r,i).append(this.right.slice(0,o-i))},e.prototype.leafAppend=function(r){var o=this.right.leafAppend(r);if(o)return new e(this.left,o)},e.prototype.leafPrepend=function(r){var o=this.left.leafPrepend(r);if(o)return new e(o,this.right)},e.prototype.appendInner=function(r){return this.left.depth>=Math.max(this.right.depth,r.depth)+1?new e(this.left,new e(this.right,r)):new e(this,r)},e})(he),ll=he;var Lb=500,tn=class t{constructor(e,n){this.items=e,this.eventCount=n}popEvent(e,n){if(this.eventCount==0)return null;let r=this.items.length;for(;;r--)if(this.items.get(r-1).selection){--r;break}let o,i;n&&(o=this.remapping(r,this.items.length),i=o.maps.length);let s=e.tr,l,a,c=[],d=[];return this.items.forEach((u,f)=>{if(!u.step){o||(o=this.remapping(r,f+1),i=o.maps.length),i--,d.push(u);return}if(o){d.push(new nt(u.map));let h=u.step.map(o.slice(i)),p;h&&s.maybeStep(h).doc&&(p=s.mapping.maps[s.mapping.maps.length-1],c.push(new nt(p,void 0,void 0,c.length+d.length))),i--,p&&o.appendMap(p,i)}else s.maybeStep(u.step);if(u.selection)return l=o?u.selection.map(o.slice(i)):u.selection,a=new t(this.items.slice(0,r).append(d.reverse().concat(c)),this.eventCount-1),!1},this.items.length,0),{remaining:a,transform:s,selection:l}}addTransform(e,n,r,o){let i=[],s=this.eventCount,l=this.items,a=!o&&l.length?l.get(l.length-1):null;for(let d=0;d<e.steps.length;d++){let u=e.steps[d].invert(e.docs[d]),f=new nt(e.mapping.maps[d],u,n),h;(h=a&&a.merge(f))&&(f=h,d?i.pop():l=l.slice(0,l.length-1)),i.push(f),n&&(s++,n=void 0),o||(a=f)}let c=s-r.depth;return c>zb&&(l=Bb(l,c),s-=c),new t(l.append(i),s)}remapping(e,n){let r=new jn;return this.items.forEach((o,i)=>{let s=o.mirrorOffset!=null&&i-o.mirrorOffset>=e?r.maps.length-o.mirrorOffset:void 0;r.appendMap(o.map,s)},e,n),r}addMaps(e){return this.eventCount==0?this:new t(this.items.append(e.map(n=>new nt(n))),this.eventCount)}rebased(e,n){if(!this.eventCount)return this;let r=[],o=Math.max(0,this.items.length-n),i=e.mapping,s=e.steps.length,l=this.eventCount;this.items.forEach(f=>{f.selection&&l--},o);let a=n;this.items.forEach(f=>{let h=i.getMirror(--a);if(h==null)return;s=Math.min(s,h);let p=i.maps[h];if(f.step){let m=e.steps[h].invert(e.docs[h]),g=f.selection&&f.selection.map(i.slice(a+1,h));g&&l++,r.push(new nt(p,m,g))}else r.push(new nt(p))},o);let c=[];for(let f=n;f<s;f++)c.push(new nt(i.maps[f]));let d=this.items.slice(0,o).append(c).append(r),u=new t(d,l);return u.emptyItemCount()>Lb&&(u=u.compress(this.items.length-r.length)),u}emptyItemCount(){let e=0;return this.items.forEach(n=>{n.step||e++}),e}compress(e=this.items.length){let n=this.remapping(0,e),r=n.maps.length,o=[],i=0;return this.items.forEach((s,l)=>{if(l>=e)o.push(s),s.selection&&i++;else if(s.step){let a=s.step.map(n.slice(r)),c=a&&a.getMap();if(r--,c&&n.appendMap(c,r),a){let d=s.selection&&s.selection.map(n.slice(r));d&&i++;let u=new nt(c.invert(),a,d),f,h=o.length-1;(f=o.length&&o[h].merge(u))?o[h]=f:o.push(u)}}else s.map&&r--},this.items.length,0),new t(ll.from(o.reverse()),i)}};tn.empty=new tn(ll.empty,0);function Bb(t,e){let n;return t.forEach((r,o)=>{if(r.selection&&e--==0)return n=o,!1}),t.slice(n)}var nt=class t{constructor(e,n,r,o){this.map=e,this.step=n,this.selection=r,this.mirrorOffset=o}merge(e){if(this.step&&e.step&&!e.selection){let n=e.step.merge(this.step);if(n)return new t(n.getMap().invert(),n,this.selection)}}},rt=class{constructor(e,n,r,o,i){this.done=e,this.undone=n,this.prevRanges=r,this.prevTime=o,this.prevComposition=i}},zb=20;function Hb(t,e,n,r){let o=n.getMeta(en),i;if(o)return o.historyState;n.getMeta(Vb)&&(t=new rt(t.done,t.undone,null,0,-1));let s=n.getMeta(\"appendedTransaction\");if(n.steps.length==0)return t;if(s&&s.getMeta(en))return s.getMeta(en).redo?new rt(t.done.addTransform(n,void 0,r,So(e)),t.undone,Mu(n.mapping.maps),t.prevTime,t.prevComposition):new rt(t.done,t.undone.addTransform(n,void 0,r,So(e)),null,t.prevTime,t.prevComposition);if(n.getMeta(\"addToHistory\")!==!1&&!(s&&s.getMeta(\"addToHistory\")===!1)){let l=n.getMeta(\"composition\"),a=t.prevTime==0||!s&&t.prevComposition!=l&&(t.prevTime<(n.time||0)-r.newGroupDelay||!$b(n,t.prevRanges)),c=s?al(t.prevRanges,n.mapping):Mu(n.mapping.maps);return new rt(t.done.addTransform(n,a?e.selection.getBookmark():void 0,r,So(e)),tn.empty,c,n.time,l??t.prevComposition)}else return(i=n.getMeta(\"rebased\"))?new rt(t.done.rebased(n,i),t.undone.rebased(n,i),al(t.prevRanges,n.mapping),t.prevTime,t.prevComposition):new rt(t.done.addMaps(n.mapping.maps),t.undone.addMaps(n.mapping.maps),al(t.prevRanges,n.mapping),t.prevTime,t.prevComposition)}function $b(t,e){if(!e)return!1;if(!t.docChanged)return!0;let n=!1;return t.mapping.maps[0].forEach((r,o)=>{for(let i=0;i<e.length;i+=2)r<=e[i+1]&&o>=e[i]&&(n=!0)}),n}function Mu(t){let e=[];for(let n=t.length-1;n>=0&&e.length==0;n--)t[n].forEach((r,o,i,s)=>e.push(i,s));return e}function al(t,e){if(!t)return null;let n=[];for(let r=0;r<t.length;r+=2){let o=e.map(t[r],1),i=e.map(t[r+1],-1);o<=i&&n.push(o,i)}return n}function Fb(t,e,n){let r=So(e),o=en.get(e).spec.config,i=(n?t.undone:t.done).popEvent(e,r);if(!i)return null;let s=i.selection.resolve(i.transform.doc),l=(n?t.done:t.undone).addTransform(i.transform,e.selection.getBookmark(),o,r),a=new rt(n?l:i.remaining,n?i.remaining:l,null,0,-1);return i.transform.setSelection(s).setMeta(en,{redo:n,historyState:a})}var cl=!1,Tu=null;function So(t){let e=t.plugins;if(Tu!=e){cl=!1,Tu=e;for(let n=0;n<e.length;n++)if(e[n].spec.historyPreserveItems){cl=!0;break}}return cl}var en=new H(\"history\"),Vb=new H(\"closeHistory\");function Au(t={}){return t={depth:t.depth||100,newGroupDelay:t.newGroupDelay||500},new P({key:en,state:{init(){return new rt(tn.empty,tn.empty,null,0,-1)},apply(e,n,r){return Hb(n,r,e,t)}},config:t,props:{handleDOMEvents:{beforeinput(e,n){let r=n.inputType,o=r==\"historyUndo\"?dl:r==\"historyRedo\"?ul:null;return!o||!e.editable?!1:(n.preventDefault(),o(e.state,e.dispatch))}}}})}function Co(t,e){return(n,r)=>{let o=en.getState(n);if(!o||(t?o.undone:o.done).eventCount==0)return!1;if(r){let i=Fb(o,n,t);i&&r(e?i.scrollIntoView():i)}return!0}}var dl=Co(!1,!0),ul=Co(!0,!0),g1=Co(!1,!1),y1=Co(!0,!1);var C1=U.create({name:\"characterCount\",addOptions(){return{limit:null,mode:\"textSize\",textCounter:t=>t.length,wordCounter:t=>t.split(\" \").filter(e=>e!==\"\").length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=t=>{let e=t?.node||this.editor.state.doc;if((t?.mode||this.options.mode)===\"textSize\"){let r=e.textBetween(0,e.content.size,void 0,\" \");return this.options.textCounter(r)}return e.nodeSize},this.storage.words=t=>{let e=t?.node||this.editor.state.doc,n=e.textBetween(0,e.content.size,\" \",\" \");return this.options.wordCounter(n)}},addProseMirrorPlugins(){let t=!1;return[new P({key:new H(\"characterCount\"),appendTransaction:(e,n,r)=>{if(t)return;let o=this.options.limit;if(o==null||o===0){t=!0;return}let i=this.storage.characters({node:r.doc});if(i>o){let s=i-o,l=0,a=s;console.warn(`[CharacterCount] Initial content exceeded limit of ${o} characters. Content was automatically trimmed.`);let c=r.tr.deleteRange(l,a);return t=!0,c}t=!0},filterTransaction:(e,n)=>{let r=this.options.limit;if(!e.docChanged||r===0||r===null||r===void 0)return!0;let o=this.storage.characters({node:n.doc}),i=this.storage.characters({node:e.doc});if(i<=r||o>r&&i>r&&i<=o)return!0;if(o>r&&i>r&&i>o||!e.getMeta(\"paste\"))return!1;let l=e.selection.$head.pos,a=i-r,c=l-a,d=l;return e.deleteRange(c,d),!(this.storage.characters({node:e.doc})>r)}})]}}),Nu=U.create({name:\"dropCursor\",addOptions(){return{color:\"currentColor\",width:1,class:void 0}},addProseMirrorPlugins(){return[ku(this.options)]}}),N1=U.create({name:\"focus\",addOptions(){return{className:\"has-focus\",mode:\"all\"}},addProseMirrorPlugins(){return[new P({key:new H(\"focus\"),props:{decorations:({doc:t,selection:e})=>{let{isEditable:n,isFocused:r}=this.editor,{anchor:o}=e,i=[];if(!n||!r)return Y.create(t,[]);let s=0;this.options.mode===\"deepest\"&&t.descendants((a,c)=>{if(a.isText)return;if(!(o>=c&&o<=c+a.nodeSize-1))return!1;s+=1});let l=0;return t.descendants((a,c)=>{if(a.isText||!(o>=c&&o<=c+a.nodeSize-1))return!1;if(l+=1,this.options.mode===\"deepest\"&&s-l>0||this.options.mode===\"shallowest\"&&l>1)return this.options.mode===\"deepest\";i.push(te.node(c,c+a.nodeSize,{class:this.options.className}))}),Y.create(t,i)}}})]}}),Ou=U.create({name:\"gapCursor\",addProseMirrorPlugins(){return[Cu()]},extendNodeSchema(t){var e;let n={name:t.name,options:t.options,storage:t.storage};return{allowGapCursor:(e=G(B(t,\"allowGapCursor\",n)))!=null?e:null}}}),fl=U.create({name:\"placeholder\",addOptions(){return{emptyEditorClass:\"is-editor-empty\",emptyNodeClass:\"is-empty\",placeholder:\"Write something \\u2026\",showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){return[new P({key:new H(\"placeholder\"),props:{decorations:({doc:t,selection:e})=>{let n=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:r}=e,o=[];if(!n)return null;let i=this.editor.isEmpty;return t.descendants((s,l)=>{let a=r>=l&&r<=l+s.nodeSize,c=!s.isLeaf&&lr(s);if((a||!this.options.showOnlyCurrent)&&c){let d=[this.options.emptyNodeClass];i&&d.push(this.options.emptyEditorClass);let u=te.node(l,l+s.nodeSize,{class:d.join(\" \"),\"data-placeholder\":typeof this.options.placeholder==\"function\"?this.options.placeholder({editor:this.editor,node:s,pos:l,hasAnchor:a}):this.options.placeholder});o.push(u)}return this.options.includeChildren}),Y.create(t,o)}}})]}}),H1=U.create({name:\"selection\",addOptions(){return{className:\"selection\"}},addProseMirrorPlugins(){let{editor:t,options:e}=this;return[new P({key:new H(\"selection\"),props:{decorations(n){return n.selection.empty||t.isFocused||!t.isEditable||mo(n.selection)||t.view.dragging?null:Y.create(n.doc,[te.inline(n.selection.from,n.selection.to,{class:e.className})])}}})]}});function Eu({types:t,node:e}){return e&&Array.isArray(t)&&t.includes(e.type)||e?.type===t}var V1=U.create({name:\"trailingNode\",addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){var t;let e=new H(this.name),n=this.options.node||((t=this.editor.schema.topNodeType.contentMatch.defaultType)==null?void 0:t.name)||\"paragraph\",r=Object.entries(this.editor.schema.nodes).map(([,o])=>o).filter(o=>(this.options.notAfter||[]).concat(n).includes(o.name));return[new P({key:e,appendTransaction:(o,i,s)=>{let{doc:l,tr:a,schema:c}=s,d=e.getState(s),u=l.content.size,f=c.nodes[n];if(d)return a.insert(u,f.create())},state:{init:(o,i)=>{let s=i.tr.doc.lastChild;return!Eu({node:s,types:r})},apply:(o,i)=>{if(!o.docChanged||o.getMeta(\"__uniqueIDTransaction\"))return i;let s=o.doc.lastChild;return!Eu({node:s,types:r})}}})]}}),Ru=U.create({name:\"undoRedo\",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:t,dispatch:e})=>dl(t,e),redo:()=>({state:t,dispatch:e})=>ul(t,e)}},addProseMirrorPlugins(){return[Au(this.options)]},addKeyboardShortcuts(){return{\"Mod-z\":()=>this.editor.commands.undo(),\"Shift-Mod-z\":()=>this.editor.commands.redo(),\"Mod-y\":()=>this.editor.commands.redo(),\"Mod-\\u044F\":()=>this.editor.commands.undo(),\"Shift-Mod-\\u044F\":()=>this.editor.commands.redo()}}});var Nn=(t,e)=>{if(t===\"slot\")return 0;if(t instanceof Function)return t(e);let{children:n,...r}=e??{};if(t===\"svg\")throw new Error(\"SVG elements are not supported in the JSX syntax, use the array syntax instead\");return[t,r,n]};var _b=/^\\s*>\\s$/,Wb=F.create({name:\"blockquote\",addOptions(){return{HTMLAttributes:{}}},content:\"block+\",group:\"block\",defining:!0,parseHTML(){return[{tag:\"blockquote\"}]},renderHTML({HTMLAttributes:t}){return Nn(\"blockquote\",{...R(this.options.HTMLAttributes,t),children:Nn(\"slot\",{})})},parseMarkdown:(t,e)=>e.createNode(\"blockquote\",void 0,e.parseChildren(t.tokens||[])),renderMarkdown:(t,e)=>{if(!t.content)return\"\";let n=\">\",r=[];return t.content.forEach(o=>{let l=e.renderChildren([o]).split(`\n`).map(a=>a.trim()===\"\"?n:`${n} ${a}`);r.push(l.join(`\n`))}),r.join(`\n${n}\n`)},addCommands(){return{setBlockquote:()=>({commands:t})=>t.wrapIn(this.name),toggleBlockquote:()=>({commands:t})=>t.toggleWrap(this.name),unsetBlockquote:()=>({commands:t})=>t.lift(this.name)}},addKeyboardShortcuts(){return{\"Mod-Shift-b\":()=>this.editor.commands.toggleBlockquote()}},addInputRules(){return[tt({find:_b,type:this.type})]}}),Du=Wb;var jb=/(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))$/,Ub=/(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))/g,Kb=/(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))$/,qb=/(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))/g,Jb=ee.create({name:\"bold\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"strong\"},{tag:\"b\",getAttrs:t=>t.style.fontWeight!==\"normal\"&&null},{style:\"font-weight=400\",clearMark:t=>t.type.name===this.name},{style:\"font-weight\",getAttrs:t=>/^(bold(er)?|[5-9]\\d{2,})$/.test(t)&&null}]},renderHTML({HTMLAttributes:t}){return Nn(\"strong\",{...R(this.options.HTMLAttributes,t),children:Nn(\"slot\",{})})},markdownTokenName:\"strong\",parseMarkdown:(t,e)=>e.applyMark(\"bold\",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`**${e.renderChildren(t)}**`,addCommands(){return{setBold:()=>({commands:t})=>t.setMark(this.name),toggleBold:()=>({commands:t})=>t.toggleMark(this.name),unsetBold:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-b\":()=>this.editor.commands.toggleBold(),\"Mod-B\":()=>this.editor.commands.toggleBold()}},addInputRules(){return[Be({find:jb,type:this.type}),Be({find:Kb,type:this.type})]},addPasteRules(){return[Me({find:Ub,type:this.type}),Me({find:qb,type:this.type})]}}),Iu=Jb;var Gb=/(^|[^`])`([^`]+)`(?!`)$/,Xb=/(^|[^`])`([^`]+)`(?!`)/g,Yb=ee.create({name:\"code\",addOptions(){return{HTMLAttributes:{}}},excludes:\"_\",code:!0,exitable:!0,parseHTML(){return[{tag:\"code\"}]},renderHTML({HTMLAttributes:t}){return[\"code\",R(this.options.HTMLAttributes,t),0]},markdownTokenName:\"codespan\",parseMarkdown:(t,e)=>e.applyMark(\"code\",[{type:\"text\",text:t.text||\"\"}]),renderMarkdown:(t,e)=>t.content?`\\`${e.renderChildren(t.content)}\\``:\"\",addCommands(){return{setCode:()=>({commands:t})=>t.setMark(this.name),toggleCode:()=>({commands:t})=>t.toggleMark(this.name),unsetCode:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-e\":()=>this.editor.commands.toggleCode()}},addInputRules(){return[Be({find:Gb,type:this.type})]},addPasteRules(){return[Me({find:Xb,type:this.type})]}}),Pu=Yb;var hl=4,Qb=/^```([a-z]+)?[\\s\\n]$/,Zb=/^~~~([a-z]+)?[\\s\\n]$/,e0=F.create({name:\"codeBlock\",addOptions(){return{languageClassPrefix:\"language-\",exitOnTripleEnter:!0,exitOnArrowDown:!0,defaultLanguage:null,enableTabIndentation:!1,tabSize:hl,HTMLAttributes:{}}},content:\"text*\",marks:\"\",group:\"block\",code:!0,defining:!0,addAttributes(){return{language:{default:this.options.defaultLanguage,parseHTML:t=>{var e;let{languageClassPrefix:n}=this.options;if(!n)return null;let i=[...((e=t.firstElementChild)==null?void 0:e.classList)||[]].filter(s=>s.startsWith(n)).map(s=>s.replace(n,\"\"))[0];return i||null},rendered:!1}}},parseHTML(){return[{tag:\"pre\",preserveWhitespace:\"full\"}]},renderHTML({node:t,HTMLAttributes:e}){return[\"pre\",R(this.options.HTMLAttributes,e),[\"code\",{class:t.attrs.language?this.options.languageClassPrefix+t.attrs.language:null},0]]},markdownTokenName:\"code\",parseMarkdown:(t,e)=>{var n;return((n=t.raw)==null?void 0:n.startsWith(\"```\"))===!1&&t.codeBlockStyle!==\"indented\"?[]:e.createNode(\"codeBlock\",{language:t.lang||null},t.text?[e.createTextNode(t.text)]:[])},renderMarkdown:(t,e)=>{var n;let r=\"\",o=((n=t.attrs)==null?void 0:n.language)||\"\";return t.content?r=[`\\`\\`\\`${o}`,e.renderChildren(t.content),\"```\"].join(`\n`):r=`\\`\\`\\`${o}\n\n\\`\\`\\``,r},addCommands(){return{setCodeBlock:t=>({commands:e})=>e.setNode(this.name,t),toggleCodeBlock:t=>({commands:e})=>e.toggleNode(this.name,\"paragraph\",t)}},addKeyboardShortcuts(){return{\"Mod-Alt-c\":()=>this.editor.commands.toggleCodeBlock(),Backspace:()=>{let{empty:t,$anchor:e}=this.editor.state.selection,n=e.pos===1;return!t||e.parent.type.name!==this.name?!1:n||!e.parent.textContent.length?this.editor.commands.clearNodes():!1},Tab:({editor:t})=>{var e;if(!this.options.enableTabIndentation)return!1;let n=(e=this.options.tabSize)!=null?e:hl,{state:r}=t,{selection:o}=r,{$from:i,empty:s}=o;if(i.parent.type!==this.type)return!1;let l=\" \".repeat(n);return s?t.commands.insertContent(l):t.commands.command(({tr:a})=>{let{from:c,to:d}=o,h=r.doc.textBetween(c,d,`\n`,`\n`).split(`\n`).map(p=>l+p).join(`\n`);return a.replaceWith(c,d,r.schema.text(h)),!0})},\"Shift-Tab\":({editor:t})=>{var e;if(!this.options.enableTabIndentation)return!1;let n=(e=this.options.tabSize)!=null?e:hl,{state:r}=t,{selection:o}=r,{$from:i,empty:s}=o;return i.parent.type!==this.type?!1:s?t.commands.command(({tr:l})=>{var a;let{pos:c}=i,d=i.start(),u=i.end(),h=r.doc.textBetween(d,u,`\n`,`\n`).split(`\n`),p=0,m=0,g=c-d;for(let S=0;S<h.length;S+=1){if(m+h[S].length>=g){p=S;break}m+=h[S].length+1}let w=((a=h[p].match(/^ */))==null?void 0:a[0])||\"\",b=Math.min(w.length,n);if(b===0)return!0;let C=d;for(let S=0;S<p;S+=1)C+=h[S].length+1;return l.delete(C,C+b),c-C<=b&&l.setSelection(D.create(l.doc,C)),!0}):t.commands.command(({tr:l})=>{let{from:a,to:c}=o,f=r.doc.textBetween(a,c,`\n`,`\n`).split(`\n`).map(h=>{var p;let m=((p=h.match(/^ */))==null?void 0:p[0])||\"\",g=Math.min(m.length,n);return h.slice(g)}).join(`\n`);return l.replaceWith(a,c,r.schema.text(f)),!0})},Enter:({editor:t})=>{if(!this.options.exitOnTripleEnter)return!1;let{state:e}=t,{selection:n}=e,{$from:r,empty:o}=n;if(!o||r.parent.type!==this.type)return!1;let i=r.parentOffset===r.parent.nodeSize-2,s=r.parent.textContent.endsWith(`\n\n`);return!i||!s?!1:t.chain().command(({tr:l})=>(l.delete(r.pos-2,r.pos),!0)).exitCode().run()},ArrowDown:({editor:t})=>{if(!this.options.exitOnArrowDown)return!1;let{state:e}=t,{selection:n,doc:r}=e,{$from:o,empty:i}=n;if(!i||o.parent.type!==this.type||!(o.parentOffset===o.parent.nodeSize-2))return!1;let l=o.after();return l===void 0?!1:r.nodeAt(l)?t.commands.command(({tr:c})=>(c.setSelection(I.near(r.resolve(l))),!0)):t.commands.exitCode()}}},addInputRules(){return[ar({find:Qb,type:this.type,getAttributes:t=>({language:t[1]})}),ar({find:Zb,type:this.type,getAttributes:t=>({language:t[1]})})]},addProseMirrorPlugins(){return[new P({key:new H(\"codeBlockVSCodeHandler\"),props:{handlePaste:(t,e)=>{if(!e.clipboardData||this.editor.isActive(this.type.name))return!1;let n=e.clipboardData.getData(\"text/plain\"),r=e.clipboardData.getData(\"vscode-editor-data\"),o=r?JSON.parse(r):void 0,i=o?.mode;if(!n||!i)return!1;let{tr:s,schema:l}=t.state,a=l.text(n.replace(/\\r\\n?/g,`\n`));return s.replaceSelectionWith(this.type.create({language:i},a)),s.selection.$from.parent.type!==this.type&&s.setSelection(D.near(s.doc.resolve(Math.max(0,s.selection.from-2)))),s.setMeta(\"paste\",!0),t.dispatch(s),!0}}})]}}),Lu=e0;var Bu=F.create({name:\"customBlock\",group:\"block\",atom:!0,defining:!0,draggable:!0,selectable:!0,isolating:!0,allowGapCursor:!0,inline:!1,addNodeView(){return({editor:t,node:e,getPos:n,HTMLAttributes:r,decorations:o,extension:i})=>{let s=document.createElement(\"div\");s.setAttribute(\"data-config\",e.attrs.config),s.setAttribute(\"data-id\",e.attrs.id),s.setAttribute(\"data-type\",\"customBlock\");let l=document.createElement(\"div\");if(l.className=\"fi-fo-rich-editor-custom-block-header fi-not-prose\",s.appendChild(l),t.isEditable&&typeof e.attrs.config==\"object\"&&e.attrs.config!==null&&Object.keys(e.attrs.config).length>0){let c=document.createElement(\"div\");c.className=\"fi-fo-rich-editor-custom-block-edit-btn-ctn\",l.appendChild(c);let d=document.createElement(\"button\");d.className=\"fi-icon-btn\",d.type=\"button\",d.innerHTML=i.options.editCustomBlockButtonIconHtml,d.addEventListener(\"click\",()=>i.options.editCustomBlockUsing(e.attrs.id,e.attrs.config)),c.appendChild(d)}let a=document.createElement(\"p\");if(a.className=\"fi-fo-rich-editor-custom-block-heading\",a.textContent=e.attrs.label,l.appendChild(a),t.isEditable){let c=document.createElement(\"div\");c.className=\"fi-fo-rich-editor-custom-block-delete-btn-ctn\",l.appendChild(c);let d=document.createElement(\"button\");d.className=\"fi-icon-btn\",d.type=\"button\",d.innerHTML=i.options.deleteCustomBlockButtonIconHtml,d.addEventListener(\"click\",()=>t.chain().setNodeSelection(n()).deleteSelection().run()),c.appendChild(d)}if(e.attrs.preview){let c=document.createElement(\"div\");c.className=\"fi-fo-rich-editor-custom-block-preview fi-not-prose\",c.innerHTML=new TextDecoder().decode(Uint8Array.from(atob(e.attrs.preview),d=>d.charCodeAt(0))),s.appendChild(c)}return{dom:s}}},addOptions(){return{deleteCustomBlockButtonIconHtml:null,editCustomBlockButtonIconHtml:null,editCustomBlockUsing:()=>{},insertCustomBlockUsing:()=>{}}},addAttributes(){return{config:{default:null,parseHTML:t=>JSON.parse(t.getAttribute(\"data-config\"))},id:{default:null,parseHTML:t=>t.getAttribute(\"data-id\"),renderHTML:t=>t.id?{\"data-id\":t.id}:{}},label:{default:null,parseHTML:t=>t.getAttribute(\"data-label\"),rendered:!1},preview:{default:null,parseHTML:t=>t.getAttribute(\"data-preview\"),rendered:!1}}},parseHTML(){return[{tag:`div[data-type=\"${this.name}\"]`}]},renderHTML({HTMLAttributes:t}){return[\"div\",R(t)]},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:t,state:e})=>{let n=!1,{selection:r}=e,{empty:o,anchor:i}=r;if(!o)return!1;let s=new ie,l=0;return e.doc.nodesBetween(i-1,i,(a,c)=>{if(a.type.name===this.name)return n=!0,s=a,l=c,!1}),n})}},addProseMirrorPlugins(){let{insertCustomBlockUsing:t}=this.options;return[new P({props:{handleDrop(e,n){if(!n||(n.preventDefault(),!n.dataTransfer.getData(\"customBlock\")))return!1;let r=n.dataTransfer.getData(\"customBlock\");return t(r,e.posAtCoords({left:n.clientX,top:n.clientY}).pos),!1}}})]}});var vo=(t,e)=>e.view.domAtPos(t).node.offsetParent!==null,t0=(t,e,n)=>{for(let r=t.depth;r>0;r-=1){let o=t.node(r),i=e(o),s=vo(t.start(r),n);if(i&&s)return{pos:r>0?t.before(r):0,start:t.start(r),depth:r,node:o}}},zu=(t,e)=>{let{state:n,view:r,extensionManager:o}=t,{schema:i,selection:s}=n,{empty:l,$anchor:a}=s,c=!!o.extensions.find(y=>y.name===\"gapCursor\");if(!l||a.parent.type!==i.nodes.detailsSummary||!c||e===\"right\"&&a.parentOffset!==a.parent.nodeSize-2)return!1;let d=et(y=>y.type===i.nodes.details)(s);if(!d)return!1;let u=En(d.node,y=>y.type===i.nodes.detailsContent);if(!u.length||vo(d.start+u[0].pos+1,t))return!1;let h=n.doc.resolve(d.pos+d.node.nodeSize),p=ae.findFrom(h,1,!1);if(!p)return!1;let{tr:m}=n,g=new ae(p);return m.setSelection(g),m.scrollIntoView(),r.dispatch(m),!0},Hu=F.create({name:\"details\",content:\"detailsSummary detailsContent\",group:\"block\",defining:!0,isolating:!0,allowGapCursor:!1,addOptions(){return{persist:!1,openClassName:\"is-open\",HTMLAttributes:{}}},addAttributes(){return this.options.persist?{open:{default:!1,parseHTML:t=>t.hasAttribute(\"open\"),renderHTML:({open:t})=>t?{open:\"\"}:{}}}:[]},parseHTML(){return[{tag:\"details\"}]},renderHTML({HTMLAttributes:t}){return[\"details\",R(this.options.HTMLAttributes,t),0]},...Zt({nodeName:\"details\",content:\"block\"}),addNodeView(){return({editor:t,getPos:e,node:n,HTMLAttributes:r})=>{let o=document.createElement(\"div\"),i=R(this.options.HTMLAttributes,r,{\"data-type\":this.name});Object.entries(i).forEach(([c,d])=>o.setAttribute(c,d));let s=document.createElement(\"button\");s.type=\"button\",o.append(s);let l=document.createElement(\"div\");o.append(l);let a=c=>{if(c!==void 0)if(c){if(o.classList.contains(this.options.openClassName))return;o.classList.add(this.options.openClassName)}else{if(!o.classList.contains(this.options.openClassName))return;o.classList.remove(this.options.openClassName)}else o.classList.toggle(this.options.openClassName);let d=new Event(\"toggleDetailsContent\"),u=l.querySelector(':scope > div[data-type=\"detailsContent\"]');u?.dispatchEvent(d)};return n.attrs.open&&setTimeout(()=>a()),s.addEventListener(\"click\",()=>{if(a(),!this.options.persist){t.commands.focus(void 0,{scrollIntoView:!1});return}if(t.isEditable&&typeof e==\"function\"){let{from:c,to:d}=t.state.selection;t.chain().command(({tr:u})=>{let f=e();if(!f)return!1;let h=u.doc.nodeAt(f);return h?.type!==this.type?!1:(u.setNodeMarkup(f,void 0,{open:!h.attrs.open}),!0)}).setTextSelection({from:c,to:d}).focus(void 0,{scrollIntoView:!1}).run()}}),{dom:o,contentDOM:l,ignoreMutation(c){return c.type===\"selection\"?!1:!o.contains(c.target)||o===c.target},update:c=>c.type!==this.type?!1:(c.attrs.open!==void 0&&a(c.attrs.open),!0)}}},addCommands(){return{setDetails:()=>({state:t,chain:e})=>{var n;let{schema:r,selection:o}=t,{$from:i,$to:s}=o,l=i.blockRange(s);if(!l)return!1;let a=t.doc.slice(l.start,l.end);if(!r.nodes.detailsContent.contentMatch.matchFragment(a.content))return!1;let d=((n=a.toJSON())==null?void 0:n.content)||[];return e().insertContentAt({from:l.start,to:l.end},{type:this.name,content:[{type:\"detailsSummary\"},{type:\"detailsContent\",content:d}]}).setTextSelection(l.start+2).run()},unsetDetails:()=>({state:t,chain:e})=>{let{selection:n,schema:r}=t,o=et(y=>y.type===this.type)(n);if(!o)return!1;let i=En(o.node,y=>y.type===r.nodes.detailsSummary),s=En(o.node,y=>y.type===r.nodes.detailsContent);if(!i.length||!s.length)return!1;let l=i[0],a=s[0],c=o.pos,d=t.doc.resolve(c),u=c+o.node.nodeSize,f={from:c,to:u},h=a.node.content.toJSON()||[],p=d.parent.type.contentMatch.defaultType,g=[p?.create(null,l.node.content).toJSON(),...h];return e().insertContentAt(f,g).setTextSelection(c+1).run()}}},addKeyboardShortcuts(){return{Backspace:()=>{let{schema:t,selection:e}=this.editor.state,{empty:n,$anchor:r}=e;return!n||r.parent.type!==t.nodes.detailsSummary?!1:r.parentOffset!==0?this.editor.commands.command(({tr:o})=>{let i=r.pos-1,s=r.pos;return o.delete(i,s),!0}):this.editor.commands.unsetDetails()},Enter:({editor:t})=>{let{state:e,view:n}=t,{schema:r,selection:o}=e,{$head:i}=o;if(i.parent.type!==r.nodes.detailsSummary)return!1;let s=vo(i.after()+1,t),l=s?e.doc.nodeAt(i.after()):i.node(-2);if(!l)return!1;let a=s?0:i.indexAfter(-1),c=sr(l.contentMatchAt(a));if(!c||!l.canReplaceWith(a,a,c))return!1;let d=c.createAndFill();if(!d)return!1;let u=s?i.after()+1:i.after(-1),f=e.tr.replaceWith(u,u,d),h=f.doc.resolve(u),p=I.near(h,1);return f.setSelection(p),f.scrollIntoView(),n.dispatch(f),!0},ArrowRight:({editor:t})=>zu(t,\"right\"),ArrowDown:({editor:t})=>zu(t,\"down\")}},addProseMirrorPlugins(){return[new P({key:new H(\"detailsSelection\"),appendTransaction:(t,e,n)=>{let{editor:r,type:o}=this;if(r.view.composing||!t.some(y=>y.selectionSet)||!e.selection.empty||!n.selection.empty||!tl(n,o.name))return;let{$from:a}=n.selection;if(vo(a.pos,r))return;let d=t0(a,y=>y.type===o,r);if(!d)return;let u=En(d.node,y=>y.type===n.schema.nodes.detailsSummary);if(!u.length)return;let f=u[0],p=(e.selection.from<n.selection.from?\"forward\":\"backward\")===\"forward\"?d.start+f.pos:d.pos+f.pos+f.node.nodeSize,m=D.create(n.doc,p);return n.tr.setSelection(m)}})]}}),$u=F.create({name:\"detailsContent\",content:\"block+\",defining:!0,selectable:!1,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`div[data-type=\"${this.name}\"]`}]},renderHTML({HTMLAttributes:t}){return[\"div\",R(this.options.HTMLAttributes,t,{\"data-type\":this.name}),0]},addNodeView(){return({HTMLAttributes:t})=>{let e=document.createElement(\"div\"),n=R(this.options.HTMLAttributes,t,{\"data-type\":this.name,hidden:\"hidden\"});return Object.entries(n).forEach(([r,o])=>e.setAttribute(r,o)),e.addEventListener(\"toggleDetailsContent\",()=>{e.toggleAttribute(\"hidden\")}),{dom:e,contentDOM:e,ignoreMutation(r){return r.type===\"selection\"?!1:!e.contains(r.target)||e===r.target},update:r=>r.type===this.type}}},addKeyboardShortcuts(){return{Enter:({editor:t})=>{let{state:e,view:n}=t,{selection:r}=e,{$from:o,empty:i}=r,s=et($=>$.type===this.type)(r);if(!i||!s||!s.node.childCount)return!1;let l=o.index(s.depth),{childCount:a}=s.node;if(!(a===l+1))return!1;let d=s.node.type.contentMatch.defaultType,u=d?.createAndFill();if(!u)return!1;let f=e.doc.resolve(s.pos+1),h=a-1,p=s.node.child(h),m=f.posAtIndex(h,s.depth);if(!p.eq(u))return!1;let y=o.node(-3);if(!y)return!1;let w=o.indexAfter(-3),b=sr(y.contentMatchAt(w));if(!b||!y.canReplaceWith(w,w,b))return!1;let C=b.createAndFill();if(!C)return!1;let{tr:x}=e,S=o.after(-2);x.replaceWith(S,S,C);let k=x.doc.resolve(S),O=I.near(k,1);x.setSelection(O);let T=m,A=m+p.nodeSize;return x.delete(T,A),x.scrollIntoView(),n.dispatch(x),!0}}},...Zt({nodeName:\"detailsContent\"})}),Fu=F.create({name:\"detailsSummary\",content:\"text*\",defining:!0,selectable:!1,isolating:!0,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"summary\"}]},renderHTML({HTMLAttributes:t}){return[\"summary\",R(this.options.HTMLAttributes,t),0]},...Zt({nodeName:\"detailsSummary\",content:\"inline\"})});var n0=F.create({name:\"doc\",topNode:!0,content:\"block+\",renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n\n`):\"\"}),Vu=n0;var _u=F.create({name:\"grid\",group:\"block\",defining:!0,isolating:!0,allowGapCursor:!1,content:\"gridColumn+\",addOptions(){return{HTMLAttributes:{class:\"grid-layout\"}}},addAttributes(){return{\"data-cols\":{default:2,parseHTML:t=>t.getAttribute(\"data-cols\")},\"data-from-breakpoint\":{default:\"md\",parseHTML:t=>t.getAttribute(\"data-from-breakpoint\")},style:{default:null,parseHTML:t=>t.getAttribute(\"style\"),renderHTML:t=>({style:`grid-template-columns: repeat(${t[\"data-cols\"]}, 1fr)`})}}},parseHTML(){return[{tag:\"div\",getAttrs:t=>t.classList.contains(\"grid-layout\")&&null}]},renderHTML({HTMLAttributes:t}){return[\"div\",R(this.options.HTMLAttributes,t),0]},addCommands(){return{insertGrid:({columns:t=[1,1],fromBreakpoint:e,coordinates:n=null}={})=>({tr:r,dispatch:o,editor:i})=>{let s=i.schema.nodes.gridColumn,l=Array.isArray(t)&&t.length?t:[1,1],a=[];for(let u=0;u<l.length;u+=1)a.push(s.createAndFill({\"data-col-span\":Number(l[u]??1)||1}));let c=l.map(u=>Number(u)||1).reduce((u,f)=>u+f,0),d=i.schema.nodes.grid.createChecked({\"data-cols\":c,\"data-from-breakpoint\":e},a);if(o){let u=r.selection.anchor+1;[null,void 0].includes(n?.from)?r.replaceSelectionWith(d).scrollIntoView().setSelection(D.near(r.doc.resolve(u))):r.replaceRangeWith(n.from,n.to,d).scrollIntoView().setSelection(D.near(r.doc.resolve(n.from)))}return!0}}}});var Wu=F.create({name:\"gridColumn\",content:\"block+\",isolating:!0,addOptions(){return{HTMLAttributes:{class:\"grid-layout-col\"}}},addAttributes(){return{\"data-col-span\":{default:1,parseHTML:t=>t.getAttribute(\"data-col-span\"),renderHTML:t=>({\"data-col-span\":t[\"data-col-span\"]??1})},style:{default:null,parseHTML:t=>t.getAttribute(\"style\"),renderHTML:t=>({style:`grid-column: span ${t[\"data-col-span\"]??1};`})}}},parseHTML(){return[{tag:\"div\",getAttrs:t=>t.classList.contains(\"grid-layout-col\")&&null}]},renderHTML({HTMLAttributes:t}){return[\"div\",R(this.options.HTMLAttributes,t),0]}});var r0=F.create({name:\"hardBreak\",markdownTokenName:\"br\",addOptions(){return{keepMarks:!0,HTMLAttributes:{}}},inline:!0,group:\"inline\",selectable:!1,linebreakReplacement:!0,parseHTML(){return[{tag:\"br\"}]},renderHTML({HTMLAttributes:t}){return[\"br\",R(this.options.HTMLAttributes,t)]},renderText(){return`\n`},renderMarkdown:()=>`  \n`,parseMarkdown:()=>({type:\"hardBreak\"}),addCommands(){return{setHardBreak:()=>({commands:t,chain:e,state:n,editor:r})=>t.first([()=>t.exitCode(),()=>t.command(()=>{let{selection:o,storedMarks:i}=n;if(o.$from.parent.type.spec.isolating)return!1;let{keepMarks:s}=this.options,{splittableMarks:l}=r.extensionManager,a=i||o.$to.parentOffset&&o.$from.marks();return e().insertContent({type:this.name}).command(({tr:c,dispatch:d})=>{if(d&&a&&s){let u=a.filter(f=>l.includes(f.type.name));c.ensureMarks(u)}return!0}).run()})])}},addKeyboardShortcuts(){return{\"Mod-Enter\":()=>this.editor.commands.setHardBreak(),\"Shift-Enter\":()=>this.editor.commands.setHardBreak()}}}),ju=r0;var o0=F.create({name:\"heading\",addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:\"inline*\",group:\"block\",defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(t=>({tag:`h${t}`,attrs:{level:t}}))},renderHTML({node:t,HTMLAttributes:e}){return[`h${this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0]}`,R(this.options.HTMLAttributes,e),0]},parseMarkdown:(t,e)=>e.createNode(\"heading\",{level:t.depth||1},e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>{var n;let r=(n=t.attrs)!=null&&n.level?parseInt(t.attrs.level,10):1,o=\"#\".repeat(r);return t.content?`${o} ${e.renderChildren(t.content)}`:\"\"},addCommands(){return{setHeading:t=>({commands:e})=>this.options.levels.includes(t.level)?e.setNode(this.name,t):!1,toggleHeading:t=>({commands:e})=>this.options.levels.includes(t.level)?e.toggleNode(this.name,\"paragraph\",t):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((t,e)=>({...t,[`Mod-Alt-${e}`]:()=>this.editor.commands.toggleHeading({level:e})}),{})},addInputRules(){return this.options.levels.map(t=>ar({find:new RegExp(`^(#{${Math.min(...this.options.levels)},${t}})\\\\s$`),type:this.type,getAttributes:{level:t}}))}}),Uu=o0;var i0=/(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))$/,s0=/(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))/g,l0=ee.create({name:\"highlight\",addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:t=>t.getAttribute(\"data-color\")||t.style.backgroundColor,renderHTML:t=>t.color?{\"data-color\":t.color,style:`background-color: ${t.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:\"mark\"}]},renderHTML({HTMLAttributes:t}){return[\"mark\",R(this.options.HTMLAttributes,t),0]},renderMarkdown:(t,e)=>`==${e.renderChildren(t)}==`,parseMarkdown:(t,e)=>e.applyMark(\"highlight\",e.parseInline(t.tokens||[])),markdownTokenizer:{name:\"highlight\",level:\"inline\",start:t=>t.indexOf(\"==\"),tokenize(t,e,n){let o=/^(==)([^=]+)(==)/.exec(t);if(o){let i=o[2].trim(),s=n.inlineTokens(i);return{type:\"highlight\",raw:o[0],text:i,tokens:s}}}},addCommands(){return{setHighlight:t=>({commands:e})=>e.setMark(this.name,t),toggleHighlight:t=>({commands:e})=>e.toggleMark(this.name,t),unsetHighlight:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-Shift-h\":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[Be({find:i0,type:this.type})]},addPasteRules(){return[Me({find:s0,type:this.type})]}}),Ku=l0;var a0=F.create({name:\"horizontalRule\",addOptions(){return{HTMLAttributes:{},nextNodeType:\"paragraph\"}},group:\"block\",parseHTML(){return[{tag:\"hr\"}]},renderHTML({HTMLAttributes:t}){return[\"hr\",R(this.options.HTMLAttributes,t)]},markdownTokenName:\"hr\",parseMarkdown:(t,e)=>e.createNode(\"horizontalRule\"),renderMarkdown:()=>\"---\",addCommands(){return{setHorizontalRule:()=>({chain:t,state:e})=>{if(!bu(e,e.schema.nodes[this.name]))return!1;let{selection:n}=e,{$to:r}=n,o=t();return mo(n)?o.insertContentAt(r.pos,{type:this.name}):o.insertContent({type:this.name}),o.command(({state:i,tr:s,dispatch:l})=>{if(l){let{$to:a}=s.selection,c=a.end();if(a.nodeAfter)a.nodeAfter.isTextblock?s.setSelection(D.create(s.doc,a.pos+1)):a.nodeAfter.isBlock?s.setSelection(L.create(s.doc,a.pos)):s.setSelection(D.create(s.doc,a.pos));else{let d=i.schema.nodes[this.options.nextNodeType]||a.parent.type.contentMatch.defaultType,u=d?.create();u&&(s.insert(c,u),s.setSelection(D.create(s.doc,c+1)))}s.scrollIntoView()}return!0}).run()}}},addInputRules(){return[bo({find:/^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,type:this.type})]}}),qu=a0;var c0=/(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))$/,d0=/(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))/g,u0=/(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))$/,f0=/(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))/g,h0=ee.create({name:\"italic\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"em\"},{tag:\"i\",getAttrs:t=>t.style.fontStyle!==\"normal\"&&null},{style:\"font-style=normal\",clearMark:t=>t.type.name===this.name},{style:\"font-style=italic\"}]},renderHTML({HTMLAttributes:t}){return[\"em\",R(this.options.HTMLAttributes,t),0]},addCommands(){return{setItalic:()=>({commands:t})=>t.setMark(this.name),toggleItalic:()=>({commands:t})=>t.toggleMark(this.name),unsetItalic:()=>({commands:t})=>t.unsetMark(this.name)}},markdownTokenName:\"em\",parseMarkdown:(t,e)=>e.applyMark(\"italic\",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`*${e.renderChildren(t)}*`,addKeyboardShortcuts(){return{\"Mod-i\":()=>this.editor.commands.toggleItalic(),\"Mod-I\":()=>this.editor.commands.toggleItalic()}},addInputRules(){return[Be({find:c0,type:this.type}),Be({find:u0,type:this.type})]},addPasteRules(){return[Me({find:d0,type:this.type}),Me({find:f0,type:this.type})]}}),Ju=h0;var p0=/(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/,m0=F.create({name:\"image\",addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{},resize:!1}},inline(){return this.options.inline},group(){return this.options.inline?\"inline\":\"block\"},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},width:{default:null},height:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?\"img[src]\":'img[src]:not([src^=\"data:\"])'}]},renderHTML({HTMLAttributes:t}){return[\"img\",R(this.options.HTMLAttributes,t)]},parseMarkdown:(t,e)=>e.createNode(\"image\",{src:t.href,title:t.title,alt:t.text}),renderMarkdown:t=>{var e,n,r,o,i,s;let l=(n=(e=t.attrs)==null?void 0:e.src)!=null?n:\"\",a=(o=(r=t.attrs)==null?void 0:r.alt)!=null?o:\"\",c=(s=(i=t.attrs)==null?void 0:i.title)!=null?s:\"\";return c?`![${a}](${l} \"${c}\")`:`![${a}](${l})`},addNodeView(){if(!this.options.resize||!this.options.resize.enabled||typeof document>\"u\")return null;let{directions:t,minWidth:e,minHeight:n,alwaysPreserveAspectRatio:r}=this.options.resize;return({node:o,getPos:i,HTMLAttributes:s,editor:l})=>{let a=document.createElement(\"img\");Object.entries(s).forEach(([u,f])=>{if(f!=null)switch(u){case\"width\":case\"height\":break;default:a.setAttribute(u,f);break}}),a.src=s.src;let c=new yu({element:a,editor:l,node:o,getPos:i,onResize:(u,f)=>{a.style.width=`${u}px`,a.style.height=`${f}px`},onCommit:(u,f)=>{let h=i();h!==void 0&&this.editor.chain().setNodeSelection(h).updateAttributes(this.name,{width:u,height:f}).run()},onUpdate:(u,f,h)=>u.type===o.type,options:{directions:t,min:{width:e,height:n},preserveAspectRatio:r===!0}}),d=c.dom;return d.style.visibility=\"hidden\",d.style.pointerEvents=\"none\",a.onload=()=>{d.style.visibility=\"\",d.style.pointerEvents=\"\"},c}},addCommands(){return{setImage:t=>({commands:e})=>e.insertContent({type:this.name,attrs:t})}},addInputRules(){return[bo({find:p0,type:this.type,getAttributes:t=>{let[,,e,n,r]=t;return{src:n,alt:e,title:r}}})]}}),Gu=m0;var Xu=Gu.extend({addAttributes(){return{...this.parent?.(),id:{default:null,parseHTML:t=>t.getAttribute(\"data-id\"),renderHTML:t=>t.id?{\"data-id\":t.id}:{}},width:{default:null,parseHTML:t=>t.getAttribute(\"width\")||t.style.width||null,renderHTML:t=>t.width?{width:t.width,style:`width: ${t.width}`}:{}},height:{default:null,parseHTML:t=>t.getAttribute(\"height\")||t.style.height||null,renderHTML:t=>t.height?{height:t.height,style:`height: ${t.height}`}:{}}}}});var Yu=F.create({name:\"lead\",group:\"block\",content:\"block+\",addOptions(){return{HTMLAttributes:{class:\"lead\"}}},parseHTML(){return[{tag:\"div\",getAttrs:t=>t.classList.contains(\"lead\")}]},renderHTML({HTMLAttributes:t}){return[\"div\",R(this.options.HTMLAttributes,t),0]},addCommands(){return{toggleLead:()=>({commands:t})=>t.toggleWrap(this.name)}}});var g0=\"aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2\",y0=\"\\u03B5\\u03BB1\\u03C52\\u0431\\u04331\\u0435\\u043B3\\u0434\\u0435\\u0442\\u04384\\u0435\\u044E2\\u043A\\u0430\\u0442\\u043E\\u043B\\u0438\\u043A6\\u043E\\u043C3\\u043C\\u043A\\u04342\\u043E\\u043D1\\u0441\\u043A\\u0432\\u04306\\u043E\\u043D\\u043B\\u0430\\u0439\\u043D5\\u0440\\u04333\\u0440\\u0443\\u04412\\u04442\\u0441\\u0430\\u0439\\u04423\\u0440\\u04313\\u0443\\u043A\\u04403\\u049B\\u0430\\u04373\\u0570\\u0561\\u05753\\u05D9\\u05E9\\u05E8\\u05D0\\u05DC5\\u05E7\\u05D5\\u05DD3\\u0627\\u0628\\u0648\\u0638\\u0628\\u064A5\\u0631\\u0627\\u0645\\u0643\\u06485\\u0644\\u0627\\u0631\\u062F\\u06464\\u0628\\u062D\\u0631\\u064A\\u06465\\u062C\\u0632\\u0627\\u0626\\u06315\\u0633\\u0639\\u0648\\u062F\\u064A\\u06296\\u0639\\u0644\\u064A\\u0627\\u06465\\u0645\\u063A\\u0631\\u06285\\u0645\\u0627\\u0631\\u0627\\u062A5\\u06CC\\u0631\\u0627\\u06465\\u0628\\u0627\\u0631\\u062A2\\u0632\\u0627\\u06314\\u064A\\u062A\\u06433\\u06BE\\u0627\\u0631\\u062A5\\u062A\\u0648\\u0646\\u06334\\u0633\\u0648\\u062F\\u0627\\u06463\\u0631\\u064A\\u06295\\u0634\\u0628\\u0643\\u06294\\u0639\\u0631\\u0627\\u06422\\u06282\\u0645\\u0627\\u06464\\u0641\\u0644\\u0633\\u0637\\u064A\\u06466\\u0642\\u0637\\u06313\\u0643\\u0627\\u062B\\u0648\\u0644\\u064A\\u06436\\u0648\\u06453\\u0645\\u0635\\u06312\\u0644\\u064A\\u0633\\u064A\\u06275\\u0648\\u0631\\u064A\\u062A\\u0627\\u0646\\u064A\\u06277\\u0642\\u06394\\u0647\\u0645\\u0631\\u0627\\u06475\\u067E\\u0627\\u06A9\\u0633\\u062A\\u0627\\u06467\\u0680\\u0627\\u0631\\u062A4\\u0915\\u0949\\u092E3\\u0928\\u0947\\u091F3\\u092D\\u093E\\u0930\\u09240\\u092E\\u094D3\\u094B\\u09245\\u0938\\u0902\\u0917\\u0920\\u09285\\u09AC\\u09BE\\u0982\\u09B2\\u09BE5\\u09AD\\u09BE\\u09B0\\u09A42\\u09F0\\u09A44\\u0A2D\\u0A3E\\u0A30\\u0A244\\u0AAD\\u0ABE\\u0AB0\\u0AA44\\u0B2D\\u0B3E\\u0B30\\u0B244\\u0B87\\u0BA8\\u0BCD\\u0BA4\\u0BBF\\u0BAF\\u0BBE6\\u0BB2\\u0B99\\u0BCD\\u0B95\\u0BC86\\u0B9A\\u0BBF\\u0B99\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0BC2\\u0BB0\\u0BCD11\\u0C2D\\u0C3E\\u0C30\\u0C24\\u0C4D5\\u0CAD\\u0CBE\\u0CB0\\u0CA44\\u0D2D\\u0D3E\\u0D30\\u0D24\\u0D025\\u0DBD\\u0D82\\u0D9A\\u0DCF4\\u0E04\\u0E2D\\u0E213\\u0E44\\u0E17\\u0E223\\u0EA5\\u0EB2\\u0EA73\\u10D2\\u10D42\\u307F\\u3093\\u306A3\\u30A2\\u30DE\\u30BE\\u30F34\\u30AF\\u30E9\\u30A6\\u30C94\\u30B0\\u30FC\\u30B0\\u30EB4\\u30B3\\u30E02\\u30B9\\u30C8\\u30A23\\u30BB\\u30FC\\u30EB3\\u30D5\\u30A1\\u30C3\\u30B7\\u30E7\\u30F36\\u30DD\\u30A4\\u30F3\\u30C84\\u4E16\\u754C2\\u4E2D\\u4FE11\\u56FD1\\u570B1\\u6587\\u7F513\\u4E9A\\u9A6C\\u900A3\\u4F01\\u4E1A2\\u4F5B\\u5C712\\u4FE1\\u606F2\\u5065\\u5EB72\\u516B\\u53662\\u516C\\u53F81\\u76CA2\\u53F0\\u6E7E1\\u70632\\u5546\\u57CE1\\u5E971\\u68072\\u5609\\u91CC0\\u5927\\u9152\\u5E975\\u5728\\u7EBF2\\u5927\\u62FF2\\u5929\\u4E3B\\u65593\\u5A31\\u4E502\\u5BB6\\u96FB2\\u5E7F\\u4E1C2\\u5FAE\\u535A2\\u6148\\u55842\\u6211\\u7231\\u4F603\\u624B\\u673A2\\u62DB\\u80582\\u653F\\u52A11\\u5E9C2\\u65B0\\u52A0\\u57612\\u95FB2\\u65F6\\u5C1A2\\u66F8\\u7C4D2\\u673A\\u67842\\u6DE1\\u9A6C\\u95213\\u6E38\\u620F2\\u6FB3\\u95802\\u70B9\\u770B2\\u79FB\\u52A82\\u7EC4\\u7EC7\\u673A\\u67844\\u7F51\\u57401\\u5E971\\u7AD91\\u7EDC2\\u8054\\u901A2\\u8C37\\u6B4C2\\u8D2D\\u72692\\u901A\\u8CA92\\u96C6\\u56E22\\u96FB\\u8A0A\\u76C8\\u79D14\\u98DE\\u5229\\u6D663\\u98DF\\u54C12\\u9910\\u53852\\u9999\\u683C\\u91CC\\u62C93\\u6E2F2\\uB2F7\\uB1371\\uCEF42\\uC0BC\\uC1312\\uD55C\\uAD6D2\",xl=\"numeric\",kl=\"ascii\",Sl=\"alpha\",fr=\"asciinumeric\",ur=\"alphanumeric\",Cl=\"domain\",of=\"emoji\",b0=\"scheme\",w0=\"slashscheme\",pl=\"whitespace\";function x0(t,e){return t in e||(e[t]=[]),e[t]}function nn(t,e,n){e[xl]&&(e[fr]=!0,e[ur]=!0),e[kl]&&(e[fr]=!0,e[Sl]=!0),e[fr]&&(e[ur]=!0),e[Sl]&&(e[ur]=!0),e[ur]&&(e[Cl]=!0),e[of]&&(e[Cl]=!0);for(let r in e){let o=x0(r,n);o.indexOf(t)<0&&o.push(t)}}function k0(t,e){let n={};for(let r in e)e[r].indexOf(t)>=0&&(n[r]=!0);return n}function Te(t=null){this.j={},this.jr=[],this.jd=null,this.t=t}Te.groups={};Te.prototype={accepts(){return!!this.t},go(t){let e=this,n=e.j[t];if(n)return n;for(let r=0;r<e.jr.length;r++){let o=e.jr[r][0],i=e.jr[r][1];if(i&&o.test(t))return i}return e.jd},has(t,e=!1){return e?t in this.j:!!this.go(t)},ta(t,e,n,r){for(let o=0;o<t.length;o++)this.tt(t[o],e,n,r)},tr(t,e,n,r){r=r||Te.groups;let o;return e&&e.j?o=e:(o=new Te(e),n&&r&&nn(e,n,r)),this.jr.push([t,o]),o},ts(t,e,n,r){let o=this,i=t.length;if(!i)return o;for(let s=0;s<i-1;s++)o=o.tt(t[s]);return o.tt(t[i-1],e,n,r)},tt(t,e,n,r){r=r||Te.groups;let o=this;if(e&&e.j)return o.j[t]=e,e;let i=e,s,l=o.go(t);if(l?(s=new Te,Object.assign(s.j,l.j),s.jr.push.apply(s.jr,l.jr),s.jd=l.jd,s.t=l.t):s=new Te,i){if(r)if(s.t&&typeof s.t==\"string\"){let a=Object.assign(k0(s.t,r),n);nn(i,a,r)}else n&&nn(i,n,r);s.t=i}return o.j[t]=s,s}};var j=(t,e,n,r,o)=>t.ta(e,n,r,o),re=(t,e,n,r,o)=>t.tr(e,n,r,o),Qu=(t,e,n,r,o)=>t.ts(e,n,r,o),M=(t,e,n,r,o)=>t.tt(e,n,r,o),St=\"WORD\",vl=\"UWORD\",sf=\"ASCIINUMERICAL\",lf=\"ALPHANUMERICAL\",br=\"LOCALHOST\",Ml=\"TLD\",Tl=\"UTLD\",Eo=\"SCHEME\",On=\"SLASH_SCHEME\",El=\"NUM\",Al=\"WS\",Nl=\"NL\",hr=\"OPENBRACE\",pr=\"CLOSEBRACE\",No=\"OPENBRACKET\",Oo=\"CLOSEBRACKET\",Ro=\"OPENPAREN\",Do=\"CLOSEPAREN\",Io=\"OPENANGLEBRACKET\",Po=\"CLOSEANGLEBRACKET\",Lo=\"FULLWIDTHLEFTPAREN\",Bo=\"FULLWIDTHRIGHTPAREN\",zo=\"LEFTCORNERBRACKET\",Ho=\"RIGHTCORNERBRACKET\",$o=\"LEFTWHITECORNERBRACKET\",Fo=\"RIGHTWHITECORNERBRACKET\",Vo=\"FULLWIDTHLESSTHAN\",_o=\"FULLWIDTHGREATERTHAN\",Wo=\"AMPERSAND\",jo=\"APOSTROPHE\",Uo=\"ASTERISK\",Lt=\"AT\",Ko=\"BACKSLASH\",qo=\"BACKTICK\",Jo=\"CARET\",Bt=\"COLON\",Ol=\"COMMA\",Go=\"DOLLAR\",ot=\"DOT\",Xo=\"EQUALS\",Rl=\"EXCLAMATION\",He=\"HYPHEN\",mr=\"PERCENT\",Yo=\"PIPE\",Qo=\"PLUS\",Zo=\"POUND\",gr=\"QUERY\",Dl=\"QUOTE\",af=\"FULLWIDTHMIDDLEDOT\",Il=\"SEMI\",it=\"SLASH\",yr=\"TILDE\",ei=\"UNDERSCORE\",cf=\"EMOJI\",ti=\"SYM\",df=Object.freeze({__proto__:null,ALPHANUMERICAL:lf,AMPERSAND:Wo,APOSTROPHE:jo,ASCIINUMERICAL:sf,ASTERISK:Uo,AT:Lt,BACKSLASH:Ko,BACKTICK:qo,CARET:Jo,CLOSEANGLEBRACKET:Po,CLOSEBRACE:pr,CLOSEBRACKET:Oo,CLOSEPAREN:Do,COLON:Bt,COMMA:Ol,DOLLAR:Go,DOT:ot,EMOJI:cf,EQUALS:Xo,EXCLAMATION:Rl,FULLWIDTHGREATERTHAN:_o,FULLWIDTHLEFTPAREN:Lo,FULLWIDTHLESSTHAN:Vo,FULLWIDTHMIDDLEDOT:af,FULLWIDTHRIGHTPAREN:Bo,HYPHEN:He,LEFTCORNERBRACKET:zo,LEFTWHITECORNERBRACKET:$o,LOCALHOST:br,NL:Nl,NUM:El,OPENANGLEBRACKET:Io,OPENBRACE:hr,OPENBRACKET:No,OPENPAREN:Ro,PERCENT:mr,PIPE:Yo,PLUS:Qo,POUND:Zo,QUERY:gr,QUOTE:Dl,RIGHTCORNERBRACKET:Ho,RIGHTWHITECORNERBRACKET:Fo,SCHEME:Eo,SEMI:Il,SLASH:it,SLASH_SCHEME:On,SYM:ti,TILDE:yr,TLD:Ml,UNDERSCORE:ei,UTLD:Tl,UWORD:vl,WORD:St,WS:Al}),xt=/[a-z]/,dr=/\\p{L}/u,ml=/\\p{Emoji}/u;var kt=/\\d/,gl=/\\s/;var Zu=\"\\r\",yl=`\n`,S0=\"\\uFE0F\",C0=\"\\u200D\",bl=\"\\uFFFC\",Mo=null,To=null;function v0(t=[]){let e={};Te.groups=e;let n=new Te;Mo==null&&(Mo=ef(g0)),To==null&&(To=ef(y0)),M(n,\"'\",jo),M(n,\"{\",hr),M(n,\"}\",pr),M(n,\"[\",No),M(n,\"]\",Oo),M(n,\"(\",Ro),M(n,\")\",Do),M(n,\"<\",Io),M(n,\">\",Po),M(n,\"\\uFF08\",Lo),M(n,\"\\uFF09\",Bo),M(n,\"\\u300C\",zo),M(n,\"\\u300D\",Ho),M(n,\"\\u300E\",$o),M(n,\"\\u300F\",Fo),M(n,\"\\uFF1C\",Vo),M(n,\"\\uFF1E\",_o),M(n,\"&\",Wo),M(n,\"*\",Uo),M(n,\"@\",Lt),M(n,\"`\",qo),M(n,\"^\",Jo),M(n,\":\",Bt),M(n,\",\",Ol),M(n,\"$\",Go),M(n,\".\",ot),M(n,\"=\",Xo),M(n,\"!\",Rl),M(n,\"-\",He),M(n,\"%\",mr),M(n,\"|\",Yo),M(n,\"+\",Qo),M(n,\"#\",Zo),M(n,\"?\",gr),M(n,'\"',Dl),M(n,\"/\",it),M(n,\";\",Il),M(n,\"~\",yr),M(n,\"_\",ei),M(n,\"\\\\\",Ko),M(n,\"\\u30FB\",af);let r=re(n,kt,El,{[xl]:!0});re(r,kt,r);let o=re(r,xt,sf,{[fr]:!0}),i=re(r,dr,lf,{[ur]:!0}),s=re(n,xt,St,{[kl]:!0});re(s,kt,o),re(s,xt,s),re(o,kt,o),re(o,xt,o);let l=re(n,dr,vl,{[Sl]:!0});re(l,xt),re(l,kt,i),re(l,dr,l),re(i,kt,i),re(i,xt),re(i,dr,i);let a=M(n,yl,Nl,{[pl]:!0}),c=M(n,Zu,Al,{[pl]:!0}),d=re(n,gl,Al,{[pl]:!0});M(n,bl,d),M(c,yl,a),M(c,bl,d),re(c,gl,d),M(d,Zu),M(d,yl),re(d,gl,d),M(d,bl,d);let u=re(n,ml,cf,{[of]:!0});M(u,\"#\"),re(u,ml,u),M(u,S0,u);let f=M(u,C0);M(f,\"#\"),re(f,ml,u);let h=[[xt,s],[kt,o]],p=[[xt,null],[dr,l],[kt,i]];for(let m=0;m<Mo.length;m++)Pt(n,Mo[m],Ml,St,h);for(let m=0;m<To.length;m++)Pt(n,To[m],Tl,vl,p);nn(Ml,{tld:!0,ascii:!0},e),nn(Tl,{utld:!0,alpha:!0},e),Pt(n,\"file\",Eo,St,h),Pt(n,\"mailto\",Eo,St,h),Pt(n,\"http\",On,St,h),Pt(n,\"https\",On,St,h),Pt(n,\"ftp\",On,St,h),Pt(n,\"ftps\",On,St,h),nn(Eo,{scheme:!0,ascii:!0},e),nn(On,{slashscheme:!0,ascii:!0},e),t=t.sort((m,g)=>m[0]>g[0]?1:-1);for(let m=0;m<t.length;m++){let g=t[m][0],w=t[m][1]?{[b0]:!0}:{[w0]:!0};g.indexOf(\"-\")>=0?w[Cl]=!0:xt.test(g)?kt.test(g)?w[fr]=!0:w[kl]=!0:w[xl]=!0,Qu(n,g,g,w)}return Qu(n,\"localhost\",br,{ascii:!0}),n.jd=new Te(ti),{start:n,tokens:Object.assign({groups:e},df)}}function uf(t,e){let n=M0(e.replace(/[A-Z]/g,l=>l.toLowerCase())),r=n.length,o=[],i=0,s=0;for(;s<r;){let l=t,a=null,c=0,d=null,u=-1,f=-1;for(;s<r&&(a=l.go(n[s]));)l=a,l.accepts()?(u=0,f=0,d=l):u>=0&&(u+=n[s].length,f++),c+=n[s].length,i+=n[s].length,s++;i-=u,s-=f,c-=u,o.push({t:d.t,v:e.slice(i-c,i),s:i-c,e:i})}return o}function M0(t){let e=[],n=t.length,r=0;for(;r<n;){let o=t.charCodeAt(r),i,s=o<55296||o>56319||r+1===n||(i=t.charCodeAt(r+1))<56320||i>57343?t[r]:t.slice(r,r+2);e.push(s),r+=s.length}return e}function Pt(t,e,n,r,o){let i,s=e.length;for(let l=0;l<s-1;l++){let a=e[l];t.j[a]?i=t.j[a]:(i=new Te(r),i.jr=o.slice(),t.j[a]=i),t=i}return i=new Te(n),i.jr=o.slice(),t.j[e[s-1]]=i,i}function ef(t){let e=[],n=[],r=0,o=\"0123456789\";for(;r<t.length;){let i=0;for(;o.indexOf(t[r+i])>=0;)i++;if(i>0){e.push(n.join(\"\"));for(let s=parseInt(t.substring(r,r+i),10);s>0;s--)n.pop();r+=i}else n.push(t[r]),r++}return e}var wr={defaultProtocol:\"http\",events:null,format:tf,formatHref:tf,nl2br:!1,tagName:\"a\",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function Pl(t,e=null){let n=Object.assign({},wr);t&&(n=Object.assign(n,t instanceof Pl?t.o:t));let r=n.ignoreTags,o=[];for(let i=0;i<r.length;i++)o.push(r[i].toUpperCase());this.o=n,e&&(this.defaultRender=e),this.ignoreTags=o}Pl.prototype={o:wr,ignoreTags:[],defaultRender(t){return t},check(t){return this.get(\"validate\",t.toString(),t)},get(t,e,n){let r=e!=null,o=this.o[t];return o&&(typeof o==\"object\"?(o=n.t in o?o[n.t]:wr[t],typeof o==\"function\"&&r&&(o=o(e,n))):typeof o==\"function\"&&r&&(o=o(e,n.t,n)),o)},getObj(t,e,n){let r=this.o[t];return typeof r==\"function\"&&e!=null&&(r=r(e,n.t,n)),r},render(t){let e=t.render(this);return(this.get(\"render\",null,t)||this.defaultRender)(e,t.t,t)}};function tf(t){return t}function ff(t,e){this.t=\"token\",this.v=t,this.tk=e}ff.prototype={isLink:!1,toString(){return this.v},toHref(t){return this.toString()},toFormattedString(t){let e=this.toString(),n=t.get(\"truncate\",e,this),r=t.get(\"format\",e,this);return n&&r.length>n?r.substring(0,n)+\"\\u2026\":r},toFormattedHref(t){return t.get(\"formatHref\",this.toHref(t.get(\"defaultProtocol\")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(t=wr.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(t),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(t){return{type:this.t,value:this.toFormattedString(t),isLink:this.isLink,href:this.toFormattedHref(t),start:this.startIndex(),end:this.endIndex()}},validate(t){return t.get(\"validate\",this.toString(),this)},render(t){let e=this,n=this.toHref(t.get(\"defaultProtocol\")),r=t.get(\"formatHref\",n,this),o=t.get(\"tagName\",n,e),i=this.toFormattedString(t),s={},l=t.get(\"className\",n,e),a=t.get(\"target\",n,e),c=t.get(\"rel\",n,e),d=t.getObj(\"attributes\",n,e),u=t.getObj(\"events\",n,e);return s.href=r,l&&(s.class=l),a&&(s.target=a),c&&(s.rel=c),d&&Object.assign(s,d),{tagName:o,attributes:s,content:i,eventListeners:u}}};function ni(t,e){class n extends ff{constructor(o,i){super(o,i),this.t=t}}for(let r in e)n.prototype[r]=e[r];return n.t=t,n}var nf=ni(\"email\",{isLink:!0,toHref(){return\"mailto:\"+this.toString()}}),rf=ni(\"text\"),T0=ni(\"nl\"),Ao=ni(\"url\",{isLink:!0,toHref(t=wr.defaultProtocol){return this.hasProtocol()?this.v:`${t}://${this.v}`},hasProtocol(){let t=this.tk;return t.length>=2&&t[0].t!==br&&t[1].t===Bt}});var ze=t=>new Te(t);function A0({groups:t}){let e=t.domain.concat([Wo,Uo,Lt,Ko,qo,Jo,Go,Xo,He,El,mr,Yo,Qo,Zo,it,ti,yr,ei]),n=[jo,Bt,Ol,ot,Rl,mr,gr,Dl,Il,Io,Po,hr,pr,Oo,No,Ro,Do,Lo,Bo,zo,Ho,$o,Fo,Vo,_o],r=[Wo,jo,Uo,Ko,qo,Jo,Go,Xo,He,hr,pr,mr,Yo,Qo,Zo,gr,it,ti,yr,ei],o=ze(),i=M(o,yr);j(i,r,i),j(i,t.domain,i);let s=ze(),l=ze(),a=ze();j(o,t.domain,s),j(o,t.scheme,l),j(o,t.slashscheme,a),j(s,r,i),j(s,t.domain,s);let c=M(s,Lt);M(i,Lt,c),M(l,Lt,c),M(a,Lt,c);let d=M(i,ot);j(d,r,i),j(d,t.domain,i);let u=ze();j(c,t.domain,u),j(u,t.domain,u);let f=M(u,ot);j(f,t.domain,u);let h=ze(nf);j(f,t.tld,h),j(f,t.utld,h),M(c,br,h);let p=M(u,He);M(p,He,p),j(p,t.domain,u),j(h,t.domain,u),M(h,ot,f),M(h,He,p);let m=M(h,Bt);j(m,t.numeric,nf);let g=M(s,He),y=M(s,ot);M(g,He,g),j(g,t.domain,s),j(y,r,i),j(y,t.domain,s);let w=ze(Ao);j(y,t.tld,w),j(y,t.utld,w),j(w,t.domain,s),j(w,r,i),M(w,ot,y),M(w,He,g),M(w,Lt,c);let b=M(w,Bt),C=ze(Ao);j(b,t.numeric,C);let x=ze(Ao),S=ze();j(x,e,x),j(x,n,S),j(S,e,x),j(S,n,S),M(w,it,x),M(C,it,x);let k=M(l,Bt),O=M(a,Bt),T=M(O,it),A=M(T,it);j(l,t.domain,s),M(l,ot,y),M(l,He,g),j(a,t.domain,s),M(a,ot,y),M(a,He,g),j(k,t.domain,x),M(k,it,x),M(k,gr,x),j(A,t.domain,x),j(A,e,x),M(A,it,x);let $=[[hr,pr],[No,Oo],[Ro,Do],[Io,Po],[Lo,Bo],[zo,Ho],[$o,Fo],[Vo,_o]];for(let z=0;z<$.length;z++){let[K,V]=$[z],N=M(x,K);M(S,K,N),M(N,V,x);let _=ze(Ao);j(N,e,_);let W=ze();j(N,n),j(_,e,_),j(_,n,W),j(W,e,_),j(W,n,W),M(_,V,x),M(W,V,x)}return M(o,br,w),M(o,Nl,T0),{start:o,tokens:df}}function E0(t,e,n){let r=n.length,o=0,i=[],s=[];for(;o<r;){let l=t,a=null,c=null,d=0,u=null,f=-1;for(;o<r&&!(a=l.go(n[o].t));)s.push(n[o++]);for(;o<r&&(c=a||l.go(n[o].t));)a=null,l=c,l.accepts()?(f=0,u=l):f>=0&&f++,o++,d++;if(f<0)o-=d,o<r&&(s.push(n[o]),o++);else{s.length>0&&(i.push(wl(rf,e,s)),s=[]),o-=f,d-=f;let h=u.t,p=n.slice(o-d,o);i.push(wl(h,e,p))}}return s.length>0&&i.push(wl(rf,e,s)),i}function wl(t,e,n){let r=n[0].s,o=n[n.length-1].e,i=e.slice(r,o);return new t(i,n)}var N0=typeof console<\"u\"&&console&&console.warn||(()=>{}),O0=\"until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.\",Z={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function hf(){return Te.groups={},Z.scanner=null,Z.parser=null,Z.tokenQueue=[],Z.pluginQueue=[],Z.customSchemes=[],Z.initialized=!1,Z}function Ll(t,e=!1){if(Z.initialized&&N0(`linkifyjs: already initialized - will not register custom scheme \"${t}\" ${O0}`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(t))throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);Z.customSchemes.push([t,e])}function R0(){Z.scanner=v0(Z.customSchemes);for(let t=0;t<Z.tokenQueue.length;t++)Z.tokenQueue[t][1]({scanner:Z.scanner});Z.parser=A0(Z.scanner.tokens);for(let t=0;t<Z.pluginQueue.length;t++)Z.pluginQueue[t][1]({scanner:Z.scanner,parser:Z.parser});return Z.initialized=!0,Z}function ri(t){return Z.initialized||R0(),E0(Z.parser.start,t,uf(Z.scanner.start,t))}ri.scan=uf;function oi(t,e=null,n=null){if(e&&typeof e==\"object\"){if(n)throw Error(`linkifyjs: Invalid link type ${e}; must be a string`);n=e,e=null}let r=new Pl(n),o=ri(t),i=[];for(let s=0;s<o.length;s++){let l=o[s];l.isLink&&(!e||l.t===e)&&r.check(l)&&i.push(l.toFormattedObject(r))}return i}var Bl=\"[\\0- \\xA0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]\",D0=new RegExp(Bl),I0=new RegExp(`${Bl}$`),P0=new RegExp(Bl,\"g\");function L0(t){return t.length===1?t[0].isLink:t.length===3&&t[1].isLink?[\"()\",\"[]\"].includes(t[0].value+t[2].value):!1}function B0(t){return new P({key:new H(\"autolink\"),appendTransaction:(e,n,r)=>{let o=e.some(c=>c.docChanged)&&!n.doc.eq(r.doc),i=e.some(c=>c.getMeta(\"preventAutolink\"));if(!o||i)return;let{tr:s}=r,l=Js(n.doc,[...e]);if(el(l).forEach(({newRange:c})=>{let d=jd(r.doc,c,h=>h.isTextblock),u,f;if(d.length>1)u=d[0],f=r.doc.textBetween(u.pos,u.pos+u.node.nodeSize,void 0,\" \");else if(d.length){let h=r.doc.textBetween(c.from,c.to,\" \",\" \");if(!I0.test(h))return;u=d[0],f=r.doc.textBetween(u.pos,c.to,void 0,\" \")}if(u&&f){let h=f.split(D0).filter(Boolean);if(h.length<=0)return!1;let p=h[h.length-1],m=u.pos+f.lastIndexOf(p);if(!p)return!1;let g=ri(p).map(y=>y.toObject(t.defaultProtocol));if(!L0(g))return!1;g.filter(y=>y.isLink).map(y=>({...y,from:m+y.start+1,to:m+y.end+1})).filter(y=>r.schema.marks.code?!r.doc.rangeHasMark(y.from,y.to,r.schema.marks.code):!0).filter(y=>t.validate(y.value)).filter(y=>t.shouldAutoLink(y.value)).forEach(y=>{po(y.from,y.to,r.doc).some(w=>w.mark.type===t.type)||s.addMark(y.from,y.to,t.type.create({href:y.href}))})}}),!!s.steps.length)return s}})}function z0(t){return new P({key:new H(\"handleClickLink\"),props:{handleClick:(e,n,r)=>{var o,i;if(r.button!==0||!e.editable)return!1;let s=!1;if(t.enableClickSelection&&(s=t.editor.commands.extendMarkRange(t.type.name)),t.openOnClick){let l=null;if(r.target instanceof HTMLAnchorElement)l=r.target;else{let u=r.target,f=[];for(;u.nodeName!==\"DIV\";)f.push(u),u=u.parentNode;l=f.find(h=>h.nodeName===\"A\")}if(!l)return s;let a=Zs(e.state,t.type.name),c=(o=l?.href)!=null?o:a.href,d=(i=l?.target)!=null?i:a.target;l&&c&&(window.open(c,d),s=!0)}return s}}})}function H0(t){return new P({key:new H(\"handlePasteLink\"),props:{handlePaste:(e,n,r)=>{let{shouldAutoLink:o}=t,{state:i}=e,{selection:s}=i,{empty:l}=s;if(l)return!1;let a=\"\";r.content.forEach(d=>{a+=d.textContent});let c=oi(a,{defaultProtocol:t.defaultProtocol}).find(d=>d.isLink&&d.value===a);return!a||!c||o!==void 0&&!o(c.href)?!1:t.editor.commands.setMark(t.type,{href:c.href})}}})}function rn(t,e){let n=[\"http\",\"https\",\"ftp\",\"ftps\",\"mailto\",\"tel\",\"callto\",\"sms\",\"cid\",\"xmpp\"];return e&&e.forEach(r=>{let o=typeof r==\"string\"?r:r.scheme;o&&n.push(o)}),!t||t.replace(P0,\"\").match(new RegExp(`^(?:(?:${n.join(\"|\")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,\"i\"))}var $0=ee.create({name:\"link\",priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn(\"The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.\")),this.options.protocols.forEach(t=>{if(typeof t==\"string\"){Ll(t);return}Ll(t.scheme,t.optionalSlashes)})},onDestroy(){hf()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:\"http\",HTMLAttributes:{target:\"_blank\",rel:\"noopener noreferrer nofollow\",class:null},isAllowedUri:(t,e)=>!!rn(t,e.protocols),validate:t=>!!t,shouldAutoLink:t=>!!t}},addAttributes(){return{href:{default:null,parseHTML(t){return t.getAttribute(\"href\")}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class}}},parseHTML(){return[{tag:\"a[href]\",getAttrs:t=>{let e=t.getAttribute(\"href\");return!e||!this.options.isAllowedUri(e,{defaultValidate:n=>!!rn(n,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:t}){return this.options.isAllowedUri(t.href,{defaultValidate:e=>!!rn(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?[\"a\",R(this.options.HTMLAttributes,t),0]:[\"a\",R(this.options.HTMLAttributes,{...t,href:\"\"}),0]},markdownTokenName:\"link\",parseMarkdown:(t,e)=>e.applyMark(\"link\",e.parseInline(t.tokens||[]),{href:t.href,title:t.title||null}),renderMarkdown:(t,e)=>{var n;let r=((n=t.attrs)==null?void 0:n.href)||\"\";return`[${e.renderChildren(t)}](${r})`},addCommands(){return{setLink:t=>({chain:e})=>{let{href:n}=t;return this.options.isAllowedUri(n,{defaultValidate:r=>!!rn(r,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?e().setMark(this.name,t).setMeta(\"preventAutolink\",!0).run():!1},toggleLink:t=>({chain:e})=>{let{href:n}=t||{};return n&&!this.options.isAllowedUri(n,{defaultValidate:r=>!!rn(r,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:e().toggleMark(this.name,t,{extendEmptyMarkRange:!0}).setMeta(\"preventAutolink\",!0).run()},unsetLink:()=>({chain:t})=>t().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta(\"preventAutolink\",!0).run()}},addPasteRules(){return[Me({find:t=>{let e=[];if(t){let{protocols:n,defaultProtocol:r}=this.options,o=oi(t).filter(i=>i.isLink&&this.options.isAllowedUri(i.value,{defaultValidate:s=>!!rn(s,n),protocols:n,defaultProtocol:r}));o.length&&o.forEach(i=>{this.options.shouldAutoLink(i.value)&&e.push({text:i.value,data:{href:i.href},index:i.start})})}return e},type:this.type,getAttributes:t=>{var e;return{href:(e=t.data)==null?void 0:e.href}}})]},addProseMirrorPlugins(){let t=[],{protocols:e,defaultProtocol:n}=this.options;return this.options.autolink&&t.push(B0({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:r=>this.options.isAllowedUri(r,{defaultValidate:o=>!!rn(o,e),protocols:e,defaultProtocol:n}),shouldAutoLink:this.options.shouldAutoLink})),t.push(z0({type:this.type,editor:this.editor,openOnClick:this.options.openOnClick===\"whenNotEditable\"?!0:this.options.openOnClick,enableClickSelection:this.options.enableClickSelection})),this.options.linkOnPaste&&t.push(H0({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type,shouldAutoLink:this.options.shouldAutoLink})),t}}),pf=$0;var F0=Object.defineProperty,V0=(t,e)=>{for(var n in e)F0(t,n,{get:e[n],enumerable:!0})},_0=\"listItem\",mf=\"textStyle\",gf=/^\\s*([-+*])\\s$/,$l=F.create({name:\"bulletList\",addOptions(){return{itemTypeName:\"listItem\",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:\"block list\",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:\"ul\"}]},renderHTML({HTMLAttributes:t}){return[\"ul\",R(this.options.HTMLAttributes,t),0]},markdownTokenName:\"list\",parseMarkdown:(t,e)=>t.type!==\"list\"||t.ordered?[]:{type:\"bulletList\",content:t.items?e.parseChildren(t.items):[]},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n`):\"\",markdownOptions:{indentsContent:!0},addCommands(){return{toggleBulletList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(_0,this.editor.getAttributes(mf)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{\"Mod-Shift-8\":()=>this.editor.commands.toggleBulletList()}},addInputRules(){let t=tt({find:gf,type:this.type});return(this.options.keepMarks||this.options.keepAttributes)&&(t=tt({find:gf,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:()=>this.editor.getAttributes(mf),editor:this.editor})),[t]}}),Fl=F.create({name:\"listItem\",addOptions(){return{HTMLAttributes:{},bulletListTypeName:\"bulletList\",orderedListTypeName:\"orderedList\"}},content:\"paragraph block*\",defining:!0,parseHTML(){return[{tag:\"li\"}]},renderHTML({HTMLAttributes:t}){return[\"li\",R(this.options.HTMLAttributes,t),0]},markdownTokenName:\"list_item\",parseMarkdown:(t,e)=>{if(t.type!==\"list_item\")return[];let n=[];if(t.tokens&&t.tokens.length>0)if(t.tokens.some(o=>o.type===\"paragraph\"))n=e.parseChildren(t.tokens);else{let o=t.tokens[0];if(o&&o.type===\"text\"&&o.tokens&&o.tokens.length>0){if(n=[{type:\"paragraph\",content:e.parseInline(o.tokens)}],t.tokens.length>1){let s=t.tokens.slice(1),l=e.parseChildren(s);n.push(...l)}}else n=e.parseChildren(t.tokens)}return n.length===0&&(n=[{type:\"paragraph\",content:[]}]),{type:\"listItem\",content:n}},renderMarkdown:(t,e,n)=>cr(t,e,r=>r.parentType===\"bulletList\"?\"- \":r.parentType===\"orderedList\"?`${r.index+1}. `:\"- \",n),addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>this.editor.commands.sinkListItem(this.name),\"Shift-Tab\":()=>this.editor.commands.liftListItem(this.name)}}}),W0={};V0(W0,{findListItemPos:()=>xr,getNextListDepth:()=>Vl,handleBackspace:()=>zl,handleDelete:()=>Hl,hasListBefore:()=>xf,hasListItemAfter:()=>j0,hasListItemBefore:()=>kf,listItemHasSubList:()=>Sf,nextListIsDeeper:()=>Cf,nextListIsHigher:()=>vf});var xr=(t,e)=>{let{$from:n}=e.selection,r=ne(t,e.schema),o=null,i=n.depth,s=n.pos,l=null;for(;i>0&&l===null;)o=n.node(i),o.type===r?l=i:(i-=1,s-=1);return l===null?null:{$pos:e.doc.resolve(s),depth:l}},Vl=(t,e)=>{let n=xr(t,e);if(!n)return!1;let[,r]=Xd(e,t,n.$pos.pos+4);return r},xf=(t,e,n)=>{let{$anchor:r}=t.selection,o=Math.max(0,r.pos-2),i=t.doc.resolve(o).node();return!(!i||!n.includes(i.type.name))},kf=(t,e)=>{var n;let{$anchor:r}=e.selection,o=e.doc.resolve(r.pos-2);return!(o.index()===0||((n=o.nodeBefore)==null?void 0:n.type.name)!==t)},Sf=(t,e,n)=>{if(!n)return!1;let r=ne(t,e.schema),o=!1;return n.descendants(i=>{i.type===r&&(o=!0)}),o},zl=(t,e,n)=>{if(t.commands.undoInputRule())return!0;if(t.state.selection.from!==t.state.selection.to)return!1;if(!Ze(t.state,e)&&xf(t.state,e,n)){let{$anchor:l}=t.state.selection,a=t.state.doc.resolve(l.before()-1),c=[];a.node().descendants((f,h)=>{f.type.name===e&&c.push({node:f,pos:h})});let d=c.at(-1);if(!d)return!1;let u=t.state.doc.resolve(a.start()+d.pos+1);return t.chain().cut({from:l.start()-1,to:l.end()+1},u.end()).joinForward().run()}if(!Ze(t.state,e)||!Qd(t.state))return!1;let r=xr(e,t.state);if(!r)return!1;let i=t.state.doc.resolve(r.$pos.pos-2).node(r.depth),s=Sf(e,t.state,i);return kf(e,t.state)&&!s?t.commands.joinItemBackward():t.chain().liftListItem(e).run()},Cf=(t,e)=>{let n=Vl(t,e),r=xr(t,e);return!r||!n?!1:n>r.depth},vf=(t,e)=>{let n=Vl(t,e),r=xr(t,e);return!r||!n?!1:n<r.depth},Hl=(t,e)=>{if(!Ze(t.state,e)||!Yd(t.state,e))return!1;let{selection:n}=t.state,{$from:r,$to:o}=n;return!n.empty&&r.sameParent(o)?!1:Cf(e,t.state)?t.chain().focus(t.state.selection.from+4).lift(e).joinBackward().run():vf(e,t.state)?t.chain().joinForward().joinBackward().run():t.commands.joinItemForward()},j0=(t,e)=>{var n;let{$anchor:r}=e.selection,o=e.doc.resolve(r.pos-r.parentOffset-2);return!(o.index()===o.parent.childCount-1||((n=o.nodeAfter)==null?void 0:n.type.name)!==t)},U0=U.create({name:\"listKeymap\",addOptions(){return{listTypes:[{itemName:\"listItem\",wrapperNames:[\"bulletList\",\"orderedList\"]},{itemName:\"taskItem\",wrapperNames:[\"taskList\"]}]}},addKeyboardShortcuts(){return{Delete:({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n})=>{t.state.schema.nodes[n]!==void 0&&Hl(t,n)&&(e=!0)}),e},\"Mod-Delete\":({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n})=>{t.state.schema.nodes[n]!==void 0&&Hl(t,n)&&(e=!0)}),e},Backspace:({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n,wrapperNames:r})=>{t.state.schema.nodes[n]!==void 0&&zl(t,n,r)&&(e=!0)}),e},\"Mod-Backspace\":({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:n,wrapperNames:r})=>{t.state.schema.nodes[n]!==void 0&&zl(t,n,r)&&(e=!0)}),e}}}}),yf=/^(\\s*)(\\d+)\\.\\s+(.*)$/,K0=/^\\s/;function q0(t){let e=[],n=0,r=0;for(;n<t.length;){let o=t[n],i=o.match(yf);if(!i)break;let[,s,l,a]=i,c=s.length,d=a,u=n+1,f=[o];for(;u<t.length;){let h=t[u];if(h.match(yf))break;if(h.trim()===\"\")f.push(h),d+=`\n`,u+=1;else if(h.match(K0))f.push(h),d+=`\n${h.slice(c+2)}`,u+=1;else break}e.push({indent:c,number:parseInt(l,10),content:d.trim(),raw:f.join(`\n`)}),r=u,n=u}return[e,r]}function Mf(t,e,n){var r;let o=[],i=0;for(;i<t.length;){let s=t[i];if(s.indent===e){let l=s.content.split(`\n`),a=((r=l[0])==null?void 0:r.trim())||\"\",c=[];a&&c.push({type:\"paragraph\",raw:a,tokens:n.inlineTokens(a)});let d=l.slice(1).join(`\n`).trim();if(d){let h=n.blockTokens(d);c.push(...h)}let u=i+1,f=[];for(;u<t.length&&t[u].indent>e;)f.push(t[u]),u+=1;if(f.length>0){let h=Math.min(...f.map(m=>m.indent)),p=Mf(f,h,n);c.push({type:\"list\",ordered:!0,start:f[0].number,items:p,raw:f.map(m=>m.raw).join(`\n`)})}o.push({type:\"list_item\",raw:s.raw,tokens:c}),i=u}else i+=1}return o}function J0(t,e){return t.map(n=>{if(n.type!==\"list_item\")return e.parseChildren([n])[0];let r=[];return n.tokens&&n.tokens.length>0&&n.tokens.forEach(o=>{if(o.type===\"paragraph\"||o.type===\"list\"||o.type===\"blockquote\"||o.type===\"code\")r.push(...e.parseChildren([o]));else if(o.type===\"text\"&&o.tokens){let i=e.parseChildren([o]);r.push({type:\"paragraph\",content:i})}else{let i=e.parseChildren([o]);i.length>0&&r.push(...i)}}),{type:\"listItem\",content:r}})}var G0=\"listItem\",bf=\"textStyle\",wf=/^(\\d+)\\.\\s$/,_l=F.create({name:\"orderedList\",addOptions(){return{itemTypeName:\"listItem\",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:\"block list\",content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:t=>t.hasAttribute(\"start\")?parseInt(t.getAttribute(\"start\")||\"\",10):1},type:{default:null,parseHTML:t=>t.getAttribute(\"type\")}}},parseHTML(){return[{tag:\"ol\"}]},renderHTML({HTMLAttributes:t}){let{start:e,...n}=t;return e===1?[\"ol\",R(this.options.HTMLAttributes,n),0]:[\"ol\",R(this.options.HTMLAttributes,t),0]},markdownTokenName:\"list\",parseMarkdown:(t,e)=>{if(t.type!==\"list\"||!t.ordered)return[];let n=t.start||1,r=t.items?J0(t.items,e):[];return n!==1?{type:\"orderedList\",attrs:{start:n},content:r}:{type:\"orderedList\",content:r}},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n`):\"\",markdownTokenizer:{name:\"orderedList\",level:\"block\",start:t=>{let e=t.match(/^(\\s*)(\\d+)\\.\\s+/),n=e?.index;return n!==void 0?n:-1},tokenize:(t,e,n)=>{var r;let o=t.split(`\n`),[i,s]=q0(o);if(i.length===0)return;let l=Mf(i,0,n);return l.length===0?void 0:{type:\"list\",ordered:!0,start:((r=i[0])==null?void 0:r.number)||1,items:l,raw:o.slice(0,s).join(`\n`)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(G0,this.editor.getAttributes(bf)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{\"Mod-Shift-7\":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let t=tt({find:wf,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:(e,n)=>n.childCount+n.attrs.start===+e[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(t=tt({find:wf,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(bf)}),joinPredicate:(e,n)=>n.childCount+n.attrs.start===+e[1],editor:this.editor})),[t]}}),X0=/^\\s*(\\[([( |x])?\\])\\s$/,Y0=F.create({name:\"taskItem\",addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:\"taskList\",a11y:void 0}},content(){return this.options.nested?\"paragraph block*\":\"paragraph+\"},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:t=>{let e=t.getAttribute(\"data-checked\");return e===\"\"||e===\"true\"},renderHTML:t=>({\"data-checked\":t.checked})}}},parseHTML(){return[{tag:`li[data-type=\"${this.name}\"]`,priority:51}]},renderHTML({node:t,HTMLAttributes:e}){return[\"li\",R(this.options.HTMLAttributes,e,{\"data-type\":this.name}),[\"label\",[\"input\",{type:\"checkbox\",checked:t.attrs.checked?\"checked\":null}],[\"span\"]],[\"div\",0]]},parseMarkdown:(t,e)=>{let n=[];if(t.tokens&&t.tokens.length>0?n.push(e.createNode(\"paragraph\",{},e.parseInline(t.tokens))):t.text?n.push(e.createNode(\"paragraph\",{},[e.createNode(\"text\",{text:t.text})])):n.push(e.createNode(\"paragraph\",{},[])),t.nestedTokens&&t.nestedTokens.length>0){let r=e.parseChildren(t.nestedTokens);n.push(...r)}return e.createNode(\"taskItem\",{checked:t.checked||!1},n)},renderMarkdown:(t,e)=>{var n;let o=`- [${(n=t.attrs)!=null&&n.checked?\"x\":\" \"}] `;return cr(t,e,o)},addKeyboardShortcuts(){let t={Enter:()=>this.editor.commands.splitListItem(this.name),\"Shift-Tab\":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...t,Tab:()=>this.editor.commands.sinkListItem(this.name)}:t},addNodeView(){return({node:t,HTMLAttributes:e,getPos:n,editor:r})=>{let o=document.createElement(\"li\"),i=document.createElement(\"label\"),s=document.createElement(\"span\"),l=document.createElement(\"input\"),a=document.createElement(\"div\"),c=d=>{var u,f;l.ariaLabel=((f=(u=this.options.a11y)==null?void 0:u.checkboxLabel)==null?void 0:f.call(u,d,l.checked))||`Task item checkbox for ${d.textContent||\"empty task item\"}`};return c(t),i.contentEditable=\"false\",l.type=\"checkbox\",l.addEventListener(\"mousedown\",d=>d.preventDefault()),l.addEventListener(\"change\",d=>{if(!r.isEditable&&!this.options.onReadOnlyChecked){l.checked=!l.checked;return}let{checked:u}=d.target;r.isEditable&&typeof n==\"function\"&&r.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:f})=>{let h=n();if(typeof h!=\"number\")return!1;let p=f.doc.nodeAt(h);return f.setNodeMarkup(h,void 0,{...p?.attrs,checked:u}),!0}).run(),!r.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(t,u)||(l.checked=!l.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([d,u])=>{o.setAttribute(d,u)}),o.dataset.checked=t.attrs.checked,l.checked=t.attrs.checked,i.append(l,s),o.append(i,a),Object.entries(e).forEach(([d,u])=>{o.setAttribute(d,u)}),{dom:o,contentDOM:a,update:d=>d.type!==this.type?!1:(o.dataset.checked=d.attrs.checked,l.checked=d.attrs.checked,c(d),!0)}}},addInputRules(){return[tt({find:X0,type:this.type,getAttributes:t=>({checked:t[t.length-1]===\"x\"})})]}}),Q0=F.create({name:\"taskList\",addOptions(){return{itemTypeName:\"taskItem\",HTMLAttributes:{}}},group:\"block list\",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type=\"${this.name}\"]`,priority:51}]},renderHTML({HTMLAttributes:t}){return[\"ul\",R(this.options.HTMLAttributes,t,{\"data-type\":this.name}),0]},parseMarkdown:(t,e)=>e.createNode(\"taskList\",{},e.parseChildren(t.items||[])),renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,`\n`):\"\",markdownTokenizer:{name:\"taskList\",level:\"block\",start(t){var e;let n=(e=t.match(/^\\s*[-+*]\\s+\\[([ xX])\\]\\s+/))==null?void 0:e.index;return n!==void 0?n:-1},tokenize(t,e,n){let r=i=>{let s=wo(i,{itemPattern:/^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,extractItemData:l=>({indentLevel:l[1].length,mainContent:l[4],checked:l[3].toLowerCase()===\"x\"}),createToken:(l,a)=>({type:\"taskItem\",raw:\"\",mainContent:l.mainContent,indentLevel:l.indentLevel,checked:l.checked,text:l.mainContent,tokens:n.inlineTokens(l.mainContent),nestedTokens:a}),customNestedParser:r},n);return s?[{type:\"taskList\",raw:s.raw,items:s.items}]:n.blockTokens(i)},o=wo(t,{itemPattern:/^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,extractItemData:i=>({indentLevel:i[1].length,mainContent:i[4],checked:i[3].toLowerCase()===\"x\"}),createToken:(i,s)=>({type:\"taskItem\",raw:\"\",mainContent:i.mainContent,indentLevel:i.indentLevel,checked:i.checked,text:i.mainContent,tokens:n.inlineTokens(i.mainContent),nestedTokens:s}),customNestedParser:r},n);if(o)return{type:\"taskList\",raw:o.raw,items:o.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:t})=>t.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{\"Mod-Shift-9\":()=>this.editor.commands.toggleTaskList()}}}),dv=U.create({name:\"listKit\",addExtensions(){let t=[];return this.options.bulletList!==!1&&t.push($l.configure(this.options.bulletList)),this.options.listItem!==!1&&t.push(Fl.configure(this.options.listItem)),this.options.listKeymap!==!1&&t.push(U0.configure(this.options.listKeymap)),this.options.orderedList!==!1&&t.push(_l.configure(this.options.orderedList)),this.options.taskItem!==!1&&t.push(Y0.configure(this.options.taskItem)),this.options.taskList!==!1&&t.push(Q0.configure(this.options.taskList)),t}});var ii=(t,e,n={})=>{t.dom.closest(\"form\")?.dispatchEvent(new CustomEvent(e,{composed:!0,cancelable:!0,detail:n}))},Tf=({files:t,acceptedTypes:e,acceptedTypesValidationMessage:n,maxSize:r,maxSizeValidationMessage:o})=>{for(let i of t){if(e&&!e.includes(i.type))return n;if(r&&i.size>+r*1024)return o}return null},Z0=({editor:t,acceptedTypes:e,acceptedTypesValidationMessage:n,get$WireUsing:r,key:o,maxSize:i,maxSizeValidationMessage:s,statePath:l,uploadingMessage:a})=>{let c=d=>Livewire.fireAction(r().__instance,\"callSchemaComponentMethod\",[o,\"getUploadedFileAttachmentTemporaryUrl\",{attachment:d}],{async:!0});return new P({key:new H(\"localFiles\"),props:{handleDrop(d,u){if(!u.dataTransfer?.files.length)return!1;let f=Array.from(u.dataTransfer.files),h=Tf({files:f,acceptedTypes:e,acceptedTypesValidationMessage:n,maxSize:i,maxSizeValidationMessage:s});if(h)return d.dom.dispatchEvent(new CustomEvent(\"rich-editor-file-validation-message\",{bubbles:!0,detail:{key:o,livewireId:r().id,validationMessage:h}})),!1;if(!f.length)return!1;ii(d,\"form-processing-started\",{message:a}),u.preventDefault(),u.stopPropagation();let p=d.posAtCoords({left:u.clientX,top:u.clientY});return f.forEach((m,g)=>{t.setEditable(!1),d.dom.dispatchEvent(new CustomEvent(\"rich-editor-uploading-file\",{bubbles:!0,detail:{key:o,livewireId:r().id}}));let y=(\"10000000-1000-4000-8000\"+-1e11).replace(/[018]/g,w=>(w^crypto.getRandomValues(new Uint8Array(1))[0]&15>>w/4).toString(16));r().upload(`componentFileAttachments.${l}.${y}`,m,()=>{c(y).then(w=>{w&&(t.chain().insertContentAt(p?.pos??0,{type:\"image\",attrs:{id:y,src:w}}).run(),t.setEditable(!0),d.dom.dispatchEvent(new CustomEvent(\"rich-editor-uploaded-file\",{bubbles:!0,detail:{key:o,livewireId:r().id}})),g===f.length-1&&ii(d,\"form-processing-finished\"))})})}),!0},handlePaste(d,u){if(!u.clipboardData?.files.length||u.clipboardData?.getData(\"text\").length)return!1;let f=Array.from(u.clipboardData.files),h=Tf({files:f,acceptedTypes:e,acceptedTypesValidationMessage:n,maxSize:i,maxSizeValidationMessage:s});return h?(d.dom.dispatchEvent(new CustomEvent(\"rich-editor-file-validation-message\",{bubbles:!0,detail:{key:o,livewireId:r().id,validationMessage:h}})),!1):f.length?(u.preventDefault(),u.stopPropagation(),ii(d,\"form-processing-started\",{message:a}),f.forEach((p,m)=>{t.setEditable(!1),d.dom.dispatchEvent(new CustomEvent(\"rich-editor-uploading-file\",{bubbles:!0,detail:{key:o,livewireId:r().id}}));let g=(\"10000000-1000-4000-8000\"+-1e11).replace(/[018]/g,y=>(y^crypto.getRandomValues(new Uint8Array(1))[0]&15>>y/4).toString(16));r().upload(`componentFileAttachments.${l}.${g}`,p,()=>{c(g).then(y=>{y&&(t.chain().insertContentAt(t.state.selection.anchor,{type:\"image\",attrs:{id:g,src:y}}).run(),t.setEditable(!0),d.dom.dispatchEvent(new CustomEvent(\"rich-editor-uploaded-file\",{bubbles:!0,detail:{key:o,livewireId:r().id}})),m===f.length-1&&ii(d,\"form-processing-finished\"))})})}),!0):!1}}})},Af=U.create({name:\"localFiles\",addOptions(){return{acceptedTypes:[],acceptedTypesValidationMessage:null,key:null,maxSize:null,maxSizeValidationMessage:null,statePath:null,uploadingMessage:null,get$WireUsing:null}},addProseMirrorPlugins(){return[Z0({editor:this.editor,...this.options})]}});function ew(t){var e;let{char:n,allowSpaces:r,allowToIncludeChar:o,allowedPrefixes:i,startOfLine:s,$position:l}=t,a=r&&!o,c=wu(n),d=new RegExp(`\\\\s${c}$`),u=s?\"^\":\"\",f=o?\"\":c,h=a?new RegExp(`${u}${c}.*?(?=\\\\s${f}|$)`,\"gm\"):new RegExp(`${u}(?:^)?${c}[^\\\\s${f}]*`,\"gm\"),p=((e=l.nodeBefore)==null?void 0:e.isText)&&l.nodeBefore.text;if(!p)return null;let m=l.pos-p.length,g=Array.from(p.matchAll(h)).pop();if(!g||g.input===void 0||g.index===void 0)return null;let y=g.input.slice(Math.max(0,g.index-1),g.index),w=new RegExp(`^[${i?.join(\"\")}\\0]?$`).test(y);if(i!==null&&!w)return null;let b=m+g.index,C=b+g[0].length;return a&&d.test(p.slice(C-1,C+1))&&(g[0]+=\" \",C+=1),b<l.pos&&C>=l.pos?{range:{from:b,to:C},query:g[0].slice(n.length),text:g[0]}:null}var tw=new H(\"suggestion\");function nw({pluginKey:t=tw,editor:e,char:n=\"@\",allowSpaces:r=!1,allowToIncludeChar:o=!1,allowedPrefixes:i=[\" \"],startOfLine:s=!1,decorationTag:l=\"span\",decorationClass:a=\"suggestion\",decorationContent:c=\"\",decorationEmptyClass:d=\"is-empty\",command:u=()=>null,items:f=()=>[],render:h=()=>({}),allow:p=()=>!0,findSuggestionMatch:m=ew}){let g,y=h?.(),w=()=>{let S=e.state.selection.$anchor.pos,k=e.view.coordsAtPos(S),{top:O,right:T,bottom:A,left:$}=k;try{return new DOMRect($,O,T-$,A-O)}catch{return null}},b=(S,k)=>k?()=>{let O=t.getState(e.state),T=O?.decorationId,A=S.dom.querySelector(`[data-decoration-id=\"${T}\"]`);return A?.getBoundingClientRect()||null}:w;function C(S,k){var O;try{let A=t.getState(S.state),$=A?.decorationId?S.dom.querySelector(`[data-decoration-id=\"${A.decorationId}\"]`):null,z={editor:e,range:A?.range||{from:0,to:0},query:A?.query||null,text:A?.text||null,items:[],command:K=>u({editor:e,range:A?.range||{from:0,to:0},props:K}),decorationNode:$,clientRect:b(S,$)};(O=y?.onExit)==null||O.call(y,z)}catch{}let T=S.state.tr.setMeta(k,{exit:!0});S.dispatch(T)}let x=new P({key:t,view(){return{update:async(S,k)=>{var O,T,A,$,z,K,V;let N=(O=this.key)==null?void 0:O.getState(k),_=(T=this.key)==null?void 0:T.getState(S.state),W=N.active&&_.active&&N.range.from!==_.range.from,Q=!N.active&&_.active,me=N.active&&!_.active,Ge=!Q&&!me&&N.query!==_.query,q=Q||W&&Ge,We=Ge||W,je=me||W&&Ge;if(!q&&!We&&!je)return;let dn=je&&!q?N:_,aa=S.dom.querySelector(`[data-decoration-id=\"${dn.decorationId}\"]`);g={editor:e,range:dn.range,query:dn.query,text:dn.text,items:[],command:ip=>u({editor:e,range:dn.range,props:ip}),decorationNode:aa,clientRect:b(S,aa)},q&&((A=y?.onBeforeStart)==null||A.call(y,g)),We&&(($=y?.onBeforeUpdate)==null||$.call(y,g)),(We||q)&&(g.items=await f({editor:e,query:dn.query})),je&&((z=y?.onExit)==null||z.call(y,g)),We&&((K=y?.onUpdate)==null||K.call(y,g)),q&&((V=y?.onStart)==null||V.call(y,g))},destroy:()=>{var S;g&&((S=y?.onExit)==null||S.call(y,g))}}},state:{init(){return{active:!1,range:{from:0,to:0},query:null,text:null,composing:!1}},apply(S,k,O,T){let{isEditable:A}=e,{composing:$}=e.view,{selection:z}=S,{empty:K,from:V}=z,N={...k},_=S.getMeta(t);if(_&&_.exit)return N.active=!1,N.decorationId=null,N.range={from:0,to:0},N.query=null,N.text=null,N;if(N.composing=$,A&&(K||e.view.composing)){(V<k.range.from||V>k.range.to)&&!$&&!k.composing&&(N.active=!1);let W=m({char:n,allowSpaces:r,allowToIncludeChar:o,allowedPrefixes:i,startOfLine:s,$position:z.$from}),Q=`id_${Math.floor(Math.random()*4294967295)}`;W&&p({editor:e,state:T,range:W.range,isActive:k.active})?(N.active=!0,N.decorationId=k.decorationId?k.decorationId:Q,N.range=W.range,N.query=W.query,N.text=W.text):N.active=!1}else N.active=!1;return N.active||(N.decorationId=null,N.range={from:0,to:0},N.query=null,N.text=null),N}},props:{handleKeyDown(S,k){var O,T,A,$;let{active:z,range:K}=x.getState(S.state);if(!z)return!1;if(k.key===\"Escape\"||k.key===\"Esc\"){let N=x.getState(S.state),_=(O=g?.decorationNode)!=null?O:null,W=_??(N?.decorationId?S.dom.querySelector(`[data-decoration-id=\"${N.decorationId}\"]`):null);if(((T=y?.onKeyDown)==null?void 0:T.call(y,{view:S,event:k,range:N.range}))||!1)return!0;let me={editor:e,range:N.range,query:N.query,text:N.text,items:[],command:Ge=>u({editor:e,range:N.range,props:Ge}),decorationNode:W,clientRect:W?()=>W.getBoundingClientRect()||null:null};return(A=y?.onExit)==null||A.call(y,me),C(S,t),!0}return(($=y?.onKeyDown)==null?void 0:$.call(y,{view:S,event:k,range:K}))||!1},decorations(S){let{active:k,range:O,decorationId:T,query:A}=x.getState(S);if(!k)return null;let $=!A?.length,z=[a];return $&&z.push(d),Y.create(S.doc,[te.inline(O.from,O.to,{nodeName:l,class:z.join(\" \"),\"data-decoration-id\":T,\"data-decoration-content\":c})])}}});return x}var si=nw;var rw=function({editor:t,overrideSuggestionOptions:e,extensionName:n}){let r=new H;return{editor:t,char:\"{{\",pluginKey:r,command:({editor:o,range:i,props:s})=>{o.view.state.selection.$to.nodeAfter?.text?.startsWith(\" \")&&(i.to+=1),o.chain().focus().insertContentAt(i,[{type:n,attrs:{...s}},{type:\"text\",text:\" \"}]).run(),o.view.dom.ownerDocument.defaultView?.getSelection()?.collapseToEnd()},allow:({state:o,range:i})=>{let s=o.doc.resolve(i.from),l=o.schema.nodes[n];return!!s.parent.type.contentMatch.matchType(l)},...e}},Ef=F.create({name:\"mergeTag\",priority:101,addStorage(){return{mergeTags:[],suggestions:[],getSuggestionFromChar:()=>null}},addOptions(){return{HTMLAttributes:{},renderText({node:t}){return`{{ ${this.mergeTags[t.attrs.id]} }}`},deleteTriggerWithBackspace:!1,renderHTML({options:t,node:e}){return[\"span\",R(this.HTMLAttributes,t.HTMLAttributes),`${this.mergeTags[e.attrs.id]}`]},suggestions:[],suggestion:{}}},group:\"inline\",inline:!0,selectable:!1,atom:!0,addAttributes(){return{id:{default:null,parseHTML:t=>t.getAttribute(\"data-id\"),renderHTML:t=>t.id?{\"data-id\":t.id}:{}}}},parseHTML(){return[{tag:`span[data-type=\"${this.name}\"]`}]},renderHTML({node:t,HTMLAttributes:e}){let n=this.editor?.extensionStorage?.[this.name]?.getSuggestionFromChar(\"{{\"),r={...this.options};r.HTMLAttributes=R({\"data-type\":this.name},this.options.HTMLAttributes,e);let o=this.options.renderHTML({options:r,node:t,suggestion:n});return typeof o==\"string\"?[\"span\",R({\"data-type\":this.name},this.options.HTMLAttributes,e),o]:o},renderText({node:t}){let e={options:this.options,node:t,suggestion:this.editor?.extensionStorage?.[this.name]?.getSuggestionFromChar(\"{{\")};return this.options.renderText(e)},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:t,state:e})=>{let n=!1,{selection:r}=e,{empty:o,anchor:i}=r;if(!o)return!1;let s=new ie,l=0;return e.doc.nodesBetween(i-1,i,(a,c)=>{if(a.type.name===this.name)return n=!0,s=a,l=c,!1}),n&&t.insertText(this.options.deleteTriggerWithBackspace?\"\":\"{{\",l,l+s.nodeSize),n})}},addProseMirrorPlugins(){return[...this.storage.suggestions.map(si),new P({props:{handleDrop(t,e){if(!e||(e.preventDefault(),!e.dataTransfer.getData(\"mergeTag\")))return!1;let n=e.dataTransfer.getData(\"mergeTag\");return t.dispatch(t.state.tr.insert(t.posAtCoords({left:e.clientX,top:e.clientY}).pos,t.state.schema.nodes.mergeTag.create({id:n}))),!1}}})]},onBeforeCreate(){this.storage.suggestions=(this.options.suggestions.length?this.options.suggestions:[this.options.suggestion]).map(t=>rw({editor:this.editor,overrideSuggestionOptions:t,extensionName:this.name})),this.storage.getSuggestionFromChar=t=>{let e=this.storage.suggestions.find(n=>n.char===t);return e||(this.storage.suggestions.length?this.storage.suggestions[0]:null)}}});var Wl=[\"top\",\"right\",\"bottom\",\"left\"],Nf=[\"start\",\"end\"],jl=Wl.reduce((t,e)=>t.concat(e,e+\"-\"+Nf[0],e+\"-\"+Nf[1]),[]),$e=Math.min,pe=Math.max,Cr=Math.round;var Ue=t=>({x:t,y:t}),ow={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},iw={start:\"end\",end:\"start\"};function li(t,e,n){return pe(t,$e(e,n))}function st(t,e){return typeof t==\"function\"?t(e):t}function Ne(t){return t.split(\"-\")[0]}function Fe(t){return t.split(\"-\")[1]}function Ul(t){return t===\"x\"?\"y\":\"x\"}function ai(t){return t===\"y\"?\"height\":\"width\"}var sw=new Set([\"top\",\"bottom\"]);function Ke(t){return sw.has(Ne(t))?\"y\":\"x\"}function ci(t){return Ul(Ke(t))}function Kl(t,e,n){n===void 0&&(n=!1);let r=Fe(t),o=ci(t),i=ai(o),s=o===\"x\"?r===(n?\"end\":\"start\")?\"right\":\"left\":r===\"start\"?\"bottom\":\"top\";return e.reference[i]>e.floating[i]&&(s=Sr(s)),[s,Sr(s)]}function Df(t){let e=Sr(t);return[kr(t),e,kr(e)]}function kr(t){return t.replace(/start|end/g,e=>iw[e])}var Of=[\"left\",\"right\"],Rf=[\"right\",\"left\"],lw=[\"top\",\"bottom\"],aw=[\"bottom\",\"top\"];function cw(t,e,n){switch(t){case\"top\":case\"bottom\":return n?e?Rf:Of:e?Of:Rf;case\"left\":case\"right\":return e?lw:aw;default:return[]}}function If(t,e,n,r){let o=Fe(t),i=cw(Ne(t),n===\"start\",r);return o&&(i=i.map(s=>s+\"-\"+o),e&&(i=i.concat(i.map(kr)))),i}function Sr(t){return t.replace(/left|right|bottom|top/g,e=>ow[e])}function dw(t){return{top:0,right:0,bottom:0,left:0,...t}}function di(t){return typeof t!=\"number\"?dw(t):{top:t,right:t,bottom:t,left:t}}function Ct(t){let{x:e,y:n,width:r,height:o}=t;return{width:r,height:o,top:n,left:e,right:e+r,bottom:n+o,x:e,y:n}}function Pf(t,e,n){let{reference:r,floating:o}=t,i=Ke(e),s=ci(e),l=ai(s),a=Ne(e),c=i===\"y\",d=r.x+r.width/2-o.width/2,u=r.y+r.height/2-o.height/2,f=r[l]/2-o[l]/2,h;switch(a){case\"top\":h={x:d,y:r.y-o.height};break;case\"bottom\":h={x:d,y:r.y+r.height};break;case\"right\":h={x:r.x+r.width,y:u};break;case\"left\":h={x:r.x-o.width,y:u};break;default:h={x:r.x,y:r.y}}switch(Fe(e)){case\"start\":h[s]-=f*(n&&c?-1:1);break;case\"end\":h[s]+=f*(n&&c?-1:1);break}return h}var zf=async(t,e,n)=>{let{placement:r=\"bottom\",strategy:o=\"absolute\",middleware:i=[],platform:s}=n,l=i.filter(Boolean),a=await(s.isRTL==null?void 0:s.isRTL(e)),c=await s.getElementRects({reference:t,floating:e,strategy:o}),{x:d,y:u}=Pf(c,r,a),f=r,h={},p=0;for(let m=0;m<l.length;m++){let{name:g,fn:y}=l[m],{x:w,y:b,data:C,reset:x}=await y({x:d,y:u,initialPlacement:r,placement:f,strategy:o,middlewareData:h,rects:c,platform:s,elements:{reference:t,floating:e}});d=w??d,u=b??u,h={...h,[g]:{...h[g],...C}},x&&p<=50&&(p++,typeof x==\"object\"&&(x.placement&&(f=x.placement),x.rects&&(c=x.rects===!0?await s.getElementRects({reference:t,floating:e,strategy:o}):x.rects),{x:d,y:u}=Pf(c,f,a)),m=-1)}return{x:d,y:u,placement:f,strategy:o,middlewareData:h}};async function on(t,e){var n;e===void 0&&(e={});let{x:r,y:o,platform:i,rects:s,elements:l,strategy:a}=t,{boundary:c=\"clippingAncestors\",rootBoundary:d=\"viewport\",elementContext:u=\"floating\",altBoundary:f=!1,padding:h=0}=st(e,t),p=di(h),g=l[f?u===\"floating\"?\"reference\":\"floating\":u],y=Ct(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(g)))==null||n?g:g.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(l.floating)),boundary:c,rootBoundary:d,strategy:a})),w=u===\"floating\"?{x:r,y:o,width:s.floating.width,height:s.floating.height}:s.reference,b=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l.floating)),C=await(i.isElement==null?void 0:i.isElement(b))?await(i.getScale==null?void 0:i.getScale(b))||{x:1,y:1}:{x:1,y:1},x=Ct(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:w,offsetParent:b,strategy:a}):w);return{top:(y.top-x.top+p.top)/C.y,bottom:(x.bottom-y.bottom+p.bottom)/C.y,left:(y.left-x.left+p.left)/C.x,right:(x.right-y.right+p.right)/C.x}}var Hf=t=>({name:\"arrow\",options:t,async fn(e){let{x:n,y:r,placement:o,rects:i,platform:s,elements:l,middlewareData:a}=e,{element:c,padding:d=0}=st(t,e)||{};if(c==null)return{};let u=di(d),f={x:n,y:r},h=ci(o),p=ai(h),m=await s.getDimensions(c),g=h===\"y\",y=g?\"top\":\"left\",w=g?\"bottom\":\"right\",b=g?\"clientHeight\":\"clientWidth\",C=i.reference[p]+i.reference[h]-f[h]-i.floating[p],x=f[h]-i.reference[h],S=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c)),k=S?S[b]:0;(!k||!await(s.isElement==null?void 0:s.isElement(S)))&&(k=l.floating[b]||i.floating[p]);let O=C/2-x/2,T=k/2-m[p]/2-1,A=$e(u[y],T),$=$e(u[w],T),z=A,K=k-m[p]-$,V=k/2-m[p]/2+O,N=li(z,V,K),_=!a.arrow&&Fe(o)!=null&&V!==N&&i.reference[p]/2-(V<z?A:$)-m[p]/2<0,W=_?V<z?V-z:V-K:0;return{[h]:f[h]+W,data:{[h]:N,centerOffset:V-N-W,..._&&{alignmentOffset:W}},reset:_}}});function uw(t,e,n){return(t?[...n.filter(o=>Fe(o)===t),...n.filter(o=>Fe(o)!==t)]:n.filter(o=>Ne(o)===o)).filter(o=>t?Fe(o)===t||(e?kr(o)!==o:!1):!0)}var $f=function(t){return t===void 0&&(t={}),{name:\"autoPlacement\",options:t,async fn(e){var n,r,o;let{rects:i,middlewareData:s,placement:l,platform:a,elements:c}=e,{crossAxis:d=!1,alignment:u,allowedPlacements:f=jl,autoAlignment:h=!0,...p}=st(t,e),m=u!==void 0||f===jl?uw(u||null,h,f):f,g=await on(e,p),y=((n=s.autoPlacement)==null?void 0:n.index)||0,w=m[y];if(w==null)return{};let b=Kl(w,i,await(a.isRTL==null?void 0:a.isRTL(c.floating)));if(l!==w)return{reset:{placement:m[0]}};let C=[g[Ne(w)],g[b[0]],g[b[1]]],x=[...((r=s.autoPlacement)==null?void 0:r.overflows)||[],{placement:w,overflows:C}],S=m[y+1];if(S)return{data:{index:y+1,overflows:x},reset:{placement:S}};let k=x.map(A=>{let $=Fe(A.placement);return[A.placement,$&&d?A.overflows.slice(0,2).reduce((z,K)=>z+K,0):A.overflows[0],A.overflows]}).sort((A,$)=>A[1]-$[1]),T=((o=k.filter(A=>A[2].slice(0,Fe(A[0])?2:3).every($=>$<=0))[0])==null?void 0:o[0])||k[0][0];return T!==l?{data:{index:y+1,overflows:x},reset:{placement:T}}:{}}}},Ff=function(t){return t===void 0&&(t={}),{name:\"flip\",options:t,async fn(e){var n,r;let{placement:o,middlewareData:i,rects:s,initialPlacement:l,platform:a,elements:c}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:f,fallbackStrategy:h=\"bestFit\",fallbackAxisSideDirection:p=\"none\",flipAlignment:m=!0,...g}=st(t,e);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let y=Ne(o),w=Ke(l),b=Ne(l)===l,C=await(a.isRTL==null?void 0:a.isRTL(c.floating)),x=f||(b||!m?[Sr(l)]:Df(l)),S=p!==\"none\";!f&&S&&x.push(...If(l,m,p,C));let k=[l,...x],O=await on(e,g),T=[],A=((r=i.flip)==null?void 0:r.overflows)||[];if(d&&T.push(O[y]),u){let V=Kl(o,s,C);T.push(O[V[0]],O[V[1]])}if(A=[...A,{placement:o,overflows:T}],!T.every(V=>V<=0)){var $,z;let V=((($=i.flip)==null?void 0:$.index)||0)+1,N=k[V];if(N&&(!(u===\"alignment\"?w!==Ke(N):!1)||A.every(Q=>Ke(Q.placement)===w?Q.overflows[0]>0:!0)))return{data:{index:V,overflows:A},reset:{placement:N}};let _=(z=A.filter(W=>W.overflows[0]<=0).sort((W,Q)=>W.overflows[1]-Q.overflows[1])[0])==null?void 0:z.placement;if(!_)switch(h){case\"bestFit\":{var K;let W=(K=A.filter(Q=>{if(S){let me=Ke(Q.placement);return me===w||me===\"y\"}return!0}).map(Q=>[Q.placement,Q.overflows.filter(me=>me>0).reduce((me,Ge)=>me+Ge,0)]).sort((Q,me)=>Q[1]-me[1])[0])==null?void 0:K[0];W&&(_=W);break}case\"initialPlacement\":_=l;break}if(o!==_)return{reset:{placement:_}}}return{}}}};function Lf(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function Bf(t){return Wl.some(e=>t[e]>=0)}var Vf=function(t){return t===void 0&&(t={}),{name:\"hide\",options:t,async fn(e){let{rects:n}=e,{strategy:r=\"referenceHidden\",...o}=st(t,e);switch(r){case\"referenceHidden\":{let i=await on(e,{...o,elementContext:\"reference\"}),s=Lf(i,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:Bf(s)}}}case\"escaped\":{let i=await on(e,{...o,altBoundary:!0}),s=Lf(i,n.floating);return{data:{escapedOffsets:s,escaped:Bf(s)}}}default:return{}}}}};function _f(t){let e=$e(...t.map(i=>i.left)),n=$e(...t.map(i=>i.top)),r=pe(...t.map(i=>i.right)),o=pe(...t.map(i=>i.bottom));return{x:e,y:n,width:r-e,height:o-n}}function fw(t){let e=t.slice().sort((o,i)=>o.y-i.y),n=[],r=null;for(let o=0;o<e.length;o++){let i=e[o];!r||i.y-r.y>r.height/2?n.push([i]):n[n.length-1].push(i),r=i}return n.map(o=>Ct(_f(o)))}var Wf=function(t){return t===void 0&&(t={}),{name:\"inline\",options:t,async fn(e){let{placement:n,elements:r,rects:o,platform:i,strategy:s}=e,{padding:l=2,x:a,y:c}=st(t,e),d=Array.from(await(i.getClientRects==null?void 0:i.getClientRects(r.reference))||[]),u=fw(d),f=Ct(_f(d)),h=di(l);function p(){if(u.length===2&&u[0].left>u[1].right&&a!=null&&c!=null)return u.find(g=>a>g.left-h.left&&a<g.right+h.right&&c>g.top-h.top&&c<g.bottom+h.bottom)||f;if(u.length>=2){if(Ke(n)===\"y\"){let A=u[0],$=u[u.length-1],z=Ne(n)===\"top\",K=A.top,V=$.bottom,N=z?A.left:$.left,_=z?A.right:$.right,W=_-N,Q=V-K;return{top:K,bottom:V,left:N,right:_,width:W,height:Q,x:N,y:K}}let g=Ne(n)===\"left\",y=pe(...u.map(A=>A.right)),w=$e(...u.map(A=>A.left)),b=u.filter(A=>g?A.left===w:A.right===y),C=b[0].top,x=b[b.length-1].bottom,S=w,k=y,O=k-S,T=x-C;return{top:C,bottom:x,left:S,right:k,width:O,height:T,x:S,y:C}}return f}let m=await i.getElementRects({reference:{getBoundingClientRect:p},floating:r.floating,strategy:s});return o.reference.x!==m.reference.x||o.reference.y!==m.reference.y||o.reference.width!==m.reference.width||o.reference.height!==m.reference.height?{reset:{rects:m}}:{}}}},hw=new Set([\"left\",\"top\"]);async function pw(t,e){let{placement:n,platform:r,elements:o}=t,i=await(r.isRTL==null?void 0:r.isRTL(o.floating)),s=Ne(n),l=Fe(n),a=Ke(n)===\"y\",c=hw.has(s)?-1:1,d=i&&a?-1:1,u=st(e,t),{mainAxis:f,crossAxis:h,alignmentAxis:p}=typeof u==\"number\"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return l&&typeof p==\"number\"&&(h=l===\"end\"?p*-1:p),a?{x:h*d,y:f*c}:{x:f*c,y:h*d}}var jf=function(t){return t===void 0&&(t=0),{name:\"offset\",options:t,async fn(e){var n,r;let{x:o,y:i,placement:s,middlewareData:l}=e,a=await pw(e,t);return s===((n=l.offset)==null?void 0:n.placement)&&(r=l.arrow)!=null&&r.alignmentOffset?{}:{x:o+a.x,y:i+a.y,data:{...a,placement:s}}}}},Uf=function(t){return t===void 0&&(t={}),{name:\"shift\",options:t,async fn(e){let{x:n,y:r,placement:o}=e,{mainAxis:i=!0,crossAxis:s=!1,limiter:l={fn:g=>{let{x:y,y:w}=g;return{x:y,y:w}}},...a}=st(t,e),c={x:n,y:r},d=await on(e,a),u=Ke(Ne(o)),f=Ul(u),h=c[f],p=c[u];if(i){let g=f===\"y\"?\"top\":\"left\",y=f===\"y\"?\"bottom\":\"right\",w=h+d[g],b=h-d[y];h=li(w,h,b)}if(s){let g=u===\"y\"?\"top\":\"left\",y=u===\"y\"?\"bottom\":\"right\",w=p+d[g],b=p-d[y];p=li(w,p,b)}let m=l.fn({...e,[f]:h,[u]:p});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[f]:i,[u]:s}}}}}};var Kf=function(t){return t===void 0&&(t={}),{name:\"size\",options:t,async fn(e){var n,r;let{placement:o,rects:i,platform:s,elements:l}=e,{apply:a=()=>{},...c}=st(t,e),d=await on(e,c),u=Ne(o),f=Fe(o),h=Ke(o)===\"y\",{width:p,height:m}=i.floating,g,y;u===\"top\"||u===\"bottom\"?(g=u,y=f===(await(s.isRTL==null?void 0:s.isRTL(l.floating))?\"start\":\"end\")?\"left\":\"right\"):(y=u,g=f===\"end\"?\"top\":\"bottom\");let w=m-d.top-d.bottom,b=p-d.left-d.right,C=$e(m-d[g],w),x=$e(p-d[y],b),S=!e.middlewareData.shift,k=C,O=x;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(O=b),(r=e.middlewareData.shift)!=null&&r.enabled.y&&(k=w),S&&!f){let A=pe(d.left,0),$=pe(d.right,0),z=pe(d.top,0),K=pe(d.bottom,0);h?O=p-2*(A!==0||$!==0?A+$:pe(d.left,d.right)):k=m-2*(z!==0||K!==0?z+K:pe(d.top,d.bottom))}await a({...e,availableWidth:O,availableHeight:k});let T=await s.getDimensions(l.floating);return p!==T.width||m!==T.height?{reset:{rects:!0}}:{}}}};function fi(){return typeof window<\"u\"}function sn(t){return Jf(t)?(t.nodeName||\"\").toLowerCase():\"#document\"}function Ae(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function lt(t){var e;return(e=(Jf(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Jf(t){return fi()?t instanceof Node||t instanceof Ae(t).Node:!1}function Ve(t){return fi()?t instanceof Element||t instanceof Ae(t).Element:!1}function qe(t){return fi()?t instanceof HTMLElement||t instanceof Ae(t).HTMLElement:!1}function qf(t){return!fi()||typeof ShadowRoot>\"u\"?!1:t instanceof ShadowRoot||t instanceof Ae(t).ShadowRoot}var mw=new Set([\"inline\",\"contents\"]);function Rn(t){let{overflow:e,overflowX:n,overflowY:r,display:o}=_e(t);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!mw.has(o)}var gw=new Set([\"table\",\"td\",\"th\"]);function Gf(t){return gw.has(sn(t))}var yw=[\":popover-open\",\":modal\"];function vr(t){return yw.some(e=>{try{return t.matches(e)}catch{return!1}})}var bw=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],ww=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],xw=[\"paint\",\"layout\",\"strict\",\"content\"];function hi(t){let e=pi(),n=Ve(t)?_e(t):t;return bw.some(r=>n[r]?n[r]!==\"none\":!1)||(n.containerType?n.containerType!==\"normal\":!1)||!e&&(n.backdropFilter?n.backdropFilter!==\"none\":!1)||!e&&(n.filter?n.filter!==\"none\":!1)||ww.some(r=>(n.willChange||\"\").includes(r))||xw.some(r=>(n.contain||\"\").includes(r))}function Xf(t){let e=vt(t);for(;qe(e)&&!ln(e);){if(hi(e))return e;if(vr(e))return null;e=vt(e)}return null}function pi(){return typeof CSS>\"u\"||!CSS.supports?!1:CSS.supports(\"-webkit-backdrop-filter\",\"none\")}var kw=new Set([\"html\",\"body\",\"#document\"]);function ln(t){return kw.has(sn(t))}function _e(t){return Ae(t).getComputedStyle(t)}function Mr(t){return Ve(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function vt(t){if(sn(t)===\"html\")return t;let e=t.assignedSlot||t.parentNode||qf(t)&&t.host||lt(t);return qf(e)?e.host:e}function Yf(t){let e=vt(t);return ln(e)?t.ownerDocument?t.ownerDocument.body:t.body:qe(e)&&Rn(e)?e:Yf(e)}function ui(t,e,n){var r;e===void 0&&(e=[]),n===void 0&&(n=!0);let o=Yf(t),i=o===((r=t.ownerDocument)==null?void 0:r.body),s=Ae(o);if(i){let l=mi(s);return e.concat(s,s.visualViewport||[],Rn(o)?o:[],l&&n?ui(l):[])}return e.concat(o,ui(o,[],n))}function mi(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function th(t){let e=_e(t),n=parseFloat(e.width)||0,r=parseFloat(e.height)||0,o=qe(t),i=o?t.offsetWidth:n,s=o?t.offsetHeight:r,l=Cr(n)!==i||Cr(r)!==s;return l&&(n=i,r=s),{width:n,height:r,$:l}}function nh(t){return Ve(t)?t:t.contextElement}function Dn(t){let e=nh(t);if(!qe(e))return Ue(1);let n=e.getBoundingClientRect(),{width:r,height:o,$:i}=th(e),s=(i?Cr(n.width):n.width)/r,l=(i?Cr(n.height):n.height)/o;return(!s||!Number.isFinite(s))&&(s=1),(!l||!Number.isFinite(l))&&(l=1),{x:s,y:l}}var Sw=Ue(0);function rh(t){let e=Ae(t);return!pi()||!e.visualViewport?Sw:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Cw(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==Ae(t)?!1:e}function Tr(t,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);let o=t.getBoundingClientRect(),i=nh(t),s=Ue(1);e&&(r?Ve(r)&&(s=Dn(r)):s=Dn(t));let l=Cw(i,n,r)?rh(i):Ue(0),a=(o.left+l.x)/s.x,c=(o.top+l.y)/s.y,d=o.width/s.x,u=o.height/s.y;if(i){let f=Ae(i),h=r&&Ve(r)?Ae(r):r,p=f,m=mi(p);for(;m&&r&&h!==p;){let g=Dn(m),y=m.getBoundingClientRect(),w=_e(m),b=y.left+(m.clientLeft+parseFloat(w.paddingLeft))*g.x,C=y.top+(m.clientTop+parseFloat(w.paddingTop))*g.y;a*=g.x,c*=g.y,d*=g.x,u*=g.y,a+=b,c+=C,p=Ae(m),m=mi(p)}}return Ct({width:d,height:u,x:a,y:c})}function gi(t,e){let n=Mr(t).scrollLeft;return e?e.left+n:Tr(lt(t)).left+n}function oh(t,e){let n=t.getBoundingClientRect(),r=n.left+e.scrollLeft-gi(t,n),o=n.top+e.scrollTop;return{x:r,y:o}}function vw(t){let{elements:e,rect:n,offsetParent:r,strategy:o}=t,i=o===\"fixed\",s=lt(r),l=e?vr(e.floating):!1;if(r===s||l&&i)return n;let a={scrollLeft:0,scrollTop:0},c=Ue(1),d=Ue(0),u=qe(r);if((u||!u&&!i)&&((sn(r)!==\"body\"||Rn(s))&&(a=Mr(r)),qe(r))){let h=Tr(r);c=Dn(r),d.x=h.x+r.clientLeft,d.y=h.y+r.clientTop}let f=s&&!u&&!i?oh(s,a):Ue(0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-a.scrollLeft*c.x+d.x+f.x,y:n.y*c.y-a.scrollTop*c.y+d.y+f.y}}function Mw(t){return Array.from(t.getClientRects())}function Tw(t){let e=lt(t),n=Mr(t),r=t.ownerDocument.body,o=pe(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),i=pe(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight),s=-n.scrollLeft+gi(t),l=-n.scrollTop;return _e(r).direction===\"rtl\"&&(s+=pe(e.clientWidth,r.clientWidth)-o),{width:o,height:i,x:s,y:l}}var Qf=25;function Aw(t,e){let n=Ae(t),r=lt(t),o=n.visualViewport,i=r.clientWidth,s=r.clientHeight,l=0,a=0;if(o){i=o.width,s=o.height;let d=pi();(!d||d&&e===\"fixed\")&&(l=o.offsetLeft,a=o.offsetTop)}let c=gi(r);if(c<=0){let d=r.ownerDocument,u=d.body,f=getComputedStyle(u),h=d.compatMode===\"CSS1Compat\"&&parseFloat(f.marginLeft)+parseFloat(f.marginRight)||0,p=Math.abs(r.clientWidth-u.clientWidth-h);p<=Qf&&(i-=p)}else c<=Qf&&(i+=c);return{width:i,height:s,x:l,y:a}}var Ew=new Set([\"absolute\",\"fixed\"]);function Nw(t,e){let n=Tr(t,!0,e===\"fixed\"),r=n.top+t.clientTop,o=n.left+t.clientLeft,i=qe(t)?Dn(t):Ue(1),s=t.clientWidth*i.x,l=t.clientHeight*i.y,a=o*i.x,c=r*i.y;return{width:s,height:l,x:a,y:c}}function Zf(t,e,n){let r;if(e===\"viewport\")r=Aw(t,n);else if(e===\"document\")r=Tw(lt(t));else if(Ve(e))r=Nw(e,n);else{let o=rh(t);r={x:e.x-o.x,y:e.y-o.y,width:e.width,height:e.height}}return Ct(r)}function ih(t,e){let n=vt(t);return n===e||!Ve(n)||ln(n)?!1:_e(n).position===\"fixed\"||ih(n,e)}function Ow(t,e){let n=e.get(t);if(n)return n;let r=ui(t,[],!1).filter(l=>Ve(l)&&sn(l)!==\"body\"),o=null,i=_e(t).position===\"fixed\",s=i?vt(t):t;for(;Ve(s)&&!ln(s);){let l=_e(s),a=hi(s);!a&&l.position===\"fixed\"&&(o=null),(i?!a&&!o:!a&&l.position===\"static\"&&!!o&&Ew.has(o.position)||Rn(s)&&!a&&ih(t,s))?r=r.filter(d=>d!==s):o=l,s=vt(s)}return e.set(t,r),r}function Rw(t){let{element:e,boundary:n,rootBoundary:r,strategy:o}=t,s=[...n===\"clippingAncestors\"?vr(e)?[]:Ow(e,this._c):[].concat(n),r],l=s[0],a=s.reduce((c,d)=>{let u=Zf(e,d,o);return c.top=pe(u.top,c.top),c.right=$e(u.right,c.right),c.bottom=$e(u.bottom,c.bottom),c.left=pe(u.left,c.left),c},Zf(e,l,o));return{width:a.right-a.left,height:a.bottom-a.top,x:a.left,y:a.top}}function Dw(t){let{width:e,height:n}=th(t);return{width:e,height:n}}function Iw(t,e,n){let r=qe(e),o=lt(e),i=n===\"fixed\",s=Tr(t,!0,i,e),l={scrollLeft:0,scrollTop:0},a=Ue(0);function c(){a.x=gi(o)}if(r||!r&&!i)if((sn(e)!==\"body\"||Rn(o))&&(l=Mr(e)),r){let h=Tr(e,!0,i,e);a.x=h.x+e.clientLeft,a.y=h.y+e.clientTop}else o&&c();i&&!r&&o&&c();let d=o&&!r&&!i?oh(o,l):Ue(0),u=s.left+l.scrollLeft-a.x-d.x,f=s.top+l.scrollTop-a.y-d.y;return{x:u,y:f,width:s.width,height:s.height}}function ql(t){return _e(t).position===\"static\"}function eh(t,e){if(!qe(t)||_e(t).position===\"fixed\")return null;if(e)return e(t);let n=t.offsetParent;return lt(t)===n&&(n=n.ownerDocument.body),n}function sh(t,e){let n=Ae(t);if(vr(t))return n;if(!qe(t)){let o=vt(t);for(;o&&!ln(o);){if(Ve(o)&&!ql(o))return o;o=vt(o)}return n}let r=eh(t,e);for(;r&&Gf(r)&&ql(r);)r=eh(r,e);return r&&ln(r)&&ql(r)&&!hi(r)?n:r||Xf(t)||n}var Pw=async function(t){let e=this.getOffsetParent||sh,n=this.getDimensions,r=await n(t.floating);return{reference:Iw(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function Lw(t){return _e(t).direction===\"rtl\"}var Bw={convertOffsetParentRelativeRectToViewportRelativeRect:vw,getDocumentElement:lt,getClippingRect:Rw,getOffsetParent:sh,getElementRects:Pw,getClientRects:Mw,getDimensions:Dw,getScale:Dn,isElement:Ve,isRTL:Lw};var lh=jf,ah=$f,In=Uf,Pn=Ff,ch=Kf,dh=Vf,uh=Hf,fh=Wf;var Ln=(t,e,n)=>{let r=new Map,o={platform:Bw,...n},i={...o.platform,_c:r};return zf(t,e,{...o,platform:i})};var hh=(t,e)=>{Ln({getBoundingClientRect:()=>{let{from:r,to:o}=t.state.selection,i=t.view.coordsAtPos(r),s=t.view.coordsAtPos(o);return{top:Math.min(i.top,s.top),bottom:Math.max(i.bottom,s.bottom),left:Math.min(i.left,s.left),right:Math.max(i.right,s.right),width:Math.abs(s.right-i.left),height:Math.abs(s.bottom-i.top),x:Math.min(i.left,s.left),y:Math.min(i.top,s.top)}}},e,{placement:\"bottom-start\",strategy:\"absolute\",middleware:[In(),Pn()]}).then(({x:r,y:o,strategy:i})=>{e.style.width=\"max-content\",e.style.position=i,e.style.left=`${r}px`,e.style.top=`${o}px`})},ph=({items:t=[],noOptionsMessage:e=null,noSearchResultsMessage:n=null,searchPrompt:r=null,searchingMessage:o=null,isSearchable:i=!1})=>{let s=null;return{items:async({query:l})=>{if(typeof t==\"function\"){s&&i&&s.setLoading(!0);try{let c=t({query:l}),d=Array.isArray(c)?c:await c;return s&&s.setLoading(!1),d}catch{return s&&s.setLoading(!1),[]}}if(!l)return t;let a=String(l).toLowerCase();return t.filter(c=>{let d=typeof c==\"string\"?c:c?.label??c?.name??\"\";return String(d).toLowerCase().includes(a)})},render:()=>{let l,a=0,c=null,d=!1;s={setLoading:b=>{d=b,f()}};let u=()=>{let b=document.createElement(\"div\");return b.className=\"fi-dropdown-panel fi-dropdown-list fi-scrollable\",b.style.maxHeight=\"15rem\",b.style.minWidth=\"12rem\",b},f=()=>{if(!l||!c)return;let b=Array.isArray(c.items)?c.items:[],C=c.query??\"\";if(l.innerHTML=\"\",d){let x=o??\"Searching...\",S=document.createElement(\"div\");S.className=\"fi-dropdown-header\";let k=document.createElement(\"span\");k.style.whiteSpace=\"normal\",k.textContent=x,S.appendChild(k),l.appendChild(S);return}if(b.length)b.forEach((x,S)=>{let k=typeof x==\"string\"?x:x?.label??x?.name??String(x?.id??\"\"),O=typeof x==\"object\"?x?.id??k:k,T=document.createElement(\"button\");T.className=`fi-dropdown-list-item ${S===a?\"fi-selected\":\"\"}`,T.type=\"button\",T.addEventListener(\"click\",()=>p(O,k));let A=document.createElement(\"span\");A.className=\"fi-dropdown-list-item-label\",A.textContent=k,T.appendChild(A),l.appendChild(T)});else{let x=h(C);if(x){let S=document.createElement(\"div\");S.className=\"fi-dropdown-header\";let k=document.createElement(\"span\");k.style.whiteSpace=\"normal\",k.textContent=x,S.appendChild(k),l.appendChild(S)}}},h=b=>b?n:i?r:e,p=(b,C)=>{c&&c.command({id:b,label:C})},m=()=>{if(!l||!c||(c.items||[]).length===0)return;let C=l.children[a];if(C){let x=C.getBoundingClientRect(),S=l.getBoundingClientRect();(x.top<S.top||x.bottom>S.bottom)&&C.scrollIntoView({block:\"nearest\"})}},g=()=>{if(!c)return;let b=Array.isArray(c.items)?c.items:[];b.length!==0&&(a=(a+b.length-1)%b.length,f(),m())},y=()=>{if(!c)return;let b=c.items||[];b.length!==0&&(a=(a+1)%b.length,f(),m())},w=()=>{let b=c?.items||[];if(b.length===0)return;let C=b[a],x=typeof C==\"string\"?C:C?.label??C?.name??String(C?.id??\"\"),S=typeof C==\"object\"?C?.id??x:x;p(S,x)};return{onStart:b=>{c=b,a=0,l=u(),l.style.position=\"absolute\",l.style.zIndex=\"50\",f(),document.body.appendChild(l),b.clientRect&&hh(b.editor,l)},onUpdate:b=>{c=b,a=0,f(),m(),b.clientRect&&hh(b.editor,l)},onKeyDown:b=>b.event.key===\"Escape\"?(l&&l.parentNode&&l.parentNode.removeChild(l),!0):b.event.key===\"ArrowUp\"?(g(),!0):b.event.key===\"ArrowDown\"?(y(),!0):b.event.key===\"Enter\"?(w(),!0):!1,onExit:()=>{l&&l.parentNode&&l.parentNode.removeChild(l),s=null}}}}};var zw=function({editor:t,overrideSuggestionOptions:e,extensionName:n}){let r=new H,o=e?.char??\"@\",i=e?.extraAttributes??{};return{editor:t,char:o,pluginKey:r,command:({editor:s,range:l,props:a})=>{s.view.state.selection.$to.nodeAfter?.text?.startsWith(\" \")&&(l.to+=1);let u={...a,char:o,extra:i};s.chain().focus().insertContentAt(l,[{type:n,attrs:u},{type:\"text\",text:\" \"}]).run(),s.view.dom.ownerDocument.defaultView?.getSelection()?.collapseToEnd()},allow:({state:s,range:l})=>{let a=s.doc.resolve(l.from),c=s.schema.nodes[n];return!!a.parent.type.contentMatch.matchType(c)},...e}},mh=F.create({name:\"mention\",priority:101,addStorage(){return{suggestions:[],getSuggestionFromChar:()=>null}},addOptions(){return{HTMLAttributes:{},renderText({node:t}){return`${t.attrs.char??\"@\"}`},deleteTriggerWithBackspace:!0,renderHTML({options:t,node:e}){return[\"span\",R(this.HTMLAttributes,t.HTMLAttributes),`${e.attrs.char??\"@\"}${e.attrs.label??\"\"}`]},suggestions:[],suggestion:{},getMentionLabelsUsing:null}},group:\"inline\",inline:!0,selectable:!1,atom:!0,addAttributes(){return{id:{default:null,parseHTML:t=>t.getAttribute(\"data-id\"),renderHTML:t=>t.id?{\"data-id\":t.id}:{}},label:{default:null,keepOnSplit:!1,parseHTML:t=>t.getAttribute(\"data-label\"),renderHTML:t=>t.label?{\"data-label\":t.label}:{}},char:{default:\"@\",parseHTML:t=>t.getAttribute(\"data-char\")??\"@\",renderHTML:t=>t.char?{\"data-char\":t.char}:{}},extra:{default:null,renderHTML:t=>{let e=t?.extra;return!e||typeof e!=\"object\"?{}:e}}}},parseHTML(){return[{tag:`span[data-type=\"${this.name}\"]`}]},renderHTML({node:t,HTMLAttributes:e}){let n=this.editor?.extensionStorage?.[this.name]?.getSuggestionFromChar(t?.attrs?.char??\"@\"),r={...this.options};r.HTMLAttributes=R({\"data-type\":this.name},this.options.HTMLAttributes,e);let o=this.options.renderHTML({options:r,node:t,suggestion:n});return typeof o==\"string\"?[\"span\",R({\"data-type\":this.name},this.options.HTMLAttributes,e),o]:o},renderText({node:t}){let e={options:this.options,node:t,suggestion:this.editor?.extensionStorage?.[this.name]?.getSuggestionFromChar(t?.attrs?.char??\"@\")};return this.options.renderText(e)},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:t,state:e})=>{let n=!1,{selection:r}=e,{empty:o,anchor:i}=r;if(!o)return!1;let s=new ie,l=0;if(e.doc.nodesBetween(i-1,i,(a,c)=>{if(a.type.name===this.name)return n=!0,s=a,l=c,!1}),n){let a=s?.attrs?.char??\"@\";t.insertText(this.options.deleteTriggerWithBackspace?\"\":a,l,l+s.nodeSize)}return n})}},addProseMirrorPlugins(){let t=async e=>{let{state:n,dispatch:r}=e,o=[];if(n.doc.descendants((s,l)=>{if(s.type.name!==this.name||s.attrs?.label)return;let a=s.attrs?.id,c=s.attrs?.char??\"@\";a&&o.push({id:a,char:c,pos:l})}),o.length===0)return;let i=this.options.getMentionLabelsUsing;if(typeof i==\"function\")try{let s=o.map(({id:a,char:c})=>({id:a,char:c})),l=await i(s);o.forEach(({id:a,pos:c})=>{let d=l[a];if(!d)return;let u=e.state.doc.nodeAt(c);if(!u||u.type.name!==this.name)return;let f={...u.attrs,label:d},h=e.state.tr.setNodeMarkup(c,void 0,f);r(h)})}catch{}};return[...this.storage.suggestions.map(si),new P({view:e=>(setTimeout(()=>t(e),0),{update:n=>t(n)})})]},onBeforeCreate(){let t=n=>Array.isArray(n)?n:n&&typeof n==\"object\"?Object.entries(n).map(([r,o])=>({id:r,label:o})):[],e=this.options.suggestions.length?this.options.suggestions:[this.options.suggestion];this.storage.suggestions=e.map(n=>{let r=n?.char??\"@\",o=n?.items??[],i=n?.noOptionsMessage??null,s=n?.noSearchResultsMessage??null,l=n?.isSearchable??!1,a=this.options.getMentionSearchResultsUsing,c=n;if(typeof n?.items==\"function\"){let d=n.items;c={...n,items:async u=>{if(u?.query&&typeof a==\"function\")try{let f=await a(u?.query,r);return t(f)}catch{}return await d(u)}}}else{let d=n?.extraAttributes,u=n?.searchPrompt??null,f=n?.searchingMessage??null;c={...ph({items:async({query:h})=>{if(!(Array.isArray(o)?o.length>0:o&&typeof o==\"object\"&&Object.keys(o).length>0)&&!h)return[];let m=t(o);if(h&&typeof a==\"function\")try{let y=await a(h,r);return t(y)}catch{}if(!h)return m;let g=String(h).toLowerCase();return m.filter(y=>{let w=typeof y==\"string\"?y:y?.label??y?.name??\"\";return String(w).toLowerCase().includes(g)})},isSearchable:l,noOptionsMessage:i,noSearchResultsMessage:s,searchPrompt:u,searchingMessage:f}),char:r,...d?{extraAttributes:d}:{}}}return zw({editor:this.editor,overrideSuggestionOptions:c,extensionName:this.name})}),this.storage.getSuggestionFromChar=n=>this.storage.suggestions.find(r=>r.char===n)??this.storage.suggestions[0]??null}});var Hw=F.create({name:\"paragraph\",priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:\"block\",content:\"inline*\",parseHTML(){return[{tag:\"p\"}]},renderHTML({HTMLAttributes:t}){return[\"p\",R(this.options.HTMLAttributes,t),0]},parseMarkdown:(t,e)=>{let n=t.tokens||[];return n.length===1&&n[0].type===\"image\"?e.parseChildren([n[0]]):e.createNode(\"paragraph\",void 0,e.parseInline(n))},renderMarkdown:(t,e)=>!t||!Array.isArray(t.content)?\"\":e.renderChildren(t.content),addCommands(){return{setParagraph:()=>({commands:t})=>t.setNode(this.name)}},addKeyboardShortcuts(){return{\"Mod-Alt-0\":()=>this.editor.commands.setParagraph()}}}),gh=Hw;var Jl=fl;var yh=ee.create({name:\"small\",parseHTML(){return[{tag:\"small\"}]},renderHTML({HTMLAttributes:t}){return[\"small\",t,0]},addCommands(){return{setSmall:()=>({commands:t})=>t.setMark(this.name),toggleSmall:()=>({commands:t})=>t.toggleMark(this.name),unsetSmall:()=>({commands:t})=>t.unsetMark(this.name)}}});var bh=ee.create({name:\"textColor\",addOptions(){return{textColors:{}}},parseHTML(){return[{tag:\"span\",getAttrs:t=>t.classList?.contains(\"color\")}]},renderHTML({HTMLAttributes:t}){let e={...t},n=t.class;e.class=[\"color\",n].filter(Boolean).join(\" \");let r=t[\"data-color\"],i=(this.options.textColors||{})[r],s=typeof r==\"string\"&&r.length>0,l=i?`--color: ${i.color}; --dark-color: ${i.darkColor}`:s?`--color: ${r}; --dark-color: ${r}`:null;if(l){let a=typeof t.style==\"string\"?t.style:\"\";e.style=a?`${l}; ${a}`:l}return[\"span\",e,0]},addAttributes(){return{\"data-color\":{default:null,parseHTML:t=>t.getAttribute(\"data-color\"),renderHTML:t=>t[\"data-color\"]?{\"data-color\":t[\"data-color\"]}:{}}}},addCommands(){return{setTextColor:({color:t})=>({commands:e})=>e.setMark(this.name,{\"data-color\":t}),unsetTextColor:()=>({commands:t})=>t.unsetMark(this.name)}}});var $w=/(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))$/,Fw=/(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))/g,Vw=ee.create({name:\"strike\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"s\"},{tag:\"del\"},{tag:\"strike\"},{style:\"text-decoration\",consuming:!1,getAttrs:t=>t.includes(\"line-through\")?{}:!1}]},renderHTML({HTMLAttributes:t}){return[\"s\",R(this.options.HTMLAttributes,t),0]},markdownTokenName:\"del\",parseMarkdown:(t,e)=>e.applyMark(\"strike\",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`~~${e.renderChildren(t)}~~`,addCommands(){return{setStrike:()=>({commands:t})=>t.setMark(this.name),toggleStrike:()=>({commands:t})=>t.toggleMark(this.name),unsetStrike:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-Shift-s\":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[Be({find:$w,type:this.type})]},addPasteRules(){return[Me({find:Fw,type:this.type})]}}),wh=Vw;var _w=ee.create({name:\"subscript\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"sub\"},{style:\"vertical-align\",getAttrs(t){return t!==\"sub\"?!1:null}}]},renderHTML({HTMLAttributes:t}){return[\"sub\",R(this.options.HTMLAttributes,t),0]},addCommands(){return{setSubscript:()=>({commands:t})=>t.setMark(this.name),toggleSubscript:()=>({commands:t})=>t.toggleMark(this.name),unsetSubscript:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-,\":()=>this.editor.commands.toggleSubscript()}}}),xh=_w;var Ww=ee.create({name:\"superscript\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"sup\"},{style:\"vertical-align\",getAttrs(t){return t!==\"super\"?!1:null}}]},renderHTML({HTMLAttributes:t}){return[\"sup\",R(this.options.HTMLAttributes,t),0]},addCommands(){return{setSuperscript:()=>({commands:t})=>t.setMark(this.name),toggleSuperscript:()=>({commands:t})=>t.toggleMark(this.name),unsetSuperscript:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-.\":()=>this.editor.commands.toggleSuperscript()}}}),kh=Ww;var Xl,Yl;if(typeof WeakMap<\"u\"){let t=new WeakMap;Xl=e=>t.get(e),Yl=(e,n)=>(t.set(e,n),n)}else{let t=[],n=0;Xl=r=>{for(let o=0;o<t.length;o+=2)if(t[o]==r)return t[o+1]},Yl=(r,o)=>(n==10&&(n=0),t[n++]=r,t[n++]=o)}var oe=class{constructor(t,e,n,r){this.width=t,this.height=e,this.map=n,this.problems=r}findCell(t){for(let e=0;e<this.map.length;e++){let n=this.map[e];if(n!=t)continue;let r=e%this.width,o=e/this.width|0,i=r+1,s=o+1;for(let l=1;i<this.width&&this.map[e+l]==n;l++)i++;for(let l=1;s<this.height&&this.map[e+this.width*l]==n;l++)s++;return{left:r,top:o,right:i,bottom:s}}throw new RangeError(`No cell with offset ${t} found`)}colCount(t){for(let e=0;e<this.map.length;e++)if(this.map[e]==t)return e%this.width;throw new RangeError(`No cell with offset ${t} found`)}nextCell(t,e,n){let{left:r,right:o,top:i,bottom:s}=this.findCell(t);return e==\"horiz\"?(n<0?r==0:o==this.width)?null:this.map[i*this.width+(n<0?r-1:o)]:(n<0?i==0:s==this.height)?null:this.map[r+this.width*(n<0?i-1:s)]}rectBetween(t,e){let{left:n,right:r,top:o,bottom:i}=this.findCell(t),{left:s,right:l,top:a,bottom:c}=this.findCell(e);return{left:Math.min(n,s),top:Math.min(o,a),right:Math.max(r,l),bottom:Math.max(i,c)}}cellsInRect(t){let e=[],n={};for(let r=t.top;r<t.bottom;r++)for(let o=t.left;o<t.right;o++){let i=r*this.width+o,s=this.map[i];n[s]||(n[s]=!0,!(o==t.left&&o&&this.map[i-1]==s||r==t.top&&r&&this.map[i-this.width]==s)&&e.push(s))}return e}positionAt(t,e,n){for(let r=0,o=0;;r++){let i=o+n.child(r).nodeSize;if(r==t){let s=e+t*this.width,l=(t+1)*this.width;for(;s<l&&this.map[s]<o;)s++;return s==l?i-1:this.map[s]}o=i}}static get(t){return Xl(t)||Yl(t,jw(t))}};function jw(t){if(t.type.spec.tableRole!=\"table\")throw new RangeError(\"Not a table node: \"+t.type.name);let e=Uw(t),n=t.childCount,r=[],o=0,i=null,s=[];for(let c=0,d=e*n;c<d;c++)r[c]=0;for(let c=0,d=0;c<n;c++){let u=t.child(c);d++;for(let p=0;;p++){for(;o<r.length&&r[o]!=0;)o++;if(p==u.childCount)break;let m=u.child(p),{colspan:g,rowspan:y,colwidth:w}=m.attrs;for(let b=0;b<y;b++){if(b+c>=n){(i||(i=[])).push({type:\"overlong_rowspan\",pos:d,n:y-b});break}let C=o+b*e;for(let x=0;x<g;x++){r[C+x]==0?r[C+x]=d:(i||(i=[])).push({type:\"collision\",row:c,pos:d,n:g-x});let S=w&&w[x];if(S){let k=(C+x)%e*2,O=s[k];O==null||O!=S&&s[k+1]==1?(s[k]=S,s[k+1]=1):O==S&&s[k+1]++}}}o+=g,d+=m.nodeSize}let f=(c+1)*e,h=0;for(;o<f;)r[o++]==0&&h++;h&&(i||(i=[])).push({type:\"missing\",row:c,n:h}),d++}(e===0||n===0)&&(i||(i=[])).push({type:\"zero_sized\"});let l=new oe(e,n,r,i),a=!1;for(let c=0;!a&&c<s.length;c+=2)s[c]!=null&&s[c+1]<n&&(a=!0);return a&&Kw(l,s,t),l}function Uw(t){let e=-1,n=!1;for(let r=0;r<t.childCount;r++){let o=t.child(r),i=0;if(n)for(let s=0;s<r;s++){let l=t.child(s);for(let a=0;a<l.childCount;a++){let c=l.child(a);s+c.attrs.rowspan>r&&(i+=c.attrs.colspan)}}for(let s=0;s<o.childCount;s++){let l=o.child(s);i+=l.attrs.colspan,l.attrs.rowspan>1&&(n=!0)}e==-1?e=i:e!=i&&(e=Math.max(e,i))}return e}function Kw(t,e,n){t.problems||(t.problems=[]);let r={};for(let o=0;o<t.map.length;o++){let i=t.map[o];if(r[i])continue;r[i]=!0;let s=n.nodeAt(i);if(!s)throw new RangeError(`No cell with offset ${i} found`);let l=null,a=s.attrs;for(let c=0;c<a.colspan;c++){let d=e[(o+c)%t.width*2];d!=null&&(!a.colwidth||a.colwidth[c]!=d)&&((l||(l=qw(a)))[c]=d)}l&&t.problems.unshift({type:\"colwidth mismatch\",pos:i,colwidth:l})}}function qw(t){if(t.colwidth)return t.colwidth.slice();let e=[];for(let n=0;n<t.colspan;n++)e.push(0);return e}function xe(t){let e=t.cached.tableNodeTypes;if(!e){e=t.cached.tableNodeTypes={};for(let n in t.nodes){let r=t.nodes[n],o=r.spec.tableRole;o&&(e[o]=r)}}return e}var zt=new H(\"selectingCells\");function an(t){for(let e=t.depth-1;e>0;e--)if(t.node(e).type.spec.tableRole==\"row\")return t.node(0).resolve(t.before(e+1));return null}function Jw(t){for(let e=t.depth;e>0;e--){let n=t.node(e).type.spec.tableRole;if(n===\"cell\"||n===\"header_cell\")return t.node(e)}return null}function Je(t){let e=t.selection.$head;for(let n=e.depth;n>0;n--)if(e.node(n).type.spec.tableRole==\"row\")return!0;return!1}function Si(t){let e=t.selection;if(\"$anchorCell\"in e&&e.$anchorCell)return e.$anchorCell.pos>e.$headCell.pos?e.$anchorCell:e.$headCell;if(\"node\"in e&&e.node&&e.node.type.spec.tableRole==\"cell\")return e.$anchor;let n=an(e.$head)||Gw(e.$head);if(n)return n;throw new RangeError(`No cell found around position ${e.head}`)}function Gw(t){for(let e=t.nodeAfter,n=t.pos;e;e=e.firstChild,n++){let r=e.type.spec.tableRole;if(r==\"cell\"||r==\"header_cell\")return t.doc.resolve(n)}for(let e=t.nodeBefore,n=t.pos;e;e=e.lastChild,n--){let r=e.type.spec.tableRole;if(r==\"cell\"||r==\"header_cell\")return t.doc.resolve(n-e.nodeSize)}}function Ql(t){return t.parent.type.spec.tableRole==\"row\"&&!!t.nodeAfter}function Xw(t){return t.node(0).resolve(t.pos+t.nodeAfter.nodeSize)}function ta(t,e){return t.depth==e.depth&&t.pos>=e.start(-1)&&t.pos<=e.end(-1)}function Rh(t,e,n){let r=t.node(-1),o=oe.get(r),i=t.start(-1),s=o.nextCell(t.pos-i,e,n);return s==null?null:t.node(0).resolve(i+s)}function cn(t,e,n=1){let r={...t,colspan:t.colspan-n};return r.colwidth&&(r.colwidth=r.colwidth.slice(),r.colwidth.splice(e,n),r.colwidth.some(o=>o>0)||(r.colwidth=null)),r}function Dh(t,e,n=1){let r={...t,colspan:t.colspan+n};if(r.colwidth){r.colwidth=r.colwidth.slice();for(let o=0;o<n;o++)r.colwidth.splice(e,0,0)}return r}function Yw(t,e,n){let r=xe(e.type.schema).header_cell;for(let o=0;o<t.height;o++)if(e.nodeAt(t.map[n+o*t.width]).type!=r)return!1;return!0}var X=class Mt extends I{constructor(e,n=e){let r=e.node(-1),o=oe.get(r),i=e.start(-1),s=o.rectBetween(e.pos-i,n.pos-i),l=e.node(0),a=o.cellsInRect(s).filter(d=>d!=n.pos-i);a.unshift(n.pos-i);let c=a.map(d=>{let u=r.nodeAt(d);if(!u)throw new RangeError(`No cell with offset ${d} found`);let f=i+d+1;return new yn(l.resolve(f),l.resolve(f+u.content.size))});super(c[0].$from,c[0].$to,c),this.$anchorCell=e,this.$headCell=n}map(e,n){let r=e.resolve(n.map(this.$anchorCell.pos)),o=e.resolve(n.map(this.$headCell.pos));if(Ql(r)&&Ql(o)&&ta(r,o)){let i=this.$anchorCell.node(-1)!=r.node(-1);return i&&this.isRowSelection()?Mt.rowSelection(r,o):i&&this.isColSelection()?Mt.colSelection(r,o):new Mt(r,o)}return D.between(r,o)}content(){let e=this.$anchorCell.node(-1),n=oe.get(e),r=this.$anchorCell.start(-1),o=n.rectBetween(this.$anchorCell.pos-r,this.$headCell.pos-r),i={},s=[];for(let a=o.top;a<o.bottom;a++){let c=[];for(let d=a*n.width+o.left,u=o.left;u<o.right;u++,d++){let f=n.map[d];if(i[f])continue;i[f]=!0;let h=n.findCell(f),p=e.nodeAt(f);if(!p)throw new RangeError(`No cell with offset ${f} found`);let m=o.left-h.left,g=h.right-o.right;if(m>0||g>0){let y=p.attrs;if(m>0&&(y=cn(y,0,m)),g>0&&(y=cn(y,y.colspan-g,g)),h.left<o.left){if(p=p.type.createAndFill(y),!p)throw new RangeError(`Could not create cell with attrs ${JSON.stringify(y)}`)}else p=p.type.create(y,p.content)}if(h.top<o.top||h.bottom>o.bottom){let y={...p.attrs,rowspan:Math.min(h.bottom,o.bottom)-Math.max(h.top,o.top)};h.top<o.top?p=p.type.createAndFill(y):p=p.type.create(y,p.content)}c.push(p)}s.push(e.child(a).copy(v.from(c)))}let l=this.isColSelection()&&this.isRowSelection()?e:s;return new E(v.from(l),1,1)}replace(e,n=E.empty){let r=e.steps.length,o=this.ranges;for(let s=0;s<o.length;s++){let{$from:l,$to:a}=o[s],c=e.mapping.slice(r);e.replace(c.map(l.pos),c.map(a.pos),s?E.empty:n)}let i=I.findFrom(e.doc.resolve(e.mapping.slice(r).map(this.to)),-1);i&&e.setSelection(i)}replaceWith(e,n){this.replace(e,new E(v.from(n),0,0))}forEachCell(e){let n=this.$anchorCell.node(-1),r=oe.get(n),o=this.$anchorCell.start(-1),i=r.cellsInRect(r.rectBetween(this.$anchorCell.pos-o,this.$headCell.pos-o));for(let s=0;s<i.length;s++)e(n.nodeAt(i[s]),o+i[s])}isColSelection(){let e=this.$anchorCell.index(-1),n=this.$headCell.index(-1);if(Math.min(e,n)>0)return!1;let r=e+this.$anchorCell.nodeAfter.attrs.rowspan,o=n+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(r,o)==this.$headCell.node(-1).childCount}static colSelection(e,n=e){let r=e.node(-1),o=oe.get(r),i=e.start(-1),s=o.findCell(e.pos-i),l=o.findCell(n.pos-i),a=e.node(0);return s.top<=l.top?(s.top>0&&(e=a.resolve(i+o.map[s.left])),l.bottom<o.height&&(n=a.resolve(i+o.map[o.width*(o.height-1)+l.right-1]))):(l.top>0&&(n=a.resolve(i+o.map[l.left])),s.bottom<o.height&&(e=a.resolve(i+o.map[o.width*(o.height-1)+s.right-1]))),new Mt(e,n)}isRowSelection(){let e=this.$anchorCell.node(-1),n=oe.get(e),r=this.$anchorCell.start(-1),o=n.colCount(this.$anchorCell.pos-r),i=n.colCount(this.$headCell.pos-r);if(Math.min(o,i)>0)return!1;let s=o+this.$anchorCell.nodeAfter.attrs.colspan,l=i+this.$headCell.nodeAfter.attrs.colspan;return Math.max(s,l)==n.width}eq(e){return e instanceof Mt&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos}static rowSelection(e,n=e){let r=e.node(-1),o=oe.get(r),i=e.start(-1),s=o.findCell(e.pos-i),l=o.findCell(n.pos-i),a=e.node(0);return s.left<=l.left?(s.left>0&&(e=a.resolve(i+o.map[s.top*o.width])),l.right<o.width&&(n=a.resolve(i+o.map[o.width*(l.top+1)-1]))):(l.left>0&&(n=a.resolve(i+o.map[l.top*o.width])),s.right<o.width&&(e=a.resolve(i+o.map[o.width*(s.top+1)-1]))),new Mt(e,n)}toJSON(){return{type:\"cell\",anchor:this.$anchorCell.pos,head:this.$headCell.pos}}static fromJSON(e,n){return new Mt(e.resolve(n.anchor),e.resolve(n.head))}static create(e,n,r=n){return new Mt(e.resolve(n),e.resolve(r))}getBookmark(){return new Qw(this.$anchorCell.pos,this.$headCell.pos)}};X.prototype.visible=!1;I.jsonID(\"cell\",X);var Qw=class Ih{constructor(e,n){this.anchor=e,this.head=n}map(e){return new Ih(e.map(this.anchor),e.map(this.head))}resolve(e){let n=e.resolve(this.anchor),r=e.resolve(this.head);return n.parent.type.spec.tableRole==\"row\"&&r.parent.type.spec.tableRole==\"row\"&&n.index()<n.parent.childCount&&r.index()<r.parent.childCount&&ta(n,r)?new X(n,r):I.near(r,1)}};function Zw(t){if(!(t.selection instanceof X))return null;let e=[];return t.selection.forEachCell((n,r)=>{e.push(te.node(r,r+n.nodeSize,{class:\"selectedCell\"}))}),Y.create(t.doc,e)}function ex({$from:t,$to:e}){if(t.pos==e.pos||t.pos<e.pos-6)return!1;let n=t.pos,r=e.pos,o=t.depth;for(;o>=0&&!(t.after(o+1)<t.end(o));o--,n++);for(let i=e.depth;i>=0&&!(e.before(i+1)>e.start(i));i--,r--);return n==r&&/row|table/.test(t.node(o).type.spec.tableRole)}function tx({$from:t,$to:e}){let n,r;for(let o=t.depth;o>0;o--){let i=t.node(o);if(i.type.spec.tableRole===\"cell\"||i.type.spec.tableRole===\"header_cell\"){n=i;break}}for(let o=e.depth;o>0;o--){let i=e.node(o);if(i.type.spec.tableRole===\"cell\"||i.type.spec.tableRole===\"header_cell\"){r=i;break}}return n!==r&&e.parentOffset===0}function nx(t,e,n){let r=(e||t).selection,o=(e||t).doc,i,s;if(r instanceof L&&(s=r.node.type.spec.tableRole)){if(s==\"cell\"||s==\"header_cell\")i=X.create(o,r.from);else if(s==\"row\"){let l=o.resolve(r.from+1);i=X.rowSelection(l,l)}else if(!n){let l=oe.get(r.node),a=r.from+1,c=a+l.map[l.width*l.height-1];i=X.create(o,a+1,c)}}else r instanceof D&&ex(r)?i=D.create(o,r.from):r instanceof D&&tx(r)&&(i=D.create(o,r.$from.start(),r.$from.end()));return i&&(e||(e=t.tr)).setSelection(i),e}var rx=new H(\"fix-tables\");function Ph(t,e,n,r){let o=t.childCount,i=e.childCount;e:for(let s=0,l=0;s<i;s++){let a=e.child(s);for(let c=l,d=Math.min(o,s+3);c<d;c++)if(t.child(c)==a){l=c+1,n+=a.nodeSize;continue e}r(a,n),l<o&&t.child(l).sameMarkup(a)?Ph(t.child(l),a,n+1,r):a.nodesBetween(0,a.content.size,r,n+1),n+=a.nodeSize}}function na(t,e){let n,r=(o,i)=>{o.type.spec.tableRole==\"table\"&&(n=ox(t,o,i,n))};return e?e.doc!=t.doc&&Ph(e.doc,t.doc,0,r):t.doc.descendants(r),n}function ox(t,e,n,r){let o=oe.get(e);if(!o.problems)return r;r||(r=t.tr);let i=[];for(let a=0;a<o.height;a++)i.push(0);for(let a=0;a<o.problems.length;a++){let c=o.problems[a];if(c.type==\"collision\"){let d=e.nodeAt(c.pos);if(!d)continue;let u=d.attrs;for(let f=0;f<u.rowspan;f++)i[c.row+f]+=c.n;r.setNodeMarkup(r.mapping.map(n+1+c.pos),null,cn(u,u.colspan-c.n,c.n))}else if(c.type==\"missing\")i[c.row]+=c.n;else if(c.type==\"overlong_rowspan\"){let d=e.nodeAt(c.pos);if(!d)continue;r.setNodeMarkup(r.mapping.map(n+1+c.pos),null,{...d.attrs,rowspan:d.attrs.rowspan-c.n})}else if(c.type==\"colwidth mismatch\"){let d=e.nodeAt(c.pos);if(!d)continue;r.setNodeMarkup(r.mapping.map(n+1+c.pos),null,{...d.attrs,colwidth:c.colwidth})}else if(c.type==\"zero_sized\"){let d=r.mapping.map(n);r.delete(d,d+e.nodeSize)}}let s,l;for(let a=0;a<i.length;a++)i[a]&&(s==null&&(s=a),l=a);for(let a=0,c=n+1;a<o.height;a++){let d=e.child(a),u=c+d.nodeSize,f=i[a];if(f>0){let h=\"cell\";d.firstChild&&(h=d.firstChild.type.spec.tableRole);let p=[];for(let g=0;g<f;g++){let y=xe(t.schema)[h].createAndFill();y&&p.push(y)}let m=(a==0||s==a-1)&&l==a?c+1:u-1;r.insert(r.mapping.map(m),p)}c=u}return r.setMeta(rx,{fixTables:!0})}function at(t){let e=t.selection,n=Si(t),r=n.node(-1),o=n.start(-1),i=oe.get(r);return{...e instanceof X?i.rectBetween(e.$anchorCell.pos-o,e.$headCell.pos-o):i.findCell(n.pos-o),tableStart:o,map:i,table:r}}function Lh(t,{map:e,tableStart:n,table:r},o){let i=o>0?-1:0;Yw(e,r,o+i)&&(i=o==0||o==e.width?null:0);for(let s=0;s<e.height;s++){let l=s*e.width+o;if(o>0&&o<e.width&&e.map[l-1]==e.map[l]){let a=e.map[l],c=r.nodeAt(a);t.setNodeMarkup(t.mapping.map(n+a),null,Dh(c.attrs,o-e.colCount(a))),s+=c.attrs.rowspan-1}else{let a=i==null?xe(r.type.schema).cell:r.nodeAt(e.map[l+i]).type,c=e.positionAt(s,o,r);t.insert(t.mapping.map(n+c),a.createAndFill())}}return t}function Bh(t,e){if(!Je(t))return!1;if(e){let n=at(t);e(Lh(t.tr,n,n.left))}return!0}function zh(t,e){if(!Je(t))return!1;if(e){let n=at(t);e(Lh(t.tr,n,n.right))}return!0}function ix(t,{map:e,table:n,tableStart:r},o){let i=t.mapping.maps.length;for(let s=0;s<e.height;){let l=s*e.width+o,a=e.map[l],c=n.nodeAt(a),d=c.attrs;if(o>0&&e.map[l-1]==a||o<e.width-1&&e.map[l+1]==a)t.setNodeMarkup(t.mapping.slice(i).map(r+a),null,cn(d,o-e.colCount(a)));else{let u=t.mapping.slice(i).map(r+a);t.delete(u,u+c.nodeSize)}s+=d.rowspan}}function Hh(t,e){if(!Je(t))return!1;if(e){let n=at(t),r=t.tr;if(n.left==0&&n.right==n.map.width)return!1;for(let o=n.right-1;ix(r,n,o),o!=n.left;o--){let i=n.tableStart?r.doc.nodeAt(n.tableStart-1):r.doc;if(!i)throw new RangeError(\"No table found\");n.table=i,n.map=oe.get(i)}e(r)}return!0}function sx(t,e,n){var r;let o=xe(e.type.schema).header_cell;for(let i=0;i<t.width;i++)if(((r=e.nodeAt(t.map[i+n*t.width]))===null||r===void 0?void 0:r.type)!=o)return!1;return!0}function $h(t,{map:e,tableStart:n,table:r},o){let i=n;for(let c=0;c<o;c++)i+=r.child(c).nodeSize;let s=[],l=o>0?-1:0;sx(e,r,o+l)&&(l=o==0||o==e.height?null:0);for(let c=0,d=e.width*o;c<e.width;c++,d++)if(o>0&&o<e.height&&e.map[d]==e.map[d-e.width]){let u=e.map[d],f=r.nodeAt(u).attrs;t.setNodeMarkup(n+u,null,{...f,rowspan:f.rowspan+1}),c+=f.colspan-1}else{var a;let u=l==null?xe(r.type.schema).cell:(a=r.nodeAt(e.map[d+l*e.width]))===null||a===void 0?void 0:a.type,f=u?.createAndFill();f&&s.push(f)}return t.insert(i,xe(r.type.schema).row.create(null,s)),t}function Fh(t,e){if(!Je(t))return!1;if(e){let n=at(t);e($h(t.tr,n,n.top))}return!0}function Vh(t,e){if(!Je(t))return!1;if(e){let n=at(t);e($h(t.tr,n,n.bottom))}return!0}function lx(t,{map:e,table:n,tableStart:r},o){let i=0;for(let c=0;c<o;c++)i+=n.child(c).nodeSize;let s=i+n.child(o).nodeSize,l=t.mapping.maps.length;t.delete(i+r,s+r);let a=new Set;for(let c=0,d=o*e.width;c<e.width;c++,d++){let u=e.map[d];if(!a.has(u)){if(a.add(u),o>0&&u==e.map[d-e.width]){let f=n.nodeAt(u).attrs;t.setNodeMarkup(t.mapping.slice(l).map(u+r),null,{...f,rowspan:f.rowspan-1}),c+=f.colspan-1}else if(o<e.height&&u==e.map[d+e.width]){let f=n.nodeAt(u),h=f.attrs,p=f.type.create({...h,rowspan:f.attrs.rowspan-1},f.content),m=e.positionAt(o+1,c,n);t.insert(t.mapping.slice(l).map(r+m),p),c+=h.colspan-1}}}}function _h(t,e){if(!Je(t))return!1;if(e){let n=at(t),r=t.tr;if(n.top==0&&n.bottom==n.map.height)return!1;for(let o=n.bottom-1;lx(r,n,o),o!=n.top;o--){let i=n.tableStart?r.doc.nodeAt(n.tableStart-1):r.doc;if(!i)throw new RangeError(\"No table found\");n.table=i,n.map=oe.get(n.table)}e(r)}return!0}function Sh(t){let e=t.content;return e.childCount==1&&e.child(0).isTextblock&&e.child(0).childCount==0}function ax({width:t,height:e,map:n},r){let o=r.top*t+r.left,i=o,s=(r.bottom-1)*t+r.left,l=o+(r.right-r.left-1);for(let a=r.top;a<r.bottom;a++){if(r.left>0&&n[i]==n[i-1]||r.right<t&&n[l]==n[l+1])return!0;i+=t,l+=t}for(let a=r.left;a<r.right;a++){if(r.top>0&&n[o]==n[o-t]||r.bottom<e&&n[s]==n[s+t])return!0;o++,s++}return!1}function ra(t,e){let n=t.selection;if(!(n instanceof X)||n.$anchorCell.pos==n.$headCell.pos)return!1;let r=at(t),{map:o}=r;if(ax(o,r))return!1;if(e){let i=t.tr,s={},l=v.empty,a,c;for(let d=r.top;d<r.bottom;d++)for(let u=r.left;u<r.right;u++){let f=o.map[d*o.width+u],h=r.table.nodeAt(f);if(!(s[f]||!h))if(s[f]=!0,a==null)a=f,c=h;else{Sh(h)||(l=l.append(h.content));let p=i.mapping.map(f+r.tableStart);i.delete(p,p+h.nodeSize)}}if(a==null||c==null)return!0;if(i.setNodeMarkup(a+r.tableStart,null,{...Dh(c.attrs,c.attrs.colspan,r.right-r.left-c.attrs.colspan),rowspan:r.bottom-r.top}),l.size>0){let d=a+1+c.content.size,u=Sh(c)?a+1:d;i.replaceWith(u+r.tableStart,d+r.tableStart,l)}i.setSelection(new X(i.doc.resolve(a+r.tableStart))),e(i)}return!0}function oa(t,e){let n=xe(t.schema);return cx(({node:r})=>n[r.type.spec.tableRole])(t,e)}function cx(t){return(e,n)=>{let r=e.selection,o,i;if(r instanceof X){if(r.$anchorCell.pos!=r.$headCell.pos)return!1;o=r.$anchorCell.nodeAfter,i=r.$anchorCell.pos}else{var s;if(o=Jw(r.$from),!o)return!1;i=(s=an(r.$from))===null||s===void 0?void 0:s.pos}if(o==null||i==null||o.attrs.colspan==1&&o.attrs.rowspan==1)return!1;if(n){let l=o.attrs,a=[],c=l.colwidth;l.rowspan>1&&(l={...l,rowspan:1}),l.colspan>1&&(l={...l,colspan:1});let d=at(e),u=e.tr;for(let h=0;h<d.right-d.left;h++)a.push(c?{...l,colwidth:c&&c[h]?[c[h]]:null}:l);let f;for(let h=d.top;h<d.bottom;h++){let p=d.map.positionAt(h,d.left,d.table);h==d.top&&(p+=o.nodeSize);for(let m=d.left,g=0;m<d.right;m++,g++)m==d.left&&h==d.top||u.insert(f=u.mapping.map(p+d.tableStart,1),t({node:o,row:h,col:m}).createAndFill(a[g]))}u.setNodeMarkup(i,t({node:o,row:d.top,col:d.left}),a[0]),r instanceof X&&u.setSelection(new X(u.doc.resolve(r.$anchorCell.pos),f?u.doc.resolve(f):void 0)),n(u)}return!0}}function Wh(t,e){return function(n,r){if(!Je(n))return!1;let o=Si(n);if(o.nodeAfter.attrs[t]===e)return!1;if(r){let i=n.tr;n.selection instanceof X?n.selection.forEachCell((s,l)=>{s.attrs[t]!==e&&i.setNodeMarkup(l,null,{...s.attrs,[t]:e})}):i.setNodeMarkup(o.pos,null,{...o.nodeAfter.attrs,[t]:e}),r(i)}return!0}}function dx(t){return function(e,n){if(!Je(e))return!1;if(n){let r=xe(e.schema),o=at(e),i=e.tr,s=o.map.cellsInRect(t==\"column\"?{left:o.left,top:0,right:o.right,bottom:o.map.height}:t==\"row\"?{left:0,top:o.top,right:o.map.width,bottom:o.bottom}:o),l=s.map(a=>o.table.nodeAt(a));for(let a=0;a<s.length;a++)l[a].type==r.header_cell&&i.setNodeMarkup(o.tableStart+s[a],r.cell,l[a].attrs);if(i.steps.length===0)for(let a=0;a<s.length;a++)i.setNodeMarkup(o.tableStart+s[a],r.header_cell,l[a].attrs);n(i)}return!0}}function Ch(t,e,n){let r=e.map.cellsInRect({left:0,top:0,right:t==\"row\"?e.map.width:1,bottom:t==\"column\"?e.map.height:1});for(let o=0;o<r.length;o++){let i=e.table.nodeAt(r[o]);if(i&&i.type!==n.header_cell)return!1}return!0}function Bn(t,e){return e=e||{useDeprecatedLogic:!1},e.useDeprecatedLogic?dx(t):function(n,r){if(!Je(n))return!1;if(r){let o=xe(n.schema),i=at(n),s=n.tr,l=Ch(\"row\",i,o),a=Ch(\"column\",i,o),c=(t===\"column\"?l:t===\"row\"&&a)?1:0,d=t==\"column\"?{left:0,top:c,right:1,bottom:i.map.height}:t==\"row\"?{left:c,top:0,right:i.map.width,bottom:1}:i,u=t==\"column\"?a?o.cell:o.header_cell:t==\"row\"?l?o.cell:o.header_cell:o.cell;i.map.cellsInRect(d).forEach(f=>{let h=f+i.tableStart,p=s.doc.nodeAt(h);p&&s.setNodeMarkup(h,u,p.attrs)}),r(s)}return!0}}var cM=Bn(\"row\",{useDeprecatedLogic:!0}),dM=Bn(\"column\",{useDeprecatedLogic:!0}),jh=Bn(\"cell\",{useDeprecatedLogic:!0});function ux(t,e){if(e<0){let n=t.nodeBefore;if(n)return t.pos-n.nodeSize;for(let r=t.index(-1)-1,o=t.before();r>=0;r--){let i=t.node(-1).child(r),s=i.lastChild;if(s)return o-1-s.nodeSize;o-=i.nodeSize}}else{if(t.index()<t.parent.childCount-1)return t.pos+t.nodeAfter.nodeSize;let n=t.node(-1);for(let r=t.indexAfter(-1),o=t.after();r<n.childCount;r++){let i=n.child(r);if(i.childCount)return o+1;o+=i.nodeSize}}return null}function ia(t){return function(e,n){if(!Je(e))return!1;let r=ux(Si(e),t);if(r==null)return!1;if(n){let o=e.doc.resolve(r);n(e.tr.setSelection(D.between(o,Xw(o))).scrollIntoView())}return!0}}function Uh(t,e){let n=t.selection.$anchor;for(let r=n.depth;r>0;r--)if(n.node(r).type.spec.tableRole==\"table\")return e&&e(t.tr.delete(n.before(r),n.after(r)).scrollIntoView()),!0;return!1}function yi(t,e){let n=t.selection;if(!(n instanceof X))return!1;if(e){let r=t.tr,o=xe(t.schema).cell.createAndFill().content;n.forEachCell((i,s)=>{i.content.eq(o)||r.replace(r.mapping.map(s+1),r.mapping.map(s+i.nodeSize-1),new E(o,0,0))}),r.docChanged&&e(r)}return!0}function fx(t){if(t.size===0)return null;let{content:e,openStart:n,openEnd:r}=t;for(;e.childCount==1&&(n>0&&r>0||e.child(0).type.spec.tableRole==\"table\");)n--,r--,e=e.child(0).content;let o=e.child(0),i=o.type.spec.tableRole,s=o.type.schema,l=[];if(i==\"row\")for(let a=0;a<e.childCount;a++){let c=e.child(a).content,d=a?0:Math.max(0,n-1),u=a<e.childCount-1?0:Math.max(0,r-1);(d||u)&&(c=Zl(xe(s).row,new E(c,d,u)).content),l.push(c)}else if(i==\"cell\"||i==\"header_cell\")l.push(n||r?Zl(xe(s).row,new E(e,n,r)).content:e);else return null;return hx(s,l)}function hx(t,e){let n=[];for(let o=0;o<e.length;o++){let i=e[o];for(let s=i.childCount-1;s>=0;s--){let{rowspan:l,colspan:a}=i.child(s).attrs;for(let c=o;c<o+l;c++)n[c]=(n[c]||0)+a}}let r=0;for(let o=0;o<n.length;o++)r=Math.max(r,n[o]);for(let o=0;o<n.length;o++)if(o>=e.length&&e.push(v.empty),n[o]<r){let i=xe(t).cell.createAndFill(),s=[];for(let l=n[o];l<r;l++)s.push(i);e[o]=e[o].append(v.from(s))}return{height:e.length,width:r,rows:e}}function Zl(t,e){let n=t.createAndFill();return new Tt(n).replace(0,n.content.size,e).doc}function px({width:t,height:e,rows:n},r,o){if(t!=r){let i=[],s=[];for(let l=0;l<n.length;l++){let a=n[l],c=[];for(let d=i[l]||0,u=0;d<r;u++){let f=a.child(u%a.childCount);d+f.attrs.colspan>r&&(f=f.type.createChecked(cn(f.attrs,f.attrs.colspan,d+f.attrs.colspan-r),f.content)),c.push(f),d+=f.attrs.colspan;for(let h=1;h<f.attrs.rowspan;h++)i[l+h]=(i[l+h]||0)+f.attrs.colspan}s.push(v.from(c))}n=s,t=r}if(e!=o){let i=[];for(let s=0,l=0;s<o;s++,l++){let a=[],c=n[l%e];for(let d=0;d<c.childCount;d++){let u=c.child(d);s+u.attrs.rowspan>o&&(u=u.type.create({...u.attrs,rowspan:Math.max(1,o-u.attrs.rowspan)},u.content)),a.push(u)}i.push(v.from(a))}n=i,e=o}return{width:t,height:e,rows:n}}function mx(t,e,n,r,o,i,s){let l=t.doc.type.schema,a=xe(l),c,d;if(o>e.width)for(let u=0,f=0;u<e.height;u++){let h=n.child(u);f+=h.nodeSize;let p=[],m;h.lastChild==null||h.lastChild.type==a.cell?m=c||(c=a.cell.createAndFill()):m=d||(d=a.header_cell.createAndFill());for(let g=e.width;g<o;g++)p.push(m);t.insert(t.mapping.slice(s).map(f-1+r),p)}if(i>e.height){let u=[];for(let p=0,m=(e.height-1)*e.width;p<Math.max(e.width,o);p++){let g=p>=e.width?!1:n.nodeAt(e.map[m+p]).type==a.header_cell;u.push(g?d||(d=a.header_cell.createAndFill()):c||(c=a.cell.createAndFill()))}let f=a.row.create(null,v.from(u)),h=[];for(let p=e.height;p<i;p++)h.push(f);t.insert(t.mapping.slice(s).map(r+n.nodeSize-2),h)}return!!(c||d)}function vh(t,e,n,r,o,i,s,l){if(s==0||s==e.height)return!1;let a=!1;for(let c=o;c<i;c++){let d=s*e.width+c,u=e.map[d];if(e.map[d-e.width]==u){a=!0;let f=n.nodeAt(u),{top:h,left:p}=e.findCell(u);t.setNodeMarkup(t.mapping.slice(l).map(u+r),null,{...f.attrs,rowspan:s-h}),t.insert(t.mapping.slice(l).map(e.positionAt(s,p,n)),f.type.createAndFill({...f.attrs,rowspan:h+f.attrs.rowspan-s})),c+=f.attrs.colspan-1}}return a}function Mh(t,e,n,r,o,i,s,l){if(s==0||s==e.width)return!1;let a=!1;for(let c=o;c<i;c++){let d=c*e.width+s,u=e.map[d];if(e.map[d-1]==u){a=!0;let f=n.nodeAt(u),h=e.colCount(u),p=t.mapping.slice(l).map(u+r);t.setNodeMarkup(p,null,cn(f.attrs,s-h,f.attrs.colspan-(s-h))),t.insert(p+f.nodeSize,f.type.createAndFill(cn(f.attrs,0,s-h))),c+=f.attrs.rowspan-1}}return a}function Th(t,e,n,r,o){let i=n?t.doc.nodeAt(n-1):t.doc;if(!i)throw new Error(\"No table found\");let s=oe.get(i),{top:l,left:a}=r,c=a+o.width,d=l+o.height,u=t.tr,f=0;function h(){if(i=n?u.doc.nodeAt(n-1):u.doc,!i)throw new Error(\"No table found\");s=oe.get(i),f=u.mapping.maps.length}mx(u,s,i,n,c,d,f)&&h(),vh(u,s,i,n,a,c,l,f)&&h(),vh(u,s,i,n,a,c,d,f)&&h(),Mh(u,s,i,n,l,d,a,f)&&h(),Mh(u,s,i,n,l,d,c,f)&&h();for(let p=l;p<d;p++){let m=s.positionAt(p,a,i),g=s.positionAt(p,c,i);u.replace(u.mapping.slice(f).map(m+n),u.mapping.slice(f).map(g+n),new E(o.rows[p-l],0,0))}h(),u.setSelection(new X(u.doc.resolve(n+s.positionAt(l,a,i)),u.doc.resolve(n+s.positionAt(d-1,c-1,i)))),e(u)}var gx=or({ArrowLeft:bi(\"horiz\",-1),ArrowRight:bi(\"horiz\",1),ArrowUp:bi(\"vert\",-1),ArrowDown:bi(\"vert\",1),\"Shift-ArrowLeft\":wi(\"horiz\",-1),\"Shift-ArrowRight\":wi(\"horiz\",1),\"Shift-ArrowUp\":wi(\"vert\",-1),\"Shift-ArrowDown\":wi(\"vert\",1),Backspace:yi,\"Mod-Backspace\":yi,Delete:yi,\"Mod-Delete\":yi});function xi(t,e,n){return n.eq(t.selection)?!1:(e&&e(t.tr.setSelection(n).scrollIntoView()),!0)}function bi(t,e){return(n,r,o)=>{if(!o)return!1;let i=n.selection;if(i instanceof X)return xi(n,r,I.near(i.$headCell,e));if(t!=\"horiz\"&&!i.empty)return!1;let s=Kh(o,t,e);if(s==null)return!1;if(t==\"horiz\")return xi(n,r,I.near(n.doc.resolve(i.head+e),e));{let l=n.doc.resolve(s),a=Rh(l,t,e),c;return a?c=I.near(a,1):e<0?c=I.near(n.doc.resolve(l.before(-1)),-1):c=I.near(n.doc.resolve(l.after(-1)),1),xi(n,r,c)}}}function wi(t,e){return(n,r,o)=>{if(!o)return!1;let i=n.selection,s;if(i instanceof X)s=i;else{let a=Kh(o,t,e);if(a==null)return!1;s=new X(n.doc.resolve(a))}let l=Rh(s.$headCell,t,e);return l?xi(n,r,new X(s.$anchorCell,l)):!1}}function yx(t,e){let n=t.state.doc,r=an(n.resolve(e));return r?(t.dispatch(t.state.tr.setSelection(new X(r))),!0):!1}function bx(t,e,n){if(!Je(t.state))return!1;let r=fx(n),o=t.state.selection;if(o instanceof X){r||(r={width:1,height:1,rows:[v.from(Zl(xe(t.state.schema).cell,n))]});let i=o.$anchorCell.node(-1),s=o.$anchorCell.start(-1),l=oe.get(i).rectBetween(o.$anchorCell.pos-s,o.$headCell.pos-s);return r=px(r,l.right-l.left,l.bottom-l.top),Th(t.state,t.dispatch,s,l,r),!0}else if(r){let i=Si(t.state),s=i.start(-1);return Th(t.state,t.dispatch,s,oe.get(i.node(-1)).findCell(i.pos-s),r),!0}else return!1}function wx(t,e){var n;if(e.button!=0||e.ctrlKey||e.metaKey)return;let r=Ah(t,e.target),o;if(e.shiftKey&&t.state.selection instanceof X)i(t.state.selection.$anchorCell,e),e.preventDefault();else if(e.shiftKey&&r&&(o=an(t.state.selection.$anchor))!=null&&((n=Gl(t,e))===null||n===void 0?void 0:n.pos)!=o.pos)i(o,e),e.preventDefault();else if(!r)return;function i(a,c){let d=Gl(t,c),u=zt.getState(t.state)==null;if(!d||!ta(a,d))if(u)d=a;else return;let f=new X(a,d);if(u||!t.state.selection.eq(f)){let h=t.state.tr.setSelection(f);u&&h.setMeta(zt,a.pos),t.dispatch(h)}}function s(){t.root.removeEventListener(\"mouseup\",s),t.root.removeEventListener(\"dragstart\",s),t.root.removeEventListener(\"mousemove\",l),zt.getState(t.state)!=null&&t.dispatch(t.state.tr.setMeta(zt,-1))}function l(a){let c=a,d=zt.getState(t.state),u;if(d!=null)u=t.state.doc.resolve(d);else if(Ah(t,c.target)!=r&&(u=Gl(t,e),!u))return s();u&&i(u,c)}t.root.addEventListener(\"mouseup\",s),t.root.addEventListener(\"dragstart\",s),t.root.addEventListener(\"mousemove\",l)}function Kh(t,e,n){if(!(t.state.selection instanceof D))return null;let{$head:r}=t.state.selection;for(let o=r.depth-1;o>=0;o--){let i=r.node(o);if((n<0?r.index(o):r.indexAfter(o))!=(n<0?0:i.childCount))return null;if(i.type.spec.tableRole==\"cell\"||i.type.spec.tableRole==\"header_cell\"){let s=r.before(o),l=e==\"vert\"?n>0?\"down\":\"up\":n>0?\"right\":\"left\";return t.endOfTextblock(l)?s:null}}return null}function Ah(t,e){for(;e&&e!=t.dom;e=e.parentNode)if(e.nodeName==\"TD\"||e.nodeName==\"TH\")return e;return null}function Gl(t,e){let n=t.posAtCoords({left:e.clientX,top:e.clientY});if(!n)return null;let{inside:r,pos:o}=n;return r>=0&&an(t.state.doc.resolve(r))||an(t.state.doc.resolve(o))}var xx=class{constructor(t,e){this.node=t,this.defaultCellMinWidth=e,this.dom=document.createElement(\"div\"),this.dom.className=\"tableWrapper\",this.table=this.dom.appendChild(document.createElement(\"table\")),this.table.style.setProperty(\"--default-cell-min-width\",`${e}px`),this.colgroup=this.table.appendChild(document.createElement(\"colgroup\")),ea(t,this.colgroup,this.table,e),this.contentDOM=this.table.appendChild(document.createElement(\"tbody\"))}update(t){return t.type!=this.node.type?!1:(this.node=t,ea(t,this.colgroup,this.table,this.defaultCellMinWidth),!0)}ignoreMutation(t){return t.type==\"attributes\"&&(t.target==this.table||this.colgroup.contains(t.target))}};function ea(t,e,n,r,o,i){let s=0,l=!0,a=e.firstChild,c=t.firstChild;if(c){for(let u=0,f=0;u<c.childCount;u++){let{colspan:h,colwidth:p}=c.child(u).attrs;for(let m=0;m<h;m++,f++){let g=o==f?i:p&&p[m],y=g?g+\"px\":\"\";if(s+=g||r,g||(l=!1),a)a.style.width!=y&&(a.style.width=y),a=a.nextSibling;else{let w=document.createElement(\"col\");w.style.width=y,e.appendChild(w)}}}for(;a;){var d;let u=a.nextSibling;(d=a.parentNode)===null||d===void 0||d.removeChild(a),a=u}l?(n.style.width=s+\"px\",n.style.minWidth=\"\"):(n.style.width=\"\",n.style.minWidth=s+\"px\")}}var Oe=new H(\"tableColumnResizing\");function qh({handleWidth:t=5,cellMinWidth:e=25,defaultCellMinWidth:n=100,View:r=xx,lastColumnResizable:o=!0}={}){let i=new P({key:Oe,state:{init(s,l){var a;let c=(a=i.spec)===null||a===void 0||(a=a.props)===null||a===void 0?void 0:a.nodeViews,d=xe(l.schema).table.name;return r&&c&&(c[d]=(u,f)=>new r(u,n,f)),new kx(-1,!1)},apply(s,l){return l.apply(s)}},props:{attributes:s=>{let l=Oe.getState(s);return l&&l.activeHandle>-1?{class:\"resize-cursor\"}:{}},handleDOMEvents:{mousemove:(s,l)=>{Sx(s,l,t,o)},mouseleave:s=>{Cx(s)},mousedown:(s,l)=>{vx(s,l,e,n)}},decorations:s=>{let l=Oe.getState(s);if(l&&l.activeHandle>-1)return Nx(s,l.activeHandle)},nodeViews:{}}});return i}var kx=class ki{constructor(e,n){this.activeHandle=e,this.dragging=n}apply(e){let n=this,r=e.getMeta(Oe);if(r&&r.setHandle!=null)return new ki(r.setHandle,!1);if(r&&r.setDragging!==void 0)return new ki(n.activeHandle,r.setDragging);if(n.activeHandle>-1&&e.docChanged){let o=e.mapping.map(n.activeHandle,-1);return Ql(e.doc.resolve(o))||(o=-1),new ki(o,n.dragging)}return n}};function Sx(t,e,n,r){if(!t.editable)return;let o=Oe.getState(t.state);if(o&&!o.dragging){let i=Tx(e.target),s=-1;if(i){let{left:l,right:a}=i.getBoundingClientRect();e.clientX-l<=n?s=Eh(t,e,\"left\",n):a-e.clientX<=n&&(s=Eh(t,e,\"right\",n))}if(s!=o.activeHandle){if(!r&&s!==-1){let l=t.state.doc.resolve(s),a=l.node(-1),c=oe.get(a),d=l.start(-1);if(c.colCount(l.pos-d)+l.nodeAfter.attrs.colspan-1==c.width-1)return}Jh(t,s)}}}function Cx(t){if(!t.editable)return;let e=Oe.getState(t.state);e&&e.activeHandle>-1&&!e.dragging&&Jh(t,-1)}function vx(t,e,n,r){var o;if(!t.editable)return!1;let i=(o=t.dom.ownerDocument.defaultView)!==null&&o!==void 0?o:window,s=Oe.getState(t.state);if(!s||s.activeHandle==-1||s.dragging)return!1;let l=t.state.doc.nodeAt(s.activeHandle),a=Mx(t,s.activeHandle,l.attrs);t.dispatch(t.state.tr.setMeta(Oe,{setDragging:{startX:e.clientX,startWidth:a}}));function c(u){i.removeEventListener(\"mouseup\",c),i.removeEventListener(\"mousemove\",d);let f=Oe.getState(t.state);f?.dragging&&(Ax(t,f.activeHandle,Nh(f.dragging,u,n)),t.dispatch(t.state.tr.setMeta(Oe,{setDragging:null})))}function d(u){if(!u.which)return c(u);let f=Oe.getState(t.state);if(f&&f.dragging){let h=Nh(f.dragging,u,n);Oh(t,f.activeHandle,h,r)}}return Oh(t,s.activeHandle,a,r),i.addEventListener(\"mouseup\",c),i.addEventListener(\"mousemove\",d),e.preventDefault(),!0}function Mx(t,e,{colspan:n,colwidth:r}){let o=r&&r[r.length-1];if(o)return o;let i=t.domAtPos(e),s=i.node.childNodes[i.offset].offsetWidth,l=n;if(r)for(let a=0;a<n;a++)r[a]&&(s-=r[a],l--);return s/l}function Tx(t){for(;t&&t.nodeName!=\"TD\"&&t.nodeName!=\"TH\";)t=t.classList&&t.classList.contains(\"ProseMirror\")?null:t.parentNode;return t}function Eh(t,e,n,r){let o=n==\"right\"?-r:r,i=t.posAtCoords({left:e.clientX+o,top:e.clientY});if(!i)return-1;let{pos:s}=i,l=an(t.state.doc.resolve(s));if(!l)return-1;if(n==\"right\")return l.pos;let a=oe.get(l.node(-1)),c=l.start(-1),d=a.map.indexOf(l.pos-c);return d%a.width==0?-1:c+a.map[d-1]}function Nh(t,e,n){let r=e.clientX-t.startX;return Math.max(n,t.startWidth+r)}function Jh(t,e){t.dispatch(t.state.tr.setMeta(Oe,{setHandle:e}))}function Ax(t,e,n){let r=t.state.doc.resolve(e),o=r.node(-1),i=oe.get(o),s=r.start(-1),l=i.colCount(r.pos-s)+r.nodeAfter.attrs.colspan-1,a=t.state.tr;for(let c=0;c<i.height;c++){let d=c*i.width+l;if(c&&i.map[d]==i.map[d-i.width])continue;let u=i.map[d],f=o.nodeAt(u).attrs,h=f.colspan==1?0:l-i.colCount(u);if(f.colwidth&&f.colwidth[h]==n)continue;let p=f.colwidth?f.colwidth.slice():Ex(f.colspan);p[h]=n,a.setNodeMarkup(s+u,null,{...f,colwidth:p})}a.docChanged&&t.dispatch(a)}function Oh(t,e,n,r){let o=t.state.doc.resolve(e),i=o.node(-1),s=o.start(-1),l=oe.get(i).colCount(o.pos-s)+o.nodeAfter.attrs.colspan-1,a=t.domAtPos(o.start(-1)).node;for(;a&&a.nodeName!=\"TABLE\";)a=a.parentNode;a&&ea(i,a.firstChild,a,r,l,n)}function Ex(t){return Array(t).fill(0)}function Nx(t,e){let n=[],r=t.doc.resolve(e),o=r.node(-1);if(!o)return Y.empty;let i=oe.get(o),s=r.start(-1),l=i.colCount(r.pos-s)+r.nodeAfter.attrs.colspan-1;for(let c=0;c<i.height;c++){let d=l+c*i.width;if((l==i.width-1||i.map[d]!=i.map[d+1])&&(c==0||i.map[d]!=i.map[d-i.width])){var a;let u=i.map[d],f=s+u+o.nodeAt(u).nodeSize-1,h=document.createElement(\"div\");h.className=\"column-resize-handle\",!((a=Oe.getState(t))===null||a===void 0)&&a.dragging&&n.push(te.node(s+u,s+u+o.nodeAt(u).nodeSize,{class:\"column-resize-dragging\"})),n.push(te.widget(f,h))}}return Y.create(t.doc,n)}function Gh({allowTableNodeSelection:t=!1}={}){return new P({key:zt,state:{init(){return null},apply(e,n){let r=e.getMeta(zt);if(r!=null)return r==-1?null:r;if(n==null||!e.docChanged)return n;let{deleted:o,pos:i}=e.mapping.mapResult(n);return o?null:i}},props:{decorations:Zw,handleDOMEvents:{mousedown:wx},createSelectionBetween(e){return zt.getState(e.state)!=null?e.state.selection:null},handleTripleClick:yx,handleKeyDown:gx,handlePaste:bx},appendTransaction(e,n,r){return nx(r,na(r,n),t)}})}var Ox=F.create({name:\"tableCell\",addOptions(){return{HTMLAttributes:{}}},content:\"block+\",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{var e,n;let r=t.getAttribute(\"colwidth\"),o=r?r.split(\",\").map(i=>parseInt(i,10)):null;if(!o){let i=(e=t.closest(\"table\"))==null?void 0:e.querySelectorAll(\"colgroup > col\"),s=Array.from(((n=t.parentElement)==null?void 0:n.children)||[]).indexOf(t);if(s&&s>-1&&i&&i[s]){let l=i[s].getAttribute(\"width\");return l?[parseInt(l,10)]:null}}return o}}}},tableRole:\"cell\",isolating:!0,parseHTML(){return[{tag:\"td\"}]},renderHTML({HTMLAttributes:t}){return[\"td\",R(this.options.HTMLAttributes,t),0]}}),Rx=F.create({name:\"tableHeader\",addOptions(){return{HTMLAttributes:{}}},content:\"block+\",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{let e=t.getAttribute(\"colwidth\");return e?e.split(\",\").map(r=>parseInt(r,10)):null}}}},tableRole:\"header_cell\",isolating:!0,parseHTML(){return[{tag:\"th\"}]},renderHTML({HTMLAttributes:t}){return[\"th\",R(this.options.HTMLAttributes,t),0]}}),Dx=F.create({name:\"tableRow\",addOptions(){return{HTMLAttributes:{}}},content:\"(tableCell | tableHeader)*\",tableRole:\"row\",parseHTML(){return[{tag:\"tr\"}]},renderHTML({HTMLAttributes:t}){return[\"tr\",R(this.options.HTMLAttributes,t),0]}});function sa(t,e){return e?[\"width\",`${Math.max(e,t)}px`]:[\"min-width\",`${t}px`]}function Xh(t,e,n,r,o,i){var s;let l=0,a=!0,c=e.firstChild,d=t.firstChild;if(d!==null)for(let f=0,h=0;f<d.childCount;f+=1){let{colspan:p,colwidth:m}=d.child(f).attrs;for(let g=0;g<p;g+=1,h+=1){let y=o===h?i:m&&m[g],w=y?`${y}px`:\"\";if(l+=y||r,y||(a=!1),c){if(c.style.width!==w){let[b,C]=sa(r,y);c.style.setProperty(b,C)}c=c.nextSibling}else{let b=document.createElement(\"col\"),[C,x]=sa(r,y);b.style.setProperty(C,x),e.appendChild(b)}}}for(;c;){let f=c.nextSibling;(s=c.parentNode)==null||s.removeChild(c),c=f}let u=t.attrs.style&&typeof t.attrs.style==\"string\"&&/\\bwidth\\s*:/i.test(t.attrs.style);a&&!u?(n.style.width=`${l}px`,n.style.minWidth=\"\"):(n.style.width=\"\",n.style.minWidth=`${l}px`)}var Ix=class{constructor(t,e){this.node=t,this.cellMinWidth=e,this.dom=document.createElement(\"div\"),this.dom.className=\"tableWrapper\",this.table=this.dom.appendChild(document.createElement(\"table\")),t.attrs.style&&(this.table.style.cssText=t.attrs.style),this.colgroup=this.table.appendChild(document.createElement(\"colgroup\")),Xh(t,this.colgroup,this.table,e),this.contentDOM=this.table.appendChild(document.createElement(\"tbody\"))}update(t){return t.type!==this.node.type?!1:(this.node=t,Xh(t,this.colgroup,this.table,this.cellMinWidth),!0)}ignoreMutation(t){let e=t.target,n=this.dom.contains(e),r=this.contentDOM.contains(e);return!!(n&&!r&&(t.type===\"attributes\"||t.type===\"childList\"||t.type===\"characterData\"))}};function Px(t,e,n,r){let o=0,i=!0,s=[],l=t.firstChild;if(!l)return{};for(let u=0,f=0;u<l.childCount;u+=1){let{colspan:h,colwidth:p}=l.child(u).attrs;for(let m=0;m<h;m+=1,f+=1){let g=n===f?r:p&&p[m];o+=g||e,g||(i=!1);let[y,w]=sa(e,g);s.push([\"col\",{style:`${y}: ${w}`}])}}let a=i?`${o}px`:\"\",c=i?\"\":`${o}px`;return{colgroup:[\"colgroup\",{},...s],tableWidth:a,tableMinWidth:c}}function Yh(t,e){return e?t.createChecked(null,e):t.createAndFill()}function Lx(t){if(t.cached.tableNodeTypes)return t.cached.tableNodeTypes;let e={};return Object.keys(t.nodes).forEach(n=>{let r=t.nodes[n];r.spec.tableRole&&(e[r.spec.tableRole]=r)}),t.cached.tableNodeTypes=e,e}function Bx(t,e,n,r,o){let i=Lx(t),s=[],l=[];for(let c=0;c<n;c+=1){let d=Yh(i.cell,o);if(d&&l.push(d),r){let u=Yh(i.header_cell,o);u&&s.push(u)}}let a=[];for(let c=0;c<e;c+=1)a.push(i.row.createChecked(null,r&&c===0?s:l));return i.table.createChecked(null,a)}function zx(t){return t instanceof X}var Ci=({editor:t})=>{let{selection:e}=t.state;if(!zx(e))return!1;let n=0,r=Gs(e.ranges[0].$from,i=>i.type.name===\"table\");return r?.node.descendants(i=>{if(i.type.name===\"table\")return!1;[\"tableCell\",\"tableHeader\"].includes(i.type.name)&&(n+=1)}),n===e.ranges.length?(t.commands.deleteTable(),!0):!1},Hx=\"\u001f\";function $x(t){return(t||\"\").replace(/\\s+/g,\" \").trim()}function Fx(t,e,n={}){var r;let o=(r=n.cellLineSeparator)!=null?r:Hx;if(!t||!t.content||t.content.length===0)return\"\";let i=[];t.content.forEach(p=>{let m=[];p.content&&p.content.forEach(g=>{let y=\"\";g.content&&Array.isArray(g.content)&&g.content.length>1?y=g.content.map(x=>e.renderChildren(x)).join(o):y=g.content?e.renderChildren(g.content):\"\";let w=$x(y),b=g.type===\"tableHeader\";m.push({text:w,isHeader:b})}),i.push(m)});let s=i.reduce((p,m)=>Math.max(p,m.length),0);if(s===0)return\"\";let l=new Array(s).fill(0);i.forEach(p=>{var m;for(let g=0;g<s;g+=1){let w=(((m=p[g])==null?void 0:m.text)||\"\").length;w>l[g]&&(l[g]=w),l[g]<3&&(l[g]=3)}});let a=(p,m)=>p+\" \".repeat(Math.max(0,m-p.length)),c=i[0],d=c.some(p=>p.isHeader),u=`\n`,f=new Array(s).fill(0).map((p,m)=>d&&c[m]&&c[m].text||\"\");return u+=`| ${f.map((p,m)=>a(p,l[m])).join(\" | \")} |\n`,u+=`| ${l.map(p=>\"-\".repeat(Math.max(3,p))).join(\" | \")} |\n`,(d?i.slice(1):i).forEach(p=>{u+=`| ${new Array(s).fill(0).map((m,g)=>a(p[g]&&p[g].text||\"\",l[g])).join(\" | \")} |\n`}),u}var Vx=Fx,_x=F.create({name:\"table\",addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:Ix,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:\"tableRow+\",tableRole:\"table\",isolating:!0,group:\"block\",parseHTML(){return[{tag:\"table\"}]},renderHTML({node:t,HTMLAttributes:e}){let{colgroup:n,tableWidth:r,tableMinWidth:o}=Px(t,this.options.cellMinWidth),i=e.style;function s(){return i||(r?`width: ${r}`:`min-width: ${o}`)}let l=[\"table\",R(this.options.HTMLAttributes,e,{style:s()}),n,[\"tbody\",0]];return this.options.renderWrapper?[\"div\",{class:\"tableWrapper\"},l]:l},parseMarkdown:(t,e)=>{let n=[];if(t.header){let r=[];t.header.forEach(o=>{r.push(e.createNode(\"tableHeader\",{},[{type:\"paragraph\",content:e.parseInline(o.tokens)}]))}),n.push(e.createNode(\"tableRow\",{},r))}return t.rows&&t.rows.forEach(r=>{let o=[];r.forEach(i=>{o.push(e.createNode(\"tableCell\",{},[{type:\"paragraph\",content:e.parseInline(i.tokens)}]))}),n.push(e.createNode(\"tableRow\",{},o))}),e.createNode(\"table\",void 0,n)},renderMarkdown:(t,e)=>Vx(t,e),addCommands(){return{insertTable:({rows:t=3,cols:e=3,withHeaderRow:n=!0}={})=>({tr:r,dispatch:o,editor:i})=>{let s=Bx(i.schema,t,e,n);if(o){let l=r.selection.from+1;r.replaceSelectionWith(s).scrollIntoView().setSelection(D.near(r.doc.resolve(l)))}return!0},addColumnBefore:()=>({state:t,dispatch:e})=>Bh(t,e),addColumnAfter:()=>({state:t,dispatch:e})=>zh(t,e),deleteColumn:()=>({state:t,dispatch:e})=>Hh(t,e),addRowBefore:()=>({state:t,dispatch:e})=>Fh(t,e),addRowAfter:()=>({state:t,dispatch:e})=>Vh(t,e),deleteRow:()=>({state:t,dispatch:e})=>_h(t,e),deleteTable:()=>({state:t,dispatch:e})=>Uh(t,e),mergeCells:()=>({state:t,dispatch:e})=>ra(t,e),splitCell:()=>({state:t,dispatch:e})=>oa(t,e),toggleHeaderColumn:()=>({state:t,dispatch:e})=>Bn(\"column\")(t,e),toggleHeaderRow:()=>({state:t,dispatch:e})=>Bn(\"row\")(t,e),toggleHeaderCell:()=>({state:t,dispatch:e})=>jh(t,e),mergeOrSplit:()=>({state:t,dispatch:e})=>ra(t,e)?!0:oa(t,e),setCellAttribute:(t,e)=>({state:n,dispatch:r})=>Wh(t,e)(n,r),goToNextCell:()=>({state:t,dispatch:e})=>ia(1)(t,e),goToPreviousCell:()=>({state:t,dispatch:e})=>ia(-1)(t,e),fixTables:()=>({state:t,dispatch:e})=>(e&&na(t),!0),setCellSelection:t=>({tr:e,dispatch:n})=>{if(n){let r=X.create(e.doc,t.anchorCell,t.headCell);e.setSelection(r)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,\"Shift-Tab\":()=>this.editor.commands.goToPreviousCell(),Backspace:Ci,\"Mod-Backspace\":Ci,Delete:Ci,\"Mod-Delete\":Ci}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[qh({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],Gh({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(t){let e={name:t.name,options:t.options,storage:t.storage};return{tableRole:G(B(t,\"tableRole\",e))}}}),Qh=U.create({name:\"tableKit\",addExtensions(){let t=[];return this.options.table!==!1&&t.push(_x.configure(this.options.table)),this.options.tableCell!==!1&&t.push(Ox.configure(this.options.tableCell)),this.options.tableHeader!==!1&&t.push(Rx.configure(this.options.tableHeader)),this.options.tableRow!==!1&&t.push(Dx.configure(this.options.tableRow)),t}});var Wx=F.create({name:\"text\",group:\"inline\",parseMarkdown:t=>({type:\"text\",text:t.text||\"\"}),renderMarkdown:t=>t.text||\"\"}),Zh=Wx;var jx=U.create({name:\"textAlign\",addOptions(){return{types:[],alignments:[\"left\",\"center\",\"right\",\"justify\"],defaultAlignment:null}},addGlobalAttributes(){return[{types:this.options.types,attributes:{textAlign:{default:this.options.defaultAlignment,parseHTML:t=>{let e=t.style.textAlign;return this.options.alignments.includes(e)?e:this.options.defaultAlignment},renderHTML:t=>t.textAlign?{style:`text-align: ${t.textAlign}`}:{}}}}]},addCommands(){return{setTextAlign:t=>({commands:e})=>this.options.alignments.includes(t)?this.options.types.map(n=>e.updateAttributes(n,{textAlign:t})).some(n=>n):!1,unsetTextAlign:()=>({commands:t})=>this.options.types.map(e=>t.resetAttributes(e,\"textAlign\")).some(e=>e),toggleTextAlign:t=>({editor:e,commands:n})=>this.options.alignments.includes(t)?e.isActive({textAlign:t})?n.unsetTextAlign():n.setTextAlign(t):!1}},addKeyboardShortcuts(){return{\"Mod-Shift-l\":()=>this.editor.commands.setTextAlign(\"left\"),\"Mod-Shift-e\":()=>this.editor.commands.setTextAlign(\"center\"),\"Mod-Shift-r\":()=>this.editor.commands.setTextAlign(\"right\"),\"Mod-Shift-j\":()=>this.editor.commands.setTextAlign(\"justify\")}}}),ep=jx;var Ux=ee.create({name:\"underline\",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:\"u\"},{style:\"text-decoration\",consuming:!1,getAttrs:t=>t.includes(\"underline\")?{}:!1}]},renderHTML({HTMLAttributes:t}){return[\"u\",R(this.options.HTMLAttributes,t),0]},parseMarkdown(t,e){return e.applyMark(this.name||\"underline\",e.parseInline(t.tokens||[]))},renderMarkdown(t,e){return`++${e.renderChildren(t)}++`},markdownTokenizer:{name:\"underline\",level:\"inline\",start(t){return t.indexOf(\"++\")},tokenize(t,e,n){let o=/^(\\+\\+)([\\s\\S]+?)(\\+\\+)/.exec(t);if(!o)return;let i=o[2].trim();return{type:\"underline\",raw:o[0],text:i,tokens:n.inlineTokens(i)}}},addCommands(){return{setUnderline:()=>({commands:t})=>t.setMark(this.name),toggleUnderline:()=>({commands:t})=>t.toggleMark(this.name),unsetUnderline:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{\"Mod-u\":()=>this.editor.commands.toggleUnderline(),\"Mod-U\":()=>this.editor.commands.toggleUnderline()}}}),tp=Ux;var np=(t,e)=>{Ln({getBoundingClientRect:()=>{let{from:r,to:o}=t.state.selection,i=t.view.coordsAtPos(r),s=t.view.coordsAtPos(o);return{top:Math.min(i.top,s.top),bottom:Math.max(i.bottom,s.bottom),left:Math.min(i.left,s.left),right:Math.max(i.right,s.right),width:Math.abs(s.right-i.left),height:Math.abs(s.bottom-i.top),x:Math.min(i.left,s.left),y:Math.min(i.top,s.top)}}},e,{placement:\"bottom-start\",strategy:\"absolute\",middleware:[In(),Pn()]}).then(({x:r,y:o,strategy:i})=>{e.style.width=\"max-content\",e.style.position=i,e.style.left=`${r}px`,e.style.top=`${o}px`})},rp=({mergeTags:t,noMergeTagSearchResultsMessage:e})=>({items:({query:n})=>Object.entries(t).filter(([r,o])=>r.toLowerCase().replace(/\\s/g,\"\").includes(n.toLowerCase())||o.toLowerCase().replace(/\\s/g,\"\").includes(n.toLowerCase())).map(([r,o])=>({id:r,label:o})),render:()=>{let n,r=0,o=null,i=()=>{let f=document.createElement(\"div\");return f.className=\"fi-dropdown-panel fi-dropdown-list\",f.style.minWidth=\"12rem\",f},s=()=>{if(!n||!o)return;let f=o.items||[];if(n.innerHTML=\"\",f.length)f.forEach((h,p)=>{let m=document.createElement(\"button\");m.className=`fi-dropdown-list-item fi-dropdown-list-item-label ${p===r?\"fi-selected\":\"\"}`,m.textContent=h.label,m.type=\"button\",m.addEventListener(\"click\",()=>l(p)),n.appendChild(m)});else{let h=document.createElement(\"div\");h.className=\"fi-dropdown-header\";let p=document.createElement(\"span\");p.style.whiteSpace=\"normal\",p.textContent=e,h.appendChild(p),n.appendChild(h)}},l=f=>{if(!o)return;let p=(o.items||[])[f];p&&o.command({id:p.id})},a=()=>{if(!n||!o||o.items.length===0)return;let f=n.children[r];if(f){let h=f.getBoundingClientRect(),p=n.getBoundingClientRect();(h.top<p.top||h.bottom>p.bottom)&&f.scrollIntoView({block:\"nearest\"})}},c=()=>{if(!o)return;let f=o.items||[];f.length!==0&&(r=(r+f.length-1)%f.length,s(),a())},d=()=>{if(!o)return;let f=o.items||[];f.length!==0&&(r=(r+1)%f.length,s(),a())},u=()=>{l(r)};return{onStart:f=>{o=f,r=0,n=i(),n.style.position=\"absolute\",n.style.zIndex=\"50\",s(),document.body.appendChild(n),f.clientRect&&np(f.editor,n)},onUpdate:f=>{o=f,r=0,s(),a(),f.clientRect&&np(f.editor,n)},onKeyDown:f=>f.event.key===\"Escape\"?(n&&n.parentNode&&n.parentNode.removeChild(n),!0):f.event.key===\"ArrowUp\"?(c(),!0):f.event.key===\"ArrowDown\"?(d(),!0):f.event.key===\"Enter\"?(u(),!0):!1,onExit:()=>{n&&n.parentNode&&n.parentNode.removeChild(n)}}}});var op=async({$wire:t,acceptedFileTypes:e,acceptedFileTypesValidationMessage:n,canAttachFiles:r,customExtensionUrls:o,deleteCustomBlockButtonIconHtml:i,editCustomBlockButtonIconHtml:s,editCustomBlockUsing:l,getMentionLabelsUsing:a,getMentionSearchResultsUsing:c,hasResizableImages:d,insertCustomBlockUsing:u,key:f,linkProtocols:h,maxFileSize:p,maxFileSizeValidationMessage:m,mentions:g,mergeTags:y,noMergeTagSearchResultsMessage:w,placeholder:b,statePath:C,textColors:x,uploadingFileMessage:S})=>{let k=[Du,Iu,$l,Pu,Lu,Bu.configure({deleteCustomBlockButtonIconHtml:i,editCustomBlockButtonIconHtml:s,editCustomBlockUsing:l,insertCustomBlockUsing:u}),Hu,Fu,$u,Vu,Nu.configure({class:\"fi-not-prose\"}),Ou,_u,Wu,ju,Uu,Ku,qu,Ju,Xu.configure({inline:!0,resize:{enabled:d,alwaysPreserveAspectRatio:!0,allowBase64:!0}}),Yu,pf.configure({autolink:!0,openOnClick:!1,protocols:h}),Fl,...r?[Af.configure({acceptedTypes:e,acceptedTypesValidationMessage:n,get$WireUsing:()=>t,key:f,maxSize:p,maxSizeValidationMessage:m,statePath:C,uploadingMessage:S})]:[],...Object.keys(y).length?[Ef.configure({deleteTriggerWithBackspace:!0,suggestion:rp({mergeTags:y,noMergeTagSearchResultsMessage:w}),mergeTags:y})]:[],...g.length?[mh.configure({HTMLAttributes:{class:\"fi-fo-rich-editor-mention\"},suggestions:g,getMentionSearchResultsUsing:c,getMentionLabelsUsing:a})]:[],_l,gh,Jl.configure({placeholder:b}),bh.configure({textColors:x}),yh,wh,xh,kh,Qh.configure({table:{resizable:!0}}),Zh,ep.configure({types:[\"heading\",\"paragraph\"],alignments:[\"start\",\"center\",\"end\",\"justify\"],defaultAlignment:\"start\"}),tp,Ru],O=await Promise.all(o.map(async T=>{new RegExp(\"^(?:[a-z+]+:)?//\",\"i\").test(T)||(T=new URL(T,document.baseURI).href);try{let $=(await import(T)).default;return typeof $==\"function\"?$():$}catch($){return console.error(`Failed to load rich editor custom extension from [${T}]:`,$),null}}));for(let T of O){if(!T||!T.name)continue;let A=k.findIndex($=>$.name===T.name);T.name===\"placeholder\"&&T.parent===null&&(T=Jl.configure(T.options)),A!==-1?k[A]=T:k.push(T)}return k};function Kx(t,e){let n=Math.min(t.top,e.top),r=Math.max(t.bottom,e.bottom),o=Math.min(t.left,e.left),s=Math.max(t.right,e.right)-o,l=r-n,a=o,c=n;return new DOMRect(a,c,s,l)}var qx=class{constructor({editor:t,element:e,view:n,updateDelay:r=250,resizeDelay:o=60,shouldShow:i,appendTo:s,getReferencedVirtualElement:l,options:a}){this.preventHide=!1,this.isVisible=!1,this.scrollTarget=window,this.floatingUIOptions={strategy:\"absolute\",placement:\"top\",offset:8,flip:{},shift:{},arrow:!1,size:!1,autoPlacement:!1,hide:!1,inline:!1,onShow:void 0,onHide:void 0,onUpdate:void 0,onDestroy:void 0},this.shouldShow=({view:d,state:u,from:f,to:h})=>{let{doc:p,selection:m}=u,{empty:g}=m,y=!p.textBetween(f,h).length&&fo(u.selection),w=this.element.contains(document.activeElement);return!(!(d.hasFocus()||w)||g||y||!this.editor.isEditable)},this.mousedownHandler=()=>{this.preventHide=!0},this.dragstartHandler=()=>{this.hide()},this.resizeHandler=()=>{this.resizeDebounceTimer&&clearTimeout(this.resizeDebounceTimer),this.resizeDebounceTimer=window.setTimeout(()=>{this.updatePosition()},this.resizeDelay)},this.focusHandler=()=>{setTimeout(()=>this.update(this.editor.view))},this.blurHandler=({event:d})=>{var u;if(this.editor.isDestroyed){this.destroy();return}if(this.preventHide){this.preventHide=!1;return}d?.relatedTarget&&((u=this.element.parentNode)!=null&&u.contains(d.relatedTarget))||d?.relatedTarget!==this.editor.view.dom&&this.hide()},this.handleDebouncedUpdate=(d,u)=>{let f=!u?.selection.eq(d.state.selection),h=!u?.doc.eq(d.state.doc);!f&&!h||(this.updateDebounceTimer&&clearTimeout(this.updateDebounceTimer),this.updateDebounceTimer=window.setTimeout(()=>{this.updateHandler(d,f,h,u)},this.updateDelay))},this.updateHandler=(d,u,f,h)=>{let{composing:p}=d;if(p||!u&&!f)return;if(!this.getShouldShow(h)){this.hide();return}this.updatePosition(),this.show()},this.transactionHandler=({transaction:d})=>{d.getMeta(\"bubbleMenu\")===\"updatePosition\"&&this.updatePosition()};var c;this.editor=t,this.element=e,this.view=n,this.updateDelay=r,this.resizeDelay=o,this.appendTo=s,this.scrollTarget=(c=a?.scrollTarget)!=null?c:window,this.getReferencedVirtualElement=l,this.floatingUIOptions={...this.floatingUIOptions,...a},this.element.tabIndex=0,i&&(this.shouldShow=i),this.element.addEventListener(\"mousedown\",this.mousedownHandler,{capture:!0}),this.view.dom.addEventListener(\"dragstart\",this.dragstartHandler),this.editor.on(\"focus\",this.focusHandler),this.editor.on(\"blur\",this.blurHandler),this.editor.on(\"transaction\",this.transactionHandler),window.addEventListener(\"resize\",this.resizeHandler),this.scrollTarget.addEventListener(\"scroll\",this.resizeHandler),this.update(n,n.state),this.getShouldShow()&&(this.show(),this.updatePosition())}get middlewares(){let t=[];return this.floatingUIOptions.flip&&t.push(Pn(typeof this.floatingUIOptions.flip!=\"boolean\"?this.floatingUIOptions.flip:void 0)),this.floatingUIOptions.shift&&t.push(In(typeof this.floatingUIOptions.shift!=\"boolean\"?this.floatingUIOptions.shift:void 0)),this.floatingUIOptions.offset&&t.push(lh(typeof this.floatingUIOptions.offset!=\"boolean\"?this.floatingUIOptions.offset:void 0)),this.floatingUIOptions.arrow&&t.push(uh(this.floatingUIOptions.arrow)),this.floatingUIOptions.size&&t.push(ch(typeof this.floatingUIOptions.size!=\"boolean\"?this.floatingUIOptions.size:void 0)),this.floatingUIOptions.autoPlacement&&t.push(ah(typeof this.floatingUIOptions.autoPlacement!=\"boolean\"?this.floatingUIOptions.autoPlacement:void 0)),this.floatingUIOptions.hide&&t.push(dh(typeof this.floatingUIOptions.hide!=\"boolean\"?this.floatingUIOptions.hide:void 0)),this.floatingUIOptions.inline&&t.push(fh(typeof this.floatingUIOptions.inline!=\"boolean\"?this.floatingUIOptions.inline:void 0)),t}get virtualElement(){var t;let{selection:e}=this.editor.state,n=(t=this.getReferencedVirtualElement)==null?void 0:t.call(this);if(n)return n;let r=tu(this.view,e.from,e.to),o={getBoundingClientRect:()=>r,getClientRects:()=>[r]};if(e instanceof L){let i=this.view.nodeDOM(e.from),s=i.dataset.nodeViewWrapper?i:i.querySelector(\"[data-node-view-wrapper]\");s&&(i=s),i&&(o={getBoundingClientRect:()=>i.getBoundingClientRect(),getClientRects:()=>[i.getBoundingClientRect()]})}if(e instanceof X){let{$anchorCell:i,$headCell:s}=e,l=i?i.pos:s.pos,a=s?s.pos:i.pos,c=this.view.nodeDOM(l),d=this.view.nodeDOM(a);if(!c||!d)return;let u=c===d?c.getBoundingClientRect():Kx(c.getBoundingClientRect(),d.getBoundingClientRect());o={getBoundingClientRect:()=>u,getClientRects:()=>[u]}}return o}updatePosition(){let t=this.virtualElement;t&&Ln(t,this.element,{placement:this.floatingUIOptions.placement,strategy:this.floatingUIOptions.strategy,middleware:this.middlewares}).then(({x:e,y:n,strategy:r})=>{this.element.style.width=\"max-content\",this.element.style.position=r,this.element.style.left=`${e}px`,this.element.style.top=`${n}px`,this.isVisible&&this.floatingUIOptions.onUpdate&&this.floatingUIOptions.onUpdate()})}update(t,e){let{state:n}=t,r=n.selection.from!==n.selection.to;if(this.updateDelay>0&&r){this.handleDebouncedUpdate(t,e);return}let o=!e?.selection.eq(t.state.selection),i=!e?.doc.eq(t.state.doc);this.updateHandler(t,o,i,e)}getShouldShow(t){var e;let{state:n}=this.view,{selection:r}=n,{ranges:o}=r,i=Math.min(...o.map(a=>a.$from.pos)),s=Math.max(...o.map(a=>a.$to.pos));return((e=this.shouldShow)==null?void 0:e.call(this,{editor:this.editor,element:this.element,view:this.view,state:n,oldState:t,from:i,to:s}))||!1}show(){var t;if(this.isVisible)return;this.element.style.visibility=\"visible\",this.element.style.opacity=\"1\";let e=typeof this.appendTo==\"function\"?this.appendTo():this.appendTo;(t=e??this.view.dom.parentElement)==null||t.appendChild(this.element),this.floatingUIOptions.onShow&&this.floatingUIOptions.onShow(),this.isVisible=!0}hide(){this.isVisible&&(this.element.style.visibility=\"hidden\",this.element.style.opacity=\"0\",this.element.remove(),this.floatingUIOptions.onHide&&this.floatingUIOptions.onHide(),this.isVisible=!1)}destroy(){this.hide(),this.element.removeEventListener(\"mousedown\",this.mousedownHandler,{capture:!0}),this.view.dom.removeEventListener(\"dragstart\",this.dragstartHandler),window.removeEventListener(\"resize\",this.resizeHandler),this.scrollTarget.removeEventListener(\"scroll\",this.resizeHandler),this.editor.off(\"focus\",this.focusHandler),this.editor.off(\"blur\",this.blurHandler),this.editor.off(\"transaction\",this.transactionHandler),this.floatingUIOptions.onDestroy&&this.floatingUIOptions.onDestroy()}},la=t=>new P({key:typeof t.pluginKey==\"string\"?new H(t.pluginKey):t.pluginKey,view:e=>new qx({view:e,...t})}),kT=U.create({name:\"bubbleMenu\",addOptions(){return{element:null,pluginKey:\"bubbleMenu\",updateDelay:void 0,appendTo:void 0,shouldShow:null}},addProseMirrorPlugins(){return this.options.element?[la({pluginKey:this.options.pluginKey,editor:this.editor,element:this.options.element,updateDelay:this.options.updateDelay,options:this.options.options,appendTo:this.options.appendTo,getReferencedVirtualElement:this.options.getReferencedVirtualElement,shouldShow:this.options.shouldShow})]:[]}});function Jx({acceptedFileTypes:t,acceptedFileTypesValidationMessage:e,activePanel:n,canAttachFiles:r,deleteCustomBlockButtonIconHtml:o,editCustomBlockButtonIconHtml:i,extensions:s,floatingToolbars:l,hasResizableImages:a,isDisabled:c,isLiveDebounced:d,isLiveOnBlur:u,key:f,linkProtocols:h,liveDebounce:p,livewireId:m,maxFileSize:g,maxFileSizeValidationMessage:y,mergeTags:w,mentions:b,getMentionSearchResultsUsing:C,getMentionLabelsUsing:x,noMergeTagSearchResultsMessage:S,placeholder:k,state:O,statePath:T,textColors:A,uploadingFileMessage:$}){let z,K=[],V=!1;return{state:O,activePanel:n,editorSelection:{type:\"text\",anchor:1,head:1},isUploadingFile:!1,fileValidationMessage:null,shouldUpdateState:!0,editorUpdatedAt:Date.now(),async init(){z=new gu({editable:!c,element:this.$refs.editor,extensions:await op({acceptedFileTypes:t,acceptedFileTypesValidationMessage:e,canAttachFiles:r,customExtensionUrls:s,deleteCustomBlockButtonIconHtml:o,editCustomBlockButtonIconHtml:i,editCustomBlockUsing:(q,We)=>this.$wire.mountAction(\"customBlock\",{editorSelection:this.editorSelection,id:q,config:We,mode:\"edit\"},{schemaComponent:f}),floatingToolbars:l,hasResizableImages:a,insertCustomBlockUsing:(q,We=null)=>this.$wire.mountAction(\"customBlock\",{id:q,dragPosition:We,mode:\"insert\"},{schemaComponent:f}),key:f,linkProtocols:h,maxFileSize:g,maxFileSizeValidationMessage:y,mergeTags:w,mentions:b,getMentionSearchResultsUsing:C,getMentionLabelsUsing:x,noMergeTagSearchResultsMessage:S,placeholder:k,statePath:T,textColors:A,uploadingFileMessage:$,$wire:this.$wire}),content:this.state});let N=\"paragraph\"in l;Object.keys(l).forEach(q=>{let We=this.$refs[`floatingToolbar::${q}`];if(!We){console.warn(`Floating toolbar [${q}] not found.`);return}z.registerPlugin(la({editor:z,element:We,pluginKey:`floatingToolbar::${q}`,shouldShow:({editor:je})=>q===\"paragraph\"?je.isFocused&&je.isActive(q)&&!je.state.selection.empty:N&&!je.state.selection.empty&&je.isActive(\"paragraph\")?!1:je.isFocused&&je.isActive(q),options:{placement:\"bottom\",offset:15}}))}),z.on(\"create\",()=>{this.editorUpdatedAt=Date.now()});let _=Alpine.debounce(()=>{V||this.$wire.commit()},p??300);z.on(\"update\",({editor:q})=>this.$nextTick(()=>{V||(this.editorUpdatedAt=Date.now(),this.state=q.getJSON(),this.shouldUpdateState=!1,this.fileValidationMessage=null,d&&_())})),z.on(\"selectionUpdate\",({transaction:q})=>{V||(this.editorUpdatedAt=Date.now(),this.editorSelection=q.selection.toJSON())}),z.on(\"transaction\",()=>{V||(this.editorUpdatedAt=Date.now())}),u&&z.on(\"blur\",()=>{V||this.$wire.commit()}),this.$watch(\"state\",()=>{if(!V){if(!this.shouldUpdateState){this.shouldUpdateState=!0;return}z.commands.setContent(this.state)}});let W=q=>{q.detail.livewireId===m&&q.detail.key===f&&this.runEditorCommands(q.detail)};window.addEventListener(\"run-rich-editor-commands\",W),K.push([\"run-rich-editor-commands\",W]);let Q=q=>{q.detail.livewireId===m&&q.detail.key===f&&(this.isUploadingFile=!0,this.fileValidationMessage=null,q.stopPropagation())};window.addEventListener(\"rich-editor-uploading-file\",Q),K.push([\"rich-editor-uploading-file\",Q]);let me=q=>{q.detail.livewireId===m&&q.detail.key===f&&(this.isUploadingFile=!1,q.stopPropagation())};window.addEventListener(\"rich-editor-uploaded-file\",me),K.push([\"rich-editor-uploaded-file\",me]);let Ge=q=>{q.detail.livewireId===m&&q.detail.key===f&&(this.isUploadingFile=!1,this.fileValidationMessage=q.detail.validationMessage,q.stopPropagation())};window.addEventListener(\"rich-editor-file-validation-message\",Ge),K.push([\"rich-editor-file-validation-message\",Ge]),window.dispatchEvent(new CustomEvent(`schema-component-${m}-${f}-loaded`))},getEditor(){return z},$getEditor(){return this.getEditor()},setEditorSelection(N){N&&(this.editorSelection=N,z.chain().command(({tr:_})=>(_.setSelection(I.fromJSON(z.state.doc,this.editorSelection)),!0)).run())},runEditorCommands({commands:N,editorSelection:_}){this.setEditorSelection(_);let W=z.chain();N.forEach(Q=>W=W[Q.name](...Q.arguments??[])),W.run()},togglePanel(N=null){if(this.isPanelActive(N)){this.activePanel=null;return}this.activePanel=N},isPanelActive(N=null){return N===null?this.activePanel!==null:this.activePanel===N},insertMergeTag(N){z.chain().focus().insertContent([{type:\"mergeTag\",attrs:{id:N}},{type:\"text\",text:\" \"}]).run()},destroy(){V=!0,K.forEach(([N,_])=>{window.removeEventListener(N,_)}),K=[],z&&(z.destroy(),z=null),this.shouldUpdateState=!0}}}export{Jx as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/select.js",
    "content": "var Ft=Math.min,vt=Math.max,Ht=Math.round;var st=n=>({x:n,y:n}),ji={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},qi={start:\"end\",end:\"start\"};function De(n,t,e){return vt(n,Ft(t,e))}function Vt(n,t){return typeof n==\"function\"?n(t):n}function yt(n){return n.split(\"-\")[0]}function Wt(n){return n.split(\"-\")[1]}function Ae(n){return n===\"x\"?\"y\":\"x\"}function Ce(n){return n===\"y\"?\"height\":\"width\"}var Ji=new Set([\"top\",\"bottom\"]);function ht(n){return Ji.has(yt(n))?\"y\":\"x\"}function Le(n){return Ae(ht(n))}function Je(n,t,e){e===void 0&&(e=!1);let i=Wt(n),o=Le(n),s=Ce(o),r=o===\"x\"?i===(e?\"end\":\"start\")?\"right\":\"left\":i===\"start\"?\"bottom\":\"top\";return t.reference[s]>t.floating[s]&&(r=Bt(r)),[r,Bt(r)]}function Qe(n){let t=Bt(n);return[ie(n),t,ie(t)]}function ie(n){return n.replace(/start|end/g,t=>qi[t])}var je=[\"left\",\"right\"],qe=[\"right\",\"left\"],Qi=[\"top\",\"bottom\"],Zi=[\"bottom\",\"top\"];function tn(n,t,e){switch(n){case\"top\":case\"bottom\":return e?t?qe:je:t?je:qe;case\"left\":case\"right\":return t?Qi:Zi;default:return[]}}function Ze(n,t,e,i){let o=Wt(n),s=tn(yt(n),e===\"start\",i);return o&&(s=s.map(r=>r+\"-\"+o),t&&(s=s.concat(s.map(ie)))),s}function Bt(n){return n.replace(/left|right|bottom|top/g,t=>ji[t])}function en(n){return{top:0,right:0,bottom:0,left:0,...n}}function ti(n){return typeof n!=\"number\"?en(n):{top:n,right:n,bottom:n,left:n}}function Ot(n){let{x:t,y:e,width:i,height:o}=n;return{width:i,height:o,top:e,left:t,right:t+i,bottom:e+o,x:t,y:e}}function ei(n,t,e){let{reference:i,floating:o}=n,s=ht(t),r=Le(t),a=Ce(r),l=yt(t),c=s===\"y\",f=i.x+i.width/2-o.width/2,d=i.y+i.height/2-o.height/2,p=i[a]/2-o[a]/2,u;switch(l){case\"top\":u={x:f,y:i.y-o.height};break;case\"bottom\":u={x:f,y:i.y+i.height};break;case\"right\":u={x:i.x+i.width,y:d};break;case\"left\":u={x:i.x-o.width,y:d};break;default:u={x:i.x,y:i.y}}switch(Wt(t)){case\"start\":u[r]-=p*(e&&c?-1:1);break;case\"end\":u[r]+=p*(e&&c?-1:1);break}return u}var ii=async(n,t,e)=>{let{placement:i=\"bottom\",strategy:o=\"absolute\",middleware:s=[],platform:r}=e,a=s.filter(Boolean),l=await(r.isRTL==null?void 0:r.isRTL(t)),c=await r.getElementRects({reference:n,floating:t,strategy:o}),{x:f,y:d}=ei(c,i,l),p=i,u={},g=0;for(let m=0;m<a.length;m++){let{name:S,fn:E}=a[m],{x:w,y:D,data:A,reset:C}=await E({x:f,y:d,initialPlacement:i,placement:p,strategy:o,middlewareData:u,rects:c,platform:r,elements:{reference:n,floating:t}});f=w??f,d=D??d,u={...u,[S]:{...u[S],...A}},C&&g<=50&&(g++,typeof C==\"object\"&&(C.placement&&(p=C.placement),C.rects&&(c=C.rects===!0?await r.getElementRects({reference:n,floating:t,strategy:o}):C.rects),{x:f,y:d}=ei(c,p,l)),m=-1)}return{x:f,y:d,placement:p,strategy:o,middlewareData:u}};async function Ie(n,t){var e;t===void 0&&(t={});let{x:i,y:o,platform:s,rects:r,elements:a,strategy:l}=n,{boundary:c=\"clippingAncestors\",rootBoundary:f=\"viewport\",elementContext:d=\"floating\",altBoundary:p=!1,padding:u=0}=Vt(t,n),g=ti(u),S=a[p?d===\"floating\"?\"reference\":\"floating\":d],E=Ot(await s.getClippingRect({element:(e=await(s.isElement==null?void 0:s.isElement(S)))==null||e?S:S.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:c,rootBoundary:f,strategy:l})),w=d===\"floating\"?{x:i,y:o,width:r.floating.width,height:r.floating.height}:r.reference,D=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),A=await(s.isElement==null?void 0:s.isElement(D))?await(s.getScale==null?void 0:s.getScale(D))||{x:1,y:1}:{x:1,y:1},C=Ot(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:w,offsetParent:D,strategy:l}):w);return{top:(E.top-C.top+g.top)/A.y,bottom:(C.bottom-E.bottom+g.bottom)/A.y,left:(E.left-C.left+g.left)/A.x,right:(C.right-E.right+g.right)/A.x}}var ni=function(n){return n===void 0&&(n={}),{name:\"flip\",options:n,async fn(t){var e,i;let{placement:o,middlewareData:s,rects:r,initialPlacement:a,platform:l,elements:c}=t,{mainAxis:f=!0,crossAxis:d=!0,fallbackPlacements:p,fallbackStrategy:u=\"bestFit\",fallbackAxisSideDirection:g=\"none\",flipAlignment:m=!0,...S}=Vt(n,t);if((e=s.arrow)!=null&&e.alignmentOffset)return{};let E=yt(o),w=ht(a),D=yt(a)===a,A=await(l.isRTL==null?void 0:l.isRTL(c.floating)),C=p||(D||!m?[Bt(a)]:Qe(a)),F=g!==\"none\";!p&&F&&C.push(...Ze(a,m,g,A));let q=[a,...C],J=await Ie(t,S),_=[],V=((i=s.flip)==null?void 0:i.overflows)||[];if(f&&_.push(J[E]),d){let k=Je(o,r,A);_.push(J[k[0]],J[k[1]])}if(V=[...V,{placement:o,overflows:_}],!_.every(k=>k<=0)){var W,tt;let k=(((W=s.flip)==null?void 0:W.index)||0)+1,Y=q[k];if(Y&&(!(d===\"alignment\"?w!==ht(Y):!1)||V.every(L=>ht(L.placement)===w?L.overflows[0]>0:!0)))return{data:{index:k,overflows:V},reset:{placement:Y}};let B=(tt=V.filter(X=>X.overflows[0]<=0).sort((X,L)=>X.overflows[1]-L.overflows[1])[0])==null?void 0:tt.placement;if(!B)switch(u){case\"bestFit\":{var z;let X=(z=V.filter(L=>{if(F){let et=ht(L.placement);return et===w||et===\"y\"}return!0}).map(L=>[L.placement,L.overflows.filter(et=>et>0).reduce((et,ee)=>et+ee,0)]).sort((L,et)=>L[1]-et[1])[0])==null?void 0:z[0];X&&(B=X);break}case\"initialPlacement\":B=a;break}if(o!==B)return{reset:{placement:B}}}return{}}}};var nn=new Set([\"left\",\"top\"]);async function on(n,t){let{placement:e,platform:i,elements:o}=n,s=await(i.isRTL==null?void 0:i.isRTL(o.floating)),r=yt(e),a=Wt(e),l=ht(e)===\"y\",c=nn.has(r)?-1:1,f=s&&l?-1:1,d=Vt(t,n),{mainAxis:p,crossAxis:u,alignmentAxis:g}=typeof d==\"number\"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return a&&typeof g==\"number\"&&(u=a===\"end\"?g*-1:g),l?{x:u*f,y:p*c}:{x:p*c,y:u*f}}var oi=function(n){return n===void 0&&(n=0),{name:\"offset\",options:n,async fn(t){var e,i;let{x:o,y:s,placement:r,middlewareData:a}=t,l=await on(t,n);return r===((e=a.offset)==null?void 0:e.placement)&&(i=a.arrow)!=null&&i.alignmentOffset?{}:{x:o+l.x,y:s+l.y,data:{...l,placement:r}}}}},si=function(n){return n===void 0&&(n={}),{name:\"shift\",options:n,async fn(t){let{x:e,y:i,placement:o}=t,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:S=>{let{x:E,y:w}=S;return{x:E,y:w}}},...l}=Vt(n,t),c={x:e,y:i},f=await Ie(t,l),d=ht(yt(o)),p=Ae(d),u=c[p],g=c[d];if(s){let S=p===\"y\"?\"top\":\"left\",E=p===\"y\"?\"bottom\":\"right\",w=u+f[S],D=u-f[E];u=De(w,u,D)}if(r){let S=d===\"y\"?\"top\":\"left\",E=d===\"y\"?\"bottom\":\"right\",w=g+f[S],D=g-f[E];g=De(w,g,D)}let m=a.fn({...t,[p]:u,[d]:g});return{...m,data:{x:m.x-e,y:m.y-i,enabled:{[p]:s,[d]:r}}}}}};function oe(){return typeof window<\"u\"}function Et(n){return ai(n)?(n.nodeName||\"\").toLowerCase():\"#document\"}function U(n){var t;return(n==null||(t=n.ownerDocument)==null?void 0:t.defaultView)||window}function ct(n){var t;return(t=(ai(n)?n.ownerDocument:n.document)||window.document)==null?void 0:t.documentElement}function ai(n){return oe()?n instanceof Node||n instanceof U(n).Node:!1}function it(n){return oe()?n instanceof Element||n instanceof U(n).Element:!1}function rt(n){return oe()?n instanceof HTMLElement||n instanceof U(n).HTMLElement:!1}function ri(n){return!oe()||typeof ShadowRoot>\"u\"?!1:n instanceof ShadowRoot||n instanceof U(n).ShadowRoot}var sn=new Set([\"inline\",\"contents\"]);function It(n){let{overflow:t,overflowX:e,overflowY:i,display:o}=nt(n);return/auto|scroll|overlay|hidden|clip/.test(t+i+e)&&!sn.has(o)}var rn=new Set([\"table\",\"td\",\"th\"]);function li(n){return rn.has(Et(n))}var an=[\":popover-open\",\":modal\"];function zt(n){return an.some(t=>{try{return n.matches(t)}catch{return!1}})}var ln=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],cn=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],dn=[\"paint\",\"layout\",\"strict\",\"content\"];function se(n){let t=re(),e=it(n)?nt(n):n;return ln.some(i=>e[i]?e[i]!==\"none\":!1)||(e.containerType?e.containerType!==\"normal\":!1)||!t&&(e.backdropFilter?e.backdropFilter!==\"none\":!1)||!t&&(e.filter?e.filter!==\"none\":!1)||cn.some(i=>(e.willChange||\"\").includes(i))||dn.some(i=>(e.contain||\"\").includes(i))}function ci(n){let t=ut(n);for(;rt(t)&&!Dt(t);){if(se(t))return t;if(zt(t))return null;t=ut(t)}return null}function re(){return typeof CSS>\"u\"||!CSS.supports?!1:CSS.supports(\"-webkit-backdrop-filter\",\"none\")}var fn=new Set([\"html\",\"body\",\"#document\"]);function Dt(n){return fn.has(Et(n))}function nt(n){return U(n).getComputedStyle(n)}function Xt(n){return it(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function ut(n){if(Et(n)===\"html\")return n;let t=n.assignedSlot||n.parentNode||ri(n)&&n.host||ct(n);return ri(t)?t.host:t}function di(n){let t=ut(n);return Dt(t)?n.ownerDocument?n.ownerDocument.body:n.body:rt(t)&&It(t)?t:di(t)}function ne(n,t,e){var i;t===void 0&&(t=[]),e===void 0&&(e=!0);let o=di(n),s=o===((i=n.ownerDocument)==null?void 0:i.body),r=U(o);if(s){let a=ae(r);return t.concat(r,r.visualViewport||[],It(o)?o:[],a&&e?ne(a):[])}return t.concat(o,ne(o,[],e))}function ae(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}function pi(n){let t=nt(n),e=parseFloat(t.width)||0,i=parseFloat(t.height)||0,o=rt(n),s=o?n.offsetWidth:e,r=o?n.offsetHeight:i,a=Ht(e)!==s||Ht(i)!==r;return a&&(e=s,i=r),{width:e,height:i,$:a}}function gi(n){return it(n)?n:n.contextElement}function Tt(n){let t=gi(n);if(!rt(t))return st(1);let e=t.getBoundingClientRect(),{width:i,height:o,$:s}=pi(t),r=(s?Ht(e.width):e.width)/i,a=(s?Ht(e.height):e.height)/o;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}var hn=st(0);function mi(n){let t=U(n);return!re()||!t.visualViewport?hn:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function un(n,t,e){return t===void 0&&(t=!1),!e||t&&e!==U(n)?!1:t}function $t(n,t,e,i){t===void 0&&(t=!1),e===void 0&&(e=!1);let o=n.getBoundingClientRect(),s=gi(n),r=st(1);t&&(i?it(i)&&(r=Tt(i)):r=Tt(n));let a=un(s,e,i)?mi(s):st(0),l=(o.left+a.x)/r.x,c=(o.top+a.y)/r.y,f=o.width/r.x,d=o.height/r.y;if(s){let p=U(s),u=i&&it(i)?U(i):i,g=p,m=ae(g);for(;m&&i&&u!==g;){let S=Tt(m),E=m.getBoundingClientRect(),w=nt(m),D=E.left+(m.clientLeft+parseFloat(w.paddingLeft))*S.x,A=E.top+(m.clientTop+parseFloat(w.paddingTop))*S.y;l*=S.x,c*=S.y,f*=S.x,d*=S.y,l+=D,c+=A,g=U(m),m=ae(g)}}return Ot({width:f,height:d,x:l,y:c})}function le(n,t){let e=Xt(n).scrollLeft;return t?t.left+e:$t(ct(n)).left+e}function bi(n,t){let e=n.getBoundingClientRect(),i=e.left+t.scrollLeft-le(n,e),o=e.top+t.scrollTop;return{x:i,y:o}}function pn(n){let{elements:t,rect:e,offsetParent:i,strategy:o}=n,s=o===\"fixed\",r=ct(i),a=t?zt(t.floating):!1;if(i===r||a&&s)return e;let l={scrollLeft:0,scrollTop:0},c=st(1),f=st(0),d=rt(i);if((d||!d&&!s)&&((Et(i)!==\"body\"||It(r))&&(l=Xt(i)),rt(i))){let u=$t(i);c=Tt(i),f.x=u.x+i.clientLeft,f.y=u.y+i.clientTop}let p=r&&!d&&!s?bi(r,l):st(0);return{width:e.width*c.x,height:e.height*c.y,x:e.x*c.x-l.scrollLeft*c.x+f.x+p.x,y:e.y*c.y-l.scrollTop*c.y+f.y+p.y}}function gn(n){return Array.from(n.getClientRects())}function mn(n){let t=ct(n),e=Xt(n),i=n.ownerDocument.body,o=vt(t.scrollWidth,t.clientWidth,i.scrollWidth,i.clientWidth),s=vt(t.scrollHeight,t.clientHeight,i.scrollHeight,i.clientHeight),r=-e.scrollLeft+le(n),a=-e.scrollTop;return nt(i).direction===\"rtl\"&&(r+=vt(t.clientWidth,i.clientWidth)-o),{width:o,height:s,x:r,y:a}}var fi=25;function bn(n,t){let e=U(n),i=ct(n),o=e.visualViewport,s=i.clientWidth,r=i.clientHeight,a=0,l=0;if(o){s=o.width,r=o.height;let f=re();(!f||f&&t===\"fixed\")&&(a=o.offsetLeft,l=o.offsetTop)}let c=le(i);if(c<=0){let f=i.ownerDocument,d=f.body,p=getComputedStyle(d),u=f.compatMode===\"CSS1Compat\"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,g=Math.abs(i.clientWidth-d.clientWidth-u);g<=fi&&(s-=g)}else c<=fi&&(s+=c);return{width:s,height:r,x:a,y:l}}var vn=new Set([\"absolute\",\"fixed\"]);function yn(n,t){let e=$t(n,!0,t===\"fixed\"),i=e.top+n.clientTop,o=e.left+n.clientLeft,s=rt(n)?Tt(n):st(1),r=n.clientWidth*s.x,a=n.clientHeight*s.y,l=o*s.x,c=i*s.y;return{width:r,height:a,x:l,y:c}}function hi(n,t,e){let i;if(t===\"viewport\")i=bn(n,e);else if(t===\"document\")i=mn(ct(n));else if(it(t))i=yn(t,e);else{let o=mi(n);i={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return Ot(i)}function vi(n,t){let e=ut(n);return e===t||!it(e)||Dt(e)?!1:nt(e).position===\"fixed\"||vi(e,t)}function wn(n,t){let e=t.get(n);if(e)return e;let i=ne(n,[],!1).filter(a=>it(a)&&Et(a)!==\"body\"),o=null,s=nt(n).position===\"fixed\",r=s?ut(n):n;for(;it(r)&&!Dt(r);){let a=nt(r),l=se(r);!l&&a.position===\"fixed\"&&(o=null),(s?!l&&!o:!l&&a.position===\"static\"&&!!o&&vn.has(o.position)||It(r)&&!l&&vi(n,r))?i=i.filter(f=>f!==r):o=a,r=ut(r)}return t.set(n,i),i}function Sn(n){let{element:t,boundary:e,rootBoundary:i,strategy:o}=n,r=[...e===\"clippingAncestors\"?zt(t)?[]:wn(t,this._c):[].concat(e),i],a=r[0],l=r.reduce((c,f)=>{let d=hi(t,f,o);return c.top=vt(d.top,c.top),c.right=Ft(d.right,c.right),c.bottom=Ft(d.bottom,c.bottom),c.left=vt(d.left,c.left),c},hi(t,a,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function xn(n){let{width:t,height:e}=pi(n);return{width:t,height:e}}function On(n,t,e){let i=rt(t),o=ct(t),s=e===\"fixed\",r=$t(n,!0,s,t),a={scrollLeft:0,scrollTop:0},l=st(0);function c(){l.x=le(o)}if(i||!i&&!s)if((Et(t)!==\"body\"||It(o))&&(a=Xt(t)),i){let u=$t(t,!0,s,t);l.x=u.x+t.clientLeft,l.y=u.y+t.clientTop}else o&&c();s&&!i&&o&&c();let f=o&&!i&&!s?bi(o,a):st(0),d=r.left+a.scrollLeft-l.x-f.x,p=r.top+a.scrollTop-l.y-f.y;return{x:d,y:p,width:r.width,height:r.height}}function Te(n){return nt(n).position===\"static\"}function ui(n,t){if(!rt(n)||nt(n).position===\"fixed\")return null;if(t)return t(n);let e=n.offsetParent;return ct(n)===e&&(e=e.ownerDocument.body),e}function yi(n,t){let e=U(n);if(zt(n))return e;if(!rt(n)){let o=ut(n);for(;o&&!Dt(o);){if(it(o)&&!Te(o))return o;o=ut(o)}return e}let i=ui(n,t);for(;i&&li(i)&&Te(i);)i=ui(i,t);return i&&Dt(i)&&Te(i)&&!se(i)?e:i||ci(n)||e}var En=async function(n){let t=this.getOffsetParent||yi,e=this.getDimensions,i=await e(n.floating);return{reference:On(n.reference,await t(n.floating),n.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}};function Dn(n){return nt(n).direction===\"rtl\"}var An={convertOffsetParentRelativeRectToViewportRelativeRect:pn,getDocumentElement:ct,getClippingRect:Sn,getOffsetParent:yi,getElementRects:En,getClientRects:gn,getDimensions:xn,getScale:Tt,isElement:it,isRTL:Dn};var wi=oi;var Si=si,xi=ni;var Oi=(n,t,e)=>{let i=new Map,o={platform:An,...e},s={...o.platform,_c:i};return ii(n,t,{...o,platform:s})};function Ei(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);t&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(n,o).enumerable})),e.push.apply(e,i)}return e}function ft(n){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?arguments[t]:{};t%2?Ei(Object(e),!0).forEach(function(i){Cn(n,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):Ei(Object(e)).forEach(function(i){Object.defineProperty(n,i,Object.getOwnPropertyDescriptor(e,i))})}return n}function ue(n){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?ue=function(t){return typeof t}:ue=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},ue(n)}function Cn(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}function gt(){return gt=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},gt.apply(this,arguments)}function Ln(n,t){if(n==null)return{};var e={},i=Object.keys(n),o,s;for(s=0;s<i.length;s++)o=i[s],!(t.indexOf(o)>=0)&&(e[o]=n[o]);return e}function In(n,t){if(n==null)return{};var e=Ln(n,t),i,o;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(n);for(o=0;o<s.length;o++)i=s[o],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(n,i)&&(e[i]=n[i])}return e}var Tn=\"1.15.6\";function pt(n){if(typeof window<\"u\"&&window.navigator)return!!navigator.userAgent.match(n)}var mt=pt(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),Zt=pt(/Edge/i),Di=pt(/firefox/i),Gt=pt(/safari/i)&&!pt(/chrome/i)&&!pt(/android/i),$e=pt(/iP(ad|od|hone)/i),Pi=pt(/chrome/i)&&pt(/android/i),Mi={capture:!1,passive:!1};function O(n,t,e){n.addEventListener(t,e,!mt&&Mi)}function x(n,t,e){n.removeEventListener(t,e,!mt&&Mi)}function ve(n,t){if(t){if(t[0]===\">\"&&(t=t.substring(1)),n)try{if(n.matches)return n.matches(t);if(n.msMatchesSelector)return n.msMatchesSelector(t);if(n.webkitMatchesSelector)return n.webkitMatchesSelector(t)}catch{return!1}return!1}}function Ni(n){return n.host&&n!==document&&n.host.nodeType?n.host:n.parentNode}function lt(n,t,e,i){if(n){e=e||document;do{if(t!=null&&(t[0]===\">\"?n.parentNode===e&&ve(n,t):ve(n,t))||i&&n===e)return n;if(n===e)break}while(n=Ni(n))}return null}var Ai=/\\s+/g;function Q(n,t,e){if(n&&t)if(n.classList)n.classList[e?\"add\":\"remove\"](t);else{var i=(\" \"+n.className+\" \").replace(Ai,\" \").replace(\" \"+t+\" \",\" \");n.className=(i+(e?\" \"+t:\"\")).replace(Ai,\" \")}}function b(n,t,e){var i=n&&n.style;if(i){if(e===void 0)return document.defaultView&&document.defaultView.getComputedStyle?e=document.defaultView.getComputedStyle(n,\"\"):n.currentStyle&&(e=n.currentStyle),t===void 0?e:e[t];!(t in i)&&t.indexOf(\"webkit\")===-1&&(t=\"-webkit-\"+t),i[t]=e+(typeof e==\"string\"?\"\":\"px\")}}function Nt(n,t){var e=\"\";if(typeof n==\"string\")e=n;else do{var i=b(n,\"transform\");i&&i!==\"none\"&&(e=i+\" \"+e)}while(!t&&(n=n.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(e)}function ki(n,t,e){if(n){var i=n.getElementsByTagName(t),o=0,s=i.length;if(e)for(;o<s;o++)e(i[o],o);return i}return[]}function dt(){var n=document.scrollingElement;return n||document.documentElement}function N(n,t,e,i,o){if(!(!n.getBoundingClientRect&&n!==window)){var s,r,a,l,c,f,d;if(n!==window&&n.parentNode&&n!==dt()?(s=n.getBoundingClientRect(),r=s.top,a=s.left,l=s.bottom,c=s.right,f=s.height,d=s.width):(r=0,a=0,l=window.innerHeight,c=window.innerWidth,f=window.innerHeight,d=window.innerWidth),(t||e)&&n!==window&&(o=o||n.parentNode,!mt))do if(o&&o.getBoundingClientRect&&(b(o,\"transform\")!==\"none\"||e&&b(o,\"position\")!==\"static\")){var p=o.getBoundingClientRect();r-=p.top+parseInt(b(o,\"border-top-width\")),a-=p.left+parseInt(b(o,\"border-left-width\")),l=r+s.height,c=a+s.width;break}while(o=o.parentNode);if(i&&n!==window){var u=Nt(o||n),g=u&&u.a,m=u&&u.d;u&&(r/=m,a/=g,d/=g,f/=m,l=r+f,c=a+d)}return{top:r,left:a,bottom:l,right:c,width:d,height:f}}}function Ci(n,t,e){for(var i=xt(n,!0),o=N(n)[t];i;){var s=N(i)[e],r=void 0;if(e===\"top\"||e===\"left\"?r=o>=s:r=o<=s,!r)return i;if(i===dt())break;i=xt(i,!1)}return!1}function kt(n,t,e,i){for(var o=0,s=0,r=n.children;s<r.length;){if(r[s].style.display!==\"none\"&&r[s]!==v.ghost&&(i||r[s]!==v.dragged)&&lt(r[s],e.draggable,n,!1)){if(o===t)return r[s];o++}s++}return null}function Ke(n,t){for(var e=n.lastElementChild;e&&(e===v.ghost||b(e,\"display\")===\"none\"||t&&!ve(e,t));)e=e.previousElementSibling;return e||null}function ot(n,t){var e=0;if(!n||!n.parentNode)return-1;for(;n=n.previousElementSibling;)n.nodeName.toUpperCase()!==\"TEMPLATE\"&&n!==v.clone&&(!t||ve(n,t))&&e++;return e}function Li(n){var t=0,e=0,i=dt();if(n)do{var o=Nt(n),s=o.a,r=o.d;t+=n.scrollLeft*s,e+=n.scrollTop*r}while(n!==i&&(n=n.parentNode));return[t,e]}function _n(n,t){for(var e in n)if(n.hasOwnProperty(e)){for(var i in t)if(t.hasOwnProperty(i)&&t[i]===n[e][i])return Number(e)}return-1}function xt(n,t){if(!n||!n.getBoundingClientRect)return dt();var e=n,i=!1;do if(e.clientWidth<e.scrollWidth||e.clientHeight<e.scrollHeight){var o=b(e);if(e.clientWidth<e.scrollWidth&&(o.overflowX==\"auto\"||o.overflowX==\"scroll\")||e.clientHeight<e.scrollHeight&&(o.overflowY==\"auto\"||o.overflowY==\"scroll\")){if(!e.getBoundingClientRect||e===document.body)return dt();if(i||t)return e;i=!0}}while(e=e.parentNode);return dt()}function Rn(n,t){if(n&&t)for(var e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n}function _e(n,t){return Math.round(n.top)===Math.round(t.top)&&Math.round(n.left)===Math.round(t.left)&&Math.round(n.height)===Math.round(t.height)&&Math.round(n.width)===Math.round(t.width)}var jt;function Bi(n,t){return function(){if(!jt){var e=arguments,i=this;e.length===1?n.call(i,e[0]):n.apply(i,e),jt=setTimeout(function(){jt=void 0},t)}}}function Pn(){clearTimeout(jt),jt=void 0}function Fi(n,t,e){n.scrollLeft+=t,n.scrollTop+=e}function Hi(n){var t=window.Polymer,e=window.jQuery||window.Zepto;return t&&t.dom?t.dom(n).cloneNode(!0):e?e(n).clone(!0)[0]:n.cloneNode(!0)}function Vi(n,t,e){var i={};return Array.from(n.children).forEach(function(o){var s,r,a,l;if(!(!lt(o,t.draggable,n,!1)||o.animated||o===e)){var c=N(o);i.left=Math.min((s=i.left)!==null&&s!==void 0?s:1/0,c.left),i.top=Math.min((r=i.top)!==null&&r!==void 0?r:1/0,c.top),i.right=Math.max((a=i.right)!==null&&a!==void 0?a:-1/0,c.right),i.bottom=Math.max((l=i.bottom)!==null&&l!==void 0?l:-1/0,c.bottom)}}),i.width=i.right-i.left,i.height=i.bottom-i.top,i.x=i.left,i.y=i.top,i}var j=\"Sortable\"+new Date().getTime();function Mn(){var n=[],t;return{captureAnimationState:function(){if(n=[],!!this.options.animation){var i=[].slice.call(this.el.children);i.forEach(function(o){if(!(b(o,\"display\")===\"none\"||o===v.ghost)){n.push({target:o,rect:N(o)});var s=ft({},n[n.length-1].rect);if(o.thisAnimationDuration){var r=Nt(o,!0);r&&(s.top-=r.f,s.left-=r.e)}o.fromRect=s}})}},addAnimationState:function(i){n.push(i)},removeAnimationState:function(i){n.splice(_n(n,{target:i}),1)},animateAll:function(i){var o=this;if(!this.options.animation){clearTimeout(t),typeof i==\"function\"&&i();return}var s=!1,r=0;n.forEach(function(a){var l=0,c=a.target,f=c.fromRect,d=N(c),p=c.prevFromRect,u=c.prevToRect,g=a.rect,m=Nt(c,!0);m&&(d.top-=m.f,d.left-=m.e),c.toRect=d,c.thisAnimationDuration&&_e(p,d)&&!_e(f,d)&&(g.top-d.top)/(g.left-d.left)===(f.top-d.top)/(f.left-d.left)&&(l=kn(g,p,u,o.options)),_e(d,f)||(c.prevFromRect=f,c.prevToRect=d,l||(l=o.options.animation),o.animate(c,g,d,l)),l&&(s=!0,r=Math.max(r,l),clearTimeout(c.animationResetTimer),c.animationResetTimer=setTimeout(function(){c.animationTime=0,c.prevFromRect=null,c.fromRect=null,c.prevToRect=null,c.thisAnimationDuration=null},l),c.thisAnimationDuration=l)}),clearTimeout(t),s?t=setTimeout(function(){typeof i==\"function\"&&i()},r):typeof i==\"function\"&&i(),n=[]},animate:function(i,o,s,r){if(r){b(i,\"transition\",\"\"),b(i,\"transform\",\"\");var a=Nt(this.el),l=a&&a.a,c=a&&a.d,f=(o.left-s.left)/(l||1),d=(o.top-s.top)/(c||1);i.animatingX=!!f,i.animatingY=!!d,b(i,\"transform\",\"translate3d(\"+f+\"px,\"+d+\"px,0)\"),this.forRepaintDummy=Nn(i),b(i,\"transition\",\"transform \"+r+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),b(i,\"transform\",\"translate3d(0,0,0)\"),typeof i.animated==\"number\"&&clearTimeout(i.animated),i.animated=setTimeout(function(){b(i,\"transition\",\"\"),b(i,\"transform\",\"\"),i.animated=!1,i.animatingX=!1,i.animatingY=!1},r)}}}}function Nn(n){return n.offsetWidth}function kn(n,t,e,i){return Math.sqrt(Math.pow(t.top-n.top,2)+Math.pow(t.left-n.left,2))/Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))*i.animation}var _t=[],Re={initializeByDefault:!0},te={mount:function(t){for(var e in Re)Re.hasOwnProperty(e)&&!(e in t)&&(t[e]=Re[e]);_t.forEach(function(i){if(i.pluginName===t.pluginName)throw\"Sortable: Cannot mount plugin \".concat(t.pluginName,\" more than once\")}),_t.push(t)},pluginEvent:function(t,e,i){var o=this;this.eventCanceled=!1,i.cancel=function(){o.eventCanceled=!0};var s=t+\"Global\";_t.forEach(function(r){e[r.pluginName]&&(e[r.pluginName][s]&&e[r.pluginName][s](ft({sortable:e},i)),e.options[r.pluginName]&&e[r.pluginName][t]&&e[r.pluginName][t](ft({sortable:e},i)))})},initializePlugins:function(t,e,i,o){_t.forEach(function(a){var l=a.pluginName;if(!(!t.options[l]&&!a.initializeByDefault)){var c=new a(t,e,t.options);c.sortable=t,c.options=t.options,t[l]=c,gt(i,c.defaults)}});for(var s in t.options)if(t.options.hasOwnProperty(s)){var r=this.modifyOption(t,s,t.options[s]);typeof r<\"u\"&&(t.options[s]=r)}},getEventProperties:function(t,e){var i={};return _t.forEach(function(o){typeof o.eventProperties==\"function\"&&gt(i,o.eventProperties.call(e[o.pluginName],t))}),i},modifyOption:function(t,e,i){var o;return _t.forEach(function(s){t[s.pluginName]&&s.optionListeners&&typeof s.optionListeners[e]==\"function\"&&(o=s.optionListeners[e].call(t[s.pluginName],i))}),o}};function Bn(n){var t=n.sortable,e=n.rootEl,i=n.name,o=n.targetEl,s=n.cloneEl,r=n.toEl,a=n.fromEl,l=n.oldIndex,c=n.newIndex,f=n.oldDraggableIndex,d=n.newDraggableIndex,p=n.originalEvent,u=n.putSortable,g=n.extraEventProperties;if(t=t||e&&e[j],!!t){var m,S=t.options,E=\"on\"+i.charAt(0).toUpperCase()+i.substr(1);window.CustomEvent&&!mt&&!Zt?m=new CustomEvent(i,{bubbles:!0,cancelable:!0}):(m=document.createEvent(\"Event\"),m.initEvent(i,!0,!0)),m.to=r||e,m.from=a||e,m.item=o||e,m.clone=s,m.oldIndex=l,m.newIndex=c,m.oldDraggableIndex=f,m.newDraggableIndex=d,m.originalEvent=p,m.pullMode=u?u.lastPutMode:void 0;var w=ft(ft({},g),te.getEventProperties(i,t));for(var D in w)m[D]=w[D];e&&e.dispatchEvent(m),S[E]&&S[E].call(t,m)}}var Fn=[\"evt\"],G=function(t,e){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=i.evt,s=In(i,Fn);te.pluginEvent.bind(v)(t,e,ft({dragEl:h,parentEl:R,ghostEl:y,rootEl:I,nextEl:Lt,lastDownEl:pe,cloneEl:T,cloneHidden:St,dragStarted:Kt,putSortable:H,activeSortable:v.active,originalEvent:o,oldIndex:Mt,oldDraggableIndex:qt,newIndex:Z,newDraggableIndex:wt,hideGhostForTarget:$i,unhideGhostForTarget:Ki,cloneNowHidden:function(){St=!0},cloneNowShown:function(){St=!1},dispatchSortableEvent:function(a){K({sortable:e,name:a,originalEvent:o})}},s))};function K(n){Bn(ft({putSortable:H,cloneEl:T,targetEl:h,rootEl:I,oldIndex:Mt,oldDraggableIndex:qt,newIndex:Z,newDraggableIndex:wt},n))}var h,R,y,I,Lt,pe,T,St,Mt,Z,qt,wt,ce,H,Pt=!1,ye=!1,we=[],At,at,Pe,Me,Ii,Ti,Kt,Rt,Jt,Qt=!1,de=!1,ge,$,Ne=[],Ve=!1,Se=[],Oe=typeof document<\"u\",fe=$e,_i=Zt||mt?\"cssFloat\":\"float\",Hn=Oe&&!Pi&&!$e&&\"draggable\"in document.createElement(\"div\"),Wi=(function(){if(Oe){if(mt)return!1;var n=document.createElement(\"x\");return n.style.cssText=\"pointer-events:auto\",n.style.pointerEvents===\"auto\"}})(),zi=function(t,e){var i=b(t),o=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),s=kt(t,0,e),r=kt(t,1,e),a=s&&b(s),l=r&&b(r),c=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+N(s).width,f=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+N(r).width;if(i.display===\"flex\")return i.flexDirection===\"column\"||i.flexDirection===\"column-reverse\"?\"vertical\":\"horizontal\";if(i.display===\"grid\")return i.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\";if(s&&a.float&&a.float!==\"none\"){var d=a.float===\"left\"?\"left\":\"right\";return r&&(l.clear===\"both\"||l.clear===d)?\"vertical\":\"horizontal\"}return s&&(a.display===\"block\"||a.display===\"flex\"||a.display===\"table\"||a.display===\"grid\"||c>=o&&i[_i]===\"none\"||r&&i[_i]===\"none\"&&c+f>o)?\"vertical\":\"horizontal\"},Vn=function(t,e,i){var o=i?t.left:t.top,s=i?t.right:t.bottom,r=i?t.width:t.height,a=i?e.left:e.top,l=i?e.right:e.bottom,c=i?e.width:e.height;return o===a||s===l||o+r/2===a+c/2},Wn=function(t,e){var i;return we.some(function(o){var s=o[j].options.emptyInsertThreshold;if(!(!s||Ke(o))){var r=N(o),a=t>=r.left-s&&t<=r.right+s,l=e>=r.top-s&&e<=r.bottom+s;if(a&&l)return i=o}}),i},Xi=function(t){function e(s,r){return function(a,l,c,f){var d=a.options.group.name&&l.options.group.name&&a.options.group.name===l.options.group.name;if(s==null&&(r||d))return!0;if(s==null||s===!1)return!1;if(r&&s===\"clone\")return s;if(typeof s==\"function\")return e(s(a,l,c,f),r)(a,l,c,f);var p=(r?a:l).options.group.name;return s===!0||typeof s==\"string\"&&s===p||s.join&&s.indexOf(p)>-1}}var i={},o=t.group;(!o||ue(o)!=\"object\")&&(o={name:o}),i.name=o.name,i.checkPull=e(o.pull,!0),i.checkPut=e(o.put),i.revertClone=o.revertClone,t.group=i},$i=function(){!Wi&&y&&b(y,\"display\",\"none\")},Ki=function(){!Wi&&y&&b(y,\"display\",\"\")};Oe&&!Pi&&document.addEventListener(\"click\",function(n){if(ye)return n.preventDefault(),n.stopPropagation&&n.stopPropagation(),n.stopImmediatePropagation&&n.stopImmediatePropagation(),ye=!1,!1},!0);var Ct=function(t){if(h){t=t.touches?t.touches[0]:t;var e=Wn(t.clientX,t.clientY);if(e){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]=t[o]);i.target=i.rootEl=e,i.preventDefault=void 0,i.stopPropagation=void 0,e[j]._onDragOver(i)}}},zn=function(t){h&&h.parentNode[j]._isOutsideThisEl(t.target)};function v(n,t){if(!(n&&n.nodeType&&n.nodeType===1))throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(n));this.el=n,this.options=t=gt({},t),n[j]=this;var e={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(n.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return zi(n,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(r,a){r.setData(\"Text\",a.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:v.supportPointer!==!1&&\"PointerEvent\"in window&&(!Gt||$e),emptyInsertThreshold:5};te.initializePlugins(this,n,e);for(var i in e)!(i in t)&&(t[i]=e[i]);Xi(t);for(var o in this)o.charAt(0)===\"_\"&&typeof this[o]==\"function\"&&(this[o]=this[o].bind(this));this.nativeDraggable=t.forceFallback?!1:Hn,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?O(n,\"pointerdown\",this._onTapStart):(O(n,\"mousedown\",this._onTapStart),O(n,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(O(n,\"dragover\",this),O(n,\"dragenter\",this)),we.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),gt(this,Mn())}v.prototype={constructor:v,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(Rt=null)},_getDirection:function(t,e){return typeof this.options.direction==\"function\"?this.options.direction.call(this,t,e,h):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,i=this.el,o=this.options,s=o.preventOnFilter,r=t.type,a=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===\"touch\"&&t,l=(a||t).target,c=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,f=o.filter;if(qn(i),!h&&!(/mousedown|pointerdown/.test(r)&&t.button!==0||o.disabled)&&!c.isContentEditable&&!(!this.nativeDraggable&&Gt&&l&&l.tagName.toUpperCase()===\"SELECT\")&&(l=lt(l,o.draggable,i,!1),!(l&&l.animated)&&pe!==l)){if(Mt=ot(l),qt=ot(l,o.draggable),typeof f==\"function\"){if(f.call(this,t,l,this)){K({sortable:e,rootEl:c,name:\"filter\",targetEl:l,toEl:i,fromEl:i}),G(\"filter\",e,{evt:t}),s&&t.preventDefault();return}}else if(f&&(f=f.split(\",\").some(function(d){if(d=lt(c,d.trim(),i,!1),d)return K({sortable:e,rootEl:d,name:\"filter\",targetEl:l,fromEl:i,toEl:i}),G(\"filter\",e,{evt:t}),!0}),f)){s&&t.preventDefault();return}o.handle&&!lt(c,o.handle,i,!1)||this._prepareDragStart(t,a,l)}}},_prepareDragStart:function(t,e,i){var o=this,s=o.el,r=o.options,a=s.ownerDocument,l;if(i&&!h&&i.parentNode===s){var c=N(i);if(I=s,h=i,R=h.parentNode,Lt=h.nextSibling,pe=i,ce=r.group,v.dragged=h,At={target:h,clientX:(e||t).clientX,clientY:(e||t).clientY},Ii=At.clientX-c.left,Ti=At.clientY-c.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,h.style[\"will-change\"]=\"all\",l=function(){if(G(\"delayEnded\",o,{evt:t}),v.eventCanceled){o._onDrop();return}o._disableDelayedDragEvents(),!Di&&o.nativeDraggable&&(h.draggable=!0),o._triggerDragStart(t,e),K({sortable:o,name:\"choose\",originalEvent:t}),Q(h,r.chosenClass,!0)},r.ignore.split(\",\").forEach(function(f){ki(h,f.trim(),ke)}),O(a,\"dragover\",Ct),O(a,\"mousemove\",Ct),O(a,\"touchmove\",Ct),r.supportPointer?(O(a,\"pointerup\",o._onDrop),!this.nativeDraggable&&O(a,\"pointercancel\",o._onDrop)):(O(a,\"mouseup\",o._onDrop),O(a,\"touchend\",o._onDrop),O(a,\"touchcancel\",o._onDrop)),Di&&this.nativeDraggable&&(this.options.touchStartThreshold=4,h.draggable=!0),G(\"delayStart\",this,{evt:t}),r.delay&&(!r.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(Zt||mt))){if(v.eventCanceled){this._onDrop();return}r.supportPointer?(O(a,\"pointerup\",o._disableDelayedDrag),O(a,\"pointercancel\",o._disableDelayedDrag)):(O(a,\"mouseup\",o._disableDelayedDrag),O(a,\"touchend\",o._disableDelayedDrag),O(a,\"touchcancel\",o._disableDelayedDrag)),O(a,\"mousemove\",o._delayedDragTouchMoveHandler),O(a,\"touchmove\",o._delayedDragTouchMoveHandler),r.supportPointer&&O(a,\"pointermove\",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(l,r.delay)}else l()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){h&&ke(h),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;x(t,\"mouseup\",this._disableDelayedDrag),x(t,\"touchend\",this._disableDelayedDrag),x(t,\"touchcancel\",this._disableDelayedDrag),x(t,\"pointerup\",this._disableDelayedDrag),x(t,\"pointercancel\",this._disableDelayedDrag),x(t,\"mousemove\",this._delayedDragTouchMoveHandler),x(t,\"touchmove\",this._delayedDragTouchMoveHandler),x(t,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType==\"touch\"&&t,!this.nativeDraggable||e?this.options.supportPointer?O(document,\"pointermove\",this._onTouchMove):e?O(document,\"touchmove\",this._onTouchMove):O(document,\"mousemove\",this._onTouchMove):(O(h,\"dragend\",this),O(I,\"dragstart\",this._onDragStart));try{document.selection?me(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(Pt=!1,I&&h){G(\"dragStarted\",this,{evt:e}),this.nativeDraggable&&O(document,\"dragover\",zn);var i=this.options;!t&&Q(h,i.dragClass,!1),Q(h,i.ghostClass,!0),v.active=this,t&&this._appendGhost(),K({sortable:this,name:\"start\",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,$i();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY),t!==e);)e=t;if(h.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){var i=void 0;if(i=e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e}),i&&!this.options.dragoverBubble)break}t=e}while(e=Ni(e));Ki()}},_onTouchMove:function(t){if(At){var e=this.options,i=e.fallbackTolerance,o=e.fallbackOffset,s=t.touches?t.touches[0]:t,r=y&&Nt(y,!0),a=y&&r&&r.a,l=y&&r&&r.d,c=fe&&$&&Li($),f=(s.clientX-At.clientX+o.x)/(a||1)+(c?c[0]-Ne[0]:0)/(a||1),d=(s.clientY-At.clientY+o.y)/(l||1)+(c?c[1]-Ne[1]:0)/(l||1);if(!v.active&&!Pt){if(i&&Math.max(Math.abs(s.clientX-this._lastX),Math.abs(s.clientY-this._lastY))<i)return;this._onDragStart(t,!0)}if(y){r?(r.e+=f-(Pe||0),r.f+=d-(Me||0)):r={a:1,b:0,c:0,d:1,e:f,f:d};var p=\"matrix(\".concat(r.a,\",\").concat(r.b,\",\").concat(r.c,\",\").concat(r.d,\",\").concat(r.e,\",\").concat(r.f,\")\");b(y,\"webkitTransform\",p),b(y,\"mozTransform\",p),b(y,\"msTransform\",p),b(y,\"transform\",p),Pe=f,Me=d,at=s}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!y){var t=this.options.fallbackOnBody?document.body:I,e=N(h,!0,fe,!0,t),i=this.options;if(fe){for($=t;b($,\"position\")===\"static\"&&b($,\"transform\")===\"none\"&&$!==document;)$=$.parentNode;$!==document.body&&$!==document.documentElement?($===document&&($=dt()),e.top+=$.scrollTop,e.left+=$.scrollLeft):$=dt(),Ne=Li($)}y=h.cloneNode(!0),Q(y,i.ghostClass,!1),Q(y,i.fallbackClass,!0),Q(y,i.dragClass,!0),b(y,\"transition\",\"\"),b(y,\"transform\",\"\"),b(y,\"box-sizing\",\"border-box\"),b(y,\"margin\",0),b(y,\"top\",e.top),b(y,\"left\",e.left),b(y,\"width\",e.width),b(y,\"height\",e.height),b(y,\"opacity\",\"0.8\"),b(y,\"position\",fe?\"absolute\":\"fixed\"),b(y,\"zIndex\",\"100000\"),b(y,\"pointerEvents\",\"none\"),v.ghost=y,t.appendChild(y),b(y,\"transform-origin\",Ii/parseInt(y.style.width)*100+\"% \"+Ti/parseInt(y.style.height)*100+\"%\")}},_onDragStart:function(t,e){var i=this,o=t.dataTransfer,s=i.options;if(G(\"dragStart\",this,{evt:t}),v.eventCanceled){this._onDrop();return}G(\"setupClone\",this),v.eventCanceled||(T=Hi(h),T.removeAttribute(\"id\"),T.draggable=!1,T.style[\"will-change\"]=\"\",this._hideClone(),Q(T,this.options.chosenClass,!1),v.clone=T),i.cloneId=me(function(){G(\"clone\",i),!v.eventCanceled&&(i.options.removeCloneOnHide||I.insertBefore(T,h),i._hideClone(),K({sortable:i,name:\"clone\"}))}),!e&&Q(h,s.dragClass,!0),e?(ye=!0,i._loopId=setInterval(i._emulateDragOver,50)):(x(document,\"mouseup\",i._onDrop),x(document,\"touchend\",i._onDrop),x(document,\"touchcancel\",i._onDrop),o&&(o.effectAllowed=\"move\",s.setData&&s.setData.call(i,o,h)),O(document,\"drop\",i),b(h,\"transform\",\"translateZ(0)\")),Pt=!0,i._dragStartId=me(i._dragStarted.bind(i,e,t)),O(document,\"selectstart\",i),Kt=!0,window.getSelection().removeAllRanges(),Gt&&b(document.body,\"user-select\",\"none\")},_onDragOver:function(t){var e=this.el,i=t.target,o,s,r,a=this.options,l=a.group,c=v.active,f=ce===l,d=a.sort,p=H||c,u,g=this,m=!1;if(Ve)return;function S(L,et){G(L,g,ft({evt:t,isOwner:f,axis:u?\"vertical\":\"horizontal\",revert:r,dragRect:o,targetRect:s,canSort:d,fromSortable:p,target:i,completed:w,onMove:function(Ge,Gi){return he(I,e,h,o,Ge,N(Ge),t,Gi)},changed:D},et))}function E(){S(\"dragOverAnimationCapture\"),g.captureAnimationState(),g!==p&&p.captureAnimationState()}function w(L){return S(\"dragOverCompleted\",{insertion:L}),L&&(f?c._hideClone():c._showClone(g),g!==p&&(Q(h,H?H.options.ghostClass:c.options.ghostClass,!1),Q(h,a.ghostClass,!0)),H!==g&&g!==v.active?H=g:g===v.active&&H&&(H=null),p===g&&(g._ignoreWhileAnimating=i),g.animateAll(function(){S(\"dragOverAnimationComplete\"),g._ignoreWhileAnimating=null}),g!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(i===h&&!h.animated||i===e&&!i.animated)&&(Rt=null),!a.dragoverBubble&&!t.rootEl&&i!==document&&(h.parentNode[j]._isOutsideThisEl(t.target),!L&&Ct(t)),!a.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),m=!0}function D(){Z=ot(h),wt=ot(h,a.draggable),K({sortable:g,name:\"change\",toEl:e,newIndex:Z,newDraggableIndex:wt,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),i=lt(i,a.draggable,e,!0),S(\"dragOver\"),v.eventCanceled)return m;if(h.contains(t.target)||i.animated&&i.animatingX&&i.animatingY||g._ignoreWhileAnimating===i)return w(!1);if(ye=!1,c&&!a.disabled&&(f?d||(r=R!==I):H===this||(this.lastPutMode=ce.checkPull(this,c,h,t))&&l.checkPut(this,c,h,t))){if(u=this._getDirection(t,i)===\"vertical\",o=N(h),S(\"dragOverValid\"),v.eventCanceled)return m;if(r)return R=I,E(),this._hideClone(),S(\"revert\"),v.eventCanceled||(Lt?I.insertBefore(h,Lt):I.appendChild(h)),w(!0);var A=Ke(e,a.draggable);if(!A||Yn(t,u,this)&&!A.animated){if(A===h)return w(!1);if(A&&e===t.target&&(i=A),i&&(s=N(i)),he(I,e,h,o,i,s,t,!!i)!==!1)return E(),A&&A.nextSibling?e.insertBefore(h,A.nextSibling):e.appendChild(h),R=e,D(),w(!0)}else if(A&&Kn(t,u,this)){var C=kt(e,0,a,!0);if(C===h)return w(!1);if(i=C,s=N(i),he(I,e,h,o,i,s,t,!1)!==!1)return E(),e.insertBefore(h,C),R=e,D(),w(!0)}else if(i.parentNode===e){s=N(i);var F=0,q,J=h.parentNode!==e,_=!Vn(h.animated&&h.toRect||o,i.animated&&i.toRect||s,u),V=u?\"top\":\"left\",W=Ci(i,\"top\",\"top\")||Ci(h,\"top\",\"top\"),tt=W?W.scrollTop:void 0;Rt!==i&&(q=s[V],Qt=!1,de=!_&&a.invertSwap||J),F=Un(t,i,s,u,_?1:a.swapThreshold,a.invertedSwapThreshold==null?a.swapThreshold:a.invertedSwapThreshold,de,Rt===i);var z;if(F!==0){var k=ot(h);do k-=F,z=R.children[k];while(z&&(b(z,\"display\")===\"none\"||z===y))}if(F===0||z===i)return w(!1);Rt=i,Jt=F;var Y=i.nextElementSibling,B=!1;B=F===1;var X=he(I,e,h,o,i,s,t,B);if(X!==!1)return(X===1||X===-1)&&(B=X===1),Ve=!0,setTimeout($n,30),E(),B&&!Y?e.appendChild(h):i.parentNode.insertBefore(h,B?Y:i),W&&Fi(W,0,tt-W.scrollTop),R=h.parentNode,q!==void 0&&!de&&(ge=Math.abs(q-N(i)[V])),D(),w(!0)}if(e.contains(h))return w(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){x(document,\"mousemove\",this._onTouchMove),x(document,\"touchmove\",this._onTouchMove),x(document,\"pointermove\",this._onTouchMove),x(document,\"dragover\",Ct),x(document,\"mousemove\",Ct),x(document,\"touchmove\",Ct)},_offUpEvents:function(){var t=this.el.ownerDocument;x(t,\"mouseup\",this._onDrop),x(t,\"touchend\",this._onDrop),x(t,\"pointerup\",this._onDrop),x(t,\"pointercancel\",this._onDrop),x(t,\"touchcancel\",this._onDrop),x(document,\"selectstart\",this)},_onDrop:function(t){var e=this.el,i=this.options;if(Z=ot(h),wt=ot(h,i.draggable),G(\"drop\",this,{evt:t}),R=h&&h.parentNode,Z=ot(h),wt=ot(h,i.draggable),v.eventCanceled){this._nulling();return}Pt=!1,de=!1,Qt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),We(this.cloneId),We(this._dragStartId),this.nativeDraggable&&(x(document,\"drop\",this),x(e,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Gt&&b(document.body,\"user-select\",\"\"),b(h,\"transform\",\"\"),t&&(Kt&&(t.cancelable&&t.preventDefault(),!i.dropBubble&&t.stopPropagation()),y&&y.parentNode&&y.parentNode.removeChild(y),(I===R||H&&H.lastPutMode!==\"clone\")&&T&&T.parentNode&&T.parentNode.removeChild(T),h&&(this.nativeDraggable&&x(h,\"dragend\",this),ke(h),h.style[\"will-change\"]=\"\",Kt&&!Pt&&Q(h,H?H.options.ghostClass:this.options.ghostClass,!1),Q(h,this.options.chosenClass,!1),K({sortable:this,name:\"unchoose\",toEl:R,newIndex:null,newDraggableIndex:null,originalEvent:t}),I!==R?(Z>=0&&(K({rootEl:R,name:\"add\",toEl:R,fromEl:I,originalEvent:t}),K({sortable:this,name:\"remove\",toEl:R,originalEvent:t}),K({rootEl:R,name:\"sort\",toEl:R,fromEl:I,originalEvent:t}),K({sortable:this,name:\"sort\",toEl:R,originalEvent:t})),H&&H.save()):Z!==Mt&&Z>=0&&(K({sortable:this,name:\"update\",toEl:R,originalEvent:t}),K({sortable:this,name:\"sort\",toEl:R,originalEvent:t})),v.active&&((Z==null||Z===-1)&&(Z=Mt,wt=qt),K({sortable:this,name:\"end\",toEl:R,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){G(\"nulling\",this),I=h=R=y=Lt=T=pe=St=At=at=Kt=Z=wt=Mt=qt=Rt=Jt=H=ce=v.dragged=v.ghost=v.clone=v.active=null,Se.forEach(function(t){t.checked=!0}),Se.length=Pe=Me=0},handleEvent:function(t){switch(t.type){case\"drop\":case\"dragend\":this._onDrop(t);break;case\"dragenter\":case\"dragover\":h&&(this._onDragOver(t),Xn(t));break;case\"selectstart\":t.preventDefault();break}},toArray:function(){for(var t=[],e,i=this.el.children,o=0,s=i.length,r=this.options;o<s;o++)e=i[o],lt(e,r.draggable,this.el,!1)&&t.push(e.getAttribute(r.dataIdAttr)||jn(e));return t},sort:function(t,e){var i={},o=this.el;this.toArray().forEach(function(s,r){var a=o.children[r];lt(a,this.options.draggable,o,!1)&&(i[s]=a)},this),e&&this.captureAnimationState(),t.forEach(function(s){i[s]&&(o.removeChild(i[s]),o.appendChild(i[s]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return lt(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var i=this.options;if(e===void 0)return i[t];var o=te.modifyOption(this,t,e);typeof o<\"u\"?i[t]=o:i[t]=e,t===\"group\"&&Xi(i)},destroy:function(){G(\"destroy\",this);var t=this.el;t[j]=null,x(t,\"mousedown\",this._onTapStart),x(t,\"touchstart\",this._onTapStart),x(t,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(x(t,\"dragover\",this),x(t,\"dragenter\",this)),Array.prototype.forEach.call(t.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),we.splice(we.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!St){if(G(\"hideClone\",this),v.eventCanceled)return;b(T,\"display\",\"none\"),this.options.removeCloneOnHide&&T.parentNode&&T.parentNode.removeChild(T),St=!0}},_showClone:function(t){if(t.lastPutMode!==\"clone\"){this._hideClone();return}if(St){if(G(\"showClone\",this),v.eventCanceled)return;h.parentNode==I&&!this.options.group.revertClone?I.insertBefore(T,h):Lt?I.insertBefore(T,Lt):I.appendChild(T),this.options.group.revertClone&&this.animate(h,T),b(T,\"display\",\"\"),St=!1}}};function Xn(n){n.dataTransfer&&(n.dataTransfer.dropEffect=\"move\"),n.cancelable&&n.preventDefault()}function he(n,t,e,i,o,s,r,a){var l,c=n[j],f=c.options.onMove,d;return window.CustomEvent&&!mt&&!Zt?l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}):(l=document.createEvent(\"Event\"),l.initEvent(\"move\",!0,!0)),l.to=t,l.from=n,l.dragged=e,l.draggedRect=i,l.related=o||t,l.relatedRect=s||N(t),l.willInsertAfter=a,l.originalEvent=r,n.dispatchEvent(l),f&&(d=f.call(c,l,r)),d}function ke(n){n.draggable=!1}function $n(){Ve=!1}function Kn(n,t,e){var i=N(kt(e.el,0,e.options,!0)),o=Vi(e.el,e.options,y),s=10;return t?n.clientX<o.left-s||n.clientY<i.top&&n.clientX<i.right:n.clientY<o.top-s||n.clientY<i.bottom&&n.clientX<i.left}function Yn(n,t,e){var i=N(Ke(e.el,e.options.draggable)),o=Vi(e.el,e.options,y),s=10;return t?n.clientX>o.right+s||n.clientY>i.bottom&&n.clientX>i.left:n.clientY>o.bottom+s||n.clientX>i.right&&n.clientY>i.top}function Un(n,t,e,i,o,s,r,a){var l=i?n.clientY:n.clientX,c=i?e.height:e.width,f=i?e.top:e.left,d=i?e.bottom:e.right,p=!1;if(!r){if(a&&ge<c*o){if(!Qt&&(Jt===1?l>f+c*s/2:l<d-c*s/2)&&(Qt=!0),Qt)p=!0;else if(Jt===1?l<f+ge:l>d-ge)return-Jt}else if(l>f+c*(1-o)/2&&l<d-c*(1-o)/2)return Gn(t)}return p=p||r,p&&(l<f+c*s/2||l>d-c*s/2)?l>f+c/2?1:-1:0}function Gn(n){return ot(h)<ot(n)?1:-1}function jn(n){for(var t=n.tagName+n.className+n.src+n.href+n.textContent,e=t.length,i=0;e--;)i+=t.charCodeAt(e);return i.toString(36)}function qn(n){Se.length=0;for(var t=n.getElementsByTagName(\"input\"),e=t.length;e--;){var i=t[e];i.checked&&Se.push(i)}}function me(n){return setTimeout(n,0)}function We(n){return clearTimeout(n)}Oe&&O(document,\"touchmove\",function(n){(v.active||Pt)&&n.cancelable&&n.preventDefault()});v.utils={on:O,off:x,css:b,find:ki,is:function(t,e){return!!lt(t,e,t,!1)},extend:Rn,throttle:Bi,closest:lt,toggleClass:Q,clone:Hi,index:ot,nextTick:me,cancelNextTick:We,detectDirection:zi,getChild:kt,expando:j};v.get=function(n){return n[j]};v.mount=function(){for(var n=arguments.length,t=new Array(n),e=0;e<n;e++)t[e]=arguments[e];t[0].constructor===Array&&(t=t[0]),t.forEach(function(i){if(!i.prototype||!i.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(i));i.utils&&(v.utils=ft(ft({},v.utils),i.utils)),te.mount(i)})};v.create=function(n,t){return new v(n,t)};v.version=Tn;var M=[],Yt,ze,Xe=!1,Be,Fe,xe,Ut;function Jn(){function n(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)===\"_\"&&typeof this[t]==\"function\"&&(this[t]=this[t].bind(this))}return n.prototype={dragStarted:function(e){var i=e.originalEvent;this.sortable.nativeDraggable?O(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?O(document,\"pointermove\",this._handleFallbackAutoScroll):i.touches?O(document,\"touchmove\",this._handleFallbackAutoScroll):O(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var i=e.originalEvent;!this.options.dragOverBubble&&!i.rootEl&&this._handleAutoScroll(i)},drop:function(){this.sortable.nativeDraggable?x(document,\"dragover\",this._handleAutoScroll):(x(document,\"pointermove\",this._handleFallbackAutoScroll),x(document,\"touchmove\",this._handleFallbackAutoScroll),x(document,\"mousemove\",this._handleFallbackAutoScroll)),Ri(),be(),Pn()},nulling:function(){xe=ze=Yt=Xe=Ut=Be=Fe=null,M.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,i){var o=this,s=(e.touches?e.touches[0]:e).clientX,r=(e.touches?e.touches[0]:e).clientY,a=document.elementFromPoint(s,r);if(xe=e,i||this.options.forceAutoScrollFallback||Zt||mt||Gt){He(e,this.options,a,i);var l=xt(a,!0);Xe&&(!Ut||s!==Be||r!==Fe)&&(Ut&&Ri(),Ut=setInterval(function(){var c=xt(document.elementFromPoint(s,r),!0);c!==l&&(l=c,be()),He(e,o.options,c,i)},10),Be=s,Fe=r)}else{if(!this.options.bubbleScroll||xt(a,!0)===dt()){be();return}He(e,this.options,xt(a,!1),!1)}}},gt(n,{pluginName:\"scroll\",initializeByDefault:!0})}function be(){M.forEach(function(n){clearInterval(n.pid)}),M=[]}function Ri(){clearInterval(Ut)}var He=Bi(function(n,t,e,i){if(t.scroll){var o=(n.touches?n.touches[0]:n).clientX,s=(n.touches?n.touches[0]:n).clientY,r=t.scrollSensitivity,a=t.scrollSpeed,l=dt(),c=!1,f;ze!==e&&(ze=e,be(),Yt=t.scroll,f=t.scrollFn,Yt===!0&&(Yt=xt(e,!0)));var d=0,p=Yt;do{var u=p,g=N(u),m=g.top,S=g.bottom,E=g.left,w=g.right,D=g.width,A=g.height,C=void 0,F=void 0,q=u.scrollWidth,J=u.scrollHeight,_=b(u),V=u.scrollLeft,W=u.scrollTop;u===l?(C=D<q&&(_.overflowX===\"auto\"||_.overflowX===\"scroll\"||_.overflowX===\"visible\"),F=A<J&&(_.overflowY===\"auto\"||_.overflowY===\"scroll\"||_.overflowY===\"visible\")):(C=D<q&&(_.overflowX===\"auto\"||_.overflowX===\"scroll\"),F=A<J&&(_.overflowY===\"auto\"||_.overflowY===\"scroll\"));var tt=C&&(Math.abs(w-o)<=r&&V+D<q)-(Math.abs(E-o)<=r&&!!V),z=F&&(Math.abs(S-s)<=r&&W+A<J)-(Math.abs(m-s)<=r&&!!W);if(!M[d])for(var k=0;k<=d;k++)M[k]||(M[k]={});(M[d].vx!=tt||M[d].vy!=z||M[d].el!==u)&&(M[d].el=u,M[d].vx=tt,M[d].vy=z,clearInterval(M[d].pid),(tt!=0||z!=0)&&(c=!0,M[d].pid=setInterval(function(){i&&this.layer===0&&v.active._onTouchMove(xe);var Y=M[this.layer].vy?M[this.layer].vy*a:0,B=M[this.layer].vx?M[this.layer].vx*a:0;typeof f==\"function\"&&f.call(v.dragged.parentNode[j],B,Y,n,xe,M[this.layer].el)!==\"continue\"||Fi(M[this.layer].el,B,Y)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&p!==l&&(p=xt(p,!1)));Xe=c}},30),Yi=function(t){var e=t.originalEvent,i=t.putSortable,o=t.dragEl,s=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,l=t.unhideGhostForTarget;if(e){var c=i||s;a();var f=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,d=document.elementFromPoint(f.clientX,f.clientY);l(),c&&!c.el.contains(d)&&(r(\"spill\"),this.onSpill({dragEl:o,putSortable:i}))}};function Ye(){}Ye.prototype={startIndex:null,dragStart:function(t){var e=t.oldDraggableIndex;this.startIndex=e},onSpill:function(t){var e=t.dragEl,i=t.putSortable;this.sortable.captureAnimationState(),i&&i.captureAnimationState();var o=kt(this.sortable.el,this.startIndex,this.options);o?this.sortable.el.insertBefore(e,o):this.sortable.el.appendChild(e),this.sortable.animateAll(),i&&i.animateAll()},drop:Yi};gt(Ye,{pluginName:\"revertOnSpill\"});function Ue(){}Ue.prototype={onSpill:function(t){var e=t.dragEl,i=t.putSortable,o=i||this.sortable;o.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),o.animateAll()},drop:Yi};gt(Ue,{pluginName:\"removeOnSpill\"});v.mount(new Jn);v.mount(Ue,Ye);var Ui=v;function bt(n){return n==null||n===\"\"||typeof n==\"string\"&&n.trim()===\"\"}function P(n){return!bt(n)}var Ee=class{constructor({canOptionLabelsWrap:t=!0,canSelectPlaceholder:e=!0,element:i,getOptionLabelUsing:o=null,getOptionLabelsUsing:s=null,getOptionsUsing:r=null,getSearchResultsUsing:a=null,hasDynamicOptions:l=!1,hasDynamicSearchResults:c=!0,hasInitialNoOptionsMessage:f=!1,initialOptionLabel:d=null,initialOptionLabels:p=null,initialState:u=null,isAutofocused:g=!1,isDisabled:m=!1,isHtmlAllowed:S=!1,isMultiple:E=!1,isReorderable:w=!1,isSearchable:D=!1,livewireId:A=null,loadingMessage:C=\"Loading...\",maxItems:F=null,maxItemsMessage:q=\"Maximum number of items selected\",noOptionsMessage:J=\"No options available\",noSearchResultsMessage:_=\"No results found\",onStateChange:V=()=>{},options:W,optionsLimit:tt=null,placeholder:z,position:k=null,searchableOptionFields:Y=[\"label\"],searchDebounce:B=1e3,searchingMessage:X=\"Searching...\",searchPrompt:L=\"Search...\",state:et,statePath:ee=null}){this.canOptionLabelsWrap=t,this.canSelectPlaceholder=e,this.element=i,this.getOptionLabelUsing=o,this.getOptionLabelsUsing=s,this.getOptionsUsing=r,this.getSearchResultsUsing=a,this.hasDynamicOptions=l,this.hasDynamicSearchResults=c,this.hasInitialNoOptionsMessage=f,this.initialOptionLabel=d,this.initialOptionLabels=p,this.initialState=u,this.isAutofocused=g,this.isDisabled=m,this.isHtmlAllowed=S,this.isMultiple=E,this.isReorderable=w,this.isSearchable=D,this.livewireId=A,this.loadingMessage=C,this.maxItems=F,this.maxItemsMessage=q,this.noOptionsMessage=J,this.noSearchResultsMessage=_,this.onStateChange=V,this.options=W,this.optionsLimit=tt,this.originalOptions=JSON.parse(JSON.stringify(W)),this.placeholder=z,this.position=k,this.searchableOptionFields=Array.isArray(Y)?Y:[\"label\"],this.searchDebounce=B,this.searchingMessage=X,this.searchPrompt=L,this.state=et,this.statePath=ee,this.activeSearchId=0,this.labelRepository={},this.isOpen=!1,this.selectedIndex=-1,this.searchQuery=\"\",this.searchTimeout=null,this.isSearching=!1,this.selectedDisplayVersion=0,this.render(),this.setUpEventListeners(),this.isAutofocused&&this.selectButton.focus()}populateLabelRepositoryFromOptions(t){if(!(!t||!Array.isArray(t)))for(let e of t)e.options&&Array.isArray(e.options)?this.populateLabelRepositoryFromOptions(e.options):e.value!==void 0&&e.label!==void 0&&(this.labelRepository[e.value]=e.label)}render(){this.populateLabelRepositoryFromOptions(this.options),this.container=document.createElement(\"div\"),this.container.className=\"fi-select-input-ctn\",this.canOptionLabelsWrap||this.container.classList.add(\"fi-select-input-ctn-option-labels-not-wrapped\"),this.container.setAttribute(\"aria-haspopup\",\"listbox\"),this.selectButton=document.createElement(\"button\"),this.selectButton.className=\"fi-select-input-btn\",this.selectButton.type=\"button\",this.selectButton.setAttribute(\"aria-expanded\",\"false\"),this.selectedDisplay=document.createElement(\"div\"),this.selectedDisplay.className=\"fi-select-input-value-ctn\",this.updateSelectedDisplay(),this.selectButton.appendChild(this.selectedDisplay),this.dropdown=document.createElement(\"div\"),this.dropdown.className=\"fi-dropdown-panel fi-scrollable\",this.dropdown.setAttribute(\"role\",\"listbox\"),this.dropdown.setAttribute(\"tabindex\",\"-1\"),this.dropdown.style.display=\"none\",this.dropdownId=`fi-select-input-dropdown-${Math.random().toString(36).substring(2,11)}`,this.dropdown.id=this.dropdownId,this.isMultiple&&this.dropdown.setAttribute(\"aria-multiselectable\",\"true\"),this.isSearchable&&(this.searchContainer=document.createElement(\"div\"),this.searchContainer.className=\"fi-select-input-search-ctn\",this.searchInput=document.createElement(\"input\"),this.searchInput.className=\"fi-input\",this.searchInput.type=\"text\",this.searchInput.placeholder=this.searchPrompt,this.searchInput.setAttribute(\"aria-label\",\"Search\"),this.searchContainer.appendChild(this.searchInput),this.dropdown.appendChild(this.searchContainer),this.searchInput.addEventListener(\"input\",t=>{this.isDisabled||this.handleSearch(t)}),this.searchInput.addEventListener(\"keydown\",t=>{if(!this.isDisabled){if(t.key===\"Tab\"){t.preventDefault();let e=this.getVisibleOptions();if(e.length===0)return;t.shiftKey?this.selectedIndex=e.length-1:this.selectedIndex=0,e.forEach(i=>{i.classList.remove(\"fi-selected\")}),e[this.selectedIndex].classList.add(\"fi-selected\"),e[this.selectedIndex].focus()}else if(t.key===\"ArrowDown\"){if(t.preventDefault(),t.stopPropagation(),this.getVisibleOptions().length===0)return;this.selectedIndex=-1,this.searchInput.blur(),this.focusNextOption()}else if(t.key===\"ArrowUp\"){t.preventDefault(),t.stopPropagation();let e=this.getVisibleOptions();if(e.length===0)return;this.selectedIndex=e.length-1,this.searchInput.blur(),e[this.selectedIndex].classList.add(\"fi-selected\"),e[this.selectedIndex].focus(),e[this.selectedIndex].id&&this.dropdown.setAttribute(\"aria-activedescendant\",e[this.selectedIndex].id),this.scrollOptionIntoView(e[this.selectedIndex])}else if(t.key===\"Enter\"){if(t.preventDefault(),t.stopPropagation(),this.isSearching)return;let e=this.getVisibleOptions();if(e.length===0)return;let i=e.find(s=>{let r=s.getAttribute(\"aria-disabled\")===\"true\",a=s.classList.contains(\"fi-disabled\"),l=s.offsetParent===null;return!(r||a||l)});if(!i)return;let o=i.getAttribute(\"data-value\");if(o===null)return;this.selectOption(o)}}})),this.optionsList=document.createElement(\"ul\"),this.renderOptions(),this.container.appendChild(this.selectButton),this.container.appendChild(this.dropdown),this.element.appendChild(this.container),this.applyDisabledState()}renderOptions(){this.optionsList.innerHTML=\"\";let t=0,e=this.options,i=0,o=!1;this.options.forEach(a=>{a.options&&Array.isArray(a.options)?(i+=a.options.length,o=!0):i++}),o?this.optionsList.className=\"fi-select-input-options-ctn\":i>0&&(this.optionsList.className=\"fi-dropdown-list\");let s=o?null:this.optionsList,r=0;for(let a of e){if(this.optionsLimit>0&&r>=this.optionsLimit)break;if(a.options&&Array.isArray(a.options)){let l=a.options;if(this.isMultiple&&Array.isArray(this.state)&&this.state.length>0&&(l=a.options.filter(c=>!this.state.includes(c.value))),l.length>0){if(this.optionsLimit>0){let c=this.optionsLimit-r;c<l.length&&(l=l.slice(0,c))}this.renderOptionGroup(a.label,l),r+=l.length,t+=l.length}}else{if(this.isMultiple&&Array.isArray(this.state)&&this.state.includes(a.value))continue;!s&&o&&(s=document.createElement(\"ul\"),s.className=\"fi-dropdown-list\",this.optionsList.appendChild(s));let l=this.createOptionElement(a.value,a);s.appendChild(l),r++,t++}}t===0?(this.searchQuery?this.showNoResultsMessage():this.hasInitialNoOptionsMessage||this.hasDynamicOptions?this.showNoOptionsMessage():this.isMultiple&&this.isOpen&&!this.isSearchable&&this.closeDropdown(),this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList)):(this.hideLoadingState(),this.optionsList.parentNode!==this.dropdown&&this.dropdown.appendChild(this.optionsList))}renderOptionGroup(t,e){if(e.length===0)return;let i=document.createElement(\"li\");i.className=\"fi-select-input-option-group\";let o=document.createElement(\"div\");o.className=\"fi-dropdown-header\",o.textContent=t;let s=document.createElement(\"ul\");s.className=\"fi-dropdown-list\",e.forEach(r=>{let a=this.createOptionElement(r.value,r);s.appendChild(a)}),i.appendChild(o),i.appendChild(s),this.optionsList.appendChild(i)}createOptionElement(t,e){let i=t,o=e,s=!1;typeof e==\"object\"&&e!==null&&\"label\"in e&&\"value\"in e&&(i=e.value,o=e.label,s=e.isDisabled||!1);let r=document.createElement(\"li\");r.className=\"fi-dropdown-list-item fi-select-input-option\",s&&r.classList.add(\"fi-disabled\");let a=`fi-select-input-option-${Math.random().toString(36).substring(2,11)}`;if(r.id=a,r.setAttribute(\"role\",\"option\"),r.setAttribute(\"data-value\",i),r.setAttribute(\"tabindex\",\"0\"),s&&r.setAttribute(\"aria-disabled\",\"true\"),this.isHtmlAllowed&&typeof o==\"string\"){let f=document.createElement(\"div\");f.innerHTML=o;let d=f.textContent||f.innerText||o;r.setAttribute(\"aria-label\",d)}let l=this.isMultiple?Array.isArray(this.state)&&this.state.includes(i):this.state===i;r.setAttribute(\"aria-selected\",l?\"true\":\"false\"),l&&r.classList.add(\"fi-selected\");let c=document.createElement(\"span\");return this.isHtmlAllowed?c.innerHTML=o:c.textContent=o,r.appendChild(c),s||r.addEventListener(\"click\",f=>{f.preventDefault(),f.stopPropagation(),this.selectOption(i),this.isMultiple&&(this.isSearchable&&this.searchInput?setTimeout(()=>{this.searchInput.focus()},0):setTimeout(()=>{r.focus()},0))}),r}async updateSelectedDisplay(){this.selectedDisplayVersion=this.selectedDisplayVersion+1;let t=this.selectedDisplayVersion,e=document.createDocumentFragment();if(this.isMultiple){if(!Array.isArray(this.state)||this.state.length===0){let o=document.createElement(\"span\");o.textContent=this.placeholder,o.classList.add(\"fi-select-input-placeholder\"),e.appendChild(o)}else{let o=await this.getLabelsForMultipleSelection();if(t!==this.selectedDisplayVersion)return;this.addBadgesForSelectedOptions(o,e)}t===this.selectedDisplayVersion&&(this.selectedDisplay.replaceChildren(e),this.isOpen&&this.deferPositionDropdown());return}if(this.state===null||this.state===\"\"){let o=document.createElement(\"span\");if(o.textContent=this.placeholder,o.classList.add(\"fi-select-input-placeholder\"),e.appendChild(o),t===this.selectedDisplayVersion){this.selectedDisplay.replaceChildren(e);let s=this.container.querySelector(\".fi-select-input-value-remove-btn\");s&&s.remove(),this.container.classList.remove(\"fi-select-input-ctn-clearable\")}return}let i=await this.getLabelForSingleSelection();t===this.selectedDisplayVersion&&(this.addSingleSelectionDisplay(i,e),t===this.selectedDisplayVersion&&this.selectedDisplay.replaceChildren(e))}async getLabelsForMultipleSelection(){let t=this.getSelectedOptionLabels(),e=[];if(Array.isArray(this.state)){for(let o of this.state)if(!P(this.labelRepository[o])){if(P(t[o])){this.labelRepository[o]=t[o];continue}e.push(o.toString())}}if(e.length>0&&P(this.initialOptionLabels)&&JSON.stringify(this.state)===JSON.stringify(this.initialState)){if(Array.isArray(this.initialOptionLabels))for(let o of this.initialOptionLabels)P(o)&&o.value!==void 0&&o.label!==void 0&&e.includes(o.value)&&(this.labelRepository[o.value]=o.label)}else if(e.length>0&&this.getOptionLabelsUsing)try{let o=await this.getOptionLabelsUsing();for(let s of o)P(s)&&s.value!==void 0&&s.label!==void 0&&(this.labelRepository[s.value]=s.label)}catch(o){console.error(\"Error fetching option labels:\",o)}let i=[];if(Array.isArray(this.state))for(let o of this.state)P(this.labelRepository[o])?i.push(this.labelRepository[o]):P(t[o])?i.push(t[o]):i.push(o);return i}createBadgeElement(t,e){let i=document.createElement(\"span\");i.className=\"fi-badge fi-size-md fi-color fi-color-primary fi-text-color-600 dark:fi-text-color-200\",P(t)&&i.setAttribute(\"data-value\",t);let o=document.createElement(\"span\");o.className=\"fi-badge-label-ctn\";let s=document.createElement(\"span\");s.className=\"fi-badge-label\",this.canOptionLabelsWrap&&s.classList.add(\"fi-wrapped\"),this.isHtmlAllowed?s.innerHTML=e:s.textContent=e,o.appendChild(s),i.appendChild(o);let r=this.createRemoveButton(t,e);return i.appendChild(r),i}createRemoveButton(t,e){let i=document.createElement(\"button\");return i.type=\"button\",i.className=\"fi-badge-delete-btn\",i.innerHTML='<svg class=\"fi-icon fi-size-xs\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\"><path d=\"M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z\"></path></svg>',i.setAttribute(\"aria-label\",\"Remove \"+(this.isHtmlAllowed?e.replace(/<[^>]*>/g,\"\"):e)),i.addEventListener(\"click\",o=>{o.stopPropagation(),P(t)&&this.selectOption(t)}),i.addEventListener(\"keydown\",o=>{(o.key===\" \"||o.key===\"Enter\")&&(o.preventDefault(),o.stopPropagation(),P(t)&&this.selectOption(t))}),i}addBadgesForSelectedOptions(t,e=this.selectedDisplay){let i=document.createElement(\"div\");i.className=\"fi-select-input-value-badges-ctn\",t.forEach((o,s)=>{let r=Array.isArray(this.state)?this.state[s]:null,a=this.createBadgeElement(r,o);i.appendChild(a)}),e.appendChild(i),this.isReorderable&&(i.addEventListener(\"click\",o=>{o.stopPropagation()}),i.addEventListener(\"mousedown\",o=>{o.stopPropagation()}),new Ui(i,{animation:150,onEnd:()=>{let o=[];i.querySelectorAll(\"[data-value]\").forEach(s=>{o.push(s.getAttribute(\"data-value\"))}),this.state=o,this.onStateChange(this.state)}}))}async getLabelForSingleSelection(){let t=this.labelRepository[this.state];if(bt(t)&&(t=this.getSelectedOptionLabel(this.state)),bt(t)&&P(this.initialOptionLabel)&&this.state===this.initialState)t=this.initialOptionLabel,P(this.state)&&(this.labelRepository[this.state]=t);else if(bt(t)&&this.getOptionLabelUsing)try{t=await this.getOptionLabelUsing(),P(t)&&P(this.state)&&(this.labelRepository[this.state]=t)}catch(e){console.error(\"Error fetching option label:\",e),t=this.state}else bt(t)&&(t=this.state);return t}addSingleSelectionDisplay(t,e=this.selectedDisplay){let i=document.createElement(\"span\");if(i.className=\"fi-select-input-value-label\",this.isHtmlAllowed?i.innerHTML=t:i.textContent=t,e.appendChild(i),!this.canSelectPlaceholder||this.container.querySelector(\".fi-select-input-value-remove-btn\"))return;let o=document.createElement(\"button\");o.type=\"button\",o.className=\"fi-select-input-value-remove-btn\",o.innerHTML='<svg class=\"fi-icon fi-size-sm\" viewBox=\"0 0 20 20\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\" /></svg>',o.setAttribute(\"aria-label\",\"Clear selection\"),o.addEventListener(\"click\",s=>{s.stopPropagation(),this.selectOption(\"\")}),o.addEventListener(\"keydown\",s=>{(s.key===\" \"||s.key===\"Enter\")&&(s.preventDefault(),s.stopPropagation(),this.selectOption(\"\"))}),this.container.appendChild(o),this.container.classList.add(\"fi-select-input-ctn-clearable\")}getSelectedOptionLabel(t){if(P(this.labelRepository[t]))return this.labelRepository[t];let e=\"\";for(let i of this.options)if(i.options&&Array.isArray(i.options)){for(let o of i.options)if(o.value===t){e=o.label,this.labelRepository[t]=e;break}}else if(i.value===t){e=i.label,this.labelRepository[t]=e;break}return e}setUpEventListeners(){this.buttonClickListener=()=>{this.toggleDropdown()},this.documentClickListener=t=>{!this.container.contains(t.target)&&this.isOpen&&this.closeDropdown()},this.buttonKeydownListener=t=>{this.isDisabled||this.handleSelectButtonKeydown(t)},this.dropdownKeydownListener=t=>{this.isDisabled||this.isSearchable&&document.activeElement===this.searchInput&&![\"Tab\",\"Escape\"].includes(t.key)||this.handleDropdownKeydown(t)},this.selectButton.addEventListener(\"click\",this.buttonClickListener),document.addEventListener(\"click\",this.documentClickListener),this.selectButton.addEventListener(\"keydown\",this.buttonKeydownListener),this.dropdown.addEventListener(\"keydown\",this.dropdownKeydownListener),!this.isMultiple&&this.livewireId&&this.statePath&&this.getOptionLabelUsing&&(this.refreshOptionLabelListener=async t=>{if(t.detail.livewireId===this.livewireId&&t.detail.statePath===this.statePath&&P(this.state))try{delete this.labelRepository[this.state];let e=await this.getOptionLabelUsing();P(e)&&(this.labelRepository[this.state]=e);let i=this.selectedDisplay.querySelector(\".fi-select-input-value-label\");P(i)&&(this.isHtmlAllowed?i.innerHTML=e:i.textContent=e),this.updateOptionLabelInList(this.state,e)}catch(e){console.error(\"Error refreshing option label:\",e)}},window.addEventListener(\"filament-forms::select.refreshSelectedOptionLabel\",this.refreshOptionLabelListener))}updateOptionLabelInList(t,e){this.labelRepository[t]=e;let i=this.getVisibleOptions();for(let o of i)if(o.getAttribute(\"data-value\")===String(t)){if(o.innerHTML=\"\",this.isHtmlAllowed){let s=document.createElement(\"span\");s.innerHTML=e,o.appendChild(s)}else o.appendChild(document.createTextNode(e));break}for(let o of this.options)if(o.options&&Array.isArray(o.options)){for(let s of o.options)if(s.value===t){s.label=e;break}}else if(o.value===t){o.label=e;break}for(let o of this.originalOptions)if(o.options&&Array.isArray(o.options)){for(let s of o.options)if(s.value===t){s.label=e;break}}else if(o.value===t){o.label=e;break}}handleSelectButtonKeydown(t){switch(t.key){case\"ArrowDown\":t.preventDefault(),t.stopPropagation(),this.isOpen?this.focusNextOption():this.openDropdown();break;case\"ArrowUp\":t.preventDefault(),t.stopPropagation(),this.isOpen?this.focusPreviousOption():this.openDropdown();break;case\" \":if(t.preventDefault(),this.isOpen){if(this.selectedIndex>=0){let e=this.getVisibleOptions()[this.selectedIndex];e&&e.click()}}else this.openDropdown();break;case\"Enter\":break;case\"Escape\":this.isOpen&&(t.preventDefault(),this.closeDropdown());break;case\"Tab\":this.isOpen&&this.closeDropdown();break;default:if(this.isSearchable&&!t.ctrlKey&&!t.metaKey&&!t.altKey&&typeof t.key==\"string\"&&t.key.length===1){t.preventDefault();let e=t.key;this.isOpen||this.openDropdown(),this.searchInput&&(this.searchInput.focus(),this.searchInput.value=(this.searchInput.value||\"\")+e,this.searchInput.dispatchEvent(new Event(\"input\",{bubbles:!0})))}break}}handleDropdownKeydown(t){switch(t.key){case\"ArrowDown\":t.preventDefault(),t.stopPropagation(),this.focusNextOption();break;case\"ArrowUp\":t.preventDefault(),t.stopPropagation(),this.focusPreviousOption();break;case\" \":if(t.preventDefault(),this.selectedIndex>=0){let e=this.getVisibleOptions()[this.selectedIndex];e&&e.click()}break;case\"Enter\":if(t.preventDefault(),this.selectedIndex>=0){let e=this.getVisibleOptions()[this.selectedIndex];e&&e.click()}else{let e=this.element.closest(\"form\");e&&e.submit()}break;case\"Escape\":t.preventDefault(),this.closeDropdown(),this.selectButton.focus();break;case\"Tab\":this.closeDropdown();break;default:if(this.isSearchable&&!t.ctrlKey&&!t.metaKey&&!t.altKey&&typeof t.key==\"string\"&&t.key.length===1){t.preventDefault();let e=t.key;this.searchInput&&(this.searchInput.focus(),this.searchInput.value=(this.searchInput.value||\"\")+e,this.searchInput.dispatchEvent(new Event(\"input\",{bubbles:!0})))}break}}toggleDropdown(){if(!this.isDisabled){if(this.isOpen){this.closeDropdown();return}this.isMultiple&&!this.isSearchable&&!this.hasAvailableOptions()||this.openDropdown()}}hasAvailableOptions(){for(let t of this.options)if(t.options&&Array.isArray(t.options)){for(let e of t.options)if(!Array.isArray(this.state)||!this.state.includes(e.value))return!0}else if(!Array.isArray(this.state)||!this.state.includes(t.value))return!0;return!1}async openDropdown(){this.dropdown.style.display=\"block\",this.dropdown.style.opacity=\"0\";let t=this.selectButton.closest(\".fi-fixed-positioning-context\")!==null&&this.selectButton.closest(\".fi-absolute-positioning-context\")===null;if(this.dropdown.style.position=t?\"fixed\":\"absolute\",this.dropdown.style.width=`${this.selectButton.offsetWidth}px`,this.selectButton.setAttribute(\"aria-expanded\",\"true\"),this.isOpen=!0,this.positionDropdown(),this.resizeListener||(this.resizeListener=()=>{this.dropdown.style.width=`${this.selectButton.offsetWidth}px`,this.positionDropdown()},window.addEventListener(\"resize\",this.resizeListener)),this.scrollListener||(this.scrollListener=()=>this.positionDropdown(),window.addEventListener(\"scroll\",this.scrollListener,!0)),this.dropdown.style.opacity=\"1\",this.isSearchable&&this.searchInput&&(this.searchInput.value=\"\",this.searchQuery=\"\",this.hasDynamicOptions||(this.options=JSON.parse(JSON.stringify(this.originalOptions)),this.renderOptions())),this.hasDynamicOptions&&this.getOptionsUsing){this.showLoadingState(!1);try{let e=await this.getOptionsUsing(),i=Array.isArray(e)?e:e&&Array.isArray(e.options)?e.options:[];if(this.options=i,this.originalOptions=JSON.parse(JSON.stringify(i)),this.populateLabelRepositoryFromOptions(i),this.isSearchable&&this.searchInput&&(this.searchInput.value&&this.searchInput.value.trim()!==\"\"||this.searchQuery&&this.searchQuery.trim()!==\"\")){let o=(this.searchInput.value||this.searchQuery||\"\").trim().toLowerCase();this.hideLoadingState(),this.filterOptions(o)}else this.renderOptions()}catch(e){console.error(\"Error fetching options:\",e),this.hideLoadingState()}}else(!this.hasInitialNoOptionsMessage||this.searchQuery)&&this.hideLoadingState();if(this.isSearchable&&this.searchInput)this.searchInput.focus();else{this.selectedIndex=-1;let e=this.getVisibleOptions();if(this.isMultiple){if(Array.isArray(this.state)&&this.state.length>0){for(let i=0;i<e.length;i++)if(this.state.includes(e[i].getAttribute(\"data-value\"))){this.selectedIndex=i;break}}}else for(let i=0;i<e.length;i++)if(e[i].getAttribute(\"data-value\")===this.state){this.selectedIndex=i;break}this.selectedIndex===-1&&e.length>0&&(this.selectedIndex=0),this.selectedIndex>=0&&(e[this.selectedIndex].classList.add(\"fi-selected\"),e[this.selectedIndex].focus())}}positionDropdown(){let t=this.position===\"top\"?\"top-start\":\"bottom-start\",e=[wi(4),Si({padding:5})];this.position!==\"top\"&&this.position!==\"bottom\"&&e.push(xi());let i=this.selectButton.closest(\".fi-fixed-positioning-context\")!==null&&this.selectButton.closest(\".fi-absolute-positioning-context\")===null;Oi(this.selectButton,this.dropdown,{placement:t,middleware:e,strategy:i?\"fixed\":\"absolute\"}).then(({x:o,y:s})=>{Object.assign(this.dropdown.style,{left:`${o}px`,top:`${s}px`})})}deferPositionDropdown(){this.isOpen&&(this.positioningRequestAnimationFrame&&(cancelAnimationFrame(this.positioningRequestAnimationFrame),this.positioningRequestAnimationFrame=null),this.positioningRequestAnimationFrame=requestAnimationFrame(()=>{this.positionDropdown(),this.positioningRequestAnimationFrame=null}))}closeDropdown(){this.dropdown.style.display=\"none\",this.selectButton.setAttribute(\"aria-expanded\",\"false\"),this.isOpen=!1,this.searchTimeout&&(clearTimeout(this.searchTimeout),this.searchTimeout=null),this.activeSearchId++,this.isSearching=!1,this.hideLoadingState(),this.resizeListener&&(window.removeEventListener(\"resize\",this.resizeListener),this.resizeListener=null),this.scrollListener&&(window.removeEventListener(\"scroll\",this.scrollListener,!0),this.scrollListener=null),this.getVisibleOptions().forEach(e=>{e.classList.remove(\"fi-selected\")}),this.dropdown.removeAttribute(\"aria-activedescendant\")}focusNextOption(){let t=this.getVisibleOptions();if(t.length!==0){if(this.selectedIndex>=0&&this.selectedIndex<t.length&&t[this.selectedIndex].classList.remove(\"fi-selected\"),this.selectedIndex===t.length-1&&this.isSearchable&&this.searchInput){this.selectedIndex=-1,this.searchInput.focus(),this.dropdown.removeAttribute(\"aria-activedescendant\");return}this.selectedIndex=(this.selectedIndex+1)%t.length,t[this.selectedIndex].classList.add(\"fi-selected\"),t[this.selectedIndex].focus(),t[this.selectedIndex].id&&this.dropdown.setAttribute(\"aria-activedescendant\",t[this.selectedIndex].id),this.scrollOptionIntoView(t[this.selectedIndex])}}focusPreviousOption(){let t=this.getVisibleOptions();if(t.length!==0){if(this.selectedIndex>=0&&this.selectedIndex<t.length&&t[this.selectedIndex].classList.remove(\"fi-selected\"),(this.selectedIndex===0||this.selectedIndex===-1)&&this.isSearchable&&this.searchInput){this.selectedIndex=-1,this.searchInput.focus(),this.dropdown.removeAttribute(\"aria-activedescendant\");return}this.selectedIndex=(this.selectedIndex-1+t.length)%t.length,t[this.selectedIndex].classList.add(\"fi-selected\"),t[this.selectedIndex].focus(),t[this.selectedIndex].id&&this.dropdown.setAttribute(\"aria-activedescendant\",t[this.selectedIndex].id),this.scrollOptionIntoView(t[this.selectedIndex])}}scrollOptionIntoView(t){if(!t)return;let e=this.dropdown.getBoundingClientRect(),i=t.getBoundingClientRect();i.bottom>e.bottom?this.dropdown.scrollTop+=i.bottom-e.bottom:i.top<e.top&&(this.dropdown.scrollTop-=e.top-i.top)}getVisibleOptions(){let t=[];this.optionsList.classList.contains(\"fi-dropdown-list\")?t=Array.from(this.optionsList.querySelectorAll(':scope > li[role=\"option\"]')):t=Array.from(this.optionsList.querySelectorAll(':scope > ul.fi-dropdown-list > li[role=\"option\"]'));let e=Array.from(this.optionsList.querySelectorAll('li.fi-select-input-option-group > ul > li[role=\"option\"]'));return[...t,...e]}getSelectedOptionLabels(){if(!Array.isArray(this.state)||this.state.length===0)return{};let t={};for(let e of this.state){let i=!1;for(let o of this.options)if(o.options&&Array.isArray(o.options)){for(let s of o.options)if(s.value===e){t[e]=s.label,i=!0;break}if(i)break}else if(o.value===e){t[e]=o.label,i=!0;break}}return t}handleSearch(t){let e=t.target.value.trim();if(this.searchQuery=e,this.searchTimeout&&clearTimeout(this.searchTimeout),e===\"\"){this.options=JSON.parse(JSON.stringify(this.originalOptions)),this.renderOptions();return}if(!this.getSearchResultsUsing||typeof this.getSearchResultsUsing!=\"function\"||!this.hasDynamicSearchResults){this.filterOptions(e);return}this.searchTimeout=setTimeout(async()=>{this.searchTimeout=null;let i=++this.activeSearchId;this.isSearching=!0;try{this.showLoadingState(!0);let o=await this.getSearchResultsUsing(e);if(i!==this.activeSearchId||!this.isOpen)return;let s=Array.isArray(o)?o:o&&Array.isArray(o.options)?o.options:[];this.options=s,this.populateLabelRepositoryFromOptions(s),this.hideLoadingState(),this.renderOptions(),this.isOpen&&this.deferPositionDropdown(),this.options.length===0&&this.showNoResultsMessage()}catch(o){i===this.activeSearchId&&(console.error(\"Error fetching search results:\",o),this.hideLoadingState(),this.options=JSON.parse(JSON.stringify(this.originalOptions)),this.renderOptions())}finally{i===this.activeSearchId&&(this.isSearching=!1)}},this.searchDebounce)}showLoadingState(t=!1){this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList),this.hideLoadingState();let e=document.createElement(\"div\");e.className=\"fi-select-input-message\",e.textContent=t?this.searchingMessage:this.loadingMessage,this.dropdown.appendChild(e),this.isOpen&&this.deferPositionDropdown()}hideLoadingState(){let t=this.dropdown.querySelector(\".fi-select-input-message\");t&&t.remove()}showNoOptionsMessage(){this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList),this.hideLoadingState();let t=document.createElement(\"div\");t.className=\"fi-select-input-message\",t.textContent=this.noOptionsMessage,this.dropdown.appendChild(t),this.isOpen&&this.deferPositionDropdown()}showNoResultsMessage(){this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList),this.hideLoadingState();let t=document.createElement(\"div\");t.className=\"fi-select-input-message\",t.textContent=this.noSearchResultsMessage,this.dropdown.appendChild(t),this.isOpen&&this.deferPositionDropdown()}filterOptions(t){let e=this.searchableOptionFields.includes(\"label\"),i=this.searchableOptionFields.includes(\"value\");t=t.toLowerCase();let o=[];for(let s of this.originalOptions)if(s.options&&Array.isArray(s.options)){let r=s.options.filter(a=>e&&a.label.toLowerCase().includes(t)||i&&String(a.value).toLowerCase().includes(t));r.length>0&&o.push({label:s.label,options:r})}else(e&&s.label.toLowerCase().includes(t)||i&&String(s.value).toLowerCase().includes(t))&&o.push(s);this.options=o,this.renderOptions(),this.options.length===0&&this.showNoResultsMessage(),this.isOpen&&this.positionDropdown()}selectOption(t){if(this.isDisabled)return;if(!this.isMultiple){this.state=t,this.updateSelectedDisplay(),this.renderOptions(),this.closeDropdown(),this.selectButton.focus(),this.onStateChange(this.state);return}let e=Array.isArray(this.state)?[...this.state]:[];if(e.includes(t)){let o=this.selectedDisplay.querySelector(`[data-value=\"${t}\"]`);if(P(o)){let s=o.parentElement;P(s)&&s.children.length===1?(e=e.filter(r=>r!==t),this.state=e,this.updateSelectedDisplay()):(o.remove(),e=e.filter(r=>r!==t),this.state=e)}else e=e.filter(s=>s!==t),this.state=e,this.updateSelectedDisplay();this.renderOptions(),this.isOpen&&this.deferPositionDropdown(),this.maintainFocusInMultipleMode(),this.onStateChange(this.state);return}if(this.maxItems&&e.length>=this.maxItems){this.maxItemsMessage&&alert(this.maxItemsMessage);return}e.push(t),this.state=e;let i=this.selectedDisplay.querySelector(\".fi-select-input-value-badges-ctn\");bt(i)?this.updateSelectedDisplay():this.addSingleBadge(t,i),this.renderOptions(),this.isOpen&&this.deferPositionDropdown(),this.maintainFocusInMultipleMode(),this.onStateChange(this.state)}async addSingleBadge(t,e){let i=this.labelRepository[t];if(bt(i)&&(i=this.getSelectedOptionLabel(t),P(i)&&(this.labelRepository[t]=i)),bt(i)&&this.getOptionLabelsUsing)try{let s=await this.getOptionLabelsUsing();for(let r of s)if(P(r)&&r.value===t&&r.label!==void 0){i=r.label,this.labelRepository[t]=i;break}}catch(s){console.error(\"Error fetching option label:\",s)}bt(i)&&(i=t);let o=this.createBadgeElement(t,i);e.appendChild(o)}maintainFocusInMultipleMode(){if(this.isSearchable&&this.searchInput){this.searchInput.focus();return}let t=this.getVisibleOptions();if(t.length!==0){if(this.selectedIndex=-1,Array.isArray(this.state)&&this.state.length>0){for(let e=0;e<t.length;e++)if(this.state.includes(t[e].getAttribute(\"data-value\"))){this.selectedIndex=e;break}}this.selectedIndex===-1&&(this.selectedIndex=0),t[this.selectedIndex].classList.add(\"fi-selected\"),t[this.selectedIndex].focus()}}disable(){this.isDisabled||(this.isDisabled=!0,this.applyDisabledState(),this.isOpen&&this.closeDropdown())}enable(){this.isDisabled&&(this.isDisabled=!1,this.applyDisabledState())}applyDisabledState(){if(this.isDisabled){if(this.selectButton.setAttribute(\"disabled\",\"disabled\"),this.selectButton.setAttribute(\"aria-disabled\",\"true\"),this.selectButton.classList.add(\"fi-disabled\"),this.isMultiple&&this.container.querySelectorAll(\".fi-select-input-badge-remove\").forEach(e=>{e.setAttribute(\"disabled\",\"disabled\"),e.classList.add(\"fi-disabled\")}),!this.isMultiple&&this.canSelectPlaceholder){let t=this.container.querySelector(\".fi-select-input-value-remove-btn\");t&&(t.setAttribute(\"disabled\",\"disabled\"),t.classList.add(\"fi-disabled\"))}this.isSearchable&&this.searchInput&&(this.searchInput.setAttribute(\"disabled\",\"disabled\"),this.searchInput.classList.add(\"fi-disabled\"))}else{if(this.selectButton.removeAttribute(\"disabled\"),this.selectButton.removeAttribute(\"aria-disabled\"),this.selectButton.classList.remove(\"fi-disabled\"),this.isMultiple&&this.container.querySelectorAll(\".fi-select-input-badge-remove\").forEach(e=>{e.removeAttribute(\"disabled\"),e.classList.remove(\"fi-disabled\")}),!this.isMultiple&&this.canSelectPlaceholder){let t=this.container.querySelector(\".fi-select-input-value-remove-btn\");t&&(t.removeAttribute(\"disabled\"),t.classList.add(\"fi-disabled\"))}this.isSearchable&&this.searchInput&&(this.searchInput.removeAttribute(\"disabled\"),this.searchInput.classList.remove(\"fi-disabled\"))}}destroy(){this.selectButton&&this.buttonClickListener&&this.selectButton.removeEventListener(\"click\",this.buttonClickListener),this.documentClickListener&&document.removeEventListener(\"click\",this.documentClickListener),this.selectButton&&this.buttonKeydownListener&&this.selectButton.removeEventListener(\"keydown\",this.buttonKeydownListener),this.dropdown&&this.dropdownKeydownListener&&this.dropdown.removeEventListener(\"keydown\",this.dropdownKeydownListener),this.resizeListener&&(window.removeEventListener(\"resize\",this.resizeListener),this.resizeListener=null),this.scrollListener&&(window.removeEventListener(\"scroll\",this.scrollListener,!0),this.scrollListener=null),this.refreshOptionLabelListener&&window.removeEventListener(\"filament-forms::select.refreshSelectedOptionLabel\",this.refreshOptionLabelListener),this.isOpen&&this.closeDropdown(),this.searchTimeout&&(clearTimeout(this.searchTimeout),this.searchTimeout=null),this.container&&this.container.remove()}};function Qn({canOptionLabelsWrap:n,canSelectPlaceholder:t,getOptionLabelUsing:e,getOptionLabelsUsing:i,getOptionsUsing:o,getSearchResultsUsing:s,hasDynamicOptions:r,hasDynamicSearchResults:a,hasInitialNoOptionsMessage:l,initialOptionLabel:c,initialOptionLabels:f,initialState:d,isAutofocused:p,isDisabled:u,isHtmlAllowed:g,isMultiple:m,isReorderable:S,isSearchable:E,livewireId:w,loadingMessage:D,maxItems:A,maxItemsMessage:C,noOptionsMessage:F,noSearchResultsMessage:q,options:J,optionsLimit:_,placeholder:V,position:W,searchDebounce:tt,searchingMessage:z,searchPrompt:k,searchableOptionFields:Y,state:B,statePath:X}){return{select:null,state:B,init(){this.select=new Ee({canOptionLabelsWrap:n,canSelectPlaceholder:t,element:this.$refs.select,getOptionLabelUsing:e,getOptionLabelsUsing:i,getOptionsUsing:o,getSearchResultsUsing:s,hasDynamicOptions:r,hasDynamicSearchResults:a,hasInitialNoOptionsMessage:l,initialOptionLabel:c,initialOptionLabels:f,initialState:d,isAutofocused:p,isDisabled:u,isHtmlAllowed:g,isMultiple:m,isReorderable:S,isSearchable:E,livewireId:w,loadingMessage:D,maxItems:A,maxItemsMessage:C,noOptionsMessage:F,noSearchResultsMessage:q,onStateChange:L=>{this.state=L},options:J,optionsLimit:_,placeholder:V,position:W,searchableOptionFields:Y,searchDebounce:tt,searchingMessage:z,searchPrompt:k,state:this.state,statePath:X}),this.$watch(\"state\",L=>{this.$nextTick(()=>{this.select&&this.select.state!==L&&(this.select.state=L,this.select.updateSelectedDisplay(),this.select.renderOptions())})})},destroy(){this.select&&(this.select.destroy(),this.select=null)}}}export{Qn as default};\n/*! Bundled license information:\n\nsortablejs/modular/sortable.esm.js:\n  (**!\n   * Sortable 1.15.6\n   * @author\tRubaXa   <trash@rubaxa.org>\n   * @author\towenm    <owen23355@gmail.com>\n   * @license MIT\n   *)\n*/\n"
  },
  {
    "path": "public/js/filament/forms/components/slider.js",
    "content": "var I;(function(r){r.Range=\"range\",r.Steps=\"steps\",r.Positions=\"positions\",r.Count=\"count\",r.Values=\"values\"})(I||(I={}));var O;(function(r){r[r.None=-1]=\"None\",r[r.NoValue=0]=\"NoValue\",r[r.LargeValue=1]=\"LargeValue\",r[r.SmallValue=2]=\"SmallValue\"})(O||(O={}));function we(r){return rt(r)&&typeof r.from==\"function\"}function rt(r){return typeof r==\"object\"&&typeof r.to==\"function\"}function zt(r){r.parentElement.removeChild(r)}function St(r){return r!=null}function Ft(r){r.preventDefault()}function Ce(r){return r.filter(function(t){return this[t]?!1:this[t]=!0},{})}function Ee(r,t){return Math.round(r/t)*t}function Ae(r,t){var s=r.getBoundingClientRect(),f=r.ownerDocument,u=f.documentElement,d=Bt(f);return/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)&&(d.x=0),t?s.top+d.y-u.clientTop:s.left+d.x-u.clientLeft}function R(r){return typeof r==\"number\"&&!isNaN(r)&&isFinite(r)}function Rt(r,t,s){s>0&&(L(r,t),setTimeout(function(){et(r,t)},s))}function jt(r){return Math.max(Math.min(r,100),0)}function it(r){return Array.isArray(r)?r:[r]}function Pe(r){r=String(r);var t=r.split(\".\");return t.length>1?t[1].length:0}function L(r,t){r.classList&&!/\\s/.test(t)?r.classList.add(t):r.className+=\" \"+t}function et(r,t){r.classList&&!/\\s/.test(t)?r.classList.remove(t):r.className=r.className.replace(new RegExp(\"(^|\\\\b)\"+t.split(\" \").join(\"|\")+\"(\\\\b|$)\",\"gi\"),\" \")}function Ve(r,t){return r.classList?r.classList.contains(t):new RegExp(\"\\\\b\"+t+\"\\\\b\").test(r.className)}function Bt(r){var t=window.pageXOffset!==void 0,s=(r.compatMode||\"\")===\"CSS1Compat\",f=t?window.pageXOffset:s?r.documentElement.scrollLeft:r.body.scrollLeft,u=t?window.pageYOffset:s?r.documentElement.scrollTop:r.body.scrollTop;return{x:f,y:u}}function De(){return window.navigator.pointerEnabled?{start:\"pointerdown\",move:\"pointermove\",end:\"pointerup\"}:window.navigator.msPointerEnabled?{start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}:{start:\"mousedown touchstart\",move:\"mousemove touchmove\",end:\"mouseup touchend\"}}function ye(){var r=!1;try{var t=Object.defineProperty({},\"passive\",{get:function(){r=!0}});window.addEventListener(\"test\",null,t)}catch{}return r}function ke(){return window.CSS&&CSS.supports&&CSS.supports(\"touch-action\",\"none\")}function bt(r,t){return 100/(t-r)}function xt(r,t,s){return t*100/(r[s+1]-r[s])}function Ue(r,t){return xt(r,r[0]<0?t+Math.abs(r[0]):t-r[0],0)}function Me(r,t){return t*(r[1]-r[0])/100+r[0]}function G(r,t){for(var s=1;r>=t[s];)s+=1;return s}function _e(r,t,s){if(s>=r.slice(-1)[0])return 100;var f=G(s,r),u=r[f-1],d=r[f],v=t[f-1],w=t[f];return v+Ue([u,d],s)/bt(v,w)}function Le(r,t,s){if(s>=100)return r.slice(-1)[0];var f=G(s,t),u=r[f-1],d=r[f],v=t[f-1],w=t[f];return Me([u,d],(s-v)*bt(v,w))}function Oe(r,t,s,f){if(f===100)return f;var u=G(f,r),d=r[u-1],v=r[u];return s?f-d>(v-d)/2?v:d:t[u-1]?r[u-1]+Ee(f-r[u-1],t[u-1]):f}var Kt=(function(){function r(t,s,f){this.xPct=[],this.xVal=[],this.xSteps=[],this.xNumSteps=[],this.xHighestCompleteStep=[],this.xSteps=[f||!1],this.xNumSteps=[!1],this.snap=s;var u,d=[];for(Object.keys(t).forEach(function(v){d.push([it(t[v]),v])}),d.sort(function(v,w){return v[0][0]-w[0][0]}),u=0;u<d.length;u++)this.handleEntryPoint(d[u][1],d[u][0]);for(this.xNumSteps=this.xSteps.slice(0),u=0;u<this.xNumSteps.length;u++)this.handleStepPoint(u,this.xNumSteps[u])}return r.prototype.getDistance=function(t){for(var s=[],f=0;f<this.xNumSteps.length-1;f++)s[f]=xt(this.xVal,t,f);return s},r.prototype.getAbsoluteDistance=function(t,s,f){var u=0;if(t<this.xPct[this.xPct.length-1])for(;t>this.xPct[u+1];)u++;else t===this.xPct[this.xPct.length-1]&&(u=this.xPct.length-2);!f&&t===this.xPct[u+1]&&u++,s===null&&(s=[]);var d,v=1,w=s[u],C=0,p=0,D=0,y=0;for(f?d=(t-this.xPct[u])/(this.xPct[u+1]-this.xPct[u]):d=(this.xPct[u+1]-t)/(this.xPct[u+1]-this.xPct[u]);w>0;)C=this.xPct[u+1+y]-this.xPct[u+y],s[u+y]*v+100-d*100>100?(p=C*d,v=(w-100*d)/s[u+y],d=1):(p=s[u+y]*C/100*v,v=0),f?(D=D-p,this.xPct.length+y>=1&&y--):(D=D+p,this.xPct.length-y>=1&&y++),w=s[u+y]*v;return t+D},r.prototype.toStepping=function(t){return t=_e(this.xVal,this.xPct,t),t},r.prototype.fromStepping=function(t){return Le(this.xVal,this.xPct,t)},r.prototype.getStep=function(t){return t=Oe(this.xPct,this.xSteps,this.snap,t),t},r.prototype.getDefaultStep=function(t,s,f){var u=G(t,this.xPct);return(t===100||s&&t===this.xPct[u-1])&&(u=Math.max(u-1,1)),(this.xVal[u]-this.xVal[u-1])/f},r.prototype.getNearbySteps=function(t){var s=G(t,this.xPct);return{stepBefore:{startValue:this.xVal[s-2],step:this.xNumSteps[s-2],highestStep:this.xHighestCompleteStep[s-2]},thisStep:{startValue:this.xVal[s-1],step:this.xNumSteps[s-1],highestStep:this.xHighestCompleteStep[s-1]},stepAfter:{startValue:this.xVal[s],step:this.xNumSteps[s],highestStep:this.xHighestCompleteStep[s]}}},r.prototype.countStepDecimals=function(){var t=this.xNumSteps.map(Pe);return Math.max.apply(null,t)},r.prototype.hasNoSize=function(){return this.xVal[0]===this.xVal[this.xVal.length-1]},r.prototype.convert=function(t){return this.getStep(this.toStepping(t))},r.prototype.handleEntryPoint=function(t,s){var f;if(t===\"min\"?f=0:t===\"max\"?f=100:f=parseFloat(t),!R(f)||!R(s[0]))throw new Error(\"noUiSlider: 'range' value isn't numeric.\");this.xPct.push(f),this.xVal.push(s[0]);var u=Number(s[1]);f?this.xSteps.push(isNaN(u)?!1:u):isNaN(u)||(this.xSteps[0]=u),this.xHighestCompleteStep.push(0)},r.prototype.handleStepPoint=function(t,s){if(s){if(this.xVal[t]===this.xVal[t+1]){this.xSteps[t]=this.xHighestCompleteStep[t]=this.xVal[t];return}this.xSteps[t]=xt([this.xVal[t],this.xVal[t+1]],s,0)/bt(this.xPct[t],this.xPct[t+1]);var f=(this.xVal[t+1]-this.xVal[t])/this.xNumSteps[t],u=Math.ceil(Number(f.toFixed(3))-1),d=this.xVal[t]+this.xNumSteps[t]*u;this.xHighestCompleteStep[t]=d}},r})(),Nt={to:function(r){return r===void 0?\"\":r.toFixed(2)},from:Number},It={target:\"target\",base:\"base\",origin:\"origin\",handle:\"handle\",handleLower:\"handle-lower\",handleUpper:\"handle-upper\",touchArea:\"touch-area\",horizontal:\"horizontal\",vertical:\"vertical\",background:\"background\",connect:\"connect\",connects:\"connects\",ltr:\"ltr\",rtl:\"rtl\",textDirectionLtr:\"txt-dir-ltr\",textDirectionRtl:\"txt-dir-rtl\",draggable:\"draggable\",drag:\"state-drag\",tap:\"state-tap\",active:\"active\",tooltip:\"tooltip\",pips:\"pips\",pipsHorizontal:\"pips-horizontal\",pipsVertical:\"pips-vertical\",marker:\"marker\",markerHorizontal:\"marker-horizontal\",markerVertical:\"marker-vertical\",markerNormal:\"marker-normal\",markerLarge:\"marker-large\",markerSub:\"marker-sub\",value:\"value\",valueHorizontal:\"value-horizontal\",valueVertical:\"value-vertical\",valueNormal:\"value-normal\",valueLarge:\"value-large\",valueSub:\"value-sub\"},K={tooltips:\".__tooltips\",aria:\".__aria\"};function He(r,t){if(!R(t))throw new Error(\"noUiSlider: 'step' is not numeric.\");r.singleStep=t}function ze(r,t){if(!R(t))throw new Error(\"noUiSlider: 'keyboardPageMultiplier' is not numeric.\");r.keyboardPageMultiplier=t}function Fe(r,t){if(!R(t))throw new Error(\"noUiSlider: 'keyboardMultiplier' is not numeric.\");r.keyboardMultiplier=t}function Re(r,t){if(!R(t))throw new Error(\"noUiSlider: 'keyboardDefaultStep' is not numeric.\");r.keyboardDefaultStep=t}function je(r,t){if(typeof t!=\"object\"||Array.isArray(t))throw new Error(\"noUiSlider: 'range' is not an object.\");if(t.min===void 0||t.max===void 0)throw new Error(\"noUiSlider: Missing 'min' or 'max' in 'range'.\");r.spectrum=new Kt(t,r.snap||!1,r.singleStep)}function Ne(r,t){if(t=it(t),!Array.isArray(t)||!t.length)throw new Error(\"noUiSlider: 'start' option is incorrect.\");r.handles=t.length,r.start=t}function Be(r,t){if(typeof t!=\"boolean\")throw new Error(\"noUiSlider: 'snap' option must be a boolean.\");r.snap=t}function Ke(r,t){if(typeof t!=\"boolean\")throw new Error(\"noUiSlider: 'animate' option must be a boolean.\");r.animate=t}function Ie(r,t){if(typeof t!=\"number\")throw new Error(\"noUiSlider: 'animationDuration' option must be a number.\");r.animationDuration=t}function qt(r,t){var s=[!1],f;if(t===\"lower\"?t=[!0,!1]:t===\"upper\"&&(t=[!1,!0]),t===!0||t===!1){for(f=1;f<r.handles;f++)s.push(t);s.push(!1)}else{if(!Array.isArray(t)||!t.length||t.length!==r.handles+1)throw new Error(\"noUiSlider: 'connect' option doesn't match handle count.\");s=t}r.connect=s}function qe(r,t){switch(t){case\"horizontal\":r.ort=0;break;case\"vertical\":r.ort=1;break;default:throw new Error(\"noUiSlider: 'orientation' option is invalid.\")}}function Tt(r,t){if(!R(t))throw new Error(\"noUiSlider: 'margin' option must be numeric.\");t!==0&&(r.margin=r.spectrum.getDistance(t))}function Te(r,t){if(!R(t))throw new Error(\"noUiSlider: 'limit' option must be numeric.\");if(r.limit=r.spectrum.getDistance(t),!r.limit||r.handles<2)throw new Error(\"noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles.\")}function Xe(r,t){var s;if(!R(t)&&!Array.isArray(t))throw new Error(\"noUiSlider: 'padding' option must be numeric or array of exactly 2 numbers.\");if(Array.isArray(t)&&!(t.length===2||R(t[0])||R(t[1])))throw new Error(\"noUiSlider: 'padding' option must be numeric or array of exactly 2 numbers.\");if(t!==0){for(Array.isArray(t)||(t=[t,t]),r.padding=[r.spectrum.getDistance(t[0]),r.spectrum.getDistance(t[1])],s=0;s<r.spectrum.xNumSteps.length-1;s++)if(r.padding[0][s]<0||r.padding[1][s]<0)throw new Error(\"noUiSlider: 'padding' option must be a positive number(s).\");var f=t[0]+t[1],u=r.spectrum.xVal[0],d=r.spectrum.xVal[r.spectrum.xVal.length-1];if(f/(d-u)>1)throw new Error(\"noUiSlider: 'padding' option must not exceed 100% of the range.\")}}function Ye(r,t){switch(t){case\"ltr\":r.dir=0;break;case\"rtl\":r.dir=1;break;default:throw new Error(\"noUiSlider: 'direction' option was not recognized.\")}}function We(r,t){if(typeof t!=\"string\")throw new Error(\"noUiSlider: 'behaviour' must be a string containing options.\");var s=t.indexOf(\"tap\")>=0,f=t.indexOf(\"drag\")>=0,u=t.indexOf(\"fixed\")>=0,d=t.indexOf(\"snap\")>=0,v=t.indexOf(\"hover\")>=0,w=t.indexOf(\"unconstrained\")>=0,C=t.indexOf(\"invert-connects\")>=0,p=t.indexOf(\"drag-all\")>=0,D=t.indexOf(\"smooth-steps\")>=0;if(u){if(r.handles!==2)throw new Error(\"noUiSlider: 'fixed' behaviour must be used with 2 handles\");Tt(r,r.start[1]-r.start[0])}if(C&&r.handles!==2)throw new Error(\"noUiSlider: 'invert-connects' behaviour must be used with 2 handles\");if(w&&(r.margin||r.limit))throw new Error(\"noUiSlider: 'unconstrained' behaviour cannot be used with margin or limit\");r.events={tap:s||d,drag:f,dragAll:p,smoothSteps:D,fixed:u,snap:d,hover:v,unconstrained:w,invertConnects:C}}function $e(r,t){if(t!==!1)if(t===!0||rt(t)){r.tooltips=[];for(var s=0;s<r.handles;s++)r.tooltips.push(t)}else{if(t=it(t),t.length!==r.handles)throw new Error(\"noUiSlider: must pass a formatter for all handles.\");t.forEach(function(f){if(typeof f!=\"boolean\"&&!rt(f))throw new Error(\"noUiSlider: 'tooltips' must be passed a formatter or 'false'.\")}),r.tooltips=t}}function Ge(r,t){if(t.length!==r.handles)throw new Error(\"noUiSlider: must pass a attributes for all handles.\");r.handleAttributes=t}function Je(r,t){if(!rt(t))throw new Error(\"noUiSlider: 'ariaFormat' requires 'to' method.\");r.ariaFormat=t}function Ze(r,t){if(!we(t))throw new Error(\"noUiSlider: 'format' requires 'to' and 'from' methods.\");r.format=t}function Qe(r,t){if(typeof t!=\"boolean\")throw new Error(\"noUiSlider: 'keyboardSupport' option must be a boolean.\");r.keyboardSupport=t}function tr(r,t){r.documentElement=t}function er(r,t){if(typeof t!=\"string\"&&t!==!1)throw new Error(\"noUiSlider: 'cssPrefix' must be a string or `false`.\");r.cssPrefix=t}function rr(r,t){if(typeof t!=\"object\")throw new Error(\"noUiSlider: 'cssClasses' must be an object.\");typeof r.cssPrefix==\"string\"?(r.cssClasses={},Object.keys(t).forEach(function(s){r.cssClasses[s]=r.cssPrefix+t[s]})):r.cssClasses=t}function Xt(r){var t={margin:null,limit:null,padding:null,animate:!0,animationDuration:300,ariaFormat:Nt,format:Nt},s={step:{r:!1,t:He},keyboardPageMultiplier:{r:!1,t:ze},keyboardMultiplier:{r:!1,t:Fe},keyboardDefaultStep:{r:!1,t:Re},start:{r:!0,t:Ne},connect:{r:!0,t:qt},direction:{r:!0,t:Ye},snap:{r:!1,t:Be},animate:{r:!1,t:Ke},animationDuration:{r:!1,t:Ie},range:{r:!0,t:je},orientation:{r:!1,t:qe},margin:{r:!1,t:Tt},limit:{r:!1,t:Te},padding:{r:!1,t:Xe},behaviour:{r:!0,t:We},ariaFormat:{r:!1,t:Je},format:{r:!1,t:Ze},tooltips:{r:!1,t:$e},keyboardSupport:{r:!0,t:Qe},documentElement:{r:!1,t:tr},cssPrefix:{r:!0,t:er},cssClasses:{r:!0,t:rr},handleAttributes:{r:!1,t:Ge}},f={connect:!1,direction:\"ltr\",behaviour:\"tap\",orientation:\"horizontal\",keyboardSupport:!0,cssPrefix:\"noUi-\",cssClasses:It,keyboardPageMultiplier:5,keyboardMultiplier:1,keyboardDefaultStep:10};r.format&&!r.ariaFormat&&(r.ariaFormat=r.format),Object.keys(s).forEach(function(C){if(!St(r[C])&&f[C]===void 0){if(s[C].r)throw new Error(\"noUiSlider: '\"+C+\"' is required.\");return}s[C].t(t,St(r[C])?r[C]:f[C])}),t.pips=r.pips;var u=document.createElement(\"div\"),d=u.style.msTransform!==void 0,v=u.style.transform!==void 0;t.transformRule=v?\"transform\":d?\"msTransform\":\"webkitTransform\";var w=[[\"left\",\"top\"],[\"right\",\"bottom\"]];return t.style=w[t.dir][t.ort],t}function ir(r,t,s){var f=De(),u=ke(),d=u&&ye(),v=r,w,C,p,D,y,j,m=t.spectrum,z=[],b=[],M=[],Y=0,F={},q=!1,B=r.ownerDocument,H=t.documentElement||B.documentElement,J=B.body,Wt=B.dir===\"rtl\"||t.ort===1?0:100;function N(e,i){var a=B.createElement(\"div\");return i&&L(a,i),e.appendChild(a),a}function $t(e,i){var a=N(e,t.cssClasses.origin),n=N(a,t.cssClasses.handle);if(N(n,t.cssClasses.touchArea),n.setAttribute(\"data-handle\",String(i)),t.keyboardSupport&&(n.setAttribute(\"tabindex\",\"0\"),n.addEventListener(\"keydown\",function(l){return ce(l,i)})),t.handleAttributes!==void 0){var o=t.handleAttributes[i];Object.keys(o).forEach(function(l){n.setAttribute(l,o[l])})}return n.setAttribute(\"role\",\"slider\"),n.setAttribute(\"aria-orientation\",t.ort?\"vertical\":\"horizontal\"),i===0?L(n,t.cssClasses.handleLower):i===t.handles-1&&L(n,t.cssClasses.handleUpper),a.handle=n,a}function at(e,i){return i?N(e,t.cssClasses.connect):!1}function Gt(e,i){C=N(i,t.cssClasses.connects),p=[],D=[],D.push(at(C,e[0]));for(var a=0;a<t.handles;a++)p.push($t(i,a)),M[a]=a,D.push(at(C,e[a+1]))}function Jt(e){L(e,t.cssClasses.target),t.dir===0?L(e,t.cssClasses.ltr):L(e,t.cssClasses.rtl),t.ort===0?L(e,t.cssClasses.horizontal):L(e,t.cssClasses.vertical);var i=getComputedStyle(e).direction;return i===\"rtl\"?L(e,t.cssClasses.textDirectionRtl):L(e,t.cssClasses.textDirectionLtr),N(e,t.cssClasses.base)}function Zt(e,i){return!t.tooltips||!t.tooltips[i]?!1:N(e.firstChild,t.cssClasses.tooltip)}function wt(){return v.hasAttribute(\"disabled\")}function nt(e){var i=p[e];return i.hasAttribute(\"disabled\")}function Qt(e){e!=null?(p[e].setAttribute(\"disabled\",\"\"),p[e].handle.removeAttribute(\"tabindex\")):(v.setAttribute(\"disabled\",\"\"),p.forEach(function(i){i.handle.removeAttribute(\"tabindex\")}))}function te(e){e!=null?(p[e].removeAttribute(\"disabled\"),p[e].handle.setAttribute(\"tabindex\",\"0\")):(v.removeAttribute(\"disabled\"),p.forEach(function(i){i.removeAttribute(\"disabled\"),i.handle.setAttribute(\"tabindex\",\"0\")}))}function st(){j&&(W(\"update\"+K.tooltips),j.forEach(function(e){e&&zt(e)}),j=null)}function Ct(){st(),j=p.map(Zt),ct(\"update\"+K.tooltips,function(e,i,a){if(!(!j||!t.tooltips)&&j[i]!==!1){var n=e[i];t.tooltips[i]!==!0&&(n=t.tooltips[i].to(a[i])),j[i].innerHTML=n}})}function ee(){W(\"update\"+K.aria),ct(\"update\"+K.aria,function(e,i,a,n,o){M.forEach(function(l){var h=p[l],c=Z(b,l,0,!0,!0,!0),S=Z(b,l,100,!0,!0,!0),x=o[l],E=String(t.ariaFormat.to(a[l]));c=m.fromStepping(c).toFixed(1),S=m.fromStepping(S).toFixed(1),x=m.fromStepping(x).toFixed(1),h.children[0].setAttribute(\"aria-valuemin\",c),h.children[0].setAttribute(\"aria-valuemax\",S),h.children[0].setAttribute(\"aria-valuenow\",x),h.children[0].setAttribute(\"aria-valuetext\",E)})})}function re(e){if(e.mode===I.Range||e.mode===I.Steps)return m.xVal;if(e.mode===I.Count){if(e.values<2)throw new Error(\"noUiSlider: 'values' (>= 2) required for mode 'count'.\");for(var i=e.values-1,a=100/i,n=[];i--;)n[i]=i*a;return n.push(100),Et(n,e.stepped)}return e.mode===I.Positions?Et(e.values,e.stepped):e.mode===I.Values?e.stepped?e.values.map(function(o){return m.fromStepping(m.getStep(m.toStepping(o)))}):e.values:[]}function Et(e,i){return e.map(function(a){return m.fromStepping(i?m.getStep(a):a)})}function ie(e){function i(x,E){return Number((x+E).toFixed(7))}var a=re(e),n={},o=m.xVal[0],l=m.xVal[m.xVal.length-1],h=!1,c=!1,S=0;return a=Ce(a.slice().sort(function(x,E){return x-E})),a[0]!==o&&(a.unshift(o),h=!0),a[a.length-1]!==l&&(a.push(l),c=!0),a.forEach(function(x,E){var A,g,V,_=x,k=a[E+1],U,dt,pt,mt,Lt,gt,Ot,Ht=e.mode===I.Steps;for(Ht&&(A=m.xNumSteps[E]),A||(A=k-_),k===void 0&&(k=_),A=Math.max(A,1e-7),g=_;g<=k;g=i(g,A)){for(U=m.toStepping(g),dt=U-S,Lt=dt/(e.density||1),gt=Math.round(Lt),Ot=dt/gt,V=1;V<=gt;V+=1)pt=S+V*Ot,n[pt.toFixed(5)]=[m.fromStepping(pt),0];mt=a.indexOf(g)>-1?O.LargeValue:Ht?O.SmallValue:O.NoValue,!E&&h&&g!==k&&(mt=0),g===k&&c||(n[U.toFixed(5)]=[g,mt]),S=U}}),n}function ae(e,i,a){var n,o,l=B.createElement(\"div\"),h=(n={},n[O.None]=\"\",n[O.NoValue]=t.cssClasses.valueNormal,n[O.LargeValue]=t.cssClasses.valueLarge,n[O.SmallValue]=t.cssClasses.valueSub,n),c=(o={},o[O.None]=\"\",o[O.NoValue]=t.cssClasses.markerNormal,o[O.LargeValue]=t.cssClasses.markerLarge,o[O.SmallValue]=t.cssClasses.markerSub,o),S=[t.cssClasses.valueHorizontal,t.cssClasses.valueVertical],x=[t.cssClasses.markerHorizontal,t.cssClasses.markerVertical];L(l,t.cssClasses.pips),L(l,t.ort===0?t.cssClasses.pipsHorizontal:t.cssClasses.pipsVertical);function E(g,V){var _=V===t.cssClasses.value,k=_?S:x,U=_?h:c;return V+\" \"+k[t.ort]+\" \"+U[g]}function A(g,V,_){if(_=i?i(V,_):_,_!==O.None){var k=N(l,!1);k.className=E(_,t.cssClasses.marker),k.style[t.style]=g+\"%\",_>O.NoValue&&(k=N(l,!1),k.className=E(_,t.cssClasses.value),k.setAttribute(\"data-value\",String(V)),k.style[t.style]=g+\"%\",k.innerHTML=String(a.to(V)))}}return Object.keys(e).forEach(function(g){A(g,e[g][0],e[g][1])}),l}function ot(){y&&(zt(y),y=null)}function lt(e){ot();var i=ie(e),a=e.filter,n=e.format||{to:function(o){return String(Math.round(o))}};return y=v.appendChild(ae(i,a,n)),y}function At(){var e=w.getBoundingClientRect(),i=\"offset\"+[\"Width\",\"Height\"][t.ort];return t.ort===0?e.width||w[i]:e.height||w[i]}function T(e,i,a,n){var o=function(h){var c=ne(h,n.pageOffset,n.target||i);if(!c||wt()&&!n.doNotReject||Ve(v,t.cssClasses.tap)&&!n.doNotReject||e===f.start&&c.buttons!==void 0&&c.buttons>1||n.hover&&c.buttons)return!1;d||c.preventDefault(),c.calcPoint=c.points[t.ort],a(c,n)},l=[];return e.split(\" \").forEach(function(h){i.addEventListener(h,o,d?{passive:!0}:!1),l.push([h,o])}),l}function ne(e,i,a){var n=e.type.indexOf(\"touch\")===0,o=e.type.indexOf(\"mouse\")===0,l=e.type.indexOf(\"pointer\")===0,h=0,c=0;if(e.type.indexOf(\"MSPointer\")===0&&(l=!0),e.type===\"mousedown\"&&!e.buttons&&!e.touches)return!1;if(n){var S=function(A){var g=A.target;return g===a||a.contains(g)||e.composed&&e.composedPath().shift()===a};if(e.type===\"touchstart\"){var x=Array.prototype.filter.call(e.touches,S);if(x.length>1)return!1;h=x[0].pageX,c=x[0].pageY}else{var E=Array.prototype.find.call(e.changedTouches,S);if(!E)return!1;h=E.pageX,c=E.pageY}}return i=i||Bt(B),(o||l)&&(h=e.clientX+i.x,c=e.clientY+i.y),e.pageOffset=i,e.points=[h,c],e.cursor=o||l,e}function Pt(e){var i=e-Ae(w,t.ort),a=i*100/At();return a=jt(a),t.dir?100-a:a}function se(e){var i=100,a=!1;return p.forEach(function(n,o){if(!nt(o)){var l=b[o],h=Math.abs(l-e),c=h===100&&i===100,S=h<i,x=h<=i&&e>l;(S||x||c)&&(a=o,i=h)}}),a}function oe(e,i){e.type===\"mouseout\"&&e.target.nodeName===\"HTML\"&&e.relatedTarget===null&&ft(e,i)}function le(e,i){if(navigator.appVersion.indexOf(\"MSIE 9\")===-1&&e.buttons===0&&i.buttonsProperty!==0)return ft(e,i);var a=(t.dir?-1:1)*(e.calcPoint-i.startCalcPoint),n=a*100/i.baseSize;Dt(a>0,n,i.locations,i.handleNumbers,i.connect)}function ft(e,i){i.handle&&(et(i.handle,t.cssClasses.active),Y-=1),i.listeners.forEach(function(a){H.removeEventListener(a[0],a[1])}),Y===0&&(et(v,t.cssClasses.drag),vt(),e.cursor&&(J.style.cursor=\"\",J.removeEventListener(\"selectstart\",Ft))),t.events.smoothSteps&&(i.handleNumbers.forEach(function(a){X(a,b[a],!0,!0,!1,!1)}),i.handleNumbers.forEach(function(a){P(\"update\",a)})),i.handleNumbers.forEach(function(a){P(\"change\",a),P(\"set\",a),P(\"end\",a)})}function ut(e,i){if(!i.handleNumbers.some(nt)){var a;if(i.handleNumbers.length===1){var n=p[i.handleNumbers[0]];a=n.children[0],Y+=1,L(a,t.cssClasses.active)}e.stopPropagation();var o=[],l=T(f.move,H,le,{target:e.target,handle:a,connect:i.connect,listeners:o,startCalcPoint:e.calcPoint,baseSize:At(),pageOffset:e.pageOffset,handleNumbers:i.handleNumbers,buttonsProperty:e.buttons,locations:b.slice()}),h=T(f.end,H,ft,{target:e.target,handle:a,listeners:o,doNotReject:!0,handleNumbers:i.handleNumbers}),c=T(\"mouseout\",H,oe,{target:e.target,handle:a,listeners:o,doNotReject:!0,handleNumbers:i.handleNumbers});o.push.apply(o,l.concat(h,c)),e.cursor&&(J.style.cursor=getComputedStyle(e.target).cursor,p.length>1&&L(v,t.cssClasses.drag),J.addEventListener(\"selectstart\",Ft,!1)),i.handleNumbers.forEach(function(S){P(\"start\",S)})}}function fe(e){e.stopPropagation();var i=Pt(e.calcPoint),a=se(i);a!==!1&&(t.events.snap||Rt(v,t.cssClasses.tap,t.animationDuration),X(a,i,!0,!0),vt(),P(\"slide\",a,!0),P(\"update\",a,!0),t.events.snap?ut(e,{handleNumbers:[a]}):(P(\"change\",a,!0),P(\"set\",a,!0)))}function ue(e){var i=Pt(e.calcPoint),a=m.getStep(i),n=m.fromStepping(a);Object.keys(F).forEach(function(o){o.split(\".\")[0]===\"hover\"&&F[o].forEach(function(l){l.call(tt,n)})})}function ce(e,i){if(wt()||nt(i))return!1;var a=[\"Left\",\"Right\"],n=[\"Down\",\"Up\"],o=[\"PageDown\",\"PageUp\"],l=[\"Home\",\"End\"];t.dir&&!t.ort?a.reverse():t.ort&&!t.dir&&(n.reverse(),o.reverse());var h=e.key.replace(\"Arrow\",\"\"),c=h===o[0],S=h===o[1],x=h===n[0]||h===a[0]||c,E=h===n[1]||h===a[1]||S,A=h===l[0],g=h===l[1];if(!x&&!E&&!A&&!g)return!0;e.preventDefault();var V;if(E||x){var _=x?0:1,k=Mt(i),U=k[_];if(U===null)return!1;U===!1&&(U=m.getDefaultStep(b[i],x,t.keyboardDefaultStep)),S||c?U*=t.keyboardPageMultiplier:U*=t.keyboardMultiplier,U=Math.max(U,1e-7),U=(x?-1:1)*U,V=z[i]+U}else g?V=t.spectrum.xVal[t.spectrum.xVal.length-1]:V=t.spectrum.xVal[0];return X(i,m.toStepping(V),!0,!0),P(\"slide\",i),P(\"update\",i),P(\"change\",i),P(\"set\",i),!1}function Vt(e){e.fixed||p.forEach(function(i,a){T(f.start,i.children[0],ut,{handleNumbers:[a]})}),e.tap&&T(f.start,w,fe,{}),e.hover&&T(f.move,w,ue,{hover:!0}),e.drag&&D.forEach(function(i,a){if(!(i===!1||a===0||a===D.length-1)){var n=p[a-1],o=p[a],l=[i],h=[n,o],c=[a-1,a];L(i,t.cssClasses.draggable),e.fixed&&(l.push(n.children[0]),l.push(o.children[0])),e.dragAll&&(h=p,c=M),l.forEach(function(S){T(f.start,S,ut,{handles:h,handleNumbers:c,connect:i})})}})}function ct(e,i){F[e]=F[e]||[],F[e].push(i),e.split(\".\")[0]===\"update\"&&p.forEach(function(a,n){P(\"update\",n)})}function he(e){return e===K.aria||e===K.tooltips}function W(e){var i=e&&e.split(\".\")[0],a=i?e.substring(i.length):e;Object.keys(F).forEach(function(n){var o=n.split(\".\")[0],l=n.substring(o.length);(!i||i===o)&&(!a||a===l)&&(!he(l)||a===l)&&delete F[n]})}function P(e,i,a){Object.keys(F).forEach(function(n){var o=n.split(\".\")[0];e===o&&F[n].forEach(function(l){l.call(tt,z.map(t.format.to),i,z.slice(),a||!1,b.slice(),tt)})})}function Z(e,i,a,n,o,l,h){var c;return p.length>1&&!t.events.unconstrained&&(n&&i>0&&(c=m.getAbsoluteDistance(e[i-1],t.margin,!1),a=Math.max(a,c)),o&&i<p.length-1&&(c=m.getAbsoluteDistance(e[i+1],t.margin,!0),a=Math.min(a,c))),p.length>1&&t.limit&&(n&&i>0&&(c=m.getAbsoluteDistance(e[i-1],t.limit,!1),a=Math.min(a,c)),o&&i<p.length-1&&(c=m.getAbsoluteDistance(e[i+1],t.limit,!0),a=Math.max(a,c))),t.padding&&(i===0&&(c=m.getAbsoluteDistance(0,t.padding[0],!1),a=Math.max(a,c)),i===p.length-1&&(c=m.getAbsoluteDistance(100,t.padding[1],!0),a=Math.min(a,c))),h||(a=m.getStep(a)),a=jt(a),a===e[i]&&!l?!1:a}function ht(e,i){var a=t.ort;return(a?i:e)+\", \"+(a?e:i)}function Dt(e,i,a,n,o){var l=a.slice(),h=n[0],c=t.events.smoothSteps,S=[!e,e],x=[e,!e];n=n.slice(),e&&n.reverse(),n.length>1?n.forEach(function(A,g){var V=Z(l,A,l[A]+i,S[g],x[g],!1,c);V===!1?i=0:(i=V-l[A],l[A]=V)}):S=x=[!0];var E=!1;n.forEach(function(A,g){E=X(A,a[A]+i,S[g],x[g],!1,c)||E}),E&&(n.forEach(function(A){P(\"update\",A),P(\"slide\",A)}),o!=null&&P(\"drag\",h))}function yt(e,i){return t.dir?100-e-i:e}function ve(e,i){b[e]=i,z[e]=m.fromStepping(i);var a=yt(i,0)-Wt,n=\"translate(\"+ht(a+\"%\",\"0\")+\")\";if(p[e].style[t.transformRule]=n,t.events.invertConnects&&b.length>1){var o=b.every(function(l,h,c){return h===0||l>=c[h-1]});if(q!==!o){xe();return}}$(e),$(e+1),q&&($(e-1),$(e+2))}function vt(){M.forEach(function(e){var i=b[e]>50?-1:1,a=3+(p.length+i*e);p[e].style.zIndex=String(a)})}function X(e,i,a,n,o,l){return o||(i=Z(b,e,i,a,n,!1,l)),i===!1?!1:(ve(e,i),!0)}function $(e){if(D[e]){var i=b.slice();q&&i.sort(function(c,S){return c-S});var a=0,n=100;e!==0&&(a=i[e-1]),e!==D.length-1&&(n=i[e]);var o=n-a,l=\"translate(\"+ht(yt(a,o)+\"%\",\"0\")+\")\",h=\"scale(\"+ht(o/100,\"1\")+\")\";D[e].style[t.transformRule]=l+\" \"+h}}function kt(e,i){return e===null||e===!1||e===void 0||(typeof e==\"number\"&&(e=String(e)),e=t.format.from(e),e!==!1&&(e=m.toStepping(e)),e===!1||isNaN(e))?b[i]:e}function Q(e,i,a){var n=it(e),o=b[0]===void 0;i=i===void 0?!0:i,t.animate&&!o&&Rt(v,t.cssClasses.tap,t.animationDuration),M.forEach(function(c){X(c,kt(n[c],c),!0,!1,a)});var l=M.length===1?0:1;if(o&&m.hasNoSize()&&(a=!0,b[0]=0,M.length>1)){var h=100/(M.length-1);M.forEach(function(c){b[c]=c*h})}for(;l<M.length;++l)M.forEach(function(c){X(c,b[c],!0,!0,a)});vt(),M.forEach(function(c){P(\"update\",c),n[c]!==null&&i&&P(\"set\",c)})}function de(e){Q(t.start,e)}function pe(e,i,a,n){if(e=Number(e),!(e>=0&&e<M.length))throw new Error(\"noUiSlider: invalid handle number, got: \"+e);X(e,kt(i,e),!0,!0,n),P(\"update\",e),a&&P(\"set\",e)}function Ut(e){if(e===void 0&&(e=!1),e)return z.length===1?z[0]:z.slice(0);var i=z.map(t.format.to);return i.length===1?i[0]:i}function me(){for(W(K.aria),W(K.tooltips),Object.keys(t.cssClasses).forEach(function(e){et(v,t.cssClasses[e])});v.firstChild;)v.removeChild(v.firstChild);delete v.noUiSlider}function Mt(e){var i=b[e],a=m.getNearbySteps(i),n=z[e],o=a.thisStep.step,l=null;if(t.snap)return[n-a.stepBefore.startValue||null,a.stepAfter.startValue-n||null];o!==!1&&n+o>a.stepAfter.startValue&&(o=a.stepAfter.startValue-n),n>a.thisStep.startValue?l=a.thisStep.step:a.stepBefore.step===!1?l=!1:l=n-a.stepBefore.highestStep,i===100?o=null:i===0&&(l=null);var h=m.countStepDecimals();return o!==null&&o!==!1&&(o=Number(o.toFixed(h))),l!==null&&l!==!1&&(l=Number(l.toFixed(h))),[l,o]}function ge(){return M.map(Mt)}function Se(e,i){var a=Ut(),n=[\"margin\",\"limit\",\"padding\",\"range\",\"animate\",\"snap\",\"step\",\"format\",\"pips\",\"tooltips\",\"connect\"];n.forEach(function(l){e[l]!==void 0&&(s[l]=e[l])});var o=Xt(s);n.forEach(function(l){e[l]!==void 0&&(t[l]=o[l])}),m=o.spectrum,t.margin=o.margin,t.limit=o.limit,t.padding=o.padding,t.pips?lt(t.pips):ot(),t.tooltips?Ct():st(),b=[],Q(St(e.start)?e.start:a,i),e.connect&&_t()}function _t(){for(;C.firstChild;)C.removeChild(C.firstChild);for(var e=0;e<=t.handles;e++)D[e]=at(C,t.connect[e]),$(e);Vt({drag:t.events.drag,fixed:!0})}function xe(){q=!q,qt(t,t.connect.map(function(e){return!e})),_t()}function be(){w=Jt(v),Gt(t.connect,w),Vt(t.events),Q(t.start),t.pips&&lt(t.pips),t.tooltips&&Ct(),ee()}be();var tt={destroy:me,steps:ge,on:ct,off:W,get:Ut,set:Q,setHandle:pe,reset:de,disable:Qt,enable:te,__moveHandles:function(e,i,a){Dt(e,i,b,a)},options:s,updateOptions:Se,target:v,removePips:ot,removeTooltips:st,getPositions:function(){return b.slice()},getTooltips:function(){return j},getOrigins:function(){return p},pips:lt};return tt}function ar(r,t){if(!r||!r.nodeName)throw new Error(\"noUiSlider: create requires a single element, got: \"+r);if(r.noUiSlider)throw new Error(\"noUiSlider: Slider was already initialized.\");var s=Xt(t),f=ir(r,s,t);return r.noUiSlider=f,f}var Yt={__spectrum:Kt,cssClasses:It,create:ar};function nr({arePipsStepped:r,behavior:t,decimalPlaces:s,fillTrack:f,isDisabled:u,isRtl:d,isVertical:v,maxDifference:w,minDifference:C,maxValue:p,minValue:D,nonLinearPoints:y,pipsDensity:j,pipsFilter:m,pipsFormatter:z,pipsMode:b,pipsValues:M,rangePadding:Y,state:F,step:q,tooltips:B}){return{state:F,slider:null,init(){this.slider=Yt.create(this.$el,{behaviour:t,direction:d?\"rtl\":\"ltr\",connect:f,format:{from:H=>+H,to:H=>s!==null?+H.toFixed(s):H},limit:w,margin:C,orientation:v?\"vertical\":\"horizontal\",padding:Y,pips:b?{density:j??10,filter:m,format:z,mode:b,stepped:r,values:M}:null,range:{min:D,...y??{},max:p},start:Alpine.raw(this.state),step:q,tooltips:B}),u&&this.slider.disable(),this.slider.on(\"change\",H=>{this.state=H.length>1?H:H[0]}),this.$watch(\"state\",()=>{this.slider.set(Alpine.raw(this.state))})},destroy(){this.slider.destroy(),this.slider=null}}}export{nr as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/tags-input.js",
    "content": "function s({state:n,splitKeys:a}){return{newTag:\"\",state:n,createTag(){if(this.newTag=this.newTag.trim(),this.newTag!==\"\"){if(this.state.includes(this.newTag)){this.newTag=\"\";return}this.state.push(this.newTag),this.newTag=\"\"}},deleteTag(t){this.state=this.state.filter(e=>e!==t)},reorderTags(t){let e=this.state.splice(t.oldIndex,1)[0];this.state.splice(t.newIndex,0,e),this.state=[...this.state]},input:{\"x-on:blur\":\"createTag()\",\"x-model\":\"newTag\",\"x-on:keydown\"(t){[\"Enter\",...a].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),this.createTag())},\"x-on:paste\"(){this.$nextTick(()=>{if(a.length===0){this.createTag();return}let t=a.map(e=>e.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")).join(\"|\");this.newTag.split(new RegExp(t,\"g\")).forEach(e=>{this.newTag=e,this.createTag()})})}}}}export{s as default};\n"
  },
  {
    "path": "public/js/filament/forms/components/textarea.js",
    "content": "function n({initialHeight:e,shouldAutosize:i,state:h}){return{state:h,wrapperEl:null,init(){this.wrapperEl=this.$el.parentNode,this.setInitialHeight(),i?this.$watch(\"state\",()=>{this.resize()}):this.setUpResizeObserver()},setInitialHeight(){this.$el.scrollHeight<=0||(this.wrapperEl.style.height=e+\"rem\")},resize(){if(this.$el.scrollHeight<=0)return;let t=this.$el.style.height;this.$el.style.height=\"0px\";let r=this.$el.scrollHeight;this.$el.style.height=t;let l=parseFloat(e)*parseFloat(getComputedStyle(document.documentElement).fontSize),s=Math.max(r,l)+\"px\";this.wrapperEl.style.height!==s&&(this.wrapperEl.style.height=s)},setUpResizeObserver(){new ResizeObserver(()=>{this.wrapperEl.style.height=this.$el.style.height}).observe(this.$el)}}}export{n as default};\n"
  },
  {
    "path": "public/js/filament/notifications/notifications.js",
    "content": "(()=>{function c(s,t=()=>{}){let i=!1;return function(){i?t.apply(this,arguments):(i=!0,s.apply(this,arguments))}}var d=s=>{s.data(\"notificationComponent\",({notification:t})=>({isShown:!1,computedStyle:null,transitionDuration:null,transitionEasing:null,unsubscribeLivewireHook:null,init(){this.computedStyle=window.getComputedStyle(this.$el),this.transitionDuration=parseFloat(this.computedStyle.transitionDuration)*1e3,this.transitionEasing=this.computedStyle.transitionTimingFunction,this.configureTransitions(),this.configureAnimations(),t.duration&&t.duration!==\"persistent\"&&setTimeout(()=>{if(!this.$el.matches(\":hover\")){this.close();return}this.$el.addEventListener(\"mouseleave\",()=>this.close())},t.duration),this.isShown=!0},configureTransitions(){let i=this.computedStyle.display,e=()=>{s.mutateDom(()=>{this.$el.style.setProperty(\"display\",i),this.$el.style.setProperty(\"visibility\",\"visible\")}),this.$el._x_isShown=!0},o=()=>{s.mutateDom(()=>{this.$el._x_isShown?this.$el.style.setProperty(\"visibility\",\"hidden\"):this.$el.style.setProperty(\"display\",\"none\")})},r=c(n=>n?e():o(),n=>{this.$el._x_toggleAndCascadeWithTransitions(this.$el,n,e,o)});s.effect(()=>r(this.isShown))},configureAnimations(){let i;this.unsubscribeLivewireHook=Livewire.interceptMessage(({onFinish:e,onSuccess:o})=>{requestAnimationFrame(()=>{let r=()=>this.$el.getBoundingClientRect().top,n=r();e(()=>{i=()=>{this.isShown&&this.$el.animate([{transform:`translateY(${n-r()}px)`},{transform:\"translateY(0px)\"}],{duration:this.transitionDuration,easing:this.transitionEasing})},this.$el.getAnimations().forEach(l=>l.finish())}),o(({payload:l})=>{l?.snapshot?.data?.isFilamentNotificationsComponent&&typeof i==\"function\"&&i()})})})},close(){this.isShown=!1,setTimeout(()=>window.dispatchEvent(new CustomEvent(\"notificationClosed\",{detail:{id:t.id}})),this.transitionDuration)},markAsRead(){window.dispatchEvent(new CustomEvent(\"markedNotificationAsRead\",{detail:{id:t.id}}))},markAsUnread(){window.dispatchEvent(new CustomEvent(\"markedNotificationAsUnread\",{detail:{id:t.id}}))},destroy(){this.unsubscribeLivewireHook?.()}}))};var h=class{constructor(){return this.id(crypto.randomUUID?.()??\"10000000-1000-4000-8000-100000000000\".replace(/[018]/g,t=>(+t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>+t/4).toString(16))),this}id(t){return this.id=t,this}title(t){return this.title=t,this}body(t){return this.body=t,this}actions(t){return this.actions=t,this}status(t){return this.status=t,this}color(t){return this.color=t,this}icon(t){return this.icon=t,this}iconColor(t){return this.iconColor=t,this}duration(t){return this.duration=t,this}seconds(t){return this.duration(t*1e3),this}persistent(){return this.duration(\"persistent\"),this}danger(){return this.status(\"danger\"),this}info(){return this.status(\"info\"),this}success(){return this.status(\"success\"),this}warning(){return this.status(\"warning\"),this}view(t){return this.view=t,this}viewData(t){return this.viewData=t,this}send(){return window.dispatchEvent(new CustomEvent(\"notificationSent\",{detail:{notification:this}})),this}},a=class{constructor(t){return this.name(t),this}name(t){return this.name=t,this}color(t){return this.color=t,this}dispatch(t,i){return this.event(t),this.eventData(i),this}dispatchSelf(t,i){return this.dispatch(t,i),this.dispatchDirection=\"self\",this}dispatchTo(t,i,e){return this.dispatch(i,e),this.dispatchDirection=\"to\",this.dispatchToComponent=t,this}emit(t,i){return this.dispatch(t,i),this}emitSelf(t,i){return this.dispatchSelf(t,i),this}emitTo(t,i,e){return this.dispatchTo(t,i,e),this}dispatchDirection(t){return this.dispatchDirection=t,this}dispatchToComponent(t){return this.dispatchToComponent=t,this}event(t){return this.event=t,this}eventData(t){return this.eventData=t,this}extraAttributes(t){return this.extraAttributes=t,this}icon(t){return this.icon=t,this}iconPosition(t){return this.iconPosition=t,this}outlined(t=!0){return this.isOutlined=t,this}disabled(t=!0){return this.isDisabled=t,this}label(t){return this.label=t,this}close(t=!0){return this.shouldClose=t,this}openUrlInNewTab(t=!0){return this.shouldOpenUrlInNewTab=t,this}size(t){return this.size=t,this}url(t){return this.url=t,this}view(t){return this.view=t,this}button(){return this.view(\"filament::components.button.index\"),this}grouped(){return this.view(\"filament::components.dropdown.list.item\"),this}iconButton(){return this.view(\"filament::components.icon-button\"),this}link(){return this.view(\"filament::components.link\"),this}},u=class{constructor(t){return this.actions(t),this}actions(t){return this.actions=t.map(i=>i.grouped()),this}color(t){return this.color=t,this}icon(t){return this.icon=t,this}iconPosition(t){return this.iconPosition=t,this}label(t){return this.label=t,this}tooltip(t){return this.tooltip=t,this}};window.FilamentNotificationAction=a;window.FilamentNotificationActionGroup=u;window.FilamentNotification=h;document.addEventListener(\"alpine:init\",()=>{window.Alpine.plugin(d)});})();\n"
  },
  {
    "path": "public/js/filament/schemas/components/actions.js",
    "content": "var i=()=>({isSticky:!1,width:0,resizeObserver:null,boundUpdateWidth:null,init(){let e=this.$el.parentElement;e&&(this.updateWidth(),this.resizeObserver=new ResizeObserver(()=>this.updateWidth()),this.resizeObserver.observe(e),this.boundUpdateWidth=this.updateWidth.bind(this),window.addEventListener(\"resize\",this.boundUpdateWidth))},enableSticky(){this.isSticky=this.$el.getBoundingClientRect().top>0},disableSticky(){this.isSticky=!1},updateWidth(){let e=this.$el.parentElement;if(!e)return;let t=getComputedStyle(this.$root.querySelector(\".fi-ac\"));this.width=e.offsetWidth+parseInt(t.marginInlineStart,10)*-1+parseInt(t.marginInlineEnd,10)*-1},destroy(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.boundUpdateWidth&&(window.removeEventListener(\"resize\",this.boundUpdateWidth),this.boundUpdateWidth=null)}});export{i as default};\n"
  },
  {
    "path": "public/js/filament/schemas/components/tabs.js",
    "content": "function v({activeTab:w,isScrollable:f,isTabPersistedInQueryString:m,livewireId:g,tab:T,tabQueryStringKey:r}){return{boundResizeHandler:null,isScrollable:f,resizeDebounceTimer:null,tab:T,unsubscribeLivewireHook:null,withinDropdownIndex:null,withinDropdownMounted:!1,init(){let t=this.getTabs(),e=new URLSearchParams(window.location.search);m&&e.has(r)&&t.includes(e.get(r))&&(this.tab=e.get(r)),(!this.tab||!t.includes(this.tab))&&(this.tab=t[w-1]),this.$watch(\"tab\",()=>{this.updateQueryString(),this.autofocusFields()}),this.autofocusFields(!0),this.unsubscribeLivewireHook=Livewire.interceptMessage(({message:i,onSuccess:a})=>{a(()=>{this.$nextTick(()=>{if(i.component.id!==g)return;let l=this.getTabs();l.includes(this.tab)||(this.tab=l[w-1]??this.tab)})})}),f||(this.boundResizeHandler=this.debouncedUpdateTabsWithinDropdown.bind(this),window.addEventListener(\"resize\",this.boundResizeHandler),this.updateTabsWithinDropdown())},calculateAvailableWidth(t){let e=window.getComputedStyle(t);return Math.floor(t.clientWidth)-Math.ceil(parseFloat(e.paddingLeft))*2},calculateContainerGap(t){let e=window.getComputedStyle(t);return Math.ceil(parseFloat(e.columnGap))},calculateDropdownIconWidth(t){let e=t.querySelector(\".fi-icon\");return Math.ceil(e.clientWidth)},calculateTabItemGap(t){let e=window.getComputedStyle(t);return Math.ceil(parseFloat(e.columnGap)||8)},calculateTabItemPadding(t){let e=window.getComputedStyle(t);return Math.ceil(parseFloat(e.paddingLeft))+Math.ceil(parseFloat(e.paddingRight))},findOverflowIndex(t,e,i,a,l,h){let u=t.map(n=>Math.ceil(n.clientWidth)),b=t.map(n=>{let c=n.querySelector(\".fi-tabs-item-label\"),s=n.querySelector(\".fi-badge\"),o=Math.ceil(c.clientWidth),d=s?Math.ceil(s.clientWidth):0;return{label:o,badge:d,total:o+(d>0?a+d:0)}});for(let n=0;n<t.length;n++){let c=u.slice(0,n+1).reduce((p,y)=>p+y,0),s=n*i,o=b.slice(n+1),d=o.length>0,D=d?Math.max(...o.map(p=>p.total)):0,W=d?l+D+a+h+i:0;if(c+s+W>e)return n}return-1},get isDropdownButtonVisible(){return this.withinDropdownMounted?this.withinDropdownIndex===null?!1:this.getTabs().findIndex(e=>e===this.tab)<this.withinDropdownIndex:!0},getTabs(){return this.$refs.tabsData?JSON.parse(this.$refs.tabsData.value):[]},updateQueryString(){if(!m)return;let t=new URL(window.location.href);t.searchParams.set(r,this.tab),history.replaceState(null,document.title,t.toString())},autofocusFields(t=!1){this.$nextTick(()=>{if(t&&document.activeElement&&document.activeElement!==document.body&&this.$el.compareDocumentPosition(document.activeElement)&Node.DOCUMENT_POSITION_PRECEDING)return;let e=this.$el.querySelectorAll(\".fi-sc-tabs-tab.fi-active [autofocus]\");for(let i of e)if(i.focus(),document.activeElement===i)break})},debouncedUpdateTabsWithinDropdown(){clearTimeout(this.resizeDebounceTimer),this.resizeDebounceTimer=setTimeout(()=>this.updateTabsWithinDropdown(),150)},async updateTabsWithinDropdown(){this.withinDropdownIndex=null,this.withinDropdownMounted=!1,await this.$nextTick();let t=this.$el.querySelector(\".fi-tabs\"),e=t.querySelector(\".fi-tabs-item:last-child\"),i=Array.from(t.children).slice(0,-1),a=i.map(s=>s.style.display);i.forEach(s=>s.style.display=\"\"),t.offsetHeight;let l=this.calculateAvailableWidth(t),h=this.calculateContainerGap(t),u=this.calculateDropdownIconWidth(e),b=this.calculateTabItemGap(i[0]),n=this.calculateTabItemPadding(i[0]),c=this.findOverflowIndex(i,l,h,b,n,u);i.forEach((s,o)=>s.style.display=a[o]),c!==-1&&(this.withinDropdownIndex=c),this.withinDropdownMounted=!0},destroy(){this.unsubscribeLivewireHook?.(),this.boundResizeHandler&&window.removeEventListener(\"resize\",this.boundResizeHandler),clearTimeout(this.resizeDebounceTimer)}}}export{v as default};\n"
  },
  {
    "path": "public/js/filament/schemas/components/wizard.js",
    "content": "function p({isSkippable:i,isStepPersistedInQueryString:n,key:r,startStep:o,stepQueryStringKey:h}){return{step:null,init(){this.step=this.getSteps().at(o-1),this.$watch(\"step\",()=>{this.updateQueryString(),this.autofocusFields()}),this.autofocusFields(!0)},async requestNextStep(){await this.$wire.callSchemaComponentMethod(r,\"nextStep\",{currentStepIndex:this.getStepIndex(this.step)})},goToNextStep(){let t=this.getStepIndex(this.step)+1;t>=this.getSteps().length||(this.step=this.getSteps()[t],this.scroll())},goToPreviousStep(){let t=this.getStepIndex(this.step)-1;t<0||(this.step=this.getSteps()[t],this.scroll())},goToStep(t){let e=this.getStepIndex(t);e<=-1||!i&&e>this.getStepIndex(this.step)||(this.step=t,this.scroll())},scroll(){this.$nextTick(()=>{this.$refs.header?.children[this.getStepIndex(this.step)].scrollIntoView({behavior:\"smooth\",block:\"start\"})})},autofocusFields(t=!1){this.$nextTick(()=>{if(t&&document.activeElement&&document.activeElement!==document.body&&this.$el.compareDocumentPosition(document.activeElement)&Node.DOCUMENT_POSITION_PRECEDING)return;let e=this.$refs[`step-${this.step}`]?.querySelectorAll(\"[autofocus]\")??[];for(let s of e)if(s.focus(),document.activeElement===s)break})},getStepIndex(t){let e=this.getSteps().findIndex(s=>s===t);return e===-1?0:e},getSteps(){return JSON.parse(this.$refs.stepsData.value)},isFirstStep(){return this.getStepIndex(this.step)<=0},isLastStep(){return this.getStepIndex(this.step)+1>=this.getSteps().length},isStepAccessible(t){return i||this.getStepIndex(this.step)>this.getStepIndex(t)},updateQueryString(){if(!n)return;let t=new URL(window.location.href);t.searchParams.set(h,this.step),history.replaceState(null,document.title,t.toString())}}}export{p as default};\n"
  },
  {
    "path": "public/js/filament/schemas/schemas.js",
    "content": "(()=>{var o=()=>({isSticky:!1,width:0,resizeObserver:null,boundUpdateWidth:null,init(){let i=this.$el.parentElement;i&&(this.updateWidth(),this.resizeObserver=new ResizeObserver(()=>this.updateWidth()),this.resizeObserver.observe(i),this.boundUpdateWidth=this.updateWidth.bind(this),window.addEventListener(\"resize\",this.boundUpdateWidth))},enableSticky(){this.isSticky=this.$el.getBoundingClientRect().top>0},disableSticky(){this.isSticky=!1},updateWidth(){let i=this.$el.parentElement;if(!i)return;let e=getComputedStyle(this.$root.querySelector(\".fi-ac\"));this.width=i.offsetWidth+parseInt(e.marginInlineStart,10)*-1+parseInt(e.marginInlineEnd,10)*-1},destroy(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.boundUpdateWidth&&(window.removeEventListener(\"resize\",this.boundUpdateWidth),this.boundUpdateWidth=null)}});var a=function(i,e,n){let t=i;if(e.startsWith(\"/\")&&(n=!0,e=e.slice(1)),n)return e;for(;e.startsWith(\"../\");)t=t.includes(\".\")?t.slice(0,t.lastIndexOf(\".\")):null,e=e.slice(3);return[\"\",null,void 0].includes(t)?e:[\"\",null,void 0].includes(e)?t:`${t}.${e}`},d=i=>{let e=Alpine.findClosest(i,n=>n.__livewire);if(!e)throw\"Could not find Livewire component in DOM tree.\";return e.__livewire};document.addEventListener(\"alpine:init\",()=>{window.Alpine.data(\"filamentSchema\",({livewireId:i})=>({handleFormValidationError(e){e.detail.livewireId===i&&this.$nextTick(()=>{let n=this.$el.querySelector(\"[data-validation-error]\");if(!n)return;let t=n;for(;t;)t.dispatchEvent(new CustomEvent(\"expand\")),t=t.parentNode;setTimeout(()=>n.closest(\"[data-field-wrapper]\").scrollIntoView({behavior:\"smooth\",block:\"start\",inline:\"start\"}),200)})},isStateChanged(e,n){if(e===void 0)return!1;try{return JSON.stringify(e)!==JSON.stringify(n)}catch{return e!==n}}})),window.Alpine.data(\"filamentSchemaComponent\",({path:i,containerPath:e,$wire:n})=>({$statePath:i,$get:(t,r)=>n.$get(a(e,t,r)),$set:(t,r,s,l=!1)=>n.$set(a(e,t,s),r,l),get $state(){return n.$get(i)}})),window.Alpine.data(\"filamentActionsSchemaComponent\",o),Livewire.interceptMessage(({message:i,onSuccess:e})=>{e(({payload:n})=>{n.effects?.dispatches?.forEach(t=>{if(!t.params?.awaitSchemaComponent)return;let r=Array.from(i.component.el.querySelectorAll(`[wire\\\\:partial=\"schema-component::${t.params.awaitSchemaComponent}\"]`)).filter(s=>d(s)===i.component);if(r.length!==1){if(r.length>1)throw`Multiple schema components found with key [${t.params.awaitSchemaComponent}].`;window.addEventListener(`schema-component-${component.id}-${t.params.awaitSchemaComponent}-loaded`,()=>{window.dispatchEvent(new CustomEvent(t.name,{detail:t.params}))},{once:!0})}})})})});})();\n"
  },
  {
    "path": "public/js/filament/support/async-alpine.js",
    "content": "(()=>{(()=>{var d=Object.defineProperty,m=t=>d(t,\"__esModule\",{value:!0}),f=(t,e)=>{m(t);for(var i in e)d(t,i,{get:e[i],enumerable:!0})},o={};f(o,{eager:()=>g,event:()=>w,idle:()=>y,media:()=>b,visible:()=>E});var c=()=>!0,g=c,v=({component:t,argument:e})=>new Promise(i=>{if(e)window.addEventListener(e,()=>i(),{once:!0});else{let n=a=>{a.detail.id===t.id&&(window.removeEventListener(\"async-alpine:load\",n),i())};window.addEventListener(\"async-alpine:load\",n)}}),w=v,x=()=>new Promise(t=>{\"requestIdleCallback\"in window?window.requestIdleCallback(t):setTimeout(t,200)}),y=x,A=({argument:t})=>new Promise(e=>{if(!t)return console.log(\"Async Alpine: media strategy requires a media query. Treating as 'eager'\"),e();let i=window.matchMedia(`(${t})`);i.matches?e():i.addEventListener(\"change\",e,{once:!0})}),b=A,$=({component:t,argument:e})=>new Promise(i=>{let n=e||\"0px 0px 0px 0px\",a=new IntersectionObserver(r=>{r[0].isIntersecting&&(a.disconnect(),i())},{rootMargin:n});a.observe(t.el)}),E=$;function P(t){let e=q(t),i=u(e);return i.type===\"method\"?{type:\"expression\",operator:\"&&\",parameters:[i]}:i}function q(t){let e=/\\s*([()])\\s*|\\s*(\\|\\||&&|\\|)\\s*|\\s*((?:[^()&|]+\\([^()]+\\))|[^()&|]+)\\s*/g,i=[],n;for(;(n=e.exec(t))!==null;){let[,a,r,s]=n;if(a!==void 0)i.push({type:\"parenthesis\",value:a});else if(r!==void 0)i.push({type:\"operator\",value:r===\"|\"?\"&&\":r});else{let p={type:\"method\",method:s.trim()};s.includes(\"(\")&&(p.method=s.substring(0,s.indexOf(\"(\")).trim(),p.argument=s.substring(s.indexOf(\"(\")+1,s.indexOf(\")\"))),s.method===\"immediate\"&&(s.method=\"eager\"),i.push(p)}}return i}function u(t){let e=h(t);for(;t.length>0&&(t[0].value===\"&&\"||t[0].value===\"|\"||t[0].value===\"||\");){let i=t.shift().value,n=h(t);e.type===\"expression\"&&e.operator===i?e.parameters.push(n):e={type:\"expression\",operator:i,parameters:[e,n]}}return e}function h(t){if(t[0].value===\"(\"){t.shift();let e=u(t);return t[0].value===\")\"&&t.shift(),e}else return t.shift()}var _=\"__internal_\",l={Alpine:null,_options:{prefix:\"ax-\",alpinePrefix:\"x-\",root:\"load\",inline:\"load-src\",defaultStrategy:\"eager\"},_alias:!1,_data:{},_realIndex:0,get _index(){return this._realIndex++},init(t,e={}){return this.Alpine=t,this._options={...this._options,...e},this},start(){return this._processInline(),this._setupComponents(),this._mutations(),this},data(t,e=!1){return this._data[t]={loaded:!1,download:e},this},url(t,e){!t||!e||(this._data[t]||this.data(t),this._data[t].download=()=>import(this._parseUrl(e)))},alias(t){this._alias=t},_processInline(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.inline}]`);for(let e of t)this._inlineElement(e)},_inlineElement(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`),i=t.getAttribute(`${this._options.prefix}${this._options.inline}`);if(!e||!i)return;let n=this._parseName(e);this.url(n,i)},_setupComponents(){let t=document.querySelectorAll(`[${this._options.prefix}${this._options.root}]`);for(let e of t)this._setupComponent(e)},_setupComponent(t){let e=t.getAttribute(`${this._options.alpinePrefix}data`);t.setAttribute(`${this._options.alpinePrefix}ignore`,\"\");let i=this._parseName(e),n=t.getAttribute(`${this._options.prefix}${this._options.root}`)||this._options.defaultStrategy;this._componentStrategy({name:i,strategy:n,el:t,id:t.id||this._index})},async _componentStrategy(t){let e=P(t.strategy);await this._generateRequirements(t,e),await this._download(t.name),this._activate(t)},_generateRequirements(t,e){if(e.type===\"expression\"){if(e.operator===\"&&\")return Promise.all(e.parameters.map(i=>this._generateRequirements(t,i)));if(e.operator===\"||\")return Promise.any(e.parameters.map(i=>this._generateRequirements(t,i)))}return o[e.method]?o[e.method]({component:t,argument:e.argument}):!1},async _download(t){if(t.startsWith(_)||(this._handleAlias(t),!this._data[t]||this._data[t].loaded))return;let e=await this._getModule(t);this.Alpine.data(t,e),this._data[t].loaded=!0},async _getModule(t){if(!this._data[t])return;let e=await this._data[t].download(t);return typeof e==\"function\"?e:e[t]||e.default||Object.values(e)[0]||!1},_activate(t){this.Alpine.destroyTree(t.el),t.el.removeAttribute(`${this._options.alpinePrefix}ignore`),t.el._x_ignore=!1,this.Alpine.initTree(t.el)},_mutations(){new MutationObserver(t=>{for(let e of t)if(e.addedNodes)for(let i of e.addedNodes)i.nodeType===1&&(i.hasAttribute(`${this._options.prefix}${this._options.root}`)&&this._mutationEl(i),i.querySelectorAll(`[${this._options.prefix}${this._options.root}]`).forEach(n=>this._mutationEl(n)))}).observe(document,{attributes:!0,childList:!0,subtree:!0})},_mutationEl(t){t.hasAttribute(`${this._options.prefix}${this._options.inline}`)&&this._inlineElement(t),this._setupComponent(t)},_handleAlias(t){if(!(!this._alias||this._data[t])){if(typeof this._alias==\"function\"){this.data(t,this._alias);return}this.url(t,this._alias.replaceAll(\"[name]\",t))}},_parseName(t){return(t||\"\").split(/[({]/g)[0]||`${_}${this._index}`},_parseUrl(t){return new RegExp(\"^(?:[a-z+]+:)?//\",\"i\").test(t)?t:new URL(t,document.baseURI).href}};document.addEventListener(\"alpine:init\",()=>{window.AsyncAlpine=l,l.init(Alpine,window.AsyncAlpineOptions||{}),document.dispatchEvent(new CustomEvent(\"async-alpine:init\")),l.start()})})();})();\n"
  },
  {
    "path": "public/js/filament/support/support.js",
    "content": "(()=>{var qo=Object.create;var Ti=Object.defineProperty;var Go=Object.getOwnPropertyDescriptor;var Ko=Object.getOwnPropertyNames;var Jo=Object.getPrototypeOf,Qo=Object.prototype.hasOwnProperty;var Kr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Zo=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Ko(t))!Qo.call(e,i)&&i!==r&&Ti(e,i,{get:()=>t[i],enumerable:!(n=Go(t,i))||n.enumerable});return e};var ea=(e,t,r)=>(r=e!=null?qo(Jo(e)):{},Zo(t||!e||!e.__esModule?Ti(r,\"default\",{value:e,enumerable:!0}):r,e));var uo=Kr(()=>{});var po=Kr(()=>{});var ho=Kr((Hs,yr)=>{(function(){\"use strict\";var e=\"input is invalid type\",t=\"finalize already called\",r=typeof window==\"object\",n=r?window:{};n.JS_MD5_NO_WINDOW&&(r=!1);var i=!r&&typeof self==\"object\",o=!n.JS_MD5_NO_NODE_JS&&typeof process==\"object\"&&process.versions&&process.versions.node;o?n=global:i&&(n=self);var a=!n.JS_MD5_NO_COMMON_JS&&typeof yr==\"object\"&&yr.exports,c=typeof define==\"function\"&&define.amd,f=!n.JS_MD5_NO_ARRAY_BUFFER&&typeof ArrayBuffer<\"u\",u=\"0123456789abcdef\".split(\"\"),y=[128,32768,8388608,-2147483648],m=[0,8,16,24],O=[\"hex\",\"array\",\"digest\",\"buffer\",\"arrayBuffer\",\"base64\"],S=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\"),x=[],M;if(f){var I=new ArrayBuffer(68);M=new Uint8Array(I),x=new Uint32Array(I)}var $=Array.isArray;(n.JS_MD5_NO_NODE_JS||!$)&&($=function(l){return Object.prototype.toString.call(l)===\"[object Array]\"});var A=ArrayBuffer.isView;f&&(n.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW||!A)&&(A=function(l){return typeof l==\"object\"&&l.buffer&&l.buffer.constructor===ArrayBuffer});var N=function(l){var h=typeof l;if(h===\"string\")return[l,!0];if(h!==\"object\"||l===null)throw new Error(e);if(f&&l.constructor===ArrayBuffer)return[new Uint8Array(l),!1];if(!$(l)&&!A(l))throw new Error(e);return[l,!1]},Y=function(l){return function(h){return new X(!0).update(h)[l]()}},ne=function(){var l=Y(\"hex\");o&&(l=J(l)),l.create=function(){return new X},l.update=function(p){return l.create().update(p)};for(var h=0;h<O.length;++h){var v=O[h];l[v]=Y(v)}return l},J=function(l){var h=uo(),v=po().Buffer,p;v.from&&!n.JS_MD5_NO_BUFFER_FROM?p=v.from:p=function(P){return new v(P)};var j=function(P){if(typeof P==\"string\")return h.createHash(\"md5\").update(P,\"utf8\").digest(\"hex\");if(P==null)throw new Error(e);return P.constructor===ArrayBuffer&&(P=new Uint8Array(P)),$(P)||A(P)||P.constructor===v?h.createHash(\"md5\").update(p(P)).digest(\"hex\"):l(P)};return j},V=function(l){return function(h,v){return new Q(h,!0).update(v)[l]()}},de=function(){var l=V(\"hex\");l.create=function(p){return new Q(p)},l.update=function(p,j){return l.create(p).update(j)};for(var h=0;h<O.length;++h){var v=O[h];l[v]=V(v)}return l};function X(l){if(l)x[0]=x[16]=x[1]=x[2]=x[3]=x[4]=x[5]=x[6]=x[7]=x[8]=x[9]=x[10]=x[11]=x[12]=x[13]=x[14]=x[15]=0,this.blocks=x,this.buffer8=M;else if(f){var h=new ArrayBuffer(68);this.buffer8=new Uint8Array(h),this.blocks=new Uint32Array(h)}else this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h0=this.h1=this.h2=this.h3=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0}X.prototype.update=function(l){if(this.finalized)throw new Error(t);var h=N(l);l=h[0];for(var v=h[1],p,j=0,P,R=l.length,Z=this.blocks,ze=this.buffer8;j<R;){if(this.hashed&&(this.hashed=!1,Z[0]=Z[16],Z[16]=Z[1]=Z[2]=Z[3]=Z[4]=Z[5]=Z[6]=Z[7]=Z[8]=Z[9]=Z[10]=Z[11]=Z[12]=Z[13]=Z[14]=Z[15]=0),v)if(f)for(P=this.start;j<R&&P<64;++j)p=l.charCodeAt(j),p<128?ze[P++]=p:p<2048?(ze[P++]=192|p>>>6,ze[P++]=128|p&63):p<55296||p>=57344?(ze[P++]=224|p>>>12,ze[P++]=128|p>>>6&63,ze[P++]=128|p&63):(p=65536+((p&1023)<<10|l.charCodeAt(++j)&1023),ze[P++]=240|p>>>18,ze[P++]=128|p>>>12&63,ze[P++]=128|p>>>6&63,ze[P++]=128|p&63);else for(P=this.start;j<R&&P<64;++j)p=l.charCodeAt(j),p<128?Z[P>>>2]|=p<<m[P++&3]:p<2048?(Z[P>>>2]|=(192|p>>>6)<<m[P++&3],Z[P>>>2]|=(128|p&63)<<m[P++&3]):p<55296||p>=57344?(Z[P>>>2]|=(224|p>>>12)<<m[P++&3],Z[P>>>2]|=(128|p>>>6&63)<<m[P++&3],Z[P>>>2]|=(128|p&63)<<m[P++&3]):(p=65536+((p&1023)<<10|l.charCodeAt(++j)&1023),Z[P>>>2]|=(240|p>>>18)<<m[P++&3],Z[P>>>2]|=(128|p>>>12&63)<<m[P++&3],Z[P>>>2]|=(128|p>>>6&63)<<m[P++&3],Z[P>>>2]|=(128|p&63)<<m[P++&3]);else if(f)for(P=this.start;j<R&&P<64;++j)ze[P++]=l[j];else for(P=this.start;j<R&&P<64;++j)Z[P>>>2]|=l[j]<<m[P++&3];this.lastByteIndex=P,this.bytes+=P-this.start,P>=64?(this.start=P-64,this.hash(),this.hashed=!0):this.start=P}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this},X.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var l=this.blocks,h=this.lastByteIndex;l[h>>>2]|=y[h&3],h>=56&&(this.hashed||this.hash(),l[0]=l[16],l[16]=l[1]=l[2]=l[3]=l[4]=l[5]=l[6]=l[7]=l[8]=l[9]=l[10]=l[11]=l[12]=l[13]=l[14]=l[15]=0),l[14]=this.bytes<<3,l[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},X.prototype.hash=function(){var l,h,v,p,j,P,R=this.blocks;this.first?(l=R[0]-680876937,l=(l<<7|l>>>25)-271733879<<0,p=(-1732584194^l&2004318071)+R[1]-117830708,p=(p<<12|p>>>20)+l<<0,v=(-271733879^p&(l^-271733879))+R[2]-1126478375,v=(v<<17|v>>>15)+p<<0,h=(l^v&(p^l))+R[3]-1316259209,h=(h<<22|h>>>10)+v<<0):(l=this.h0,h=this.h1,v=this.h2,p=this.h3,l+=(p^h&(v^p))+R[0]-680876936,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[1]-389564586,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[2]+606105819,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[3]-1044525330,h=(h<<22|h>>>10)+v<<0),l+=(p^h&(v^p))+R[4]-176418897,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[5]+1200080426,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[6]-1473231341,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[7]-45705983,h=(h<<22|h>>>10)+v<<0,l+=(p^h&(v^p))+R[8]+1770035416,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[9]-1958414417,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[10]-42063,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[11]-1990404162,h=(h<<22|h>>>10)+v<<0,l+=(p^h&(v^p))+R[12]+1804603682,l=(l<<7|l>>>25)+h<<0,p+=(v^l&(h^v))+R[13]-40341101,p=(p<<12|p>>>20)+l<<0,v+=(h^p&(l^h))+R[14]-1502002290,v=(v<<17|v>>>15)+p<<0,h+=(l^v&(p^l))+R[15]+1236535329,h=(h<<22|h>>>10)+v<<0,l+=(v^p&(h^v))+R[1]-165796510,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[6]-1069501632,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[11]+643717713,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[0]-373897302,h=(h<<20|h>>>12)+v<<0,l+=(v^p&(h^v))+R[5]-701558691,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[10]+38016083,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[15]-660478335,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[4]-405537848,h=(h<<20|h>>>12)+v<<0,l+=(v^p&(h^v))+R[9]+568446438,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[14]-1019803690,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[3]-187363961,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[8]+1163531501,h=(h<<20|h>>>12)+v<<0,l+=(v^p&(h^v))+R[13]-1444681467,l=(l<<5|l>>>27)+h<<0,p+=(h^v&(l^h))+R[2]-51403784,p=(p<<9|p>>>23)+l<<0,v+=(l^h&(p^l))+R[7]+1735328473,v=(v<<14|v>>>18)+p<<0,h+=(p^l&(v^p))+R[12]-1926607734,h=(h<<20|h>>>12)+v<<0,j=h^v,l+=(j^p)+R[5]-378558,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[8]-2022574463,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[11]+1839030562,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[14]-35309556,h=(h<<23|h>>>9)+v<<0,j=h^v,l+=(j^p)+R[1]-1530992060,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[4]+1272893353,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[7]-155497632,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[10]-1094730640,h=(h<<23|h>>>9)+v<<0,j=h^v,l+=(j^p)+R[13]+681279174,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[0]-358537222,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[3]-722521979,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[6]+76029189,h=(h<<23|h>>>9)+v<<0,j=h^v,l+=(j^p)+R[9]-640364487,l=(l<<4|l>>>28)+h<<0,p+=(j^l)+R[12]-421815835,p=(p<<11|p>>>21)+l<<0,P=p^l,v+=(P^h)+R[15]+530742520,v=(v<<16|v>>>16)+p<<0,h+=(P^v)+R[2]-995338651,h=(h<<23|h>>>9)+v<<0,l+=(v^(h|~p))+R[0]-198630844,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[7]+1126891415,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[14]-1416354905,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[5]-57434055,h=(h<<21|h>>>11)+v<<0,l+=(v^(h|~p))+R[12]+1700485571,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[3]-1894986606,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[10]-1051523,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[1]-2054922799,h=(h<<21|h>>>11)+v<<0,l+=(v^(h|~p))+R[8]+1873313359,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[15]-30611744,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[6]-1560198380,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[13]+1309151649,h=(h<<21|h>>>11)+v<<0,l+=(v^(h|~p))+R[4]-145523070,l=(l<<6|l>>>26)+h<<0,p+=(h^(l|~v))+R[11]-1120210379,p=(p<<10|p>>>22)+l<<0,v+=(l^(p|~h))+R[2]+718787259,v=(v<<15|v>>>17)+p<<0,h+=(p^(v|~l))+R[9]-343485551,h=(h<<21|h>>>11)+v<<0,this.first?(this.h0=l+1732584193<<0,this.h1=h-271733879<<0,this.h2=v-1732584194<<0,this.h3=p+271733878<<0,this.first=!1):(this.h0=this.h0+l<<0,this.h1=this.h1+h<<0,this.h2=this.h2+v<<0,this.h3=this.h3+p<<0)},X.prototype.hex=function(){this.finalize();var l=this.h0,h=this.h1,v=this.h2,p=this.h3;return u[l>>>4&15]+u[l&15]+u[l>>>12&15]+u[l>>>8&15]+u[l>>>20&15]+u[l>>>16&15]+u[l>>>28&15]+u[l>>>24&15]+u[h>>>4&15]+u[h&15]+u[h>>>12&15]+u[h>>>8&15]+u[h>>>20&15]+u[h>>>16&15]+u[h>>>28&15]+u[h>>>24&15]+u[v>>>4&15]+u[v&15]+u[v>>>12&15]+u[v>>>8&15]+u[v>>>20&15]+u[v>>>16&15]+u[v>>>28&15]+u[v>>>24&15]+u[p>>>4&15]+u[p&15]+u[p>>>12&15]+u[p>>>8&15]+u[p>>>20&15]+u[p>>>16&15]+u[p>>>28&15]+u[p>>>24&15]},X.prototype.toString=X.prototype.hex,X.prototype.digest=function(){this.finalize();var l=this.h0,h=this.h1,v=this.h2,p=this.h3;return[l&255,l>>>8&255,l>>>16&255,l>>>24&255,h&255,h>>>8&255,h>>>16&255,h>>>24&255,v&255,v>>>8&255,v>>>16&255,v>>>24&255,p&255,p>>>8&255,p>>>16&255,p>>>24&255]},X.prototype.array=X.prototype.digest,X.prototype.arrayBuffer=function(){this.finalize();var l=new ArrayBuffer(16),h=new Uint32Array(l);return h[0]=this.h0,h[1]=this.h1,h[2]=this.h2,h[3]=this.h3,l},X.prototype.buffer=X.prototype.arrayBuffer,X.prototype.base64=function(){for(var l,h,v,p=\"\",j=this.array(),P=0;P<15;)l=j[P++],h=j[P++],v=j[P++],p+=S[l>>>2]+S[(l<<4|h>>>4)&63]+S[(h<<2|v>>>6)&63]+S[v&63];return l=j[P],p+=S[l>>>2]+S[l<<4&63]+\"==\",p};function Q(l,h){var v,p=N(l);if(l=p[0],p[1]){var j=[],P=l.length,R=0,Z;for(v=0;v<P;++v)Z=l.charCodeAt(v),Z<128?j[R++]=Z:Z<2048?(j[R++]=192|Z>>>6,j[R++]=128|Z&63):Z<55296||Z>=57344?(j[R++]=224|Z>>>12,j[R++]=128|Z>>>6&63,j[R++]=128|Z&63):(Z=65536+((Z&1023)<<10|l.charCodeAt(++v)&1023),j[R++]=240|Z>>>18,j[R++]=128|Z>>>12&63,j[R++]=128|Z>>>6&63,j[R++]=128|Z&63);l=j}l.length>64&&(l=new X(!0).update(l).array());var ze=[],Rt=[];for(v=0;v<64;++v){var Ut=l[v]||0;ze[v]=92^Ut,Rt[v]=54^Ut}X.call(this,h),this.update(Rt),this.oKeyPad=ze,this.inner=!0,this.sharedMemory=h}Q.prototype=new X,Q.prototype.finalize=function(){if(X.prototype.finalize.call(this),this.inner){this.inner=!1;var l=this.array();X.call(this,this.sharedMemory),this.update(this.oKeyPad),this.update(l),X.prototype.finalize.call(this)}};var me=ne();me.md5=me,me.md5.hmac=de(),a?yr.exports=me:(n.md5=me,c&&define(function(){return me}))})()});var Hi=[\"top\",\"right\",\"bottom\",\"left\"],Pi=[\"start\",\"end\"],Mi=Hi.reduce((e,t)=>e.concat(t,t+\"-\"+Pi[0],t+\"-\"+Pi[1]),[]),Et=Math.min,tt=Math.max,hr=Math.round,pr=Math.floor,nn=e=>({x:e,y:e}),ta={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},na={start:\"end\",end:\"start\"};function Jr(e,t,r){return tt(e,Et(t,r))}function jt(e,t){return typeof e==\"function\"?e(t):e}function pt(e){return e.split(\"-\")[0]}function xt(e){return e.split(\"-\")[1]}function $i(e){return e===\"x\"?\"y\":\"x\"}function Qr(e){return e===\"y\"?\"height\":\"width\"}function Pn(e){return[\"top\",\"bottom\"].includes(pt(e))?\"y\":\"x\"}function Zr(e){return $i(Pn(e))}function Wi(e,t,r){r===void 0&&(r=!1);let n=xt(e),i=Zr(e),o=Qr(i),a=i===\"x\"?n===(r?\"end\":\"start\")?\"right\":\"left\":n===\"start\"?\"bottom\":\"top\";return t.reference[o]>t.floating[o]&&(a=mr(a)),[a,mr(a)]}function ra(e){let t=mr(e);return[vr(e),t,vr(t)]}function vr(e){return e.replace(/start|end/g,t=>na[t])}function ia(e,t,r){let n=[\"left\",\"right\"],i=[\"right\",\"left\"],o=[\"top\",\"bottom\"],a=[\"bottom\",\"top\"];switch(e){case\"top\":case\"bottom\":return r?t?i:n:t?n:i;case\"left\":case\"right\":return t?o:a;default:return[]}}function oa(e,t,r,n){let i=xt(e),o=ia(pt(e),r===\"start\",n);return i&&(o=o.map(a=>a+\"-\"+i),t&&(o=o.concat(o.map(vr)))),o}function mr(e){return e.replace(/left|right|bottom|top/g,t=>ta[t])}function aa(e){return{top:0,right:0,bottom:0,left:0,...e}}function ei(e){return typeof e!=\"number\"?aa(e):{top:e,right:e,bottom:e,left:e}}function Dn(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function Ri(e,t,r){let{reference:n,floating:i}=e,o=Pn(t),a=Zr(t),c=Qr(a),f=pt(t),u=o===\"y\",y=n.x+n.width/2-i.width/2,m=n.y+n.height/2-i.height/2,O=n[c]/2-i[c]/2,S;switch(f){case\"top\":S={x:y,y:n.y-i.height};break;case\"bottom\":S={x:y,y:n.y+n.height};break;case\"right\":S={x:n.x+n.width,y:m};break;case\"left\":S={x:n.x-i.width,y:m};break;default:S={x:n.x,y:n.y}}switch(xt(t)){case\"start\":S[a]-=O*(r&&u?-1:1);break;case\"end\":S[a]+=O*(r&&u?-1:1);break}return S}var sa=async(e,t,r)=>{let{placement:n=\"bottom\",strategy:i=\"absolute\",middleware:o=[],platform:a}=r,c=o.filter(Boolean),f=await(a.isRTL==null?void 0:a.isRTL(t)),u=await a.getElementRects({reference:e,floating:t,strategy:i}),{x:y,y:m}=Ri(u,n,f),O=n,S={},x=0;for(let M=0;M<c.length;M++){let{name:I,fn:$}=c[M],{x:A,y:N,data:Y,reset:ne}=await $({x:y,y:m,initialPlacement:n,placement:O,strategy:i,middlewareData:S,rects:u,platform:a,elements:{reference:e,floating:t}});y=A??y,m=N??m,S={...S,[I]:{...S[I],...Y}},ne&&x<=50&&(x++,typeof ne==\"object\"&&(ne.placement&&(O=ne.placement),ne.rects&&(u=ne.rects===!0?await a.getElementRects({reference:e,floating:t,strategy:i}):ne.rects),{x:y,y:m}=Ri(u,O,f)),M=-1)}return{x:y,y:m,placement:O,strategy:i,middlewareData:S}};async function _n(e,t){var r;t===void 0&&(t={});let{x:n,y:i,platform:o,rects:a,elements:c,strategy:f}=e,{boundary:u=\"clippingAncestors\",rootBoundary:y=\"viewport\",elementContext:m=\"floating\",altBoundary:O=!1,padding:S=0}=jt(t,e),x=ei(S),I=c[O?m===\"floating\"?\"reference\":\"floating\":m],$=Dn(await o.getClippingRect({element:(r=await(o.isElement==null?void 0:o.isElement(I)))==null||r?I:I.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(c.floating)),boundary:u,rootBoundary:y,strategy:f})),A=m===\"floating\"?{...a.floating,x:n,y:i}:a.reference,N=await(o.getOffsetParent==null?void 0:o.getOffsetParent(c.floating)),Y=await(o.isElement==null?void 0:o.isElement(N))?await(o.getScale==null?void 0:o.getScale(N))||{x:1,y:1}:{x:1,y:1},ne=Dn(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:A,offsetParent:N,strategy:f}):A);return{top:($.top-ne.top+x.top)/Y.y,bottom:(ne.bottom-$.bottom+x.bottom)/Y.y,left:($.left-ne.left+x.left)/Y.x,right:(ne.right-$.right+x.right)/Y.x}}var la=e=>({name:\"arrow\",options:e,async fn(t){let{x:r,y:n,placement:i,rects:o,platform:a,elements:c,middlewareData:f}=t,{element:u,padding:y=0}=jt(e,t)||{};if(u==null)return{};let m=ei(y),O={x:r,y:n},S=Zr(i),x=Qr(S),M=await a.getDimensions(u),I=S===\"y\",$=I?\"top\":\"left\",A=I?\"bottom\":\"right\",N=I?\"clientHeight\":\"clientWidth\",Y=o.reference[x]+o.reference[S]-O[S]-o.floating[x],ne=O[S]-o.reference[S],J=await(a.getOffsetParent==null?void 0:a.getOffsetParent(u)),V=J?J[N]:0;(!V||!await(a.isElement==null?void 0:a.isElement(J)))&&(V=c.floating[N]||o.floating[x]);let de=Y/2-ne/2,X=V/2-M[x]/2-1,Q=Et(m[$],X),me=Et(m[A],X),l=Q,h=V-M[x]-me,v=V/2-M[x]/2+de,p=Jr(l,v,h),j=!f.arrow&&xt(i)!=null&&v!==p&&o.reference[x]/2-(v<l?Q:me)-M[x]/2<0,P=j?v<l?v-l:v-h:0;return{[S]:O[S]+P,data:{[S]:p,centerOffset:v-p-P,...j&&{alignmentOffset:P}},reset:j}}});function ca(e,t,r){return(e?[...r.filter(i=>xt(i)===e),...r.filter(i=>xt(i)!==e)]:r.filter(i=>pt(i)===i)).filter(i=>e?xt(i)===e||(t?vr(i)!==i:!1):!0)}var fa=function(e){return e===void 0&&(e={}),{name:\"autoPlacement\",options:e,async fn(t){var r,n,i;let{rects:o,middlewareData:a,placement:c,platform:f,elements:u}=t,{crossAxis:y=!1,alignment:m,allowedPlacements:O=Mi,autoAlignment:S=!0,...x}=jt(e,t),M=m!==void 0||O===Mi?ca(m||null,S,O):O,I=await _n(t,x),$=((r=a.autoPlacement)==null?void 0:r.index)||0,A=M[$];if(A==null)return{};let N=Wi(A,o,await(f.isRTL==null?void 0:f.isRTL(u.floating)));if(c!==A)return{reset:{placement:M[0]}};let Y=[I[pt(A)],I[N[0]],I[N[1]]],ne=[...((n=a.autoPlacement)==null?void 0:n.overflows)||[],{placement:A,overflows:Y}],J=M[$+1];if(J)return{data:{index:$+1,overflows:ne},reset:{placement:J}};let V=ne.map(Q=>{let me=xt(Q.placement);return[Q.placement,me&&y?Q.overflows.slice(0,2).reduce((l,h)=>l+h,0):Q.overflows[0],Q.overflows]}).sort((Q,me)=>Q[1]-me[1]),X=((i=V.filter(Q=>Q[2].slice(0,xt(Q[0])?2:3).every(me=>me<=0))[0])==null?void 0:i[0])||V[0][0];return X!==c?{data:{index:$+1,overflows:ne},reset:{placement:X}}:{}}}},ua=function(e){return e===void 0&&(e={}),{name:\"flip\",options:e,async fn(t){var r,n;let{placement:i,middlewareData:o,rects:a,initialPlacement:c,platform:f,elements:u}=t,{mainAxis:y=!0,crossAxis:m=!0,fallbackPlacements:O,fallbackStrategy:S=\"bestFit\",fallbackAxisSideDirection:x=\"none\",flipAlignment:M=!0,...I}=jt(e,t);if((r=o.arrow)!=null&&r.alignmentOffset)return{};let $=pt(i),A=pt(c)===c,N=await(f.isRTL==null?void 0:f.isRTL(u.floating)),Y=O||(A||!M?[mr(c)]:ra(c));!O&&x!==\"none\"&&Y.push(...oa(c,M,x,N));let ne=[c,...Y],J=await _n(t,I),V=[],de=((n=o.flip)==null?void 0:n.overflows)||[];if(y&&V.push(J[$]),m){let l=Wi(i,a,N);V.push(J[l[0]],J[l[1]])}if(de=[...de,{placement:i,overflows:V}],!V.every(l=>l<=0)){var X,Q;let l=(((X=o.flip)==null?void 0:X.index)||0)+1,h=ne[l];if(h)return{data:{index:l,overflows:de},reset:{placement:h}};let v=(Q=de.filter(p=>p.overflows[0]<=0).sort((p,j)=>p.overflows[1]-j.overflows[1])[0])==null?void 0:Q.placement;if(!v)switch(S){case\"bestFit\":{var me;let p=(me=de.map(j=>[j.placement,j.overflows.filter(P=>P>0).reduce((P,R)=>P+R,0)]).sort((j,P)=>j[1]-P[1])[0])==null?void 0:me[0];p&&(v=p);break}case\"initialPlacement\":v=c;break}if(i!==v)return{reset:{placement:v}}}return{}}}};function Ii(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Li(e){return Hi.some(t=>e[t]>=0)}var da=function(e){return e===void 0&&(e={}),{name:\"hide\",options:e,async fn(t){let{rects:r}=t,{strategy:n=\"referenceHidden\",...i}=jt(e,t);switch(n){case\"referenceHidden\":{let o=await _n(t,{...i,elementContext:\"reference\"}),a=Ii(o,r.reference);return{data:{referenceHiddenOffsets:a,referenceHidden:Li(a)}}}case\"escaped\":{let o=await _n(t,{...i,altBoundary:!0}),a=Ii(o,r.floating);return{data:{escapedOffsets:a,escaped:Li(a)}}}default:return{}}}}};function Ui(e){let t=Et(...e.map(o=>o.left)),r=Et(...e.map(o=>o.top)),n=tt(...e.map(o=>o.right)),i=tt(...e.map(o=>o.bottom));return{x:t,y:r,width:n-t,height:i-r}}function pa(e){let t=e.slice().sort((i,o)=>i.y-o.y),r=[],n=null;for(let i=0;i<t.length;i++){let o=t[i];!n||o.y-n.y>n.height/2?r.push([o]):r[r.length-1].push(o),n=o}return r.map(i=>Dn(Ui(i)))}var ha=function(e){return e===void 0&&(e={}),{name:\"inline\",options:e,async fn(t){let{placement:r,elements:n,rects:i,platform:o,strategy:a}=t,{padding:c=2,x:f,y:u}=jt(e,t),y=Array.from(await(o.getClientRects==null?void 0:o.getClientRects(n.reference))||[]),m=pa(y),O=Dn(Ui(y)),S=ei(c);function x(){if(m.length===2&&m[0].left>m[1].right&&f!=null&&u!=null)return m.find(I=>f>I.left-S.left&&f<I.right+S.right&&u>I.top-S.top&&u<I.bottom+S.bottom)||O;if(m.length>=2){if(Pn(r)===\"y\"){let Q=m[0],me=m[m.length-1],l=pt(r)===\"top\",h=Q.top,v=me.bottom,p=l?Q.left:me.left,j=l?Q.right:me.right,P=j-p,R=v-h;return{top:h,bottom:v,left:p,right:j,width:P,height:R,x:p,y:h}}let I=pt(r)===\"left\",$=tt(...m.map(Q=>Q.right)),A=Et(...m.map(Q=>Q.left)),N=m.filter(Q=>I?Q.left===A:Q.right===$),Y=N[0].top,ne=N[N.length-1].bottom,J=A,V=$,de=V-J,X=ne-Y;return{top:Y,bottom:ne,left:J,right:V,width:de,height:X,x:J,y:Y}}return O}let M=await o.getElementRects({reference:{getBoundingClientRect:x},floating:n.floating,strategy:a});return i.reference.x!==M.reference.x||i.reference.y!==M.reference.y||i.reference.width!==M.reference.width||i.reference.height!==M.reference.height?{reset:{rects:M}}:{}}}};async function va(e,t){let{placement:r,platform:n,elements:i}=e,o=await(n.isRTL==null?void 0:n.isRTL(i.floating)),a=pt(r),c=xt(r),f=Pn(r)===\"y\",u=[\"left\",\"top\"].includes(a)?-1:1,y=o&&f?-1:1,m=jt(t,e),{mainAxis:O,crossAxis:S,alignmentAxis:x}=typeof m==\"number\"?{mainAxis:m,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...m};return c&&typeof x==\"number\"&&(S=c===\"end\"?x*-1:x),f?{x:S*y,y:O*u}:{x:O*u,y:S*y}}var Vi=function(e){return e===void 0&&(e=0),{name:\"offset\",options:e,async fn(t){var r,n;let{x:i,y:o,placement:a,middlewareData:c}=t,f=await va(t,e);return a===((r=c.offset)==null?void 0:r.placement)&&(n=c.arrow)!=null&&n.alignmentOffset?{}:{x:i+f.x,y:o+f.y,data:{...f,placement:a}}}}},ma=function(e){return e===void 0&&(e={}),{name:\"shift\",options:e,async fn(t){let{x:r,y:n,placement:i}=t,{mainAxis:o=!0,crossAxis:a=!1,limiter:c={fn:I=>{let{x:$,y:A}=I;return{x:$,y:A}}},...f}=jt(e,t),u={x:r,y:n},y=await _n(t,f),m=Pn(pt(i)),O=$i(m),S=u[O],x=u[m];if(o){let I=O===\"y\"?\"top\":\"left\",$=O===\"y\"?\"bottom\":\"right\",A=S+y[I],N=S-y[$];S=Jr(A,S,N)}if(a){let I=m===\"y\"?\"top\":\"left\",$=m===\"y\"?\"bottom\":\"right\",A=x+y[I],N=x-y[$];x=Jr(A,x,N)}let M=c.fn({...t,[O]:S,[m]:x});return{...M,data:{x:M.x-r,y:M.y-n}}}}},ga=function(e){return e===void 0&&(e={}),{name:\"size\",options:e,async fn(t){let{placement:r,rects:n,platform:i,elements:o}=t,{apply:a=()=>{},...c}=jt(e,t),f=await _n(t,c),u=pt(r),y=xt(r),m=Pn(r)===\"y\",{width:O,height:S}=n.floating,x,M;u===\"top\"||u===\"bottom\"?(x=u,M=y===(await(i.isRTL==null?void 0:i.isRTL(o.floating))?\"start\":\"end\")?\"left\":\"right\"):(M=u,x=y===\"end\"?\"top\":\"bottom\");let I=S-f[x],$=O-f[M],A=!t.middlewareData.shift,N=I,Y=$;if(m){let J=O-f.left-f.right;Y=y||A?Et($,J):J}else{let J=S-f.top-f.bottom;N=y||A?Et(I,J):J}if(A&&!y){let J=tt(f.left,0),V=tt(f.right,0),de=tt(f.top,0),X=tt(f.bottom,0);m?Y=O-2*(J!==0||V!==0?J+V:tt(f.left,f.right)):N=S-2*(de!==0||X!==0?de+X:tt(f.top,f.bottom))}await a({...t,availableWidth:Y,availableHeight:N});let ne=await i.getDimensions(o.floating);return O!==ne.width||S!==ne.height?{reset:{rects:!0}}:{}}}};function rn(e){return zi(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function ct(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Bt(e){var t;return(t=(zi(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function zi(e){return e instanceof Node||e instanceof ct(e).Node}function Nt(e){return e instanceof Element||e instanceof ct(e).Element}function Tt(e){return e instanceof HTMLElement||e instanceof ct(e).HTMLElement}function Fi(e){return typeof ShadowRoot>\"u\"?!1:e instanceof ShadowRoot||e instanceof ct(e).ShadowRoot}function zn(e){let{overflow:t,overflowX:r,overflowY:n,display:i}=ht(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&![\"inline\",\"contents\"].includes(i)}function ba(e){return[\"table\",\"td\",\"th\"].includes(rn(e))}function ti(e){let t=ni(),r=ht(e);return r.transform!==\"none\"||r.perspective!==\"none\"||(r.containerType?r.containerType!==\"normal\":!1)||!t&&(r.backdropFilter?r.backdropFilter!==\"none\":!1)||!t&&(r.filter?r.filter!==\"none\":!1)||[\"transform\",\"perspective\",\"filter\"].some(n=>(r.willChange||\"\").includes(n))||[\"paint\",\"layout\",\"strict\",\"content\"].some(n=>(r.contain||\"\").includes(n))}function ya(e){let t=Tn(e);for(;Tt(t)&&!gr(t);){if(ti(t))return t;t=Tn(t)}return null}function ni(){return typeof CSS>\"u\"||!CSS.supports?!1:CSS.supports(\"-webkit-backdrop-filter\",\"none\")}function gr(e){return[\"html\",\"body\",\"#document\"].includes(rn(e))}function ht(e){return ct(e).getComputedStyle(e)}function br(e){return Nt(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Tn(e){if(rn(e)===\"html\")return e;let t=e.assignedSlot||e.parentNode||Fi(e)&&e.host||Bt(e);return Fi(t)?t.host:t}function Yi(e){let t=Tn(e);return gr(t)?e.ownerDocument?e.ownerDocument.body:e.body:Tt(t)&&zn(t)?t:Yi(t)}function Vn(e,t,r){var n;t===void 0&&(t=[]),r===void 0&&(r=!0);let i=Yi(e),o=i===((n=e.ownerDocument)==null?void 0:n.body),a=ct(i);return o?t.concat(a,a.visualViewport||[],zn(i)?i:[],a.frameElement&&r?Vn(a.frameElement):[]):t.concat(i,Vn(i,[],r))}function Xi(e){let t=ht(e),r=parseFloat(t.width)||0,n=parseFloat(t.height)||0,i=Tt(e),o=i?e.offsetWidth:r,a=i?e.offsetHeight:n,c=hr(r)!==o||hr(n)!==a;return c&&(r=o,n=a),{width:r,height:n,$:c}}function ri(e){return Nt(e)?e:e.contextElement}function Cn(e){let t=ri(e);if(!Tt(t))return nn(1);let r=t.getBoundingClientRect(),{width:n,height:i,$:o}=Xi(t),a=(o?hr(r.width):r.width)/n,c=(o?hr(r.height):r.height)/i;return(!a||!Number.isFinite(a))&&(a=1),(!c||!Number.isFinite(c))&&(c=1),{x:a,y:c}}var wa=nn(0);function qi(e){let t=ct(e);return!ni()||!t.visualViewport?wa:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function xa(e,t,r){return t===void 0&&(t=!1),!r||t&&r!==ct(e)?!1:t}function vn(e,t,r,n){t===void 0&&(t=!1),r===void 0&&(r=!1);let i=e.getBoundingClientRect(),o=ri(e),a=nn(1);t&&(n?Nt(n)&&(a=Cn(n)):a=Cn(e));let c=xa(o,r,n)?qi(o):nn(0),f=(i.left+c.x)/a.x,u=(i.top+c.y)/a.y,y=i.width/a.x,m=i.height/a.y;if(o){let O=ct(o),S=n&&Nt(n)?ct(n):n,x=O,M=x.frameElement;for(;M&&n&&S!==x;){let I=Cn(M),$=M.getBoundingClientRect(),A=ht(M),N=$.left+(M.clientLeft+parseFloat(A.paddingLeft))*I.x,Y=$.top+(M.clientTop+parseFloat(A.paddingTop))*I.y;f*=I.x,u*=I.y,y*=I.x,m*=I.y,f+=N,u+=Y,x=ct(M),M=x.frameElement}}return Dn({width:y,height:m,x:f,y:u})}var Ea=[\":popover-open\",\":modal\"];function Gi(e){return Ea.some(t=>{try{return e.matches(t)}catch{return!1}})}function Oa(e){let{elements:t,rect:r,offsetParent:n,strategy:i}=e,o=i===\"fixed\",a=Bt(n),c=t?Gi(t.floating):!1;if(n===a||c&&o)return r;let f={scrollLeft:0,scrollTop:0},u=nn(1),y=nn(0),m=Tt(n);if((m||!m&&!o)&&((rn(n)!==\"body\"||zn(a))&&(f=br(n)),Tt(n))){let O=vn(n);u=Cn(n),y.x=O.x+n.clientLeft,y.y=O.y+n.clientTop}return{width:r.width*u.x,height:r.height*u.y,x:r.x*u.x-f.scrollLeft*u.x+y.x,y:r.y*u.y-f.scrollTop*u.y+y.y}}function Sa(e){return Array.from(e.getClientRects())}function Ki(e){return vn(Bt(e)).left+br(e).scrollLeft}function Aa(e){let t=Bt(e),r=br(e),n=e.ownerDocument.body,i=tt(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),o=tt(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight),a=-r.scrollLeft+Ki(e),c=-r.scrollTop;return ht(n).direction===\"rtl\"&&(a+=tt(t.clientWidth,n.clientWidth)-i),{width:i,height:o,x:a,y:c}}function Ca(e,t){let r=ct(e),n=Bt(e),i=r.visualViewport,o=n.clientWidth,a=n.clientHeight,c=0,f=0;if(i){o=i.width,a=i.height;let u=ni();(!u||u&&t===\"fixed\")&&(c=i.offsetLeft,f=i.offsetTop)}return{width:o,height:a,x:c,y:f}}function Da(e,t){let r=vn(e,!0,t===\"fixed\"),n=r.top+e.clientTop,i=r.left+e.clientLeft,o=Tt(e)?Cn(e):nn(1),a=e.clientWidth*o.x,c=e.clientHeight*o.y,f=i*o.x,u=n*o.y;return{width:a,height:c,x:f,y:u}}function ki(e,t,r){let n;if(t===\"viewport\")n=Ca(e,r);else if(t===\"document\")n=Aa(Bt(e));else if(Nt(t))n=Da(t,r);else{let i=qi(e);n={...t,x:t.x-i.x,y:t.y-i.y}}return Dn(n)}function Ji(e,t){let r=Tn(e);return r===t||!Nt(r)||gr(r)?!1:ht(r).position===\"fixed\"||Ji(r,t)}function _a(e,t){let r=t.get(e);if(r)return r;let n=Vn(e,[],!1).filter(c=>Nt(c)&&rn(c)!==\"body\"),i=null,o=ht(e).position===\"fixed\",a=o?Tn(e):e;for(;Nt(a)&&!gr(a);){let c=ht(a),f=ti(a);!f&&c.position===\"fixed\"&&(i=null),(o?!f&&!i:!f&&c.position===\"static\"&&!!i&&[\"absolute\",\"fixed\"].includes(i.position)||zn(a)&&!f&&Ji(e,a))?n=n.filter(y=>y!==a):i=c,a=Tn(a)}return t.set(e,n),n}function Ta(e){let{element:t,boundary:r,rootBoundary:n,strategy:i}=e,a=[...r===\"clippingAncestors\"?_a(t,this._c):[].concat(r),n],c=a[0],f=a.reduce((u,y)=>{let m=ki(t,y,i);return u.top=tt(m.top,u.top),u.right=Et(m.right,u.right),u.bottom=Et(m.bottom,u.bottom),u.left=tt(m.left,u.left),u},ki(t,c,i));return{width:f.right-f.left,height:f.bottom-f.top,x:f.left,y:f.top}}function Pa(e){let{width:t,height:r}=Xi(e);return{width:t,height:r}}function Ma(e,t,r){let n=Tt(t),i=Bt(t),o=r===\"fixed\",a=vn(e,!0,o,t),c={scrollLeft:0,scrollTop:0},f=nn(0);if(n||!n&&!o)if((rn(t)!==\"body\"||zn(i))&&(c=br(t)),n){let m=vn(t,!0,o,t);f.x=m.x+t.clientLeft,f.y=m.y+t.clientTop}else i&&(f.x=Ki(i));let u=a.left+c.scrollLeft-f.x,y=a.top+c.scrollTop-f.y;return{x:u,y,width:a.width,height:a.height}}function Ni(e,t){return!Tt(e)||ht(e).position===\"fixed\"?null:t?t(e):e.offsetParent}function Qi(e,t){let r=ct(e);if(!Tt(e)||Gi(e))return r;let n=Ni(e,t);for(;n&&ba(n)&&ht(n).position===\"static\";)n=Ni(n,t);return n&&(rn(n)===\"html\"||rn(n)===\"body\"&&ht(n).position===\"static\"&&!ti(n))?r:n||ya(e)||r}var Ra=async function(e){let t=this.getOffsetParent||Qi,r=this.getDimensions;return{reference:Ma(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,...await r(e.floating)}}};function Ia(e){return ht(e).direction===\"rtl\"}var La={convertOffsetParentRelativeRectToViewportRelativeRect:Oa,getDocumentElement:Bt,getClippingRect:Ta,getOffsetParent:Qi,getElementRects:Ra,getClientRects:Sa,getDimensions:Pa,getScale:Cn,isElement:Nt,isRTL:Ia};function Fa(e,t){let r=null,n,i=Bt(e);function o(){var c;clearTimeout(n),(c=r)==null||c.disconnect(),r=null}function a(c,f){c===void 0&&(c=!1),f===void 0&&(f=1),o();let{left:u,top:y,width:m,height:O}=e.getBoundingClientRect();if(c||t(),!m||!O)return;let S=pr(y),x=pr(i.clientWidth-(u+m)),M=pr(i.clientHeight-(y+O)),I=pr(u),A={rootMargin:-S+\"px \"+-x+\"px \"+-M+\"px \"+-I+\"px\",threshold:tt(0,Et(1,f))||1},N=!0;function Y(ne){let J=ne[0].intersectionRatio;if(J!==f){if(!N)return a();J?a(!1,J):n=setTimeout(()=>{a(!1,1e-7)},100)}N=!1}try{r=new IntersectionObserver(Y,{...A,root:i.ownerDocument})}catch{r=new IntersectionObserver(Y,A)}r.observe(e)}return a(!0),o}function ji(e,t,r,n){n===void 0&&(n={});let{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver==\"function\",layoutShift:c=typeof IntersectionObserver==\"function\",animationFrame:f=!1}=n,u=ri(e),y=i||o?[...u?Vn(u):[],...Vn(t)]:[];y.forEach($=>{i&&$.addEventListener(\"scroll\",r,{passive:!0}),o&&$.addEventListener(\"resize\",r)});let m=u&&c?Fa(u,r):null,O=-1,S=null;a&&(S=new ResizeObserver($=>{let[A]=$;A&&A.target===u&&S&&(S.unobserve(t),cancelAnimationFrame(O),O=requestAnimationFrame(()=>{var N;(N=S)==null||N.observe(t)})),r()}),u&&!f&&S.observe(u),S.observe(t));let x,M=f?vn(e):null;f&&I();function I(){let $=vn(e);M&&($.x!==M.x||$.y!==M.y||$.width!==M.width||$.height!==M.height)&&r(),M=$,x=requestAnimationFrame(I)}return r(),()=>{var $;y.forEach(A=>{i&&A.removeEventListener(\"scroll\",r),o&&A.removeEventListener(\"resize\",r)}),m?.(),($=S)==null||$.disconnect(),S=null,f&&cancelAnimationFrame(x)}}var ii=fa,Zi=ma,eo=ua,to=ga,no=da,ro=la,io=ha,Bi=(e,t,r)=>{let n=new Map,i={platform:La,...r},o={...i.platform,_c:n};return sa(e,t,{...i,platform:o})},ka=e=>{let t={placement:\"bottom\",strategy:\"absolute\",middleware:[]},r=Object.keys(e),n=i=>e[i];return r.includes(\"offset\")&&t.middleware.push(Vi(n(\"offset\"))),r.includes(\"teleport\")&&(t.strategy=\"fixed\"),r.includes(\"placement\")&&(t.placement=n(\"placement\")),r.some(i=>/^auto-?placement$/i.test(i))&&!r.includes(\"flip\")&&t.middleware.push(ii(n(\"autoPlacement\"))),r.includes(\"flip\")&&t.middleware.push(eo(n(\"flip\"))),r.includes(\"shift\")&&t.middleware.push(Zi(n(\"shift\"))),r.includes(\"inline\")&&t.middleware.push(io(n(\"inline\"))),r.includes(\"arrow\")&&t.middleware.push(ro(n(\"arrow\"))),r.includes(\"hide\")&&t.middleware.push(no(n(\"hide\"))),r.includes(\"size\")&&t.middleware.push(to(n(\"size\"))),t},Na=(e,t)=>{let r={component:{trap:!1},float:{placement:\"bottom\",strategy:\"absolute\",middleware:[]}},n=i=>e[e.indexOf(i)+1];if(e.includes(\"trap\")&&(r.component.trap=!0),e.includes(\"teleport\")&&(r.float.strategy=\"fixed\"),e.includes(\"offset\")&&r.float.middleware.push(Vi(t.offset||10)),e.includes(\"placement\")&&(r.float.placement=n(\"placement\")),e.some(i=>/^auto-?placement$/i.test(i))&&!e.includes(\"flip\")&&r.float.middleware.push(ii(t.autoPlacement)),e.includes(\"flip\")&&r.float.middleware.push(eo(t.flip)),e.includes(\"shift\")&&r.float.middleware.push(Zi(t.shift)),e.includes(\"inline\")&&r.float.middleware.push(io(t.inline)),e.includes(\"arrow\")&&r.float.middleware.push(ro(t.arrow)),e.includes(\"hide\")&&r.float.middleware.push(no(t.hide)),e.includes(\"size\")){let i=t.size?.availableWidth??null,o=t.size?.availableHeight??null;i&&delete t.size.availableWidth,o&&delete t.size.availableHeight,r.float.middleware.push(to({...t.size,apply({availableWidth:a,availableHeight:c,elements:f}){Object.assign(f.floating.style,{maxWidth:`${i??a}px`,maxHeight:`${o??c}px`})}}))}return r},ja=e=>{var t=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz\".split(\"\"),r=\"\";e||(e=Math.floor(Math.random()*t.length));for(var n=0;n<e;n++)r+=t[Math.floor(Math.random()*t.length)];return r};function Ba(e,t=()=>{}){let r=!1;return function(){r?t.apply(this,arguments):(r=!0,e.apply(this,arguments))}}function Ha(e){let t={dismissable:!0,trap:!1};function r(n,i=null){if(n){if(n.hasAttribute(\"aria-expanded\")||n.setAttribute(\"aria-expanded\",!1),i.hasAttribute(\"id\"))n.setAttribute(\"aria-controls\",i.getAttribute(\"id\"));else{let o=`panel-${ja(8)}`;n.setAttribute(\"aria-controls\",o),i.setAttribute(\"id\",o)}i.setAttribute(\"aria-modal\",!0),i.setAttribute(\"role\",\"dialog\")}}e.magic(\"float\",n=>(i={},o={})=>{let a={...t,...o},c=Object.keys(i).length>0?ka(i):{middleware:[ii()]},f=n,u=n.parentElement.closest(\"[x-data]\"),y=u.querySelector('[x-ref=\"panel\"]');r(f,y);function m(){return y.style.display==\"block\"}function O(){y.style.display=\"none\",f.setAttribute(\"aria-expanded\",\"false\"),a.trap&&y.setAttribute(\"x-trap\",\"false\"),ji(n,y,M)}function S(){y.style.display=\"block\",f.setAttribute(\"aria-expanded\",\"true\"),a.trap&&y.setAttribute(\"x-trap\",\"true\"),M()}function x(){m()?O():S()}async function M(){return await Bi(n,y,c).then(({middlewareData:I,placement:$,x:A,y:N})=>{if(I.arrow){let Y=I.arrow?.x,ne=I.arrow?.y,J=c.middleware.filter(de=>de.name==\"arrow\")[0].options.element,V={top:\"bottom\",right:\"left\",bottom:\"top\",left:\"right\"}[$.split(\"-\")[0]];Object.assign(J.style,{left:Y!=null?`${Y}px`:\"\",top:ne!=null?`${ne}px`:\"\",right:\"\",bottom:\"\",[V]:\"-4px\"})}if(I.hide){let{referenceHidden:Y}=I.hide;Object.assign(y.style,{visibility:Y?\"hidden\":\"visible\"})}Object.assign(y.style,{left:`${A}px`,top:`${N}px`})})}a.dismissable&&(window.addEventListener(\"click\",I=>{!u.contains(I.target)&&m()&&x()}),window.addEventListener(\"keydown\",I=>{I.key===\"Escape\"&&m()&&x()},!0)),x()}),e.directive(\"float\",(n,{modifiers:i,expression:o},{evaluate:a,effect:c})=>{let f=o?a(o):{},u=i.length>0?Na(i,f):{},y=null;u.float.strategy==\"fixed\"&&(n.style.position=\"fixed\");let m=V=>n.parentElement&&!n.parentElement.closest(\"[x-data]\").contains(V.target)?n.close():null,O=V=>V.key===\"Escape\"?n.close():null,S=n.getAttribute(\"x-ref\"),x=n.parentElement.closest(\"[x-data]\"),M=x.querySelectorAll(`[\\\\@click^=\"$refs.${S}\"]`),I=x.querySelectorAll(`[x-on\\\\:click^=\"$refs.${S}\"]`);n.style.setProperty(\"display\",\"none\"),r([...M,...I][0],n),n._x_isShown=!1,n.trigger=null,n._x_doHide||(n._x_doHide=()=>{n.style.setProperty(\"display\",\"none\",i.includes(\"important\")?\"important\":void 0)}),n._x_doShow||(n._x_doShow=()=>{n.style.setProperty(\"display\",\"block\",i.includes(\"important\")?\"important\":void 0)});let $=()=>{n._x_doHide(),n._x_isShown=!1},A=()=>{n._x_doShow(),n._x_isShown=!0},N=()=>setTimeout(A),Y=Ba(V=>V?A():$(),V=>{typeof n._x_toggleAndCascadeWithTransitions==\"function\"?n._x_toggleAndCascadeWithTransitions(n,V,A,$):V?N():$()}),ne,J=!0;c(()=>a(V=>{!J&&V===ne||(i.includes(\"immediate\")&&(V?N():$()),Y(V),ne=V,J=!1)})),n.open=async function(V){n.trigger=V.currentTarget?V.currentTarget:V,Y(!0),n.trigger.setAttribute(\"aria-expanded\",\"true\"),u.component.trap&&n.setAttribute(\"x-trap\",\"true\"),y=ji(n.trigger,n,()=>{Bi(n.trigger,n,u.float).then(({middlewareData:de,placement:X,x:Q,y:me})=>{if(de.arrow){let l=de.arrow?.x,h=de.arrow?.y,v=u.float.middleware.filter(j=>j.name==\"arrow\")[0].options.element,p={top:\"bottom\",right:\"left\",bottom:\"top\",left:\"right\"}[X.split(\"-\")[0]];Object.assign(v.style,{left:l!=null?`${l}px`:\"\",top:h!=null?`${h}px`:\"\",right:\"\",bottom:\"\",[p]:\"-4px\"})}if(de.hide){let{referenceHidden:l}=de.hide;Object.assign(n.style,{visibility:l?\"hidden\":\"visible\"})}Object.assign(n.style,{left:`${Q}px`,top:`${me}px`})})}),window.addEventListener(\"click\",m),window.addEventListener(\"keydown\",O,!0)},n.close=function(){if(!n._x_isShown)return!1;Y(!1),n.trigger.setAttribute(\"aria-expanded\",\"false\"),u.component.trap&&n.setAttribute(\"x-trap\",\"false\"),y(),window.removeEventListener(\"click\",m),window.removeEventListener(\"keydown\",O,!1)},n.toggle=function(V){n._x_isShown?n.close():n.open(V)}})}var oo=Ha;function $a(e){e.store(\"lazyLoadedAssets\",{loaded:new Set,check(a){return Array.isArray(a)?a.every(c=>this.loaded.has(c)):this.loaded.has(a)},markLoaded(a){Array.isArray(a)?a.forEach(c=>this.loaded.add(c)):this.loaded.add(a)}});let t=a=>new CustomEvent(a,{bubbles:!0,composed:!0,cancelable:!0}),r=(a,c={},f,u)=>{let y=document.createElement(a);return Object.entries(c).forEach(([m,O])=>y[m]=O),f&&(u?f.insertBefore(y,u):f.appendChild(y)),y},n=(a,c,f={},u=null,y=null)=>{let m=a===\"link\"?`link[href=\"${c}\"]`:`script[src=\"${c}\"]`;if(document.querySelector(m)||e.store(\"lazyLoadedAssets\").check(c))return Promise.resolve();let O=a===\"link\"?{...f,href:c}:{...f,src:c},S=r(a,O,u,y);return new Promise((x,M)=>{S.onload=()=>{e.store(\"lazyLoadedAssets\").markLoaded(c),x()},S.onerror=()=>{M(new Error(`Failed to load ${a}: ${c}`))}})},i=async(a,c,f=null,u=null)=>{let y={type:\"text/css\",rel:\"stylesheet\"};c&&(y.media=c);let m=document.head,O=null;if(f&&u){let S=document.querySelector(`link[href*=\"${u}\"]`);S?(m=S.parentElement,O=f===\"before\"?S:S.nextSibling):(console.warn(`Target (${u}) not found for ${a}. Appending to head.`),m=document.head,O=null)}await n(\"link\",a,y,m,O)},o=async(a,c,f=null,u=null,y=null)=>{let m=document.head,O=null;if(f&&u){let x=document.querySelector(`script[src*=\"${u}\"]`);x?(m=x.parentElement,O=f===\"before\"?x:x.nextSibling):(console.warn(`Target (${u}) not found for ${a}. Falling back to head or body.`),m=document.head,O=null)}else(c.has(\"body-start\")||c.has(\"body-end\"))&&(m=document.body,c.has(\"body-start\")&&(O=document.body.firstChild));let S={};y&&(S.type=\"module\"),await n(\"script\",a,S,m,O)};e.directive(\"load-css\",(a,{expression:c},{evaluate:f})=>{let u=f(c),y=a.media,m=a.getAttribute(\"data-dispatch\"),O=a.getAttribute(\"data-css-before\")?\"before\":a.getAttribute(\"data-css-after\")?\"after\":null,S=a.getAttribute(\"data-css-before\")||a.getAttribute(\"data-css-after\")||null;Promise.all(u.map(x=>i(x,y,O,S))).then(()=>{m&&window.dispatchEvent(t(`${m}-css`))}).catch(console.error)}),e.directive(\"load-js\",(a,{expression:c,modifiers:f},{evaluate:u})=>{let y=u(c),m=new Set(f),O=a.getAttribute(\"data-js-before\")?\"before\":a.getAttribute(\"data-js-after\")?\"after\":null,S=a.getAttribute(\"data-js-before\")||a.getAttribute(\"data-js-after\")||null,x=a.getAttribute(\"data-js-as-module\")||a.getAttribute(\"data-as-module\")||!1,M=a.getAttribute(\"data-dispatch\");Promise.all(y.map(I=>o(I,m,O,S,x))).then(()=>{M&&window.dispatchEvent(t(`${M}-js`))}).catch(console.error)})}var ao=$a;function Wa(){return!0}function Ua({component:e,argument:t}){return new Promise(r=>{if(t)window.addEventListener(t,()=>r(),{once:!0});else{let n=i=>{i.detail.id===e.id&&(window.removeEventListener(\"async-alpine:load\",n),r())};window.addEventListener(\"async-alpine:load\",n)}})}function Va(){return new Promise(e=>{\"requestIdleCallback\"in window?window.requestIdleCallback(e):setTimeout(e,200)})}function za({argument:e}){return new Promise(t=>{if(!e)return console.log(\"Async Alpine: media strategy requires a media query. Treating as 'eager'\"),t();let r=window.matchMedia(`(${e})`);r.matches?t():r.addEventListener(\"change\",t,{once:!0})})}function Ya({component:e,argument:t}){return new Promise(r=>{let n=t||\"0px 0px 0px 0px\",i=new IntersectionObserver(o=>{o[0].isIntersecting&&(i.disconnect(),r())},{rootMargin:n});i.observe(e.el)})}var so={eager:Wa,event:Ua,idle:Va,media:za,visible:Ya};async function Xa(e){let t=qa(e.strategy);await oi(e,t)}async function oi(e,t){if(t.type===\"expression\"){if(t.operator===\"&&\")return Promise.all(t.parameters.map(r=>oi(e,r)));if(t.operator===\"||\")return Promise.any(t.parameters.map(r=>oi(e,r)))}return so[t.method]?so[t.method]({component:e,argument:t.argument}):!1}function qa(e){let t=Ga(e),r=co(t);return r.type===\"method\"?{type:\"expression\",operator:\"&&\",parameters:[r]}:r}function Ga(e){let t=/\\s*([()])\\s*|\\s*(\\|\\||&&|\\|)\\s*|\\s*((?:[^()&|]+\\([^()]+\\))|[^()&|]+)\\s*/g,r=[],n;for(;(n=t.exec(e))!==null;){let[i,o,a,c]=n;if(o!==void 0)r.push({type:\"parenthesis\",value:o});else if(a!==void 0)r.push({type:\"operator\",value:a===\"|\"?\"&&\":a});else{let f={type:\"method\",method:c.trim()};c.includes(\"(\")&&(f.method=c.substring(0,c.indexOf(\"(\")).trim(),f.argument=c.substring(c.indexOf(\"(\")+1,c.indexOf(\")\"))),c.method===\"immediate\"&&(c.method=\"eager\"),r.push(f)}}return r}function co(e){let t=lo(e);for(;e.length>0&&(e[0].value===\"&&\"||e[0].value===\"|\"||e[0].value===\"||\");){let r=e.shift().value,n=lo(e);t.type===\"expression\"&&t.operator===r?t.parameters.push(n):t={type:\"expression\",operator:r,parameters:[t,n]}}return t}function lo(e){if(e[0].value===\"(\"){e.shift();let t=co(e);return e[0].value===\")\"&&e.shift(),t}else return e.shift()}function fo(e){let t=\"load\",r=e.prefixed(\"load-src\"),n=e.prefixed(\"ignore\"),i={defaultStrategy:\"eager\",keepRelativeURLs:!1},o=!1,a={},c=0;function f(){return c++}e.asyncOptions=A=>{i={...i,...A}},e.asyncData=(A,N=!1)=>{a[A]={loaded:!1,download:N}},e.asyncUrl=(A,N)=>{!A||!N||a[A]||(a[A]={loaded:!1,download:()=>import($(N))})},e.asyncAlias=A=>{o=A};let u=A=>{e.skipDuringClone(()=>{A._x_async||(A._x_async=\"init\",A._x_ignore=!0,A.setAttribute(n,\"\"))})()},y=async A=>{e.skipDuringClone(async()=>{if(A._x_async!==\"init\")return;A._x_async=\"await\";let{name:N,strategy:Y}=m(A);await Xa({name:N,strategy:Y,el:A,id:A.id||f()}),A.isConnected&&(await O(N),A.isConnected&&(x(A),A._x_async=\"loaded\"))})()};y.inline=u,e.directive(t,y).before(\"ignore\");function m(A){let N=I(A.getAttribute(e.prefixed(\"data\"))),Y=A.getAttribute(e.prefixed(t))||i.defaultStrategy,ne=A.getAttribute(r);return ne&&e.asyncUrl(N,ne),{name:N,strategy:Y}}async function O(A){if(A.startsWith(\"_x_async_\")||(M(A),!a[A]||a[A].loaded))return;let N=await S(A);e.data(A,N),a[A].loaded=!0}async function S(A){if(!a[A])return;let N=await a[A].download(A);return typeof N==\"function\"?N:N[A]||N.default||Object.values(N)[0]||!1}function x(A){e.destroyTree(A),A._x_ignore=!1,A.removeAttribute(n),!A.closest(`[${n}]`)&&e.initTree(A)}function M(A){if(!(!o||a[A])){if(typeof o==\"function\"){e.asyncData(A,o);return}e.asyncUrl(A,o.replaceAll(\"[name]\",A))}}function I(A){return(A||\"\").trim().split(/[({]/g)[0]||`_x_async_${f()}`}function $(A){return i.keepRelativeURLs||new RegExp(\"^(?:[a-z+]+:)?//\",\"i\").test(A)?A:new URL(A,document.baseURI).href}}var Xo=ea(ho(),1);function vo(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Mt(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?vo(Object(r),!0).forEach(function(n){Ka(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):vo(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Sr(e){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?Sr=function(t){return typeof t}:Sr=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Sr(e)}function Ka(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function $t(){return $t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},$t.apply(this,arguments)}function Ja(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,o;for(o=0;o<n.length;o++)i=n[o],!(t.indexOf(i)>=0)&&(r[i]=e[i]);return r}function Qa(e,t){if(e==null)return{};var r=Ja(e,t),n,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var Za=\"1.15.6\";function Ht(e){if(typeof window<\"u\"&&window.navigator)return!!navigator.userAgent.match(e)}var Wt=Ht(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),er=Ht(/Edge/i),mo=Ht(/firefox/i),Gn=Ht(/safari/i)&&!Ht(/chrome/i)&&!Ht(/android/i),yi=Ht(/iP(ad|od|hone)/i),So=Ht(/chrome/i)&&Ht(/android/i),Ao={capture:!1,passive:!1};function Oe(e,t,r){e.addEventListener(t,r,!Wt&&Ao)}function Ee(e,t,r){e.removeEventListener(t,r,!Wt&&Ao)}function Tr(e,t){if(t){if(t[0]===\">\"&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch{return!1}return!1}}function Co(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function St(e,t,r,n){if(e){r=r||document;do{if(t!=null&&(t[0]===\">\"?e.parentNode===r&&Tr(e,t):Tr(e,t))||n&&e===r)return e;if(e===r)break}while(e=Co(e))}return null}var go=/\\s+/g;function ft(e,t,r){if(e&&t)if(e.classList)e.classList[r?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(go,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(r?\" \"+t:\"\")).replace(go,\" \")}}function ae(e,t,r){var n=e&&e.style;if(n){if(r===void 0)return document.defaultView&&document.defaultView.getComputedStyle?r=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(r=e.currentStyle),t===void 0?r:r[t];!(t in n)&&t.indexOf(\"webkit\")===-1&&(t=\"-webkit-\"+t),n[t]=r+(typeof r==\"string\"?\"\":\"px\")}}function Fn(e,t){var r=\"\";if(typeof e==\"string\")r=e;else do{var n=ae(e,\"transform\");n&&n!==\"none\"&&(r=n+\" \"+r)}while(!t&&(e=e.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(r)}function Do(e,t,r){if(e){var n=e.getElementsByTagName(t),i=0,o=n.length;if(r)for(;i<o;i++)r(n[i],i);return n}return[]}function Pt(){var e=document.scrollingElement;return e||document.documentElement}function qe(e,t,r,n,i){if(!(!e.getBoundingClientRect&&e!==window)){var o,a,c,f,u,y,m;if(e!==window&&e.parentNode&&e!==Pt()?(o=e.getBoundingClientRect(),a=o.top,c=o.left,f=o.bottom,u=o.right,y=o.height,m=o.width):(a=0,c=0,f=window.innerHeight,u=window.innerWidth,y=window.innerHeight,m=window.innerWidth),(t||r)&&e!==window&&(i=i||e.parentNode,!Wt))do if(i&&i.getBoundingClientRect&&(ae(i,\"transform\")!==\"none\"||r&&ae(i,\"position\")!==\"static\")){var O=i.getBoundingClientRect();a-=O.top+parseInt(ae(i,\"border-top-width\")),c-=O.left+parseInt(ae(i,\"border-left-width\")),f=a+o.height,u=c+o.width;break}while(i=i.parentNode);if(n&&e!==window){var S=Fn(i||e),x=S&&S.a,M=S&&S.d;S&&(a/=M,c/=x,m/=x,y/=M,f=a+y,u=c+m)}return{top:a,left:c,bottom:f,right:u,width:m,height:y}}}function bo(e,t,r){for(var n=sn(e,!0),i=qe(e)[t];n;){var o=qe(n)[r],a=void 0;if(r===\"top\"||r===\"left\"?a=i>=o:a=i<=o,!a)return n;if(n===Pt())break;n=sn(n,!1)}return!1}function kn(e,t,r,n){for(var i=0,o=0,a=e.children;o<a.length;){if(a[o].style.display!==\"none\"&&a[o]!==se.ghost&&(n||a[o]!==se.dragged)&&St(a[o],r.draggable,e,!1)){if(i===t)return a[o];i++}o++}return null}function wi(e,t){for(var r=e.lastElementChild;r&&(r===se.ghost||ae(r,\"display\")===\"none\"||t&&!Tr(r,t));)r=r.previousElementSibling;return r||null}function vt(e,t){var r=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)e.nodeName.toUpperCase()!==\"TEMPLATE\"&&e!==se.clone&&(!t||Tr(e,t))&&r++;return r}function yo(e){var t=0,r=0,n=Pt();if(e)do{var i=Fn(e),o=i.a,a=i.d;t+=e.scrollLeft*o,r+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,r]}function es(e,t){for(var r in e)if(e.hasOwnProperty(r)){for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[r][n])return Number(r)}return-1}function sn(e,t){if(!e||!e.getBoundingClientRect)return Pt();var r=e,n=!1;do if(r.clientWidth<r.scrollWidth||r.clientHeight<r.scrollHeight){var i=ae(r);if(r.clientWidth<r.scrollWidth&&(i.overflowX==\"auto\"||i.overflowX==\"scroll\")||r.clientHeight<r.scrollHeight&&(i.overflowY==\"auto\"||i.overflowY==\"scroll\")){if(!r.getBoundingClientRect||r===document.body)return Pt();if(n||t)return r;n=!0}}while(r=r.parentNode);return Pt()}function ts(e,t){if(e&&t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function ai(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}var Kn;function _o(e,t){return function(){if(!Kn){var r=arguments,n=this;r.length===1?e.call(n,r[0]):e.apply(n,r),Kn=setTimeout(function(){Kn=void 0},t)}}}function ns(){clearTimeout(Kn),Kn=void 0}function To(e,t,r){e.scrollLeft+=t,e.scrollTop+=r}function Po(e){var t=window.Polymer,r=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):r?r(e).clone(!0)[0]:e.cloneNode(!0)}function Mo(e,t,r){var n={};return Array.from(e.children).forEach(function(i){var o,a,c,f;if(!(!St(i,t.draggable,e,!1)||i.animated||i===r)){var u=qe(i);n.left=Math.min((o=n.left)!==null&&o!==void 0?o:1/0,u.left),n.top=Math.min((a=n.top)!==null&&a!==void 0?a:1/0,u.top),n.right=Math.max((c=n.right)!==null&&c!==void 0?c:-1/0,u.right),n.bottom=Math.max((f=n.bottom)!==null&&f!==void 0?f:-1/0,u.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var st=\"Sortable\"+new Date().getTime();function rs(){var e=[],t;return{captureAnimationState:function(){if(e=[],!!this.options.animation){var n=[].slice.call(this.el.children);n.forEach(function(i){if(!(ae(i,\"display\")===\"none\"||i===se.ghost)){e.push({target:i,rect:qe(i)});var o=Mt({},e[e.length-1].rect);if(i.thisAnimationDuration){var a=Fn(i,!0);a&&(o.top-=a.f,o.left-=a.e)}i.fromRect=o}})}},addAnimationState:function(n){e.push(n)},removeAnimationState:function(n){e.splice(es(e,{target:n}),1)},animateAll:function(n){var i=this;if(!this.options.animation){clearTimeout(t),typeof n==\"function\"&&n();return}var o=!1,a=0;e.forEach(function(c){var f=0,u=c.target,y=u.fromRect,m=qe(u),O=u.prevFromRect,S=u.prevToRect,x=c.rect,M=Fn(u,!0);M&&(m.top-=M.f,m.left-=M.e),u.toRect=m,u.thisAnimationDuration&&ai(O,m)&&!ai(y,m)&&(x.top-m.top)/(x.left-m.left)===(y.top-m.top)/(y.left-m.left)&&(f=os(x,O,S,i.options)),ai(m,y)||(u.prevFromRect=y,u.prevToRect=m,f||(f=i.options.animation),i.animate(u,x,m,f)),f&&(o=!0,a=Math.max(a,f),clearTimeout(u.animationResetTimer),u.animationResetTimer=setTimeout(function(){u.animationTime=0,u.prevFromRect=null,u.fromRect=null,u.prevToRect=null,u.thisAnimationDuration=null},f),u.thisAnimationDuration=f)}),clearTimeout(t),o?t=setTimeout(function(){typeof n==\"function\"&&n()},a):typeof n==\"function\"&&n(),e=[]},animate:function(n,i,o,a){if(a){ae(n,\"transition\",\"\"),ae(n,\"transform\",\"\");var c=Fn(this.el),f=c&&c.a,u=c&&c.d,y=(i.left-o.left)/(f||1),m=(i.top-o.top)/(u||1);n.animatingX=!!y,n.animatingY=!!m,ae(n,\"transform\",\"translate3d(\"+y+\"px,\"+m+\"px,0)\"),this.forRepaintDummy=is(n),ae(n,\"transition\",\"transform \"+a+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),ae(n,\"transform\",\"translate3d(0,0,0)\"),typeof n.animated==\"number\"&&clearTimeout(n.animated),n.animated=setTimeout(function(){ae(n,\"transition\",\"\"),ae(n,\"transform\",\"\"),n.animated=!1,n.animatingX=!1,n.animatingY=!1},a)}}}}function is(e){return e.offsetWidth}function os(e,t,r,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))/Math.sqrt(Math.pow(t.top-r.top,2)+Math.pow(t.left-r.left,2))*n.animation}var Mn=[],si={initializeByDefault:!0},tr={mount:function(t){for(var r in si)si.hasOwnProperty(r)&&!(r in t)&&(t[r]=si[r]);Mn.forEach(function(n){if(n.pluginName===t.pluginName)throw\"Sortable: Cannot mount plugin \".concat(t.pluginName,\" more than once\")}),Mn.push(t)},pluginEvent:function(t,r,n){var i=this;this.eventCanceled=!1,n.cancel=function(){i.eventCanceled=!0};var o=t+\"Global\";Mn.forEach(function(a){r[a.pluginName]&&(r[a.pluginName][o]&&r[a.pluginName][o](Mt({sortable:r},n)),r.options[a.pluginName]&&r[a.pluginName][t]&&r[a.pluginName][t](Mt({sortable:r},n)))})},initializePlugins:function(t,r,n,i){Mn.forEach(function(c){var f=c.pluginName;if(!(!t.options[f]&&!c.initializeByDefault)){var u=new c(t,r,t.options);u.sortable=t,u.options=t.options,t[f]=u,$t(n,u.defaults)}});for(var o in t.options)if(t.options.hasOwnProperty(o)){var a=this.modifyOption(t,o,t.options[o]);typeof a<\"u\"&&(t.options[o]=a)}},getEventProperties:function(t,r){var n={};return Mn.forEach(function(i){typeof i.eventProperties==\"function\"&&$t(n,i.eventProperties.call(r[i.pluginName],t))}),n},modifyOption:function(t,r,n){var i;return Mn.forEach(function(o){t[o.pluginName]&&o.optionListeners&&typeof o.optionListeners[r]==\"function\"&&(i=o.optionListeners[r].call(t[o.pluginName],n))}),i}};function as(e){var t=e.sortable,r=e.rootEl,n=e.name,i=e.targetEl,o=e.cloneEl,a=e.toEl,c=e.fromEl,f=e.oldIndex,u=e.newIndex,y=e.oldDraggableIndex,m=e.newDraggableIndex,O=e.originalEvent,S=e.putSortable,x=e.extraEventProperties;if(t=t||r&&r[st],!!t){var M,I=t.options,$=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);window.CustomEvent&&!Wt&&!er?M=new CustomEvent(n,{bubbles:!0,cancelable:!0}):(M=document.createEvent(\"Event\"),M.initEvent(n,!0,!0)),M.to=a||r,M.from=c||r,M.item=i||r,M.clone=o,M.oldIndex=f,M.newIndex=u,M.oldDraggableIndex=y,M.newDraggableIndex=m,M.originalEvent=O,M.pullMode=S?S.lastPutMode:void 0;var A=Mt(Mt({},x),tr.getEventProperties(n,t));for(var N in A)M[N]=A[N];r&&r.dispatchEvent(M),I[$]&&I[$].call(t,M)}}var ss=[\"evt\"],at=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,o=Qa(n,ss);tr.pluginEvent.bind(se)(t,r,Mt({dragEl:k,parentEl:Ve,ghostEl:ue,rootEl:Ne,nextEl:bn,lastDownEl:Ar,cloneEl:We,cloneHidden:an,dragStarted:Yn,putSortable:Qe,activeSortable:se.active,originalEvent:i,oldIndex:Ln,oldDraggableIndex:Jn,newIndex:ut,newDraggableIndex:on,hideGhostForTarget:Fo,unhideGhostForTarget:ko,cloneNowHidden:function(){an=!0},cloneNowShown:function(){an=!1},dispatchSortableEvent:function(c){it({sortable:r,name:c,originalEvent:i})}},o))};function it(e){as(Mt({putSortable:Qe,cloneEl:We,targetEl:k,rootEl:Ne,oldIndex:Ln,oldDraggableIndex:Jn,newIndex:ut,newDraggableIndex:on},e))}var k,Ve,ue,Ne,bn,Ar,We,an,Ln,ut,Jn,on,wr,Qe,In=!1,Pr=!1,Mr=[],mn,Ot,li,ci,wo,xo,Yn,Rn,Qn,Zn=!1,xr=!1,Cr,nt,fi=[],vi=!1,Rr=[],Lr=typeof document<\"u\",Er=yi,Eo=er||Wt?\"cssFloat\":\"float\",ls=Lr&&!So&&!yi&&\"draggable\"in document.createElement(\"div\"),Ro=(function(){if(Lr){if(Wt)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",e.style.pointerEvents===\"auto\"}})(),Io=function(t,r){var n=ae(t),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=kn(t,0,r),a=kn(t,1,r),c=o&&ae(o),f=a&&ae(a),u=c&&parseInt(c.marginLeft)+parseInt(c.marginRight)+qe(o).width,y=f&&parseInt(f.marginLeft)+parseInt(f.marginRight)+qe(a).width;if(n.display===\"flex\")return n.flexDirection===\"column\"||n.flexDirection===\"column-reverse\"?\"vertical\":\"horizontal\";if(n.display===\"grid\")return n.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\";if(o&&c.float&&c.float!==\"none\"){var m=c.float===\"left\"?\"left\":\"right\";return a&&(f.clear===\"both\"||f.clear===m)?\"vertical\":\"horizontal\"}return o&&(c.display===\"block\"||c.display===\"flex\"||c.display===\"table\"||c.display===\"grid\"||u>=i&&n[Eo]===\"none\"||a&&n[Eo]===\"none\"&&u+y>i)?\"vertical\":\"horizontal\"},cs=function(t,r,n){var i=n?t.left:t.top,o=n?t.right:t.bottom,a=n?t.width:t.height,c=n?r.left:r.top,f=n?r.right:r.bottom,u=n?r.width:r.height;return i===c||o===f||i+a/2===c+u/2},fs=function(t,r){var n;return Mr.some(function(i){var o=i[st].options.emptyInsertThreshold;if(!(!o||wi(i))){var a=qe(i),c=t>=a.left-o&&t<=a.right+o,f=r>=a.top-o&&r<=a.bottom+o;if(c&&f)return n=i}}),n},Lo=function(t){function r(o,a){return function(c,f,u,y){var m=c.options.group.name&&f.options.group.name&&c.options.group.name===f.options.group.name;if(o==null&&(a||m))return!0;if(o==null||o===!1)return!1;if(a&&o===\"clone\")return o;if(typeof o==\"function\")return r(o(c,f,u,y),a)(c,f,u,y);var O=(a?c:f).options.group.name;return o===!0||typeof o==\"string\"&&o===O||o.join&&o.indexOf(O)>-1}}var n={},i=t.group;(!i||Sr(i)!=\"object\")&&(i={name:i}),n.name=i.name,n.checkPull=r(i.pull,!0),n.checkPut=r(i.put),n.revertClone=i.revertClone,t.group=n},Fo=function(){!Ro&&ue&&ae(ue,\"display\",\"none\")},ko=function(){!Ro&&ue&&ae(ue,\"display\",\"\")};Lr&&!So&&document.addEventListener(\"click\",function(e){if(Pr)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),Pr=!1,!1},!0);var gn=function(t){if(k){t=t.touches?t.touches[0]:t;var r=fs(t.clientX,t.clientY);if(r){var n={};for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);n.target=n.rootEl=r,n.preventDefault=void 0,n.stopPropagation=void 0,r[st]._onDragOver(n)}}},us=function(t){k&&k.parentNode[st]._isOutsideThisEl(t.target)};function se(e,t){if(!(e&&e.nodeType&&e.nodeType===1))throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=$t({},t),e[st]=this;var r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Io(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,c){a.setData(\"Text\",c.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:se.supportPointer!==!1&&\"PointerEvent\"in window&&(!Gn||yi),emptyInsertThreshold:5};tr.initializePlugins(this,e,r);for(var n in r)!(n in t)&&(t[n]=r[n]);Lo(t);for(var i in this)i.charAt(0)===\"_\"&&typeof this[i]==\"function\"&&(this[i]=this[i].bind(this));this.nativeDraggable=t.forceFallback?!1:ls,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?Oe(e,\"pointerdown\",this._onTapStart):(Oe(e,\"mousedown\",this._onTapStart),Oe(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(Oe(e,\"dragover\",this),Oe(e,\"dragenter\",this)),Mr.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),$t(this,rs())}se.prototype={constructor:se,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(Rn=null)},_getDirection:function(t,r){return typeof this.options.direction==\"function\"?this.options.direction.call(this,t,r,k):this.options.direction},_onTapStart:function(t){if(t.cancelable){var r=this,n=this.el,i=this.options,o=i.preventOnFilter,a=t.type,c=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===\"touch\"&&t,f=(c||t).target,u=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||f,y=i.filter;if(ys(n),!k&&!(/mousedown|pointerdown/.test(a)&&t.button!==0||i.disabled)&&!u.isContentEditable&&!(!this.nativeDraggable&&Gn&&f&&f.tagName.toUpperCase()===\"SELECT\")&&(f=St(f,i.draggable,n,!1),!(f&&f.animated)&&Ar!==f)){if(Ln=vt(f),Jn=vt(f,i.draggable),typeof y==\"function\"){if(y.call(this,t,f,this)){it({sortable:r,rootEl:u,name:\"filter\",targetEl:f,toEl:n,fromEl:n}),at(\"filter\",r,{evt:t}),o&&t.preventDefault();return}}else if(y&&(y=y.split(\",\").some(function(m){if(m=St(u,m.trim(),n,!1),m)return it({sortable:r,rootEl:m,name:\"filter\",targetEl:f,fromEl:n,toEl:n}),at(\"filter\",r,{evt:t}),!0}),y)){o&&t.preventDefault();return}i.handle&&!St(u,i.handle,n,!1)||this._prepareDragStart(t,c,f)}}},_prepareDragStart:function(t,r,n){var i=this,o=i.el,a=i.options,c=o.ownerDocument,f;if(n&&!k&&n.parentNode===o){var u=qe(n);if(Ne=o,k=n,Ve=k.parentNode,bn=k.nextSibling,Ar=n,wr=a.group,se.dragged=k,mn={target:k,clientX:(r||t).clientX,clientY:(r||t).clientY},wo=mn.clientX-u.left,xo=mn.clientY-u.top,this._lastX=(r||t).clientX,this._lastY=(r||t).clientY,k.style[\"will-change\"]=\"all\",f=function(){if(at(\"delayEnded\",i,{evt:t}),se.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!mo&&i.nativeDraggable&&(k.draggable=!0),i._triggerDragStart(t,r),it({sortable:i,name:\"choose\",originalEvent:t}),ft(k,a.chosenClass,!0)},a.ignore.split(\",\").forEach(function(y){Do(k,y.trim(),ui)}),Oe(c,\"dragover\",gn),Oe(c,\"mousemove\",gn),Oe(c,\"touchmove\",gn),a.supportPointer?(Oe(c,\"pointerup\",i._onDrop),!this.nativeDraggable&&Oe(c,\"pointercancel\",i._onDrop)):(Oe(c,\"mouseup\",i._onDrop),Oe(c,\"touchend\",i._onDrop),Oe(c,\"touchcancel\",i._onDrop)),mo&&this.nativeDraggable&&(this.options.touchStartThreshold=4,k.draggable=!0),at(\"delayStart\",this,{evt:t}),a.delay&&(!a.delayOnTouchOnly||r)&&(!this.nativeDraggable||!(er||Wt))){if(se.eventCanceled){this._onDrop();return}a.supportPointer?(Oe(c,\"pointerup\",i._disableDelayedDrag),Oe(c,\"pointercancel\",i._disableDelayedDrag)):(Oe(c,\"mouseup\",i._disableDelayedDrag),Oe(c,\"touchend\",i._disableDelayedDrag),Oe(c,\"touchcancel\",i._disableDelayedDrag)),Oe(c,\"mousemove\",i._delayedDragTouchMoveHandler),Oe(c,\"touchmove\",i._delayedDragTouchMoveHandler),a.supportPointer&&Oe(c,\"pointermove\",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(f,a.delay)}else f()}},_delayedDragTouchMoveHandler:function(t){var r=t.touches?t.touches[0]:t;Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){k&&ui(k),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;Ee(t,\"mouseup\",this._disableDelayedDrag),Ee(t,\"touchend\",this._disableDelayedDrag),Ee(t,\"touchcancel\",this._disableDelayedDrag),Ee(t,\"pointerup\",this._disableDelayedDrag),Ee(t,\"pointercancel\",this._disableDelayedDrag),Ee(t,\"mousemove\",this._delayedDragTouchMoveHandler),Ee(t,\"touchmove\",this._delayedDragTouchMoveHandler),Ee(t,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,r){r=r||t.pointerType==\"touch\"&&t,!this.nativeDraggable||r?this.options.supportPointer?Oe(document,\"pointermove\",this._onTouchMove):r?Oe(document,\"touchmove\",this._onTouchMove):Oe(document,\"mousemove\",this._onTouchMove):(Oe(k,\"dragend\",this),Oe(Ne,\"dragstart\",this._onDragStart));try{document.selection?Dr(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,r){if(In=!1,Ne&&k){at(\"dragStarted\",this,{evt:r}),this.nativeDraggable&&Oe(document,\"dragover\",us);var n=this.options;!t&&ft(k,n.dragClass,!1),ft(k,n.ghostClass,!0),se.active=this,t&&this._appendGhost(),it({sortable:this,name:\"start\",originalEvent:r})}else this._nulling()},_emulateDragOver:function(){if(Ot){this._lastX=Ot.clientX,this._lastY=Ot.clientY,Fo();for(var t=document.elementFromPoint(Ot.clientX,Ot.clientY),r=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Ot.clientX,Ot.clientY),t!==r);)r=t;if(k.parentNode[st]._isOutsideThisEl(t),r)do{if(r[st]){var n=void 0;if(n=r[st]._onDragOver({clientX:Ot.clientX,clientY:Ot.clientY,target:t,rootEl:r}),n&&!this.options.dragoverBubble)break}t=r}while(r=Co(r));ko()}},_onTouchMove:function(t){if(mn){var r=this.options,n=r.fallbackTolerance,i=r.fallbackOffset,o=t.touches?t.touches[0]:t,a=ue&&Fn(ue,!0),c=ue&&a&&a.a,f=ue&&a&&a.d,u=Er&&nt&&yo(nt),y=(o.clientX-mn.clientX+i.x)/(c||1)+(u?u[0]-fi[0]:0)/(c||1),m=(o.clientY-mn.clientY+i.y)/(f||1)+(u?u[1]-fi[1]:0)/(f||1);if(!se.active&&!In){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}if(ue){a?(a.e+=y-(li||0),a.f+=m-(ci||0)):a={a:1,b:0,c:0,d:1,e:y,f:m};var O=\"matrix(\".concat(a.a,\",\").concat(a.b,\",\").concat(a.c,\",\").concat(a.d,\",\").concat(a.e,\",\").concat(a.f,\")\");ae(ue,\"webkitTransform\",O),ae(ue,\"mozTransform\",O),ae(ue,\"msTransform\",O),ae(ue,\"transform\",O),li=y,ci=m,Ot=o}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!ue){var t=this.options.fallbackOnBody?document.body:Ne,r=qe(k,!0,Er,!0,t),n=this.options;if(Er){for(nt=t;ae(nt,\"position\")===\"static\"&&ae(nt,\"transform\")===\"none\"&&nt!==document;)nt=nt.parentNode;nt!==document.body&&nt!==document.documentElement?(nt===document&&(nt=Pt()),r.top+=nt.scrollTop,r.left+=nt.scrollLeft):nt=Pt(),fi=yo(nt)}ue=k.cloneNode(!0),ft(ue,n.ghostClass,!1),ft(ue,n.fallbackClass,!0),ft(ue,n.dragClass,!0),ae(ue,\"transition\",\"\"),ae(ue,\"transform\",\"\"),ae(ue,\"box-sizing\",\"border-box\"),ae(ue,\"margin\",0),ae(ue,\"top\",r.top),ae(ue,\"left\",r.left),ae(ue,\"width\",r.width),ae(ue,\"height\",r.height),ae(ue,\"opacity\",\"0.8\"),ae(ue,\"position\",Er?\"absolute\":\"fixed\"),ae(ue,\"zIndex\",\"100000\"),ae(ue,\"pointerEvents\",\"none\"),se.ghost=ue,t.appendChild(ue),ae(ue,\"transform-origin\",wo/parseInt(ue.style.width)*100+\"% \"+xo/parseInt(ue.style.height)*100+\"%\")}},_onDragStart:function(t,r){var n=this,i=t.dataTransfer,o=n.options;if(at(\"dragStart\",this,{evt:t}),se.eventCanceled){this._onDrop();return}at(\"setupClone\",this),se.eventCanceled||(We=Po(k),We.removeAttribute(\"id\"),We.draggable=!1,We.style[\"will-change\"]=\"\",this._hideClone(),ft(We,this.options.chosenClass,!1),se.clone=We),n.cloneId=Dr(function(){at(\"clone\",n),!se.eventCanceled&&(n.options.removeCloneOnHide||Ne.insertBefore(We,k),n._hideClone(),it({sortable:n,name:\"clone\"}))}),!r&&ft(k,o.dragClass,!0),r?(Pr=!0,n._loopId=setInterval(n._emulateDragOver,50)):(Ee(document,\"mouseup\",n._onDrop),Ee(document,\"touchend\",n._onDrop),Ee(document,\"touchcancel\",n._onDrop),i&&(i.effectAllowed=\"move\",o.setData&&o.setData.call(n,i,k)),Oe(document,\"drop\",n),ae(k,\"transform\",\"translateZ(0)\")),In=!0,n._dragStartId=Dr(n._dragStarted.bind(n,r,t)),Oe(document,\"selectstart\",n),Yn=!0,window.getSelection().removeAllRanges(),Gn&&ae(document.body,\"user-select\",\"none\")},_onDragOver:function(t){var r=this.el,n=t.target,i,o,a,c=this.options,f=c.group,u=se.active,y=wr===f,m=c.sort,O=Qe||u,S,x=this,M=!1;if(vi)return;function I(R,Z){at(R,x,Mt({evt:t,isOwner:y,axis:S?\"vertical\":\"horizontal\",revert:a,dragRect:i,targetRect:o,canSort:m,fromSortable:O,target:n,completed:A,onMove:function(Rt,Ut){return Or(Ne,r,k,i,Rt,qe(Rt),t,Ut)},changed:N},Z))}function $(){I(\"dragOverAnimationCapture\"),x.captureAnimationState(),x!==O&&O.captureAnimationState()}function A(R){return I(\"dragOverCompleted\",{insertion:R}),R&&(y?u._hideClone():u._showClone(x),x!==O&&(ft(k,Qe?Qe.options.ghostClass:u.options.ghostClass,!1),ft(k,c.ghostClass,!0)),Qe!==x&&x!==se.active?Qe=x:x===se.active&&Qe&&(Qe=null),O===x&&(x._ignoreWhileAnimating=n),x.animateAll(function(){I(\"dragOverAnimationComplete\"),x._ignoreWhileAnimating=null}),x!==O&&(O.animateAll(),O._ignoreWhileAnimating=null)),(n===k&&!k.animated||n===r&&!n.animated)&&(Rn=null),!c.dragoverBubble&&!t.rootEl&&n!==document&&(k.parentNode[st]._isOutsideThisEl(t.target),!R&&gn(t)),!c.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),M=!0}function N(){ut=vt(k),on=vt(k,c.draggable),it({sortable:x,name:\"change\",toEl:r,newIndex:ut,newDraggableIndex:on,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),n=St(n,c.draggable,r,!0),I(\"dragOver\"),se.eventCanceled)return M;if(k.contains(t.target)||n.animated&&n.animatingX&&n.animatingY||x._ignoreWhileAnimating===n)return A(!1);if(Pr=!1,u&&!c.disabled&&(y?m||(a=Ve!==Ne):Qe===this||(this.lastPutMode=wr.checkPull(this,u,k,t))&&f.checkPut(this,u,k,t))){if(S=this._getDirection(t,n)===\"vertical\",i=qe(k),I(\"dragOverValid\"),se.eventCanceled)return M;if(a)return Ve=Ne,$(),this._hideClone(),I(\"revert\"),se.eventCanceled||(bn?Ne.insertBefore(k,bn):Ne.appendChild(k)),A(!0);var Y=wi(r,c.draggable);if(!Y||vs(t,S,this)&&!Y.animated){if(Y===k)return A(!1);if(Y&&r===t.target&&(n=Y),n&&(o=qe(n)),Or(Ne,r,k,i,n,o,t,!!n)!==!1)return $(),Y&&Y.nextSibling?r.insertBefore(k,Y.nextSibling):r.appendChild(k),Ve=r,N(),A(!0)}else if(Y&&hs(t,S,this)){var ne=kn(r,0,c,!0);if(ne===k)return A(!1);if(n=ne,o=qe(n),Or(Ne,r,k,i,n,o,t,!1)!==!1)return $(),r.insertBefore(k,ne),Ve=r,N(),A(!0)}else if(n.parentNode===r){o=qe(n);var J=0,V,de=k.parentNode!==r,X=!cs(k.animated&&k.toRect||i,n.animated&&n.toRect||o,S),Q=S?\"top\":\"left\",me=bo(n,\"top\",\"top\")||bo(k,\"top\",\"top\"),l=me?me.scrollTop:void 0;Rn!==n&&(V=o[Q],Zn=!1,xr=!X&&c.invertSwap||de),J=ms(t,n,o,S,X?1:c.swapThreshold,c.invertedSwapThreshold==null?c.swapThreshold:c.invertedSwapThreshold,xr,Rn===n);var h;if(J!==0){var v=vt(k);do v-=J,h=Ve.children[v];while(h&&(ae(h,\"display\")===\"none\"||h===ue))}if(J===0||h===n)return A(!1);Rn=n,Qn=J;var p=n.nextElementSibling,j=!1;j=J===1;var P=Or(Ne,r,k,i,n,o,t,j);if(P!==!1)return(P===1||P===-1)&&(j=P===1),vi=!0,setTimeout(ps,30),$(),j&&!p?r.appendChild(k):n.parentNode.insertBefore(k,j?p:n),me&&To(me,0,l-me.scrollTop),Ve=k.parentNode,V!==void 0&&!xr&&(Cr=Math.abs(V-qe(n)[Q])),N(),A(!0)}if(r.contains(k))return A(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){Ee(document,\"mousemove\",this._onTouchMove),Ee(document,\"touchmove\",this._onTouchMove),Ee(document,\"pointermove\",this._onTouchMove),Ee(document,\"dragover\",gn),Ee(document,\"mousemove\",gn),Ee(document,\"touchmove\",gn)},_offUpEvents:function(){var t=this.el.ownerDocument;Ee(t,\"mouseup\",this._onDrop),Ee(t,\"touchend\",this._onDrop),Ee(t,\"pointerup\",this._onDrop),Ee(t,\"pointercancel\",this._onDrop),Ee(t,\"touchcancel\",this._onDrop),Ee(document,\"selectstart\",this)},_onDrop:function(t){var r=this.el,n=this.options;if(ut=vt(k),on=vt(k,n.draggable),at(\"drop\",this,{evt:t}),Ve=k&&k.parentNode,ut=vt(k),on=vt(k,n.draggable),se.eventCanceled){this._nulling();return}In=!1,xr=!1,Zn=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),mi(this.cloneId),mi(this._dragStartId),this.nativeDraggable&&(Ee(document,\"drop\",this),Ee(r,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Gn&&ae(document.body,\"user-select\",\"\"),ae(k,\"transform\",\"\"),t&&(Yn&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),ue&&ue.parentNode&&ue.parentNode.removeChild(ue),(Ne===Ve||Qe&&Qe.lastPutMode!==\"clone\")&&We&&We.parentNode&&We.parentNode.removeChild(We),k&&(this.nativeDraggable&&Ee(k,\"dragend\",this),ui(k),k.style[\"will-change\"]=\"\",Yn&&!In&&ft(k,Qe?Qe.options.ghostClass:this.options.ghostClass,!1),ft(k,this.options.chosenClass,!1),it({sortable:this,name:\"unchoose\",toEl:Ve,newIndex:null,newDraggableIndex:null,originalEvent:t}),Ne!==Ve?(ut>=0&&(it({rootEl:Ve,name:\"add\",toEl:Ve,fromEl:Ne,originalEvent:t}),it({sortable:this,name:\"remove\",toEl:Ve,originalEvent:t}),it({rootEl:Ve,name:\"sort\",toEl:Ve,fromEl:Ne,originalEvent:t}),it({sortable:this,name:\"sort\",toEl:Ve,originalEvent:t})),Qe&&Qe.save()):ut!==Ln&&ut>=0&&(it({sortable:this,name:\"update\",toEl:Ve,originalEvent:t}),it({sortable:this,name:\"sort\",toEl:Ve,originalEvent:t})),se.active&&((ut==null||ut===-1)&&(ut=Ln,on=Jn),it({sortable:this,name:\"end\",toEl:Ve,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){at(\"nulling\",this),Ne=k=Ve=ue=bn=We=Ar=an=mn=Ot=Yn=ut=on=Ln=Jn=Rn=Qn=Qe=wr=se.dragged=se.ghost=se.clone=se.active=null,Rr.forEach(function(t){t.checked=!0}),Rr.length=li=ci=0},handleEvent:function(t){switch(t.type){case\"drop\":case\"dragend\":this._onDrop(t);break;case\"dragenter\":case\"dragover\":k&&(this._onDragOver(t),ds(t));break;case\"selectstart\":t.preventDefault();break}},toArray:function(){for(var t=[],r,n=this.el.children,i=0,o=n.length,a=this.options;i<o;i++)r=n[i],St(r,a.draggable,this.el,!1)&&t.push(r.getAttribute(a.dataIdAttr)||bs(r));return t},sort:function(t,r){var n={},i=this.el;this.toArray().forEach(function(o,a){var c=i.children[a];St(c,this.options.draggable,i,!1)&&(n[o]=c)},this),r&&this.captureAnimationState(),t.forEach(function(o){n[o]&&(i.removeChild(n[o]),i.appendChild(n[o]))}),r&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,r){return St(t,r||this.options.draggable,this.el,!1)},option:function(t,r){var n=this.options;if(r===void 0)return n[t];var i=tr.modifyOption(this,t,r);typeof i<\"u\"?n[t]=i:n[t]=r,t===\"group\"&&Lo(n)},destroy:function(){at(\"destroy\",this);var t=this.el;t[st]=null,Ee(t,\"mousedown\",this._onTapStart),Ee(t,\"touchstart\",this._onTapStart),Ee(t,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(Ee(t,\"dragover\",this),Ee(t,\"dragenter\",this)),Array.prototype.forEach.call(t.querySelectorAll(\"[draggable]\"),function(r){r.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),Mr.splice(Mr.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!an){if(at(\"hideClone\",this),se.eventCanceled)return;ae(We,\"display\",\"none\"),this.options.removeCloneOnHide&&We.parentNode&&We.parentNode.removeChild(We),an=!0}},_showClone:function(t){if(t.lastPutMode!==\"clone\"){this._hideClone();return}if(an){if(at(\"showClone\",this),se.eventCanceled)return;k.parentNode==Ne&&!this.options.group.revertClone?Ne.insertBefore(We,k):bn?Ne.insertBefore(We,bn):Ne.appendChild(We),this.options.group.revertClone&&this.animate(k,We),ae(We,\"display\",\"\"),an=!1}}};function ds(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}function Or(e,t,r,n,i,o,a,c){var f,u=e[st],y=u.options.onMove,m;return window.CustomEvent&&!Wt&&!er?f=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}):(f=document.createEvent(\"Event\"),f.initEvent(\"move\",!0,!0)),f.to=t,f.from=e,f.dragged=r,f.draggedRect=n,f.related=i||t,f.relatedRect=o||qe(t),f.willInsertAfter=c,f.originalEvent=a,e.dispatchEvent(f),y&&(m=y.call(u,f,a)),m}function ui(e){e.draggable=!1}function ps(){vi=!1}function hs(e,t,r){var n=qe(kn(r.el,0,r.options,!0)),i=Mo(r.el,r.options,ue),o=10;return t?e.clientX<i.left-o||e.clientY<n.top&&e.clientX<n.right:e.clientY<i.top-o||e.clientY<n.bottom&&e.clientX<n.left}function vs(e,t,r){var n=qe(wi(r.el,r.options.draggable)),i=Mo(r.el,r.options,ue),o=10;return t?e.clientX>i.right+o||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>i.bottom+o||e.clientX>n.right&&e.clientY>n.top}function ms(e,t,r,n,i,o,a,c){var f=n?e.clientY:e.clientX,u=n?r.height:r.width,y=n?r.top:r.left,m=n?r.bottom:r.right,O=!1;if(!a){if(c&&Cr<u*i){if(!Zn&&(Qn===1?f>y+u*o/2:f<m-u*o/2)&&(Zn=!0),Zn)O=!0;else if(Qn===1?f<y+Cr:f>m-Cr)return-Qn}else if(f>y+u*(1-i)/2&&f<m-u*(1-i)/2)return gs(t)}return O=O||a,O&&(f<y+u*o/2||f>m-u*o/2)?f>y+u/2?1:-1:0}function gs(e){return vt(k)<vt(e)?1:-1}function bs(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,r=t.length,n=0;r--;)n+=t.charCodeAt(r);return n.toString(36)}function ys(e){Rr.length=0;for(var t=e.getElementsByTagName(\"input\"),r=t.length;r--;){var n=t[r];n.checked&&Rr.push(n)}}function Dr(e){return setTimeout(e,0)}function mi(e){return clearTimeout(e)}Lr&&Oe(document,\"touchmove\",function(e){(se.active||In)&&e.cancelable&&e.preventDefault()});se.utils={on:Oe,off:Ee,css:ae,find:Do,is:function(t,r){return!!St(t,r,t,!1)},extend:ts,throttle:_o,closest:St,toggleClass:ft,clone:Po,index:vt,nextTick:Dr,cancelNextTick:mi,detectDirection:Io,getChild:kn,expando:st};se.get=function(e){return e[st]};se.mount=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t[0].constructor===Array&&(t=t[0]),t.forEach(function(n){if(!n.prototype||!n.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(n));n.utils&&(se.utils=Mt(Mt({},se.utils),n.utils)),tr.mount(n)})};se.create=function(e,t){return new se(e,t)};se.version=Za;var Xe=[],Xn,gi,bi=!1,di,pi,Ir,qn;function ws(){function e(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)===\"_\"&&typeof this[t]==\"function\"&&(this[t]=this[t].bind(this))}return e.prototype={dragStarted:function(r){var n=r.originalEvent;this.sortable.nativeDraggable?Oe(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?Oe(document,\"pointermove\",this._handleFallbackAutoScroll):n.touches?Oe(document,\"touchmove\",this._handleFallbackAutoScroll):Oe(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(r){var n=r.originalEvent;!this.options.dragOverBubble&&!n.rootEl&&this._handleAutoScroll(n)},drop:function(){this.sortable.nativeDraggable?Ee(document,\"dragover\",this._handleAutoScroll):(Ee(document,\"pointermove\",this._handleFallbackAutoScroll),Ee(document,\"touchmove\",this._handleFallbackAutoScroll),Ee(document,\"mousemove\",this._handleFallbackAutoScroll)),Oo(),_r(),ns()},nulling:function(){Ir=gi=Xn=bi=qn=di=pi=null,Xe.length=0},_handleFallbackAutoScroll:function(r){this._handleAutoScroll(r,!0)},_handleAutoScroll:function(r,n){var i=this,o=(r.touches?r.touches[0]:r).clientX,a=(r.touches?r.touches[0]:r).clientY,c=document.elementFromPoint(o,a);if(Ir=r,n||this.options.forceAutoScrollFallback||er||Wt||Gn){hi(r,this.options,c,n);var f=sn(c,!0);bi&&(!qn||o!==di||a!==pi)&&(qn&&Oo(),qn=setInterval(function(){var u=sn(document.elementFromPoint(o,a),!0);u!==f&&(f=u,_r()),hi(r,i.options,u,n)},10),di=o,pi=a)}else{if(!this.options.bubbleScroll||sn(c,!0)===Pt()){_r();return}hi(r,this.options,sn(c,!1),!1)}}},$t(e,{pluginName:\"scroll\",initializeByDefault:!0})}function _r(){Xe.forEach(function(e){clearInterval(e.pid)}),Xe=[]}function Oo(){clearInterval(qn)}var hi=_o(function(e,t,r,n){if(t.scroll){var i=(e.touches?e.touches[0]:e).clientX,o=(e.touches?e.touches[0]:e).clientY,a=t.scrollSensitivity,c=t.scrollSpeed,f=Pt(),u=!1,y;gi!==r&&(gi=r,_r(),Xn=t.scroll,y=t.scrollFn,Xn===!0&&(Xn=sn(r,!0)));var m=0,O=Xn;do{var S=O,x=qe(S),M=x.top,I=x.bottom,$=x.left,A=x.right,N=x.width,Y=x.height,ne=void 0,J=void 0,V=S.scrollWidth,de=S.scrollHeight,X=ae(S),Q=S.scrollLeft,me=S.scrollTop;S===f?(ne=N<V&&(X.overflowX===\"auto\"||X.overflowX===\"scroll\"||X.overflowX===\"visible\"),J=Y<de&&(X.overflowY===\"auto\"||X.overflowY===\"scroll\"||X.overflowY===\"visible\")):(ne=N<V&&(X.overflowX===\"auto\"||X.overflowX===\"scroll\"),J=Y<de&&(X.overflowY===\"auto\"||X.overflowY===\"scroll\"));var l=ne&&(Math.abs(A-i)<=a&&Q+N<V)-(Math.abs($-i)<=a&&!!Q),h=J&&(Math.abs(I-o)<=a&&me+Y<de)-(Math.abs(M-o)<=a&&!!me);if(!Xe[m])for(var v=0;v<=m;v++)Xe[v]||(Xe[v]={});(Xe[m].vx!=l||Xe[m].vy!=h||Xe[m].el!==S)&&(Xe[m].el=S,Xe[m].vx=l,Xe[m].vy=h,clearInterval(Xe[m].pid),(l!=0||h!=0)&&(u=!0,Xe[m].pid=setInterval(function(){n&&this.layer===0&&se.active._onTouchMove(Ir);var p=Xe[this.layer].vy?Xe[this.layer].vy*c:0,j=Xe[this.layer].vx?Xe[this.layer].vx*c:0;typeof y==\"function\"&&y.call(se.dragged.parentNode[st],j,p,e,Ir,Xe[this.layer].el)!==\"continue\"||To(Xe[this.layer].el,j,p)}.bind({layer:m}),24))),m++}while(t.bubbleScroll&&O!==f&&(O=sn(O,!1)));bi=u}},30),No=function(t){var r=t.originalEvent,n=t.putSortable,i=t.dragEl,o=t.activeSortable,a=t.dispatchSortableEvent,c=t.hideGhostForTarget,f=t.unhideGhostForTarget;if(r){var u=n||o;c();var y=r.changedTouches&&r.changedTouches.length?r.changedTouches[0]:r,m=document.elementFromPoint(y.clientX,y.clientY);f(),u&&!u.el.contains(m)&&(a(\"spill\"),this.onSpill({dragEl:i,putSortable:n}))}};function xi(){}xi.prototype={startIndex:null,dragStart:function(t){var r=t.oldDraggableIndex;this.startIndex=r},onSpill:function(t){var r=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var i=kn(this.sortable.el,this.startIndex,this.options);i?this.sortable.el.insertBefore(r,i):this.sortable.el.appendChild(r),this.sortable.animateAll(),n&&n.animateAll()},drop:No};$t(xi,{pluginName:\"revertOnSpill\"});function Ei(){}Ei.prototype={onSpill:function(t){var r=t.dragEl,n=t.putSortable,i=n||this.sortable;i.captureAnimationState(),r.parentNode&&r.parentNode.removeChild(r),i.animateAll()},drop:No};$t(Ei,{pluginName:\"removeOnSpill\"});se.mount(new ws);se.mount(Ei,xi);var Oi=se;window.Sortable=Oi;var jo=e=>{e.directive(\"sortable\",t=>{let r=parseInt(t.dataset?.sortableAnimationDuration);r!==0&&!r&&(r=300),t.sortable=Oi.create(t,{group:t.getAttribute(\"x-sortable-group\"),draggable:\"[x-sortable-item]\",handle:\"[x-sortable-handle]\",dataIdAttr:\"x-sortable-item\",animation:r,ghostClass:\"fi-sortable-ghost\",onEnd(n){let{item:i,to:o,oldDraggableIndex:a,newDraggableIndex:c}=n;if(a===c)return;let f=this.options.draggable,u=o.querySelectorAll(`:scope > ${f}`)[c-1];u&&o.insertBefore(i,u.nextSibling)}})})};var xs=Object.create,Ci=Object.defineProperty,Es=Object.getPrototypeOf,Os=Object.prototype.hasOwnProperty,Ss=Object.getOwnPropertyNames,As=Object.getOwnPropertyDescriptor,Cs=e=>Ci(e,\"__esModule\",{value:!0}),Bo=(e,t)=>()=>(t||(t={exports:{}},e(t.exports,t)),t.exports),Ds=(e,t,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of Ss(t))!Os.call(e,n)&&n!==\"default\"&&Ci(e,n,{get:()=>t[n],enumerable:!(r=As(t,n))||r.enumerable});return e},Ho=e=>Ds(Cs(Ci(e!=null?xs(Es(e)):{},\"default\",e&&e.__esModule&&\"default\"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),_s=Bo(e=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});function t(d){var s=d.getBoundingClientRect();return{width:s.width,height:s.height,top:s.top,right:s.right,bottom:s.bottom,left:s.left,x:s.left,y:s.top}}function r(d){if(d==null)return window;if(d.toString()!==\"[object Window]\"){var s=d.ownerDocument;return s&&s.defaultView||window}return d}function n(d){var s=r(d),b=s.pageXOffset,_=s.pageYOffset;return{scrollLeft:b,scrollTop:_}}function i(d){var s=r(d).Element;return d instanceof s||d instanceof Element}function o(d){var s=r(d).HTMLElement;return d instanceof s||d instanceof HTMLElement}function a(d){if(typeof ShadowRoot>\"u\")return!1;var s=r(d).ShadowRoot;return d instanceof s||d instanceof ShadowRoot}function c(d){return{scrollLeft:d.scrollLeft,scrollTop:d.scrollTop}}function f(d){return d===r(d)||!o(d)?n(d):c(d)}function u(d){return d?(d.nodeName||\"\").toLowerCase():null}function y(d){return((i(d)?d.ownerDocument:d.document)||window.document).documentElement}function m(d){return t(y(d)).left+n(d).scrollLeft}function O(d){return r(d).getComputedStyle(d)}function S(d){var s=O(d),b=s.overflow,_=s.overflowX,T=s.overflowY;return/auto|scroll|overlay|hidden/.test(b+T+_)}function x(d,s,b){b===void 0&&(b=!1);var _=y(s),T=t(d),F=o(s),U={scrollLeft:0,scrollTop:0},H={x:0,y:0};return(F||!F&&!b)&&((u(s)!==\"body\"||S(_))&&(U=f(s)),o(s)?(H=t(s),H.x+=s.clientLeft,H.y+=s.clientTop):_&&(H.x=m(_))),{x:T.left+U.scrollLeft-H.x,y:T.top+U.scrollTop-H.y,width:T.width,height:T.height}}function M(d){var s=t(d),b=d.offsetWidth,_=d.offsetHeight;return Math.abs(s.width-b)<=1&&(b=s.width),Math.abs(s.height-_)<=1&&(_=s.height),{x:d.offsetLeft,y:d.offsetTop,width:b,height:_}}function I(d){return u(d)===\"html\"?d:d.assignedSlot||d.parentNode||(a(d)?d.host:null)||y(d)}function $(d){return[\"html\",\"body\",\"#document\"].indexOf(u(d))>=0?d.ownerDocument.body:o(d)&&S(d)?d:$(I(d))}function A(d,s){var b;s===void 0&&(s=[]);var _=$(d),T=_===((b=d.ownerDocument)==null?void 0:b.body),F=r(_),U=T?[F].concat(F.visualViewport||[],S(_)?_:[]):_,H=s.concat(U);return T?H:H.concat(A(I(U)))}function N(d){return[\"table\",\"td\",\"th\"].indexOf(u(d))>=0}function Y(d){return!o(d)||O(d).position===\"fixed\"?null:d.offsetParent}function ne(d){var s=navigator.userAgent.toLowerCase().indexOf(\"firefox\")!==-1,b=navigator.userAgent.indexOf(\"Trident\")!==-1;if(b&&o(d)){var _=O(d);if(_.position===\"fixed\")return null}for(var T=I(d);o(T)&&[\"html\",\"body\"].indexOf(u(T))<0;){var F=O(T);if(F.transform!==\"none\"||F.perspective!==\"none\"||F.contain===\"paint\"||[\"transform\",\"perspective\"].indexOf(F.willChange)!==-1||s&&F.willChange===\"filter\"||s&&F.filter&&F.filter!==\"none\")return T;T=T.parentNode}return null}function J(d){for(var s=r(d),b=Y(d);b&&N(b)&&O(b).position===\"static\";)b=Y(b);return b&&(u(b)===\"html\"||u(b)===\"body\"&&O(b).position===\"static\")?s:b||ne(d)||s}var V=\"top\",de=\"bottom\",X=\"right\",Q=\"left\",me=\"auto\",l=[V,de,X,Q],h=\"start\",v=\"end\",p=\"clippingParents\",j=\"viewport\",P=\"popper\",R=\"reference\",Z=l.reduce(function(d,s){return d.concat([s+\"-\"+h,s+\"-\"+v])},[]),ze=[].concat(l,[me]).reduce(function(d,s){return d.concat([s,s+\"-\"+h,s+\"-\"+v])},[]),Rt=\"beforeRead\",Ut=\"read\",Fr=\"afterRead\",kr=\"beforeMain\",Nr=\"main\",Vt=\"afterMain\",nr=\"beforeWrite\",jr=\"write\",rr=\"afterWrite\",It=[Rt,Ut,Fr,kr,Nr,Vt,nr,jr,rr];function Br(d){var s=new Map,b=new Set,_=[];d.forEach(function(F){s.set(F.name,F)});function T(F){b.add(F.name);var U=[].concat(F.requires||[],F.requiresIfExists||[]);U.forEach(function(H){if(!b.has(H)){var G=s.get(H);G&&T(G)}}),_.push(F)}return d.forEach(function(F){b.has(F.name)||T(F)}),_}function mt(d){var s=Br(d);return It.reduce(function(b,_){return b.concat(s.filter(function(T){return T.phase===_}))},[])}function zt(d){var s;return function(){return s||(s=new Promise(function(b){Promise.resolve().then(function(){s=void 0,b(d())})})),s}}function At(d){for(var s=arguments.length,b=new Array(s>1?s-1:0),_=1;_<s;_++)b[_-1]=arguments[_];return[].concat(b).reduce(function(T,F){return T.replace(/%s/,F)},d)}var Ct='Popper: modifier \"%s\" provided an invalid %s property, expected %s but got %s',Hr='Popper: modifier \"%s\" requires \"%s\", but \"%s\" modifier is not available',Ze=[\"name\",\"enabled\",\"phase\",\"fn\",\"effect\",\"requires\",\"options\"];function $r(d){d.forEach(function(s){Object.keys(s).forEach(function(b){switch(b){case\"name\":typeof s.name!=\"string\"&&console.error(At(Ct,String(s.name),'\"name\"','\"string\"','\"'+String(s.name)+'\"'));break;case\"enabled\":typeof s.enabled!=\"boolean\"&&console.error(At(Ct,s.name,'\"enabled\"','\"boolean\"','\"'+String(s.enabled)+'\"'));case\"phase\":It.indexOf(s.phase)<0&&console.error(At(Ct,s.name,'\"phase\"',\"either \"+It.join(\", \"),'\"'+String(s.phase)+'\"'));break;case\"fn\":typeof s.fn!=\"function\"&&console.error(At(Ct,s.name,'\"fn\"','\"function\"','\"'+String(s.fn)+'\"'));break;case\"effect\":typeof s.effect!=\"function\"&&console.error(At(Ct,s.name,'\"effect\"','\"function\"','\"'+String(s.fn)+'\"'));break;case\"requires\":Array.isArray(s.requires)||console.error(At(Ct,s.name,'\"requires\"','\"array\"','\"'+String(s.requires)+'\"'));break;case\"requiresIfExists\":Array.isArray(s.requiresIfExists)||console.error(At(Ct,s.name,'\"requiresIfExists\"','\"array\"','\"'+String(s.requiresIfExists)+'\"'));break;case\"options\":case\"data\":break;default:console.error('PopperJS: an invalid property has been provided to the \"'+s.name+'\" modifier, valid properties are '+Ze.map(function(_){return'\"'+_+'\"'}).join(\", \")+'; but \"'+b+'\" was provided.')}s.requires&&s.requires.forEach(function(_){d.find(function(T){return T.name===_})==null&&console.error(At(Hr,String(s.name),_,_))})})})}function Wr(d,s){var b=new Set;return d.filter(function(_){var T=s(_);if(!b.has(T))return b.add(T),!0})}function ot(d){return d.split(\"-\")[0]}function Ur(d){var s=d.reduce(function(b,_){var T=b[_.name];return b[_.name]=T?Object.assign({},T,_,{options:Object.assign({},T.options,_.options),data:Object.assign({},T.data,_.data)}):_,b},{});return Object.keys(s).map(function(b){return s[b]})}function ir(d){var s=r(d),b=y(d),_=s.visualViewport,T=b.clientWidth,F=b.clientHeight,U=0,H=0;return _&&(T=_.width,F=_.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(U=_.offsetLeft,H=_.offsetTop)),{width:T,height:F,x:U+m(d),y:H}}var gt=Math.max,ln=Math.min,Yt=Math.round;function or(d){var s,b=y(d),_=n(d),T=(s=d.ownerDocument)==null?void 0:s.body,F=gt(b.scrollWidth,b.clientWidth,T?T.scrollWidth:0,T?T.clientWidth:0),U=gt(b.scrollHeight,b.clientHeight,T?T.scrollHeight:0,T?T.clientHeight:0),H=-_.scrollLeft+m(d),G=-_.scrollTop;return O(T||b).direction===\"rtl\"&&(H+=gt(b.clientWidth,T?T.clientWidth:0)-F),{width:F,height:U,x:H,y:G}}function Nn(d,s){var b=s.getRootNode&&s.getRootNode();if(d.contains(s))return!0;if(b&&a(b)){var _=s;do{if(_&&d.isSameNode(_))return!0;_=_.parentNode||_.host}while(_)}return!1}function Xt(d){return Object.assign({},d,{left:d.x,top:d.y,right:d.x+d.width,bottom:d.y+d.height})}function ar(d){var s=t(d);return s.top=s.top+d.clientTop,s.left=s.left+d.clientLeft,s.bottom=s.top+d.clientHeight,s.right=s.left+d.clientWidth,s.width=d.clientWidth,s.height=d.clientHeight,s.x=s.left,s.y=s.top,s}function sr(d,s){return s===j?Xt(ir(d)):o(s)?ar(s):Xt(or(y(d)))}function yn(d){var s=A(I(d)),b=[\"absolute\",\"fixed\"].indexOf(O(d).position)>=0,_=b&&o(d)?J(d):d;return i(_)?s.filter(function(T){return i(T)&&Nn(T,_)&&u(T)!==\"body\"}):[]}function wn(d,s,b){var _=s===\"clippingParents\"?yn(d):[].concat(s),T=[].concat(_,[b]),F=T[0],U=T.reduce(function(H,G){var oe=sr(d,G);return H.top=gt(oe.top,H.top),H.right=ln(oe.right,H.right),H.bottom=ln(oe.bottom,H.bottom),H.left=gt(oe.left,H.left),H},sr(d,F));return U.width=U.right-U.left,U.height=U.bottom-U.top,U.x=U.left,U.y=U.top,U}function cn(d){return d.split(\"-\")[1]}function dt(d){return[\"top\",\"bottom\"].indexOf(d)>=0?\"x\":\"y\"}function lr(d){var s=d.reference,b=d.element,_=d.placement,T=_?ot(_):null,F=_?cn(_):null,U=s.x+s.width/2-b.width/2,H=s.y+s.height/2-b.height/2,G;switch(T){case V:G={x:U,y:s.y-b.height};break;case de:G={x:U,y:s.y+s.height};break;case X:G={x:s.x+s.width,y:H};break;case Q:G={x:s.x-b.width,y:H};break;default:G={x:s.x,y:s.y}}var oe=T?dt(T):null;if(oe!=null){var z=oe===\"y\"?\"height\":\"width\";switch(F){case h:G[oe]=G[oe]-(s[z]/2-b[z]/2);break;case v:G[oe]=G[oe]+(s[z]/2-b[z]/2);break}}return G}function cr(){return{top:0,right:0,bottom:0,left:0}}function fr(d){return Object.assign({},cr(),d)}function ur(d,s){return s.reduce(function(b,_){return b[_]=d,b},{})}function qt(d,s){s===void 0&&(s={});var b=s,_=b.placement,T=_===void 0?d.placement:_,F=b.boundary,U=F===void 0?p:F,H=b.rootBoundary,G=H===void 0?j:H,oe=b.elementContext,z=oe===void 0?P:oe,De=b.altBoundary,Fe=De===void 0?!1:De,Ce=b.padding,xe=Ce===void 0?0:Ce,Me=fr(typeof xe!=\"number\"?xe:ur(xe,l)),Se=z===P?R:P,Be=d.elements.reference,Re=d.rects.popper,He=d.elements[Fe?Se:z],ce=wn(i(He)?He:He.contextElement||y(d.elements.popper),U,G),Pe=t(Be),_e=lr({reference:Pe,element:Re,strategy:\"absolute\",placement:T}),ke=Xt(Object.assign({},Re,_e)),Le=z===P?ke:Pe,Ye={top:ce.top-Le.top+Me.top,bottom:Le.bottom-ce.bottom+Me.bottom,left:ce.left-Le.left+Me.left,right:Le.right-ce.right+Me.right},$e=d.modifiersData.offset;if(z===P&&$e){var Ue=$e[T];Object.keys(Ye).forEach(function(wt){var et=[X,de].indexOf(wt)>=0?1:-1,Ft=[V,de].indexOf(wt)>=0?\"y\":\"x\";Ye[wt]+=Ue[Ft]*et})}return Ye}var dr=\"Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.\",Vr=\"Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.\",xn={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function fn(){for(var d=arguments.length,s=new Array(d),b=0;b<d;b++)s[b]=arguments[b];return!s.some(function(_){return!(_&&typeof _.getBoundingClientRect==\"function\")})}function En(d){d===void 0&&(d={});var s=d,b=s.defaultModifiers,_=b===void 0?[]:b,T=s.defaultOptions,F=T===void 0?xn:T;return function(H,G,oe){oe===void 0&&(oe=F);var z={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},xn,F),modifiersData:{},elements:{reference:H,popper:G},attributes:{},styles:{}},De=[],Fe=!1,Ce={state:z,setOptions:function(Be){Me(),z.options=Object.assign({},F,z.options,Be),z.scrollParents={reference:i(H)?A(H):H.contextElement?A(H.contextElement):[],popper:A(G)};var Re=mt(Ur([].concat(_,z.options.modifiers)));z.orderedModifiers=Re.filter(function($e){return $e.enabled});var He=Wr([].concat(Re,z.options.modifiers),function($e){var Ue=$e.name;return Ue});if($r(He),ot(z.options.placement)===me){var ce=z.orderedModifiers.find(function($e){var Ue=$e.name;return Ue===\"flip\"});ce||console.error(['Popper: \"auto\" placements require the \"flip\" modifier be',\"present and enabled to work.\"].join(\" \"))}var Pe=O(G),_e=Pe.marginTop,ke=Pe.marginRight,Le=Pe.marginBottom,Ye=Pe.marginLeft;return[_e,ke,Le,Ye].some(function($e){return parseFloat($e)})&&console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding',\"between the popper and its reference element or boundary.\",\"To replicate margin, use the `offset` modifier, as well as\",\"the `padding` option in the `preventOverflow` and `flip`\",\"modifiers.\"].join(\" \")),xe(),Ce.update()},forceUpdate:function(){if(!Fe){var Be=z.elements,Re=Be.reference,He=Be.popper;if(!fn(Re,He)){console.error(dr);return}z.rects={reference:x(Re,J(He),z.options.strategy===\"fixed\"),popper:M(He)},z.reset=!1,z.placement=z.options.placement,z.orderedModifiers.forEach(function(Ue){return z.modifiersData[Ue.name]=Object.assign({},Ue.data)});for(var ce=0,Pe=0;Pe<z.orderedModifiers.length;Pe++){if(ce+=1,ce>100){console.error(Vr);break}if(z.reset===!0){z.reset=!1,Pe=-1;continue}var _e=z.orderedModifiers[Pe],ke=_e.fn,Le=_e.options,Ye=Le===void 0?{}:Le,$e=_e.name;typeof ke==\"function\"&&(z=ke({state:z,options:Ye,name:$e,instance:Ce})||z)}}},update:zt(function(){return new Promise(function(Se){Ce.forceUpdate(),Se(z)})}),destroy:function(){Me(),Fe=!0}};if(!fn(H,G))return console.error(dr),Ce;Ce.setOptions(oe).then(function(Se){!Fe&&oe.onFirstUpdate&&oe.onFirstUpdate(Se)});function xe(){z.orderedModifiers.forEach(function(Se){var Be=Se.name,Re=Se.options,He=Re===void 0?{}:Re,ce=Se.effect;if(typeof ce==\"function\"){var Pe=ce({state:z,name:Be,instance:Ce,options:He}),_e=function(){};De.push(Pe||_e)}})}function Me(){De.forEach(function(Se){return Se()}),De=[]}return Ce}}var On={passive:!0};function zr(d){var s=d.state,b=d.instance,_=d.options,T=_.scroll,F=T===void 0?!0:T,U=_.resize,H=U===void 0?!0:U,G=r(s.elements.popper),oe=[].concat(s.scrollParents.reference,s.scrollParents.popper);return F&&oe.forEach(function(z){z.addEventListener(\"scroll\",b.update,On)}),H&&G.addEventListener(\"resize\",b.update,On),function(){F&&oe.forEach(function(z){z.removeEventListener(\"scroll\",b.update,On)}),H&&G.removeEventListener(\"resize\",b.update,On)}}var jn={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:zr,data:{}};function Yr(d){var s=d.state,b=d.name;s.modifiersData[b]=lr({reference:s.rects.reference,element:s.rects.popper,strategy:\"absolute\",placement:s.placement})}var Bn={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:Yr,data:{}},Xr={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function qr(d){var s=d.x,b=d.y,_=window,T=_.devicePixelRatio||1;return{x:Yt(Yt(s*T)/T)||0,y:Yt(Yt(b*T)/T)||0}}function Hn(d){var s,b=d.popper,_=d.popperRect,T=d.placement,F=d.offsets,U=d.position,H=d.gpuAcceleration,G=d.adaptive,oe=d.roundOffsets,z=oe===!0?qr(F):typeof oe==\"function\"?oe(F):F,De=z.x,Fe=De===void 0?0:De,Ce=z.y,xe=Ce===void 0?0:Ce,Me=F.hasOwnProperty(\"x\"),Se=F.hasOwnProperty(\"y\"),Be=Q,Re=V,He=window;if(G){var ce=J(b),Pe=\"clientHeight\",_e=\"clientWidth\";ce===r(b)&&(ce=y(b),O(ce).position!==\"static\"&&(Pe=\"scrollHeight\",_e=\"scrollWidth\")),ce=ce,T===V&&(Re=de,xe-=ce[Pe]-_.height,xe*=H?1:-1),T===Q&&(Be=X,Fe-=ce[_e]-_.width,Fe*=H?1:-1)}var ke=Object.assign({position:U},G&&Xr);if(H){var Le;return Object.assign({},ke,(Le={},Le[Re]=Se?\"0\":\"\",Le[Be]=Me?\"0\":\"\",Le.transform=(He.devicePixelRatio||1)<2?\"translate(\"+Fe+\"px, \"+xe+\"px)\":\"translate3d(\"+Fe+\"px, \"+xe+\"px, 0)\",Le))}return Object.assign({},ke,(s={},s[Re]=Se?xe+\"px\":\"\",s[Be]=Me?Fe+\"px\":\"\",s.transform=\"\",s))}function g(d){var s=d.state,b=d.options,_=b.gpuAcceleration,T=_===void 0?!0:_,F=b.adaptive,U=F===void 0?!0:F,H=b.roundOffsets,G=H===void 0?!0:H,oe=O(s.elements.popper).transitionProperty||\"\";U&&[\"transform\",\"top\",\"right\",\"bottom\",\"left\"].some(function(De){return oe.indexOf(De)>=0})&&console.warn([\"Popper: Detected CSS transitions on at least one of the following\",'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".',`\n\n`,'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow',\"for smooth transitions, or remove these properties from the CSS\",\"transition declaration on the popper element if only transitioning\",\"opacity or background-color for example.\",`\n\n`,\"We recommend using the popper element as a wrapper around an inner\",\"element that can have any CSS property transitioned for animations.\"].join(\" \"));var z={placement:ot(s.placement),popper:s.elements.popper,popperRect:s.rects.popper,gpuAcceleration:T};s.modifiersData.popperOffsets!=null&&(s.styles.popper=Object.assign({},s.styles.popper,Hn(Object.assign({},z,{offsets:s.modifiersData.popperOffsets,position:s.options.strategy,adaptive:U,roundOffsets:G})))),s.modifiersData.arrow!=null&&(s.styles.arrow=Object.assign({},s.styles.arrow,Hn(Object.assign({},z,{offsets:s.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:G})))),s.attributes.popper=Object.assign({},s.attributes.popper,{\"data-popper-placement\":s.placement})}var w={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:g,data:{}};function C(d){var s=d.state;Object.keys(s.elements).forEach(function(b){var _=s.styles[b]||{},T=s.attributes[b]||{},F=s.elements[b];!o(F)||!u(F)||(Object.assign(F.style,_),Object.keys(T).forEach(function(U){var H=T[U];H===!1?F.removeAttribute(U):F.setAttribute(U,H===!0?\"\":H)}))})}function L(d){var s=d.state,b={popper:{position:s.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(s.elements.popper.style,b.popper),s.styles=b,s.elements.arrow&&Object.assign(s.elements.arrow.style,b.arrow),function(){Object.keys(s.elements).forEach(function(_){var T=s.elements[_],F=s.attributes[_]||{},U=Object.keys(s.styles.hasOwnProperty(_)?s.styles[_]:b[_]),H=U.reduce(function(G,oe){return G[oe]=\"\",G},{});!o(T)||!u(T)||(Object.assign(T.style,H),Object.keys(F).forEach(function(G){T.removeAttribute(G)}))})}}var q={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:C,effect:L,requires:[\"computeStyles\"]};function W(d,s,b){var _=ot(d),T=[Q,V].indexOf(_)>=0?-1:1,F=typeof b==\"function\"?b(Object.assign({},s,{placement:d})):b,U=F[0],H=F[1];return U=U||0,H=(H||0)*T,[Q,X].indexOf(_)>=0?{x:H,y:U}:{x:U,y:H}}function B(d){var s=d.state,b=d.options,_=d.name,T=b.offset,F=T===void 0?[0,0]:T,U=ze.reduce(function(z,De){return z[De]=W(De,s.rects,F),z},{}),H=U[s.placement],G=H.x,oe=H.y;s.modifiersData.popperOffsets!=null&&(s.modifiersData.popperOffsets.x+=G,s.modifiersData.popperOffsets.y+=oe),s.modifiersData[_]=U}var be={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:B},le={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function pe(d){return d.replace(/left|right|bottom|top/g,function(s){return le[s]})}var ye={start:\"end\",end:\"start\"};function Te(d){return d.replace(/start|end/g,function(s){return ye[s]})}function je(d,s){s===void 0&&(s={});var b=s,_=b.placement,T=b.boundary,F=b.rootBoundary,U=b.padding,H=b.flipVariations,G=b.allowedAutoPlacements,oe=G===void 0?ze:G,z=cn(_),De=z?H?Z:Z.filter(function(xe){return cn(xe)===z}):l,Fe=De.filter(function(xe){return oe.indexOf(xe)>=0});Fe.length===0&&(Fe=De,console.error([\"Popper: The `allowedAutoPlacements` option did not allow any\",\"placements. Ensure the `placement` option matches the variation\",\"of the allowed placements.\",'For example, \"auto\" cannot be used to allow \"bottom-start\".','Use \"auto-start\" instead.'].join(\" \")));var Ce=Fe.reduce(function(xe,Me){return xe[Me]=qt(d,{placement:Me,boundary:T,rootBoundary:F,padding:U})[ot(Me)],xe},{});return Object.keys(Ce).sort(function(xe,Me){return Ce[xe]-Ce[Me]})}function Ae(d){if(ot(d)===me)return[];var s=pe(d);return[Te(d),s,Te(s)]}function Ie(d){var s=d.state,b=d.options,_=d.name;if(!s.modifiersData[_]._skip){for(var T=b.mainAxis,F=T===void 0?!0:T,U=b.altAxis,H=U===void 0?!0:U,G=b.fallbackPlacements,oe=b.padding,z=b.boundary,De=b.rootBoundary,Fe=b.altBoundary,Ce=b.flipVariations,xe=Ce===void 0?!0:Ce,Me=b.allowedAutoPlacements,Se=s.options.placement,Be=ot(Se),Re=Be===Se,He=G||(Re||!xe?[pe(Se)]:Ae(Se)),ce=[Se].concat(He).reduce(function(te,ge){return te.concat(ot(ge)===me?je(s,{placement:ge,boundary:z,rootBoundary:De,padding:oe,flipVariations:xe,allowedAutoPlacements:Me}):ge)},[]),Pe=s.rects.reference,_e=s.rects.popper,ke=new Map,Le=!0,Ye=ce[0],$e=0;$e<ce.length;$e++){var Ue=ce[$e],wt=ot(Ue),et=cn(Ue)===h,Ft=[V,de].indexOf(wt)>=0,dn=Ft?\"width\":\"height\",Qt=qt(s,{placement:Ue,boundary:z,rootBoundary:De,altBoundary:Fe,padding:oe}),kt=Ft?et?X:Q:et?de:V;Pe[dn]>_e[dn]&&(kt=pe(kt));var $n=pe(kt),Zt=[];if(F&&Zt.push(Qt[wt]<=0),H&&Zt.push(Qt[kt]<=0,Qt[$n]<=0),Zt.every(function(te){return te})){Ye=Ue,Le=!1;break}ke.set(Ue,Zt)}if(Le)for(var Sn=xe?3:1,Wn=function(ge){var we=ce.find(function(Ke){var Je=ke.get(Ke);if(Je)return Je.slice(0,ge).every(function(Dt){return Dt})});if(we)return Ye=we,\"break\"},D=Sn;D>0;D--){var K=Wn(D);if(K===\"break\")break}s.placement!==Ye&&(s.modifiersData[_]._skip=!0,s.placement=Ye,s.reset=!0)}}var re={name:\"flip\",enabled:!0,phase:\"main\",fn:Ie,requiresIfExists:[\"offset\"],data:{_skip:!1}};function he(d){return d===\"x\"?\"y\":\"x\"}function ve(d,s,b){return gt(d,ln(s,b))}function ee(d){var s=d.state,b=d.options,_=d.name,T=b.mainAxis,F=T===void 0?!0:T,U=b.altAxis,H=U===void 0?!1:U,G=b.boundary,oe=b.rootBoundary,z=b.altBoundary,De=b.padding,Fe=b.tether,Ce=Fe===void 0?!0:Fe,xe=b.tetherOffset,Me=xe===void 0?0:xe,Se=qt(s,{boundary:G,rootBoundary:oe,padding:De,altBoundary:z}),Be=ot(s.placement),Re=cn(s.placement),He=!Re,ce=dt(Be),Pe=he(ce),_e=s.modifiersData.popperOffsets,ke=s.rects.reference,Le=s.rects.popper,Ye=typeof Me==\"function\"?Me(Object.assign({},s.rects,{placement:s.placement})):Me,$e={x:0,y:0};if(_e){if(F||H){var Ue=ce===\"y\"?V:Q,wt=ce===\"y\"?de:X,et=ce===\"y\"?\"height\":\"width\",Ft=_e[ce],dn=_e[ce]+Se[Ue],Qt=_e[ce]-Se[wt],kt=Ce?-Le[et]/2:0,$n=Re===h?ke[et]:Le[et],Zt=Re===h?-Le[et]:-ke[et],Sn=s.elements.arrow,Wn=Ce&&Sn?M(Sn):{width:0,height:0},D=s.modifiersData[\"arrow#persistent\"]?s.modifiersData[\"arrow#persistent\"].padding:cr(),K=D[Ue],te=D[wt],ge=ve(0,ke[et],Wn[et]),we=He?ke[et]/2-kt-ge-K-Ye:$n-ge-K-Ye,Ke=He?-ke[et]/2+kt+ge+te+Ye:Zt+ge+te+Ye,Je=s.elements.arrow&&J(s.elements.arrow),Dt=Je?ce===\"y\"?Je.clientTop||0:Je.clientLeft||0:0,Un=s.modifiersData.offset?s.modifiersData.offset[s.placement][ce]:0,_t=_e[ce]+we-Un-Dt,An=_e[ce]+Ke-Un;if(F){var pn=ve(Ce?ln(dn,_t):dn,Ft,Ce?gt(Qt,An):Qt);_e[ce]=pn,$e[ce]=pn-Ft}if(H){var en=ce===\"x\"?V:Q,Gr=ce===\"x\"?de:X,tn=_e[Pe],hn=tn+Se[en],Di=tn-Se[Gr],_i=ve(Ce?ln(hn,_t):hn,tn,Ce?gt(Di,An):Di);_e[Pe]=_i,$e[Pe]=_i-tn}}s.modifiersData[_]=$e}}var ie={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:ee,requiresIfExists:[\"offset\"]},E=function(s,b){return s=typeof s==\"function\"?s(Object.assign({},b.rects,{placement:b.placement})):s,fr(typeof s!=\"number\"?s:ur(s,l))};function Ge(d){var s,b=d.state,_=d.name,T=d.options,F=b.elements.arrow,U=b.modifiersData.popperOffsets,H=ot(b.placement),G=dt(H),oe=[Q,X].indexOf(H)>=0,z=oe?\"height\":\"width\";if(!(!F||!U)){var De=E(T.padding,b),Fe=M(F),Ce=G===\"y\"?V:Q,xe=G===\"y\"?de:X,Me=b.rects.reference[z]+b.rects.reference[G]-U[G]-b.rects.popper[z],Se=U[G]-b.rects.reference[G],Be=J(F),Re=Be?G===\"y\"?Be.clientHeight||0:Be.clientWidth||0:0,He=Me/2-Se/2,ce=De[Ce],Pe=Re-Fe[z]-De[xe],_e=Re/2-Fe[z]/2+He,ke=ve(ce,_e,Pe),Le=G;b.modifiersData[_]=(s={},s[Le]=ke,s.centerOffset=ke-_e,s)}}function fe(d){var s=d.state,b=d.options,_=b.element,T=_===void 0?\"[data-popper-arrow]\":_;if(T!=null&&!(typeof T==\"string\"&&(T=s.elements.popper.querySelector(T),!T))){if(o(T)||console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).',\"To use an SVG arrow, wrap it in an HTMLElement that will be used as\",\"the arrow.\"].join(\" \")),!Nn(s.elements.popper,T)){console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper',\"element.\"].join(\" \"));return}s.elements.arrow=T}}var Lt={name:\"arrow\",enabled:!0,phase:\"main\",fn:Ge,effect:fe,requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function bt(d,s,b){return b===void 0&&(b={x:0,y:0}),{top:d.top-s.height-b.y,right:d.right-s.width+b.x,bottom:d.bottom-s.height+b.y,left:d.left-s.width-b.x}}function Gt(d){return[V,X,de,Q].some(function(s){return d[s]>=0})}function Kt(d){var s=d.state,b=d.name,_=s.rects.reference,T=s.rects.popper,F=s.modifiersData.preventOverflow,U=qt(s,{elementContext:\"reference\"}),H=qt(s,{altBoundary:!0}),G=bt(U,_),oe=bt(H,T,F),z=Gt(G),De=Gt(oe);s.modifiersData[b]={referenceClippingOffsets:G,popperEscapeOffsets:oe,isReferenceHidden:z,hasPopperEscaped:De},s.attributes.popper=Object.assign({},s.attributes.popper,{\"data-popper-reference-hidden\":z,\"data-popper-escaped\":De})}var Jt={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:Kt},rt=[jn,Bn,w,q],lt=En({defaultModifiers:rt}),yt=[jn,Bn,w,q,be,re,ie,Lt,Jt],un=En({defaultModifiers:yt});e.applyStyles=q,e.arrow=Lt,e.computeStyles=w,e.createPopper=un,e.createPopperLite=lt,e.defaultModifiers=yt,e.detectOverflow=qt,e.eventListeners=jn,e.flip=re,e.hide=Jt,e.offset=be,e.popperGenerator=En,e.popperOffsets=Bn,e.preventOverflow=ie}),$o=Bo(e=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var t=_s(),r='<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>',n=\"tippy-box\",i=\"tippy-content\",o=\"tippy-backdrop\",a=\"tippy-arrow\",c=\"tippy-svg-arrow\",f={passive:!0,capture:!0};function u(g,w){return{}.hasOwnProperty.call(g,w)}function y(g,w,C){if(Array.isArray(g)){var L=g[w];return L??(Array.isArray(C)?C[w]:C)}return g}function m(g,w){var C={}.toString.call(g);return C.indexOf(\"[object\")===0&&C.indexOf(w+\"]\")>-1}function O(g,w){return typeof g==\"function\"?g.apply(void 0,w):g}function S(g,w){if(w===0)return g;var C;return function(L){clearTimeout(C),C=setTimeout(function(){g(L)},w)}}function x(g,w){var C=Object.assign({},g);return w.forEach(function(L){delete C[L]}),C}function M(g){return g.split(/\\s+/).filter(Boolean)}function I(g){return[].concat(g)}function $(g,w){g.indexOf(w)===-1&&g.push(w)}function A(g){return g.filter(function(w,C){return g.indexOf(w)===C})}function N(g){return g.split(\"-\")[0]}function Y(g){return[].slice.call(g)}function ne(g){return Object.keys(g).reduce(function(w,C){return g[C]!==void 0&&(w[C]=g[C]),w},{})}function J(){return document.createElement(\"div\")}function V(g){return[\"Element\",\"Fragment\"].some(function(w){return m(g,w)})}function de(g){return m(g,\"NodeList\")}function X(g){return m(g,\"MouseEvent\")}function Q(g){return!!(g&&g._tippy&&g._tippy.reference===g)}function me(g){return V(g)?[g]:de(g)?Y(g):Array.isArray(g)?g:Y(document.querySelectorAll(g))}function l(g,w){g.forEach(function(C){C&&(C.style.transitionDuration=w+\"ms\")})}function h(g,w){g.forEach(function(C){C&&C.setAttribute(\"data-state\",w)})}function v(g){var w,C=I(g),L=C[0];return!(L==null||(w=L.ownerDocument)==null)&&w.body?L.ownerDocument:document}function p(g,w){var C=w.clientX,L=w.clientY;return g.every(function(q){var W=q.popperRect,B=q.popperState,be=q.props,le=be.interactiveBorder,pe=N(B.placement),ye=B.modifiersData.offset;if(!ye)return!0;var Te=pe===\"bottom\"?ye.top.y:0,je=pe===\"top\"?ye.bottom.y:0,Ae=pe===\"right\"?ye.left.x:0,Ie=pe===\"left\"?ye.right.x:0,re=W.top-L+Te>le,he=L-W.bottom-je>le,ve=W.left-C+Ae>le,ee=C-W.right-Ie>le;return re||he||ve||ee})}function j(g,w,C){var L=w+\"EventListener\";[\"transitionend\",\"webkitTransitionEnd\"].forEach(function(q){g[L](q,C)})}var P={isTouch:!1},R=0;function Z(){P.isTouch||(P.isTouch=!0,window.performance&&document.addEventListener(\"mousemove\",ze))}function ze(){var g=performance.now();g-R<20&&(P.isTouch=!1,document.removeEventListener(\"mousemove\",ze)),R=g}function Rt(){var g=document.activeElement;if(Q(g)){var w=g._tippy;g.blur&&!w.state.isVisible&&g.blur()}}function Ut(){document.addEventListener(\"touchstart\",Z,f),window.addEventListener(\"blur\",Rt)}var Fr=typeof window<\"u\"&&typeof document<\"u\",kr=Fr?navigator.userAgent:\"\",Nr=/MSIE |Trident\\//.test(kr);function Vt(g){var w=g===\"destroy\"?\"n already-\":\" \";return[g+\"() was called on a\"+w+\"destroyed instance. This is a no-op but\",\"indicates a potential memory leak.\"].join(\" \")}function nr(g){var w=/[ \\t]{2,}/g,C=/^[ \\t]*/gm;return g.replace(w,\" \").replace(C,\"\").trim()}function jr(g){return nr(`\n  %ctippy.js\n\n  %c`+nr(g)+`\n\n  %c\\u{1F477}\\u200D This is a development-only message. It will be removed in production.\n  `)}function rr(g){return[jr(g),\"color: #00C584; font-size: 1.3em; font-weight: bold;\",\"line-height: 1.5\",\"color: #a6a095;\"]}var It;Br();function Br(){It=new Set}function mt(g,w){if(g&&!It.has(w)){var C;It.add(w),(C=console).warn.apply(C,rr(w))}}function zt(g,w){if(g&&!It.has(w)){var C;It.add(w),(C=console).error.apply(C,rr(w))}}function At(g){var w=!g,C=Object.prototype.toString.call(g)===\"[object Object]\"&&!g.addEventListener;zt(w,[\"tippy() was passed\",\"`\"+String(g)+\"`\",\"as its targets (first) argument. Valid types are: String, Element,\",\"Element[], or NodeList.\"].join(\" \")),zt(C,[\"tippy() was passed a plain object which is not supported as an argument\",\"for virtual positioning. Use props.getReferenceClientRect instead.\"].join(\" \"))}var Ct={animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},Hr={allowHTML:!1,animation:\"fade\",arrow:!0,content:\"\",inertia:!1,maxWidth:350,role:\"tooltip\",theme:\"\",zIndex:9999},Ze=Object.assign({appendTo:function(){return document.body},aria:{content:\"auto\",expanded:\"auto\"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:\"\",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:\"top\",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:\"mouseenter focus\",triggerTarget:null},Ct,{},Hr),$r=Object.keys(Ze),Wr=function(w){gt(w,[]);var C=Object.keys(w);C.forEach(function(L){Ze[L]=w[L]})};function ot(g){var w=g.plugins||[],C=w.reduce(function(L,q){var W=q.name,B=q.defaultValue;return W&&(L[W]=g[W]!==void 0?g[W]:B),L},{});return Object.assign({},g,{},C)}function Ur(g,w){var C=w?Object.keys(ot(Object.assign({},Ze,{plugins:w}))):$r,L=C.reduce(function(q,W){var B=(g.getAttribute(\"data-tippy-\"+W)||\"\").trim();if(!B)return q;if(W===\"content\")q[W]=B;else try{q[W]=JSON.parse(B)}catch{q[W]=B}return q},{});return L}function ir(g,w){var C=Object.assign({},w,{content:O(w.content,[g])},w.ignoreAttributes?{}:Ur(g,w.plugins));return C.aria=Object.assign({},Ze.aria,{},C.aria),C.aria={expanded:C.aria.expanded===\"auto\"?w.interactive:C.aria.expanded,content:C.aria.content===\"auto\"?w.interactive?null:\"describedby\":C.aria.content},C}function gt(g,w){g===void 0&&(g={}),w===void 0&&(w=[]);var C=Object.keys(g);C.forEach(function(L){var q=x(Ze,Object.keys(Ct)),W=!u(q,L);W&&(W=w.filter(function(B){return B.name===L}).length===0),mt(W,[\"`\"+L+\"`\",\"is not a valid prop. You may have spelled it incorrectly, or if it's\",\"a plugin, forgot to pass it in an array as props.plugins.\",`\n\n`,`All props: https://atomiks.github.io/tippyjs/v6/all-props/\n`,\"Plugins: https://atomiks.github.io/tippyjs/v6/plugins/\"].join(\" \"))})}var ln=function(){return\"innerHTML\"};function Yt(g,w){g[ln()]=w}function or(g){var w=J();return g===!0?w.className=a:(w.className=c,V(g)?w.appendChild(g):Yt(w,g)),w}function Nn(g,w){V(w.content)?(Yt(g,\"\"),g.appendChild(w.content)):typeof w.content!=\"function\"&&(w.allowHTML?Yt(g,w.content):g.textContent=w.content)}function Xt(g){var w=g.firstElementChild,C=Y(w.children);return{box:w,content:C.find(function(L){return L.classList.contains(i)}),arrow:C.find(function(L){return L.classList.contains(a)||L.classList.contains(c)}),backdrop:C.find(function(L){return L.classList.contains(o)})}}function ar(g){var w=J(),C=J();C.className=n,C.setAttribute(\"data-state\",\"hidden\"),C.setAttribute(\"tabindex\",\"-1\");var L=J();L.className=i,L.setAttribute(\"data-state\",\"hidden\"),Nn(L,g.props),w.appendChild(C),C.appendChild(L),q(g.props,g.props);function q(W,B){var be=Xt(w),le=be.box,pe=be.content,ye=be.arrow;B.theme?le.setAttribute(\"data-theme\",B.theme):le.removeAttribute(\"data-theme\"),typeof B.animation==\"string\"?le.setAttribute(\"data-animation\",B.animation):le.removeAttribute(\"data-animation\"),B.inertia?le.setAttribute(\"data-inertia\",\"\"):le.removeAttribute(\"data-inertia\"),le.style.maxWidth=typeof B.maxWidth==\"number\"?B.maxWidth+\"px\":B.maxWidth,B.role?le.setAttribute(\"role\",B.role):le.removeAttribute(\"role\"),(W.content!==B.content||W.allowHTML!==B.allowHTML)&&Nn(pe,g.props),B.arrow?ye?W.arrow!==B.arrow&&(le.removeChild(ye),le.appendChild(or(B.arrow))):le.appendChild(or(B.arrow)):ye&&le.removeChild(ye)}return{popper:w,onUpdate:q}}ar.$$tippy=!0;var sr=1,yn=[],wn=[];function cn(g,w){var C=ir(g,Object.assign({},Ze,{},ot(ne(w)))),L,q,W,B=!1,be=!1,le=!1,pe=!1,ye,Te,je,Ae=[],Ie=S(Re,C.interactiveDebounce),re,he=sr++,ve=null,ee=A(C.plugins),ie={isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},E={id:he,reference:g,popper:J(),popperInstance:ve,props:C,state:ie,plugins:ee,clearDelayTimeouts:Ft,setProps:dn,setContent:Qt,show:kt,hide:$n,hideWithInteractivity:Zt,enable:wt,disable:et,unmount:Sn,destroy:Wn};if(!C.render)return zt(!0,\"render() function has not been supplied.\"),E;var Ge=C.render(E),fe=Ge.popper,Lt=Ge.onUpdate;fe.setAttribute(\"data-tippy-root\",\"\"),fe.id=\"tippy-\"+E.id,E.popper=fe,g._tippy=E,fe._tippy=E;var bt=ee.map(function(D){return D.fn(E)}),Gt=g.hasAttribute(\"aria-expanded\");return Me(),T(),s(),b(\"onCreate\",[E]),C.showOnCreate&&$e(),fe.addEventListener(\"mouseenter\",function(){E.props.interactive&&E.state.isVisible&&E.clearDelayTimeouts()}),fe.addEventListener(\"mouseleave\",function(D){E.props.interactive&&E.props.trigger.indexOf(\"mouseenter\")>=0&&(yt().addEventListener(\"mousemove\",Ie),Ie(D))}),E;function Kt(){var D=E.props.touch;return Array.isArray(D)?D:[D,0]}function Jt(){return Kt()[0]===\"hold\"}function rt(){var D;return!!((D=E.props.render)!=null&&D.$$tippy)}function lt(){return re||g}function yt(){var D=lt().parentNode;return D?v(D):document}function un(){return Xt(fe)}function d(D){return E.state.isMounted&&!E.state.isVisible||P.isTouch||ye&&ye.type===\"focus\"?0:y(E.props.delay,D?0:1,Ze.delay)}function s(){fe.style.pointerEvents=E.props.interactive&&E.state.isVisible?\"\":\"none\",fe.style.zIndex=\"\"+E.props.zIndex}function b(D,K,te){if(te===void 0&&(te=!0),bt.forEach(function(we){we[D]&&we[D].apply(void 0,K)}),te){var ge;(ge=E.props)[D].apply(ge,K)}}function _(){var D=E.props.aria;if(D.content){var K=\"aria-\"+D.content,te=fe.id,ge=I(E.props.triggerTarget||g);ge.forEach(function(we){var Ke=we.getAttribute(K);if(E.state.isVisible)we.setAttribute(K,Ke?Ke+\" \"+te:te);else{var Je=Ke&&Ke.replace(te,\"\").trim();Je?we.setAttribute(K,Je):we.removeAttribute(K)}})}}function T(){if(!(Gt||!E.props.aria.expanded)){var D=I(E.props.triggerTarget||g);D.forEach(function(K){E.props.interactive?K.setAttribute(\"aria-expanded\",E.state.isVisible&&K===lt()?\"true\":\"false\"):K.removeAttribute(\"aria-expanded\")})}}function F(){yt().removeEventListener(\"mousemove\",Ie),yn=yn.filter(function(D){return D!==Ie})}function U(D){if(!(P.isTouch&&(le||D.type===\"mousedown\"))&&!(E.props.interactive&&fe.contains(D.target))){if(lt().contains(D.target)){if(P.isTouch||E.state.isVisible&&E.props.trigger.indexOf(\"click\")>=0)return}else b(\"onClickOutside\",[E,D]);E.props.hideOnClick===!0&&(E.clearDelayTimeouts(),E.hide(),be=!0,setTimeout(function(){be=!1}),E.state.isMounted||z())}}function H(){le=!0}function G(){le=!1}function oe(){var D=yt();D.addEventListener(\"mousedown\",U,!0),D.addEventListener(\"touchend\",U,f),D.addEventListener(\"touchstart\",G,f),D.addEventListener(\"touchmove\",H,f)}function z(){var D=yt();D.removeEventListener(\"mousedown\",U,!0),D.removeEventListener(\"touchend\",U,f),D.removeEventListener(\"touchstart\",G,f),D.removeEventListener(\"touchmove\",H,f)}function De(D,K){Ce(D,function(){!E.state.isVisible&&fe.parentNode&&fe.parentNode.contains(fe)&&K()})}function Fe(D,K){Ce(D,K)}function Ce(D,K){var te=un().box;function ge(we){we.target===te&&(j(te,\"remove\",ge),K())}if(D===0)return K();j(te,\"remove\",Te),j(te,\"add\",ge),Te=ge}function xe(D,K,te){te===void 0&&(te=!1);var ge=I(E.props.triggerTarget||g);ge.forEach(function(we){we.addEventListener(D,K,te),Ae.push({node:we,eventType:D,handler:K,options:te})})}function Me(){Jt()&&(xe(\"touchstart\",Be,{passive:!0}),xe(\"touchend\",He,{passive:!0})),M(E.props.trigger).forEach(function(D){if(D!==\"manual\")switch(xe(D,Be),D){case\"mouseenter\":xe(\"mouseleave\",He);break;case\"focus\":xe(Nr?\"focusout\":\"blur\",ce);break;case\"focusin\":xe(\"focusout\",ce);break}})}function Se(){Ae.forEach(function(D){var K=D.node,te=D.eventType,ge=D.handler,we=D.options;K.removeEventListener(te,ge,we)}),Ae=[]}function Be(D){var K,te=!1;if(!(!E.state.isEnabled||Pe(D)||be)){var ge=((K=ye)==null?void 0:K.type)===\"focus\";ye=D,re=D.currentTarget,T(),!E.state.isVisible&&X(D)&&yn.forEach(function(we){return we(D)}),D.type===\"click\"&&(E.props.trigger.indexOf(\"mouseenter\")<0||B)&&E.props.hideOnClick!==!1&&E.state.isVisible?te=!0:$e(D),D.type===\"click\"&&(B=!te),te&&!ge&&Ue(D)}}function Re(D){var K=D.target,te=lt().contains(K)||fe.contains(K);if(!(D.type===\"mousemove\"&&te)){var ge=Ye().concat(fe).map(function(we){var Ke,Je=we._tippy,Dt=(Ke=Je.popperInstance)==null?void 0:Ke.state;return Dt?{popperRect:we.getBoundingClientRect(),popperState:Dt,props:C}:null}).filter(Boolean);p(ge,D)&&(F(),Ue(D))}}function He(D){var K=Pe(D)||E.props.trigger.indexOf(\"click\")>=0&&B;if(!K){if(E.props.interactive){E.hideWithInteractivity(D);return}Ue(D)}}function ce(D){E.props.trigger.indexOf(\"focusin\")<0&&D.target!==lt()||E.props.interactive&&D.relatedTarget&&fe.contains(D.relatedTarget)||Ue(D)}function Pe(D){return P.isTouch?Jt()!==D.type.indexOf(\"touch\")>=0:!1}function _e(){ke();var D=E.props,K=D.popperOptions,te=D.placement,ge=D.offset,we=D.getReferenceClientRect,Ke=D.moveTransition,Je=rt()?Xt(fe).arrow:null,Dt=we?{getBoundingClientRect:we,contextElement:we.contextElement||lt()}:g,Un={name:\"$$tippy\",enabled:!0,phase:\"beforeWrite\",requires:[\"computeStyles\"],fn:function(pn){var en=pn.state;if(rt()){var Gr=un(),tn=Gr.box;[\"placement\",\"reference-hidden\",\"escaped\"].forEach(function(hn){hn===\"placement\"?tn.setAttribute(\"data-placement\",en.placement):en.attributes.popper[\"data-popper-\"+hn]?tn.setAttribute(\"data-\"+hn,\"\"):tn.removeAttribute(\"data-\"+hn)}),en.attributes.popper={}}}},_t=[{name:\"offset\",options:{offset:ge}},{name:\"preventOverflow\",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:\"flip\",options:{padding:5}},{name:\"computeStyles\",options:{adaptive:!Ke}},Un];rt()&&Je&&_t.push({name:\"arrow\",options:{element:Je,padding:3}}),_t.push.apply(_t,K?.modifiers||[]),E.popperInstance=t.createPopper(Dt,fe,Object.assign({},K,{placement:te,onFirstUpdate:je,modifiers:_t}))}function ke(){E.popperInstance&&(E.popperInstance.destroy(),E.popperInstance=null)}function Le(){var D=E.props.appendTo,K,te=lt();E.props.interactive&&D===Ze.appendTo||D===\"parent\"?K=te.parentNode:K=O(D,[te]),K.contains(fe)||K.appendChild(fe),_e(),mt(E.props.interactive&&D===Ze.appendTo&&te.nextElementSibling!==fe,[\"Interactive tippy element may not be accessible via keyboard\",\"navigation because it is not directly after the reference element\",\"in the DOM source order.\",`\n\n`,\"Using a wrapper <div> or <span> tag around the reference element\",\"solves this by creating a new parentNode context.\",`\n\n`,\"Specifying `appendTo: document.body` silences this warning, but it\",\"assumes you are using a focus management solution to handle\",\"keyboard navigation.\",`\n\n`,\"See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity\"].join(\" \"))}function Ye(){return Y(fe.querySelectorAll(\"[data-tippy-root]\"))}function $e(D){E.clearDelayTimeouts(),D&&b(\"onTrigger\",[E,D]),oe();var K=d(!0),te=Kt(),ge=te[0],we=te[1];P.isTouch&&ge===\"hold\"&&we&&(K=we),K?L=setTimeout(function(){E.show()},K):E.show()}function Ue(D){if(E.clearDelayTimeouts(),b(\"onUntrigger\",[E,D]),!E.state.isVisible){z();return}if(!(E.props.trigger.indexOf(\"mouseenter\")>=0&&E.props.trigger.indexOf(\"click\")>=0&&[\"mouseleave\",\"mousemove\"].indexOf(D.type)>=0&&B)){var K=d(!1);K?q=setTimeout(function(){E.state.isVisible&&E.hide()},K):W=requestAnimationFrame(function(){E.hide()})}}function wt(){E.state.isEnabled=!0}function et(){E.hide(),E.state.isEnabled=!1}function Ft(){clearTimeout(L),clearTimeout(q),cancelAnimationFrame(W)}function dn(D){if(mt(E.state.isDestroyed,Vt(\"setProps\")),!E.state.isDestroyed){b(\"onBeforeUpdate\",[E,D]),Se();var K=E.props,te=ir(g,Object.assign({},E.props,{},D,{ignoreAttributes:!0}));E.props=te,Me(),K.interactiveDebounce!==te.interactiveDebounce&&(F(),Ie=S(Re,te.interactiveDebounce)),K.triggerTarget&&!te.triggerTarget?I(K.triggerTarget).forEach(function(ge){ge.removeAttribute(\"aria-expanded\")}):te.triggerTarget&&g.removeAttribute(\"aria-expanded\"),T(),s(),Lt&&Lt(K,te),E.popperInstance&&(_e(),Ye().forEach(function(ge){requestAnimationFrame(ge._tippy.popperInstance.forceUpdate)})),b(\"onAfterUpdate\",[E,D])}}function Qt(D){E.setProps({content:D})}function kt(){mt(E.state.isDestroyed,Vt(\"show\"));var D=E.state.isVisible,K=E.state.isDestroyed,te=!E.state.isEnabled,ge=P.isTouch&&!E.props.touch,we=y(E.props.duration,0,Ze.duration);if(!(D||K||te||ge)&&!lt().hasAttribute(\"disabled\")&&(b(\"onShow\",[E],!1),E.props.onShow(E)!==!1)){if(E.state.isVisible=!0,rt()&&(fe.style.visibility=\"visible\"),s(),oe(),E.state.isMounted||(fe.style.transition=\"none\"),rt()){var Ke=un(),Je=Ke.box,Dt=Ke.content;l([Je,Dt],0)}je=function(){var _t;if(!(!E.state.isVisible||pe)){if(pe=!0,fe.offsetHeight,fe.style.transition=E.props.moveTransition,rt()&&E.props.animation){var An=un(),pn=An.box,en=An.content;l([pn,en],we),h([pn,en],\"visible\")}_(),T(),$(wn,E),(_t=E.popperInstance)==null||_t.forceUpdate(),E.state.isMounted=!0,b(\"onMount\",[E]),E.props.animation&&rt()&&Fe(we,function(){E.state.isShown=!0,b(\"onShown\",[E])})}},Le()}}function $n(){mt(E.state.isDestroyed,Vt(\"hide\"));var D=!E.state.isVisible,K=E.state.isDestroyed,te=!E.state.isEnabled,ge=y(E.props.duration,1,Ze.duration);if(!(D||K||te)&&(b(\"onHide\",[E],!1),E.props.onHide(E)!==!1)){if(E.state.isVisible=!1,E.state.isShown=!1,pe=!1,B=!1,rt()&&(fe.style.visibility=\"hidden\"),F(),z(),s(),rt()){var we=un(),Ke=we.box,Je=we.content;E.props.animation&&(l([Ke,Je],ge),h([Ke,Je],\"hidden\"))}_(),T(),E.props.animation?rt()&&De(ge,E.unmount):E.unmount()}}function Zt(D){mt(E.state.isDestroyed,Vt(\"hideWithInteractivity\")),yt().addEventListener(\"mousemove\",Ie),$(yn,Ie),Ie(D)}function Sn(){mt(E.state.isDestroyed,Vt(\"unmount\")),E.state.isVisible&&E.hide(),E.state.isMounted&&(ke(),Ye().forEach(function(D){D._tippy.unmount()}),fe.parentNode&&fe.parentNode.removeChild(fe),wn=wn.filter(function(D){return D!==E}),E.state.isMounted=!1,b(\"onHidden\",[E]))}function Wn(){mt(E.state.isDestroyed,Vt(\"destroy\")),!E.state.isDestroyed&&(E.clearDelayTimeouts(),E.unmount(),Se(),delete g._tippy,E.state.isDestroyed=!0,b(\"onDestroy\",[E]))}}function dt(g,w){w===void 0&&(w={});var C=Ze.plugins.concat(w.plugins||[]);At(g),gt(w,C),Ut();var L=Object.assign({},w,{plugins:C}),q=me(g),W=V(L.content),B=q.length>1;mt(W&&B,[\"tippy() was passed an Element as the `content` prop, but more than\",\"one tippy instance was created by this invocation. This means the\",\"content element will only be appended to the last tippy instance.\",`\n\n`,\"Instead, pass the .innerHTML of the element, or use a function that\",\"returns a cloned version of the element instead.\",`\n\n`,`1) content: element.innerHTML\n`,\"2) content: () => element.cloneNode(true)\"].join(\" \"));var be=q.reduce(function(le,pe){var ye=pe&&cn(pe,L);return ye&&le.push(ye),le},[]);return V(g)?be[0]:be}dt.defaultProps=Ze,dt.setDefaultProps=Wr,dt.currentInput=P;var lr=function(w){var C=w===void 0?{}:w,L=C.exclude,q=C.duration;wn.forEach(function(W){var B=!1;if(L&&(B=Q(L)?W.reference===L:W.popper===L.popper),!B){var be=W.props.duration;W.setProps({duration:q}),W.hide(),W.state.isDestroyed||W.setProps({duration:be})}})},cr=Object.assign({},t.applyStyles,{effect:function(w){var C=w.state,L={popper:{position:C.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};Object.assign(C.elements.popper.style,L.popper),C.styles=L,C.elements.arrow&&Object.assign(C.elements.arrow.style,L.arrow)}}),fr=function(w,C){var L;C===void 0&&(C={}),zt(!Array.isArray(w),[\"The first argument passed to createSingleton() must be an array of\",\"tippy instances. The passed value was\",String(w)].join(\" \"));var q=w,W=[],B,be=C.overrides,le=[],pe=!1;function ye(){W=q.map(function(ee){return ee.reference})}function Te(ee){q.forEach(function(ie){ee?ie.enable():ie.disable()})}function je(ee){return q.map(function(ie){var E=ie.setProps;return ie.setProps=function(Ge){E(Ge),ie.reference===B&&ee.setProps(Ge)},function(){ie.setProps=E}})}function Ae(ee,ie){var E=W.indexOf(ie);if(ie!==B){B=ie;var Ge=(be||[]).concat(\"content\").reduce(function(fe,Lt){return fe[Lt]=q[E].props[Lt],fe},{});ee.setProps(Object.assign({},Ge,{getReferenceClientRect:typeof Ge.getReferenceClientRect==\"function\"?Ge.getReferenceClientRect:function(){return ie.getBoundingClientRect()}}))}}Te(!1),ye();var Ie={fn:function(){return{onDestroy:function(){Te(!0)},onHidden:function(){B=null},onClickOutside:function(E){E.props.showOnCreate&&!pe&&(pe=!0,B=null)},onShow:function(E){E.props.showOnCreate&&!pe&&(pe=!0,Ae(E,W[0]))},onTrigger:function(E,Ge){Ae(E,Ge.currentTarget)}}}},re=dt(J(),Object.assign({},x(C,[\"overrides\"]),{plugins:[Ie].concat(C.plugins||[]),triggerTarget:W,popperOptions:Object.assign({},C.popperOptions,{modifiers:[].concat(((L=C.popperOptions)==null?void 0:L.modifiers)||[],[cr])})})),he=re.show;re.show=function(ee){if(he(),!B&&ee==null)return Ae(re,W[0]);if(!(B&&ee==null)){if(typeof ee==\"number\")return W[ee]&&Ae(re,W[ee]);if(q.includes(ee)){var ie=ee.reference;return Ae(re,ie)}if(W.includes(ee))return Ae(re,ee)}},re.showNext=function(){var ee=W[0];if(!B)return re.show(0);var ie=W.indexOf(B);re.show(W[ie+1]||ee)},re.showPrevious=function(){var ee=W[W.length-1];if(!B)return re.show(ee);var ie=W.indexOf(B),E=W[ie-1]||ee;re.show(E)};var ve=re.setProps;return re.setProps=function(ee){be=ee.overrides||be,ve(ee)},re.setInstances=function(ee){Te(!0),le.forEach(function(ie){return ie()}),q=ee,Te(!1),ye(),je(re),re.setProps({triggerTarget:W})},le=je(re),re},ur={mouseover:\"mouseenter\",focusin:\"focus\",click:\"click\"};function qt(g,w){zt(!(w&&w.target),[\"You must specity a `target` prop indicating a CSS selector string matching\",\"the target elements that should receive a tippy.\"].join(\" \"));var C=[],L=[],q=!1,W=w.target,B=x(w,[\"target\"]),be=Object.assign({},B,{trigger:\"manual\",touch:!1}),le=Object.assign({},B,{showOnCreate:!0}),pe=dt(g,be),ye=I(pe);function Te(he){if(!(!he.target||q)){var ve=he.target.closest(W);if(ve){var ee=ve.getAttribute(\"data-tippy-trigger\")||w.trigger||Ze.trigger;if(!ve._tippy&&!(he.type===\"touchstart\"&&typeof le.touch==\"boolean\")&&!(he.type!==\"touchstart\"&&ee.indexOf(ur[he.type])<0)){var ie=dt(ve,le);ie&&(L=L.concat(ie))}}}}function je(he,ve,ee,ie){ie===void 0&&(ie=!1),he.addEventListener(ve,ee,ie),C.push({node:he,eventType:ve,handler:ee,options:ie})}function Ae(he){var ve=he.reference;je(ve,\"touchstart\",Te,f),je(ve,\"mouseover\",Te),je(ve,\"focusin\",Te),je(ve,\"click\",Te)}function Ie(){C.forEach(function(he){var ve=he.node,ee=he.eventType,ie=he.handler,E=he.options;ve.removeEventListener(ee,ie,E)}),C=[]}function re(he){var ve=he.destroy,ee=he.enable,ie=he.disable;he.destroy=function(E){E===void 0&&(E=!0),E&&L.forEach(function(Ge){Ge.destroy()}),L=[],Ie(),ve()},he.enable=function(){ee(),L.forEach(function(E){return E.enable()}),q=!1},he.disable=function(){ie(),L.forEach(function(E){return E.disable()}),q=!0},Ae(he)}return ye.forEach(re),pe}var dr={name:\"animateFill\",defaultValue:!1,fn:function(w){var C;if(!((C=w.props.render)!=null&&C.$$tippy))return zt(w.props.animateFill,\"The `animateFill` plugin requires the default render function.\"),{};var L=Xt(w.popper),q=L.box,W=L.content,B=w.props.animateFill?Vr():null;return{onCreate:function(){B&&(q.insertBefore(B,q.firstElementChild),q.setAttribute(\"data-animatefill\",\"\"),q.style.overflow=\"hidden\",w.setProps({arrow:!1,animation:\"shift-away\"}))},onMount:function(){if(B){var le=q.style.transitionDuration,pe=Number(le.replace(\"ms\",\"\"));W.style.transitionDelay=Math.round(pe/10)+\"ms\",B.style.transitionDuration=le,h([B],\"visible\")}},onShow:function(){B&&(B.style.transitionDuration=\"0ms\")},onHide:function(){B&&h([B],\"hidden\")}}}};function Vr(){var g=J();return g.className=o,h([g],\"hidden\"),g}var xn={clientX:0,clientY:0},fn=[];function En(g){var w=g.clientX,C=g.clientY;xn={clientX:w,clientY:C}}function On(g){g.addEventListener(\"mousemove\",En)}function zr(g){g.removeEventListener(\"mousemove\",En)}var jn={name:\"followCursor\",defaultValue:!1,fn:function(w){var C=w.reference,L=v(w.props.triggerTarget||C),q=!1,W=!1,B=!0,be=w.props;function le(){return w.props.followCursor===\"initial\"&&w.state.isVisible}function pe(){L.addEventListener(\"mousemove\",je)}function ye(){L.removeEventListener(\"mousemove\",je)}function Te(){q=!0,w.setProps({getReferenceClientRect:null}),q=!1}function je(re){var he=re.target?C.contains(re.target):!0,ve=w.props.followCursor,ee=re.clientX,ie=re.clientY,E=C.getBoundingClientRect(),Ge=ee-E.left,fe=ie-E.top;(he||!w.props.interactive)&&w.setProps({getReferenceClientRect:function(){var bt=C.getBoundingClientRect(),Gt=ee,Kt=ie;ve===\"initial\"&&(Gt=bt.left+Ge,Kt=bt.top+fe);var Jt=ve===\"horizontal\"?bt.top:Kt,rt=ve===\"vertical\"?bt.right:Gt,lt=ve===\"horizontal\"?bt.bottom:Kt,yt=ve===\"vertical\"?bt.left:Gt;return{width:rt-yt,height:lt-Jt,top:Jt,right:rt,bottom:lt,left:yt}}})}function Ae(){w.props.followCursor&&(fn.push({instance:w,doc:L}),On(L))}function Ie(){fn=fn.filter(function(re){return re.instance!==w}),fn.filter(function(re){return re.doc===L}).length===0&&zr(L)}return{onCreate:Ae,onDestroy:Ie,onBeforeUpdate:function(){be=w.props},onAfterUpdate:function(he,ve){var ee=ve.followCursor;q||ee!==void 0&&be.followCursor!==ee&&(Ie(),ee?(Ae(),w.state.isMounted&&!W&&!le()&&pe()):(ye(),Te()))},onMount:function(){w.props.followCursor&&!W&&(B&&(je(xn),B=!1),le()||pe())},onTrigger:function(he,ve){X(ve)&&(xn={clientX:ve.clientX,clientY:ve.clientY}),W=ve.type===\"focus\"},onHidden:function(){w.props.followCursor&&(Te(),ye(),B=!0)}}}};function Yr(g,w){var C;return{popperOptions:Object.assign({},g.popperOptions,{modifiers:[].concat((((C=g.popperOptions)==null?void 0:C.modifiers)||[]).filter(function(L){var q=L.name;return q!==w.name}),[w])})}}var Bn={name:\"inlinePositioning\",defaultValue:!1,fn:function(w){var C=w.reference;function L(){return!!w.props.inlinePositioning}var q,W=-1,B=!1,be={name:\"tippyInlinePositioning\",enabled:!0,phase:\"afterWrite\",fn:function(je){var Ae=je.state;L()&&(q!==Ae.placement&&w.setProps({getReferenceClientRect:function(){return le(Ae.placement)}}),q=Ae.placement)}};function le(Te){return Xr(N(Te),C.getBoundingClientRect(),Y(C.getClientRects()),W)}function pe(Te){B=!0,w.setProps(Te),B=!1}function ye(){B||pe(Yr(w.props,be))}return{onCreate:ye,onAfterUpdate:ye,onTrigger:function(je,Ae){if(X(Ae)){var Ie=Y(w.reference.getClientRects()),re=Ie.find(function(he){return he.left-2<=Ae.clientX&&he.right+2>=Ae.clientX&&he.top-2<=Ae.clientY&&he.bottom+2>=Ae.clientY});W=Ie.indexOf(re)}},onUntrigger:function(){W=-1}}}};function Xr(g,w,C,L){if(C.length<2||g===null)return w;if(C.length===2&&L>=0&&C[0].left>C[1].right)return C[L]||w;switch(g){case\"top\":case\"bottom\":{var q=C[0],W=C[C.length-1],B=g===\"top\",be=q.top,le=W.bottom,pe=B?q.left:W.left,ye=B?q.right:W.right,Te=ye-pe,je=le-be;return{top:be,bottom:le,left:pe,right:ye,width:Te,height:je}}case\"left\":case\"right\":{var Ae=Math.min.apply(Math,C.map(function(fe){return fe.left})),Ie=Math.max.apply(Math,C.map(function(fe){return fe.right})),re=C.filter(function(fe){return g===\"left\"?fe.left===Ae:fe.right===Ie}),he=re[0].top,ve=re[re.length-1].bottom,ee=Ae,ie=Ie,E=ie-ee,Ge=ve-he;return{top:he,bottom:ve,left:ee,right:ie,width:E,height:Ge}}default:return w}}var qr={name:\"sticky\",defaultValue:!1,fn:function(w){var C=w.reference,L=w.popper;function q(){return w.popperInstance?w.popperInstance.state.elements.reference:C}function W(pe){return w.props.sticky===!0||w.props.sticky===pe}var B=null,be=null;function le(){var pe=W(\"reference\")?q().getBoundingClientRect():null,ye=W(\"popper\")?L.getBoundingClientRect():null;(pe&&Hn(B,pe)||ye&&Hn(be,ye))&&w.popperInstance&&w.popperInstance.update(),B=pe,be=ye,w.state.isMounted&&requestAnimationFrame(le)}return{onMount:function(){w.props.sticky&&le()}}}};function Hn(g,w){return g&&w?g.top!==w.top||g.right!==w.right||g.bottom!==w.bottom||g.left!==w.left:!0}dt.setDefaultProps({render:ar}),e.animateFill=dr,e.createSingleton=fr,e.default=dt,e.delegate=qt,e.followCursor=jn,e.hideAll=lr,e.inlinePositioning=Bn,e.roundArrow=r,e.sticky=qr}),Si=Ho($o()),Ts=Ho($o()),Ps=e=>{let t={plugins:[]},r=i=>e[e.indexOf(i)+1];if(e.includes(\"animation\")&&(t.animation=r(\"animation\")),e.includes(\"duration\")&&(t.duration=parseInt(r(\"duration\"))),e.includes(\"delay\")){let i=r(\"delay\");t.delay=i.includes(\"-\")?i.split(\"-\").map(o=>parseInt(o)):parseInt(i)}if(e.includes(\"cursor\")){t.plugins.push(Ts.followCursor);let i=r(\"cursor\");[\"x\",\"initial\"].includes(i)?t.followCursor=i===\"x\"?\"horizontal\":\"initial\":t.followCursor=!0}e.includes(\"on\")&&(t.trigger=r(\"on\")),e.includes(\"arrowless\")&&(t.arrow=!1),e.includes(\"html\")&&(t.allowHTML=!0),e.includes(\"interactive\")&&(t.interactive=!0),e.includes(\"border\")&&t.interactive&&(t.interactiveBorder=parseInt(r(\"border\"))),e.includes(\"debounce\")&&t.interactive&&(t.interactiveDebounce=parseInt(r(\"debounce\"))),e.includes(\"max-width\")&&(t.maxWidth=parseInt(r(\"max-width\"))),e.includes(\"theme\")&&(t.theme=r(\"theme\")),e.includes(\"placement\")&&(t.placement=r(\"placement\"));let n={};return e.includes(\"no-flip\")&&(n.modifiers||(n.modifiers=[]),n.modifiers.push({name:\"flip\",enabled:!1})),t.popperOptions=n,t};function Ai(e){e.magic(\"tooltip\",t=>(r,n={})=>{let i=n.timeout;delete n.timeout;let o=(0,Si.default)(t,{content:r,trigger:\"manual\",...n});o.show(),setTimeout(()=>{o.hide(),setTimeout(()=>o.destroy(),n.duration||300)},i||2e3)}),e.directive(\"tooltip\",(t,{modifiers:r,expression:n},{evaluateLater:i,effect:o,cleanup:a})=>{let c=r.length>0?Ps(r):{};t.__x_tippy||(t.__x_tippy=(0,Si.default)(t,c)),a(()=>{t.__x_tippy&&(t.__x_tippy.destroy(),delete t.__x_tippy)});let f=()=>t.__x_tippy.enable(),u=()=>t.__x_tippy.disable(),y=m=>{m?(f(),t.__x_tippy.setContent(m)):u()};if(r.includes(\"raw\"))y(n);else{let m=i(n);o(()=>{m(O=>{typeof O==\"object\"?(t.__x_tippy.setProps(O),f()):y(O)})})}})}Ai.defaultProps=e=>(Si.default.setDefaultProps(e),Ai);var Ms=Ai,Wo=Ms;var Uo=()=>({toggle(e){this.$refs.panel?.toggle(e)},open(e){this.$refs.panel?.open(e)},close(e){this.$refs.panel?.close(e)}});var Vo=()=>({form:null,isProcessing:!1,processingMessage:null,init(){let e=this.$el.closest(\"form\");e?.addEventListener(\"form-processing-started\",t=>{this.isProcessing=!0,this.processingMessage=t.detail.message}),e?.addEventListener(\"form-processing-finished\",()=>{this.isProcessing=!1})}});var zo=({id:e})=>({isOpen:!1,isWindowVisible:!1,livewire:null,textSelectionClosePreventionMouseDownHandler:null,textSelectionClosePreventionMouseUpHandler:null,textSelectionClosePreventionClickHandler:null,init(){this.$nextTick(()=>{this.isWindowVisible=this.isOpen,this.setUpTextSelectionClosePrevention(),this.$watch(\"isOpen\",()=>this.isWindowVisible=this.isOpen)})},setUpTextSelectionClosePrevention(){let t=\".fi-modal-window\",r=\".fi-modal-close-overlay\",i=!1,o=0;this.textSelectionClosePreventionClickHandler=c=>{c.stopPropagation(),c.preventDefault(),document.removeEventListener(\"click\",this.textSelectionClosePreventionClickHandler,!0)};let a=c=>!c.target.closest(t)&&(c.target.closest(r)||c.target.closest(\"body\"));this.textSelectionClosePreventionMouseDownHandler=c=>{o=Date.now(),i=!!c.target.closest(t)},this.textSelectionClosePreventionMouseUpHandler=c=>{let f=Date.now()-o<75;i&&a(c)&&!f?document.addEventListener(\"click\",this.textSelectionClosePreventionClickHandler,!0):document.removeEventListener(\"click\",this.textSelectionClosePreventionClickHandler,!0),i=!1},document.addEventListener(\"mousedown\",this.textSelectionClosePreventionMouseDownHandler,!0),document.addEventListener(\"mouseup\",this.textSelectionClosePreventionMouseUpHandler,!0)},isTopmost(){if(!e)return!0;let t=document.querySelectorAll(\".fi-modal-open\");return t.length===0?!1:t[t.length-1].id===e},close(){this.closeQuietly(),this.$dispatch(\"modal-closed\",{id:e})},closeQuietly(){this.isOpen=!1},open(){this.$nextTick(()=>{this.isOpen=!0,document.dispatchEvent(new CustomEvent(\"x-modal-opened\",{bubbles:!0,composed:!0,detail:{id:e}}))})},destroy(){this.textSelectionClosePreventionMouseDownHandler&&(document.removeEventListener(\"mousedown\",this.textSelectionClosePreventionMouseDownHandler,!0),this.textSelectionClosePreventionMouseDownHandler=null),this.textSelectionClosePreventionMouseUpHandler&&(document.removeEventListener(\"mouseup\",this.textSelectionClosePreventionMouseUpHandler,!0),this.textSelectionClosePreventionMouseUpHandler=null),this.textSelectionClosePreventionClickHandler&&(document.removeEventListener(\"click\",this.textSelectionClosePreventionClickHandler,!0),this.textSelectionClosePreventionClickHandler=null)}});document.addEventListener(\"livewire:init\",()=>{let e=t=>{let r=Alpine.findClosest(t,n=>n.__livewire);if(!r)throw\"Could not find Livewire component in DOM tree.\";return r.__livewire};Livewire.interceptMessage(({message:t,onSuccess:r})=>{r(({payload:o})=>{queueMicrotask(()=>{if(!o.effects?.html)for(let[a,c]of Object.entries(o.effects?.partials??{})){let f=Array.from(t.component.el.querySelectorAll(`[wire\\\\:partial=\"${a}\"]`)).filter(x=>e(x)===t.component);if(!f.length)continue;if(f.length>1)throw`Multiple elements found for partial [${a}].`;let u=f[0],y=u.parentElement?u.parentElement.tagName.toLowerCase():\"div\",m=document.createElement(y);m.innerHTML=c,m.__livewire=t.component;let O=m.firstElementChild;O.__livewire=t.component;let S={};u.querySelectorAll(\"[wire\\\\:id]\").forEach(x=>{S[x.getAttribute(\"wire:id\")]=x}),O.querySelectorAll(\"[wire\\\\:id]\").forEach(x=>{if(x.hasAttribute(\"wire:snapshot\"))return;let M=x.getAttribute(\"wire:id\"),I=S[M];I&&x.replaceWith(I.cloneNode(!0))}),window.Alpine.morph(u,O,{updating:(x,M,I,$)=>{if(!n(x)){if(x.__livewire_replace===!0&&(x.innerHTML=M.innerHTML),x.__livewire_replace_self===!0)return x.outerHTML=M.outerHTML,$();if(x.__livewire_ignore===!0||(x.__livewire_ignore_self===!0&&I(),i(x)&&x.getAttribute(\"wire:id\")!==t.component.id))return $();i(x)&&(M.__livewire=t.component)}},key:x=>{if(!n(x))return x.hasAttribute(\"wire:key\")?x.getAttribute(\"wire:key\"):x.hasAttribute(\"wire:id\")?x.getAttribute(\"wire:id\"):x.id},lookahead:!1})}})});function n(o){return typeof o.hasAttribute!=\"function\"}function i(o){return o.hasAttribute(\"wire:id\")}})});var Yo=(e,t,r)=>{let n=(y,m)=>{for(let O of y){let S=i(O,m);if(S!==null)return S}},i=(y,m)=>{let O=y.match(/^[\\{\\[]([^\\[\\]\\{\\}]*)[\\}\\]](.*)/s);if(O===null||O.length!==3)return null;let S=O[1],x=O[2];if(S.includes(\",\")){let[M,I]=S.split(\",\",2);if(I===\"*\"&&m>=M)return x;if(M===\"*\"&&m<=I)return x;if(m>=M&&m<=I)return x}return S==m?x:null},o=y=>y.toString().charAt(0).toUpperCase()+y.toString().slice(1),a=(y,m)=>{if(m.length===0)return y;let O={};for(let[S,x]of Object.entries(m))O[\":\"+o(S??\"\")]=o(x??\"\"),O[\":\"+S.toUpperCase()]=x.toString().toUpperCase(),O[\":\"+S]=x;return Object.entries(O).forEach(([S,x])=>{y=y.replaceAll(S,x)}),y},c=y=>y.map(m=>m.replace(/^[\\{\\[]([^\\[\\]\\{\\}]*)[\\}\\]]/,\"\")),f=e.split(\"|\"),u=n(f,t);return u!=null?a(u.trim(),r):(f=c(f),a(f.length>1&&t>1?f[1]:f[0],r))};document.addEventListener(\"alpine:init\",()=>{window.Alpine.plugin(oo),window.Alpine.plugin(ao),window.Alpine.plugin(fo),window.Alpine.plugin(jo),window.Alpine.plugin(Wo),window.Alpine.data(\"filamentDropdown\",Uo),window.Alpine.data(\"filamentFormButton\",Vo),window.Alpine.data(\"filamentModal\",zo)});window.jsMd5=Xo.md5;window.pluralize=Yo;})();\n/*! Bundled license information:\n\njs-md5/src/md5.js:\n  (**\n   * [js-md5]{@link https://github.com/emn178/js-md5}\n   *\n   * @namespace md5\n   * @version 0.8.3\n   * @author Chen, Yi-Cyuan [emn178@gmail.com]\n   * @copyright Chen, Yi-Cyuan 2014-2023\n   * @license MIT\n   *)\n\nsortablejs/modular/sortable.esm.js:\n  (**!\n   * Sortable 1.15.6\n   * @author\tRubaXa   <trash@rubaxa.org>\n   * @author\towenm    <owen23355@gmail.com>\n   * @license MIT\n   *)\n*/\n"
  },
  {
    "path": "public/js/filament/tables/components/columns/checkbox.js",
    "content": "function a({name:r,recordKey:s,state:n}){return{error:void 0,isLoading:!1,state:n,unsubscribeLivewireHook:null,init(){this.unsubscribeLivewireHook=Livewire.interceptMessage(({message:e,onSuccess:t})=>{t(()=>{this.$nextTick(()=>{if(this.isLoading||e.component.id!==this.$root.closest(\"[wire\\\\:id]\")?.attributes[\"wire:id\"].value)return;let i=this.getServerState();i===void 0||Alpine.raw(this.state)===i||(this.state=i)})})}),this.$watch(\"state\",async()=>{let e=this.getServerState();if(e===void 0||Alpine.raw(this.state)===e)return;this.isLoading=!0;let t=await this.$wire.updateTableColumnState(r,s,this.state);this.error=t?.error??void 0,!this.error&&this.$refs.serverState&&(this.$refs.serverState.value=this.state?\"1\":\"0\"),this.isLoading=!1})},getServerState(){if(this.$refs.serverState)return[1,\"1\"].includes(this.$refs.serverState.value)},destroy(){this.unsubscribeLivewireHook?.()}}}export{a as default};\n"
  },
  {
    "path": "public/js/filament/tables/components/columns/select.js",
    "content": "var Ft=Math.min,vt=Math.max,Ht=Math.round;var st=n=>({x:n,y:n}),ji={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},qi={start:\"end\",end:\"start\"};function De(n,t,e){return vt(n,Ft(t,e))}function Vt(n,t){return typeof n==\"function\"?n(t):n}function wt(n){return n.split(\"-\")[0]}function Wt(n){return n.split(\"-\")[1]}function Ae(n){return n===\"x\"?\"y\":\"x\"}function Ce(n){return n===\"y\"?\"height\":\"width\"}var Ji=new Set([\"top\",\"bottom\"]);function ht(n){return Ji.has(wt(n))?\"y\":\"x\"}function Le(n){return Ae(ht(n))}function Je(n,t,e){e===void 0&&(e=!1);let i=Wt(n),o=Le(n),s=Ce(o),r=o===\"x\"?i===(e?\"end\":\"start\")?\"right\":\"left\":i===\"start\"?\"bottom\":\"top\";return t.reference[s]>t.floating[s]&&(r=Bt(r)),[r,Bt(r)]}function Qe(n){let t=Bt(n);return[ie(n),t,ie(t)]}function ie(n){return n.replace(/start|end/g,t=>qi[t])}var je=[\"left\",\"right\"],qe=[\"right\",\"left\"],Qi=[\"top\",\"bottom\"],Zi=[\"bottom\",\"top\"];function tn(n,t,e){switch(n){case\"top\":case\"bottom\":return e?t?qe:je:t?je:qe;case\"left\":case\"right\":return t?Qi:Zi;default:return[]}}function Ze(n,t,e,i){let o=Wt(n),s=tn(wt(n),e===\"start\",i);return o&&(s=s.map(r=>r+\"-\"+o),t&&(s=s.concat(s.map(ie)))),s}function Bt(n){return n.replace(/left|right|bottom|top/g,t=>ji[t])}function en(n){return{top:0,right:0,bottom:0,left:0,...n}}function ti(n){return typeof n!=\"number\"?en(n):{top:n,right:n,bottom:n,left:n}}function Ot(n){let{x:t,y:e,width:i,height:o}=n;return{width:i,height:o,top:e,left:t,right:t+i,bottom:e+o,x:t,y:e}}function ei(n,t,e){let{reference:i,floating:o}=n,s=ht(t),r=Le(t),a=Ce(r),l=wt(t),c=s===\"y\",f=i.x+i.width/2-o.width/2,d=i.y+i.height/2-o.height/2,p=i[a]/2-o[a]/2,u;switch(l){case\"top\":u={x:f,y:i.y-o.height};break;case\"bottom\":u={x:f,y:i.y+i.height};break;case\"right\":u={x:i.x+i.width,y:d};break;case\"left\":u={x:i.x-o.width,y:d};break;default:u={x:i.x,y:i.y}}switch(Wt(t)){case\"start\":u[r]-=p*(e&&c?-1:1);break;case\"end\":u[r]+=p*(e&&c?-1:1);break}return u}var ii=async(n,t,e)=>{let{placement:i=\"bottom\",strategy:o=\"absolute\",middleware:s=[],platform:r}=e,a=s.filter(Boolean),l=await(r.isRTL==null?void 0:r.isRTL(t)),c=await r.getElementRects({reference:n,floating:t,strategy:o}),{x:f,y:d}=ei(c,i,l),p=i,u={},g=0;for(let m=0;m<a.length;m++){let{name:S,fn:E}=a[m],{x:y,y:D,data:A,reset:C}=await E({x:f,y:d,initialPlacement:i,placement:p,strategy:o,middlewareData:u,rects:c,platform:r,elements:{reference:n,floating:t}});f=y??f,d=D??d,u={...u,[S]:{...u[S],...A}},C&&g<=50&&(g++,typeof C==\"object\"&&(C.placement&&(p=C.placement),C.rects&&(c=C.rects===!0?await r.getElementRects({reference:n,floating:t,strategy:o}):C.rects),{x:f,y:d}=ei(c,p,l)),m=-1)}return{x:f,y:d,placement:p,strategy:o,middlewareData:u}};async function Ie(n,t){var e;t===void 0&&(t={});let{x:i,y:o,platform:s,rects:r,elements:a,strategy:l}=n,{boundary:c=\"clippingAncestors\",rootBoundary:f=\"viewport\",elementContext:d=\"floating\",altBoundary:p=!1,padding:u=0}=Vt(t,n),g=ti(u),S=a[p?d===\"floating\"?\"reference\":\"floating\":d],E=Ot(await s.getClippingRect({element:(e=await(s.isElement==null?void 0:s.isElement(S)))==null||e?S:S.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:c,rootBoundary:f,strategy:l})),y=d===\"floating\"?{x:i,y:o,width:r.floating.width,height:r.floating.height}:r.reference,D=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),A=await(s.isElement==null?void 0:s.isElement(D))?await(s.getScale==null?void 0:s.getScale(D))||{x:1,y:1}:{x:1,y:1},C=Ot(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:y,offsetParent:D,strategy:l}):y);return{top:(E.top-C.top+g.top)/A.y,bottom:(C.bottom-E.bottom+g.bottom)/A.y,left:(E.left-C.left+g.left)/A.x,right:(C.right-E.right+g.right)/A.x}}var ni=function(n){return n===void 0&&(n={}),{name:\"flip\",options:n,async fn(t){var e,i;let{placement:o,middlewareData:s,rects:r,initialPlacement:a,platform:l,elements:c}=t,{mainAxis:f=!0,crossAxis:d=!0,fallbackPlacements:p,fallbackStrategy:u=\"bestFit\",fallbackAxisSideDirection:g=\"none\",flipAlignment:m=!0,...S}=Vt(n,t);if((e=s.arrow)!=null&&e.alignmentOffset)return{};let E=wt(o),y=ht(a),D=wt(a)===a,A=await(l.isRTL==null?void 0:l.isRTL(c.floating)),C=p||(D||!m?[Bt(a)]:Qe(a)),F=g!==\"none\";!p&&F&&C.push(...Ze(a,m,g,A));let q=[a,...C],J=await Ie(t,S),_=[],W=((i=s.flip)==null?void 0:i.overflows)||[];if(f&&_.push(J[E]),d){let H=Je(o,r,A);_.push(J[H[0]],J[H[1]])}if(W=[...W,{placement:o,overflows:_}],!_.every(H=>H<=0)){var L,X;let H=(((L=s.flip)==null?void 0:L.index)||0)+1,tt=q[H];if(tt&&(!(d===\"alignment\"?y!==ht(tt):!1)||W.every(B=>ht(B.placement)===y?B.overflows[0]>0:!0)))return{data:{index:H,overflows:W},reset:{placement:tt}};let z=(X=W.filter(Y=>Y.overflows[0]<=0).sort((Y,B)=>Y.overflows[1]-B.overflows[1])[0])==null?void 0:X.placement;if(!z)switch(u){case\"bestFit\":{var M;let Y=(M=W.filter(B=>{if(F){let et=ht(B.placement);return et===y||et===\"y\"}return!0}).map(B=>[B.placement,B.overflows.filter(et=>et>0).reduce((et,ee)=>et+ee,0)]).sort((B,et)=>B[1]-et[1])[0])==null?void 0:M[0];Y&&(z=Y);break}case\"initialPlacement\":z=a;break}if(o!==z)return{reset:{placement:z}}}return{}}}};var nn=new Set([\"left\",\"top\"]);async function on(n,t){let{placement:e,platform:i,elements:o}=n,s=await(i.isRTL==null?void 0:i.isRTL(o.floating)),r=wt(e),a=Wt(e),l=ht(e)===\"y\",c=nn.has(r)?-1:1,f=s&&l?-1:1,d=Vt(t,n),{mainAxis:p,crossAxis:u,alignmentAxis:g}=typeof d==\"number\"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return a&&typeof g==\"number\"&&(u=a===\"end\"?g*-1:g),l?{x:u*f,y:p*c}:{x:p*c,y:u*f}}var oi=function(n){return n===void 0&&(n=0),{name:\"offset\",options:n,async fn(t){var e,i;let{x:o,y:s,placement:r,middlewareData:a}=t,l=await on(t,n);return r===((e=a.offset)==null?void 0:e.placement)&&(i=a.arrow)!=null&&i.alignmentOffset?{}:{x:o+l.x,y:s+l.y,data:{...l,placement:r}}}}},si=function(n){return n===void 0&&(n={}),{name:\"shift\",options:n,async fn(t){let{x:e,y:i,placement:o}=t,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:S=>{let{x:E,y}=S;return{x:E,y}}},...l}=Vt(n,t),c={x:e,y:i},f=await Ie(t,l),d=ht(wt(o)),p=Ae(d),u=c[p],g=c[d];if(s){let S=p===\"y\"?\"top\":\"left\",E=p===\"y\"?\"bottom\":\"right\",y=u+f[S],D=u-f[E];u=De(y,u,D)}if(r){let S=d===\"y\"?\"top\":\"left\",E=d===\"y\"?\"bottom\":\"right\",y=g+f[S],D=g-f[E];g=De(y,g,D)}let m=a.fn({...t,[p]:u,[d]:g});return{...m,data:{x:m.x-e,y:m.y-i,enabled:{[p]:s,[d]:r}}}}}};function oe(){return typeof window<\"u\"}function Et(n){return ai(n)?(n.nodeName||\"\").toLowerCase():\"#document\"}function U(n){var t;return(n==null||(t=n.ownerDocument)==null?void 0:t.defaultView)||window}function ct(n){var t;return(t=(ai(n)?n.ownerDocument:n.document)||window.document)==null?void 0:t.documentElement}function ai(n){return oe()?n instanceof Node||n instanceof U(n).Node:!1}function it(n){return oe()?n instanceof Element||n instanceof U(n).Element:!1}function rt(n){return oe()?n instanceof HTMLElement||n instanceof U(n).HTMLElement:!1}function ri(n){return!oe()||typeof ShadowRoot>\"u\"?!1:n instanceof ShadowRoot||n instanceof U(n).ShadowRoot}var sn=new Set([\"inline\",\"contents\"]);function It(n){let{overflow:t,overflowX:e,overflowY:i,display:o}=nt(n);return/auto|scroll|overlay|hidden|clip/.test(t+i+e)&&!sn.has(o)}var rn=new Set([\"table\",\"td\",\"th\"]);function li(n){return rn.has(Et(n))}var an=[\":popover-open\",\":modal\"];function zt(n){return an.some(t=>{try{return n.matches(t)}catch{return!1}})}var ln=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],cn=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],dn=[\"paint\",\"layout\",\"strict\",\"content\"];function se(n){let t=re(),e=it(n)?nt(n):n;return ln.some(i=>e[i]?e[i]!==\"none\":!1)||(e.containerType?e.containerType!==\"normal\":!1)||!t&&(e.backdropFilter?e.backdropFilter!==\"none\":!1)||!t&&(e.filter?e.filter!==\"none\":!1)||cn.some(i=>(e.willChange||\"\").includes(i))||dn.some(i=>(e.contain||\"\").includes(i))}function ci(n){let t=ut(n);for(;rt(t)&&!Dt(t);){if(se(t))return t;if(zt(t))return null;t=ut(t)}return null}function re(){return typeof CSS>\"u\"||!CSS.supports?!1:CSS.supports(\"-webkit-backdrop-filter\",\"none\")}var fn=new Set([\"html\",\"body\",\"#document\"]);function Dt(n){return fn.has(Et(n))}function nt(n){return U(n).getComputedStyle(n)}function $t(n){return it(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function ut(n){if(Et(n)===\"html\")return n;let t=n.assignedSlot||n.parentNode||ri(n)&&n.host||ct(n);return ri(t)?t.host:t}function di(n){let t=ut(n);return Dt(t)?n.ownerDocument?n.ownerDocument.body:n.body:rt(t)&&It(t)?t:di(t)}function ne(n,t,e){var i;t===void 0&&(t=[]),e===void 0&&(e=!0);let o=di(n),s=o===((i=n.ownerDocument)==null?void 0:i.body),r=U(o);if(s){let a=ae(r);return t.concat(r,r.visualViewport||[],It(o)?o:[],a&&e?ne(a):[])}return t.concat(o,ne(o,[],e))}function ae(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}function pi(n){let t=nt(n),e=parseFloat(t.width)||0,i=parseFloat(t.height)||0,o=rt(n),s=o?n.offsetWidth:e,r=o?n.offsetHeight:i,a=Ht(e)!==s||Ht(i)!==r;return a&&(e=s,i=r),{width:e,height:i,$:a}}function gi(n){return it(n)?n:n.contextElement}function Tt(n){let t=gi(n);if(!rt(t))return st(1);let e=t.getBoundingClientRect(),{width:i,height:o,$:s}=pi(t),r=(s?Ht(e.width):e.width)/i,a=(s?Ht(e.height):e.height)/o;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}var hn=st(0);function mi(n){let t=U(n);return!re()||!t.visualViewport?hn:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function un(n,t,e){return t===void 0&&(t=!1),!e||t&&e!==U(n)?!1:t}function Xt(n,t,e,i){t===void 0&&(t=!1),e===void 0&&(e=!1);let o=n.getBoundingClientRect(),s=gi(n),r=st(1);t&&(i?it(i)&&(r=Tt(i)):r=Tt(n));let a=un(s,e,i)?mi(s):st(0),l=(o.left+a.x)/r.x,c=(o.top+a.y)/r.y,f=o.width/r.x,d=o.height/r.y;if(s){let p=U(s),u=i&&it(i)?U(i):i,g=p,m=ae(g);for(;m&&i&&u!==g;){let S=Tt(m),E=m.getBoundingClientRect(),y=nt(m),D=E.left+(m.clientLeft+parseFloat(y.paddingLeft))*S.x,A=E.top+(m.clientTop+parseFloat(y.paddingTop))*S.y;l*=S.x,c*=S.y,f*=S.x,d*=S.y,l+=D,c+=A,g=U(m),m=ae(g)}}return Ot({width:f,height:d,x:l,y:c})}function le(n,t){let e=$t(n).scrollLeft;return t?t.left+e:Xt(ct(n)).left+e}function bi(n,t){let e=n.getBoundingClientRect(),i=e.left+t.scrollLeft-le(n,e),o=e.top+t.scrollTop;return{x:i,y:o}}function pn(n){let{elements:t,rect:e,offsetParent:i,strategy:o}=n,s=o===\"fixed\",r=ct(i),a=t?zt(t.floating):!1;if(i===r||a&&s)return e;let l={scrollLeft:0,scrollTop:0},c=st(1),f=st(0),d=rt(i);if((d||!d&&!s)&&((Et(i)!==\"body\"||It(r))&&(l=$t(i)),rt(i))){let u=Xt(i);c=Tt(i),f.x=u.x+i.clientLeft,f.y=u.y+i.clientTop}let p=r&&!d&&!s?bi(r,l):st(0);return{width:e.width*c.x,height:e.height*c.y,x:e.x*c.x-l.scrollLeft*c.x+f.x+p.x,y:e.y*c.y-l.scrollTop*c.y+f.y+p.y}}function gn(n){return Array.from(n.getClientRects())}function mn(n){let t=ct(n),e=$t(n),i=n.ownerDocument.body,o=vt(t.scrollWidth,t.clientWidth,i.scrollWidth,i.clientWidth),s=vt(t.scrollHeight,t.clientHeight,i.scrollHeight,i.clientHeight),r=-e.scrollLeft+le(n),a=-e.scrollTop;return nt(i).direction===\"rtl\"&&(r+=vt(t.clientWidth,i.clientWidth)-o),{width:o,height:s,x:r,y:a}}var fi=25;function bn(n,t){let e=U(n),i=ct(n),o=e.visualViewport,s=i.clientWidth,r=i.clientHeight,a=0,l=0;if(o){s=o.width,r=o.height;let f=re();(!f||f&&t===\"fixed\")&&(a=o.offsetLeft,l=o.offsetTop)}let c=le(i);if(c<=0){let f=i.ownerDocument,d=f.body,p=getComputedStyle(d),u=f.compatMode===\"CSS1Compat\"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,g=Math.abs(i.clientWidth-d.clientWidth-u);g<=fi&&(s-=g)}else c<=fi&&(s+=c);return{width:s,height:r,x:a,y:l}}var vn=new Set([\"absolute\",\"fixed\"]);function wn(n,t){let e=Xt(n,!0,t===\"fixed\"),i=e.top+n.clientTop,o=e.left+n.clientLeft,s=rt(n)?Tt(n):st(1),r=n.clientWidth*s.x,a=n.clientHeight*s.y,l=o*s.x,c=i*s.y;return{width:r,height:a,x:l,y:c}}function hi(n,t,e){let i;if(t===\"viewport\")i=bn(n,e);else if(t===\"document\")i=mn(ct(n));else if(it(t))i=wn(t,e);else{let o=mi(n);i={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return Ot(i)}function vi(n,t){let e=ut(n);return e===t||!it(e)||Dt(e)?!1:nt(e).position===\"fixed\"||vi(e,t)}function yn(n,t){let e=t.get(n);if(e)return e;let i=ne(n,[],!1).filter(a=>it(a)&&Et(a)!==\"body\"),o=null,s=nt(n).position===\"fixed\",r=s?ut(n):n;for(;it(r)&&!Dt(r);){let a=nt(r),l=se(r);!l&&a.position===\"fixed\"&&(o=null),(s?!l&&!o:!l&&a.position===\"static\"&&!!o&&vn.has(o.position)||It(r)&&!l&&vi(n,r))?i=i.filter(f=>f!==r):o=a,r=ut(r)}return t.set(n,i),i}function Sn(n){let{element:t,boundary:e,rootBoundary:i,strategy:o}=n,r=[...e===\"clippingAncestors\"?zt(t)?[]:yn(t,this._c):[].concat(e),i],a=r[0],l=r.reduce((c,f)=>{let d=hi(t,f,o);return c.top=vt(d.top,c.top),c.right=Ft(d.right,c.right),c.bottom=Ft(d.bottom,c.bottom),c.left=vt(d.left,c.left),c},hi(t,a,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function xn(n){let{width:t,height:e}=pi(n);return{width:t,height:e}}function On(n,t,e){let i=rt(t),o=ct(t),s=e===\"fixed\",r=Xt(n,!0,s,t),a={scrollLeft:0,scrollTop:0},l=st(0);function c(){l.x=le(o)}if(i||!i&&!s)if((Et(t)!==\"body\"||It(o))&&(a=$t(t)),i){let u=Xt(t,!0,s,t);l.x=u.x+t.clientLeft,l.y=u.y+t.clientTop}else o&&c();s&&!i&&o&&c();let f=o&&!i&&!s?bi(o,a):st(0),d=r.left+a.scrollLeft-l.x-f.x,p=r.top+a.scrollTop-l.y-f.y;return{x:d,y:p,width:r.width,height:r.height}}function Te(n){return nt(n).position===\"static\"}function ui(n,t){if(!rt(n)||nt(n).position===\"fixed\")return null;if(t)return t(n);let e=n.offsetParent;return ct(n)===e&&(e=e.ownerDocument.body),e}function wi(n,t){let e=U(n);if(zt(n))return e;if(!rt(n)){let o=ut(n);for(;o&&!Dt(o);){if(it(o)&&!Te(o))return o;o=ut(o)}return e}let i=ui(n,t);for(;i&&li(i)&&Te(i);)i=ui(i,t);return i&&Dt(i)&&Te(i)&&!se(i)?e:i||ci(n)||e}var En=async function(n){let t=this.getOffsetParent||wi,e=this.getDimensions,i=await e(n.floating);return{reference:On(n.reference,await t(n.floating),n.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}};function Dn(n){return nt(n).direction===\"rtl\"}var An={convertOffsetParentRelativeRectToViewportRelativeRect:pn,getDocumentElement:ct,getClippingRect:Sn,getOffsetParent:wi,getElementRects:En,getClientRects:gn,getDimensions:xn,getScale:Tt,isElement:it,isRTL:Dn};var yi=oi;var Si=si,xi=ni;var Oi=(n,t,e)=>{let i=new Map,o={platform:An,...e},s={...o.platform,_c:i};return ii(n,t,{...o,platform:s})};function Ei(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);t&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(n,o).enumerable})),e.push.apply(e,i)}return e}function ft(n){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?arguments[t]:{};t%2?Ei(Object(e),!0).forEach(function(i){Cn(n,i,e[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):Ei(Object(e)).forEach(function(i){Object.defineProperty(n,i,Object.getOwnPropertyDescriptor(e,i))})}return n}function ue(n){\"@babel/helpers - typeof\";return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?ue=function(t){return typeof t}:ue=function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},ue(n)}function Cn(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}function gt(){return gt=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},gt.apply(this,arguments)}function Ln(n,t){if(n==null)return{};var e={},i=Object.keys(n),o,s;for(s=0;s<i.length;s++)o=i[s],!(t.indexOf(o)>=0)&&(e[o]=n[o]);return e}function In(n,t){if(n==null)return{};var e=Ln(n,t),i,o;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(n);for(o=0;o<s.length;o++)i=s[o],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(n,i)&&(e[i]=n[i])}return e}var Tn=\"1.15.6\";function pt(n){if(typeof window<\"u\"&&window.navigator)return!!navigator.userAgent.match(n)}var mt=pt(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),Zt=pt(/Edge/i),Di=pt(/firefox/i),Gt=pt(/safari/i)&&!pt(/chrome/i)&&!pt(/android/i),Xe=pt(/iP(ad|od|hone)/i),Pi=pt(/chrome/i)&&pt(/android/i),Mi={capture:!1,passive:!1};function O(n,t,e){n.addEventListener(t,e,!mt&&Mi)}function x(n,t,e){n.removeEventListener(t,e,!mt&&Mi)}function ve(n,t){if(t){if(t[0]===\">\"&&(t=t.substring(1)),n)try{if(n.matches)return n.matches(t);if(n.msMatchesSelector)return n.msMatchesSelector(t);if(n.webkitMatchesSelector)return n.webkitMatchesSelector(t)}catch{return!1}return!1}}function Ni(n){return n.host&&n!==document&&n.host.nodeType?n.host:n.parentNode}function lt(n,t,e,i){if(n){e=e||document;do{if(t!=null&&(t[0]===\">\"?n.parentNode===e&&ve(n,t):ve(n,t))||i&&n===e)return n;if(n===e)break}while(n=Ni(n))}return null}var Ai=/\\s+/g;function Q(n,t,e){if(n&&t)if(n.classList)n.classList[e?\"add\":\"remove\"](t);else{var i=(\" \"+n.className+\" \").replace(Ai,\" \").replace(\" \"+t+\" \",\" \");n.className=(i+(e?\" \"+t:\"\")).replace(Ai,\" \")}}function b(n,t,e){var i=n&&n.style;if(i){if(e===void 0)return document.defaultView&&document.defaultView.getComputedStyle?e=document.defaultView.getComputedStyle(n,\"\"):n.currentStyle&&(e=n.currentStyle),t===void 0?e:e[t];!(t in i)&&t.indexOf(\"webkit\")===-1&&(t=\"-webkit-\"+t),i[t]=e+(typeof e==\"string\"?\"\":\"px\")}}function Nt(n,t){var e=\"\";if(typeof n==\"string\")e=n;else do{var i=b(n,\"transform\");i&&i!==\"none\"&&(e=i+\" \"+e)}while(!t&&(n=n.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(e)}function ki(n,t,e){if(n){var i=n.getElementsByTagName(t),o=0,s=i.length;if(e)for(;o<s;o++)e(i[o],o);return i}return[]}function dt(){var n=document.scrollingElement;return n||document.documentElement}function k(n,t,e,i,o){if(!(!n.getBoundingClientRect&&n!==window)){var s,r,a,l,c,f,d;if(n!==window&&n.parentNode&&n!==dt()?(s=n.getBoundingClientRect(),r=s.top,a=s.left,l=s.bottom,c=s.right,f=s.height,d=s.width):(r=0,a=0,l=window.innerHeight,c=window.innerWidth,f=window.innerHeight,d=window.innerWidth),(t||e)&&n!==window&&(o=o||n.parentNode,!mt))do if(o&&o.getBoundingClientRect&&(b(o,\"transform\")!==\"none\"||e&&b(o,\"position\")!==\"static\")){var p=o.getBoundingClientRect();r-=p.top+parseInt(b(o,\"border-top-width\")),a-=p.left+parseInt(b(o,\"border-left-width\")),l=r+s.height,c=a+s.width;break}while(o=o.parentNode);if(i&&n!==window){var u=Nt(o||n),g=u&&u.a,m=u&&u.d;u&&(r/=m,a/=g,d/=g,f/=m,l=r+f,c=a+d)}return{top:r,left:a,bottom:l,right:c,width:d,height:f}}}function Ci(n,t,e){for(var i=xt(n,!0),o=k(n)[t];i;){var s=k(i)[e],r=void 0;if(e===\"top\"||e===\"left\"?r=o>=s:r=o<=s,!r)return i;if(i===dt())break;i=xt(i,!1)}return!1}function kt(n,t,e,i){for(var o=0,s=0,r=n.children;s<r.length;){if(r[s].style.display!==\"none\"&&r[s]!==v.ghost&&(i||r[s]!==v.dragged)&&lt(r[s],e.draggable,n,!1)){if(o===t)return r[s];o++}s++}return null}function Ke(n,t){for(var e=n.lastElementChild;e&&(e===v.ghost||b(e,\"display\")===\"none\"||t&&!ve(e,t));)e=e.previousElementSibling;return e||null}function ot(n,t){var e=0;if(!n||!n.parentNode)return-1;for(;n=n.previousElementSibling;)n.nodeName.toUpperCase()!==\"TEMPLATE\"&&n!==v.clone&&(!t||ve(n,t))&&e++;return e}function Li(n){var t=0,e=0,i=dt();if(n)do{var o=Nt(n),s=o.a,r=o.d;t+=n.scrollLeft*s,e+=n.scrollTop*r}while(n!==i&&(n=n.parentNode));return[t,e]}function _n(n,t){for(var e in n)if(n.hasOwnProperty(e)){for(var i in t)if(t.hasOwnProperty(i)&&t[i]===n[e][i])return Number(e)}return-1}function xt(n,t){if(!n||!n.getBoundingClientRect)return dt();var e=n,i=!1;do if(e.clientWidth<e.scrollWidth||e.clientHeight<e.scrollHeight){var o=b(e);if(e.clientWidth<e.scrollWidth&&(o.overflowX==\"auto\"||o.overflowX==\"scroll\")||e.clientHeight<e.scrollHeight&&(o.overflowY==\"auto\"||o.overflowY==\"scroll\")){if(!e.getBoundingClientRect||e===document.body)return dt();if(i||t)return e;i=!0}}while(e=e.parentNode);return dt()}function Rn(n,t){if(n&&t)for(var e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n}function _e(n,t){return Math.round(n.top)===Math.round(t.top)&&Math.round(n.left)===Math.round(t.left)&&Math.round(n.height)===Math.round(t.height)&&Math.round(n.width)===Math.round(t.width)}var jt;function Bi(n,t){return function(){if(!jt){var e=arguments,i=this;e.length===1?n.call(i,e[0]):n.apply(i,e),jt=setTimeout(function(){jt=void 0},t)}}}function Pn(){clearTimeout(jt),jt=void 0}function Fi(n,t,e){n.scrollLeft+=t,n.scrollTop+=e}function Hi(n){var t=window.Polymer,e=window.jQuery||window.Zepto;return t&&t.dom?t.dom(n).cloneNode(!0):e?e(n).clone(!0)[0]:n.cloneNode(!0)}function Vi(n,t,e){var i={};return Array.from(n.children).forEach(function(o){var s,r,a,l;if(!(!lt(o,t.draggable,n,!1)||o.animated||o===e)){var c=k(o);i.left=Math.min((s=i.left)!==null&&s!==void 0?s:1/0,c.left),i.top=Math.min((r=i.top)!==null&&r!==void 0?r:1/0,c.top),i.right=Math.max((a=i.right)!==null&&a!==void 0?a:-1/0,c.right),i.bottom=Math.max((l=i.bottom)!==null&&l!==void 0?l:-1/0,c.bottom)}}),i.width=i.right-i.left,i.height=i.bottom-i.top,i.x=i.left,i.y=i.top,i}var j=\"Sortable\"+new Date().getTime();function Mn(){var n=[],t;return{captureAnimationState:function(){if(n=[],!!this.options.animation){var i=[].slice.call(this.el.children);i.forEach(function(o){if(!(b(o,\"display\")===\"none\"||o===v.ghost)){n.push({target:o,rect:k(o)});var s=ft({},n[n.length-1].rect);if(o.thisAnimationDuration){var r=Nt(o,!0);r&&(s.top-=r.f,s.left-=r.e)}o.fromRect=s}})}},addAnimationState:function(i){n.push(i)},removeAnimationState:function(i){n.splice(_n(n,{target:i}),1)},animateAll:function(i){var o=this;if(!this.options.animation){clearTimeout(t),typeof i==\"function\"&&i();return}var s=!1,r=0;n.forEach(function(a){var l=0,c=a.target,f=c.fromRect,d=k(c),p=c.prevFromRect,u=c.prevToRect,g=a.rect,m=Nt(c,!0);m&&(d.top-=m.f,d.left-=m.e),c.toRect=d,c.thisAnimationDuration&&_e(p,d)&&!_e(f,d)&&(g.top-d.top)/(g.left-d.left)===(f.top-d.top)/(f.left-d.left)&&(l=kn(g,p,u,o.options)),_e(d,f)||(c.prevFromRect=f,c.prevToRect=d,l||(l=o.options.animation),o.animate(c,g,d,l)),l&&(s=!0,r=Math.max(r,l),clearTimeout(c.animationResetTimer),c.animationResetTimer=setTimeout(function(){c.animationTime=0,c.prevFromRect=null,c.fromRect=null,c.prevToRect=null,c.thisAnimationDuration=null},l),c.thisAnimationDuration=l)}),clearTimeout(t),s?t=setTimeout(function(){typeof i==\"function\"&&i()},r):typeof i==\"function\"&&i(),n=[]},animate:function(i,o,s,r){if(r){b(i,\"transition\",\"\"),b(i,\"transform\",\"\");var a=Nt(this.el),l=a&&a.a,c=a&&a.d,f=(o.left-s.left)/(l||1),d=(o.top-s.top)/(c||1);i.animatingX=!!f,i.animatingY=!!d,b(i,\"transform\",\"translate3d(\"+f+\"px,\"+d+\"px,0)\"),this.forRepaintDummy=Nn(i),b(i,\"transition\",\"transform \"+r+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),b(i,\"transform\",\"translate3d(0,0,0)\"),typeof i.animated==\"number\"&&clearTimeout(i.animated),i.animated=setTimeout(function(){b(i,\"transition\",\"\"),b(i,\"transform\",\"\"),i.animated=!1,i.animatingX=!1,i.animatingY=!1},r)}}}}function Nn(n){return n.offsetWidth}function kn(n,t,e,i){return Math.sqrt(Math.pow(t.top-n.top,2)+Math.pow(t.left-n.left,2))/Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))*i.animation}var _t=[],Re={initializeByDefault:!0},te={mount:function(t){for(var e in Re)Re.hasOwnProperty(e)&&!(e in t)&&(t[e]=Re[e]);_t.forEach(function(i){if(i.pluginName===t.pluginName)throw\"Sortable: Cannot mount plugin \".concat(t.pluginName,\" more than once\")}),_t.push(t)},pluginEvent:function(t,e,i){var o=this;this.eventCanceled=!1,i.cancel=function(){o.eventCanceled=!0};var s=t+\"Global\";_t.forEach(function(r){e[r.pluginName]&&(e[r.pluginName][s]&&e[r.pluginName][s](ft({sortable:e},i)),e.options[r.pluginName]&&e[r.pluginName][t]&&e[r.pluginName][t](ft({sortable:e},i)))})},initializePlugins:function(t,e,i,o){_t.forEach(function(a){var l=a.pluginName;if(!(!t.options[l]&&!a.initializeByDefault)){var c=new a(t,e,t.options);c.sortable=t,c.options=t.options,t[l]=c,gt(i,c.defaults)}});for(var s in t.options)if(t.options.hasOwnProperty(s)){var r=this.modifyOption(t,s,t.options[s]);typeof r<\"u\"&&(t.options[s]=r)}},getEventProperties:function(t,e){var i={};return _t.forEach(function(o){typeof o.eventProperties==\"function\"&&gt(i,o.eventProperties.call(e[o.pluginName],t))}),i},modifyOption:function(t,e,i){var o;return _t.forEach(function(s){t[s.pluginName]&&s.optionListeners&&typeof s.optionListeners[e]==\"function\"&&(o=s.optionListeners[e].call(t[s.pluginName],i))}),o}};function Bn(n){var t=n.sortable,e=n.rootEl,i=n.name,o=n.targetEl,s=n.cloneEl,r=n.toEl,a=n.fromEl,l=n.oldIndex,c=n.newIndex,f=n.oldDraggableIndex,d=n.newDraggableIndex,p=n.originalEvent,u=n.putSortable,g=n.extraEventProperties;if(t=t||e&&e[j],!!t){var m,S=t.options,E=\"on\"+i.charAt(0).toUpperCase()+i.substr(1);window.CustomEvent&&!mt&&!Zt?m=new CustomEvent(i,{bubbles:!0,cancelable:!0}):(m=document.createEvent(\"Event\"),m.initEvent(i,!0,!0)),m.to=r||e,m.from=a||e,m.item=o||e,m.clone=s,m.oldIndex=l,m.newIndex=c,m.oldDraggableIndex=f,m.newDraggableIndex=d,m.originalEvent=p,m.pullMode=u?u.lastPutMode:void 0;var y=ft(ft({},g),te.getEventProperties(i,t));for(var D in y)m[D]=y[D];e&&e.dispatchEvent(m),S[E]&&S[E].call(t,m)}}var Fn=[\"evt\"],G=function(t,e){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=i.evt,s=In(i,Fn);te.pluginEvent.bind(v)(t,e,ft({dragEl:h,parentEl:R,ghostEl:w,rootEl:I,nextEl:Lt,lastDownEl:pe,cloneEl:T,cloneHidden:St,dragStarted:Kt,putSortable:V,activeSortable:v.active,originalEvent:o,oldIndex:Mt,oldDraggableIndex:qt,newIndex:Z,newDraggableIndex:yt,hideGhostForTarget:Xi,unhideGhostForTarget:Ki,cloneNowHidden:function(){St=!0},cloneNowShown:function(){St=!1},dispatchSortableEvent:function(a){K({sortable:e,name:a,originalEvent:o})}},s))};function K(n){Bn(ft({putSortable:V,cloneEl:T,targetEl:h,rootEl:I,oldIndex:Mt,oldDraggableIndex:qt,newIndex:Z,newDraggableIndex:yt},n))}var h,R,w,I,Lt,pe,T,St,Mt,Z,qt,yt,ce,V,Pt=!1,we=!1,ye=[],At,at,Pe,Me,Ii,Ti,Kt,Rt,Jt,Qt=!1,de=!1,ge,$,Ne=[],Ve=!1,Se=[],Oe=typeof document<\"u\",fe=Xe,_i=Zt||mt?\"cssFloat\":\"float\",Hn=Oe&&!Pi&&!Xe&&\"draggable\"in document.createElement(\"div\"),Wi=(function(){if(Oe){if(mt)return!1;var n=document.createElement(\"x\");return n.style.cssText=\"pointer-events:auto\",n.style.pointerEvents===\"auto\"}})(),zi=function(t,e){var i=b(t),o=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),s=kt(t,0,e),r=kt(t,1,e),a=s&&b(s),l=r&&b(r),c=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+k(s).width,f=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+k(r).width;if(i.display===\"flex\")return i.flexDirection===\"column\"||i.flexDirection===\"column-reverse\"?\"vertical\":\"horizontal\";if(i.display===\"grid\")return i.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\";if(s&&a.float&&a.float!==\"none\"){var d=a.float===\"left\"?\"left\":\"right\";return r&&(l.clear===\"both\"||l.clear===d)?\"vertical\":\"horizontal\"}return s&&(a.display===\"block\"||a.display===\"flex\"||a.display===\"table\"||a.display===\"grid\"||c>=o&&i[_i]===\"none\"||r&&i[_i]===\"none\"&&c+f>o)?\"vertical\":\"horizontal\"},Vn=function(t,e,i){var o=i?t.left:t.top,s=i?t.right:t.bottom,r=i?t.width:t.height,a=i?e.left:e.top,l=i?e.right:e.bottom,c=i?e.width:e.height;return o===a||s===l||o+r/2===a+c/2},Wn=function(t,e){var i;return ye.some(function(o){var s=o[j].options.emptyInsertThreshold;if(!(!s||Ke(o))){var r=k(o),a=t>=r.left-s&&t<=r.right+s,l=e>=r.top-s&&e<=r.bottom+s;if(a&&l)return i=o}}),i},$i=function(t){function e(s,r){return function(a,l,c,f){var d=a.options.group.name&&l.options.group.name&&a.options.group.name===l.options.group.name;if(s==null&&(r||d))return!0;if(s==null||s===!1)return!1;if(r&&s===\"clone\")return s;if(typeof s==\"function\")return e(s(a,l,c,f),r)(a,l,c,f);var p=(r?a:l).options.group.name;return s===!0||typeof s==\"string\"&&s===p||s.join&&s.indexOf(p)>-1}}var i={},o=t.group;(!o||ue(o)!=\"object\")&&(o={name:o}),i.name=o.name,i.checkPull=e(o.pull,!0),i.checkPut=e(o.put),i.revertClone=o.revertClone,t.group=i},Xi=function(){!Wi&&w&&b(w,\"display\",\"none\")},Ki=function(){!Wi&&w&&b(w,\"display\",\"\")};Oe&&!Pi&&document.addEventListener(\"click\",function(n){if(we)return n.preventDefault(),n.stopPropagation&&n.stopPropagation(),n.stopImmediatePropagation&&n.stopImmediatePropagation(),we=!1,!1},!0);var Ct=function(t){if(h){t=t.touches?t.touches[0]:t;var e=Wn(t.clientX,t.clientY);if(e){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]=t[o]);i.target=i.rootEl=e,i.preventDefault=void 0,i.stopPropagation=void 0,e[j]._onDragOver(i)}}},zn=function(t){h&&h.parentNode[j]._isOutsideThisEl(t.target)};function v(n,t){if(!(n&&n.nodeType&&n.nodeType===1))throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(n));this.el=n,this.options=t=gt({},t),n[j]=this;var e={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(n.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return zi(n,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(r,a){r.setData(\"Text\",a.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:v.supportPointer!==!1&&\"PointerEvent\"in window&&(!Gt||Xe),emptyInsertThreshold:5};te.initializePlugins(this,n,e);for(var i in e)!(i in t)&&(t[i]=e[i]);$i(t);for(var o in this)o.charAt(0)===\"_\"&&typeof this[o]==\"function\"&&(this[o]=this[o].bind(this));this.nativeDraggable=t.forceFallback?!1:Hn,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?O(n,\"pointerdown\",this._onTapStart):(O(n,\"mousedown\",this._onTapStart),O(n,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(O(n,\"dragover\",this),O(n,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),gt(this,Mn())}v.prototype={constructor:v,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(Rt=null)},_getDirection:function(t,e){return typeof this.options.direction==\"function\"?this.options.direction.call(this,t,e,h):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,i=this.el,o=this.options,s=o.preventOnFilter,r=t.type,a=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===\"touch\"&&t,l=(a||t).target,c=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,f=o.filter;if(qn(i),!h&&!(/mousedown|pointerdown/.test(r)&&t.button!==0||o.disabled)&&!c.isContentEditable&&!(!this.nativeDraggable&&Gt&&l&&l.tagName.toUpperCase()===\"SELECT\")&&(l=lt(l,o.draggable,i,!1),!(l&&l.animated)&&pe!==l)){if(Mt=ot(l),qt=ot(l,o.draggable),typeof f==\"function\"){if(f.call(this,t,l,this)){K({sortable:e,rootEl:c,name:\"filter\",targetEl:l,toEl:i,fromEl:i}),G(\"filter\",e,{evt:t}),s&&t.preventDefault();return}}else if(f&&(f=f.split(\",\").some(function(d){if(d=lt(c,d.trim(),i,!1),d)return K({sortable:e,rootEl:d,name:\"filter\",targetEl:l,fromEl:i,toEl:i}),G(\"filter\",e,{evt:t}),!0}),f)){s&&t.preventDefault();return}o.handle&&!lt(c,o.handle,i,!1)||this._prepareDragStart(t,a,l)}}},_prepareDragStart:function(t,e,i){var o=this,s=o.el,r=o.options,a=s.ownerDocument,l;if(i&&!h&&i.parentNode===s){var c=k(i);if(I=s,h=i,R=h.parentNode,Lt=h.nextSibling,pe=i,ce=r.group,v.dragged=h,At={target:h,clientX:(e||t).clientX,clientY:(e||t).clientY},Ii=At.clientX-c.left,Ti=At.clientY-c.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,h.style[\"will-change\"]=\"all\",l=function(){if(G(\"delayEnded\",o,{evt:t}),v.eventCanceled){o._onDrop();return}o._disableDelayedDragEvents(),!Di&&o.nativeDraggable&&(h.draggable=!0),o._triggerDragStart(t,e),K({sortable:o,name:\"choose\",originalEvent:t}),Q(h,r.chosenClass,!0)},r.ignore.split(\",\").forEach(function(f){ki(h,f.trim(),ke)}),O(a,\"dragover\",Ct),O(a,\"mousemove\",Ct),O(a,\"touchmove\",Ct),r.supportPointer?(O(a,\"pointerup\",o._onDrop),!this.nativeDraggable&&O(a,\"pointercancel\",o._onDrop)):(O(a,\"mouseup\",o._onDrop),O(a,\"touchend\",o._onDrop),O(a,\"touchcancel\",o._onDrop)),Di&&this.nativeDraggable&&(this.options.touchStartThreshold=4,h.draggable=!0),G(\"delayStart\",this,{evt:t}),r.delay&&(!r.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(Zt||mt))){if(v.eventCanceled){this._onDrop();return}r.supportPointer?(O(a,\"pointerup\",o._disableDelayedDrag),O(a,\"pointercancel\",o._disableDelayedDrag)):(O(a,\"mouseup\",o._disableDelayedDrag),O(a,\"touchend\",o._disableDelayedDrag),O(a,\"touchcancel\",o._disableDelayedDrag)),O(a,\"mousemove\",o._delayedDragTouchMoveHandler),O(a,\"touchmove\",o._delayedDragTouchMoveHandler),r.supportPointer&&O(a,\"pointermove\",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(l,r.delay)}else l()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){h&&ke(h),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;x(t,\"mouseup\",this._disableDelayedDrag),x(t,\"touchend\",this._disableDelayedDrag),x(t,\"touchcancel\",this._disableDelayedDrag),x(t,\"pointerup\",this._disableDelayedDrag),x(t,\"pointercancel\",this._disableDelayedDrag),x(t,\"mousemove\",this._delayedDragTouchMoveHandler),x(t,\"touchmove\",this._delayedDragTouchMoveHandler),x(t,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType==\"touch\"&&t,!this.nativeDraggable||e?this.options.supportPointer?O(document,\"pointermove\",this._onTouchMove):e?O(document,\"touchmove\",this._onTouchMove):O(document,\"mousemove\",this._onTouchMove):(O(h,\"dragend\",this),O(I,\"dragstart\",this._onDragStart));try{document.selection?me(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(Pt=!1,I&&h){G(\"dragStarted\",this,{evt:e}),this.nativeDraggable&&O(document,\"dragover\",zn);var i=this.options;!t&&Q(h,i.dragClass,!1),Q(h,i.ghostClass,!0),v.active=this,t&&this._appendGhost(),K({sortable:this,name:\"start\",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,Xi();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY),t!==e);)e=t;if(h.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){var i=void 0;if(i=e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e}),i&&!this.options.dragoverBubble)break}t=e}while(e=Ni(e));Ki()}},_onTouchMove:function(t){if(At){var e=this.options,i=e.fallbackTolerance,o=e.fallbackOffset,s=t.touches?t.touches[0]:t,r=w&&Nt(w,!0),a=w&&r&&r.a,l=w&&r&&r.d,c=fe&&$&&Li($),f=(s.clientX-At.clientX+o.x)/(a||1)+(c?c[0]-Ne[0]:0)/(a||1),d=(s.clientY-At.clientY+o.y)/(l||1)+(c?c[1]-Ne[1]:0)/(l||1);if(!v.active&&!Pt){if(i&&Math.max(Math.abs(s.clientX-this._lastX),Math.abs(s.clientY-this._lastY))<i)return;this._onDragStart(t,!0)}if(w){r?(r.e+=f-(Pe||0),r.f+=d-(Me||0)):r={a:1,b:0,c:0,d:1,e:f,f:d};var p=\"matrix(\".concat(r.a,\",\").concat(r.b,\",\").concat(r.c,\",\").concat(r.d,\",\").concat(r.e,\",\").concat(r.f,\")\");b(w,\"webkitTransform\",p),b(w,\"mozTransform\",p),b(w,\"msTransform\",p),b(w,\"transform\",p),Pe=f,Me=d,at=s}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!w){var t=this.options.fallbackOnBody?document.body:I,e=k(h,!0,fe,!0,t),i=this.options;if(fe){for($=t;b($,\"position\")===\"static\"&&b($,\"transform\")===\"none\"&&$!==document;)$=$.parentNode;$!==document.body&&$!==document.documentElement?($===document&&($=dt()),e.top+=$.scrollTop,e.left+=$.scrollLeft):$=dt(),Ne=Li($)}w=h.cloneNode(!0),Q(w,i.ghostClass,!1),Q(w,i.fallbackClass,!0),Q(w,i.dragClass,!0),b(w,\"transition\",\"\"),b(w,\"transform\",\"\"),b(w,\"box-sizing\",\"border-box\"),b(w,\"margin\",0),b(w,\"top\",e.top),b(w,\"left\",e.left),b(w,\"width\",e.width),b(w,\"height\",e.height),b(w,\"opacity\",\"0.8\"),b(w,\"position\",fe?\"absolute\":\"fixed\"),b(w,\"zIndex\",\"100000\"),b(w,\"pointerEvents\",\"none\"),v.ghost=w,t.appendChild(w),b(w,\"transform-origin\",Ii/parseInt(w.style.width)*100+\"% \"+Ti/parseInt(w.style.height)*100+\"%\")}},_onDragStart:function(t,e){var i=this,o=t.dataTransfer,s=i.options;if(G(\"dragStart\",this,{evt:t}),v.eventCanceled){this._onDrop();return}G(\"setupClone\",this),v.eventCanceled||(T=Hi(h),T.removeAttribute(\"id\"),T.draggable=!1,T.style[\"will-change\"]=\"\",this._hideClone(),Q(T,this.options.chosenClass,!1),v.clone=T),i.cloneId=me(function(){G(\"clone\",i),!v.eventCanceled&&(i.options.removeCloneOnHide||I.insertBefore(T,h),i._hideClone(),K({sortable:i,name:\"clone\"}))}),!e&&Q(h,s.dragClass,!0),e?(we=!0,i._loopId=setInterval(i._emulateDragOver,50)):(x(document,\"mouseup\",i._onDrop),x(document,\"touchend\",i._onDrop),x(document,\"touchcancel\",i._onDrop),o&&(o.effectAllowed=\"move\",s.setData&&s.setData.call(i,o,h)),O(document,\"drop\",i),b(h,\"transform\",\"translateZ(0)\")),Pt=!0,i._dragStartId=me(i._dragStarted.bind(i,e,t)),O(document,\"selectstart\",i),Kt=!0,window.getSelection().removeAllRanges(),Gt&&b(document.body,\"user-select\",\"none\")},_onDragOver:function(t){var e=this.el,i=t.target,o,s,r,a=this.options,l=a.group,c=v.active,f=ce===l,d=a.sort,p=V||c,u,g=this,m=!1;if(Ve)return;function S(B,et){G(B,g,ft({evt:t,isOwner:f,axis:u?\"vertical\":\"horizontal\",revert:r,dragRect:o,targetRect:s,canSort:d,fromSortable:p,target:i,completed:y,onMove:function(Ge,Gi){return he(I,e,h,o,Ge,k(Ge),t,Gi)},changed:D},et))}function E(){S(\"dragOverAnimationCapture\"),g.captureAnimationState(),g!==p&&p.captureAnimationState()}function y(B){return S(\"dragOverCompleted\",{insertion:B}),B&&(f?c._hideClone():c._showClone(g),g!==p&&(Q(h,V?V.options.ghostClass:c.options.ghostClass,!1),Q(h,a.ghostClass,!0)),V!==g&&g!==v.active?V=g:g===v.active&&V&&(V=null),p===g&&(g._ignoreWhileAnimating=i),g.animateAll(function(){S(\"dragOverAnimationComplete\"),g._ignoreWhileAnimating=null}),g!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(i===h&&!h.animated||i===e&&!i.animated)&&(Rt=null),!a.dragoverBubble&&!t.rootEl&&i!==document&&(h.parentNode[j]._isOutsideThisEl(t.target),!B&&Ct(t)),!a.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),m=!0}function D(){Z=ot(h),yt=ot(h,a.draggable),K({sortable:g,name:\"change\",toEl:e,newIndex:Z,newDraggableIndex:yt,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),i=lt(i,a.draggable,e,!0),S(\"dragOver\"),v.eventCanceled)return m;if(h.contains(t.target)||i.animated&&i.animatingX&&i.animatingY||g._ignoreWhileAnimating===i)return y(!1);if(we=!1,c&&!a.disabled&&(f?d||(r=R!==I):V===this||(this.lastPutMode=ce.checkPull(this,c,h,t))&&l.checkPut(this,c,h,t))){if(u=this._getDirection(t,i)===\"vertical\",o=k(h),S(\"dragOverValid\"),v.eventCanceled)return m;if(r)return R=I,E(),this._hideClone(),S(\"revert\"),v.eventCanceled||(Lt?I.insertBefore(h,Lt):I.appendChild(h)),y(!0);var A=Ke(e,a.draggable);if(!A||Yn(t,u,this)&&!A.animated){if(A===h)return y(!1);if(A&&e===t.target&&(i=A),i&&(s=k(i)),he(I,e,h,o,i,s,t,!!i)!==!1)return E(),A&&A.nextSibling?e.insertBefore(h,A.nextSibling):e.appendChild(h),R=e,D(),y(!0)}else if(A&&Kn(t,u,this)){var C=kt(e,0,a,!0);if(C===h)return y(!1);if(i=C,s=k(i),he(I,e,h,o,i,s,t,!1)!==!1)return E(),e.insertBefore(h,C),R=e,D(),y(!0)}else if(i.parentNode===e){s=k(i);var F=0,q,J=h.parentNode!==e,_=!Vn(h.animated&&h.toRect||o,i.animated&&i.toRect||s,u),W=u?\"top\":\"left\",L=Ci(i,\"top\",\"top\")||Ci(h,\"top\",\"top\"),X=L?L.scrollTop:void 0;Rt!==i&&(q=s[W],Qt=!1,de=!_&&a.invertSwap||J),F=Un(t,i,s,u,_?1:a.swapThreshold,a.invertedSwapThreshold==null?a.swapThreshold:a.invertedSwapThreshold,de,Rt===i);var M;if(F!==0){var H=ot(h);do H-=F,M=R.children[H];while(M&&(b(M,\"display\")===\"none\"||M===w))}if(F===0||M===i)return y(!1);Rt=i,Jt=F;var tt=i.nextElementSibling,z=!1;z=F===1;var Y=he(I,e,h,o,i,s,t,z);if(Y!==!1)return(Y===1||Y===-1)&&(z=Y===1),Ve=!0,setTimeout(Xn,30),E(),z&&!tt?e.appendChild(h):i.parentNode.insertBefore(h,z?tt:i),L&&Fi(L,0,X-L.scrollTop),R=h.parentNode,q!==void 0&&!de&&(ge=Math.abs(q-k(i)[W])),D(),y(!0)}if(e.contains(h))return y(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){x(document,\"mousemove\",this._onTouchMove),x(document,\"touchmove\",this._onTouchMove),x(document,\"pointermove\",this._onTouchMove),x(document,\"dragover\",Ct),x(document,\"mousemove\",Ct),x(document,\"touchmove\",Ct)},_offUpEvents:function(){var t=this.el.ownerDocument;x(t,\"mouseup\",this._onDrop),x(t,\"touchend\",this._onDrop),x(t,\"pointerup\",this._onDrop),x(t,\"pointercancel\",this._onDrop),x(t,\"touchcancel\",this._onDrop),x(document,\"selectstart\",this)},_onDrop:function(t){var e=this.el,i=this.options;if(Z=ot(h),yt=ot(h,i.draggable),G(\"drop\",this,{evt:t}),R=h&&h.parentNode,Z=ot(h),yt=ot(h,i.draggable),v.eventCanceled){this._nulling();return}Pt=!1,de=!1,Qt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),We(this.cloneId),We(this._dragStartId),this.nativeDraggable&&(x(document,\"drop\",this),x(e,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Gt&&b(document.body,\"user-select\",\"\"),b(h,\"transform\",\"\"),t&&(Kt&&(t.cancelable&&t.preventDefault(),!i.dropBubble&&t.stopPropagation()),w&&w.parentNode&&w.parentNode.removeChild(w),(I===R||V&&V.lastPutMode!==\"clone\")&&T&&T.parentNode&&T.parentNode.removeChild(T),h&&(this.nativeDraggable&&x(h,\"dragend\",this),ke(h),h.style[\"will-change\"]=\"\",Kt&&!Pt&&Q(h,V?V.options.ghostClass:this.options.ghostClass,!1),Q(h,this.options.chosenClass,!1),K({sortable:this,name:\"unchoose\",toEl:R,newIndex:null,newDraggableIndex:null,originalEvent:t}),I!==R?(Z>=0&&(K({rootEl:R,name:\"add\",toEl:R,fromEl:I,originalEvent:t}),K({sortable:this,name:\"remove\",toEl:R,originalEvent:t}),K({rootEl:R,name:\"sort\",toEl:R,fromEl:I,originalEvent:t}),K({sortable:this,name:\"sort\",toEl:R,originalEvent:t})),V&&V.save()):Z!==Mt&&Z>=0&&(K({sortable:this,name:\"update\",toEl:R,originalEvent:t}),K({sortable:this,name:\"sort\",toEl:R,originalEvent:t})),v.active&&((Z==null||Z===-1)&&(Z=Mt,yt=qt),K({sortable:this,name:\"end\",toEl:R,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){G(\"nulling\",this),I=h=R=w=Lt=T=pe=St=At=at=Kt=Z=yt=Mt=qt=Rt=Jt=V=ce=v.dragged=v.ghost=v.clone=v.active=null,Se.forEach(function(t){t.checked=!0}),Se.length=Pe=Me=0},handleEvent:function(t){switch(t.type){case\"drop\":case\"dragend\":this._onDrop(t);break;case\"dragenter\":case\"dragover\":h&&(this._onDragOver(t),$n(t));break;case\"selectstart\":t.preventDefault();break}},toArray:function(){for(var t=[],e,i=this.el.children,o=0,s=i.length,r=this.options;o<s;o++)e=i[o],lt(e,r.draggable,this.el,!1)&&t.push(e.getAttribute(r.dataIdAttr)||jn(e));return t},sort:function(t,e){var i={},o=this.el;this.toArray().forEach(function(s,r){var a=o.children[r];lt(a,this.options.draggable,o,!1)&&(i[s]=a)},this),e&&this.captureAnimationState(),t.forEach(function(s){i[s]&&(o.removeChild(i[s]),o.appendChild(i[s]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return lt(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var i=this.options;if(e===void 0)return i[t];var o=te.modifyOption(this,t,e);typeof o<\"u\"?i[t]=o:i[t]=e,t===\"group\"&&$i(i)},destroy:function(){G(\"destroy\",this);var t=this.el;t[j]=null,x(t,\"mousedown\",this._onTapStart),x(t,\"touchstart\",this._onTapStart),x(t,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(x(t,\"dragover\",this),x(t,\"dragenter\",this)),Array.prototype.forEach.call(t.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!St){if(G(\"hideClone\",this),v.eventCanceled)return;b(T,\"display\",\"none\"),this.options.removeCloneOnHide&&T.parentNode&&T.parentNode.removeChild(T),St=!0}},_showClone:function(t){if(t.lastPutMode!==\"clone\"){this._hideClone();return}if(St){if(G(\"showClone\",this),v.eventCanceled)return;h.parentNode==I&&!this.options.group.revertClone?I.insertBefore(T,h):Lt?I.insertBefore(T,Lt):I.appendChild(T),this.options.group.revertClone&&this.animate(h,T),b(T,\"display\",\"\"),St=!1}}};function $n(n){n.dataTransfer&&(n.dataTransfer.dropEffect=\"move\"),n.cancelable&&n.preventDefault()}function he(n,t,e,i,o,s,r,a){var l,c=n[j],f=c.options.onMove,d;return window.CustomEvent&&!mt&&!Zt?l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}):(l=document.createEvent(\"Event\"),l.initEvent(\"move\",!0,!0)),l.to=t,l.from=n,l.dragged=e,l.draggedRect=i,l.related=o||t,l.relatedRect=s||k(t),l.willInsertAfter=a,l.originalEvent=r,n.dispatchEvent(l),f&&(d=f.call(c,l,r)),d}function ke(n){n.draggable=!1}function Xn(){Ve=!1}function Kn(n,t,e){var i=k(kt(e.el,0,e.options,!0)),o=Vi(e.el,e.options,w),s=10;return t?n.clientX<o.left-s||n.clientY<i.top&&n.clientX<i.right:n.clientY<o.top-s||n.clientY<i.bottom&&n.clientX<i.left}function Yn(n,t,e){var i=k(Ke(e.el,e.options.draggable)),o=Vi(e.el,e.options,w),s=10;return t?n.clientX>o.right+s||n.clientY>i.bottom&&n.clientX>i.left:n.clientY>o.bottom+s||n.clientX>i.right&&n.clientY>i.top}function Un(n,t,e,i,o,s,r,a){var l=i?n.clientY:n.clientX,c=i?e.height:e.width,f=i?e.top:e.left,d=i?e.bottom:e.right,p=!1;if(!r){if(a&&ge<c*o){if(!Qt&&(Jt===1?l>f+c*s/2:l<d-c*s/2)&&(Qt=!0),Qt)p=!0;else if(Jt===1?l<f+ge:l>d-ge)return-Jt}else if(l>f+c*(1-o)/2&&l<d-c*(1-o)/2)return Gn(t)}return p=p||r,p&&(l<f+c*s/2||l>d-c*s/2)?l>f+c/2?1:-1:0}function Gn(n){return ot(h)<ot(n)?1:-1}function jn(n){for(var t=n.tagName+n.className+n.src+n.href+n.textContent,e=t.length,i=0;e--;)i+=t.charCodeAt(e);return i.toString(36)}function qn(n){Se.length=0;for(var t=n.getElementsByTagName(\"input\"),e=t.length;e--;){var i=t[e];i.checked&&Se.push(i)}}function me(n){return setTimeout(n,0)}function We(n){return clearTimeout(n)}Oe&&O(document,\"touchmove\",function(n){(v.active||Pt)&&n.cancelable&&n.preventDefault()});v.utils={on:O,off:x,css:b,find:ki,is:function(t,e){return!!lt(t,e,t,!1)},extend:Rn,throttle:Bi,closest:lt,toggleClass:Q,clone:Hi,index:ot,nextTick:me,cancelNextTick:We,detectDirection:zi,getChild:kt,expando:j};v.get=function(n){return n[j]};v.mount=function(){for(var n=arguments.length,t=new Array(n),e=0;e<n;e++)t[e]=arguments[e];t[0].constructor===Array&&(t=t[0]),t.forEach(function(i){if(!i.prototype||!i.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(i));i.utils&&(v.utils=ft(ft({},v.utils),i.utils)),te.mount(i)})};v.create=function(n,t){return new v(n,t)};v.version=Tn;var N=[],Yt,ze,$e=!1,Be,Fe,xe,Ut;function Jn(){function n(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)===\"_\"&&typeof this[t]==\"function\"&&(this[t]=this[t].bind(this))}return n.prototype={dragStarted:function(e){var i=e.originalEvent;this.sortable.nativeDraggable?O(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?O(document,\"pointermove\",this._handleFallbackAutoScroll):i.touches?O(document,\"touchmove\",this._handleFallbackAutoScroll):O(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var i=e.originalEvent;!this.options.dragOverBubble&&!i.rootEl&&this._handleAutoScroll(i)},drop:function(){this.sortable.nativeDraggable?x(document,\"dragover\",this._handleAutoScroll):(x(document,\"pointermove\",this._handleFallbackAutoScroll),x(document,\"touchmove\",this._handleFallbackAutoScroll),x(document,\"mousemove\",this._handleFallbackAutoScroll)),Ri(),be(),Pn()},nulling:function(){xe=ze=Yt=$e=Ut=Be=Fe=null,N.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,i){var o=this,s=(e.touches?e.touches[0]:e).clientX,r=(e.touches?e.touches[0]:e).clientY,a=document.elementFromPoint(s,r);if(xe=e,i||this.options.forceAutoScrollFallback||Zt||mt||Gt){He(e,this.options,a,i);var l=xt(a,!0);$e&&(!Ut||s!==Be||r!==Fe)&&(Ut&&Ri(),Ut=setInterval(function(){var c=xt(document.elementFromPoint(s,r),!0);c!==l&&(l=c,be()),He(e,o.options,c,i)},10),Be=s,Fe=r)}else{if(!this.options.bubbleScroll||xt(a,!0)===dt()){be();return}He(e,this.options,xt(a,!1),!1)}}},gt(n,{pluginName:\"scroll\",initializeByDefault:!0})}function be(){N.forEach(function(n){clearInterval(n.pid)}),N=[]}function Ri(){clearInterval(Ut)}var He=Bi(function(n,t,e,i){if(t.scroll){var o=(n.touches?n.touches[0]:n).clientX,s=(n.touches?n.touches[0]:n).clientY,r=t.scrollSensitivity,a=t.scrollSpeed,l=dt(),c=!1,f;ze!==e&&(ze=e,be(),Yt=t.scroll,f=t.scrollFn,Yt===!0&&(Yt=xt(e,!0)));var d=0,p=Yt;do{var u=p,g=k(u),m=g.top,S=g.bottom,E=g.left,y=g.right,D=g.width,A=g.height,C=void 0,F=void 0,q=u.scrollWidth,J=u.scrollHeight,_=b(u),W=u.scrollLeft,L=u.scrollTop;u===l?(C=D<q&&(_.overflowX===\"auto\"||_.overflowX===\"scroll\"||_.overflowX===\"visible\"),F=A<J&&(_.overflowY===\"auto\"||_.overflowY===\"scroll\"||_.overflowY===\"visible\")):(C=D<q&&(_.overflowX===\"auto\"||_.overflowX===\"scroll\"),F=A<J&&(_.overflowY===\"auto\"||_.overflowY===\"scroll\"));var X=C&&(Math.abs(y-o)<=r&&W+D<q)-(Math.abs(E-o)<=r&&!!W),M=F&&(Math.abs(S-s)<=r&&L+A<J)-(Math.abs(m-s)<=r&&!!L);if(!N[d])for(var H=0;H<=d;H++)N[H]||(N[H]={});(N[d].vx!=X||N[d].vy!=M||N[d].el!==u)&&(N[d].el=u,N[d].vx=X,N[d].vy=M,clearInterval(N[d].pid),(X!=0||M!=0)&&(c=!0,N[d].pid=setInterval(function(){i&&this.layer===0&&v.active._onTouchMove(xe);var tt=N[this.layer].vy?N[this.layer].vy*a:0,z=N[this.layer].vx?N[this.layer].vx*a:0;typeof f==\"function\"&&f.call(v.dragged.parentNode[j],z,tt,n,xe,N[this.layer].el)!==\"continue\"||Fi(N[this.layer].el,z,tt)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&p!==l&&(p=xt(p,!1)));$e=c}},30),Yi=function(t){var e=t.originalEvent,i=t.putSortable,o=t.dragEl,s=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,l=t.unhideGhostForTarget;if(e){var c=i||s;a();var f=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,d=document.elementFromPoint(f.clientX,f.clientY);l(),c&&!c.el.contains(d)&&(r(\"spill\"),this.onSpill({dragEl:o,putSortable:i}))}};function Ye(){}Ye.prototype={startIndex:null,dragStart:function(t){var e=t.oldDraggableIndex;this.startIndex=e},onSpill:function(t){var e=t.dragEl,i=t.putSortable;this.sortable.captureAnimationState(),i&&i.captureAnimationState();var o=kt(this.sortable.el,this.startIndex,this.options);o?this.sortable.el.insertBefore(e,o):this.sortable.el.appendChild(e),this.sortable.animateAll(),i&&i.animateAll()},drop:Yi};gt(Ye,{pluginName:\"revertOnSpill\"});function Ue(){}Ue.prototype={onSpill:function(t){var e=t.dragEl,i=t.putSortable,o=i||this.sortable;o.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),o.animateAll()},drop:Yi};gt(Ue,{pluginName:\"removeOnSpill\"});v.mount(new Jn);v.mount(Ue,Ye);var Ui=v;function bt(n){return n==null||n===\"\"||typeof n==\"string\"&&n.trim()===\"\"}function P(n){return!bt(n)}var Ee=class{constructor({canOptionLabelsWrap:t=!0,canSelectPlaceholder:e=!0,element:i,getOptionLabelUsing:o=null,getOptionLabelsUsing:s=null,getOptionsUsing:r=null,getSearchResultsUsing:a=null,hasDynamicOptions:l=!1,hasDynamicSearchResults:c=!0,hasInitialNoOptionsMessage:f=!1,initialOptionLabel:d=null,initialOptionLabels:p=null,initialState:u=null,isAutofocused:g=!1,isDisabled:m=!1,isHtmlAllowed:S=!1,isMultiple:E=!1,isReorderable:y=!1,isSearchable:D=!1,livewireId:A=null,loadingMessage:C=\"Loading...\",maxItems:F=null,maxItemsMessage:q=\"Maximum number of items selected\",noOptionsMessage:J=\"No options available\",noSearchResultsMessage:_=\"No results found\",onStateChange:W=()=>{},options:L,optionsLimit:X=null,placeholder:M,position:H=null,searchableOptionFields:tt=[\"label\"],searchDebounce:z=1e3,searchingMessage:Y=\"Searching...\",searchPrompt:B=\"Search...\",state:et,statePath:ee=null}){this.canOptionLabelsWrap=t,this.canSelectPlaceholder=e,this.element=i,this.getOptionLabelUsing=o,this.getOptionLabelsUsing=s,this.getOptionsUsing=r,this.getSearchResultsUsing=a,this.hasDynamicOptions=l,this.hasDynamicSearchResults=c,this.hasInitialNoOptionsMessage=f,this.initialOptionLabel=d,this.initialOptionLabels=p,this.initialState=u,this.isAutofocused=g,this.isDisabled=m,this.isHtmlAllowed=S,this.isMultiple=E,this.isReorderable=y,this.isSearchable=D,this.livewireId=A,this.loadingMessage=C,this.maxItems=F,this.maxItemsMessage=q,this.noOptionsMessage=J,this.noSearchResultsMessage=_,this.onStateChange=W,this.options=L,this.optionsLimit=X,this.originalOptions=JSON.parse(JSON.stringify(L)),this.placeholder=M,this.position=H,this.searchableOptionFields=Array.isArray(tt)?tt:[\"label\"],this.searchDebounce=z,this.searchingMessage=Y,this.searchPrompt=B,this.state=et,this.statePath=ee,this.activeSearchId=0,this.labelRepository={},this.isOpen=!1,this.selectedIndex=-1,this.searchQuery=\"\",this.searchTimeout=null,this.isSearching=!1,this.selectedDisplayVersion=0,this.render(),this.setUpEventListeners(),this.isAutofocused&&this.selectButton.focus()}populateLabelRepositoryFromOptions(t){if(!(!t||!Array.isArray(t)))for(let e of t)e.options&&Array.isArray(e.options)?this.populateLabelRepositoryFromOptions(e.options):e.value!==void 0&&e.label!==void 0&&(this.labelRepository[e.value]=e.label)}render(){this.populateLabelRepositoryFromOptions(this.options),this.container=document.createElement(\"div\"),this.container.className=\"fi-select-input-ctn\",this.canOptionLabelsWrap||this.container.classList.add(\"fi-select-input-ctn-option-labels-not-wrapped\"),this.container.setAttribute(\"aria-haspopup\",\"listbox\"),this.selectButton=document.createElement(\"button\"),this.selectButton.className=\"fi-select-input-btn\",this.selectButton.type=\"button\",this.selectButton.setAttribute(\"aria-expanded\",\"false\"),this.selectedDisplay=document.createElement(\"div\"),this.selectedDisplay.className=\"fi-select-input-value-ctn\",this.updateSelectedDisplay(),this.selectButton.appendChild(this.selectedDisplay),this.dropdown=document.createElement(\"div\"),this.dropdown.className=\"fi-dropdown-panel fi-scrollable\",this.dropdown.setAttribute(\"role\",\"listbox\"),this.dropdown.setAttribute(\"tabindex\",\"-1\"),this.dropdown.style.display=\"none\",this.dropdownId=`fi-select-input-dropdown-${Math.random().toString(36).substring(2,11)}`,this.dropdown.id=this.dropdownId,this.isMultiple&&this.dropdown.setAttribute(\"aria-multiselectable\",\"true\"),this.isSearchable&&(this.searchContainer=document.createElement(\"div\"),this.searchContainer.className=\"fi-select-input-search-ctn\",this.searchInput=document.createElement(\"input\"),this.searchInput.className=\"fi-input\",this.searchInput.type=\"text\",this.searchInput.placeholder=this.searchPrompt,this.searchInput.setAttribute(\"aria-label\",\"Search\"),this.searchContainer.appendChild(this.searchInput),this.dropdown.appendChild(this.searchContainer),this.searchInput.addEventListener(\"input\",t=>{this.isDisabled||this.handleSearch(t)}),this.searchInput.addEventListener(\"keydown\",t=>{if(!this.isDisabled){if(t.key===\"Tab\"){t.preventDefault();let e=this.getVisibleOptions();if(e.length===0)return;t.shiftKey?this.selectedIndex=e.length-1:this.selectedIndex=0,e.forEach(i=>{i.classList.remove(\"fi-selected\")}),e[this.selectedIndex].classList.add(\"fi-selected\"),e[this.selectedIndex].focus()}else if(t.key===\"ArrowDown\"){if(t.preventDefault(),t.stopPropagation(),this.getVisibleOptions().length===0)return;this.selectedIndex=-1,this.searchInput.blur(),this.focusNextOption()}else if(t.key===\"ArrowUp\"){t.preventDefault(),t.stopPropagation();let e=this.getVisibleOptions();if(e.length===0)return;this.selectedIndex=e.length-1,this.searchInput.blur(),e[this.selectedIndex].classList.add(\"fi-selected\"),e[this.selectedIndex].focus(),e[this.selectedIndex].id&&this.dropdown.setAttribute(\"aria-activedescendant\",e[this.selectedIndex].id),this.scrollOptionIntoView(e[this.selectedIndex])}else if(t.key===\"Enter\"){if(t.preventDefault(),t.stopPropagation(),this.isSearching)return;let e=this.getVisibleOptions();if(e.length===0)return;let i=e.find(s=>{let r=s.getAttribute(\"aria-disabled\")===\"true\",a=s.classList.contains(\"fi-disabled\"),l=s.offsetParent===null;return!(r||a||l)});if(!i)return;let o=i.getAttribute(\"data-value\");if(o===null)return;this.selectOption(o)}}})),this.optionsList=document.createElement(\"ul\"),this.renderOptions(),this.container.appendChild(this.selectButton),this.container.appendChild(this.dropdown),this.element.appendChild(this.container),this.applyDisabledState()}renderOptions(){this.optionsList.innerHTML=\"\";let t=0,e=this.options,i=0,o=!1;this.options.forEach(a=>{a.options&&Array.isArray(a.options)?(i+=a.options.length,o=!0):i++}),o?this.optionsList.className=\"fi-select-input-options-ctn\":i>0&&(this.optionsList.className=\"fi-dropdown-list\");let s=o?null:this.optionsList,r=0;for(let a of e){if(this.optionsLimit>0&&r>=this.optionsLimit)break;if(a.options&&Array.isArray(a.options)){let l=a.options;if(this.isMultiple&&Array.isArray(this.state)&&this.state.length>0&&(l=a.options.filter(c=>!this.state.includes(c.value))),l.length>0){if(this.optionsLimit>0){let c=this.optionsLimit-r;c<l.length&&(l=l.slice(0,c))}this.renderOptionGroup(a.label,l),r+=l.length,t+=l.length}}else{if(this.isMultiple&&Array.isArray(this.state)&&this.state.includes(a.value))continue;!s&&o&&(s=document.createElement(\"ul\"),s.className=\"fi-dropdown-list\",this.optionsList.appendChild(s));let l=this.createOptionElement(a.value,a);s.appendChild(l),r++,t++}}t===0?(this.searchQuery?this.showNoResultsMessage():this.hasInitialNoOptionsMessage||this.hasDynamicOptions?this.showNoOptionsMessage():this.isMultiple&&this.isOpen&&!this.isSearchable&&this.closeDropdown(),this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList)):(this.hideLoadingState(),this.optionsList.parentNode!==this.dropdown&&this.dropdown.appendChild(this.optionsList))}renderOptionGroup(t,e){if(e.length===0)return;let i=document.createElement(\"li\");i.className=\"fi-select-input-option-group\";let o=document.createElement(\"div\");o.className=\"fi-dropdown-header\",o.textContent=t;let s=document.createElement(\"ul\");s.className=\"fi-dropdown-list\",e.forEach(r=>{let a=this.createOptionElement(r.value,r);s.appendChild(a)}),i.appendChild(o),i.appendChild(s),this.optionsList.appendChild(i)}createOptionElement(t,e){let i=t,o=e,s=!1;typeof e==\"object\"&&e!==null&&\"label\"in e&&\"value\"in e&&(i=e.value,o=e.label,s=e.isDisabled||!1);let r=document.createElement(\"li\");r.className=\"fi-dropdown-list-item fi-select-input-option\",s&&r.classList.add(\"fi-disabled\");let a=`fi-select-input-option-${Math.random().toString(36).substring(2,11)}`;if(r.id=a,r.setAttribute(\"role\",\"option\"),r.setAttribute(\"data-value\",i),r.setAttribute(\"tabindex\",\"0\"),s&&r.setAttribute(\"aria-disabled\",\"true\"),this.isHtmlAllowed&&typeof o==\"string\"){let f=document.createElement(\"div\");f.innerHTML=o;let d=f.textContent||f.innerText||o;r.setAttribute(\"aria-label\",d)}let l=this.isMultiple?Array.isArray(this.state)&&this.state.includes(i):this.state===i;r.setAttribute(\"aria-selected\",l?\"true\":\"false\"),l&&r.classList.add(\"fi-selected\");let c=document.createElement(\"span\");return this.isHtmlAllowed?c.innerHTML=o:c.textContent=o,r.appendChild(c),s||r.addEventListener(\"click\",f=>{f.preventDefault(),f.stopPropagation(),this.selectOption(i),this.isMultiple&&(this.isSearchable&&this.searchInput?setTimeout(()=>{this.searchInput.focus()},0):setTimeout(()=>{r.focus()},0))}),r}async updateSelectedDisplay(){this.selectedDisplayVersion=this.selectedDisplayVersion+1;let t=this.selectedDisplayVersion,e=document.createDocumentFragment();if(this.isMultiple){if(!Array.isArray(this.state)||this.state.length===0){let o=document.createElement(\"span\");o.textContent=this.placeholder,o.classList.add(\"fi-select-input-placeholder\"),e.appendChild(o)}else{let o=await this.getLabelsForMultipleSelection();if(t!==this.selectedDisplayVersion)return;this.addBadgesForSelectedOptions(o,e)}t===this.selectedDisplayVersion&&(this.selectedDisplay.replaceChildren(e),this.isOpen&&this.deferPositionDropdown());return}if(this.state===null||this.state===\"\"){let o=document.createElement(\"span\");if(o.textContent=this.placeholder,o.classList.add(\"fi-select-input-placeholder\"),e.appendChild(o),t===this.selectedDisplayVersion){this.selectedDisplay.replaceChildren(e);let s=this.container.querySelector(\".fi-select-input-value-remove-btn\");s&&s.remove(),this.container.classList.remove(\"fi-select-input-ctn-clearable\")}return}let i=await this.getLabelForSingleSelection();t===this.selectedDisplayVersion&&(this.addSingleSelectionDisplay(i,e),t===this.selectedDisplayVersion&&this.selectedDisplay.replaceChildren(e))}async getLabelsForMultipleSelection(){let t=this.getSelectedOptionLabels(),e=[];if(Array.isArray(this.state)){for(let o of this.state)if(!P(this.labelRepository[o])){if(P(t[o])){this.labelRepository[o]=t[o];continue}e.push(o.toString())}}if(e.length>0&&P(this.initialOptionLabels)&&JSON.stringify(this.state)===JSON.stringify(this.initialState)){if(Array.isArray(this.initialOptionLabels))for(let o of this.initialOptionLabels)P(o)&&o.value!==void 0&&o.label!==void 0&&e.includes(o.value)&&(this.labelRepository[o.value]=o.label)}else if(e.length>0&&this.getOptionLabelsUsing)try{let o=await this.getOptionLabelsUsing();for(let s of o)P(s)&&s.value!==void 0&&s.label!==void 0&&(this.labelRepository[s.value]=s.label)}catch(o){console.error(\"Error fetching option labels:\",o)}let i=[];if(Array.isArray(this.state))for(let o of this.state)P(this.labelRepository[o])?i.push(this.labelRepository[o]):P(t[o])?i.push(t[o]):i.push(o);return i}createBadgeElement(t,e){let i=document.createElement(\"span\");i.className=\"fi-badge fi-size-md fi-color fi-color-primary fi-text-color-600 dark:fi-text-color-200\",P(t)&&i.setAttribute(\"data-value\",t);let o=document.createElement(\"span\");o.className=\"fi-badge-label-ctn\";let s=document.createElement(\"span\");s.className=\"fi-badge-label\",this.canOptionLabelsWrap&&s.classList.add(\"fi-wrapped\"),this.isHtmlAllowed?s.innerHTML=e:s.textContent=e,o.appendChild(s),i.appendChild(o);let r=this.createRemoveButton(t,e);return i.appendChild(r),i}createRemoveButton(t,e){let i=document.createElement(\"button\");return i.type=\"button\",i.className=\"fi-badge-delete-btn\",i.innerHTML='<svg class=\"fi-icon fi-size-xs\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\"><path d=\"M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z\"></path></svg>',i.setAttribute(\"aria-label\",\"Remove \"+(this.isHtmlAllowed?e.replace(/<[^>]*>/g,\"\"):e)),i.addEventListener(\"click\",o=>{o.stopPropagation(),P(t)&&this.selectOption(t)}),i.addEventListener(\"keydown\",o=>{(o.key===\" \"||o.key===\"Enter\")&&(o.preventDefault(),o.stopPropagation(),P(t)&&this.selectOption(t))}),i}addBadgesForSelectedOptions(t,e=this.selectedDisplay){let i=document.createElement(\"div\");i.className=\"fi-select-input-value-badges-ctn\",t.forEach((o,s)=>{let r=Array.isArray(this.state)?this.state[s]:null,a=this.createBadgeElement(r,o);i.appendChild(a)}),e.appendChild(i),this.isReorderable&&(i.addEventListener(\"click\",o=>{o.stopPropagation()}),i.addEventListener(\"mousedown\",o=>{o.stopPropagation()}),new Ui(i,{animation:150,onEnd:()=>{let o=[];i.querySelectorAll(\"[data-value]\").forEach(s=>{o.push(s.getAttribute(\"data-value\"))}),this.state=o,this.onStateChange(this.state)}}))}async getLabelForSingleSelection(){let t=this.labelRepository[this.state];if(bt(t)&&(t=this.getSelectedOptionLabel(this.state)),bt(t)&&P(this.initialOptionLabel)&&this.state===this.initialState)t=this.initialOptionLabel,P(this.state)&&(this.labelRepository[this.state]=t);else if(bt(t)&&this.getOptionLabelUsing)try{t=await this.getOptionLabelUsing(),P(t)&&P(this.state)&&(this.labelRepository[this.state]=t)}catch(e){console.error(\"Error fetching option label:\",e),t=this.state}else bt(t)&&(t=this.state);return t}addSingleSelectionDisplay(t,e=this.selectedDisplay){let i=document.createElement(\"span\");if(i.className=\"fi-select-input-value-label\",this.isHtmlAllowed?i.innerHTML=t:i.textContent=t,e.appendChild(i),!this.canSelectPlaceholder||this.container.querySelector(\".fi-select-input-value-remove-btn\"))return;let o=document.createElement(\"button\");o.type=\"button\",o.className=\"fi-select-input-value-remove-btn\",o.innerHTML='<svg class=\"fi-icon fi-size-sm\" viewBox=\"0 0 20 20\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\" /></svg>',o.setAttribute(\"aria-label\",\"Clear selection\"),o.addEventListener(\"click\",s=>{s.stopPropagation(),this.selectOption(\"\")}),o.addEventListener(\"keydown\",s=>{(s.key===\" \"||s.key===\"Enter\")&&(s.preventDefault(),s.stopPropagation(),this.selectOption(\"\"))}),this.container.appendChild(o),this.container.classList.add(\"fi-select-input-ctn-clearable\")}getSelectedOptionLabel(t){if(P(this.labelRepository[t]))return this.labelRepository[t];let e=\"\";for(let i of this.options)if(i.options&&Array.isArray(i.options)){for(let o of i.options)if(o.value===t){e=o.label,this.labelRepository[t]=e;break}}else if(i.value===t){e=i.label,this.labelRepository[t]=e;break}return e}setUpEventListeners(){this.buttonClickListener=()=>{this.toggleDropdown()},this.documentClickListener=t=>{!this.container.contains(t.target)&&this.isOpen&&this.closeDropdown()},this.buttonKeydownListener=t=>{this.isDisabled||this.handleSelectButtonKeydown(t)},this.dropdownKeydownListener=t=>{this.isDisabled||this.isSearchable&&document.activeElement===this.searchInput&&![\"Tab\",\"Escape\"].includes(t.key)||this.handleDropdownKeydown(t)},this.selectButton.addEventListener(\"click\",this.buttonClickListener),document.addEventListener(\"click\",this.documentClickListener),this.selectButton.addEventListener(\"keydown\",this.buttonKeydownListener),this.dropdown.addEventListener(\"keydown\",this.dropdownKeydownListener),!this.isMultiple&&this.livewireId&&this.statePath&&this.getOptionLabelUsing&&(this.refreshOptionLabelListener=async t=>{if(t.detail.livewireId===this.livewireId&&t.detail.statePath===this.statePath&&P(this.state))try{delete this.labelRepository[this.state];let e=await this.getOptionLabelUsing();P(e)&&(this.labelRepository[this.state]=e);let i=this.selectedDisplay.querySelector(\".fi-select-input-value-label\");P(i)&&(this.isHtmlAllowed?i.innerHTML=e:i.textContent=e),this.updateOptionLabelInList(this.state,e)}catch(e){console.error(\"Error refreshing option label:\",e)}},window.addEventListener(\"filament-forms::select.refreshSelectedOptionLabel\",this.refreshOptionLabelListener))}updateOptionLabelInList(t,e){this.labelRepository[t]=e;let i=this.getVisibleOptions();for(let o of i)if(o.getAttribute(\"data-value\")===String(t)){if(o.innerHTML=\"\",this.isHtmlAllowed){let s=document.createElement(\"span\");s.innerHTML=e,o.appendChild(s)}else o.appendChild(document.createTextNode(e));break}for(let o of this.options)if(o.options&&Array.isArray(o.options)){for(let s of o.options)if(s.value===t){s.label=e;break}}else if(o.value===t){o.label=e;break}for(let o of this.originalOptions)if(o.options&&Array.isArray(o.options)){for(let s of o.options)if(s.value===t){s.label=e;break}}else if(o.value===t){o.label=e;break}}handleSelectButtonKeydown(t){switch(t.key){case\"ArrowDown\":t.preventDefault(),t.stopPropagation(),this.isOpen?this.focusNextOption():this.openDropdown();break;case\"ArrowUp\":t.preventDefault(),t.stopPropagation(),this.isOpen?this.focusPreviousOption():this.openDropdown();break;case\" \":if(t.preventDefault(),this.isOpen){if(this.selectedIndex>=0){let e=this.getVisibleOptions()[this.selectedIndex];e&&e.click()}}else this.openDropdown();break;case\"Enter\":break;case\"Escape\":this.isOpen&&(t.preventDefault(),this.closeDropdown());break;case\"Tab\":this.isOpen&&this.closeDropdown();break;default:if(this.isSearchable&&!t.ctrlKey&&!t.metaKey&&!t.altKey&&typeof t.key==\"string\"&&t.key.length===1){t.preventDefault();let e=t.key;this.isOpen||this.openDropdown(),this.searchInput&&(this.searchInput.focus(),this.searchInput.value=(this.searchInput.value||\"\")+e,this.searchInput.dispatchEvent(new Event(\"input\",{bubbles:!0})))}break}}handleDropdownKeydown(t){switch(t.key){case\"ArrowDown\":t.preventDefault(),t.stopPropagation(),this.focusNextOption();break;case\"ArrowUp\":t.preventDefault(),t.stopPropagation(),this.focusPreviousOption();break;case\" \":if(t.preventDefault(),this.selectedIndex>=0){let e=this.getVisibleOptions()[this.selectedIndex];e&&e.click()}break;case\"Enter\":if(t.preventDefault(),this.selectedIndex>=0){let e=this.getVisibleOptions()[this.selectedIndex];e&&e.click()}else{let e=this.element.closest(\"form\");e&&e.submit()}break;case\"Escape\":t.preventDefault(),this.closeDropdown(),this.selectButton.focus();break;case\"Tab\":this.closeDropdown();break;default:if(this.isSearchable&&!t.ctrlKey&&!t.metaKey&&!t.altKey&&typeof t.key==\"string\"&&t.key.length===1){t.preventDefault();let e=t.key;this.searchInput&&(this.searchInput.focus(),this.searchInput.value=(this.searchInput.value||\"\")+e,this.searchInput.dispatchEvent(new Event(\"input\",{bubbles:!0})))}break}}toggleDropdown(){if(!this.isDisabled){if(this.isOpen){this.closeDropdown();return}this.isMultiple&&!this.isSearchable&&!this.hasAvailableOptions()||this.openDropdown()}}hasAvailableOptions(){for(let t of this.options)if(t.options&&Array.isArray(t.options)){for(let e of t.options)if(!Array.isArray(this.state)||!this.state.includes(e.value))return!0}else if(!Array.isArray(this.state)||!this.state.includes(t.value))return!0;return!1}async openDropdown(){this.dropdown.style.display=\"block\",this.dropdown.style.opacity=\"0\";let t=this.selectButton.closest(\".fi-fixed-positioning-context\")!==null&&this.selectButton.closest(\".fi-absolute-positioning-context\")===null;if(this.dropdown.style.position=t?\"fixed\":\"absolute\",this.dropdown.style.width=`${this.selectButton.offsetWidth}px`,this.selectButton.setAttribute(\"aria-expanded\",\"true\"),this.isOpen=!0,this.positionDropdown(),this.resizeListener||(this.resizeListener=()=>{this.dropdown.style.width=`${this.selectButton.offsetWidth}px`,this.positionDropdown()},window.addEventListener(\"resize\",this.resizeListener)),this.scrollListener||(this.scrollListener=()=>this.positionDropdown(),window.addEventListener(\"scroll\",this.scrollListener,!0)),this.dropdown.style.opacity=\"1\",this.isSearchable&&this.searchInput&&(this.searchInput.value=\"\",this.searchQuery=\"\",this.hasDynamicOptions||(this.options=JSON.parse(JSON.stringify(this.originalOptions)),this.renderOptions())),this.hasDynamicOptions&&this.getOptionsUsing){this.showLoadingState(!1);try{let e=await this.getOptionsUsing(),i=Array.isArray(e)?e:e&&Array.isArray(e.options)?e.options:[];if(this.options=i,this.originalOptions=JSON.parse(JSON.stringify(i)),this.populateLabelRepositoryFromOptions(i),this.isSearchable&&this.searchInput&&(this.searchInput.value&&this.searchInput.value.trim()!==\"\"||this.searchQuery&&this.searchQuery.trim()!==\"\")){let o=(this.searchInput.value||this.searchQuery||\"\").trim().toLowerCase();this.hideLoadingState(),this.filterOptions(o)}else this.renderOptions()}catch(e){console.error(\"Error fetching options:\",e),this.hideLoadingState()}}else(!this.hasInitialNoOptionsMessage||this.searchQuery)&&this.hideLoadingState();if(this.isSearchable&&this.searchInput)this.searchInput.focus();else{this.selectedIndex=-1;let e=this.getVisibleOptions();if(this.isMultiple){if(Array.isArray(this.state)&&this.state.length>0){for(let i=0;i<e.length;i++)if(this.state.includes(e[i].getAttribute(\"data-value\"))){this.selectedIndex=i;break}}}else for(let i=0;i<e.length;i++)if(e[i].getAttribute(\"data-value\")===this.state){this.selectedIndex=i;break}this.selectedIndex===-1&&e.length>0&&(this.selectedIndex=0),this.selectedIndex>=0&&(e[this.selectedIndex].classList.add(\"fi-selected\"),e[this.selectedIndex].focus())}}positionDropdown(){let t=this.position===\"top\"?\"top-start\":\"bottom-start\",e=[yi(4),Si({padding:5})];this.position!==\"top\"&&this.position!==\"bottom\"&&e.push(xi());let i=this.selectButton.closest(\".fi-fixed-positioning-context\")!==null&&this.selectButton.closest(\".fi-absolute-positioning-context\")===null;Oi(this.selectButton,this.dropdown,{placement:t,middleware:e,strategy:i?\"fixed\":\"absolute\"}).then(({x:o,y:s})=>{Object.assign(this.dropdown.style,{left:`${o}px`,top:`${s}px`})})}deferPositionDropdown(){this.isOpen&&(this.positioningRequestAnimationFrame&&(cancelAnimationFrame(this.positioningRequestAnimationFrame),this.positioningRequestAnimationFrame=null),this.positioningRequestAnimationFrame=requestAnimationFrame(()=>{this.positionDropdown(),this.positioningRequestAnimationFrame=null}))}closeDropdown(){this.dropdown.style.display=\"none\",this.selectButton.setAttribute(\"aria-expanded\",\"false\"),this.isOpen=!1,this.searchTimeout&&(clearTimeout(this.searchTimeout),this.searchTimeout=null),this.activeSearchId++,this.isSearching=!1,this.hideLoadingState(),this.resizeListener&&(window.removeEventListener(\"resize\",this.resizeListener),this.resizeListener=null),this.scrollListener&&(window.removeEventListener(\"scroll\",this.scrollListener,!0),this.scrollListener=null),this.getVisibleOptions().forEach(e=>{e.classList.remove(\"fi-selected\")}),this.dropdown.removeAttribute(\"aria-activedescendant\")}focusNextOption(){let t=this.getVisibleOptions();if(t.length!==0){if(this.selectedIndex>=0&&this.selectedIndex<t.length&&t[this.selectedIndex].classList.remove(\"fi-selected\"),this.selectedIndex===t.length-1&&this.isSearchable&&this.searchInput){this.selectedIndex=-1,this.searchInput.focus(),this.dropdown.removeAttribute(\"aria-activedescendant\");return}this.selectedIndex=(this.selectedIndex+1)%t.length,t[this.selectedIndex].classList.add(\"fi-selected\"),t[this.selectedIndex].focus(),t[this.selectedIndex].id&&this.dropdown.setAttribute(\"aria-activedescendant\",t[this.selectedIndex].id),this.scrollOptionIntoView(t[this.selectedIndex])}}focusPreviousOption(){let t=this.getVisibleOptions();if(t.length!==0){if(this.selectedIndex>=0&&this.selectedIndex<t.length&&t[this.selectedIndex].classList.remove(\"fi-selected\"),(this.selectedIndex===0||this.selectedIndex===-1)&&this.isSearchable&&this.searchInput){this.selectedIndex=-1,this.searchInput.focus(),this.dropdown.removeAttribute(\"aria-activedescendant\");return}this.selectedIndex=(this.selectedIndex-1+t.length)%t.length,t[this.selectedIndex].classList.add(\"fi-selected\"),t[this.selectedIndex].focus(),t[this.selectedIndex].id&&this.dropdown.setAttribute(\"aria-activedescendant\",t[this.selectedIndex].id),this.scrollOptionIntoView(t[this.selectedIndex])}}scrollOptionIntoView(t){if(!t)return;let e=this.dropdown.getBoundingClientRect(),i=t.getBoundingClientRect();i.bottom>e.bottom?this.dropdown.scrollTop+=i.bottom-e.bottom:i.top<e.top&&(this.dropdown.scrollTop-=e.top-i.top)}getVisibleOptions(){let t=[];this.optionsList.classList.contains(\"fi-dropdown-list\")?t=Array.from(this.optionsList.querySelectorAll(':scope > li[role=\"option\"]')):t=Array.from(this.optionsList.querySelectorAll(':scope > ul.fi-dropdown-list > li[role=\"option\"]'));let e=Array.from(this.optionsList.querySelectorAll('li.fi-select-input-option-group > ul > li[role=\"option\"]'));return[...t,...e]}getSelectedOptionLabels(){if(!Array.isArray(this.state)||this.state.length===0)return{};let t={};for(let e of this.state){let i=!1;for(let o of this.options)if(o.options&&Array.isArray(o.options)){for(let s of o.options)if(s.value===e){t[e]=s.label,i=!0;break}if(i)break}else if(o.value===e){t[e]=o.label,i=!0;break}}return t}handleSearch(t){let e=t.target.value.trim();if(this.searchQuery=e,this.searchTimeout&&clearTimeout(this.searchTimeout),e===\"\"){this.options=JSON.parse(JSON.stringify(this.originalOptions)),this.renderOptions();return}if(!this.getSearchResultsUsing||typeof this.getSearchResultsUsing!=\"function\"||!this.hasDynamicSearchResults){this.filterOptions(e);return}this.searchTimeout=setTimeout(async()=>{this.searchTimeout=null;let i=++this.activeSearchId;this.isSearching=!0;try{this.showLoadingState(!0);let o=await this.getSearchResultsUsing(e);if(i!==this.activeSearchId||!this.isOpen)return;let s=Array.isArray(o)?o:o&&Array.isArray(o.options)?o.options:[];this.options=s,this.populateLabelRepositoryFromOptions(s),this.hideLoadingState(),this.renderOptions(),this.isOpen&&this.deferPositionDropdown(),this.options.length===0&&this.showNoResultsMessage()}catch(o){i===this.activeSearchId&&(console.error(\"Error fetching search results:\",o),this.hideLoadingState(),this.options=JSON.parse(JSON.stringify(this.originalOptions)),this.renderOptions())}finally{i===this.activeSearchId&&(this.isSearching=!1)}},this.searchDebounce)}showLoadingState(t=!1){this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList),this.hideLoadingState();let e=document.createElement(\"div\");e.className=\"fi-select-input-message\",e.textContent=t?this.searchingMessage:this.loadingMessage,this.dropdown.appendChild(e),this.isOpen&&this.deferPositionDropdown()}hideLoadingState(){let t=this.dropdown.querySelector(\".fi-select-input-message\");t&&t.remove()}showNoOptionsMessage(){this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList),this.hideLoadingState();let t=document.createElement(\"div\");t.className=\"fi-select-input-message\",t.textContent=this.noOptionsMessage,this.dropdown.appendChild(t),this.isOpen&&this.deferPositionDropdown()}showNoResultsMessage(){this.optionsList.parentNode===this.dropdown&&this.dropdown.removeChild(this.optionsList),this.hideLoadingState();let t=document.createElement(\"div\");t.className=\"fi-select-input-message\",t.textContent=this.noSearchResultsMessage,this.dropdown.appendChild(t),this.isOpen&&this.deferPositionDropdown()}filterOptions(t){let e=this.searchableOptionFields.includes(\"label\"),i=this.searchableOptionFields.includes(\"value\");t=t.toLowerCase();let o=[];for(let s of this.originalOptions)if(s.options&&Array.isArray(s.options)){let r=s.options.filter(a=>e&&a.label.toLowerCase().includes(t)||i&&String(a.value).toLowerCase().includes(t));r.length>0&&o.push({label:s.label,options:r})}else(e&&s.label.toLowerCase().includes(t)||i&&String(s.value).toLowerCase().includes(t))&&o.push(s);this.options=o,this.renderOptions(),this.options.length===0&&this.showNoResultsMessage(),this.isOpen&&this.positionDropdown()}selectOption(t){if(this.isDisabled)return;if(!this.isMultiple){this.state=t,this.updateSelectedDisplay(),this.renderOptions(),this.closeDropdown(),this.selectButton.focus(),this.onStateChange(this.state);return}let e=Array.isArray(this.state)?[...this.state]:[];if(e.includes(t)){let o=this.selectedDisplay.querySelector(`[data-value=\"${t}\"]`);if(P(o)){let s=o.parentElement;P(s)&&s.children.length===1?(e=e.filter(r=>r!==t),this.state=e,this.updateSelectedDisplay()):(o.remove(),e=e.filter(r=>r!==t),this.state=e)}else e=e.filter(s=>s!==t),this.state=e,this.updateSelectedDisplay();this.renderOptions(),this.isOpen&&this.deferPositionDropdown(),this.maintainFocusInMultipleMode(),this.onStateChange(this.state);return}if(this.maxItems&&e.length>=this.maxItems){this.maxItemsMessage&&alert(this.maxItemsMessage);return}e.push(t),this.state=e;let i=this.selectedDisplay.querySelector(\".fi-select-input-value-badges-ctn\");bt(i)?this.updateSelectedDisplay():this.addSingleBadge(t,i),this.renderOptions(),this.isOpen&&this.deferPositionDropdown(),this.maintainFocusInMultipleMode(),this.onStateChange(this.state)}async addSingleBadge(t,e){let i=this.labelRepository[t];if(bt(i)&&(i=this.getSelectedOptionLabel(t),P(i)&&(this.labelRepository[t]=i)),bt(i)&&this.getOptionLabelsUsing)try{let s=await this.getOptionLabelsUsing();for(let r of s)if(P(r)&&r.value===t&&r.label!==void 0){i=r.label,this.labelRepository[t]=i;break}}catch(s){console.error(\"Error fetching option label:\",s)}bt(i)&&(i=t);let o=this.createBadgeElement(t,i);e.appendChild(o)}maintainFocusInMultipleMode(){if(this.isSearchable&&this.searchInput){this.searchInput.focus();return}let t=this.getVisibleOptions();if(t.length!==0){if(this.selectedIndex=-1,Array.isArray(this.state)&&this.state.length>0){for(let e=0;e<t.length;e++)if(this.state.includes(t[e].getAttribute(\"data-value\"))){this.selectedIndex=e;break}}this.selectedIndex===-1&&(this.selectedIndex=0),t[this.selectedIndex].classList.add(\"fi-selected\"),t[this.selectedIndex].focus()}}disable(){this.isDisabled||(this.isDisabled=!0,this.applyDisabledState(),this.isOpen&&this.closeDropdown())}enable(){this.isDisabled&&(this.isDisabled=!1,this.applyDisabledState())}applyDisabledState(){if(this.isDisabled){if(this.selectButton.setAttribute(\"disabled\",\"disabled\"),this.selectButton.setAttribute(\"aria-disabled\",\"true\"),this.selectButton.classList.add(\"fi-disabled\"),this.isMultiple&&this.container.querySelectorAll(\".fi-select-input-badge-remove\").forEach(e=>{e.setAttribute(\"disabled\",\"disabled\"),e.classList.add(\"fi-disabled\")}),!this.isMultiple&&this.canSelectPlaceholder){let t=this.container.querySelector(\".fi-select-input-value-remove-btn\");t&&(t.setAttribute(\"disabled\",\"disabled\"),t.classList.add(\"fi-disabled\"))}this.isSearchable&&this.searchInput&&(this.searchInput.setAttribute(\"disabled\",\"disabled\"),this.searchInput.classList.add(\"fi-disabled\"))}else{if(this.selectButton.removeAttribute(\"disabled\"),this.selectButton.removeAttribute(\"aria-disabled\"),this.selectButton.classList.remove(\"fi-disabled\"),this.isMultiple&&this.container.querySelectorAll(\".fi-select-input-badge-remove\").forEach(e=>{e.removeAttribute(\"disabled\"),e.classList.remove(\"fi-disabled\")}),!this.isMultiple&&this.canSelectPlaceholder){let t=this.container.querySelector(\".fi-select-input-value-remove-btn\");t&&(t.removeAttribute(\"disabled\"),t.classList.add(\"fi-disabled\"))}this.isSearchable&&this.searchInput&&(this.searchInput.removeAttribute(\"disabled\"),this.searchInput.classList.remove(\"fi-disabled\"))}}destroy(){this.selectButton&&this.buttonClickListener&&this.selectButton.removeEventListener(\"click\",this.buttonClickListener),this.documentClickListener&&document.removeEventListener(\"click\",this.documentClickListener),this.selectButton&&this.buttonKeydownListener&&this.selectButton.removeEventListener(\"keydown\",this.buttonKeydownListener),this.dropdown&&this.dropdownKeydownListener&&this.dropdown.removeEventListener(\"keydown\",this.dropdownKeydownListener),this.resizeListener&&(window.removeEventListener(\"resize\",this.resizeListener),this.resizeListener=null),this.scrollListener&&(window.removeEventListener(\"scroll\",this.scrollListener,!0),this.scrollListener=null),this.refreshOptionLabelListener&&window.removeEventListener(\"filament-forms::select.refreshSelectedOptionLabel\",this.refreshOptionLabelListener),this.isOpen&&this.closeDropdown(),this.searchTimeout&&(clearTimeout(this.searchTimeout),this.searchTimeout=null),this.container&&this.container.remove()}};function Qn({canOptionLabelsWrap:n,canSelectPlaceholder:t,getOptionLabelUsing:e,getOptionsUsing:i,getSearchResultsUsing:o,hasDynamicOptions:s,hasDynamicSearchResults:r,hasInitialNoOptionsMessage:a,initialOptionLabel:l,isDisabled:c,isHtmlAllowed:f,isNative:d,isSearchable:p,loadingMessage:u,name:g,noOptionsMessage:m,noSearchResultsMessage:S,options:E,optionsLimit:y,placeholder:D,position:A,recordKey:C,searchableOptionFields:F,searchDebounce:q,searchingMessage:J,searchPrompt:_,state:W}){return{error:void 0,isLoading:!1,select:null,state:W,unsubscribeLivewireHook:null,init(){d||(this.select=new Ee({canOptionLabelsWrap:n,canSelectPlaceholder:t,element:this.$refs.select,getOptionLabelUsing:e,getOptionsUsing:i,getSearchResultsUsing:o,hasDynamicOptions:s,hasDynamicSearchResults:r,hasInitialNoOptionsMessage:a,initialOptionLabel:l,isDisabled:c,isHtmlAllowed:f,isSearchable:p,loadingMessage:u,noOptionsMessage:m,noSearchResultsMessage:S,onStateChange:L=>{this.state=L},options:E,optionsLimit:y,placeholder:D,position:A,searchableOptionFields:F,searchDebounce:q,searchingMessage:J,searchPrompt:_,state:this.state})),this.unsubscribeLivewireHook=Livewire.interceptMessage(({message:L,onSuccess:X})=>{X(()=>{this.$nextTick(()=>{if(this.isLoading||L.component.id!==this.$root.closest(\"[wire\\\\:id]\")?.attributes[\"wire:id\"].value)return;let M=this.getServerState();M===void 0||this.getNormalizedState()===M||(this.state=M)})})}),this.$watch(\"state\",async L=>{!d&&this.select&&this.select.state!==L&&(this.select.state=L,this.select.updateSelectedDisplay(),this.select.renderOptions());let X=this.getServerState();if(X===void 0||this.getNormalizedState()===X)return;this.isLoading=!0;let M=await this.$wire.updateTableColumnState(g,C,this.state);this.error=M?.error??void 0,!this.error&&this.$refs.serverState&&(this.$refs.serverState.value=this.getNormalizedState()),this.isLoading=!1})},getServerState(){if(this.$refs.serverState)return[null,void 0].includes(this.$refs.serverState.value)?\"\":this.$refs.serverState.value.replaceAll('\\\\\"','\"')},getNormalizedState(){let L=Alpine.raw(this.state);return[null,void 0].includes(L)?\"\":L},destroy(){this.unsubscribeLivewireHook?.(),this.select&&(this.select.destroy(),this.select=null)}}}export{Qn as default};\n/*! Bundled license information:\n\nsortablejs/modular/sortable.esm.js:\n  (**!\n   * Sortable 1.15.6\n   * @author\tRubaXa   <trash@rubaxa.org>\n   * @author\towenm    <owen23355@gmail.com>\n   * @license MIT\n   *)\n*/\n"
  },
  {
    "path": "public/js/filament/tables/components/columns/text-input.js",
    "content": "function a({name:i,recordKey:s,state:n}){return{error:void 0,isLoading:!1,state:n,unsubscribeLivewireHook:null,init(){this.unsubscribeLivewireHook=Livewire.interceptMessage(({message:e,onSuccess:t})=>{t(()=>{this.$nextTick(()=>{if(this.isLoading||e.component.id!==this.$root.closest(\"[wire\\\\:id]\")?.attributes[\"wire:id\"].value)return;let r=this.getServerState();r===void 0||this.getNormalizedState()===r||(this.state=r)})})}),this.$watch(\"state\",async()=>{let e=this.getServerState();if(e===void 0||this.getNormalizedState()===e)return;this.isLoading=!0;let t=await this.$wire.updateTableColumnState(i,s,this.state);this.error=t?.error??void 0,!this.error&&this.$refs.serverState&&(this.$refs.serverState.value=this.getNormalizedState()),this.isLoading=!1})},getServerState(){if(this.$refs.serverState)return[null,void 0].includes(this.$refs.serverState.value)?\"\":this.$refs.serverState.value.replaceAll('\\\\\"','\"')},getNormalizedState(){let e=Alpine.raw(this.state);return[null,void 0].includes(e)?\"\":e},destroy(){this.unsubscribeLivewireHook?.()}}}export{a as default};\n"
  },
  {
    "path": "public/js/filament/tables/components/columns/toggle.js",
    "content": "function a({name:r,recordKey:s,state:n}){return{error:void 0,isLoading:!1,state:n,unsubscribeLivewireHook:null,init(){this.unsubscribeLivewireHook=Livewire.interceptMessage(({message:e,onSuccess:t})=>{t(()=>{this.$nextTick(()=>{if(this.isLoading||e.component.id!==this.$root.closest(\"[wire\\\\:id]\")?.attributes[\"wire:id\"].value)return;let i=this.getServerState();i===void 0||Alpine.raw(this.state)===i||(this.state=i)})})}),this.$watch(\"state\",async()=>{let e=this.getServerState();if(e===void 0||Alpine.raw(this.state)===e)return;this.isLoading=!0;let t=await this.$wire.updateTableColumnState(r,s,this.state);this.error=t?.error??void 0,!this.error&&this.$refs.serverState&&(this.$refs.serverState.value=this.state?\"1\":\"0\"),this.isLoading=!1})},getServerState(){if(this.$refs.serverState)return[1,\"1\"].includes(this.$refs.serverState.value)},destroy(){this.unsubscribeLivewireHook?.()}}}export{a as default};\n"
  },
  {
    "path": "public/js/filament/tables/components/table.js",
    "content": "function d(){return{checkboxClickController:null,collapsedGroups:[],isLoading:!1,selectedRecords:[],shouldCheckUniqueSelection:!0,lastCheckedRecord:null,livewireId:null,init:function(){this.livewireId=this.$root.closest(\"[wire\\\\:id]\").attributes[\"wire:id\"].value,this.$wire.$on(\"deselectAllTableRecords\",()=>this.deselectAllRecords()),this.$watch(\"selectedRecords\",()=>{if(!this.shouldCheckUniqueSelection){this.shouldCheckUniqueSelection=!0;return}this.selectedRecords=[...new Set(this.selectedRecords)],this.shouldCheckUniqueSelection=!1}),this.$nextTick(()=>this.watchForCheckboxClicks()),Livewire.hook(\"element.init\",({component:e})=>{e.id===this.livewireId&&this.watchForCheckboxClicks()})},mountAction:function(e,t=null){this.$wire.set(\"selectedTableRecords\",this.selectedRecords,!1),this.$wire.mountTableAction(e,t)},mountBulkAction:function(e){this.$wire.set(\"selectedTableRecords\",this.selectedRecords,!1),this.$wire.mountTableBulkAction(e)},toggleSelectRecordsOnPage:function(){let e=this.getRecordsOnPage();if(this.areRecordsSelected(e)){this.deselectRecords(e);return}this.selectRecords(e)},toggleSelectRecordsInGroup:async function(e){this.isLoading=!0;let t=await this.$wire.getGroupedSelectableTableRecordKeys(e);this.areRecordsSelected(this.getRecordsInGroupOnPage(e))?this.deselectRecords(t):this.selectRecords(t),this.isLoading=!1},getRecordsInGroupOnPage:function(e){let t=[];for(let s of this.$root?.getElementsByClassName(\"fi-ta-record-checkbox\")??[])s.dataset.group===e&&t.push(s.value);return t},getRecordsOnPage:function(){let e=[];for(let t of this.$root?.getElementsByClassName(\"fi-ta-record-checkbox\")??[])e.push(t.value);return e},selectRecords:function(e){for(let t of e)this.isRecordSelected(t)||this.selectedRecords.push(t)},deselectRecords:function(e){for(let t of e){let s=this.selectedRecords.indexOf(t);s!==-1&&this.selectedRecords.splice(s,1)}},selectAllRecords:async function(){this.isLoading=!0,this.selectedRecords=await this.$wire.getAllSelectableTableRecordKeys(),this.isLoading=!1},deselectAllRecords:function(){this.selectedRecords=[]},isRecordSelected:function(e){return this.selectedRecords.includes(e)},areRecordsSelected:function(e){return e.every(t=>this.isRecordSelected(t))},toggleCollapseGroup:function(e){if(this.isGroupCollapsed(e)){this.collapsedGroups.splice(this.collapsedGroups.indexOf(e),1);return}this.collapsedGroups.push(e)},isGroupCollapsed:function(e){return this.collapsedGroups.includes(e)},resetCollapsedGroups:function(){this.collapsedGroups=[]},watchForCheckboxClicks:function(){this.checkboxClickController&&this.checkboxClickController.abort(),this.checkboxClickController=new AbortController;let{signal:e}=this.checkboxClickController;this.$root?.addEventListener(\"click\",t=>t.target?.matches(\".fi-ta-record-checkbox\")&&this.handleCheckboxClick(t,t.target),{signal:e})},handleCheckboxClick:function(e,t){if(!this.lastChecked){this.lastChecked=t;return}if(e.shiftKey){let s=Array.from(this.$root?.getElementsByClassName(\"fi-ta-record-checkbox\")??[]);if(!s.includes(this.lastChecked)){this.lastChecked=t;return}let l=s.indexOf(this.lastChecked),r=s.indexOf(t),o=[l,r].sort((c,n)=>c-n),i=[];for(let c=o[0];c<=o[1];c++)s[c].checked=t.checked,i.push(s[c].value);t.checked?this.selectRecords(i):this.deselectRecords(i)}this.lastChecked=t}}}export{d as default};\n"
  },
  {
    "path": "public/js/filament/tables/tables.js",
    "content": "(()=>{var M=Math.min,L=Math.max,B=Math.round,H=Math.floor,S=e=>({x:e,y:e});function q(e,t,i){return L(e,M(t,i))}function j(e,t){return typeof e==\"function\"?e(t):e}function W(e){return e.split(\"-\")[0]}function Q(e){return e.split(\"-\")[1]}function Z(e){return e===\"x\"?\"y\":\"x\"}function oe(e){return e===\"y\"?\"height\":\"width\"}var Pe=new Set([\"top\",\"bottom\"]);function z(e){return Pe.has(W(e))?\"y\":\"x\"}function se(e){return Z(z(e))}function De(e){return{top:0,right:0,bottom:0,left:0,...e}}function re(e){return typeof e!=\"number\"?De(e):{top:e,right:e,bottom:e,left:e}}function E(e){let{x:t,y:i,width:n,height:s}=e;return{width:n,height:s,top:i,left:t,right:t+n,bottom:i+s,x:t,y:i}}function le(e,t,i){let{reference:n,floating:s}=e,l=z(t),o=se(t),r=oe(o),c=W(t),a=l===\"y\",f=n.x+n.width/2-s.width/2,d=n.y+n.height/2-s.height/2,h=n[r]/2-s[r]/2,u;switch(c){case\"top\":u={x:f,y:n.y-s.height};break;case\"bottom\":u={x:f,y:n.y+n.height};break;case\"right\":u={x:n.x+n.width,y:d};break;case\"left\":u={x:n.x-s.width,y:d};break;default:u={x:n.x,y:n.y}}switch(Q(t)){case\"start\":u[o]-=h*(i&&a?-1:1);break;case\"end\":u[o]+=h*(i&&a?-1:1);break}return u}var ce=async(e,t,i)=>{let{placement:n=\"bottom\",strategy:s=\"absolute\",middleware:l=[],platform:o}=i,r=l.filter(Boolean),c=await(o.isRTL==null?void 0:o.isRTL(t)),a=await o.getElementRects({reference:e,floating:t,strategy:s}),{x:f,y:d}=le(a,n,c),h=n,u={},m=0;for(let p=0;p<r.length;p++){let{name:w,fn:g}=r[p],{x,y,data:A,reset:b}=await g({x:f,y:d,initialPlacement:n,placement:h,strategy:s,middlewareData:u,rects:a,platform:o,elements:{reference:e,floating:t}});f=x??f,d=y??d,u={...u,[w]:{...u[w],...A}},b&&m<=50&&(m++,typeof b==\"object\"&&(b.placement&&(h=b.placement),b.rects&&(a=b.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:s}):b.rects),{x:f,y:d}=le(a,h,c)),p=-1)}return{x:f,y:d,placement:h,strategy:s,middlewareData:u}};async function ae(e,t){var i;t===void 0&&(t={});let{x:n,y:s,platform:l,rects:o,elements:r,strategy:c}=e,{boundary:a=\"clippingAncestors\",rootBoundary:f=\"viewport\",elementContext:d=\"floating\",altBoundary:h=!1,padding:u=0}=j(t,e),m=re(u),w=r[h?d===\"floating\"?\"reference\":\"floating\":d],g=E(await l.getClippingRect({element:(i=await(l.isElement==null?void 0:l.isElement(w)))==null||i?w:w.contextElement||await(l.getDocumentElement==null?void 0:l.getDocumentElement(r.floating)),boundary:a,rootBoundary:f,strategy:c})),x=d===\"floating\"?{x:n,y:s,width:o.floating.width,height:o.floating.height}:o.reference,y=await(l.getOffsetParent==null?void 0:l.getOffsetParent(r.floating)),A=await(l.isElement==null?void 0:l.isElement(y))?await(l.getScale==null?void 0:l.getScale(y))||{x:1,y:1}:{x:1,y:1},b=E(l.convertOffsetParentRelativeRectToViewportRelativeRect?await l.convertOffsetParentRelativeRectToViewportRelativeRect({elements:r,rect:x,offsetParent:y,strategy:c}):x);return{top:(g.top-b.top+m.top)/A.y,bottom:(b.bottom-g.bottom+m.bottom)/A.y,left:(g.left-b.left+m.left)/A.x,right:(b.right-g.right+m.right)/A.x}}var Fe=new Set([\"left\",\"top\"]);async function Me(e,t){let{placement:i,platform:n,elements:s}=e,l=await(n.isRTL==null?void 0:n.isRTL(s.floating)),o=W(i),r=Q(i),c=z(i)===\"y\",a=Fe.has(o)?-1:1,f=l&&c?-1:1,d=j(t,e),{mainAxis:h,crossAxis:u,alignmentAxis:m}=typeof d==\"number\"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return r&&typeof m==\"number\"&&(u=r===\"end\"?m*-1:m),c?{x:u*f,y:h*a}:{x:h*a,y:u*f}}var fe=function(e){return e===void 0&&(e=0),{name:\"offset\",options:e,async fn(t){var i,n;let{x:s,y:l,placement:o,middlewareData:r}=t,c=await Me(t,e);return o===((i=r.offset)==null?void 0:i.placement)&&(n=r.arrow)!=null&&n.alignmentOffset?{}:{x:s+c.x,y:l+c.y,data:{...c,placement:o}}}}},de=function(e){return e===void 0&&(e={}),{name:\"shift\",options:e,async fn(t){let{x:i,y:n,placement:s}=t,{mainAxis:l=!0,crossAxis:o=!1,limiter:r={fn:w=>{let{x:g,y:x}=w;return{x:g,y:x}}},...c}=j(e,t),a={x:i,y:n},f=await ae(t,c),d=z(W(s)),h=Z(d),u=a[h],m=a[d];if(l){let w=h===\"y\"?\"top\":\"left\",g=h===\"y\"?\"bottom\":\"right\",x=u+f[w],y=u-f[g];u=q(x,u,y)}if(o){let w=d===\"y\"?\"top\":\"left\",g=d===\"y\"?\"bottom\":\"right\",x=m+f[w],y=m-f[g];m=q(x,m,y)}let p=r.fn({...t,[h]:u,[d]:m});return{...p,data:{x:p.x-i,y:p.y-n,enabled:{[h]:l,[d]:o}}}}}};function X(){return typeof window<\"u\"}function P(e){return he(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function v(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function O(e){var t;return(t=(he(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function he(e){return X()?e instanceof Node||e instanceof v(e).Node:!1}function R(e){return X()?e instanceof Element||e instanceof v(e).Element:!1}function T(e){return X()?e instanceof HTMLElement||e instanceof v(e).HTMLElement:!1}function ue(e){return!X()||typeof ShadowRoot>\"u\"?!1:e instanceof ShadowRoot||e instanceof v(e).ShadowRoot}var $e=new Set([\"inline\",\"contents\"]);function N(e){let{overflow:t,overflowX:i,overflowY:n,display:s}=C(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+i)&&!$e.has(s)}var Ne=new Set([\"table\",\"td\",\"th\"]);function me(e){return Ne.has(P(e))}var Ve=[\":popover-open\",\":modal\"];function _(e){return Ve.some(t=>{try{return e.matches(t)}catch{return!1}})}var Be=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],He=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],We=[\"paint\",\"layout\",\"strict\",\"content\"];function Y(e){let t=G(),i=R(e)?C(e):e;return Be.some(n=>i[n]?i[n]!==\"none\":!1)||(i.containerType?i.containerType!==\"normal\":!1)||!t&&(i.backdropFilter?i.backdropFilter!==\"none\":!1)||!t&&(i.filter?i.filter!==\"none\":!1)||He.some(n=>(i.willChange||\"\").includes(n))||We.some(n=>(i.contain||\"\").includes(n))}function ge(e){let t=k(e);for(;T(t)&&!D(t);){if(Y(t))return t;if(_(t))return null;t=k(t)}return null}function G(){return typeof CSS>\"u\"||!CSS.supports?!1:CSS.supports(\"-webkit-backdrop-filter\",\"none\")}var ze=new Set([\"html\",\"body\",\"#document\"]);function D(e){return ze.has(P(e))}function C(e){return v(e).getComputedStyle(e)}function I(e){return R(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function k(e){if(P(e)===\"html\")return e;let t=e.assignedSlot||e.parentNode||ue(e)&&e.host||O(e);return ue(t)?t.host:t}function pe(e){let t=k(e);return D(t)?e.ownerDocument?e.ownerDocument.body:e.body:T(t)&&N(t)?t:pe(t)}function $(e,t,i){var n;t===void 0&&(t=[]),i===void 0&&(i=!0);let s=pe(e),l=s===((n=e.ownerDocument)==null?void 0:n.body),o=v(s);if(l){let r=J(o);return t.concat(o,o.visualViewport||[],N(s)?s:[],r&&i?$(r):[])}return t.concat(s,$(s,[],i))}function J(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function be(e){let t=C(e),i=parseFloat(t.width)||0,n=parseFloat(t.height)||0,s=T(e),l=s?e.offsetWidth:i,o=s?e.offsetHeight:n,r=B(i)!==l||B(n)!==o;return r&&(i=l,n=o),{width:i,height:n,$:r}}function te(e){return R(e)?e:e.contextElement}function V(e){let t=te(e);if(!T(t))return S(1);let i=t.getBoundingClientRect(),{width:n,height:s,$:l}=be(t),o=(l?B(i.width):i.width)/n,r=(l?B(i.height):i.height)/s;return(!o||!Number.isFinite(o))&&(o=1),(!r||!Number.isFinite(r))&&(r=1),{x:o,y:r}}var _e=S(0);function ve(e){let t=v(e);return!G()||!t.visualViewport?_e:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Ie(e,t,i){return t===void 0&&(t=!1),!i||t&&i!==v(e)?!1:t}function F(e,t,i,n){t===void 0&&(t=!1),i===void 0&&(i=!1);let s=e.getBoundingClientRect(),l=te(e),o=S(1);t&&(n?R(n)&&(o=V(n)):o=V(e));let r=Ie(l,i,n)?ve(l):S(0),c=(s.left+r.x)/o.x,a=(s.top+r.y)/o.y,f=s.width/o.x,d=s.height/o.y;if(l){let h=v(l),u=n&&R(n)?v(n):n,m=h,p=J(m);for(;p&&n&&u!==m;){let w=V(p),g=p.getBoundingClientRect(),x=C(p),y=g.left+(p.clientLeft+parseFloat(x.paddingLeft))*w.x,A=g.top+(p.clientTop+parseFloat(x.paddingTop))*w.y;c*=w.x,a*=w.y,f*=w.x,d*=w.y,c+=y,a+=A,m=v(p),p=J(m)}}return E({width:f,height:d,x:c,y:a})}function K(e,t){let i=I(e).scrollLeft;return t?t.left+i:F(O(e)).left+i}function Re(e,t){let i=e.getBoundingClientRect(),n=i.left+t.scrollLeft-K(e,i),s=i.top+t.scrollTop;return{x:n,y:s}}function Ue(e){let{elements:t,rect:i,offsetParent:n,strategy:s}=e,l=s===\"fixed\",o=O(n),r=t?_(t.floating):!1;if(n===o||r&&l)return i;let c={scrollLeft:0,scrollTop:0},a=S(1),f=S(0),d=T(n);if((d||!d&&!l)&&((P(n)!==\"body\"||N(o))&&(c=I(n)),T(n))){let u=F(n);a=V(n),f.x=u.x+n.clientLeft,f.y=u.y+n.clientTop}let h=o&&!d&&!l?Re(o,c):S(0);return{width:i.width*a.x,height:i.height*a.y,x:i.x*a.x-c.scrollLeft*a.x+f.x+h.x,y:i.y*a.y-c.scrollTop*a.y+f.y+h.y}}function je(e){return Array.from(e.getClientRects())}function Xe(e){let t=O(e),i=I(e),n=e.ownerDocument.body,s=L(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),l=L(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight),o=-i.scrollLeft+K(e),r=-i.scrollTop;return C(n).direction===\"rtl\"&&(o+=L(t.clientWidth,n.clientWidth)-s),{width:s,height:l,x:o,y:r}}var we=25;function Ye(e,t){let i=v(e),n=O(e),s=i.visualViewport,l=n.clientWidth,o=n.clientHeight,r=0,c=0;if(s){l=s.width,o=s.height;let f=G();(!f||f&&t===\"fixed\")&&(r=s.offsetLeft,c=s.offsetTop)}let a=K(n);if(a<=0){let f=n.ownerDocument,d=f.body,h=getComputedStyle(d),u=f.compatMode===\"CSS1Compat\"&&parseFloat(h.marginLeft)+parseFloat(h.marginRight)||0,m=Math.abs(n.clientWidth-d.clientWidth-u);m<=we&&(l-=m)}else a<=we&&(l+=a);return{width:l,height:o,x:r,y:c}}var Ge=new Set([\"absolute\",\"fixed\"]);function Je(e,t){let i=F(e,!0,t===\"fixed\"),n=i.top+e.clientTop,s=i.left+e.clientLeft,l=T(e)?V(e):S(1),o=e.clientWidth*l.x,r=e.clientHeight*l.y,c=s*l.x,a=n*l.y;return{width:o,height:r,x:c,y:a}}function xe(e,t,i){let n;if(t===\"viewport\")n=Ye(e,i);else if(t===\"document\")n=Xe(O(e));else if(R(t))n=Je(t,i);else{let s=ve(e);n={x:t.x-s.x,y:t.y-s.y,width:t.width,height:t.height}}return E(n)}function Ce(e,t){let i=k(e);return i===t||!R(i)||D(i)?!1:C(i).position===\"fixed\"||Ce(i,t)}function Ke(e,t){let i=t.get(e);if(i)return i;let n=$(e,[],!1).filter(r=>R(r)&&P(r)!==\"body\"),s=null,l=C(e).position===\"fixed\",o=l?k(e):e;for(;R(o)&&!D(o);){let r=C(o),c=Y(o);!c&&r.position===\"fixed\"&&(s=null),(l?!c&&!s:!c&&r.position===\"static\"&&!!s&&Ge.has(s.position)||N(o)&&!c&&Ce(e,o))?n=n.filter(f=>f!==o):s=r,o=k(o)}return t.set(e,n),n}function qe(e){let{element:t,boundary:i,rootBoundary:n,strategy:s}=e,o=[...i===\"clippingAncestors\"?_(t)?[]:Ke(t,this._c):[].concat(i),n],r=o[0],c=o.reduce((a,f)=>{let d=xe(t,f,s);return a.top=L(d.top,a.top),a.right=M(d.right,a.right),a.bottom=M(d.bottom,a.bottom),a.left=L(d.left,a.left),a},xe(t,r,s));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Qe(e){let{width:t,height:i}=be(e);return{width:t,height:i}}function Ze(e,t,i){let n=T(t),s=O(t),l=i===\"fixed\",o=F(e,!0,l,t),r={scrollLeft:0,scrollTop:0},c=S(0);function a(){c.x=K(s)}if(n||!n&&!l)if((P(t)!==\"body\"||N(s))&&(r=I(t)),n){let u=F(t,!0,l,t);c.x=u.x+t.clientLeft,c.y=u.y+t.clientTop}else s&&a();l&&!n&&s&&a();let f=s&&!n&&!l?Re(s,r):S(0),d=o.left+r.scrollLeft-c.x-f.x,h=o.top+r.scrollTop-c.y-f.y;return{x:d,y:h,width:o.width,height:o.height}}function ee(e){return C(e).position===\"static\"}function ye(e,t){if(!T(e)||C(e).position===\"fixed\")return null;if(t)return t(e);let i=e.offsetParent;return O(e)===i&&(i=i.ownerDocument.body),i}function Ae(e,t){let i=v(e);if(_(e))return i;if(!T(e)){let s=k(e);for(;s&&!D(s);){if(R(s)&&!ee(s))return s;s=k(s)}return i}let n=ye(e,t);for(;n&&me(n)&&ee(n);)n=ye(n,t);return n&&D(n)&&ee(n)&&!Y(n)?i:n||ge(e)||i}var et=async function(e){let t=this.getOffsetParent||Ae,i=this.getDimensions,n=await i(e.floating);return{reference:Ze(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}};function tt(e){return C(e).direction===\"rtl\"}var nt={convertOffsetParentRelativeRectToViewportRelativeRect:Ue,getDocumentElement:O,getClippingRect:qe,getOffsetParent:Ae,getElementRects:et,getClientRects:je,getDimensions:Qe,getScale:V,isElement:R,isRTL:tt};function Se(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function it(e,t){let i=null,n,s=O(e);function l(){var r;clearTimeout(n),(r=i)==null||r.disconnect(),i=null}function o(r,c){r===void 0&&(r=!1),c===void 0&&(c=1),l();let a=e.getBoundingClientRect(),{left:f,top:d,width:h,height:u}=a;if(r||t(),!h||!u)return;let m=H(d),p=H(s.clientWidth-(f+h)),w=H(s.clientHeight-(d+u)),g=H(f),y={rootMargin:-m+\"px \"+-p+\"px \"+-w+\"px \"+-g+\"px\",threshold:L(0,M(1,c))||1},A=!0;function b(ie){let U=ie[0].intersectionRatio;if(U!==c){if(!A)return o();U?o(!1,U):n=setTimeout(()=>{o(!1,1e-7)},1e3)}U===1&&!Se(a,e.getBoundingClientRect())&&o(),A=!1}try{i=new IntersectionObserver(b,{...y,root:s.ownerDocument})}catch{i=new IntersectionObserver(b,y)}i.observe(e)}return o(!0),l}function Oe(e,t,i,n){n===void 0&&(n={});let{ancestorScroll:s=!0,ancestorResize:l=!0,elementResize:o=typeof ResizeObserver==\"function\",layoutShift:r=typeof IntersectionObserver==\"function\",animationFrame:c=!1}=n,a=te(e),f=s||l?[...a?$(a):[],...$(t)]:[];f.forEach(g=>{s&&g.addEventListener(\"scroll\",i,{passive:!0}),l&&g.addEventListener(\"resize\",i)});let d=a&&r?it(a,i):null,h=-1,u=null;o&&(u=new ResizeObserver(g=>{let[x]=g;x&&x.target===a&&u&&(u.unobserve(t),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var y;(y=u)==null||y.observe(t)})),i()}),a&&!c&&u.observe(a),u.observe(t));let m,p=c?F(e):null;c&&w();function w(){let g=F(e);p&&!Se(p,g)&&i(),p=g,m=requestAnimationFrame(w)}return i(),()=>{var g;f.forEach(x=>{s&&x.removeEventListener(\"scroll\",i),l&&x.removeEventListener(\"resize\",i)}),d?.(),(g=u)==null||g.disconnect(),u=null,c&&cancelAnimationFrame(m)}}var Te=fe;var Le=de;var ke=(e,t,i)=>{let n=new Map,s={platform:nt,...i},l={...s.platform,_c:n};return ce(e,t,{...s,platform:l})};var Ee=({areGroupsCollapsedByDefault:e,canTrackDeselectedRecords:t,currentSelectionLivewireProperty:i,maxSelectableRecords:n,selectsCurrentPageOnly:s,$wire:l})=>({areFiltersOpen:!1,checkboxClickController:null,groupVisibility:[],isLoading:!1,selectedRecords:new Set,deselectedRecords:new Set,isTrackingDeselectedRecords:!1,shouldCheckUniqueSelection:!0,lastCheckedRecord:null,livewireId:null,entangledSelectedRecords:i?l.$entangle(i):null,cleanUpFiltersDropdown:null,unsubscribeLivewireHook:null,init(){this.livewireId=this.$root.closest(\"[wire\\\\:id]\")?.attributes[\"wire:id\"].value,l.$on(\"deselectAllTableRecords\",()=>this.deselectAllRecords()),l.$on(\"scrollToTopOfTable\",()=>this.$root.scrollIntoView({block:\"start\",inline:\"nearest\"})),i&&(n!==1?this.selectedRecords=new Set(this.entangledSelectedRecords):this.selectedRecords=new Set(this.entangledSelectedRecords?[this.entangledSelectedRecords]:[])),this.$nextTick(()=>this.watchForCheckboxClicks()),this.unsubscribeLivewireHook=Livewire.hook(\"element.init\",({component:o})=>{o.id===this.livewireId&&this.watchForCheckboxClicks()})},mountAction(...o){l.set(\"isTrackingDeselectedTableRecords\",this.isTrackingDeselectedRecords,!1),l.set(\"selectedTableRecords\",[...this.selectedRecords],!1),l.set(\"deselectedTableRecords\",[...this.deselectedRecords],!1),l.mountAction(...o)},toggleSelectRecordsOnPage(){let o=this.getRecordsOnPage();if(this.areRecordsSelected(o)){this.deselectRecords(o);return}this.selectRecords(o)},toggleSelectRecords(o){this.areRecordsSelected(o)?this.deselectRecords(o):this.selectRecords(o)},getSelectedRecordsCount(){return this.isTrackingDeselectedRecords?(this.$refs.allSelectableRecordsCount?.value??this.deselectedRecords.size)-this.deselectedRecords.size:this.selectedRecords.size},getRecordsOnPage(){let o=[];for(let r of this.$root?.getElementsByClassName(\"fi-ta-record-checkbox\")??[])o.push(r.value);return o},selectRecords(o){n===1&&(this.deselectAllRecords(),o=o.slice(0,1));for(let r of o)if(!this.isRecordSelected(r)){if(this.isTrackingDeselectedRecords){this.deselectedRecords.delete(r);continue}this.selectedRecords.add(r)}this.updatedSelectedRecords()},deselectRecords(o){for(let r of o){if(this.isTrackingDeselectedRecords){this.deselectedRecords.add(r);continue}this.selectedRecords.delete(r)}this.updatedSelectedRecords()},updatedSelectedRecords(){if(n!==1){this.entangledSelectedRecords=[...this.selectedRecords];return}this.entangledSelectedRecords=[...this.selectedRecords][0]??null},toggleSelectedRecord(o){if(this.isRecordSelected(o)){this.deselectRecords([o]);return}this.selectRecords([o])},async selectAllRecords(){if(!t||s){this.isLoading=!0,this.selectedRecords=new Set(await l.getAllSelectableTableRecordKeys()),this.updatedSelectedRecords(),this.isLoading=!1;return}this.isTrackingDeselectedRecords=!0,this.selectedRecords=new Set,this.deselectedRecords=new Set,this.updatedSelectedRecords()},canSelectAllRecords(){if(s){let c=this.getRecordsOnPage();return!this.areRecordsSelected(c)&&this.areRecordsToggleable(c)}let o=parseInt(this.$refs.allSelectableRecordsCount?.value);if(!o)return!1;let r=this.getSelectedRecordsCount();return o===r?!1:n===null||o<=n},deselectAllRecords(){this.isTrackingDeselectedRecords=!1,this.selectedRecords=new Set,this.deselectedRecords=new Set,this.updatedSelectedRecords()},isRecordSelected(o){return this.isTrackingDeselectedRecords?!this.deselectedRecords.has(o):this.selectedRecords.has(o)},areRecordsSelected(o){return o.every(r=>this.isRecordSelected(r))},areRecordsToggleable(o){if(n===null||n===1)return!0;let r=o.filter(c=>this.isRecordSelected(c));return r.length===o.length?!0:this.getSelectedRecordsCount()+(o.length-r.length)<=n},toggleCollapseGroup(o){this.isGroupCollapsed(o)?e?this.groupVisibility.push(o):this.groupVisibility.splice(this.groupVisibility.indexOf(o),1):e?this.groupVisibility.splice(this.groupVisibility.indexOf(o),1):this.groupVisibility.push(o)},isGroupCollapsed(o){return e?!this.groupVisibility.includes(o):this.groupVisibility.includes(o)},resetCollapsedGroups(){this.groupVisibility=[]},watchForCheckboxClicks(){this.checkboxClickController&&this.checkboxClickController.abort(),this.checkboxClickController=new AbortController;let{signal:o}=this.checkboxClickController;this.$root?.addEventListener(\"click\",r=>r.target?.matches(\".fi-ta-record-checkbox\")&&this.handleCheckboxClick(r,r.target),{signal:o})},handleCheckboxClick(o,r){if(!this.lastChecked){this.lastChecked=r;return}if(o.shiftKey){let c=Array.from(this.$root?.getElementsByClassName(\"fi-ta-record-checkbox\")??[]);if(!c.includes(this.lastChecked)){this.lastChecked=r;return}let a=c.indexOf(this.lastChecked),f=c.indexOf(r),d=[a,f].sort((u,m)=>u-m),h=[];for(let u=d[0];u<=d[1];u++)h.push(c[u].value);if(r.checked){if(!this.areRecordsToggleable(h)){r.checked=!1,this.deselectRecords([r.value]);return}this.selectRecords(h)}else this.deselectRecords(h)}this.lastChecked=r},toggleFiltersDropdown(){if(this.areFiltersOpen=!this.areFiltersOpen,this.areFiltersOpen){let o=Oe(this.$refs.filtersTriggerActionContainer,this.$refs.filtersContentContainer,async()=>{let{x:a,y:f}=await ke(this.$refs.filtersTriggerActionContainer,this.$refs.filtersContentContainer,{placement:\"bottom-end\",middleware:[Te(8),Le({padding:8})]});Object.assign(this.$refs.filtersContentContainer.style,{left:`${a}px`,top:`${f}px`})}),r=a=>{let f=this.$refs.filtersTriggerActionContainer,d=this.$refs.filtersContentContainer;d&&d.contains(a.target)||f&&f.contains(a.target)||(this.areFiltersOpen=!1,this.cleanUpFiltersDropdown&&(this.cleanUpFiltersDropdown(),this.cleanUpFiltersDropdown=null))};document.addEventListener(\"mousedown\",r),document.addEventListener(\"touchstart\",r,{passive:!0});let c=a=>{a.key===\"Escape\"&&r(a)};document.addEventListener(\"keydown\",c),this.cleanUpFiltersDropdown=()=>{o(),document.removeEventListener(\"mousedown\",r),document.removeEventListener(\"touchstart\",r,{passive:!0}),document.removeEventListener(\"keydown\",c)}}else this.cleanUpFiltersDropdown&&(this.cleanUpFiltersDropdown(),this.cleanUpFiltersDropdown=null)},destroy(){this.unsubscribeLivewireHook?.()}});function ne({columns:e,isLive:t}){return{error:void 0,isLoading:!1,deferredColumns:[],columns:e,isLive:t,hasReordered:!1,init(){if(!this.columns||this.columns.length===0){this.columns=[];return}this.deferredColumns=JSON.parse(JSON.stringify(this.columns)),this.$watch(\"columns\",()=>{this.resetDeferredColumns()})},get groupedColumns(){let i={};return this.deferredColumns.filter(n=>n.type===\"group\").forEach(n=>{i[n.name]=this.calculateGroupedColumns(n)}),i},calculateGroupedColumns(i){if((i?.columns?.filter(r=>!r.isHidden)??[]).length===0)return{hidden:!0,checked:!1,disabled:!1,indeterminate:!1};let s=i.columns.filter(r=>!r.isHidden&&r.isToggleable!==!1);if(s.length===0)return{checked:!0,disabled:!0,indeterminate:!1};let l=s.filter(r=>r.isToggled).length,o=i.columns.filter(r=>!r.isHidden&&r.isToggleable===!1);return l===0&&o.length>0?{checked:!0,disabled:!1,indeterminate:!0}:l===0?{checked:!1,disabled:!1,indeterminate:!1}:l===s.length?{checked:!0,disabled:!1,indeterminate:!1}:{checked:!0,disabled:!1,indeterminate:!0}},getColumn(i,n=null){return n?this.deferredColumns.find(l=>l.type===\"group\"&&l.name===n)?.columns?.find(l=>l.name===i):this.deferredColumns.find(s=>s.name===i)},toggleGroup(i){let n=this.deferredColumns.find(c=>c.type===\"group\"&&c.name===i);if(!n?.columns)return;let s=this.calculateGroupedColumns(n);if(s.disabled)return;let o=n.columns.filter(c=>c.isToggleable!==!1).some(c=>c.isToggled),r=s.indeterminate?!0:!o;n.columns.filter(c=>c.isToggleable!==!1).forEach(c=>{c.isToggled=r}),this.deferredColumns=[...this.deferredColumns],this.isLive&&this.applyTableColumnManager()},toggleColumn(i,n=null){let s=this.getColumn(i,n);!s||s.isToggleable===!1||(s.isToggled=!s.isToggled,this.deferredColumns=[...this.deferredColumns],this.isLive&&this.applyTableColumnManager())},reorderColumns(i){let n=i.map(s=>s.split(\"::\"));this.reorderTopLevel(n),this.hasReordered=!0,this.isLive&&this.applyTableColumnManager()},reorderGroupColumns(i,n){let s=this.deferredColumns.find(r=>r.type===\"group\"&&r.name===n);if(!s)return;let l=i.map(r=>r.split(\"::\")),o=[];l.forEach(([r,c])=>{let a=s.columns.find(f=>f.name===c);a&&o.push(a)}),s.columns=o,this.deferredColumns=[...this.deferredColumns],this.hasReordered=!0,this.isLive&&this.applyTableColumnManager()},reorderTopLevel(i){let n=this.deferredColumns,s=[];i.forEach(([l,o])=>{let r=n.find(c=>l===\"group\"?c.type===\"group\"&&c.name===o:l===\"column\"?c.type!==\"group\"&&c.name===o:!1);r&&s.push(r)}),this.deferredColumns=s},async applyTableColumnManager(){this.isLoading=!0;try{this.columns=JSON.parse(JSON.stringify(this.deferredColumns)),await this.$wire.call(\"applyTableColumnManager\",this.columns,this.hasReordered),this.hasReordered=!1,this.error=void 0}catch(i){this.error=\"Failed to update column visibility\",console.error(\"Table toggle columns error:\",i)}finally{this.isLoading=!1}},resetDeferredColumns(){this.deferredColumns=JSON.parse(JSON.stringify(this.columns)),this.hasReordered=!1}}}document.addEventListener(\"alpine:init\",()=>{window.Alpine.data(\"filamentTable\",Ee),window.Alpine.data(\"filamentTableColumnManager\",ne)});})();\n"
  },
  {
    "path": "public/js/filament/widgets/components/chart.js",
    "content": "var Sc=Object.defineProperty;var Mc=(s,t,e)=>t in s?Sc(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var v=(s,t,e)=>Mc(s,typeof t!=\"symbol\"?t+\"\":t,e);function us(s){return s+.5|0}var Zt=(s,t,e)=>Math.max(Math.min(s,e),t);function cs(s){return Zt(us(s*2.55),0,255)}function qt(s){return Zt(us(s*255),0,255)}function Nt(s){return Zt(us(s/2.55)/100,0,1)}function No(s){return Zt(us(s*100),0,100)}var pt={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Zi=[...\"0123456789ABCDEF\"],Oc=s=>Zi[s&15],Tc=s=>Zi[(s&240)>>4]+Zi[s&15],Us=s=>(s&240)>>4===(s&15),Dc=s=>Us(s.r)&&Us(s.g)&&Us(s.b)&&Us(s.a);function Cc(s){var t=s.length,e;return s[0]===\"#\"&&(t===4||t===5?e={r:255&pt[s[1]]*17,g:255&pt[s[2]]*17,b:255&pt[s[3]]*17,a:t===5?pt[s[4]]*17:255}:(t===7||t===9)&&(e={r:pt[s[1]]<<4|pt[s[2]],g:pt[s[3]]<<4|pt[s[4]],b:pt[s[5]]<<4|pt[s[6]],a:t===9?pt[s[7]]<<4|pt[s[8]]:255})),e}var Pc=(s,t)=>s<255?t(s):\"\";function Ac(s){var t=Dc(s)?Oc:Tc;return s?\"#\"+t(s.r)+t(s.g)+t(s.b)+Pc(s.a,t):void 0}var Ic=/^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function Bo(s,t,e){let i=t*Math.min(e,1-e),n=(o,r=(o+s/30)%12)=>e-i*Math.max(Math.min(r-3,9-r,1),-1);return[n(0),n(8),n(4)]}function Ec(s,t,e){let i=(n,o=(n+s/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[i(5),i(3),i(1)]}function Lc(s,t,e){let i=Bo(s,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)i[n]*=1-t-e,i[n]+=t;return i}function Fc(s,t,e,i,n){return s===n?(t-e)/i+(t<e?6:0):t===n?(e-s)/i+2:(s-t)/i+4}function qi(s){let e=s.r/255,i=s.g/255,n=s.b/255,o=Math.max(e,i,n),r=Math.min(e,i,n),a=(o+r)/2,l,c,h;return o!==r&&(h=o-r,c=a>.5?h/(2-o-r):h/(o+r),l=Fc(e,i,n,h,o),l=l*60+.5),[l|0,c||0,a]}function Gi(s,t,e,i){return(Array.isArray(t)?s(t[0],t[1],t[2]):s(t,e,i)).map(qt)}function Xi(s,t,e){return Gi(Bo,s,t,e)}function Rc(s,t,e){return Gi(Lc,s,t,e)}function Nc(s,t,e){return Gi(Ec,s,t,e)}function Ho(s){return(s%360+360)%360}function zc(s){let t=Ic.exec(s),e=255,i;if(!t)return;t[5]!==i&&(e=t[6]?cs(+t[5]):qt(+t[5]));let n=Ho(+t[2]),o=+t[3]/100,r=+t[4]/100;return t[1]===\"hwb\"?i=Rc(n,o,r):t[1]===\"hsv\"?i=Nc(n,o,r):i=Xi(n,o,r),{r:i[0],g:i[1],b:i[2],a:e}}function Vc(s,t){var e=qi(s);e[0]=Ho(e[0]+t),e=Xi(e),s.r=e[0],s.g=e[1],s.b=e[2]}function Wc(s){if(!s)return;let t=qi(s),e=t[0],i=No(t[1]),n=No(t[2]);return s.a<255?`hsla(${e}, ${i}%, ${n}%, ${Nt(s.a)})`:`hsl(${e}, ${i}%, ${n}%)`}var zo={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},Vo={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};function Bc(){let s={},t=Object.keys(Vo),e=Object.keys(zo),i,n,o,r,a;for(i=0;i<t.length;i++){for(r=a=t[i],n=0;n<e.length;n++)o=e[n],a=a.replace(o,zo[o]);o=parseInt(Vo[r],16),s[a]=[o>>16&255,o>>8&255,o&255]}return s}var Ys;function Hc(s){Ys||(Ys=Bc(),Ys.transparent=[0,0,0,0]);let t=Ys[s.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var $c=/^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function jc(s){let t=$c.exec(s),e=255,i,n,o;if(t){if(t[7]!==i){let r=+t[7];e=t[8]?cs(r):Zt(r*255,0,255)}return i=+t[1],n=+t[3],o=+t[5],i=255&(t[2]?cs(i):Zt(i,0,255)),n=255&(t[4]?cs(n):Zt(n,0,255)),o=255&(t[6]?cs(o):Zt(o,0,255)),{r:i,g:n,b:o,a:e}}}function Uc(s){return s&&(s.a<255?`rgba(${s.r}, ${s.g}, ${s.b}, ${Nt(s.a)})`:`rgb(${s.r}, ${s.g}, ${s.b})`)}var Yi=s=>s<=.0031308?s*12.92:Math.pow(s,1/2.4)*1.055-.055,De=s=>s<=.04045?s/12.92:Math.pow((s+.055)/1.055,2.4);function Yc(s,t,e){let i=De(Nt(s.r)),n=De(Nt(s.g)),o=De(Nt(s.b));return{r:qt(Yi(i+e*(De(Nt(t.r))-i))),g:qt(Yi(n+e*(De(Nt(t.g))-n))),b:qt(Yi(o+e*(De(Nt(t.b))-o))),a:s.a+e*(t.a-s.a)}}function Zs(s,t,e){if(s){let i=qi(s);i[t]=Math.max(0,Math.min(i[t]+i[t]*e,t===0?360:1)),i=Xi(i),s.r=i[0],s.g=i[1],s.b=i[2]}}function $o(s,t){return s&&Object.assign(t||{},s)}function Wo(s){var t={r:0,g:0,b:0,a:255};return Array.isArray(s)?s.length>=3&&(t={r:s[0],g:s[1],b:s[2],a:255},s.length>3&&(t.a=qt(s[3]))):(t=$o(s,{r:0,g:0,b:0,a:1}),t.a=qt(t.a)),t}function Zc(s){return s.charAt(0)===\"r\"?jc(s):zc(s)}var hs=class s{constructor(t){if(t instanceof s)return t;let e=typeof t,i;e===\"object\"?i=Wo(t):e===\"string\"&&(i=Cc(t)||Hc(t)||Zc(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=$o(this._rgb);return t&&(t.a=Nt(t.a)),t}set rgb(t){this._rgb=Wo(t)}rgbString(){return this._valid?Uc(this._rgb):void 0}hexString(){return this._valid?Ac(this._rgb):void 0}hslString(){return this._valid?Wc(this._rgb):void 0}mix(t,e){if(t){let i=this.rgb,n=t.rgb,o,r=e===o?.5:e,a=2*r-1,l=i.a-n.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;o=1-c,i.r=255&c*i.r+o*n.r+.5,i.g=255&c*i.g+o*n.g+.5,i.b=255&c*i.b+o*n.b+.5,i.a=r*i.a+(1-r)*n.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=Yc(this._rgb,t._rgb,e)),this}clone(){return new s(this.rgb)}alpha(t){return this._rgb.a=qt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=us(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Zs(this._rgb,2,t),this}darken(t){return Zs(this._rgb,2,-t),this}saturate(t){return Zs(this._rgb,1,t),this}desaturate(t){return Zs(this._rgb,1,-t),this}rotate(t){return Vc(this._rgb,t),this}};function At(){}var tr=(()=>{let s=0;return()=>s++})();function I(s){return s==null}function H(s){if(Array.isArray&&Array.isArray(s))return!0;let t=Object.prototype.toString.call(s);return t.slice(0,7)===\"[object\"&&t.slice(-6)===\"Array]\"}function E(s){return s!==null&&Object.prototype.toString.call(s)===\"[object Object]\"}function Z(s){return(typeof s==\"number\"||s instanceof Number)&&isFinite(+s)}function at(s,t){return Z(s)?s:t}function P(s,t){return typeof s>\"u\"?t:s}var er=(s,t)=>typeof s==\"string\"&&s.endsWith(\"%\")?parseFloat(s)/100:+s/t,tn=(s,t)=>typeof s==\"string\"&&s.endsWith(\"%\")?parseFloat(s)/100*t:+s;function W(s,t,e){if(s&&typeof s.call==\"function\")return s.apply(e,t)}function z(s,t,e,i){let n,o,r;if(H(s))if(o=s.length,i)for(n=o-1;n>=0;n--)t.call(e,s[n],n);else for(n=0;n<o;n++)t.call(e,s[n],n);else if(E(s))for(r=Object.keys(s),o=r.length,n=0;n<o;n++)t.call(e,s[r[n]],r[n])}function gs(s,t){let e,i,n,o;if(!s||!t||s.length!==t.length)return!1;for(e=0,i=s.length;e<i;++e)if(n=s[e],o=t[e],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function Js(s){if(H(s))return s.map(Js);if(E(s)){let t=Object.create(null),e=Object.keys(s),i=e.length,n=0;for(;n<i;++n)t[e[n]]=Js(s[e[n]]);return t}return s}function sr(s){return[\"__proto__\",\"prototype\",\"constructor\"].indexOf(s)===-1}function qc(s,t,e,i){if(!sr(s))return;let n=t[s],o=e[s];E(n)&&E(o)?Pe(n,o,i):t[s]=Js(o)}function Pe(s,t,e){let i=H(t)?t:[t],n=i.length;if(!E(s))return s;e=e||{};let o=e.merger||qc,r;for(let a=0;a<n;++a){if(r=i[a],!E(r))continue;let l=Object.keys(r);for(let c=0,h=l.length;c<h;++c)o(l[c],s,r,e)}return s}function Ie(s,t){return Pe(s,t,{merger:Gc})}function Gc(s,t,e){if(!sr(s))return;let i=t[s],n=e[s];E(i)&&E(n)?Ie(i,n):Object.prototype.hasOwnProperty.call(t,s)||(t[s]=Js(n))}var jo={\"\":s=>s,x:s=>s.x,y:s=>s.y};function Xc(s){let t=s.split(\".\"),e=[],i=\"\";for(let n of t)i+=n,i.endsWith(\"\\\\\")?i=i.slice(0,-1)+\".\":(e.push(i),i=\"\");return e}function Jc(s){let t=Xc(s);return e=>{for(let i of t){if(i===\"\")break;e=e&&e[i]}return e}}function Wt(s,t){return(jo[t]||(jo[t]=Jc(t)))(s)}function ei(s){return s.charAt(0).toUpperCase()+s.slice(1)}var Ee=s=>typeof s<\"u\",zt=s=>typeof s==\"function\",en=(s,t)=>{if(s.size!==t.size)return!1;for(let e of s)if(!t.has(e))return!1;return!0};function ir(s){return s.type===\"mouseup\"||s.type===\"click\"||s.type===\"contextmenu\"}var F=Math.PI,$=2*F,Kc=$+F,Ks=Number.POSITIVE_INFINITY,Qc=F/180,q=F/2,he=F/4,Uo=F*2/3,Vt=Math.log10,St=Math.sign;function Le(s,t,e){return Math.abs(s-t)<e}function sn(s){let t=Math.round(s);s=Le(s,t,s/1e3)?t:s;let e=Math.pow(10,Math.floor(Vt(s))),i=s/e;return(i<=1?1:i<=2?2:i<=5?5:10)*e}function nr(s){let t=[],e=Math.sqrt(s),i;for(i=1;i<e;i++)s%i===0&&(t.push(i),t.push(s/i));return e===(e|0)&&t.push(e),t.sort((n,o)=>n-o).pop(),t}function th(s){return typeof s==\"symbol\"||typeof s==\"object\"&&s!==null&&!(Symbol.toPrimitive in s||\"toString\"in s||\"valueOf\"in s)}function fe(s){return!th(s)&&!isNaN(parseFloat(s))&&isFinite(s)}function or(s,t){let e=Math.round(s);return e-t<=s&&e+t>=s}function nn(s,t,e){let i,n,o;for(i=0,n=s.length;i<n;i++)o=s[i][e],isNaN(o)||(t.min=Math.min(t.min,o),t.max=Math.max(t.max,o))}function bt(s){return s*(F/180)}function si(s){return s*(180/F)}function on(s){if(!Z(s))return;let t=1,e=0;for(;Math.round(s*t)/t!==s;)t*=10,e++;return e}function rn(s,t){let e=t.x-s.x,i=t.y-s.y,n=Math.sqrt(e*e+i*i),o=Math.atan2(i,e);return o<-.5*F&&(o+=$),{angle:o,distance:n}}function Qs(s,t){return Math.sqrt(Math.pow(t.x-s.x,2)+Math.pow(t.y-s.y,2))}function eh(s,t){return(s-t+Kc)%$-F}function st(s){return(s%$+$)%$}function Fe(s,t,e,i){let n=st(s),o=st(t),r=st(e),a=st(o-n),l=st(r-n),c=st(n-o),h=st(n-r);return n===o||n===r||i&&o===r||a>l&&c<h}function K(s,t,e){return Math.max(t,Math.min(e,s))}function rr(s){return K(s,-32768,32767)}function It(s,t,e,i=1e-6){return s>=Math.min(t,e)-i&&s<=Math.max(t,e)+i}function ii(s,t,e){e=e||(r=>s[r]<t);let i=s.length-1,n=0,o;for(;i-n>1;)o=n+i>>1,e(o)?n=o:i=o;return{lo:n,hi:i}}var Ct=(s,t,e,i)=>ii(s,e,i?n=>{let o=s[n][t];return o<e||o===e&&s[n+1][t]===e}:n=>s[n][t]<e),ar=(s,t,e)=>ii(s,e,i=>s[i][t]>=e);function lr(s,t,e){let i=0,n=s.length;for(;i<n&&s[i]<t;)i++;for(;n>i&&s[n-1]>e;)n--;return i>0||n<s.length?s.slice(i,n):s}var cr=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function hr(s,t){if(s._chartjs){s._chartjs.listeners.push(t);return}Object.defineProperty(s,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),cr.forEach(e=>{let i=\"_onData\"+ei(e),n=s[e];Object.defineProperty(s,e,{configurable:!0,enumerable:!1,value(...o){let r=n.apply(this,o);return s._chartjs.listeners.forEach(a=>{typeof a[i]==\"function\"&&a[i](...o)}),r}})})}function an(s,t){let e=s._chartjs;if(!e)return;let i=e.listeners,n=i.indexOf(t);n!==-1&&i.splice(n,1),!(i.length>0)&&(cr.forEach(o=>{delete s[o]}),delete s._chartjs)}function ln(s){let t=new Set(s);return t.size===s.length?s:Array.from(t)}var cn=(function(){return typeof window>\"u\"?function(s){return s()}:window.requestAnimationFrame})();function hn(s,t){let e=[],i=!1;return function(...n){e=n,i||(i=!0,cn.call(window,()=>{i=!1,s.apply(t,e)}))}}function ur(s,t){let e;return function(...i){return t?(clearTimeout(e),e=setTimeout(s,t,i)):s.apply(this,i),t}}var ni=s=>s===\"start\"?\"left\":s===\"end\"?\"right\":\"center\",it=(s,t,e)=>s===\"start\"?t:s===\"end\"?e:(t+e)/2,dr=(s,t,e,i)=>s===(i?\"left\":\"right\")?e:s===\"center\"?(t+e)/2:t;function un(s,t,e){let i=t.length,n=0,o=i;if(s._sorted){let{iScale:r,vScale:a,_parsed:l}=s,c=s.dataset&&s.dataset.options?s.dataset.options.spanGaps:null,h=r.axis,{min:u,max:d,minDefined:f,maxDefined:g}=r.getUserBounds();if(f){if(n=Math.min(Ct(l,h,u).lo,e?i:Ct(t,h,r.getPixelForValue(u)).lo),c){let m=l.slice(0,n+1).reverse().findIndex(p=>!I(p[a.axis]));n-=Math.max(0,m)}n=K(n,0,i-1)}if(g){let m=Math.max(Ct(l,r.axis,d,!0).hi+1,e?0:Ct(t,h,r.getPixelForValue(d),!0).hi+1);if(c){let p=l.slice(m-1).findIndex(b=>!I(b[a.axis]));m+=Math.max(0,p)}o=K(m,n,i)-n}else o=i-n}return{start:n,count:o}}function dn(s){let{xScale:t,yScale:e,_scaleRanges:i}=s,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!i)return s._scaleRanges=n,!0;let o=i.xmin!==t.min||i.xmax!==t.max||i.ymin!==e.min||i.ymax!==e.max;return Object.assign(i,n),o}var qs=s=>s===0||s===1,Yo=(s,t,e)=>-(Math.pow(2,10*(s-=1))*Math.sin((s-t)*$/e)),Zo=(s,t,e)=>Math.pow(2,-10*s)*Math.sin((s-t)*$/e)+1,Ce={linear:s=>s,easeInQuad:s=>s*s,easeOutQuad:s=>-s*(s-2),easeInOutQuad:s=>(s/=.5)<1?.5*s*s:-.5*(--s*(s-2)-1),easeInCubic:s=>s*s*s,easeOutCubic:s=>(s-=1)*s*s+1,easeInOutCubic:s=>(s/=.5)<1?.5*s*s*s:.5*((s-=2)*s*s+2),easeInQuart:s=>s*s*s*s,easeOutQuart:s=>-((s-=1)*s*s*s-1),easeInOutQuart:s=>(s/=.5)<1?.5*s*s*s*s:-.5*((s-=2)*s*s*s-2),easeInQuint:s=>s*s*s*s*s,easeOutQuint:s=>(s-=1)*s*s*s*s+1,easeInOutQuint:s=>(s/=.5)<1?.5*s*s*s*s*s:.5*((s-=2)*s*s*s*s+2),easeInSine:s=>-Math.cos(s*q)+1,easeOutSine:s=>Math.sin(s*q),easeInOutSine:s=>-.5*(Math.cos(F*s)-1),easeInExpo:s=>s===0?0:Math.pow(2,10*(s-1)),easeOutExpo:s=>s===1?1:-Math.pow(2,-10*s)+1,easeInOutExpo:s=>qs(s)?s:s<.5?.5*Math.pow(2,10*(s*2-1)):.5*(-Math.pow(2,-10*(s*2-1))+2),easeInCirc:s=>s>=1?s:-(Math.sqrt(1-s*s)-1),easeOutCirc:s=>Math.sqrt(1-(s-=1)*s),easeInOutCirc:s=>(s/=.5)<1?-.5*(Math.sqrt(1-s*s)-1):.5*(Math.sqrt(1-(s-=2)*s)+1),easeInElastic:s=>qs(s)?s:Yo(s,.075,.3),easeOutElastic:s=>qs(s)?s:Zo(s,.075,.3),easeInOutElastic(s){return qs(s)?s:s<.5?.5*Yo(s*2,.1125,.45):.5+.5*Zo(s*2-1,.1125,.45)},easeInBack(s){return s*s*((1.70158+1)*s-1.70158)},easeOutBack(s){return(s-=1)*s*((1.70158+1)*s+1.70158)+1},easeInOutBack(s){let t=1.70158;return(s/=.5)<1?.5*(s*s*(((t*=1.525)+1)*s-t)):.5*((s-=2)*s*(((t*=1.525)+1)*s+t)+2)},easeInBounce:s=>1-Ce.easeOutBounce(1-s),easeOutBounce(s){return s<1/2.75?7.5625*s*s:s<2/2.75?7.5625*(s-=1.5/2.75)*s+.75:s<2.5/2.75?7.5625*(s-=2.25/2.75)*s+.9375:7.5625*(s-=2.625/2.75)*s+.984375},easeInOutBounce:s=>s<.5?Ce.easeInBounce(s*2)*.5:Ce.easeOutBounce(s*2-1)*.5+.5};function fn(s){if(s&&typeof s==\"object\"){let t=s.toString();return t===\"[object CanvasPattern]\"||t===\"[object CanvasGradient]\"}return!1}function gn(s){return fn(s)?s:new hs(s)}function Ji(s){return fn(s)?s:new hs(s).saturate(.5).darken(.1).hexString()}var sh=[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"],ih=[\"color\",\"borderColor\",\"backgroundColor\"];function nh(s){s.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),s.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>t!==\"onProgress\"&&t!==\"onComplete\"&&t!==\"fn\"}),s.set(\"animations\",{colors:{type:\"color\",properties:ih},numbers:{type:\"number\",properties:sh}}),s.describe(\"animations\",{_fallback:\"animation\"}),s.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>t|0}}}})}function oh(s){s.set(\"layout\",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var qo=new Map;function rh(s,t){t=t||{};let e=s+JSON.stringify(t),i=qo.get(e);return i||(i=new Intl.NumberFormat(s,t),qo.set(e,i)),i}function Re(s,t,e){return rh(t,e).format(s)}var fr={values(s){return H(s)?s:\"\"+s},numeric(s,t,e){if(s===0)return\"0\";let i=this.chart.options.locale,n,o=s;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n=\"scientific\"),o=ah(s,e)}let r=Vt(Math.abs(o)),a=isNaN(r)?1:Math.max(Math.min(-1*Math.floor(r),20),0),l={notation:n,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),Re(s,i,l)},logarithmic(s,t,e){if(s===0)return\"0\";let i=e[t].significand||s/Math.pow(10,Math.floor(Vt(s)));return[1,2,3,5,10,15].includes(i)||t>.8*e.length?fr.numeric.call(this,s,t,e):\"\"}};function ah(s,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&s!==Math.floor(s)&&(e=s-Math.floor(s)),e}var ms={formatters:fr};function lh(s){s.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ms.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),s.route(\"scale.ticks\",\"color\",\"\",\"color\"),s.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),s.route(\"scale.border\",\"color\",\"\",\"borderColor\"),s.route(\"scale.title\",\"color\",\"\",\"color\"),s.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&t!==\"callback\"&&t!==\"parser\",_indexable:t=>t!==\"borderDash\"&&t!==\"tickBorderDash\"&&t!==\"dash\"}),s.describe(\"scales\",{_fallback:\"scale\"}),s.describe(\"scale.ticks\",{_scriptable:t=>t!==\"backdropPadding\"&&t!==\"callback\",_indexable:t=>t!==\"backdropPadding\"})}var Jt=Object.create(null),oi=Object.create(null);function ds(s,t){if(!t)return s;let e=t.split(\".\");for(let i=0,n=e.length;i<n;++i){let o=e[i];s=s[o]||(s[o]=Object.create(null))}return s}function Ki(s,t,e){return typeof t==\"string\"?Pe(ds(s,t),e):Pe(ds(s,\"\"),t)}var Qi=class{constructor(t,e){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=i=>i.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(i,n)=>Ji(n.backgroundColor),this.hoverBorderColor=(i,n)=>Ji(n.borderColor),this.hoverColor=(i,n)=>Ji(n.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return Ki(this,t,e)}get(t){return ds(this,t)}describe(t,e){return Ki(oi,t,e)}override(t,e){return Ki(Jt,t,e)}route(t,e,i,n){let o=ds(this,t),r=ds(this,i),a=\"_\"+e;Object.defineProperties(o,{[a]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[a],c=r[n];return E(l)?Object.assign({},c,l):P(l,c)},set(l){this[a]=l}}})}apply(t){t.forEach(e=>e(this))}},j=new Qi({_scriptable:s=>!s.startsWith(\"on\"),_indexable:s=>s!==\"events\",hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}},[nh,oh,lh]);function ch(s){return!s||I(s.size)||I(s.family)?null:(s.style?s.style+\" \":\"\")+(s.weight?s.weight+\" \":\"\")+s.size+\"px \"+s.family}function fs(s,t,e,i,n){let o=t[n];return o||(o=t[n]=s.measureText(n).width,e.push(n)),o>i&&(i=o),i}function gr(s,t,e,i){i=i||{};let n=i.data=i.data||{},o=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(n=i.data={},o=i.garbageCollect=[],i.font=t),s.save(),s.font=t;let r=0,a=e.length,l,c,h,u,d;for(l=0;l<a;l++)if(u=e[l],u!=null&&!H(u))r=fs(s,n,o,r,u);else if(H(u))for(c=0,h=u.length;c<h;c++)d=u[c],d!=null&&!H(d)&&(r=fs(s,n,o,r,d));s.restore();let f=o.length/2;if(f>e.length){for(l=0;l<f;l++)delete n[o[l]];o.splice(0,f)}return r}function Kt(s,t,e){let i=s.currentDevicePixelRatio,n=e!==0?Math.max(e/2,.5):0;return Math.round((t-n)*i)/i+n}function mn(s,t){!t&&!s||(t=t||s.getContext(\"2d\"),t.save(),t.resetTransform(),t.clearRect(0,0,s.width,s.height),t.restore())}function ri(s,t,e,i){pn(s,t,e,i,null)}function pn(s,t,e,i,n){let o,r,a,l,c,h,u,d,f=t.pointStyle,g=t.rotation,m=t.radius,p=(g||0)*Qc;if(f&&typeof f==\"object\"&&(o=f.toString(),o===\"[object HTMLImageElement]\"||o===\"[object HTMLCanvasElement]\")){s.save(),s.translate(e,i),s.rotate(p),s.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),s.restore();return}if(!(isNaN(m)||m<=0)){switch(s.beginPath(),f){default:n?s.ellipse(e,i,n/2,m,0,0,$):s.arc(e,i,m,0,$),s.closePath();break;case\"triangle\":h=n?n/2:m,s.moveTo(e+Math.sin(p)*h,i-Math.cos(p)*m),p+=Uo,s.lineTo(e+Math.sin(p)*h,i-Math.cos(p)*m),p+=Uo,s.lineTo(e+Math.sin(p)*h,i-Math.cos(p)*m),s.closePath();break;case\"rectRounded\":c=m*.516,l=m-c,r=Math.cos(p+he)*l,u=Math.cos(p+he)*(n?n/2-c:l),a=Math.sin(p+he)*l,d=Math.sin(p+he)*(n?n/2-c:l),s.arc(e-u,i-a,c,p-F,p-q),s.arc(e+d,i-r,c,p-q,p),s.arc(e+u,i+a,c,p,p+q),s.arc(e-d,i+r,c,p+q,p+F),s.closePath();break;case\"rect\":if(!g){l=Math.SQRT1_2*m,h=n?n/2:l,s.rect(e-h,i-l,2*h,2*l);break}p+=he;case\"rectRot\":u=Math.cos(p)*(n?n/2:m),r=Math.cos(p)*m,a=Math.sin(p)*m,d=Math.sin(p)*(n?n/2:m),s.moveTo(e-u,i-a),s.lineTo(e+d,i-r),s.lineTo(e+u,i+a),s.lineTo(e-d,i+r),s.closePath();break;case\"crossRot\":p+=he;case\"cross\":u=Math.cos(p)*(n?n/2:m),r=Math.cos(p)*m,a=Math.sin(p)*m,d=Math.sin(p)*(n?n/2:m),s.moveTo(e-u,i-a),s.lineTo(e+u,i+a),s.moveTo(e+d,i-r),s.lineTo(e-d,i+r);break;case\"star\":u=Math.cos(p)*(n?n/2:m),r=Math.cos(p)*m,a=Math.sin(p)*m,d=Math.sin(p)*(n?n/2:m),s.moveTo(e-u,i-a),s.lineTo(e+u,i+a),s.moveTo(e+d,i-r),s.lineTo(e-d,i+r),p+=he,u=Math.cos(p)*(n?n/2:m),r=Math.cos(p)*m,a=Math.sin(p)*m,d=Math.sin(p)*(n?n/2:m),s.moveTo(e-u,i-a),s.lineTo(e+u,i+a),s.moveTo(e+d,i-r),s.lineTo(e-d,i+r);break;case\"line\":r=n?n/2:Math.cos(p)*m,a=Math.sin(p)*m,s.moveTo(e-r,i-a),s.lineTo(e+r,i+a);break;case\"dash\":s.moveTo(e,i),s.lineTo(e+Math.cos(p)*(n?n/2:m),i+Math.sin(p)*m);break;case!1:s.closePath();break}s.fill(),t.borderWidth>0&&s.stroke()}}function Pt(s,t,e){return e=e||.5,!t||s&&s.x>t.left-e&&s.x<t.right+e&&s.y>t.top-e&&s.y<t.bottom+e}function ps(s,t){s.save(),s.beginPath(),s.rect(t.left,t.top,t.right-t.left,t.bottom-t.top),s.clip()}function bs(s){s.restore()}function mr(s,t,e,i,n){if(!t)return s.lineTo(e.x,e.y);if(n===\"middle\"){let o=(t.x+e.x)/2;s.lineTo(o,t.y),s.lineTo(o,e.y)}else n===\"after\"!=!!i?s.lineTo(t.x,e.y):s.lineTo(e.x,t.y);s.lineTo(e.x,e.y)}function pr(s,t,e,i){if(!t)return s.lineTo(e.x,e.y);s.bezierCurveTo(i?t.cp1x:t.cp2x,i?t.cp1y:t.cp2y,i?e.cp2x:e.cp1x,i?e.cp2y:e.cp1y,e.x,e.y)}function hh(s,t){t.translation&&s.translate(t.translation[0],t.translation[1]),I(t.rotation)||s.rotate(t.rotation),t.color&&(s.fillStyle=t.color),t.textAlign&&(s.textAlign=t.textAlign),t.textBaseline&&(s.textBaseline=t.textBaseline)}function uh(s,t,e,i,n){if(n.strikethrough||n.underline){let o=s.measureText(i),r=t-o.actualBoundingBoxLeft,a=t+o.actualBoundingBoxRight,l=e-o.actualBoundingBoxAscent,c=e+o.actualBoundingBoxDescent,h=n.strikethrough?(l+c)/2:c;s.strokeStyle=s.fillStyle,s.beginPath(),s.lineWidth=n.decorationWidth||2,s.moveTo(r,h),s.lineTo(a,h),s.stroke()}}function dh(s,t){let e=s.fillStyle;s.fillStyle=t.color,s.fillRect(t.left,t.top,t.width,t.height),s.fillStyle=e}function Qt(s,t,e,i,n,o={}){let r=H(t)?t:[t],a=o.strokeWidth>0&&o.strokeColor!==\"\",l,c;for(s.save(),s.font=n.string,hh(s,o),l=0;l<r.length;++l)c=r[l],o.backdrop&&dh(s,o.backdrop),a&&(o.strokeColor&&(s.strokeStyle=o.strokeColor),I(o.strokeWidth)||(s.lineWidth=o.strokeWidth),s.strokeText(c,e,i,o.maxWidth)),s.fillText(c,e,i,o.maxWidth),uh(s,e,i,c,o),i+=Number(n.lineHeight);s.restore()}function Ne(s,t){let{x:e,y:i,w:n,h:o,radius:r}=t;s.arc(e+r.topLeft,i+r.topLeft,r.topLeft,1.5*F,F,!0),s.lineTo(e,i+o-r.bottomLeft),s.arc(e+r.bottomLeft,i+o-r.bottomLeft,r.bottomLeft,F,q,!0),s.lineTo(e+n-r.bottomRight,i+o),s.arc(e+n-r.bottomRight,i+o-r.bottomRight,r.bottomRight,q,0,!0),s.lineTo(e+n,i+r.topRight),s.arc(e+n-r.topRight,i+r.topRight,r.topRight,0,-q,!0),s.lineTo(e+r.topLeft,i)}var fh=/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/,gh=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function mh(s,t){let e=(\"\"+s).match(fh);if(!e||e[1]===\"normal\")return t*1.2;switch(s=+e[2],e[3]){case\"px\":return s;case\"%\":s/=100;break}return t*s}var ph=s=>+s||0;function ai(s,t){let e={},i=E(t),n=i?Object.keys(t):t,o=E(s)?i?r=>P(s[r],s[t[r]]):r=>s[r]:()=>s;for(let r of n)e[r]=ph(o(r));return e}function bn(s){return ai(s,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function te(s){return ai(s,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function nt(s){let t=bn(s);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function X(s,t){s=s||{},t=t||j.font;let e=P(s.size,t.size);typeof e==\"string\"&&(e=parseInt(e,10));let i=P(s.style,t.style);i&&!(\"\"+i).match(gh)&&(console.warn('Invalid font style specified: \"'+i+'\"'),i=void 0);let n={family:P(s.family,t.family),lineHeight:mh(P(s.lineHeight,t.lineHeight),e),size:e,style:i,weight:P(s.weight,t.weight),string:\"\"};return n.string=ch(n),n}function ze(s,t,e,i){let n=!0,o,r,a;for(o=0,r=s.length;o<r;++o)if(a=s[o],a!==void 0&&(t!==void 0&&typeof a==\"function\"&&(a=a(t),n=!1),e!==void 0&&H(a)&&(a=a[e%a.length],n=!1),a!==void 0))return i&&!n&&(i.cacheable=!1),a}function br(s,t,e){let{min:i,max:n}=s,o=tn(t,(n-i)/2),r=(a,l)=>e&&a===0?0:a+l;return{min:r(i,-Math.abs(o)),max:r(n,o)}}function Bt(s,t){return Object.assign(Object.create(s),t)}function li(s,t=[\"\"],e,i,n=()=>s[0]){let o=e||s;typeof i>\"u\"&&(i=_r(\"_fallback\",s));let r={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:s,_rootScopes:o,_fallback:i,_getTarget:n,override:a=>li([a,...s],t,o,i)};return new Proxy(r,{deleteProperty(a,l){return delete a[l],delete a._keys,delete s[0][l],!0},get(a,l){return yr(a,l,()=>Sh(l,t,s,a))},getOwnPropertyDescriptor(a,l){return Reflect.getOwnPropertyDescriptor(a._scopes[0],l)},getPrototypeOf(){return Reflect.getPrototypeOf(s[0])},has(a,l){return Xo(a).includes(l)},ownKeys(a){return Xo(a)},set(a,l,c){let h=a._storage||(a._storage=n());return a[l]=h[l]=c,delete a._keys,!0}})}function de(s,t,e,i){let n={_cacheable:!1,_proxy:s,_context:t,_subProxy:e,_stack:new Set,_descriptors:yn(s,i),setContext:o=>de(s,o,e,i),override:o=>de(s.override(o),t,e,i)};return new Proxy(n,{deleteProperty(o,r){return delete o[r],delete s[r],!0},get(o,r,a){return yr(o,r,()=>yh(o,r,a))},getOwnPropertyDescriptor(o,r){return o._descriptors.allKeys?Reflect.has(s,r)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(s,r)},getPrototypeOf(){return Reflect.getPrototypeOf(s)},has(o,r){return Reflect.has(s,r)},ownKeys(){return Reflect.ownKeys(s)},set(o,r,a){return s[r]=a,delete o[r],!0}})}function yn(s,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:i=t.indexable,_allKeys:n=t.allKeys}=s;return{allKeys:n,scriptable:e,indexable:i,isScriptable:zt(e)?e:()=>e,isIndexable:zt(i)?i:()=>i}}var bh=(s,t)=>s?s+ei(t):t,xn=(s,t)=>E(t)&&s!==\"adapters\"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function yr(s,t,e){if(Object.prototype.hasOwnProperty.call(s,t)||t===\"constructor\")return s[t];let i=e();return s[t]=i,i}function yh(s,t,e){let{_proxy:i,_context:n,_subProxy:o,_descriptors:r}=s,a=i[t];return zt(a)&&r.isScriptable(t)&&(a=xh(t,a,s,e)),H(a)&&a.length&&(a=_h(t,a,s,r.isIndexable)),xn(t,a)&&(a=de(a,n,o&&o[t],r)),a}function xh(s,t,e,i){let{_proxy:n,_context:o,_subProxy:r,_stack:a}=e;if(a.has(s))throw new Error(\"Recursion detected: \"+Array.from(a).join(\"->\")+\"->\"+s);a.add(s);let l=t(o,r||i);return a.delete(s),xn(s,l)&&(l=_n(n._scopes,n,s,l)),l}function _h(s,t,e,i){let{_proxy:n,_context:o,_subProxy:r,_descriptors:a}=e;if(typeof o.index<\"u\"&&i(s))return t[o.index%t.length];if(E(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let u=_n(c,n,s,h);t.push(de(u,o,r&&r[s],a))}}return t}function xr(s,t,e){return zt(s)?s(t,e):s}var wh=(s,t)=>s===!0?t:typeof s==\"string\"?Wt(t,s):void 0;function kh(s,t,e,i,n){for(let o of t){let r=wh(e,o);if(r){s.add(r);let a=xr(r._fallback,e,n);if(typeof a<\"u\"&&a!==e&&a!==i)return a}else if(r===!1&&typeof i<\"u\"&&e!==i)return null}return!1}function _n(s,t,e,i){let n=t._rootScopes,o=xr(t._fallback,e,i),r=[...s,...n],a=new Set;a.add(i);let l=Go(a,r,e,o||e,i);return l===null||typeof o<\"u\"&&o!==e&&(l=Go(a,r,o,l,i),l===null)?!1:li(Array.from(a),[\"\"],n,o,()=>vh(t,e,i))}function Go(s,t,e,i,n){for(;e;)e=kh(s,t,e,i,n);return e}function vh(s,t,e){let i=s._getTarget();t in i||(i[t]={});let n=i[t];return H(n)&&E(e)?e:n||{}}function Sh(s,t,e,i){let n;for(let o of t)if(n=_r(bh(o,s),e),typeof n<\"u\")return xn(s,n)?_n(e,i,s,n):n}function _r(s,t){for(let e of t){if(!e)continue;let i=e[s];if(typeof i<\"u\")return i}}function Xo(s){let t=s._keys;return t||(t=s._keys=Mh(s._scopes)),t}function Mh(s){let t=new Set;for(let e of s)for(let i of Object.keys(e).filter(n=>!n.startsWith(\"_\")))t.add(i);return Array.from(t)}function wn(s,t,e,i){let{iScale:n}=s,{key:o=\"r\"}=this._parsing,r=new Array(i),a,l,c,h;for(a=0,l=i;a<l;++a)c=a+e,h=t[c],r[a]={r:n.parse(Wt(h,o),c)};return r}var Oh=Number.EPSILON||1e-14,Ae=(s,t)=>t<s.length&&!s[t].skip&&s[t],wr=s=>s===\"x\"?\"y\":\"x\";function Th(s,t,e,i){let n=s.skip?t:s,o=t,r=e.skip?t:e,a=Qs(o,n),l=Qs(r,o),c=a/(a+l),h=l/(a+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let u=i*c,d=i*h;return{previous:{x:o.x-u*(r.x-n.x),y:o.y-u*(r.y-n.y)},next:{x:o.x+d*(r.x-n.x),y:o.y+d*(r.y-n.y)}}}function Dh(s,t,e){let i=s.length,n,o,r,a,l,c=Ae(s,0);for(let h=0;h<i-1;++h)if(l=c,c=Ae(s,h+1),!(!l||!c)){if(Le(t[h],0,Oh)){e[h]=e[h+1]=0;continue}n=e[h]/t[h],o=e[h+1]/t[h],a=Math.pow(n,2)+Math.pow(o,2),!(a<=9)&&(r=3/Math.sqrt(a),e[h]=n*r*t[h],e[h+1]=o*r*t[h])}}function Ch(s,t,e=\"x\"){let i=wr(e),n=s.length,o,r,a,l=Ae(s,0);for(let c=0;c<n;++c){if(r=a,a=l,l=Ae(s,c+1),!a)continue;let h=a[e],u=a[i];r&&(o=(h-r[e])/3,a[`cp1${e}`]=h-o,a[`cp1${i}`]=u-o*t[c]),l&&(o=(l[e]-h)/3,a[`cp2${e}`]=h+o,a[`cp2${i}`]=u+o*t[c])}}function Ph(s,t=\"x\"){let e=wr(t),i=s.length,n=Array(i).fill(0),o=Array(i),r,a,l,c=Ae(s,0);for(r=0;r<i;++r)if(a=l,l=c,c=Ae(s,r+1),!!l){if(c){let h=c[t]-l[t];n[r]=h!==0?(c[e]-l[e])/h:0}o[r]=a?c?St(n[r-1])!==St(n[r])?0:(n[r-1]+n[r])/2:n[r-1]:n[r]}Dh(s,n,o),Ch(s,o,t)}function Gs(s,t,e){return Math.max(Math.min(s,e),t)}function Ah(s,t){let e,i,n,o,r,a=Pt(s[0],t);for(e=0,i=s.length;e<i;++e)r=o,o=a,a=e<i-1&&Pt(s[e+1],t),o&&(n=s[e],r&&(n.cp1x=Gs(n.cp1x,t.left,t.right),n.cp1y=Gs(n.cp1y,t.top,t.bottom)),a&&(n.cp2x=Gs(n.cp2x,t.left,t.right),n.cp2y=Gs(n.cp2y,t.top,t.bottom)))}function kr(s,t,e,i,n){let o,r,a,l;if(t.spanGaps&&(s=s.filter(c=>!c.skip)),t.cubicInterpolationMode===\"monotone\")Ph(s,n);else{let c=i?s[s.length-1]:s[0];for(o=0,r=s.length;o<r;++o)a=s[o],l=Th(c,a,s[Math.min(o+1,r-(i?0:1))%r],t.tension),a.cp1x=l.previous.x,a.cp1y=l.previous.y,a.cp2x=l.next.x,a.cp2y=l.next.y,c=a}t.capBezierPoints&&Ah(s,e)}function ci(){return typeof window<\"u\"&&typeof document<\"u\"}function hi(s){let t=s.parentNode;return t&&t.toString()===\"[object ShadowRoot]\"&&(t=t.host),t}function ti(s,t,e){let i;return typeof s==\"string\"?(i=parseInt(s,10),s.indexOf(\"%\")!==-1&&(i=i/100*t.parentNode[e])):i=s,i}var ui=s=>s.ownerDocument.defaultView.getComputedStyle(s,null);function Ih(s,t){return ui(s).getPropertyValue(t)}var Eh=[\"top\",\"right\",\"bottom\",\"left\"];function ue(s,t,e){let i={};e=e?\"-\"+e:\"\";for(let n=0;n<4;n++){let o=Eh[n];i[o]=parseFloat(s[t+\"-\"+o+e])||0}return i.width=i.left+i.right,i.height=i.top+i.bottom,i}var Lh=(s,t,e)=>(s>0||t>0)&&(!e||!e.shadowRoot);function Fh(s,t){let e=s.touches,i=e&&e.length?e[0]:s,{offsetX:n,offsetY:o}=i,r=!1,a,l;if(Lh(n,o,s.target))a=n,l=o;else{let c=t.getBoundingClientRect();a=i.clientX-c.left,l=i.clientY-c.top,r=!0}return{x:a,y:l,box:r}}function ee(s,t){if(\"native\"in s)return s;let{canvas:e,currentDevicePixelRatio:i}=t,n=ui(e),o=n.boxSizing===\"border-box\",r=ue(n,\"padding\"),a=ue(n,\"border\",\"width\"),{x:l,y:c,box:h}=Fh(s,e),u=r.left+(h&&a.left),d=r.top+(h&&a.top),{width:f,height:g}=t;return o&&(f-=r.width+a.width,g-=r.height+a.height),{x:Math.round((l-u)/f*e.width/i),y:Math.round((c-d)/g*e.height/i)}}function Rh(s,t,e){let i,n;if(t===void 0||e===void 0){let o=s&&hi(s);if(!o)t=s.clientWidth,e=s.clientHeight;else{let r=o.getBoundingClientRect(),a=ui(o),l=ue(a,\"border\",\"width\"),c=ue(a,\"padding\");t=r.width-c.width-l.width,e=r.height-c.height-l.height,i=ti(a.maxWidth,o,\"clientWidth\"),n=ti(a.maxHeight,o,\"clientHeight\")}}return{width:t,height:e,maxWidth:i||Ks,maxHeight:n||Ks}}var Xt=s=>Math.round(s*10)/10;function vr(s,t,e,i){let n=ui(s),o=ue(n,\"margin\"),r=ti(n.maxWidth,s,\"clientWidth\")||Ks,a=ti(n.maxHeight,s,\"clientHeight\")||Ks,l=Rh(s,t,e),{width:c,height:h}=l;if(n.boxSizing===\"content-box\"){let d=ue(n,\"border\",\"width\"),f=ue(n,\"padding\");c-=f.width+d.width,h-=f.height+d.height}return c=Math.max(0,c-o.width),h=Math.max(0,i?c/i:h-o.height),c=Xt(Math.min(c,r,l.maxWidth)),h=Xt(Math.min(h,a,l.maxHeight)),c&&!h&&(h=Xt(c/2)),(t!==void 0||e!==void 0)&&i&&l.height&&h>l.height&&(h=l.height,c=Xt(Math.floor(h*i))),{width:c,height:h}}function kn(s,t,e){let i=t||1,n=Xt(s.height*i),o=Xt(s.width*i);s.height=Xt(s.height),s.width=Xt(s.width);let r=s.canvas;return r.style&&(e||!r.style.height&&!r.style.width)&&(r.style.height=`${s.height}px`,r.style.width=`${s.width}px`),s.currentDevicePixelRatio!==i||r.height!==n||r.width!==o?(s.currentDevicePixelRatio=i,r.height=n,r.width=o,s.ctx.setTransform(i,0,0,i,0,0),!0):!1}var Sr=(function(){let s=!1;try{let t={get passive(){return s=!0,!1}};ci()&&(window.addEventListener(\"test\",null,t),window.removeEventListener(\"test\",null,t))}catch{}return s})();function vn(s,t){let e=Ih(s,t),i=e&&e.match(/^(\\d+)(\\.\\d+)?px$/);return i?+i[1]:void 0}function Gt(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:s.y+e*(t.y-s.y)}}function Mr(s,t,e,i){return{x:s.x+e*(t.x-s.x),y:i===\"middle\"?e<.5?s.y:t.y:i===\"after\"?e<1?s.y:t.y:e>0?t.y:s.y}}function Or(s,t,e,i){let n={x:s.cp2x,y:s.cp2y},o={x:t.cp1x,y:t.cp1y},r=Gt(s,n,e),a=Gt(n,o,e),l=Gt(o,t,e),c=Gt(r,a,e),h=Gt(a,l,e);return Gt(c,h,e)}var Nh=function(s,t){return{x(e){return s+s+t-e},setWidth(e){t=e},textAlign(e){return e===\"center\"?e:e===\"right\"?\"left\":\"right\"},xPlus(e,i){return e-i},leftForLtr(e,i){return e-i}}},zh=function(){return{x(s){return s},setWidth(s){},textAlign(s){return s},xPlus(s,t){return s+t},leftForLtr(s,t){return s}}};function ge(s,t,e){return s?Nh(t,e):zh()}function Sn(s,t){let e,i;(t===\"ltr\"||t===\"rtl\")&&(e=s.canvas.style,i=[e.getPropertyValue(\"direction\"),e.getPropertyPriority(\"direction\")],e.setProperty(\"direction\",t,\"important\"),s.prevTextDirection=i)}function Mn(s,t){t!==void 0&&(delete s.prevTextDirection,s.canvas.style.setProperty(\"direction\",t[0],t[1]))}function Tr(s){return s===\"angle\"?{between:Fe,compare:eh,normalize:st}:{between:It,compare:(t,e)=>t-e,normalize:t=>t}}function Jo({start:s,end:t,count:e,loop:i,style:n}){return{start:s%e,end:t%e,loop:i&&(t-s+1)%e===0,style:n}}function Vh(s,t,e){let{property:i,start:n,end:o}=e,{between:r,normalize:a}=Tr(i),l=t.length,{start:c,end:h,loop:u}=s,d,f;if(u){for(c+=l,h+=l,d=0,f=l;d<f&&r(a(t[c%l][i]),n,o);++d)c--,h--;c%=l,h%=l}return h<c&&(h+=l),{start:c,end:h,loop:u,style:s.style}}function On(s,t,e){if(!e)return[s];let{property:i,start:n,end:o}=e,r=t.length,{compare:a,between:l,normalize:c}=Tr(i),{start:h,end:u,loop:d,style:f}=Vh(s,t,e),g=[],m=!1,p=null,b,y,_,w=()=>l(n,_,b)&&a(n,_)!==0,x=()=>a(o,b)===0||l(o,_,b),k=()=>m||w(),S=()=>!m||x();for(let M=h,T=h;M<=u;++M)y=t[M%r],!y.skip&&(b=c(y[i]),b!==_&&(m=l(b,n,o),p===null&&k()&&(p=a(b,n)===0?M:T),p!==null&&S()&&(g.push(Jo({start:p,end:M,loop:d,count:r,style:f})),p=null),T=M,_=b));return p!==null&&g.push(Jo({start:p,end:u,loop:d,count:r,style:f})),g}function Tn(s,t){let e=[],i=s.segments;for(let n=0;n<i.length;n++){let o=On(i[n],s.points,t);o.length&&e.push(...o)}return e}function Wh(s,t,e,i){let n=0,o=t-1;if(e&&!i)for(;n<t&&!s[n].skip;)n++;for(;n<t&&s[n].skip;)n++;for(n%=t,e&&(o+=n);o>n&&s[o%t].skip;)o--;return o%=t,{start:n,end:o}}function Bh(s,t,e,i){let n=s.length,o=[],r=t,a=s[t],l;for(l=t+1;l<=e;++l){let c=s[l%n];c.skip||c.stop?a.skip||(i=!1,o.push({start:t%n,end:(l-1)%n,loop:i}),t=r=c.stop?l:null):(r=l,a.skip&&(t=l)),a=c}return r!==null&&o.push({start:t%n,end:r%n,loop:i}),o}function Dr(s,t){let e=s.points,i=s.options.spanGaps,n=e.length;if(!n)return[];let o=!!s._loop,{start:r,end:a}=Wh(e,n,o,i);if(i===!0)return Ko(s,[{start:r,end:a,loop:o}],e,t);let l=a<r?a+n:a,c=!!s._fullLoop&&r===0&&a===n-1;return Ko(s,Bh(e,r,l,c),e,t)}function Ko(s,t,e,i){return!i||!i.setContext||!e?t:Hh(s,t,e,i)}function Hh(s,t,e,i){let n=s._chart.getContext(),o=Qo(s.options),{_datasetIndex:r,options:{spanGaps:a}}=s,l=e.length,c=[],h=o,u=t[0].start,d=u;function f(g,m,p,b){let y=a?-1:1;if(g!==m){for(g+=l;e[g%l].skip;)g-=y;for(;e[m%l].skip;)m+=y;g%l!==m%l&&(c.push({start:g%l,end:m%l,loop:p,style:b}),h=b,u=m%l)}}for(let g of t){u=a?u:g.start;let m=e[u%l],p;for(d=u+1;d<=g.end;d++){let b=e[d%l];p=Qo(i.setContext(Bt(n,{type:\"segment\",p0:m,p1:b,p0DataIndex:(d-1)%l,p1DataIndex:d%l,datasetIndex:r}))),$h(p,h)&&f(u,d-1,g.loop,h),m=b,h=p}u<d-1&&f(u,d-1,g.loop,h)}return c}function Qo(s){return{backgroundColor:s.backgroundColor,borderCapStyle:s.borderCapStyle,borderDash:s.borderDash,borderDashOffset:s.borderDashOffset,borderJoinStyle:s.borderJoinStyle,borderWidth:s.borderWidth,borderColor:s.borderColor}}function $h(s,t){if(!t)return!1;let e=[],i=function(n,o){return fn(o)?(e.includes(o)||e.push(o),e.indexOf(o)):o};return JSON.stringify(s,i)!==JSON.stringify(t,i)}function Xs(s,t,e){return s.options.clip?s[e]:t[e]}function jh(s,t){let{xScale:e,yScale:i}=s;return e&&i?{left:Xs(e,t,\"left\"),right:Xs(e,t,\"right\"),top:Xs(i,t,\"top\"),bottom:Xs(i,t,\"bottom\")}:t}function Dn(s,t){let e=t._clip;if(e.disabled)return!1;let i=jh(t,s.chartArea);return{left:e.left===!1?0:i.left-(e.left===!0?0:e.left),right:e.right===!1?s.width:i.right+(e.right===!0?0:e.right),top:e.top===!1?0:i.top-(e.top===!0?0:e.top),bottom:e.bottom===!1?s.height:i.bottom+(e.bottom===!0?0:e.bottom)}}var Wn=class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,n){let o=e.listeners[n],r=e.duration;o.forEach(a=>a({chart:t,initial:e.initial,numSteps:r,currentStep:Math.min(i-e.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=cn.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,n)=>{if(!i.running||!i.items.length)return;let o=i.items,r=o.length-1,a=!1,l;for(;r>=0;--r)l=o[r],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(o[r]=o[o.length-1],o.pop());a&&(n.draw(),this._notify(n,i,t,\"progress\")),o.length||(i.running=!1,this._notify(n,i,t,\"complete\"),i.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,n)=>Math.max(i,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let i=e.items,n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}},Ht=new Wn,Cr=\"transparent\",Uh={boolean(s,t,e){return e>.5?t:s},color(s,t,e){let i=gn(s||Cr),n=i.valid&&gn(t||Cr);return n&&n.valid?n.mix(i,e).hexString():t},number(s,t,e){return s+(t-s)*e}},Bn=class{constructor(t,e,i,n){let o=e[i];n=ze([t.to,n,o,t.from]);let r=ze([t.from,o,n]);this._active=!0,this._fn=t.fn||Uh[t.type||typeof r],this._easing=Ce[t.easing]||Ce.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=r,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);let n=this._target[this._prop],o=i-this._start,r=this._duration-o;this._start=i,this._duration=Math.floor(Math.max(r,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=ze([t.to,e,n,t.from]),this._from=ze([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,i=this._duration,n=this._prop,o=this._from,r=this._loop,a=this._to,l;if(this._active=o!==a&&(r||e<i),!this._active){this._target[n]=a,this._notify(!0);return}if(e<0){this._target[n]=o;return}l=e/i%2,l=r&&l>1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,a,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){let e=t?\"res\":\"rej\",i=this._promises||[];for(let n=0;n<i.length;n++)i[n][e]()}},_i=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!E(t))return;let e=Object.keys(j.animation),i=this._properties;Object.getOwnPropertyNames(t).forEach(n=>{let o=t[n];if(!E(o))return;let r={};for(let a of e)r[a]=o[a];(H(o.properties)&&o.properties||[n]).forEach(a=>{(a===n||!i.has(a))&&i.set(a,r)})})}_animateOptions(t,e){let i=e.options,n=Zh(t,i);if(!n)return[];let o=this._createAnimations(n,i);return i.$shared&&Yh(t.options.$animations,i).then(()=>{t.options=i},()=>{}),o}_createAnimations(t,e){let i=this._properties,n=[],o=t.$animations||(t.$animations={}),r=Object.keys(e),a=Date.now(),l;for(l=r.length-1;l>=0;--l){let c=r[l];if(c.charAt(0)===\"$\")continue;if(c===\"options\"){n.push(...this._animateOptions(t,e));continue}let h=e[c],u=o[c],d=i.get(c);if(u)if(d&&u.active()){u.update(d,h,a);continue}else u.cancel();if(!d||!d.duration){t[c]=h;continue}o[c]=u=new Bn(d,t,c,h),n.push(u)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let i=this._createAnimations(t,e);if(i.length)return Ht.add(this._chart,i),!0}};function Yh(s,t){let e=[],i=Object.keys(t);for(let n=0;n<i.length;n++){let o=s[i[n]];o&&o.active()&&e.push(o.wait())}return Promise.all(e)}function Zh(s,t){if(!t)return;let e=s.options;if(!e){s.options=t;return}return e.$shared&&(s.options=e=Object.assign({},e,{$shared:!1,$animations:{}})),e}function Pr(s,t){let e=s&&s.options||{},i=e.reverse,n=e.min===void 0?t:0,o=e.max===void 0?t:0;return{start:i?o:n,end:i?n:o}}function qh(s,t,e){if(e===!1)return!1;let i=Pr(s,e),n=Pr(t,e);return{top:n.end,right:i.end,bottom:n.start,left:i.start}}function Gh(s){let t,e,i,n;return E(s)?(t=s.top,e=s.right,i=s.bottom,n=s.left):t=e=i=n=s,{top:t,right:e,bottom:i,left:n,disabled:s===!1}}function Da(s,t){let e=[],i=s._getSortedDatasetMetas(t),n,o;for(n=0,o=i.length;n<o;++n)e.push(i[n].index);return e}function Ar(s,t,e,i={}){let n=s.keys,o=i.mode===\"single\",r,a,l,c;if(t===null)return;let h=!1;for(r=0,a=n.length;r<a;++r){if(l=+n[r],l===e){if(h=!0,i.all)continue;break}c=s.values[l],Z(c)&&(o||t===0||St(t)===St(c))&&(t+=c)}return!h&&!i.all?0:t}function Xh(s,t){let{iScale:e,vScale:i}=t,n=e.axis===\"x\"?\"x\":\"y\",o=i.axis===\"x\"?\"x\":\"y\",r=Object.keys(s),a=new Array(r.length),l,c,h;for(l=0,c=r.length;l<c;++l)h=r[l],a[l]={[n]:h,[o]:s[h]};return a}function Cn(s,t){let e=s&&s.options.stacked;return e||e===void 0&&t.stack!==void 0}function Jh(s,t,e){return`${s.id}.${t.id}.${e.stack||e.type}`}function Kh(s){let{min:t,max:e,minDefined:i,maxDefined:n}=s.getUserBounds();return{min:i?t:Number.NEGATIVE_INFINITY,max:n?e:Number.POSITIVE_INFINITY}}function Qh(s,t,e){let i=s[t]||(s[t]={});return i[e]||(i[e]={})}function Ir(s,t,e,i){for(let n of t.getMatchingVisibleMetas(i).reverse()){let o=s[n.index];if(e&&o>0||!e&&o<0)return n.index}return null}function Er(s,t){let{chart:e,_cachedMeta:i}=s,n=e._stacks||(e._stacks={}),{iScale:o,vScale:r,index:a}=i,l=o.axis,c=r.axis,h=Jh(o,r,i),u=t.length,d;for(let f=0;f<u;++f){let g=t[f],{[l]:m,[c]:p}=g,b=g._stacks||(g._stacks={});d=b[c]=Qh(n,h,m),d[a]=p,d._top=Ir(d,r,!0,i.type),d._bottom=Ir(d,r,!1,i.type);let y=d._visualValues||(d._visualValues={});y[a]=p}}function Pn(s,t){let e=s.scales;return Object.keys(e).filter(i=>e[i].axis===t).shift()}function tu(s,t){return Bt(s,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:\"default\",type:\"dataset\"})}function eu(s,t,e){return Bt(s,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:\"default\",type:\"data\"})}function ys(s,t){let e=s.controller.index,i=s.vScale&&s.vScale.axis;if(i){t=t||s._parsed;for(let n of t){let o=n._stacks;if(!o||o[i]===void 0||o[i][e]===void 0)return;delete o[i][e],o[i]._visualValues!==void 0&&o[i]._visualValues[e]!==void 0&&delete o[i]._visualValues[e]}}}var An=s=>s===\"reset\"||s===\"none\",Lr=(s,t)=>t?s:Object.assign({},s),su=(s,t,e)=>s&&!t.hidden&&t._stacked&&{keys:Da(e,!0),values:null},ut=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Cn(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(\"filler\")&&console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\")}updateIndex(t){this.index!==t&&ys(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,i=this.getDataset(),n=(u,d,f,g)=>u===\"x\"?d:u===\"r\"?g:f,o=e.xAxisID=P(i.xAxisID,Pn(t,\"x\")),r=e.yAxisID=P(i.yAxisID,Pn(t,\"y\")),a=e.rAxisID=P(i.rAxisID,Pn(t,\"r\")),l=e.indexAxis,c=e.iAxisID=n(l,o,r,a),h=e.vAxisID=n(l,r,o,a);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(r),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){let t=this._cachedMeta;this._data&&an(this._data,this),t._stacked&&ys(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(E(e)){let n=this._cachedMeta;this._data=Xh(e,n)}else if(i!==e){if(i){an(i,this);let n=this._cachedMeta;ys(n),n._parsed=[]}e&&Object.isExtensible(e)&&hr(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,i=this.getDataset(),n=!1;this._dataCheck();let o=e._stacked;e._stacked=Cn(e.vScale,e),e.stack!==i.stack&&(n=!0,ys(e),e.stack=i.stack),this._resyncElements(t),(n||o!==e._stacked)&&(Er(this,e._parsed),e._stacked=Cn(e.vScale,e))}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:i,_data:n}=this,{iScale:o,_stacked:r}=i,a=o.axis,l=t===0&&e===n.length?!0:i._sorted,c=t>0&&i._parsed[t-1],h,u,d;if(this._parsing===!1)i._parsed=n,i._sorted=!0,d=n;else{H(n[t])?d=this.parseArrayData(i,n,t,e):E(n[t])?d=this.parseObjectData(i,n,t,e):d=this.parsePrimitiveData(i,n,t,e);let f=()=>u[a]===null||c&&u[a]<c[a];for(h=0;h<e;++h)i._parsed[h+t]=u=d[h],l&&(f()&&(l=!1),c=u);i._sorted=l}r&&Er(this,d)}parsePrimitiveData(t,e,i,n){let{iScale:o,vScale:r}=t,a=o.axis,l=r.axis,c=o.getLabels(),h=o===r,u=new Array(n),d,f,g;for(d=0,f=n;d<f;++d)g=d+i,u[d]={[a]:h||o.parse(c[g],g),[l]:r.parse(e[g],g)};return u}parseArrayData(t,e,i,n){let{xScale:o,yScale:r}=t,a=new Array(n),l,c,h,u;for(l=0,c=n;l<c;++l)h=l+i,u=e[h],a[l]={x:o.parse(u[0],h),y:r.parse(u[1],h)};return a}parseObjectData(t,e,i,n){let{xScale:o,yScale:r}=t,{xAxisKey:a=\"x\",yAxisKey:l=\"y\"}=this._parsing,c=new Array(n),h,u,d,f;for(h=0,u=n;h<u;++h)d=h+i,f=e[d],c[h]={x:o.parse(Wt(f,a),d),y:r.parse(Wt(f,l),d)};return c}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){let n=this.chart,o=this._cachedMeta,r=e[t.axis],a={keys:Da(n,!0),values:e._stacks[t.axis]._visualValues};return Ar(a,r,o.index,{mode:i})}updateRangeFromParsed(t,e,i,n){let o=i[e.axis],r=o===null?NaN:o,a=n&&i._stacks[e.axis];n&&a&&(n.values=a,r=Ar(n,o,this._cachedMeta.index)),t.min=Math.min(t.min,r),t.max=Math.max(t.max,r)}getMinMax(t,e){let i=this._cachedMeta,n=i._parsed,o=i._sorted&&t===i.iScale,r=n.length,a=this._getOtherScale(t),l=su(e,i,this.chart),c={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:u}=Kh(a),d,f;function g(){f=n[d];let m=f[a.axis];return!Z(f[t.axis])||h>m||u<m}for(d=0;d<r&&!(!g()&&(this.updateRangeFromParsed(c,t,f,l),o));++d);if(o){for(d=r-1;d>=0;--d)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,i=[],n,o,r;for(n=0,o=e.length;n<o;++n)r=e[n][t.axis],Z(r)&&i.push(r);return i}getMaxOverflow(){return!1}getLabelAndValue(t){let e=this._cachedMeta,i=e.iScale,n=e.vScale,o=this.getParsed(t);return{label:i?\"\"+i.getLabelForValue(o[i.axis]):\"\",value:n?\"\"+n.getLabelForValue(o[n.axis]):\"\"}}_update(t){let e=this._cachedMeta;this.update(t||\"default\"),e._clip=Gh(P(this.options.clip,qh(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){let t=this._ctx,e=this.chart,i=this._cachedMeta,n=i.data||[],o=e.chartArea,r=[],a=this._drawStart||0,l=this._drawCount||n.length-a,c=this.options.drawActiveElementsOnTop,h;for(i.dataset&&i.dataset.draw(t,o,a,l),h=a;h<a+l;++h){let u=n[h];u.hidden||(u.active&&c?r.push(u):u.draw(t,o))}for(h=0;h<r.length;++h)r[h].draw(t,o)}getStyle(t,e){let i=e?\"active\":\"default\";return t===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){let n=this.getDataset(),o;if(t>=0&&t<this._cachedMeta.data.length){let r=this._cachedMeta.data[t];o=r.$context||(r.$context=eu(this.getContext(),t,r)),o.parsed=this.getParsed(t),o.raw=n.data[t],o.index=o.dataIndex=t}else o=this.$context||(this.$context=tu(this.chart.getContext(),this.index)),o.dataset=n,o.index=o.datasetIndex=this.index;return o.active=!!e,o.mode=i,o}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",i){let n=e===\"active\",o=this._cachedDataOpts,r=t+\"-\"+e,a=o[r],l=this.enableOptionSharing&&Ee(i);if(a)return Lr(a,l);let c=this.chart.config,h=c.datasetElementScopeKeys(this._type,t),u=n?[`${t}Hover`,\"hover\",t,\"\"]:[t,\"\"],d=c.getOptionScopes(this.getDataset(),h),f=Object.keys(j.elements[t]),g=()=>this.getContext(i,n,e),m=c.resolveNamedOptions(d,f,g,u);return m.$shared&&(m.$shared=l,o[r]=Object.freeze(Lr(m,l))),m}_resolveAnimations(t,e,i){let n=this.chart,o=this._cachedDataOpts,r=`animation-${e}`,a=o[r];if(a)return a;let l;if(n.options.animation!==!1){let h=this.chart.config,u=h.datasetAnimationScopeKeys(this._type,e),d=h.getOptionScopes(this.getDataset(),u);l=h.createResolver(d,this.getContext(t,i,e))}let c=new _i(n,l&&l.animations);return l&&l._cacheable&&(o[r]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||An(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let i=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(i),r=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,i),{sharedOptions:o,includeOptions:r}}updateElement(t,e,i,n){An(n)?Object.assign(t,i):this._resolveAnimations(e,n).update(t,i)}updateSharedOptions(t,e,i){t&&!An(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,n){t.active=n;let o=this.getStyle(e,n);this._resolveAnimations(e,i,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){let e=this._data,i=this._cachedMeta.data;for(let[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];let n=i.length,o=e.length,r=Math.min(o,n);r&&this.parse(0,r),o>n?this._insertElements(n,o-n,t):o<n&&this._removeElements(o,n-o)}_insertElements(t,e,i=!0){let n=this._cachedMeta,o=n.data,r=t+e,a,l=c=>{for(c.length+=e,a=c.length-1;a>=r;a--)c[a]=c[a-e]};for(l(o),a=t;a<r;++a)o[a]=new this.dataElementType;this._parsing&&l(n._parsed),this.parse(t,e),i&&this.updateElements(o,t,e,\"reset\")}updateElements(t,e,i,n){}_removeElements(t,e){let i=this._cachedMeta;if(this._parsing){let n=i._parsed.splice(t,e);i._stacked&&ys(i,n)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{let[e,i,n]=t;this[e](i,n)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){let t=arguments.length;this._sync([\"_insertElements\",this.getDataset().data.length-t,t])}_onDataPop(){this._sync([\"_removeElements\",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync([\"_removeElements\",0,1])}_onDataSplice(t,e){e&&this._sync([\"_removeElements\",t,e]);let i=arguments.length-2;i&&this._sync([\"_insertElements\",t,i])}_onDataUnshift(){this._sync([\"_insertElements\",0,arguments.length])}};v(ut,\"defaults\",{}),v(ut,\"datasetElementType\",null),v(ut,\"dataElementType\",null);function iu(s,t){if(!s._cache.$bar){let e=s.getMatchingVisibleMetas(t),i=[];for(let n=0,o=e.length;n<o;n++)i=i.concat(e[n].controller.getAllParsedValues(s));s._cache.$bar=ln(i.sort((n,o)=>n-o))}return s._cache.$bar}function nu(s){let t=s.iScale,e=iu(t,s.type),i=t._length,n,o,r,a,l=()=>{r===32767||r===-32768||(Ee(a)&&(i=Math.min(i,Math.abs(r-a)||i)),a=r)};for(n=0,o=e.length;n<o;++n)r=t.getPixelForValue(e[n]),l();for(a=void 0,n=0,o=t.ticks.length;n<o;++n)r=t.getPixelForTick(n),l();return i}function ou(s,t,e,i){let n=e.barThickness,o,r;return I(n)?(o=t.min*e.categoryPercentage,r=e.barPercentage):(o=n*i,r=1),{chunk:o/i,ratio:r,start:t.pixels[s]-o/2}}function ru(s,t,e,i){let n=t.pixels,o=n[s],r=s>0?n[s-1]:null,a=s<n.length-1?n[s+1]:null,l=e.categoryPercentage;r===null&&(r=o-(a===null?t.end-t.start:a-o)),a===null&&(a=o+o-r);let c=o-(o-Math.min(r,a))/2*l;return{chunk:Math.abs(a-r)/2*l/i,ratio:e.barPercentage,start:c}}function au(s,t,e,i){let n=e.parse(s[0],i),o=e.parse(s[1],i),r=Math.min(n,o),a=Math.max(n,o),l=r,c=a;Math.abs(r)>Math.abs(a)&&(l=a,c=r),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:r,max:a}}function Ca(s,t,e,i){return H(s)?au(s,t,e,i):t[e.axis]=e.parse(s,i),t}function Fr(s,t,e,i){let n=s.iScale,o=s.vScale,r=n.getLabels(),a=n===o,l=[],c,h,u,d;for(c=e,h=e+i;c<h;++c)d=t[c],u={},u[n.axis]=a||n.parse(r[c],c),l.push(Ca(d,u,o,c));return l}function In(s){return s&&s.barStart!==void 0&&s.barEnd!==void 0}function lu(s,t,e){return s!==0?St(s):(t.isHorizontal()?1:-1)*(t.min>=e?1:-1)}function cu(s){let t,e,i,n,o;return s.horizontal?(t=s.base>s.x,e=\"left\",i=\"right\"):(t=s.base<s.y,e=\"bottom\",i=\"top\"),t?(n=\"end\",o=\"start\"):(n=\"start\",o=\"end\"),{start:e,end:i,reverse:t,top:n,bottom:o}}function hu(s,t,e,i){let n=t.borderSkipped,o={};if(!n){s.borderSkipped=o;return}if(n===!0){s.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}let{start:r,end:a,reverse:l,top:c,bottom:h}=cu(s);n===\"middle\"&&e&&(s.enableBorderRadius=!0,(e._top||0)===i?n=c:(e._bottom||0)===i?n=h:(o[Rr(h,r,a,l)]=!0,n=c)),o[Rr(n,r,a,l)]=!0,s.borderSkipped=o}function Rr(s,t,e,i){return i?(s=uu(s,t,e),s=Nr(s,e,t)):s=Nr(s,t,e),s}function uu(s,t,e){return s===t?e:s===e?t:s}function Nr(s,t,e){return s===\"start\"?t:s===\"end\"?e:s}function du(s,{inflateAmount:t},e){s.inflateAmount=t===\"auto\"?e===1?.33:0:t}var We=class extends ut{parsePrimitiveData(t,e,i,n){return Fr(t,e,i,n)}parseArrayData(t,e,i,n){return Fr(t,e,i,n)}parseObjectData(t,e,i,n){let{iScale:o,vScale:r}=t,{xAxisKey:a=\"x\",yAxisKey:l=\"y\"}=this._parsing,c=o.axis===\"x\"?a:l,h=r.axis===\"x\"?a:l,u=[],d,f,g,m;for(d=i,f=i+n;d<f;++d)m=e[d],g={},g[o.axis]=o.parse(Wt(m,c),d),u.push(Ca(Wt(m,h),g,r,d));return u}updateRangeFromParsed(t,e,i,n){super.updateRangeFromParsed(t,e,i,n);let o=i._custom;o&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,o.min),t.max=Math.max(t.max,o.max))}getMaxOverflow(){return 0}getLabelAndValue(t){let e=this._cachedMeta,{iScale:i,vScale:n}=e,o=this.getParsed(t),r=o._custom,a=In(r)?\"[\"+r.start+\", \"+r.end+\"]\":\"\"+n.getLabelForValue(o[n.axis]);return{label:\"\"+i.getLabelForValue(o[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();let t=this._cachedMeta;t.stack=this.getDataset().stack}update(t){let e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,n){let o=n===\"reset\",{index:r,_cachedMeta:{vScale:a}}=this,l=a.getBasePixel(),c=a.isHorizontal(),h=this._getRuler(),{sharedOptions:u,includeOptions:d}=this._getSharedOptions(e,n);for(let f=e;f<e+i;f++){let g=this.getParsed(f),m=o||I(g[a.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),p=this._calculateBarIndexPixels(f,h),b=(g._stacks||{})[a.axis],y={horizontal:c,base:m.base,enableBorderRadius:!b||In(g._custom)||r===b._top||r===b._bottom,x:c?m.head:p.center,y:c?p.center:m.head,height:c?p.size:Math.abs(m.size),width:c?Math.abs(m.size):p.size};d&&(y.options=u||this.resolveDataElementOptions(f,t[f].active?\"active\":n));let _=y.options||t[f].options;hu(y,_,b,r),du(y,_,h.ratio),this.updateElement(t[f],f,y,n)}}_getStacks(t,e){let{iScale:i}=this._cachedMeta,n=i.getMatchingVisibleMetas(this._type).filter(h=>h.controller.options.grouped),o=i.options.stacked,r=[],a=this._cachedMeta.controller.getParsed(e),l=a&&a[i.axis],c=h=>{let u=h._parsed.find(f=>f[i.axis]===l),d=u&&u[h.vScale.axis];if(I(d)||isNaN(d))return!0};for(let h of n)if(!(e!==void 0&&c(h))&&((o===!1||r.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&r.push(h.stack),h.index===t))break;return r.length||r.push(void 0),r}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(i=>t[i].axis===e).shift()}_getAxis(){let t={},e=this.getFirstScaleIdForIndexAxis();for(let i of this.chart.data.datasets)t[P(this.chart.options.indexAxis===\"x\"?i.xAxisID:i.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,i){let n=this._getStacks(t,i),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){let t=this.options,e=this._cachedMeta,i=e.iScale,n=[],o,r;for(o=0,r=e.data.length;o<r;++o)n.push(i.getPixelForValue(this.getParsed(o)[i.axis],o));let a=t.barThickness;return{min:a||nu(e),pixels:n,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){let{_cachedMeta:{vScale:e,_stacked:i,index:n},options:{base:o,minBarLength:r}}=this,a=o||0,l=this.getParsed(t),c=l._custom,h=In(c),u=l[e.axis],d=0,f=i?this.applyStack(e,l,i):u,g,m;f!==u&&(d=f-u,f=u),h&&(u=c.barStart,f=c.barEnd-c.barStart,u!==0&&St(u)!==St(c.barEnd)&&(d=0),d+=u);let p=!I(o)&&!h?o:d,b=e.getPixelForValue(p);if(this.chart.getDataVisibility(t)?g=e.getPixelForValue(d+f):g=b,m=g-b,Math.abs(m)<r){m=lu(m,e,a)*r,u===a&&(b-=m/2);let y=e.getPixelForDecimal(0),_=e.getPixelForDecimal(1),w=Math.min(y,_),x=Math.max(y,_);b=Math.max(Math.min(b,x),w),g=b+m,i&&!h&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(g)-e.getValueForPixel(b))}if(b===e.getPixelForValue(a)){let y=St(m)*e.getLineWidthForValue(a)/2;b+=y,m-=y}return{size:m,base:b,head:g,center:g+m/2}}_calculateBarIndexPixels(t,e){let i=e.scale,n=this.options,o=n.skipNull,r=P(n.maxBarThickness,1/0),a,l,c=this._getAxisCount();if(e.grouped){let h=o?this._getStackCount(t):e.stackCount,u=n.barThickness===\"flex\"?ru(t,e,n,h*c):ou(t,e,n,h*c),d=this.chart.options.indexAxis===\"x\"?this.getDataset().xAxisID:this.getDataset().yAxisID,f=this._getAxis().indexOf(P(d,this.getFirstScaleIdForIndexAxis())),g=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0)+f;a=u.start+u.chunk*g+u.chunk/2,l=Math.min(r,u.chunk*u.ratio)}else a=i.getPixelForValue(this.getParsed(t)[i.axis],t),l=Math.min(r,e.min*e.ratio);return{base:a-l/2,head:a+l/2,center:a,size:l}}draw(){let t=this._cachedMeta,e=t.vScale,i=t.data,n=i.length,o=0;for(;o<n;++o)this.getParsed(o)[e.axis]!==null&&!i[o].hidden&&i[o].draw(this._ctx)}};v(We,\"id\",\"bar\"),v(We,\"defaults\",{datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}}),v(We,\"overrides\",{scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}});var Be=class extends ut{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,n){let o=super.parsePrimitiveData(t,e,i,n);for(let r=0;r<o.length;r++)o[r]._custom=this.resolveDataElementOptions(r+i).radius;return o}parseArrayData(t,e,i,n){let o=super.parseArrayData(t,e,i,n);for(let r=0;r<o.length;r++){let a=e[i+r];o[r]._custom=P(a[2],this.resolveDataElementOptions(r+i).radius)}return o}parseObjectData(t,e,i,n){let o=super.parseObjectData(t,e,i,n);for(let r=0;r<o.length;r++){let a=e[i+r];o[r]._custom=P(a&&a.r&&+a.r,this.resolveDataElementOptions(r+i).radius)}return o}getMaxOverflow(){let t=this._cachedMeta.data,e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:n,yScale:o}=e,r=this.getParsed(t),a=n.getLabelForValue(r.x),l=o.getLabelForValue(r.y),c=r._custom;return{label:i[t]||\"\",value:\"(\"+a+\", \"+l+(c?\", \"+c:\"\")+\")\"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,n){let o=n===\"reset\",{iScale:r,vScale:a}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=r.axis,u=a.axis;for(let d=e;d<e+i;d++){let f=t[d],g=!o&&this.getParsed(d),m={},p=m[h]=o?r.getPixelForDecimal(.5):r.getPixelForValue(g[h]),b=m[u]=o?a.getBasePixel():a.getPixelForValue(g[u]);m.skip=isNaN(p)||isNaN(b),c&&(m.options=l||this.resolveDataElementOptions(d,f.active?\"active\":n),o&&(m.options.radius=0)),this.updateElement(f,d,m,n)}}resolveDataElementOptions(t,e){let i=this.getParsed(t),n=super.resolveDataElementOptions(t,e);n.$shared&&(n=Object.assign({},n,{$shared:!1}));let o=n.radius;return e!==\"active\"&&(n.radius=0),n.radius+=P(i&&i._custom,o),n}};v(Be,\"id\",\"bubble\"),v(Be,\"defaults\",{datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}}),v(Be,\"overrides\",{scales:{x:{type:\"linear\"},y:{type:\"linear\"}}});function fu(s,t,e){let i=1,n=1,o=0,r=0;if(t<$){let a=s,l=a+t,c=Math.cos(a),h=Math.sin(a),u=Math.cos(l),d=Math.sin(l),f=(_,w,x)=>Fe(_,a,l,!0)?1:Math.max(w,w*e,x,x*e),g=(_,w,x)=>Fe(_,a,l,!0)?-1:Math.min(w,w*e,x,x*e),m=f(0,c,u),p=f(q,h,d),b=g(F,c,u),y=g(F+q,h,d);i=(m-b)/2,n=(p-y)/2,o=-(m+b)/2,r=-(p+y)/2}return{ratioX:i,ratioY:n,offsetX:o,offsetY:r}}var jt=class extends ut{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let i=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=i;else{let o=l=>+i[l];if(E(i[t])){let{key:l=\"value\"}=this._parsing;o=c=>+Wt(i[c],l)}let r,a;for(r=t,a=t+e;r<a;++r)n._parsed[r]=o(r)}}_getRotation(){return bt(this.options.rotation-90)}_getCircumference(){return bt(this.options.circumference)}_getRotationExtents(){let t=$,e=-$;for(let i=0;i<this.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)&&this.chart.getDatasetMeta(i).type===this._type){let n=this.chart.getDatasetMeta(i).controller,o=n._getRotation(),r=n._getCircumference();t=Math.min(t,o),e=Math.max(e,o+r)}return{rotation:t,circumference:e-t}}update(t){let e=this.chart,{chartArea:i}=e,n=this._cachedMeta,o=n.data,r=this.getMaxBorderWidth()+this.getMaxOffset(o)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-r)/2,0),l=Math.min(er(this.options.cutout,a),1),c=this._getRingWeight(this.index),{circumference:h,rotation:u}=this._getRotationExtents(),{ratioX:d,ratioY:f,offsetX:g,offsetY:m}=fu(u,h,l),p=(i.width-r)/d,b=(i.height-r)/f,y=Math.max(Math.min(p,b)/2,0),_=tn(this.options.radius,y),w=Math.max(_*l,0),x=(_-w)/this._getVisibleDatasetWeightTotal();this.offsetX=g*_,this.offsetY=m*_,n.total=this.calculateTotal(),this.outerRadius=_-x*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-x*c,0),this.updateElements(o,0,o.length,t)}_circumference(t,e){let i=this.options,n=this._cachedMeta,o=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||n._parsed[t]===null||n.data[t].hidden?0:this.calculateCircumference(n._parsed[t]*o/$)}updateElements(t,e,i,n){let o=n===\"reset\",r=this.chart,a=r.chartArea,c=r.options.animation,h=(a.left+a.right)/2,u=(a.top+a.bottom)/2,d=o&&c.animateScale,f=d?0:this.innerRadius,g=d?0:this.outerRadius,{sharedOptions:m,includeOptions:p}=this._getSharedOptions(e,n),b=this._getRotation(),y;for(y=0;y<e;++y)b+=this._circumference(y,o);for(y=e;y<e+i;++y){let _=this._circumference(y,o),w=t[y],x={x:h+this.offsetX,y:u+this.offsetY,startAngle:b,endAngle:b+_,circumference:_,outerRadius:g,innerRadius:f};p&&(x.options=m||this.resolveDataElementOptions(y,w.active?\"active\":n)),b+=_,this.updateElement(w,y,x,n)}}calculateTotal(){let t=this._cachedMeta,e=t.data,i=0,n;for(n=0;n<e.length;n++){let o=t._parsed[n];o!==null&&!isNaN(o)&&this.chart.getDataVisibility(n)&&!e[n].hidden&&(i+=Math.abs(o))}return i}calculateCircumference(t){let e=this._cachedMeta.total;return e>0&&!isNaN(t)?$*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],o=Re(e._parsed[t],i.options.locale);return{label:n[t]||\"\",value:o}}getMaxBorderWidth(t){let e=0,i=this.chart,n,o,r,a,l;if(!t){for(n=0,o=i.data.datasets.length;n<o;++n)if(i.isDatasetVisible(n)){r=i.getDatasetMeta(n),t=r.data,a=r.controller;break}}if(!t)return 0;for(n=0,o=t.length;n<o;++n)l=a.resolveDataElementOptions(n),l.borderAlign!==\"inner\"&&(e=Math.max(e,l.borderWidth||0,l.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,n=t.length;i<n;++i){let o=this.resolveDataElementOptions(i);e=Math.max(e,o.offset||0,o.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(P(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}};v(jt,\"id\",\"doughnut\"),v(jt,\"defaults\",{datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\",\"spacing\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",spacing:0,indexAxis:\"r\"}),v(jt,\"descriptors\",{_scriptable:t=>t!==\"spacing\",_indexable:t=>t!==\"spacing\"&&!t.startsWith(\"borderDash\")&&!t.startsWith(\"hoverBorderDash\")}),v(jt,\"overrides\",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){let e=t.data,{labels:{pointStyle:i,textAlign:n,color:o,useBorderRadius:r,borderRadius:a}}=t.legend.options;return e.labels.length&&e.datasets.length?e.labels.map((l,c)=>{let u=t.getDatasetMeta(0).controller.getStyle(c);return{text:l,fillStyle:u.backgroundColor,fontColor:o,hidden:!t.getDataVisibility(c),lineDash:u.borderDash,lineDashOffset:u.borderDashOffset,lineJoin:u.borderJoinStyle,lineWidth:u.borderWidth,strokeStyle:u.borderColor,textAlign:n,pointStyle:i,borderRadius:r&&(a||u.borderRadius),index:c}}):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}});var He=class extends ut{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:i,data:n=[],_dataset:o}=e,r=this.chart._animationsDisabled,{start:a,count:l}=un(e,n,r);this._drawStart=a,this._drawCount=l,dn(e)&&(a=0,l=n.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!o._decimated,i.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!r,options:c},t),this.updateElements(n,a,l,t)}updateElements(t,e,i,n){let o=n===\"reset\",{iScale:r,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:u}=this._getSharedOptions(e,n),d=r.axis,f=a.axis,{spanGaps:g,segment:m}=this.options,p=fe(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n===\"none\",y=e+i,_=t.length,w=e>0&&this.getParsed(e-1);for(let x=0;x<_;++x){let k=t[x],S=b?k:{};if(x<e||x>=y){S.skip=!0;continue}let M=this.getParsed(x),T=I(M[f]),C=S[d]=r.getPixelForValue(M[d],x),A=S[f]=o||T?a.getBasePixel():a.getPixelForValue(l?this.applyStack(a,M,l):M[f],x);S.skip=isNaN(C)||isNaN(A)||T,S.stop=x>0&&Math.abs(M[d]-w[d])>p,m&&(S.parsed=M,S.raw=c.data[x]),u&&(S.options=h||this.resolveDataElementOptions(x,k.active?\"active\":n)),b||this.updateElement(k,x,S,n),w=M}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return i;let o=n[0].size(this.resolveDataElementOptions(0)),r=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(i,o,r)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};v(He,\"id\",\"line\"),v(He,\"defaults\",{datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1}),v(He,\"overrides\",{scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}});var xe=class extends ut{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,i=this.chart,n=i.data.labels||[],o=Re(e._parsed[t].r,i.options.locale);return{label:n[t]||\"\",value:o}}parseObjectData(t,e,i,n){return wn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((i,n)=>{let o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(o<e.min&&(e.min=o),o>e.max&&(e.max=o))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,i=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),r=Math.max(i.cutoutPercentage?o/100*i.cutoutPercentage:1,0),a=(o-r)/t.getVisibleDatasetCount();this.outerRadius=o-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,i,n){let o=n===\"reset\",r=this.chart,l=r.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,u=c.yCenter,d=c.getIndexAngle(0)-.5*F,f=d,g,m=360/this.countVisibleElements();for(g=0;g<e;++g)f+=this._computeAngle(g,n,m);for(g=e;g<e+i;g++){let p=t[g],b=f,y=f+this._computeAngle(g,n,m),_=r.getDataVisibility(g)?c.getDistanceFromCenterForValue(this.getParsed(g).r):0;f=y,o&&(l.animateScale&&(_=0),l.animateRotate&&(b=y=d));let w={x:h,y:u,innerRadius:0,outerRadius:_,startAngle:b,endAngle:y,options:this.resolveDataElementOptions(g,p.active?\"active\":n)};this.updateElement(p,g,w,n)}}countVisibleElements(){let t=this._cachedMeta,e=0;return t.data.forEach((i,n)=>{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?bt(this.resolveDataElementOptions(t,e).angle||i):0}};v(xe,\"id\",\"polarArea\"),v(xe,\"defaults\",{dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0}),v(xe,\"overrides\",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){let e=t.data;if(e.labels.length&&e.datasets.length){let{labels:{pointStyle:i,color:n}}=t.legend.options;return e.labels.map((o,r)=>{let l=t.getDatasetMeta(0).controller.getStyle(r);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(r),index:r}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});var vs=class extends jt{};v(vs,\"id\",\"pie\"),v(vs,\"defaults\",{cutout:0,rotation:0,circumference:360,radius:\"100%\"});var $e=class extends ut{getLabelAndValue(t){let e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,n){return wn.bind(this)(t,e,i,n)}update(t){let e=this._cachedMeta,i=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(i.points=n,t!==\"resize\"){let r=this.resolveDatasetElementOptions(t);this.options.showLine||(r.borderWidth=0);let a={_loop:!0,_fullLoop:o.length===n.length,options:r};this.updateElement(i,void 0,a,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,i,n){let o=this._cachedMeta.rScale,r=n===\"reset\";for(let a=e;a<e+i;a++){let l=t[a],c=this.resolveDataElementOptions(a,l.active?\"active\":n),h=o.getPointPositionForValue(a,this.getParsed(a).r),u=r?o.xCenter:h.x,d=r?o.yCenter:h.y,f={x:u,y:d,angle:h.angle,skip:isNaN(u)||isNaN(d),options:c};this.updateElement(l,a,f,n)}}};v($e,\"id\",\"radar\"),v($e,\"defaults\",{datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}}),v($e,\"overrides\",{aspectRatio:1,scales:{r:{type:\"radialLinear\"}}});var je=class extends ut{getLabelAndValue(t){let e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:n,yScale:o}=e,r=this.getParsed(t),a=n.getLabelForValue(r.x),l=o.getLabelForValue(r.y);return{label:i[t]||\"\",value:\"(\"+a+\", \"+l+\")\"}}update(t){let e=this._cachedMeta,{data:i=[]}=e,n=this.chart._animationsDisabled,{start:o,count:r}=un(e,i,n);if(this._drawStart=o,this._drawCount=r,dn(e)&&(o=0,r=i.length),this.options.showLine){this.datasetElementType||this.addElements();let{dataset:a,_dataset:l}=e;a._chart=this.chart,a._datasetIndex=this.index,a._decimated=!!l._decimated,a.points=i;let c=this.resolveDatasetElementOptions(t);c.segment=this.options.segment,this.updateElement(a,void 0,{animated:!n,options:c},t)}else this.datasetElementType&&(delete e.dataset,this.datasetElementType=!1);this.updateElements(i,o,r,t)}addElements(){let{showLine:t}=this.options;!this.datasetElementType&&t&&(this.datasetElementType=this.chart.registry.getElement(\"line\")),super.addElements()}updateElements(t,e,i,n){let o=n===\"reset\",{iScale:r,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,h=this.resolveDataElementOptions(e,n),u=this.getSharedOptions(h),d=this.includeOptions(n,u),f=r.axis,g=a.axis,{spanGaps:m,segment:p}=this.options,b=fe(m)?m:Number.POSITIVE_INFINITY,y=this.chart._animationsDisabled||o||n===\"none\",_=e>0&&this.getParsed(e-1);for(let w=e;w<e+i;++w){let x=t[w],k=this.getParsed(w),S=y?x:{},M=I(k[g]),T=S[f]=r.getPixelForValue(k[f],w),C=S[g]=o||M?a.getBasePixel():a.getPixelForValue(l?this.applyStack(a,k,l):k[g],w);S.skip=isNaN(T)||isNaN(C)||M,S.stop=w>0&&Math.abs(k[f]-_[f])>b,p&&(S.parsed=k,S.raw=c.data[w]),d&&(S.options=u||this.resolveDataElementOptions(w,x.active?\"active\":n)),y||this.updateElement(x,w,S,n),_=k}this.updateSharedOptions(u,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let a=0;for(let l=e.length-1;l>=0;--l)a=Math.max(a,e[l].size(this.resolveDataElementOptions(l))/2);return a>0&&a}let i=t.dataset,n=i.options&&i.options.borderWidth||0;if(!e.length)return n;let o=e[0].size(this.resolveDataElementOptions(0)),r=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,r)/2}};v(je,\"id\",\"scatter\"),v(je,\"defaults\",{datasetElementType:!1,dataElementType:\"point\",showLine:!1,fill:!1}),v(je,\"overrides\",{interaction:{mode:\"point\"},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}});var gu=Object.freeze({__proto__:null,BarController:We,BubbleController:Be,DoughnutController:jt,LineController:He,PieController:vs,PolarAreaController:xe,RadarController:$e,ScatterController:je});function me(){throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\")}var Hn=class s{constructor(t){v(this,\"options\");this.options=t||{}}static override(t){Object.assign(s.prototype,t)}init(){}formats(){return me()}parse(){return me()}format(){return me()}add(){return me()}diff(){return me()}startOf(){return me()}endOf(){return me()}},to={_date:Hn};function mu(s,t,e,i){let{controller:n,data:o,_sorted:r}=s,a=n._cachedMeta.iScale,l=s.dataset&&s.dataset.options?s.dataset.options.spanGaps:null;if(a&&t===a.axis&&t!==\"r\"&&r&&o.length){let c=a._reversePixels?ar:Ct;if(i){if(n._sharedOptions){let h=o[0],u=typeof h.getRange==\"function\"&&h.getRange(t);if(u){let d=c(o,t,e-u),f=c(o,t,e+u);return{lo:d.lo,hi:f.hi}}}}else{let h=c(o,t,e);if(l){let{vScale:u}=n._cachedMeta,{_parsed:d}=s,f=d.slice(0,h.lo+1).reverse().findIndex(m=>!I(m[u.axis]));h.lo-=Math.max(0,f);let g=d.slice(h.hi).findIndex(m=>!I(m[u.axis]));h.hi+=Math.max(0,g)}return h}}return{lo:0,hi:o.length-1}}function Ls(s,t,e,i,n){let o=s.getSortedVisibleDatasetMetas(),r=e[t];for(let a=0,l=o.length;a<l;++a){let{index:c,data:h}=o[a],{lo:u,hi:d}=mu(o[a],t,r,n);for(let f=u;f<=d;++f){let g=h[f];g.skip||i(g,c,f)}}}function pu(s){let t=s.indexOf(\"x\")!==-1,e=s.indexOf(\"y\")!==-1;return function(i,n){let o=t?Math.abs(i.x-n.x):0,r=e?Math.abs(i.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(r,2))}}function En(s,t,e,i,n){let o=[];return!n&&!s.isPointInArea(t)||Ls(s,e,t,function(a,l,c){!n&&!Pt(a,s.chartArea,0)||a.inRange(t.x,t.y,i)&&o.push({element:a,datasetIndex:l,index:c})},!0),o}function bu(s,t,e,i){let n=[];function o(r,a,l){let{startAngle:c,endAngle:h}=r.getProps([\"startAngle\",\"endAngle\"],i),{angle:u}=rn(r,{x:t.x,y:t.y});Fe(u,c,h)&&n.push({element:r,datasetIndex:a,index:l})}return Ls(s,e,t,o),n}function yu(s,t,e,i,n,o){let r=[],a=pu(e),l=Number.POSITIVE_INFINITY;function c(h,u,d){let f=h.inRange(t.x,t.y,n);if(i&&!f)return;let g=h.getCenterPoint(n);if(!(!!o||s.isPointInArea(g))&&!f)return;let p=a(t,g);p<l?(r=[{element:h,datasetIndex:u,index:d}],l=p):p===l&&r.push({element:h,datasetIndex:u,index:d})}return Ls(s,e,t,c),r}function Ln(s,t,e,i,n,o){return!o&&!s.isPointInArea(t)?[]:e===\"r\"&&!i?bu(s,t,e,n):yu(s,t,e,i,n,o)}function zr(s,t,e,i,n){let o=[],r=e===\"x\"?\"inXRange\":\"inYRange\",a=!1;return Ls(s,e,t,(l,c,h)=>{l[r]&&l[r](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,n))}),i&&!a?[]:o}var xu={evaluateInteractionItems:Ls,modes:{index(s,t,e,i){let n=ee(t,s),o=e.axis||\"x\",r=e.includeInvisible||!1,a=e.intersect?En(s,n,o,i,r):Ln(s,n,o,!1,i,r),l=[];return a.length?(s.getSortedVisibleDatasetMetas().forEach(c=>{let h=a[0].index,u=c.data[h];u&&!u.skip&&l.push({element:u,datasetIndex:c.index,index:h})}),l):[]},dataset(s,t,e,i){let n=ee(t,s),o=e.axis||\"xy\",r=e.includeInvisible||!1,a=e.intersect?En(s,n,o,i,r):Ln(s,n,o,!1,i,r);if(a.length>0){let l=a[0].datasetIndex,c=s.getDatasetMeta(l).data;a=[];for(let h=0;h<c.length;++h)a.push({element:c[h],datasetIndex:l,index:h})}return a},point(s,t,e,i){let n=ee(t,s),o=e.axis||\"xy\",r=e.includeInvisible||!1;return En(s,n,o,i,r)},nearest(s,t,e,i){let n=ee(t,s),o=e.axis||\"xy\",r=e.includeInvisible||!1;return Ln(s,n,o,e.intersect,i,r)},x(s,t,e,i){let n=ee(t,s);return zr(s,n,\"x\",e.intersect,i)},y(s,t,e,i){let n=ee(t,s);return zr(s,n,\"y\",e.intersect,i)}}},Pa=[\"left\",\"top\",\"right\",\"bottom\"];function xs(s,t){return s.filter(e=>e.pos===t)}function Vr(s,t){return s.filter(e=>Pa.indexOf(e.pos)===-1&&e.box.axis===t)}function _s(s,t){return s.sort((e,i)=>{let n=t?i:e,o=t?e:i;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function _u(s){let t=[],e,i,n,o,r,a;for(e=0,i=(s||[]).length;e<i;++e)n=s[e],{position:o,options:{stack:r,stackWeight:a=1}}=n,t.push({index:e,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:r&&o+r,stackWeight:a});return t}function wu(s){let t={};for(let e of s){let{stack:i,pos:n,stackWeight:o}=e;if(!i||!Pa.includes(n))continue;let r=t[i]||(t[i]={count:0,placed:0,weight:0,size:0});r.count++,r.weight+=o}return t}function ku(s,t){let e=wu(s),{vBoxMaxWidth:i,hBoxMaxHeight:n}=t,o,r,a;for(o=0,r=s.length;o<r;++o){a=s[o];let{fullSize:l}=a.box,c=e[a.stack],h=c&&a.stackWeight/c.weight;a.horizontal?(a.width=h?h*i:l&&t.availableWidth,a.height=n):(a.width=i,a.height=h?h*n:l&&t.availableHeight)}return e}function vu(s){let t=_u(s),e=_s(t.filter(c=>c.box.fullSize),!0),i=_s(xs(t,\"left\"),!0),n=_s(xs(t,\"right\")),o=_s(xs(t,\"top\"),!0),r=_s(xs(t,\"bottom\")),a=Vr(t,\"x\"),l=Vr(t,\"y\");return{fullSize:e,leftAndTop:i.concat(o),rightAndBottom:n.concat(l).concat(r).concat(a),chartArea:xs(t,\"chartArea\"),vertical:i.concat(n).concat(l),horizontal:o.concat(r).concat(a)}}function Wr(s,t,e,i){return Math.max(s[e],t[e])+Math.max(s[i],t[i])}function Aa(s,t){s.top=Math.max(s.top,t.top),s.left=Math.max(s.left,t.left),s.bottom=Math.max(s.bottom,t.bottom),s.right=Math.max(s.right,t.right)}function Su(s,t,e,i){let{pos:n,box:o}=e,r=s.maxPadding;if(!E(n)){e.size&&(s[n]-=e.size);let u=i[e.stack]||{size:0,count:1};u.size=Math.max(u.size,e.horizontal?o.height:o.width),e.size=u.size/u.count,s[n]+=e.size}o.getPadding&&Aa(r,o.getPadding());let a=Math.max(0,t.outerWidth-Wr(r,s,\"left\",\"right\")),l=Math.max(0,t.outerHeight-Wr(r,s,\"top\",\"bottom\")),c=a!==s.w,h=l!==s.h;return s.w=a,s.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Mu(s){let t=s.maxPadding;function e(i){let n=Math.max(t[i]-s[i],0);return s[i]+=n,n}s.y+=e(\"top\"),s.x+=e(\"left\"),e(\"right\"),e(\"bottom\")}function Ou(s,t){let e=t.maxPadding;function i(n){let o={left:0,top:0,right:0,bottom:0};return n.forEach(r=>{o[r]=Math.max(t[r],e[r])}),o}return i(s?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function Ss(s,t,e,i){let n=[],o,r,a,l,c,h;for(o=0,r=s.length,c=0;o<r;++o){a=s[o],l=a.box,l.update(a.width||t.w,a.height||t.h,Ou(a.horizontal,t));let{same:u,other:d}=Su(t,e,a,i);c|=u&&n.length,h=h||d,l.fullSize||n.push(a)}return c&&Ss(n,t,e,i)||h}function di(s,t,e,i,n){s.top=e,s.left=t,s.right=t+i,s.bottom=e+n,s.width=i,s.height=n}function Br(s,t,e,i){let n=e.padding,{x:o,y:r}=t;for(let a of s){let l=a.box,c=i[a.stack]||{count:1,placed:0,weight:1},h=a.stackWeight/c.weight||1;if(a.horizontal){let u=t.w*h,d=c.size||l.height;Ee(c.start)&&(r=c.start),l.fullSize?di(l,n.left,r,e.outerWidth-n.right-n.left,d):di(l,t.left+c.placed,r,u,d),c.start=r,c.placed+=u,r=l.bottom}else{let u=t.h*h,d=c.size||l.width;Ee(c.start)&&(o=c.start),l.fullSize?di(l,o,n.top,d,e.outerHeight-n.bottom-n.top):di(l,o,t.top+c.placed,d,u),c.start=o,c.placed+=u,o=l.right}}t.x=o,t.y=r}var rt={addBox(s,t){s.boxes||(s.boxes=[]),t.fullSize=t.fullSize||!1,t.position=t.position||\"top\",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw(e){t.draw(e)}}]},s.boxes.push(t)},removeBox(s,t){let e=s.boxes?s.boxes.indexOf(t):-1;e!==-1&&s.boxes.splice(e,1)},configure(s,t,e){t.fullSize=e.fullSize,t.position=e.position,t.weight=e.weight},update(s,t,e,i){if(!s)return;let n=nt(s.options.layout.padding),o=Math.max(t-n.width,0),r=Math.max(e-n.height,0),a=vu(s.boxes),l=a.vertical,c=a.horizontal;z(s.boxes,m=>{typeof m.beforeLayout==\"function\"&&m.beforeLayout()});let h=l.reduce((m,p)=>p.box.options&&p.box.options.display===!1?m:m+1,0)||1,u=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/h,hBoxMaxHeight:r/2}),d=Object.assign({},n);Aa(d,nt(i));let f=Object.assign({maxPadding:d,w:o,h:r,x:n.left,y:n.top},n),g=ku(l.concat(c),u);Ss(a.fullSize,f,u,g),Ss(l,f,u,g),Ss(c,f,u,g)&&Ss(l,f,u,g),Mu(f),Br(a.leftAndTop,f,u,g),f.x+=f.w,f.y+=f.h,Br(a.rightAndBottom,f,u,g),s.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},z(a.chartArea,m=>{let p=m.box;Object.assign(p,s.chartArea),p.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},wi=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,n){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):i)}}isAttached(t){return!0}updateConfig(t){}},$n=class extends wi{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}updateConfig(t){t.options.animation=!1}},yi=\"$chartjs\",Tu={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},Hr=s=>s===null||s===\"\";function Du(s,t){let e=s.style,i=s.getAttribute(\"height\"),n=s.getAttribute(\"width\");if(s[yi]={initial:{height:i,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||\"block\",e.boxSizing=e.boxSizing||\"border-box\",Hr(n)){let o=vn(s,\"width\");o!==void 0&&(s.width=o)}if(Hr(i))if(s.style.height===\"\")s.height=s.width/(t||2);else{let o=vn(s,\"height\");o!==void 0&&(s.height=o)}return s}var Ia=Sr?{passive:!0}:!1;function Cu(s,t,e){s&&s.addEventListener(t,e,Ia)}function Pu(s,t,e){s&&s.canvas&&s.canvas.removeEventListener(t,e,Ia)}function Au(s,t){let e=Tu[s.type]||s.type,{x:i,y:n}=ee(s,t);return{type:e,chart:t,native:s,x:i!==void 0?i:null,y:n!==void 0?n:null}}function ki(s,t){for(let e of s)if(e===t||e.contains(t))return!0}function Iu(s,t,e){let i=s.canvas,n=new MutationObserver(o=>{let r=!1;for(let a of o)r=r||ki(a.addedNodes,i),r=r&&!ki(a.removedNodes,i);r&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function Eu(s,t,e){let i=s.canvas,n=new MutationObserver(o=>{let r=!1;for(let a of o)r=r||ki(a.removedNodes,i),r=r&&!ki(a.addedNodes,i);r&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var As=new Map,$r=0;function Ea(){let s=window.devicePixelRatio;s!==$r&&($r=s,As.forEach((t,e)=>{e.currentDevicePixelRatio!==s&&t()}))}function Lu(s,t){As.size||window.addEventListener(\"resize\",Ea),As.set(s,t)}function Fu(s){As.delete(s),As.size||window.removeEventListener(\"resize\",Ea)}function Ru(s,t,e){let i=s.canvas,n=i&&hi(i);if(!n)return;let o=hn((a,l)=>{let c=n.clientWidth;e(a,l),c<n.clientWidth&&e()},window),r=new ResizeObserver(a=>{let l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return r.observe(n),Lu(s,o),r}function Fn(s,t,e){e&&e.disconnect(),t===\"resize\"&&Fu(s)}function Nu(s,t,e){let i=s.canvas,n=hn(o=>{s.ctx!==null&&e(Au(o,s))},s);return Cu(i,t,n),n}var jn=class extends wi{acquireContext(t,e){let i=t&&t.getContext&&t.getContext(\"2d\");return i&&i.canvas===t?(Du(t,e),i):null}releaseContext(t){let e=t.canvas;if(!e[yi])return!1;let i=e[yi].initial;[\"height\",\"width\"].forEach(o=>{let r=i[o];I(r)?e.removeAttribute(o):e.setAttribute(o,r)});let n=i.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[yi],!0}addEventListener(t,e,i){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),r={attach:Iu,detach:Eu,resize:Ru}[e]||Nu;n[e]=r(t,e,i)}removeEventListener(t,e){let i=t.$proxies||(t.$proxies={}),n=i[e];if(!n)return;({attach:Fn,detach:Fn,resize:Fn}[e]||Pu)(t,e,n),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return vr(t,e,i,n)}isAttached(t){let e=t&&hi(t);return!!(e&&e.isConnected)}};function zu(s){return!ci()||typeof OffscreenCanvas<\"u\"&&s instanceof OffscreenCanvas?$n:jn}var dt=class{constructor(){v(this,\"x\");v(this,\"y\");v(this,\"active\",!1);v(this,\"options\");v(this,\"$animations\")}tooltipPosition(t){let{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}hasValue(){return fe(this.x)&&fe(this.y)}getProps(t,e){let i=this.$animations;if(!e||!i)return this;let n={};return t.forEach(o=>{n[o]=i[o]&&i[o].active()?i[o]._to:this[o]}),n}};v(dt,\"defaults\",{}),v(dt,\"defaultRoutes\");function Vu(s,t){let e=s.options.ticks,i=Wu(s),n=Math.min(e.maxTicksLimit||i,i),o=e.major.enabled?Hu(t):[],r=o.length,a=o[0],l=o[r-1],c=[];if(r>n)return $u(t,c,o,r/n),c;let h=Bu(o,t,n);if(r>0){let u,d,f=r>1?Math.round((l-a)/(r-1)):null;for(fi(t,c,h,I(f)?0:a-f,a),u=0,d=r-1;u<d;u++)fi(t,c,h,o[u],o[u+1]);return fi(t,c,h,l,I(f)?t.length:l+f),c}return fi(t,c,h),c}function Wu(s){let t=s.options.offset,e=s._tickSize(),i=s._length/e+(t?0:1),n=s._maxLength/e;return Math.floor(Math.min(i,n))}function Bu(s,t,e){let i=ju(s),n=t.length/e;if(!i)return Math.max(n,1);let o=nr(i);for(let r=0,a=o.length-1;r<a;r++){let l=o[r];if(l>n)return l}return Math.max(n,1)}function Hu(s){let t=[],e,i;for(e=0,i=s.length;e<i;e++)s[e].major&&t.push(e);return t}function $u(s,t,e,i){let n=0,o=e[0],r;for(i=Math.ceil(i),r=0;r<s.length;r++)r===o&&(t.push(s[r]),n++,o=e[n*i])}function fi(s,t,e,i,n){let o=P(i,0),r=Math.min(P(n,s.length),s.length),a=0,l,c,h;for(e=Math.ceil(e),n&&(l=n-i,e=l/Math.floor(l/e)),h=o;h<0;)a++,h=Math.round(o+a*e);for(c=Math.max(o,0);c<r;c++)c===h&&(t.push(s[c]),a++,h=Math.round(o+a*e))}function ju(s){let t=s.length,e,i;if(t<2)return!1;for(i=s[0],e=1;e<t;++e)if(s[e]-s[e-1]!==i)return!1;return i}var Uu=s=>s===\"left\"?\"right\":s===\"right\"?\"left\":s,jr=(s,t,e)=>t===\"top\"||t===\"left\"?s[t]+e:s[t]-e,Ur=(s,t)=>Math.min(t||s,s);function Yr(s,t){let e=[],i=s.length/t,n=s.length,o=0;for(;o<n;o+=i)e.push(s[Math.floor(o)]);return e}function Yu(s,t,e){let i=s.ticks.length,n=Math.min(t,i-1),o=s._startPixel,r=s._endPixel,a=1e-6,l=s.getPixelForTick(n),c;if(!(e&&(i===1?c=Math.max(l-o,r-l):t===0?c=(s.getPixelForTick(1)-l)/2:c=(l-s.getPixelForTick(n-1))/2,l+=n<t?c:-c,l<o-a||l>r+a)))return l}function Zu(s,t){z(s,e=>{let i=e.gc,n=i.length/2,o;if(n>t){for(o=0;o<n;++o)delete e.data[i[o]];i.splice(0,n)}})}function ws(s){return s.drawTicks?s.tickLength:0}function Zr(s,t){if(!s.display)return 0;let e=X(s.font,t),i=nt(s.padding);return(H(s.text)?s.text.length:1)*e.lineHeight+i.height}function qu(s,t){return Bt(s,{scale:t,type:\"scale\"})}function Gu(s,t,e){return Bt(s,{tick:e,index:t,type:\"tick\"})}function Xu(s,t,e){let i=ni(s);return(e&&t!==\"right\"||!e&&t===\"right\")&&(i=Uu(i)),i}function Ju(s,t,e,i){let{top:n,left:o,bottom:r,right:a,chart:l}=s,{chartArea:c,scales:h}=l,u=0,d,f,g,m=r-n,p=a-o;if(s.isHorizontal()){if(f=it(i,o,a),E(e)){let b=Object.keys(e)[0],y=e[b];g=h[b].getPixelForValue(y)+m-t}else e===\"center\"?g=(c.bottom+c.top)/2+m-t:g=jr(s,e,t);d=a-o}else{if(E(e)){let b=Object.keys(e)[0],y=e[b];f=h[b].getPixelForValue(y)-p+t}else e===\"center\"?f=(c.left+c.right)/2-p+t:f=jr(s,e,t);g=it(i,r,n),u=e===\"left\"?-q:q}return{titleX:f,titleY:g,maxWidth:d,rotation:u}}var we=class s extends dt{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:n}=this;return t=at(t,Number.POSITIVE_INFINITY),e=at(e,Number.NEGATIVE_INFINITY),i=at(i,Number.POSITIVE_INFINITY),n=at(n,Number.NEGATIVE_INFINITY),{min:at(t,i),max:at(e,n),minDefined:Z(t),maxDefined:Z(e)}}getMinMax(t){let{min:e,max:i,minDefined:n,maxDefined:o}=this.getUserBounds(),r;if(n&&o)return{min:e,max:i};let a=this.getMatchingVisibleMetas();for(let l=0,c=a.length;l<c;++l)r=a[l].controller.getMinMax(this,t),n||(e=Math.min(e,r.min)),o||(i=Math.max(i,r.max));return e=o&&e>i?i:e,i=n&&e>i?e:i,{min:at(e,at(i,e)),max:at(i,at(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){W(this.options.beforeUpdate,[this])}update(t,e,i){let{beginAtZero:n,grace:o,ticks:r}=this.options,a=r.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=br(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=a<this.ticks.length;this._convertTicksToLabels(l?Yr(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),r.display&&(r.autoSkip||r.source===\"auto\")&&(this.ticks=Vu(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),l&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t=this.options.reverse,e,i;this.isHorizontal()?(e=this.left,i=this.right):(e=this.top,i=this.bottom,t=!t),this._startPixel=e,this._endPixel=i,this._reversePixels=t,this._length=i-e,this._alignToPixels=this.options.alignToPixels}afterUpdate(){W(this.options.afterUpdate,[this])}beforeSetDimensions(){W(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){W(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),W(this.options[t],[this])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){W(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){let e=this.options.ticks,i,n,o;for(i=0,n=t.length;i<n;i++)o=t[i],o.label=W(e.callback,[o.value,i,t],this)}afterTickToLabelConversion(){W(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){W(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let t=this.options,e=t.ticks,i=Ur(this.ticks.length,t.ticks.maxTicksLimit),n=e.minRotation||0,o=e.maxRotation,r=n,a,l,c;if(!this._isVisible()||!e.display||n>=o||i<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),u=h.widest.width,d=h.highest.height,f=K(this.chart.width-u,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),u+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-ws(t.grid)-e.padding-Zr(t.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),r=si(Math.min(Math.asin(K((h.highest.height+6)/a,-1,1)),Math.asin(K(l/c,-1,1))-Math.asin(K(d/c,-1,1)))),r=Math.max(n,Math.min(o,r))),this.labelRotation=r}afterCalculateLabelRotation(){W(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){W(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:i,title:n,grid:o}}=this,r=this._isVisible(),a=this.isHorizontal();if(r){let l=Zr(n,e.options.font);if(a?(t.width=this.maxWidth,t.height=ws(o)+l):(t.height=this.maxHeight,t.width=ws(o)+l),i.display&&this.ticks.length){let{first:c,last:h,widest:u,highest:d}=this._getLabelSizes(),f=i.padding*2,g=bt(this.labelRotation),m=Math.cos(g),p=Math.sin(g);if(a){let b=i.mirror?0:p*u.width+m*d.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{let b=i.mirror?0:m*u.width+p*d.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,p,m)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,n){let{ticks:{align:o,padding:r},position:a}=this.options,l=this.labelRotation!==0,c=a!==\"top\"&&this.axis===\"x\";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,u=this.right-this.getPixelForTick(this.ticks.length-1),d=0,f=0;l?c?(d=n*t.width,f=i*e.height):(d=i*t.height,f=n*e.width):o===\"start\"?f=e.width:o===\"end\"?d=t.width:o!==\"inner\"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-h+r)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-u+r)*this.width/(this.width-u),0)}else{let h=e.height/2,u=t.height/2;o===\"start\"?(h=0,u=t.height):o===\"end\"&&(h=e.height,u=0),this.paddingTop=h+r,this.paddingBottom=u+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){W(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e===\"top\"||e===\"bottom\"||t===\"x\"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e<i;e++)I(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){let e=this.options.ticks.sampleSize,i=this.ticks;e<i.length&&(i=Yr(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,e,i){let{ctx:n,_longestTextCache:o}=this,r=[],a=[],l=Math.floor(e/Ur(e,i)),c=0,h=0,u,d,f,g,m,p,b,y,_,w,x;for(u=0;u<e;u+=l){if(g=t[u].label,m=this._resolveTickFontOptions(u),n.font=p=m.string,b=o[p]=o[p]||{data:{},gc:[]},y=m.lineHeight,_=w=0,!I(g)&&!H(g))_=fs(n,b.data,b.gc,_,g),w=y;else if(H(g))for(d=0,f=g.length;d<f;++d)x=g[d],!I(x)&&!H(x)&&(_=fs(n,b.data,b.gc,_,x),w+=y);r.push(_),a.push(w),c=Math.max(_,c),h=Math.max(w,h)}Zu(o,e);let k=r.indexOf(c),S=a.indexOf(h),M=T=>({width:r[T]||0,height:a[T]||0});return{first:M(0),last:M(e-1),widest:M(k),highest:M(S),widths:r,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return rr(this._alignToPixels?Kt(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&t<e.length){let i=e[t];return i.$context||(i.$context=Gu(this.getContext(),t,i))}return this.$context||(this.$context=qu(this.chart.getContext(),this))}_tickSize(){let t=this.options.ticks,e=bt(this.labelRotation),i=Math.abs(Math.cos(e)),n=Math.abs(Math.sin(e)),o=this._getLabelSizes(),r=t.autoSkipPadding||0,a=o?o.widest.width+r:0,l=o?o.highest.height+r:0;return this.isHorizontal()?l*i>a*n?a/i:l/n:l*n<a*i?l/i:a/n}_isVisible(){let t=this.options.display;return t!==\"auto\"?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){let e=this.axis,i=this.chart,n=this.options,{grid:o,position:r,border:a}=n,l=o.offset,c=this.isHorizontal(),u=this.ticks.length+(l?1:0),d=ws(o),f=[],g=a.setContext(this.getContext()),m=g.display?g.width:0,p=m/2,b=function(U){return Kt(i,U,m)},y,_,w,x,k,S,M,T,C,A,L,et;if(r===\"top\")y=b(this.bottom),S=this.bottom-d,T=y-p,A=b(t.top)+p,et=t.bottom;else if(r===\"bottom\")y=b(this.top),A=t.top,et=b(t.bottom)-p,S=y+p,T=this.top+d;else if(r===\"left\")y=b(this.right),k=this.right-d,M=y-p,C=b(t.left)+p,L=t.right;else if(r===\"right\")y=b(this.left),C=t.left,L=b(t.right)-p,k=y+p,M=this.left+d;else if(e===\"x\"){if(r===\"center\")y=b((t.top+t.bottom)/2+.5);else if(E(r)){let U=Object.keys(r)[0],G=r[U];y=b(this.chart.scales[U].getPixelForValue(G))}A=t.top,et=t.bottom,S=y+p,T=S+d}else if(e===\"y\"){if(r===\"center\")y=b((t.left+t.right)/2);else if(E(r)){let U=Object.keys(r)[0],G=r[U];y=b(this.chart.scales[U].getPixelForValue(G))}k=y-p,M=k-d,C=t.left,L=t.right}let ht=P(n.ticks.maxTicksLimit,u),V=Math.max(1,Math.ceil(u/ht));for(_=0;_<u;_+=V){let U=this.getContext(_),G=o.setContext(U),vt=a.setContext(U),ot=G.lineWidth,Oe=G.color,js=vt.dash||[],Te=vt.dashOffset,as=G.tickWidth,le=G.tickColor,ls=G.tickBorderDash||[],ce=G.tickBorderDashOffset;w=Yu(this,_,l),w!==void 0&&(x=Kt(i,w,ot),c?k=M=C=L=x:S=T=A=et=x,f.push({tx1:k,ty1:S,tx2:M,ty2:T,x1:C,y1:A,x2:L,y2:et,width:ot,color:Oe,borderDash:js,borderDashOffset:Te,tickWidth:as,tickColor:le,tickBorderDash:ls,tickBorderDashOffset:ce}))}return this._ticksLength=u,this._borderValue=y,f}_computeLabelItems(t){let e=this.axis,i=this.options,{position:n,ticks:o}=i,r=this.isHorizontal(),a=this.ticks,{align:l,crossAlign:c,padding:h,mirror:u}=o,d=ws(i.grid),f=d+h,g=u?-h:f,m=-bt(this.labelRotation),p=[],b,y,_,w,x,k,S,M,T,C,A,L,et=\"middle\";if(n===\"top\")k=this.bottom-g,S=this._getXAxisLabelAlignment();else if(n===\"bottom\")k=this.top+g,S=this._getXAxisLabelAlignment();else if(n===\"left\"){let V=this._getYAxisLabelAlignment(d);S=V.textAlign,x=V.x}else if(n===\"right\"){let V=this._getYAxisLabelAlignment(d);S=V.textAlign,x=V.x}else if(e===\"x\"){if(n===\"center\")k=(t.top+t.bottom)/2+f;else if(E(n)){let V=Object.keys(n)[0],U=n[V];k=this.chart.scales[V].getPixelForValue(U)+f}S=this._getXAxisLabelAlignment()}else if(e===\"y\"){if(n===\"center\")x=(t.left+t.right)/2-f;else if(E(n)){let V=Object.keys(n)[0],U=n[V];x=this.chart.scales[V].getPixelForValue(U)}S=this._getYAxisLabelAlignment(d).textAlign}e===\"y\"&&(l===\"start\"?et=\"top\":l===\"end\"&&(et=\"bottom\"));let ht=this._getLabelSizes();for(b=0,y=a.length;b<y;++b){_=a[b],w=_.label;let V=o.setContext(this.getContext(b));M=this.getPixelForTick(b)+o.labelOffset,T=this._resolveTickFontOptions(b),C=T.lineHeight,A=H(w)?w.length:1;let U=A/2,G=V.color,vt=V.textStrokeColor,ot=V.textStrokeWidth,Oe=S;r?(x=M,S===\"inner\"&&(b===y-1?Oe=this.options.reverse?\"left\":\"right\":b===0?Oe=this.options.reverse?\"right\":\"left\":Oe=\"center\"),n===\"top\"?c===\"near\"||m!==0?L=-A*C+C/2:c===\"center\"?L=-ht.highest.height/2-U*C+C:L=-ht.highest.height+C/2:c===\"near\"||m!==0?L=C/2:c===\"center\"?L=ht.highest.height/2-U*C:L=ht.highest.height-A*C,u&&(L*=-1),m!==0&&!V.showLabelBackdrop&&(x+=C/2*Math.sin(m))):(k=M,L=(1-A)*C/2);let js;if(V.showLabelBackdrop){let Te=nt(V.backdropPadding),as=ht.heights[b],le=ht.widths[b],ls=L-Te.top,ce=0-Te.left;switch(et){case\"middle\":ls-=as/2;break;case\"bottom\":ls-=as;break}switch(S){case\"center\":ce-=le/2;break;case\"right\":ce-=le;break;case\"inner\":b===y-1?ce-=le:b>0&&(ce-=le/2);break}js={left:ce,top:ls,width:le+Te.width,height:as+Te.height,color:V.backdropColor}}p.push({label:w,font:T,textOffset:L,options:{rotation:m,color:G,strokeColor:vt,strokeWidth:ot,textAlign:Oe,textBaseline:et,translation:[x,k],backdrop:js}})}return p}_getXAxisLabelAlignment(){let{position:t,ticks:e}=this.options;if(-bt(this.labelRotation))return t===\"top\"?\"left\":\"right\";let n=\"center\";return e.align===\"start\"?n=\"left\":e.align===\"end\"?n=\"right\":e.align===\"inner\"&&(n=\"inner\"),n}_getYAxisLabelAlignment(t){let{position:e,ticks:{crossAlign:i,mirror:n,padding:o}}=this.options,r=this._getLabelSizes(),a=t+o,l=r.widest.width,c,h;return e===\"left\"?n?(h=this.right+o,i===\"near\"?c=\"left\":i===\"center\"?(c=\"center\",h+=l/2):(c=\"right\",h+=l)):(h=this.right-a,i===\"near\"?c=\"right\":i===\"center\"?(c=\"center\",h-=l/2):(c=\"left\",h=this.left)):e===\"right\"?n?(h=this.left+o,i===\"near\"?c=\"right\":i===\"center\"?(c=\"center\",h-=l/2):(c=\"left\",h-=l)):(h=this.left+a,i===\"near\"?c=\"left\":i===\"center\"?(c=\"center\",h+=l/2):(c=\"right\",h=this.right)):c=\"right\",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;let t=this.chart,e=this.options.position;if(e===\"left\"||e===\"right\")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e===\"top\"||e===\"bottom\")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){let{ctx:t,options:{backgroundColor:e},left:i,top:n,width:o,height:r}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,n,o,r),t.restore())}getLineWidthForValue(t){let e=this.options.grid;if(!this._isVisible()||!e.display)return 0;let n=this.ticks.findIndex(o=>o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,i=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),o,r,a=(l,c,h)=>{!h.width||!h.color||(i.save(),i.lineWidth=h.width,i.strokeStyle=h.color,i.setLineDash(h.borderDash||[]),i.lineDashOffset=h.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(e.display)for(o=0,r=n.length;o<r;++o){let l=n[o];e.drawOnChartArea&&a({x:l.x1,y:l.y1},{x:l.x2,y:l.y2},l),e.drawTicks&&a({x:l.tx1,y:l.ty1},{x:l.tx2,y:l.ty2},{color:l.tickColor,width:l.tickWidth,borderDash:l.tickBorderDash,borderDashOffset:l.tickBorderDashOffset})}}drawBorder(){let{chart:t,ctx:e,options:{border:i,grid:n}}=this,o=i.setContext(this.getContext()),r=i.display?o.width:0;if(!r)return;let a=n.setContext(this.getContext(0)).lineWidth,l=this._borderValue,c,h,u,d;this.isHorizontal()?(c=Kt(t,this.left,r)-r/2,h=Kt(t,this.right,a)+a/2,u=d=l):(u=Kt(t,this.top,r)-r/2,d=Kt(t,this.bottom,a)+a/2,c=h=l),e.save(),e.lineWidth=o.width,e.strokeStyle=o.color,e.beginPath(),e.moveTo(c,u),e.lineTo(h,d),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;let i=this.ctx,n=this._computeLabelArea();n&&ps(i,n);let o=this.getLabelItems(t);for(let r of o){let a=r.options,l=r.font,c=r.label,h=r.textOffset;Qt(i,c,0,h,l,a)}n&&bs(i)}drawTitle(){let{ctx:t,options:{position:e,title:i,reverse:n}}=this;if(!i.display)return;let o=X(i.font),r=nt(i.padding),a=i.align,l=o.lineHeight/2;e===\"bottom\"||e===\"center\"||E(e)?(l+=r.bottom,H(i.text)&&(l+=o.lineHeight*(i.text.length-1))):l+=r.top;let{titleX:c,titleY:h,maxWidth:u,rotation:d}=Ju(this,l,e,a);Qt(t,i.text,0,0,o,{color:i.color,maxWidth:u,rotation:d,textAlign:Xu(a,e,n),textBaseline:\"middle\",translation:[c,h]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){let t=this.options,e=t.ticks&&t.ticks.z||0,i=P(t.grid&&t.grid.z,-1),n=P(t.border&&t.border.z,0);return!this._isVisible()||this.draw!==s.prototype.draw?[{z:e,draw:o=>{this.draw(o)}}]:[{z:i,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+\"AxisID\",n=[],o,r;for(o=0,r=e.length;o<r;++o){let a=e[o];a[i]===this.id&&(!t||a.type===t)&&n.push(a)}return n}_resolveTickFontOptions(t){let e=this.options.ticks.setContext(this.getContext(t));return X(e.font)}_maxDigits(){let t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}},Ze=class{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){let e=Object.getPrototypeOf(t),i;td(e)&&(i=this.register(e));let n=this.items,o=t.id,r=this.scope+\".\"+o;if(!o)throw new Error(\"class does not have id: \"+t);return o in n||(n[o]=t,Ku(t,r,i),this.override&&j.override(t.id,t.overrides)),r}get(t){return this.items[t]}unregister(t){let e=this.items,i=t.id,n=this.scope;i in e&&delete e[i],n&&i in j[n]&&(delete j[n][i],this.override&&delete Jt[i])}};function Ku(s,t,e){let i=Pe(Object.create(null),[e?j.get(e):{},j.get(t),s.defaults]);j.set(t,i),s.defaultRoutes&&Qu(t,s.defaultRoutes),s.descriptors&&j.describe(t,s.descriptors)}function Qu(s,t){Object.keys(t).forEach(e=>{let i=e.split(\".\"),n=i.pop(),o=[s].concat(i).join(\".\"),r=t[e].split(\".\"),a=r.pop(),l=r.join(\".\");j.route(o,n,l,a)})}function td(s){return\"id\"in s&&\"defaults\"in s}var Un=class{constructor(){this.controllers=new Ze(ut,\"datasets\",!0),this.elements=new Ze(dt,\"elements\"),this.plugins=new Ze(Object,\"plugins\"),this.scales=new Ze(we,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,i){[...e].forEach(n=>{let o=i||this._getRegistryForType(n);i||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):z(n,r=>{let a=i||this._getRegistryForType(r);this._exec(t,a,r)})})}_exec(t,e,i){let n=ei(t);W(i[\"before\"+n],[],i),e[t](i),W(i[\"after\"+n],[],i)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){let i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){let n=e.get(t);if(n===void 0)throw new Error('\"'+t+'\" is not a registered '+i+\".\");return n}},Lt=new Un,Yn=class{constructor(){this._init=void 0}notify(t,e,i,n){if(e===\"beforeInit\"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,\"install\")),this._init===void 0)return;let o=n?this._descriptors(t).filter(n):this._descriptors(t),r=this._notify(o,t,e,i);return e===\"afterDestroy\"&&(this._notify(o,t,\"stop\"),this._notify(this._init,t,\"uninstall\"),this._init=void 0),r}_notify(t,e,i,n){n=n||{};for(let o of t){let r=o.plugin,a=r[i],l=[e,n,o.options];if(W(a,l,r)===!1&&n.cancelable)return!1}return!0}invalidate(){I(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let i=t&&t.config,n=P(i.options&&i.options.plugins,{}),o=ed(i);return n===!1&&!e?[]:id(t,o,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],i=this._cache,n=(o,r)=>o.filter(a=>!r.some(l=>a.plugin.id===l.plugin.id));this._notify(n(e,i),t,\"stop\"),this._notify(n(i,e),t,\"start\")}};function ed(s){let t={},e=[],i=Object.keys(Lt.plugins.items);for(let o=0;o<i.length;o++)e.push(Lt.getPlugin(i[o]));let n=s.plugins||[];for(let o=0;o<n.length;o++){let r=n[o];e.indexOf(r)===-1&&(e.push(r),t[r.id]=!0)}return{plugins:e,localIds:t}}function sd(s,t){return!t&&s===!1?null:s===!0?{}:s}function id(s,{plugins:t,localIds:e},i,n){let o=[],r=s.getContext();for(let a of t){let l=a.id,c=sd(i[l],n);c!==null&&o.push({plugin:a,options:nd(s.config,{plugin:a,local:e[l]},c,r)})}return o}function nd(s,{plugin:t,local:e},i,n){let o=s.pluginScopeKeys(t),r=s.getOptionScopes(i,o);return e&&t.defaults&&r.push(t.defaults),s.createResolver(r,n,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function Zn(s,t){let e=j.datasets[s]||{};return((t.datasets||{})[s]||{}).indexAxis||t.indexAxis||e.indexAxis||\"x\"}function od(s,t){let e=s;return s===\"_index_\"?e=t:s===\"_value_\"&&(e=t===\"x\"?\"y\":\"x\"),e}function rd(s,t){return s===t?\"_index_\":\"_value_\"}function qr(s){if(s===\"x\"||s===\"y\"||s===\"r\")return s}function ad(s){if(s===\"top\"||s===\"bottom\")return\"x\";if(s===\"left\"||s===\"right\")return\"y\"}function qn(s,...t){if(qr(s))return s;for(let e of t){let i=e.axis||ad(e.position)||s.length>1&&qr(s[0].toLowerCase());if(i)return i}throw new Error(`Cannot determine type of '${s}' axis. Please provide 'axis' or 'position' option.`)}function Gr(s,t,e){if(e[t+\"AxisID\"]===s)return{axis:t}}function ld(s,t){if(t.data&&t.data.datasets){let e=t.data.datasets.filter(i=>i.xAxisID===s||i.yAxisID===s);if(e.length)return Gr(s,\"x\",e[0])||Gr(s,\"y\",e[0])}return{}}function cd(s,t){let e=Jt[s.type]||{scales:{}},i=t.scales||{},n=Zn(s.type,t),o=Object.create(null);return Object.keys(i).forEach(r=>{let a=i[r];if(!E(a))return console.error(`Invalid scale configuration for scale: ${r}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${r}`);let l=qn(r,a,ld(r,s),j.scales[a.type]),c=rd(l,n),h=e.scales||{};o[r]=Ie(Object.create(null),[{axis:l},a,h[l],h[c]])}),s.data.datasets.forEach(r=>{let a=r.type||s.type,l=r.indexAxis||Zn(a,t),h=(Jt[a]||{}).scales||{};Object.keys(h).forEach(u=>{let d=od(u,l),f=r[d+\"AxisID\"]||d;o[f]=o[f]||Object.create(null),Ie(o[f],[{axis:d},i[f],h[u]])})}),Object.keys(o).forEach(r=>{let a=o[r];Ie(a,[j.scales[a.type],j.scale])}),o}function La(s){let t=s.options||(s.options={});t.plugins=P(t.plugins,{}),t.scales=cd(s,t)}function Fa(s){return s=s||{},s.datasets=s.datasets||[],s.labels=s.labels||[],s}function hd(s){return s=s||{},s.data=Fa(s.data),La(s),s}var Xr=new Map,Ra=new Set;function gi(s,t){let e=Xr.get(s);return e||(e=t(),Xr.set(s,e),Ra.add(e)),e}var ks=(s,t,e)=>{let i=Wt(t,e);i!==void 0&&s.add(i)},Gn=class{constructor(t){this._config=hd(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Fa(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),La(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return gi(t,()=>[[`datasets.${t}`,\"\"]])}datasetAnimationScopeKeys(t,e){return gi(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,\"\"]])}datasetElementScopeKeys(t,e){return gi(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,\"\"]])}pluginScopeKeys(t){let e=t.id,i=this.type;return gi(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let i=this._scopeCache,n=i.get(t);return(!n||e)&&(n=new Map,i.set(t,n)),n}getOptionScopes(t,e,i){let{options:n,type:o}=this,r=this._cachedScopes(t,i),a=r.get(e);if(a)return a;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(u=>ks(l,t,u))),h.forEach(u=>ks(l,n,u)),h.forEach(u=>ks(l,Jt[o]||{},u)),h.forEach(u=>ks(l,j,u)),h.forEach(u=>ks(l,oi,u))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Ra.has(e)&&r.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Jt[e]||{},j.datasets[e]||{},{type:e},j,oi]}resolveNamedOptions(t,e,i,n=[\"\"]){let o={$shared:!0},{resolver:r,subPrefixes:a}=Jr(this._resolverCache,t,n),l=r;if(dd(r,e)){o.$shared=!1,i=zt(i)?i():i;let c=this.createResolver(t,i,a);l=de(r,i,c)}for(let c of e)o[c]=l[c];return o}createResolver(t,e,i=[\"\"],n){let{resolver:o}=Jr(this._resolverCache,t,i);return E(e)?de(o,e,void 0,n):o}};function Jr(s,t,e){let i=s.get(t);i||(i=new Map,s.set(t,i));let n=e.join(),o=i.get(n);return o||(o={resolver:li(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes(\"hover\"))},i.set(n,o)),o}var ud=s=>E(s)&&Object.getOwnPropertyNames(s).some(t=>zt(s[t]));function dd(s,t){let{isScriptable:e,isIndexable:i}=yn(s);for(let n of t){let o=e(n),r=i(n),a=(r||o)&&s[n];if(o&&(zt(a)||ud(a))||r&&H(a))return!0}return!1}var fd=\"4.5.1\",gd=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function Kr(s,t){return s===\"top\"||s===\"bottom\"||gd.indexOf(s)===-1&&t===\"x\"}function Qr(s,t){return function(e,i){return e[s]===i[s]?e[t]-i[t]:e[s]-i[s]}}function ta(s){let t=s.chart,e=t.options.animation;t.notifyPlugins(\"afterRender\"),W(e&&e.onComplete,[s],t)}function md(s){let t=s.chart,e=t.options.animation;W(e&&e.onProgress,[s],t)}function Na(s){return ci()&&typeof s==\"string\"?s=document.getElementById(s):s&&s.length&&(s=s[0]),s&&s.canvas&&(s=s.canvas),s}var xi={},ea=s=>{let t=Na(s);return Object.values(xi).filter(e=>e.canvas===t).pop()};function pd(s,t,e){let i=Object.keys(s);for(let n of i){let o=+n;if(o>=t){let r=s[n];delete s[n],(e>0||o>t)&&(s[o+e]=r)}}}function bd(s,t,e,i){return!e||s.type===\"mouseout\"?null:i?t:s}var yt=class{static register(...t){Lt.add(...t),sa()}static unregister(...t){Lt.remove(...t),sa()}constructor(t,e){let i=this.config=new Gn(e),n=Na(t),o=ea(n);if(o)throw new Error(\"Canvas is already in use. Chart with ID '\"+o.id+\"' must be destroyed before the canvas with ID '\"+o.canvas.id+\"' can be reused.\");let r=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||zu(n)),this.platform.updateConfig(i);let a=this.platform.acquireContext(n,r.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=tr(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Yn,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=ur(u=>this.update(u),r.resizeDelay||0),this._dataChanges=[],xi[this.id]=this,!a||!l){console.error(\"Failed to create chart: can't acquire context from the given item\");return}Ht.listen(this,\"complete\",ta),Ht.listen(this,\"progress\",md),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return I(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Lt}_initialize(){return this.notifyPlugins(\"beforeInit\"),this.options.responsive?this.resize():kn(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(\"afterInit\"),this}clear(){return mn(this.canvas,this.ctx),this}stop(){return Ht.stop(this),this}resize(t,e){Ht.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let i=this.options,n=this.canvas,o=i.maintainAspectRatio&&this.aspectRatio,r=this.platform.getMaximumSize(n,t,e,o),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?\"resize\":\"attach\";this.width=r.width,this.height=r.height,this._aspectRatio=this.aspectRatio,kn(this,a,!0)&&(this.notifyPlugins(\"resize\",{size:r}),W(i.onResize,[this,r],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};z(e,(i,n)=>{i.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,i=this.scales,n=Object.keys(i).reduce((r,a)=>(r[a]=!1,r),{}),o=[];e&&(o=o.concat(Object.keys(e).map(r=>{let a=e[r],l=qn(r,a),c=l===\"r\",h=l===\"x\";return{options:a,dposition:c?\"chartArea\":h?\"bottom\":\"left\",dtype:c?\"radialLinear\":h?\"category\":\"linear\"}}))),z(o,r=>{let a=r.options,l=a.id,c=qn(l,a),h=P(a.type,r.dtype);(a.position===void 0||Kr(a.position,c)!==Kr(r.dposition))&&(a.position=r.dposition),n[l]=!0;let u=null;if(l in i&&i[l].type===h)u=i[l];else{let d=Lt.getScale(h);u=new d({id:l,type:h,ctx:this.ctx,chart:this}),i[u.id]=u}u.init(a,t)}),z(n,(r,a)=>{r||delete i[a]}),z(i,r=>{rt.configure(this,r,r.options),rt.addBox(this,r)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((n,o)=>n.index-o.index),i>e){for(let n=e;n<i;++n)this._destroyDatasetMeta(n);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(Qr(\"order\",\"index\"))}_removeUnreferencedMetasets(){let{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach((i,n)=>{e.filter(o=>o===i._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,i,n;for(this._removeUnreferencedMetasets(),i=0,n=e.length;i<n;i++){let o=e[i],r=this.getDatasetMeta(i),a=o.type||this.config.type;if(r.type&&r.type!==a&&(this._destroyDatasetMeta(i),r=this.getDatasetMeta(i)),r.type=a,r.indexAxis=o.indexAxis||Zn(a,this.options),r.order=o.order||0,r.index=i,r.label=\"\"+o.label,r.visible=this.isDatasetVisible(i),r.controller)r.controller.updateIndex(i),r.controller.linkScales();else{let l=Lt.getController(a),{datasetElementType:c,dataElementType:h}=j.datasets[a];Object.assign(l,{dataElementType:Lt.getElement(h),datasetElementType:c&&Lt.getElement(c)}),r.controller=new l(this,i),t.push(r.controller)}}return this._updateMetasets(),t}_resetElements(){z(this.data.datasets,(t,e)=>{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){let e=this.config;e.update();let i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0})===!1)return;let o=this.buildOrUpdateControllers();this.notifyPlugins(\"beforeElementsUpdate\");let r=0;for(let c=0,h=this.data.datasets.length;c<h;c++){let{controller:u}=this.getDatasetMeta(c),d=!n&&o.indexOf(u)===-1;u.buildOrUpdateElements(d),r=Math.max(+u.getMaxOverflow(),r)}r=this._minPadding=i.layout.autoPadding?r:0,this._updateLayout(r),n||z(o,c=>{c.reset()}),this._updateDatasets(t),this.notifyPlugins(\"afterUpdate\",{mode:t}),this._layers.sort(Qr(\"z\",\"_idx\"));let{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){z(this.scales,t=>{rt.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!en(e,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:i,start:n,count:o}of e){let r=i===\"_removeElements\"?-o:o;pd(t,n,r)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,i=o=>new Set(t.filter(r=>r[0]===o).map((r,a)=>a+\",\"+r.splice(1).join(\",\"))),n=i(0);for(let o=1;o<e;o++)if(!en(n,i(o)))return;return Array.from(n).map(o=>o.split(\",\")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins(\"beforeLayout\",{cancelable:!0})===!1)return;rt.update(this,this.width,this.height,t);let e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],z(this.boxes,n=>{i&&n.position===\"chartArea\"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins(\"afterLayout\")}_updateDatasets(t){if(this.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})!==!1){for(let e=0,i=this.data.datasets.length;e<i;++e)this.getDatasetMeta(e).controller.configure();for(let e=0,i=this.data.datasets.length;e<i;++e)this._updateDataset(e,zt(t)?t({datasetIndex:e}):t);this.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){let i=this.getDatasetMeta(t),n={meta:i,index:t,mode:e,cancelable:!0};this.notifyPlugins(\"beforeDatasetUpdate\",n)!==!1&&(i.controller._update(e),n.cancelable=!1,this.notifyPlugins(\"afterDatasetUpdate\",n))}render(){this.notifyPlugins(\"beforeRender\",{cancelable:!0})!==!1&&(Ht.has(this)?this.attached&&!Ht.running(this)&&Ht.start(this):(this.draw(),ta({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){let{width:i,height:n}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(i,n)}if(this.clear(),this.width<=0||this.height<=0||this.notifyPlugins(\"beforeDraw\",{cancelable:!0})===!1)return;let e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){let e=this._sortedMetasets,i=[],n,o;for(n=0,o=e.length;n<o;++n){let r=e[n];(!t||r.visible)&&i.push(r)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(this.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0})===!1)return;let t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){let e=this.ctx,i={meta:t,index:t.index,cancelable:!0},n=Dn(this,t);this.notifyPlugins(\"beforeDatasetDraw\",i)!==!1&&(n&&ps(e,n),t.controller.draw(),n&&bs(e),i.cancelable=!1,this.notifyPlugins(\"afterDatasetDraw\",i))}isPointInArea(t){return Pt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,n){let o=xu.modes[e];return typeof o==\"function\"?o(this,t,i,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],i=this._metasets,n=i.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(n)),n}getContext(){return this.$context||(this.$context=Bt(null,{chart:this,type:\"chart\"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let i=this.getDatasetMeta(t);return typeof i.hidden==\"boolean\"?!i.hidden:!e.hidden}setDatasetVisibility(t,e){let i=this.getDatasetMeta(t);i.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){let n=i?\"show\":\"hide\",o=this.getDatasetMeta(t),r=o.controller._resolveAnimations(void 0,n);Ee(e)?(o.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),r.update(o,{visible:i}),this.update(a=>a.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),Ht.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins(\"beforeDestroy\");let{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),mn(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),delete xi[this.id],this.notifyPlugins(\"afterDestroy\")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){let t=this._listeners,e=this.platform,i=(o,r)=>{e.addEventListener(this,o,r),t[o]=r},n=(o,r,a)=>{o.offsetX=r,o.offsetY=a,this._eventHandler(o)};z(this.options.events,o=>i(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,i=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)},r,a=()=>{n(\"attach\",a),this.attached=!0,this.resize(),i(\"resize\",o),i(\"detach\",r)};r=()=>{this.attached=!1,n(\"resize\",o),this._stop(),this._resize(0,0),i(\"attach\",a)},e.isAttached(this.canvas)?a():r()}unbindEvents(){z(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},z(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){let n=i?\"set\":\"remove\",o,r,a,l;for(e===\"dataset\"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller[\"_\"+n+\"DatasetHoverStyle\"]()),a=0,l=t.length;a<l;++a){r=t[a];let c=r&&this.getDatasetMeta(r.datasetIndex).controller;c&&c[n+\"HoverStyle\"](r.element,r.datasetIndex,r.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){let e=this._active||[],i=t.map(({datasetIndex:o,index:r})=>{let a=this.getDatasetMeta(o);if(!a)throw new Error(\"No dataset found at index \"+o);return{datasetIndex:o,element:a.data[r],index:r}});!gs(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,i){let n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(u=>h.datasetIndex===u.datasetIndex&&h.index===u.index)),r=o(e,t),a=i?t:o(t,e);r.length&&this.updateHoverStyle(r,n.mode,!1),a.length&&n.mode&&this.updateHoverStyle(a,n.mode,!0)}_eventHandler(t,e){let i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=r=>(r.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins(\"beforeEvent\",i,n)===!1)return;let o=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins(\"afterEvent\",i,n),(o||i.changed)&&this.render(),this}_handleEvent(t,e,i){let{_active:n=[],options:o}=this,r=e,a=this._getActiveElements(t,n,i,r),l=ir(t),c=bd(t,this._lastEvent,i,l);i&&(this._lastEvent=null,W(o.onHover,[t,a,this],this),l&&W(o.onClick,[t,a,this],this));let h=!gs(a,n);return(h||e)&&(this._active=a,this._updateHoverStyles(a,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,i,n){if(t.type===\"mouseout\")return[];if(!i)return e;let o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}};v(yt,\"defaults\",j),v(yt,\"instances\",xi),v(yt,\"overrides\",Jt),v(yt,\"registry\",Lt),v(yt,\"version\",fd),v(yt,\"getChart\",ea);function sa(){return z(yt.instances,s=>s._plugins.invalidate())}function yd(s,t,e){let{startAngle:i,x:n,y:o,outerRadius:r,innerRadius:a,options:l}=t,{borderWidth:c,borderJoinStyle:h}=l,u=Math.min(c/r,st(i-e));if(s.beginPath(),s.arc(n,o,r-c/2,i+u/2,e-u/2),a>0){let d=Math.min(c/a,st(i-e));s.arc(n,o,a+c/2,e-d/2,i+d/2,!0)}else{let d=Math.min(c/2,r*st(i-e));if(h===\"round\")s.arc(n,o,d,e-F/2,i+F/2,!0);else if(h===\"bevel\"){let f=2*d*d,g=-f*Math.cos(e+F/2)+n,m=-f*Math.sin(e+F/2)+o,p=f*Math.cos(i+F/2)+n,b=f*Math.sin(i+F/2)+o;s.lineTo(g,m),s.lineTo(p,b)}}s.closePath(),s.moveTo(0,0),s.rect(0,0,s.canvas.width,s.canvas.height),s.clip(\"evenodd\")}function xd(s,t,e){let{startAngle:i,pixelMargin:n,x:o,y:r,outerRadius:a,innerRadius:l}=t,c=n/a;s.beginPath(),s.arc(o,r,a,i-c,e+c),l>n?(c=n/l,s.arc(o,r,l,e+c,i-c,!0)):s.arc(o,r,n,e+q,i-q),s.closePath(),s.clip()}function _d(s){return ai(s,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"])}function wd(s,t,e,i){let n=_d(s.options.borderRadius),o=(e-t)/2,r=Math.min(o,i*t/2),a=l=>{let c=(e-Math.min(o,l))*i/2;return K(l,0,Math.min(o,c))};return{outerStart:a(n.outerStart),outerEnd:a(n.outerEnd),innerStart:K(n.innerStart,0,r),innerEnd:K(n.innerEnd,0,r)}}function Ve(s,t,e,i){return{x:e+s*Math.cos(t),y:i+s*Math.sin(t)}}function vi(s,t,e,i,n,o){let{x:r,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,u=Math.max(t.outerRadius+i+e-c,0),d=h>0?h+i+e+c:0,f=0,g=n-l;if(i){let V=h>0?h-i:0,U=u>0?u-i:0,G=(V+U)/2,vt=G!==0?g*G/(G+i):g;f=(g-vt)/2}let m=Math.max(.001,g*u-e/F)/u,p=(g-m)/2,b=l+p+f,y=n-p-f,{outerStart:_,outerEnd:w,innerStart:x,innerEnd:k}=wd(t,d,u,y-b),S=u-_,M=u-w,T=b+_/S,C=y-w/M,A=d+x,L=d+k,et=b+x/A,ht=y-k/L;if(s.beginPath(),o){let V=(T+C)/2;if(s.arc(r,a,u,T,V),s.arc(r,a,u,V,C),w>0){let ot=Ve(M,C,r,a);s.arc(ot.x,ot.y,w,C,y+q)}let U=Ve(L,y,r,a);if(s.lineTo(U.x,U.y),k>0){let ot=Ve(L,ht,r,a);s.arc(ot.x,ot.y,k,y+q,ht+Math.PI)}let G=(y-k/d+(b+x/d))/2;if(s.arc(r,a,d,y-k/d,G,!0),s.arc(r,a,d,G,b+x/d,!0),x>0){let ot=Ve(A,et,r,a);s.arc(ot.x,ot.y,x,et+Math.PI,b-q)}let vt=Ve(S,b,r,a);if(s.lineTo(vt.x,vt.y),_>0){let ot=Ve(S,T,r,a);s.arc(ot.x,ot.y,_,b-q,T)}}else{s.moveTo(r,a);let V=Math.cos(T)*u+r,U=Math.sin(T)*u+a;s.lineTo(V,U);let G=Math.cos(C)*u+r,vt=Math.sin(C)*u+a;s.lineTo(G,vt)}s.closePath()}function kd(s,t,e,i,n){let{fullCircles:o,startAngle:r,circumference:a}=t,l=t.endAngle;if(o){vi(s,t,e,i,l,n);for(let c=0;c<o;++c)s.fill();isNaN(a)||(l=r+(a%$||$))}return vi(s,t,e,i,l,n),s.fill(),l}function vd(s,t,e,i,n){let{fullCircles:o,startAngle:r,circumference:a,options:l}=t,{borderWidth:c,borderJoinStyle:h,borderDash:u,borderDashOffset:d,borderRadius:f}=l,g=l.borderAlign===\"inner\";if(!c)return;s.setLineDash(u||[]),s.lineDashOffset=d,g?(s.lineWidth=c*2,s.lineJoin=h||\"round\"):(s.lineWidth=c,s.lineJoin=h||\"bevel\");let m=t.endAngle;if(o){vi(s,t,e,i,m,n);for(let p=0;p<o;++p)s.stroke();isNaN(a)||(m=r+(a%$||$))}g&&xd(s,t,m),l.selfJoin&&m-r>=F&&f===0&&h!==\"miter\"&&yd(s,t,m),o||(vi(s,t,e,i,m,n),s.stroke())}var be=class extends dt{constructor(e){super();v(this,\"circumference\");v(this,\"endAngle\");v(this,\"fullCircles\");v(this,\"innerRadius\");v(this,\"outerRadius\");v(this,\"pixelMargin\");v(this,\"startAngle\");this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,i,n){let o=this.getProps([\"x\",\"y\"],n),{angle:r,distance:a}=rn(o,{x:e,y:i}),{startAngle:l,endAngle:c,innerRadius:h,outerRadius:u,circumference:d}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],n),f=(this.options.spacing+this.options.borderWidth)/2,g=P(d,c-l),m=Fe(r,l,c)&&l!==c,p=g>=$||m,b=It(a,h+f,u+f);return p&&b}getCenterPoint(e){let{x:i,y:n,startAngle:o,endAngle:r,innerRadius:a,outerRadius:l}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"],e),{offset:c,spacing:h}=this.options,u=(o+r)/2,d=(a+l+h+c)/2;return{x:i+Math.cos(u)*d,y:n+Math.sin(u)*d}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){let{options:i,circumference:n}=this,o=(i.offset||0)/4,r=(i.spacing||0)/2,a=i.circular;if(this.pixelMargin=i.borderAlign===\"inner\"?.33:0,this.fullCircles=n>$?Math.floor(n/$):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();let l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);let c=1-Math.sin(Math.min(F,n||0)),h=o*c;e.fillStyle=i.backgroundColor,e.strokeStyle=i.borderColor,kd(e,this,h,r,a),vd(e,this,h,r,a),e.restore()}};v(be,\"id\",\"arc\"),v(be,\"defaults\",{borderAlign:\"center\",borderColor:\"#fff\",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),v(be,\"defaultRoutes\",{backgroundColor:\"backgroundColor\"}),v(be,\"descriptors\",{_scriptable:!0,_indexable:e=>e!==\"borderDash\"});function za(s,t,e=t){s.lineCap=P(e.borderCapStyle,t.borderCapStyle),s.setLineDash(P(e.borderDash,t.borderDash)),s.lineDashOffset=P(e.borderDashOffset,t.borderDashOffset),s.lineJoin=P(e.borderJoinStyle,t.borderJoinStyle),s.lineWidth=P(e.borderWidth,t.borderWidth),s.strokeStyle=P(e.borderColor,t.borderColor)}function Sd(s,t,e){s.lineTo(e.x,e.y)}function Md(s){return s.stepped?mr:s.tension||s.cubicInterpolationMode===\"monotone\"?pr:Sd}function Va(s,t,e={}){let i=s.length,{start:n=0,end:o=i-1}=e,{start:r,end:a}=t,l=Math.max(n,r),c=Math.min(o,a),h=n<r&&o<r||n>a&&o>a;return{count:i,start:l,loop:t.loop,ilen:c<l&&!h?i+c-l:c-l}}function Od(s,t,e,i){let{points:n,options:o}=t,{count:r,start:a,loop:l,ilen:c}=Va(n,e,i),h=Md(o),{move:u=!0,reverse:d}=i||{},f,g,m;for(f=0;f<=c;++f)g=n[(a+(d?c-f:f))%r],!g.skip&&(u?(s.moveTo(g.x,g.y),u=!1):h(s,m,g,d,o.stepped),m=g);return l&&(g=n[(a+(d?c:0))%r],h(s,m,g,d,o.stepped)),!!l}function Td(s,t,e,i){let n=t.points,{count:o,start:r,ilen:a}=Va(n,e,i),{move:l=!0,reverse:c}=i||{},h=0,u=0,d,f,g,m,p,b,y=w=>(r+(c?a-w:w))%o,_=()=>{m!==p&&(s.lineTo(h,p),s.lineTo(h,m),s.lineTo(h,b))};for(l&&(f=n[y(0)],s.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=n[y(d)],f.skip)continue;let w=f.x,x=f.y,k=w|0;k===g?(x<m?m=x:x>p&&(p=x),h=(u*h+w)/++u):(_(),s.lineTo(w,x),g=k,u=0,m=p=x),b=x}_()}function Xn(s){let t=s.options,e=t.borderDash&&t.borderDash.length;return!s._decimated&&!s._loop&&!t.tension&&t.cubicInterpolationMode!==\"monotone\"&&!t.stepped&&!e?Td:Od}function Dd(s){return s.stepped?Mr:s.tension||s.cubicInterpolationMode===\"monotone\"?Or:Gt}function Cd(s,t,e,i){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,i)&&n.closePath()),za(s,t.options),s.stroke(n)}function Pd(s,t,e,i){let{segments:n,options:o}=t,r=Xn(t);for(let a of n)za(s,o,a.style),s.beginPath(),r(s,t,a,{start:e,end:e+i-1})&&s.closePath(),s.stroke()}var Ad=typeof Path2D==\"function\";function Id(s,t,e,i){Ad&&!t.options.segment?Cd(s,t,e,i):Pd(s,t,e,i)}var Ft=class extends dt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let i=this.options;if((i.tension||i.cubicInterpolationMode===\"monotone\")&&!i.stepped&&!this._pointsUpdated){let n=i.spanGaps?this._loop:this._fullLoop;kr(this._points,i,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Dr(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){let i=this.options,n=t[e],o=this.points,r=Tn(this,{property:e,start:n,end:n});if(!r.length)return;let a=[],l=Dd(i),c,h;for(c=0,h=r.length;c<h;++c){let{start:u,end:d}=r[c],f=o[u],g=o[d];if(f===g){a.push(f);continue}let m=Math.abs((n-f[e])/(g[e]-f[e])),p=l(f,g,m,i.stepped);p[e]=t[e],a.push(p)}return a.length===1?a[0]:a}pathSegment(t,e,i){return Xn(this)(t,this,e,i)}path(t,e,i){let n=this.segments,o=Xn(this),r=this._loop;e=e||0,i=i||this.points.length-e;for(let a of n)r&=o(t,this,a,{start:e,end:e+i-1});return!!r}draw(t,e,i,n){let o=this.options||{};(this.points||[]).length&&o.borderWidth&&(t.save(),Id(t,this,i,n),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}};v(Ft,\"id\",\"line\"),v(Ft,\"defaults\",{borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0}),v(Ft,\"defaultRoutes\",{backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"}),v(Ft,\"descriptors\",{_scriptable:!0,_indexable:t=>t!==\"borderDash\"&&t!==\"fill\"});function ia(s,t,e,i){let n=s.options,{[e]:o}=s.getProps([e],i);return Math.abs(t-o)<n.radius+n.hitRadius}var Ue=class extends dt{constructor(e){super();v(this,\"parsed\");v(this,\"skip\");v(this,\"stop\");this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,e&&Object.assign(this,e)}inRange(e,i,n){let o=this.options,{x:r,y:a}=this.getProps([\"x\",\"y\"],n);return Math.pow(e-r,2)+Math.pow(i-a,2)<Math.pow(o.hitRadius+o.radius,2)}inXRange(e,i){return ia(this,e,\"x\",i)}inYRange(e,i){return ia(this,e,\"y\",i)}getCenterPoint(e){let{x:i,y:n}=this.getProps([\"x\",\"y\"],e);return{x:i,y:n}}size(e){e=e||this.options||{};let i=e.radius||0;i=Math.max(i,i&&e.hoverRadius||0);let n=i&&e.borderWidth||0;return(i+n)*2}draw(e,i){let n=this.options;this.skip||n.radius<.1||!Pt(this,i,this.size(n)/2)||(e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.fillStyle=n.backgroundColor,ri(e,n,this.x,this.y))}getRange(){let e=this.options||{};return e.radius+e.hitRadius}};v(Ue,\"id\",\"point\"),v(Ue,\"defaults\",{borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0}),v(Ue,\"defaultRoutes\",{backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"});function Wa(s,t){let{x:e,y:i,base:n,width:o,height:r}=s.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],t),a,l,c,h,u;return s.horizontal?(u=r/2,a=Math.min(e,n),l=Math.max(e,n),c=i-u,h=i+u):(u=o/2,a=e-u,l=e+u,c=Math.min(i,n),h=Math.max(i,n)),{left:a,top:c,right:l,bottom:h}}function se(s,t,e,i){return s?0:K(t,e,i)}function Ed(s,t,e){let i=s.options.borderWidth,n=s.borderSkipped,o=bn(i);return{t:se(n.top,o.top,0,e),r:se(n.right,o.right,0,t),b:se(n.bottom,o.bottom,0,e),l:se(n.left,o.left,0,t)}}function Ld(s,t,e){let{enableBorderRadius:i}=s.getProps([\"enableBorderRadius\"]),n=s.options.borderRadius,o=te(n),r=Math.min(t,e),a=s.borderSkipped,l=i||E(n);return{topLeft:se(!l||a.top||a.left,o.topLeft,0,r),topRight:se(!l||a.top||a.right,o.topRight,0,r),bottomLeft:se(!l||a.bottom||a.left,o.bottomLeft,0,r),bottomRight:se(!l||a.bottom||a.right,o.bottomRight,0,r)}}function Fd(s){let t=Wa(s),e=t.right-t.left,i=t.bottom-t.top,n=Ed(s,e/2,i/2),o=Ld(s,e/2,i/2);return{outer:{x:t.left,y:t.top,w:e,h:i,radius:o},inner:{x:t.left+n.l,y:t.top+n.t,w:e-n.l-n.r,h:i-n.t-n.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,o.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(n.b,n.r))}}}}function Rn(s,t,e,i){let n=t===null,o=e===null,a=s&&!(n&&o)&&Wa(s,i);return a&&(n||It(t,a.left,a.right))&&(o||It(e,a.top,a.bottom))}function Rd(s){return s.topLeft||s.topRight||s.bottomLeft||s.bottomRight}function Nd(s,t){s.rect(t.x,t.y,t.w,t.h)}function Nn(s,t,e={}){let i=s.x!==e.x?-t:0,n=s.y!==e.y?-t:0,o=(s.x+s.w!==e.x+e.w?t:0)-i,r=(s.y+s.h!==e.y+e.h?t:0)-n;return{x:s.x+i,y:s.y+n,w:s.w+o,h:s.h+r,radius:s.radius}}var Ye=class extends dt{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){let{inflateAmount:e,options:{borderColor:i,backgroundColor:n}}=this,{inner:o,outer:r}=Fd(this),a=Rd(r.radius)?Ne:Nd;t.save(),(r.w!==o.w||r.h!==o.h)&&(t.beginPath(),a(t,Nn(r,e,o)),t.clip(),a(t,Nn(o,-e,r)),t.fillStyle=i,t.fill(\"evenodd\")),t.beginPath(),a(t,Nn(o,e)),t.fillStyle=n,t.fill(),t.restore()}inRange(t,e,i){return Rn(this,t,e,i)}inXRange(t,e){return Rn(this,t,null,e)}inYRange(t,e){return Rn(this,null,t,e)}getCenterPoint(t){let{x:e,y:i,base:n,horizontal:o}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:o?(e+n)/2:e,y:o?i:(i+n)/2}}getRange(t){return t===\"x\"?this.width/2:this.height/2}};v(Ye,\"id\",\"bar\"),v(Ye,\"defaults\",{borderSkipped:\"start\",borderWidth:0,borderRadius:0,inflateAmount:\"auto\",pointStyle:void 0}),v(Ye,\"defaultRoutes\",{backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"});var zd=Object.freeze({__proto__:null,ArcElement:be,BarElement:Ye,LineElement:Ft,PointElement:Ue}),Jn=[\"rgb(54, 162, 235)\",\"rgb(255, 99, 132)\",\"rgb(255, 159, 64)\",\"rgb(255, 205, 86)\",\"rgb(75, 192, 192)\",\"rgb(153, 102, 255)\",\"rgb(201, 203, 207)\"],na=Jn.map(s=>s.replace(\"rgb(\",\"rgba(\").replace(\")\",\", 0.5)\"));function Ba(s){return Jn[s%Jn.length]}function Ha(s){return na[s%na.length]}function Vd(s,t){return s.borderColor=Ba(t),s.backgroundColor=Ha(t),++t}function Wd(s,t){return s.backgroundColor=s.data.map(()=>Ba(t++)),t}function Bd(s,t){return s.backgroundColor=s.data.map(()=>Ha(t++)),t}function Hd(s){let t=0;return(e,i)=>{let n=s.getDatasetMeta(i).controller;n instanceof jt?t=Wd(e,t):n instanceof xe?t=Bd(e,t):n&&(t=Vd(e,t))}}function oa(s){let t;for(t in s)if(s[t].borderColor||s[t].backgroundColor)return!0;return!1}function $d(s){return s&&(s.borderColor||s.backgroundColor)}function jd(){return j.borderColor!==\"rgba(0,0,0,0.1)\"||j.backgroundColor!==\"rgba(0,0,0,0.1)\"}var Ud={id:\"colors\",defaults:{enabled:!0,forceOverride:!1},beforeLayout(s,t,e){if(!e.enabled)return;let{data:{datasets:i},options:n}=s.config,{elements:o}=n,r=oa(i)||$d(n)||o&&oa(o)||jd();if(!e.forceOverride&&r)return;let a=Hd(s);i.forEach(a)}};function Yd(s,t,e,i,n){let o=n.samples||i;if(o>=e)return s.slice(t,t+e);let r=[],a=(e-2)/(o-2),l=0,c=t+e-1,h=t,u,d,f,g,m;for(r[l++]=s[h],u=0;u<o-2;u++){let p=0,b=0,y,_=Math.floor((u+1)*a)+1+t,w=Math.min(Math.floor((u+2)*a)+1,e)+t,x=w-_;for(y=_;y<w;y++)p+=s[y].x,b+=s[y].y;p/=x,b/=x;let k=Math.floor(u*a)+1+t,S=Math.min(Math.floor((u+1)*a)+1,e)+t,{x:M,y:T}=s[h];for(f=g=-1,y=k;y<S;y++)g=.5*Math.abs((M-p)*(s[y].y-T)-(M-s[y].x)*(b-T)),g>f&&(f=g,d=s[y],m=y);r[l++]=d,h=m}return r[l++]=s[c],r}function Zd(s,t,e,i){let n=0,o=0,r,a,l,c,h,u,d,f,g,m,p=[],b=t+e-1,y=s[t].x,w=s[b].x-y;for(r=t;r<t+e;++r){a=s[r],l=(a.x-y)/w*i,c=a.y;let x=l|0;if(x===h)c<g?(g=c,u=r):c>m&&(m=c,d=r),n=(o*n+a.x)/++o;else{let k=r-1;if(!I(u)&&!I(d)){let S=Math.min(u,d),M=Math.max(u,d);S!==f&&S!==k&&p.push({...s[S],x:n}),M!==f&&M!==k&&p.push({...s[M],x:n})}r>0&&k!==f&&p.push(s[k]),p.push(a),h=x,o=0,g=m=c,u=d=f=r}}return p}function $a(s){if(s._decimated){let t=s._data;delete s._decimated,delete s._data,Object.defineProperty(s,\"data\",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function ra(s){s.data.datasets.forEach(t=>{$a(t)})}function qd(s,t){let e=t.length,i=0,n,{iScale:o}=s,{min:r,max:a,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(i=K(Ct(t,o.axis,r).lo,0,e-1)),c?n=K(Ct(t,o.axis,a).hi+1,i,e)-i:n=e-i,{start:i,count:n}}var Gd={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(s,t,e)=>{if(!e.enabled){ra(s);return}let i=s.width;s.data.datasets.forEach((n,o)=>{let{_data:r,indexAxis:a}=n,l=s.getDatasetMeta(o),c=r||n.data;if(ze([a,s.options.indexAxis])===\"y\"||!l.controller.supportsDecimation)return;let h=s.scales[l.xAxisID];if(h.type!==\"linear\"&&h.type!==\"time\"||s.options.parsing)return;let{start:u,count:d}=qd(l,c),f=e.threshold||4*i;if(d<=f){$a(n);return}I(r)&&(n._data=c,delete n.data,Object.defineProperty(n,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(m){this._data=m}}));let g;switch(e.algorithm){case\"lttb\":g=Yd(c,u,d,i,e);break;case\"min-max\":g=Zd(c,u,d,i);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(s){ra(s)}};function Xd(s,t,e){let i=s.segments,n=s.points,o=t.points,r=[];for(let a of i){let{start:l,end:c}=a;c=Oi(l,c,n);let h=Kn(e,n[l],n[c],a.loop);if(!t.segments){r.push({source:a,target:h,start:n[l],end:n[c]});continue}let u=Tn(t,h);for(let d of u){let f=Kn(e,o[d.start],o[d.end],d.loop),g=On(a,n,f);for(let m of g)r.push({source:m,target:d,start:{[e]:aa(h,f,\"start\",Math.max)},end:{[e]:aa(h,f,\"end\",Math.min)}})}}return r}function Kn(s,t,e,i){if(i)return;let n=t[s],o=e[s];return s===\"angle\"&&(n=st(n),o=st(o)),{property:s,start:n,end:o}}function Jd(s,t){let{x:e=null,y:i=null}=s||{},n=t.points,o=[];return t.segments.forEach(({start:r,end:a})=>{a=Oi(r,a,n);let l=n[r],c=n[a];i!==null?(o.push({x:l.x,y:i}),o.push({x:c.x,y:i})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Oi(s,t,e){for(;t>s;t--){let i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function aa(s,t,e,i){return s&&t?i(s[e],t[e]):s?s[e]:t?t[e]:0}function ja(s,t){let e=[],i=!1;return H(s)?(i=!0,e=s):e=Jd(s,t),e.length?new Ft({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function la(s){return s&&s.fill!==!1}function Kd(s,t,e){let n=s[t].fill,o=[t],r;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!Z(n))return n;if(r=s[n],!r)return!1;if(r.visible)return n;o.push(n),n=r.fill}return!1}function Qd(s,t,e){let i=nf(s);if(E(i))return isNaN(i.value)?!1:i;let n=parseFloat(i);return Z(n)&&Math.floor(n)===n?tf(i[0],t,n,e):[\"origin\",\"start\",\"end\",\"stack\",\"shape\"].indexOf(i)>=0&&i}function tf(s,t,e,i){return(s===\"-\"||s===\"+\")&&(e=t+e),e===t||e<0||e>=i?!1:e}function ef(s,t){let e=null;return s===\"start\"?e=t.bottom:s===\"end\"?e=t.top:E(s)?e=t.getPixelForValue(s.value):t.getBasePixel&&(e=t.getBasePixel()),e}function sf(s,t,e){let i;return s===\"start\"?i=e:s===\"end\"?i=t.options.reverse?t.min:t.max:E(s)?i=s.value:i=t.getBaseValue(),i}function nf(s){let t=s.options,e=t.fill,i=P(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?\"origin\":i}function of(s){let{scale:t,index:e,line:i}=s,n=[],o=i.segments,r=i.points,a=rf(t,e);a.push(ja({x:null,y:t.bottom},i));for(let l=0;l<o.length;l++){let c=o[l];for(let h=c.start;h<=c.end;h++)af(n,r[h],a)}return new Ft({points:n,options:{}})}function rf(s,t){let e=[],i=s.getMatchingVisibleMetas(\"line\");for(let n=0;n<i.length;n++){let o=i[n];if(o.index===t)break;o.hidden||e.unshift(o.dataset)}return e}function af(s,t,e){let i=[];for(let n=0;n<e.length;n++){let o=e[n],{first:r,last:a,point:l}=lf(o,t,\"x\");if(!(!l||r&&a)){if(r)i.unshift(l);else if(s.push(l),!a)break}}s.push(...i)}function lf(s,t,e){let i=s.interpolate(t,e);if(!i)return{};let n=i[e],o=s.segments,r=s.points,a=!1,l=!1;for(let c=0;c<o.length;c++){let h=o[c],u=r[h.start][e],d=r[h.end][e];if(It(n,u,d)){a=n===u,l=n===d;break}}return{first:a,last:l,point:i}}var Si=class{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){let{x:n,y:o,radius:r}=this;return e=e||{start:0,end:$},t.arc(n,o,r,e.end,e.start,!0),!i.bounds}interpolate(t){let{x:e,y:i,radius:n}=this,o=t.angle;return{x:e+Math.cos(o)*n,y:i+Math.sin(o)*n,angle:o}}};function cf(s){let{chart:t,fill:e,line:i}=s;if(Z(e))return hf(t,e);if(e===\"stack\")return of(s);if(e===\"shape\")return!0;let n=uf(s);return n instanceof Si?n:ja(n,i)}function hf(s,t){let e=s.getDatasetMeta(t);return e&&s.isDatasetVisible(t)?e.dataset:null}function uf(s){return(s.scale||{}).getPointPositionForValue?ff(s):df(s)}function df(s){let{scale:t={},fill:e}=s,i=ef(e,t);if(Z(i)){let n=t.isHorizontal();return{x:n?i:null,y:n?null:i}}return null}function ff(s){let{scale:t,fill:e}=s,i=t.options,n=t.getLabels().length,o=i.reverse?t.max:t.min,r=sf(e,t,o),a=[];if(i.grid.circular){let l=t.getPointPositionForValue(0,o);return new Si({x:l.x,y:l.y,radius:t.getDistanceFromCenterForValue(r)})}for(let l=0;l<n;++l)a.push(t.getPointPositionForValue(l,r));return a}function zn(s,t,e){let i=cf(t),{chart:n,index:o,line:r,scale:a,axis:l}=t,c=r.options,h=c.fill,u=c.backgroundColor,{above:d=u,below:f=u}=h||{},g=n.getDatasetMeta(o),m=Dn(n,g);i&&r.points.length&&(ps(s,e),gf(s,{line:r,target:i,above:d,below:f,area:e,scale:a,axis:l,clip:m}),bs(s))}function gf(s,t){let{line:e,target:i,above:n,below:o,area:r,scale:a,clip:l}=t,c=e._loop?\"angle\":t.axis;s.save();let h=o;o!==n&&(c===\"x\"?(ca(s,i,r.top),Vn(s,{line:e,target:i,color:n,scale:a,property:c,clip:l}),s.restore(),s.save(),ca(s,i,r.bottom)):c===\"y\"&&(ha(s,i,r.left),Vn(s,{line:e,target:i,color:o,scale:a,property:c,clip:l}),s.restore(),s.save(),ha(s,i,r.right),h=n)),Vn(s,{line:e,target:i,color:h,scale:a,property:c,clip:l}),s.restore()}function ca(s,t,e){let{segments:i,points:n}=t,o=!0,r=!1;s.beginPath();for(let a of i){let{start:l,end:c}=a,h=n[l],u=n[Oi(l,c,n)];o?(s.moveTo(h.x,h.y),o=!1):(s.lineTo(h.x,e),s.lineTo(h.x,h.y)),r=!!t.pathSegment(s,a,{move:r}),r?s.closePath():s.lineTo(u.x,e)}s.lineTo(t.first().x,e),s.closePath(),s.clip()}function ha(s,t,e){let{segments:i,points:n}=t,o=!0,r=!1;s.beginPath();for(let a of i){let{start:l,end:c}=a,h=n[l],u=n[Oi(l,c,n)];o?(s.moveTo(h.x,h.y),o=!1):(s.lineTo(e,h.y),s.lineTo(h.x,h.y)),r=!!t.pathSegment(s,a,{move:r}),r?s.closePath():s.lineTo(e,u.y)}s.lineTo(e,t.first().y),s.closePath(),s.clip()}function Vn(s,t){let{line:e,target:i,property:n,color:o,scale:r,clip:a}=t,l=Xd(e,i,n);for(let{source:c,target:h,start:u,end:d}of l){let{style:{backgroundColor:f=o}={}}=c,g=i!==!0;s.save(),s.fillStyle=f,mf(s,r,a,g&&Kn(n,u,d)),s.beginPath();let m=!!e.pathSegment(s,c),p;if(g){m?s.closePath():ua(s,i,d,n);let b=!!i.pathSegment(s,h,{move:m,reverse:!0});p=m&&b,p||ua(s,i,u,n)}s.closePath(),s.fill(p?\"evenodd\":\"nonzero\"),s.restore()}}function mf(s,t,e,i){let n=t.chart.chartArea,{property:o,start:r,end:a}=i||{};if(o===\"x\"||o===\"y\"){let l,c,h,u;o===\"x\"?(l=r,c=n.top,h=a,u=n.bottom):(l=n.left,c=r,h=n.right,u=a),s.beginPath(),e&&(l=Math.max(l,e.left),h=Math.min(h,e.right),c=Math.max(c,e.top),u=Math.min(u,e.bottom)),s.rect(l,c,h-l,u-c),s.clip()}}function ua(s,t,e,i){let n=t.interpolate(e,i);n&&s.lineTo(n.x,n.y)}var pf={id:\"filler\",afterDatasetsUpdate(s,t,e){let i=(s.data.datasets||[]).length,n=[],o,r,a,l;for(r=0;r<i;++r)o=s.getDatasetMeta(r),a=o.dataset,l=null,a&&a.options&&a instanceof Ft&&(l={visible:s.isDatasetVisible(r),index:r,fill:Qd(a,r,i),chart:s,axis:o.controller.options.indexAxis,scale:o.vScale,line:a}),o.$filler=l,n.push(l);for(r=0;r<i;++r)l=n[r],!(!l||l.fill===!1)&&(l.fill=Kd(n,r,e.propagate))},beforeDraw(s,t,e){let i=e.drawTime===\"beforeDraw\",n=s.getSortedVisibleDatasetMetas(),o=s.chartArea;for(let r=n.length-1;r>=0;--r){let a=n[r].$filler;a&&(a.line.updateControlPoints(o,a.axis),i&&a.fill&&zn(s.ctx,a,o))}},beforeDatasetsDraw(s,t,e){if(e.drawTime!==\"beforeDatasetsDraw\")return;let i=s.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){let o=i[n].$filler;la(o)&&zn(s.ctx,o,s.chartArea)}},beforeDatasetDraw(s,t,e){let i=t.meta.$filler;!la(i)||e.drawTime!==\"beforeDatasetDraw\"||zn(s.ctx,i,s.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}},da=(s,t)=>{let{boxHeight:e=t,boxWidth:i=t}=s;return s.usePointStyle&&(e=Math.min(e,t),i=s.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},bf=(s,t)=>s!==null&&t!==null&&s.datasetIndex===t.datasetIndex&&s.index===t.index,Mi=class extends dt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=W(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,n)=>t.sort(i,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let i=t.labels,n=X(i.font),o=n.size,r=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=da(i,o),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(r,o,a,l)+10):(h=this.maxHeight,c=this._fitCols(r,n,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,n){let{ctx:o,maxWidth:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+a,u=t;o.textAlign=\"left\",o.textBaseline=\"middle\";let d=-1,f=-h;return this.legendItems.forEach((g,m)=>{let p=i+e/2+o.measureText(g.text).width;(m===0||c[c.length-1]+p+2*a>r)&&(u+=h,c[c.length-(m>0?0:1)]=0,f+=h,d++),l[m]={left:0,top:f,row:d,width:p,height:n},c[c.length-1]+=p+a}),u}_fitCols(t,e,i,n){let{ctx:o,maxHeight:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=r-t,u=a,d=0,f=0,g=0,m=0;return this.legendItems.forEach((p,b)=>{let{itemWidth:y,itemHeight:_}=yf(i,e,o,p,n);b>0&&f+_+2*a>h&&(u+=d+a,c.push({width:d,height:f}),g+=d+a,m++,d=f=0),l[b]={left:g,top:f,col:m,width:y,height:_},d=Math.max(d,y),f+=_+a}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:n},rtl:o}}=this,r=ge(o,this.left,this.width);if(this.isHorizontal()){let a=0,l=it(i,this.left+n,this.right-this.lineWidths[a]);for(let c of e)a!==c.row&&(a=c.row,l=it(i,this.left+n,this.right-this.lineWidths[a])),c.top+=this.top+t+n,c.left=r.leftForLtr(r.x(l),c.width),l+=c.width+n}else{let a=0,l=it(i,this.top+t+n,this.bottom-this.columnSizes[a].height);for(let c of e)c.col!==a&&(a=c.col,l=it(i,this.top+t+n,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+n,c.left=r.leftForLtr(r.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position===\"top\"||this.options.position===\"bottom\"}draw(){if(this.options.display){let t=this.ctx;ps(t,this),this._draw(),bs(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:i,ctx:n}=this,{align:o,labels:r}=t,a=j.color,l=ge(t.rtl,this.left,this.width),c=X(r.font),{padding:h}=r,u=c.size,d=u/2,f;this.drawTitle(),n.textAlign=l.textAlign(\"left\"),n.textBaseline=\"middle\",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:m,itemHeight:p}=da(r,u),b=function(k,S,M){if(isNaN(g)||g<=0||isNaN(m)||m<0)return;n.save();let T=P(M.lineWidth,1);if(n.fillStyle=P(M.fillStyle,a),n.lineCap=P(M.lineCap,\"butt\"),n.lineDashOffset=P(M.lineDashOffset,0),n.lineJoin=P(M.lineJoin,\"miter\"),n.lineWidth=T,n.strokeStyle=P(M.strokeStyle,a),n.setLineDash(P(M.lineDash,[])),r.usePointStyle){let C={radius:m*Math.SQRT2/2,pointStyle:M.pointStyle,rotation:M.rotation,borderWidth:T},A=l.xPlus(k,g/2),L=S+d;pn(n,C,A,L,r.pointStyleWidth&&g)}else{let C=S+Math.max((u-m)/2,0),A=l.leftForLtr(k,g),L=te(M.borderRadius);n.beginPath(),Object.values(L).some(et=>et!==0)?Ne(n,{x:A,y:C,w:g,h:m,radius:L}):n.rect(A,C,g,m),n.fill(),T!==0&&n.stroke()}n.restore()},y=function(k,S,M){Qt(n,M.text,k,S+p/2,c,{strikethrough:M.hidden,textAlign:l.textAlign(M.textAlign)})},_=this.isHorizontal(),w=this._computeTitleHeight();_?f={x:it(o,this.left+h,this.right-i[0]),y:this.top+h+w,line:0}:f={x:this.left+h,y:it(o,this.top+w+h,this.bottom-e[0].height),line:0},Sn(this.ctx,t.textDirection);let x=p+h;this.legendItems.forEach((k,S)=>{n.strokeStyle=k.fontColor,n.fillStyle=k.fontColor;let M=n.measureText(k.text).width,T=l.textAlign(k.textAlign||(k.textAlign=r.textAlign)),C=g+d+M,A=f.x,L=f.y;l.setWidth(this.width),_?S>0&&A+C+h>this.right&&(L=f.y+=x,f.line++,A=f.x=it(o,this.left+h,this.right-i[f.line])):S>0&&L+x>this.bottom&&(A=f.x=A+e[f.line].width+h,f.line++,L=f.y=it(o,this.top+w+h,this.bottom-e[f.line].height));let et=l.x(A);if(b(et,L,k),A=dr(T,A+g+d,_?A+C:this.right,t.rtl),y(l.x(A),L,k),_)f.x+=C+h;else if(typeof k.text!=\"string\"){let ht=c.lineHeight;f.y+=Ua(k,ht)+h}else f.y+=x}),Mn(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,i=X(e.font),n=nt(e.padding);if(!e.display)return;let o=ge(t.rtl,this.left,this.width),r=this.ctx,a=e.position,l=i.size/2,c=n.top+l,h,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+c,u=it(t.align,u,this.right-d);else{let g=this.columnSizes.reduce((m,p)=>Math.max(m,p.height),0);h=c+it(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}let f=it(a,u,u+d);r.textAlign=o.textAlign(ni(a)),r.textBaseline=\"middle\",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,Qt(r,e.text,f,h,i)}_computeTitleHeight(){let t=this.options.title,e=X(t.font),i=nt(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,n,o;if(It(t,this.left,this.right)&&It(e,this.top,this.bottom)){for(o=this.legendHitBoxes,i=0;i<o.length;++i)if(n=o[i],It(t,n.left,n.left+n.width)&&It(e,n.top,n.top+n.height))return this.legendItems[i]}return null}handleEvent(t){let e=this.options;if(!wf(t.type,e))return;let i=this._getLegendItemAt(t.x,t.y);if(t.type===\"mousemove\"||t.type===\"mouseout\"){let n=this._hoveredItem,o=bf(n,i);n&&!o&&W(e.onLeave,[t,n,this],this),this._hoveredItem=i,i&&!o&&W(e.onHover,[t,i,this],this)}else i&&W(e.onClick,[t,i,this],this)}};function yf(s,t,e,i,n){let o=xf(i,s,t,e),r=_f(n,i,t.lineHeight);return{itemWidth:o,itemHeight:r}}function xf(s,t,e,i){let n=s.text;return n&&typeof n!=\"string\"&&(n=n.reduce((o,r)=>o.length>r.length?o:r)),t+e.size/2+i.measureText(n).width}function _f(s,t,e){let i=s;return typeof t.text!=\"string\"&&(i=Ua(t,e)),i}function Ua(s,t){let e=s.text?s.text.length:0;return t*e}function wf(s,t){return!!((s===\"mousemove\"||s===\"mouseout\")&&(t.onHover||t.onLeave)||t.onClick&&(s===\"click\"||s===\"mouseup\"))}var kf={id:\"legend\",_element:Mi,start(s,t,e){let i=s.legend=new Mi({ctx:s.ctx,options:e,chart:s});rt.configure(s,i,e),rt.addBox(s,i)},stop(s){rt.removeBox(s,s.legend),delete s.legend},beforeUpdate(s,t,e){let i=s.legend;rt.configure(s,i,e),i.options=e},afterUpdate(s){let t=s.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(s,t){t.replay||s.legend.handleEvent(t.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(s,t,e){let i=t.datasetIndex,n=e.chart;n.isDatasetVisible(i)?(n.hide(i),t.hidden=!0):(n.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:s=>s.chart.options.color,boxWidth:40,padding:10,generateLabels(s){let t=s.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:n,color:o,useBorderRadius:r,borderRadius:a}}=s.legend.options;return s._getSortedDatasetMetas().map(l=>{let c=l.controller.getStyle(e?0:void 0),h=nt(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:i||c.pointStyle,rotation:c.rotation,textAlign:n||c.textAlign,borderRadius:r&&(a||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:s=>s.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:s=>!s.startsWith(\"on\"),labels:{_scriptable:s=>![\"generateLabels\",\"filter\",\"sort\"].includes(s)}}},Is=class extends dt{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let i=this.options;if(this.left=0,this.top=0,!i.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=H(i.text)?i.text.length:1;this._padding=nt(i.padding);let o=n*X(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){let t=this.options.position;return t===\"top\"||t===\"bottom\"}_drawArgs(t){let{top:e,left:i,bottom:n,right:o,options:r}=this,a=r.align,l=0,c,h,u;return this.isHorizontal()?(h=it(a,i,o),u=e+t,c=o-i):(r.position===\"left\"?(h=i+t,u=it(a,n,e),l=F*-.5):(h=o-t,u=it(a,e,n),l=F*.5),c=n-e),{titleX:h,titleY:u,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let i=X(e.font),o=i.lineHeight/2+this._padding.top,{titleX:r,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(o);Qt(t,e.text,0,0,i,{color:e.color,maxWidth:l,rotation:c,textAlign:ni(e.align),textBaseline:\"middle\",translation:[r,a]})}};function vf(s,t){let e=new Is({ctx:s.ctx,options:t,chart:s});rt.configure(s,e,t),rt.addBox(s,e),s.titleBlock=e}var Sf={id:\"title\",_element:Is,start(s,t,e){vf(s,e)},stop(s){let t=s.titleBlock;rt.removeBox(s,t),delete s.titleBlock},beforeUpdate(s,t,e){let i=s.titleBlock;rt.configure(s,i,e),i.options=e},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}},mi=new WeakMap,Mf={id:\"subtitle\",start(s,t,e){let i=new Is({ctx:s.ctx,options:e,chart:s});rt.configure(s,i,e),rt.addBox(s,i),mi.set(s,i)},stop(s){rt.removeBox(s,mi.get(s)),mi.delete(s)},beforeUpdate(s,t,e){let i=mi.get(s);rt.configure(s,i,e),i.options=e},defaults:{align:\"center\",display:!1,font:{weight:\"normal\"},fullSize:!0,padding:0,position:\"top\",text:\"\",weight:1500},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}},Ms={average(s){if(!s.length)return!1;let t,e,i=new Set,n=0,o=0;for(t=0,e=s.length;t<e;++t){let a=s[t].element;if(a&&a.hasValue()){let l=a.tooltipPosition();i.add(l.x),n+=l.y,++o}}return o===0||i.size===0?!1:{x:[...i].reduce((a,l)=>a+l)/i.size,y:n/o}},nearest(s,t){if(!s.length)return!1;let e=t.x,i=t.y,n=Number.POSITIVE_INFINITY,o,r,a;for(o=0,r=s.length;o<r;++o){let l=s[o].element;if(l&&l.hasValue()){let c=l.getCenterPoint(),h=Qs(t,c);h<n&&(n=h,a=l)}}if(a){let l=a.tooltipPosition();e=l.x,i=l.y}return{x:e,y:i}}};function Et(s,t){return t&&(H(t)?Array.prototype.push.apply(s,t):s.push(t)),s}function $t(s){return(typeof s==\"string\"||s instanceof String)&&s.indexOf(`\n`)>-1?s.split(`\n`):s}function Of(s,t){let{element:e,datasetIndex:i,index:n}=t,o=s.getDatasetMeta(i).controller,{label:r,value:a}=o.getLabelAndValue(n);return{chart:s,label:r,parsed:o.getParsed(n),raw:s.data.datasets[i].data[n],formattedValue:a,dataset:o.getDataset(),dataIndex:n,datasetIndex:i,element:e}}function fa(s,t){let e=s.chart.ctx,{body:i,footer:n,title:o}=s,{boxWidth:r,boxHeight:a}=t,l=X(t.bodyFont),c=X(t.titleFont),h=X(t.footerFont),u=o.length,d=n.length,f=i.length,g=nt(t.padding),m=g.height,p=0,b=i.reduce((w,x)=>w+x.before.length+x.lines.length+x.after.length,0);if(b+=s.beforeBody.length+s.afterBody.length,u&&(m+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),b){let w=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;m+=f*w+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}d&&(m+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let y=0,_=function(w){p=Math.max(p,e.measureText(w).width+y)};return e.save(),e.font=c.string,z(s.title,_),e.font=l.string,z(s.beforeBody.concat(s.afterBody),_),y=t.displayColors?r+2+t.boxPadding:0,z(i,w=>{z(w.before,_),z(w.lines,_),z(w.after,_)}),y=0,e.font=h.string,z(s.footer,_),e.restore(),p+=g.width,{width:p,height:m}}function Tf(s,t){let{y:e,height:i}=t;return e<i/2?\"top\":e>s.height-i/2?\"bottom\":\"center\"}function Df(s,t,e,i){let{x:n,width:o}=i,r=e.caretSize+e.caretPadding;if(s===\"left\"&&n+o+r>t.width||s===\"right\"&&n-o-r<0)return!0}function Cf(s,t,e,i){let{x:n,width:o}=e,{width:r,chartArea:{left:a,right:l}}=s,c=\"center\";return i===\"center\"?c=n<=(a+l)/2?\"left\":\"right\":n<=o/2?c=\"left\":n>=r-o/2&&(c=\"right\"),Df(c,s,t,e)&&(c=\"center\"),c}function ga(s,t,e){let i=e.yAlign||t.yAlign||Tf(s,e);return{xAlign:e.xAlign||t.xAlign||Cf(s,t,e,i),yAlign:i}}function Pf(s,t){let{x:e,width:i}=s;return t===\"right\"?e-=i:t===\"center\"&&(e-=i/2),e}function Af(s,t,e){let{y:i,height:n}=s;return t===\"top\"?i+=e:t===\"bottom\"?i-=n+e:i-=n/2,i}function ma(s,t,e,i){let{caretSize:n,caretPadding:o,cornerRadius:r}=s,{xAlign:a,yAlign:l}=e,c=n+o,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=te(r),g=Pf(t,a),m=Af(t,l,c);return l===\"center\"?a===\"left\"?g+=c:a===\"right\"&&(g-=c):a===\"left\"?g-=Math.max(h,d)+n:a===\"right\"&&(g+=Math.max(u,f)+n),{x:K(g,0,i.width-t.width),y:K(m,0,i.height-t.height)}}function pi(s,t,e){let i=nt(e.padding);return t===\"center\"?s.x+s.width/2:t===\"right\"?s.x+s.width-i.right:s.x+i.left}function pa(s){return Et([],$t(s))}function If(s,t,e){return Bt(s,{tooltip:t,tooltipItems:e,type:\"tooltip\"})}function ba(s,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?s.override(e):s}var Ya={beforeTitle:At,title(s){if(s.length>0){let t=s[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode===\"dataset\")return t.dataset.label||\"\";if(t.label)return t.label;if(i>0&&t.dataIndex<i)return e[t.dataIndex]}return\"\"},afterTitle:At,beforeBody:At,beforeLabel:At,label(s){if(this&&this.options&&this.options.mode===\"dataset\")return s.label+\": \"+s.formattedValue||s.formattedValue;let t=s.dataset.label||\"\";t&&(t+=\": \");let e=s.formattedValue;return I(e)||(t+=e),t},labelColor(s){let e=s.chart.getDatasetMeta(s.datasetIndex).controller.getStyle(s.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(s){let e=s.chart.getDatasetMeta(s.datasetIndex).controller.getStyle(s.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:At,afterBody:At,beforeFooter:At,footer:At,afterFooter:At};function lt(s,t,e,i){let n=s[t].call(e,i);return typeof n>\"u\"?Ya[t].call(e,i):n}var Ps=class extends dt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,i=this.options.setContext(this.getContext()),n=i.enabled&&e.options.animation&&i.animations,o=new _i(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=If(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:i}=e,n=lt(i,\"beforeTitle\",this,t),o=lt(i,\"title\",this,t),r=lt(i,\"afterTitle\",this,t),a=[];return a=Et(a,$t(n)),a=Et(a,$t(o)),a=Et(a,$t(r)),a}getBeforeBody(t,e){return pa(lt(e.callbacks,\"beforeBody\",this,t))}getBody(t,e){let{callbacks:i}=e,n=[];return z(t,o=>{let r={before:[],lines:[],after:[]},a=ba(i,o);Et(r.before,$t(lt(a,\"beforeLabel\",this,o))),Et(r.lines,lt(a,\"label\",this,o)),Et(r.after,$t(lt(a,\"afterLabel\",this,o))),n.push(r)}),n}getAfterBody(t,e){return pa(lt(e.callbacks,\"afterBody\",this,t))}getFooter(t,e){let{callbacks:i}=e,n=lt(i,\"beforeFooter\",this,t),o=lt(i,\"footer\",this,t),r=lt(i,\"afterFooter\",this,t),a=[];return a=Et(a,$t(n)),a=Et(a,$t(o)),a=Et(a,$t(r)),a}_createItems(t){let e=this._active,i=this.chart.data,n=[],o=[],r=[],a=[],l,c;for(l=0,c=e.length;l<c;++l)a.push(Of(this.chart,e[l]));return t.filter&&(a=a.filter((h,u,d)=>t.filter(h,u,d,i))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,i))),z(a,h=>{let u=ba(t.callbacks,h);n.push(lt(u,\"labelColor\",this,h)),o.push(lt(u,\"labelPointStyle\",this,h)),r.push(lt(u,\"labelTextColor\",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,e){let i=this.options.setContext(this.getContext()),n=this._active,o,r=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{let a=Ms[i.position].call(this,n,this._eventPosition);r=this._createItems(i),this.title=this.getTitle(r,i),this.beforeBody=this.getBeforeBody(r,i),this.body=this.getBody(r,i),this.afterBody=this.getAfterBody(r,i),this.footer=this.getFooter(r,i);let l=this._size=fa(this,i),c=Object.assign({},a,l),h=ga(this.chart,i,c),u=ma(i,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,n){let o=this.getCaretPosition(t,i,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,i){let{xAlign:n,yAlign:o}=this,{caretSize:r,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=te(a),{x:d,y:f}=t,{width:g,height:m}=e,p,b,y,_,w,x;return o===\"center\"?(w=f+m/2,n===\"left\"?(p=d,b=p-r,_=w+r,x=w-r):(p=d+g,b=p+r,_=w-r,x=w+r),y=p):(n===\"left\"?b=d+Math.max(l,h)+r:n===\"right\"?b=d+g-Math.max(c,u)-r:b=this.caretX,o===\"top\"?(_=f,w=_-r,p=b-r,y=b+r):(_=f+m,w=_+r,p=b+r,y=b-r),x=_),{x1:p,x2:b,x3:y,y1:_,y2:w,y3:x}}drawTitle(t,e,i){let n=this.title,o=n.length,r,a,l;if(o){let c=ge(i.rtl,this.x,this.width);for(t.x=pi(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline=\"middle\",r=X(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=r.string,l=0;l<o;++l)e.fillText(n[l],c.x(t.x),t.y+r.lineHeight/2),t.y+=r.lineHeight+a,l+1===o&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,n,o){let r=this.labelColors[i],a=this.labelPointStyles[i],{boxHeight:l,boxWidth:c}=o,h=X(o.bodyFont),u=pi(this,\"left\",o),d=n.x(u),f=l<h.lineHeight?(h.lineHeight-l)/2:0,g=e.y+f;if(o.usePointStyle){let m={radius:Math.min(c,l)/2,pointStyle:a.pointStyle,rotation:a.rotation,borderWidth:1},p=n.leftForLtr(d,c)+c/2,b=g+l/2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,ri(t,m,p,b),t.strokeStyle=r.borderColor,t.fillStyle=r.backgroundColor,ri(t,m,p,b)}else{t.lineWidth=E(r.borderWidth)?Math.max(...Object.values(r.borderWidth)):r.borderWidth||1,t.strokeStyle=r.borderColor,t.setLineDash(r.borderDash||[]),t.lineDashOffset=r.borderDashOffset||0;let m=n.leftForLtr(d,c),p=n.leftForLtr(n.xPlus(d,1),c-2),b=te(r.borderRadius);Object.values(b).some(y=>y!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,Ne(t,{x:m,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),Ne(t,{x:p,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(m,g,c,l),t.strokeRect(m,g,c,l),t.fillStyle=r.backgroundColor,t.fillRect(p,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){let{body:n}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=i,u=X(i.bodyFont),d=u.lineHeight,f=0,g=ge(i.rtl,this.x,this.width),m=function(M){e.fillText(M,g.x(t.x+f),t.y+d/2),t.y+=d+o},p=g.textAlign(r),b,y,_,w,x,k,S;for(e.textAlign=r,e.textBaseline=\"middle\",e.font=u.string,t.x=pi(this,p,i),e.fillStyle=i.bodyColor,z(this.beforeBody,m),f=a&&p!==\"right\"?r===\"center\"?c/2+h:c+2+h:0,w=0,k=n.length;w<k;++w){for(b=n[w],y=this.labelTextColors[w],e.fillStyle=y,z(b.before,m),_=b.lines,a&&_.length&&(this._drawColorBox(e,t,w,g,i),d=Math.max(u.lineHeight,l)),x=0,S=_.length;x<S;++x)m(_[x]),d=u.lineHeight;z(b.after,m)}f=0,d=u.lineHeight,z(this.afterBody,m),t.y-=o}drawFooter(t,e,i){let n=this.footer,o=n.length,r,a;if(o){let l=ge(i.rtl,this.x,this.width);for(t.x=pi(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=l.textAlign(i.footerAlign),e.textBaseline=\"middle\",r=X(i.footerFont),e.fillStyle=i.footerColor,e.font=r.string,a=0;a<o;++a)e.fillText(n[a],l.x(t.x),t.y+r.lineHeight/2),t.y+=r.lineHeight+i.footerSpacing}}drawBackground(t,e,i,n){let{xAlign:o,yAlign:r}=this,{x:a,y:l}=t,{width:c,height:h}=i,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:g}=te(n.cornerRadius);e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.beginPath(),e.moveTo(a+u,l),r===\"top\"&&this.drawCaret(t,e,i,n),e.lineTo(a+c-d,l),e.quadraticCurveTo(a+c,l,a+c,l+d),r===\"center\"&&o===\"right\"&&this.drawCaret(t,e,i,n),e.lineTo(a+c,l+h-g),e.quadraticCurveTo(a+c,l+h,a+c-g,l+h),r===\"bottom\"&&this.drawCaret(t,e,i,n),e.lineTo(a+f,l+h),e.quadraticCurveTo(a,l+h,a,l+h-f),r===\"center\"&&o===\"left\"&&this.drawCaret(t,e,i,n),e.lineTo(a,l+u),e.quadraticCurveTo(a,l,a+u,l),e.closePath(),e.fill(),n.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,i=this.$animations,n=i&&i.x,o=i&&i.y;if(n||o){let r=Ms[t.position].call(this,this._active,this._eventPosition);if(!r)return;let a=this._size=fa(this,t),l=Object.assign({},r,this._size),c=ga(e,t,l),h=ma(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),i=this.opacity;if(!i)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;let r=nt(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,n,e),Sn(t,e.textDirection),o.y+=r.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),Mn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let i=this._active,n=t.map(({datasetIndex:a,index:l})=>{let c=this.chart.getDatasetMeta(a);if(!c)throw new Error(\"Cannot find a dataset at index \"+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!gs(i,n),r=this._positionChanged(n,e);(o||r)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,o=this._active||[],r=this._getActiveElements(t,o,e,i),a=this._positionChanged(r,t),l=e||!gs(r,o)||a;return l&&(this._active=r,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,n){let o=this.options;if(t.type===\"mouseout\")return[];if(!n)return e.filter(a=>this.chart.data.datasets[a.datasetIndex]&&this.chart.getDatasetMeta(a.datasetIndex).controller.getParsed(a.index)!==void 0);let r=this.chart.getElementsAtEventForMode(t,o.mode,o,i);return o.reverse&&r.reverse(),r}_positionChanged(t,e){let{caretX:i,caretY:n,options:o}=this,r=Ms[o.position].call(this,t,e);return r!==!1&&(i!==r.x||n!==r.y)}};v(Ps,\"positioners\",Ms);var Ef={id:\"tooltip\",_element:Ps,positioners:Ms,afterInit(s,t,e){e&&(s.tooltip=new Ps({chart:s,options:e}))},beforeUpdate(s,t,e){s.tooltip&&s.tooltip.initialize(e)},reset(s,t,e){s.tooltip&&s.tooltip.initialize(e)},afterDraw(s){let t=s.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(s.notifyPlugins(\"beforeTooltipDraw\",{...e,cancelable:!0})===!1)return;t.draw(s.ctx),s.notifyPlugins(\"afterTooltipDraw\",e)}},afterEvent(s,t){if(s.tooltip){let e=t.replay;s.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(s,t)=>t.bodyFont.size,boxWidth:(s,t)=>t.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,boxPadding:0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:Ya},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:s=>s!==\"filter\"&&s!==\"itemSort\"&&s!==\"external\",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},Lf=Object.freeze({__proto__:null,Colors:Ud,Decimation:Gd,Filler:pf,Legend:kf,SubTitle:Mf,Title:Sf,Tooltip:Ef}),Ff=(s,t,e,i)=>(typeof t==\"string\"?(e=s.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function Rf(s,t,e,i){let n=s.indexOf(t);if(n===-1)return Ff(s,t,e,i);let o=s.lastIndexOf(t);return n!==o?e:n}var Nf=(s,t)=>s===null?null:K(Math.round(s),0,t);function ya(s){let t=this.getLabels();return s>=0&&s<t.length?t[s]:s}var Os=class extends we{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let i=this.getLabels();for(let{index:n,label:o}of e)i[n]===o&&i.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(I(t))return null;let i=this.getLabels();return e=isFinite(e)&&i[e]===t?e:Rf(i,t,P(e,t),this._addedLabels),Nf(e,i.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:i,max:n}=this.getMinMax(!0);this.options.bounds===\"ticks\"&&(t||(i=0),e||(n=this.getLabels().length-1)),this.min=i,this.max=n}buildTicks(){let t=this.min,e=this.max,i=this.options.offset,n=[],o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let r=t;r<=e;r++)n.push({value:r});return n}getLabelForValue(t){return ya.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return typeof t!=\"number\"&&(t=this.parse(t)),t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};v(Os,\"id\",\"category\"),v(Os,\"defaults\",{ticks:{callback:ya}});function zf(s,t){let e=[],{bounds:n,step:o,min:r,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=s,f=o||1,g=h-1,{min:m,max:p}=t,b=!I(r),y=!I(a),_=!I(c),w=(p-m)/(u+1),x=sn((p-m)/g/f)*f,k,S,M,T;if(x<1e-14&&!b&&!y)return[{value:m},{value:p}];T=Math.ceil(p/x)-Math.floor(m/x),T>g&&(x=sn(T*x/g/f)*f),I(l)||(k=Math.pow(10,l),x=Math.ceil(x*k)/k),n===\"ticks\"?(S=Math.floor(m/x)*x,M=Math.ceil(p/x)*x):(S=m,M=p),b&&y&&o&&or((a-r)/o,x/1e3)?(T=Math.round(Math.min((a-r)/x,h)),x=(a-r)/T,S=r,M=a):_?(S=b?r:S,M=y?a:M,T=c-1,x=(M-S)/T):(T=(M-S)/x,Le(T,Math.round(T),x/1e3)?T=Math.round(T):T=Math.ceil(T));let C=Math.max(on(x),on(S));k=Math.pow(10,I(l)?C:l),S=Math.round(S*k)/k,M=Math.round(M*k)/k;let A=0;for(b&&(d&&S!==r?(e.push({value:r}),S<r&&A++,Le(Math.round((S+A*x)*k)/k,r,xa(r,w,s))&&A++):S<r&&A++);A<T;++A){let L=Math.round((S+A*x)*k)/k;if(y&&L>a)break;e.push({value:L})}return y&&d&&M!==a?e.length&&Le(e[e.length-1].value,a,xa(a,w,s))?e[e.length-1].value=a:e.push({value:a}):(!y||M===a)&&e.push({value:M}),e}function xa(s,t,{horizontal:e,minRotation:i}){let n=bt(i),o=(e?Math.sin(n):Math.cos(n))||.001,r=.75*t*(\"\"+s).length;return Math.min(t/o,r)}var qe=class extends we{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return I(t)||(typeof t==\"number\"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){let{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds(),{min:n,max:o}=this,r=l=>n=e?n:l,a=l=>o=i?o:l;if(t){let l=St(n),c=St(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);a(o+l),t||r(n-l)}this.min=n,this.max=o}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:i}=t,n;return i?(n=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,i=this.getTickLimit();i=Math.max(2,i);let n={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,r=zf(n,o);return t.bounds===\"ticks\"&&nn(r,this,\"value\"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){let t=this.ticks,e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){let n=(i-e)/Math.max(t.length-1,1)/2;e-=n,i+=n}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Re(t,this.chart.options.locale,this.options.ticks.format)}},Ts=class extends qe{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=Z(t)?t:0,this.max=Z(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,i=bt(this.options.ticks.minRotation),n=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};v(Ts,\"id\",\"linear\"),v(Ts,\"defaults\",{ticks:{callback:ms.formatters.numeric}});var Es=s=>Math.floor(Vt(s)),pe=(s,t)=>Math.pow(10,Es(s)+t);function _a(s){return s/Math.pow(10,Es(s))===1}function wa(s,t,e){let i=Math.pow(10,e),n=Math.floor(s/i);return Math.ceil(t/i)-n}function Vf(s,t){let e=t-s,i=Es(e);for(;wa(s,t,i)>10;)i++;for(;wa(s,t,i)<10;)i--;return Math.min(i,Es(s))}function Wf(s,{min:t,max:e}){t=at(s.min,t);let i=[],n=Es(t),o=Vf(t,e),r=o<0?Math.pow(10,Math.abs(o)):1,a=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*r)/r,h=Math.floor((t-l)/a/10)*a*10,u=Math.floor((c-h)/Math.pow(10,o)),d=at(s.min,Math.round((l+h+u*Math.pow(10,o))*r)/r);for(;d<e;)i.push({value:d,major:_a(d),significand:u}),u>=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,r=o>=0?1:r),d=Math.round((l+h+u*Math.pow(10,o))*r)/r;let f=at(s.max,d);return i.push({value:f,major:_a(f),significand:u}),i}var Ds=class extends we{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){let i=qe.prototype.parse.apply(this,[t,e]);if(i===0){this._zero=!0;return}return Z(i)&&i>0?i:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=Z(t)?Math.max(0,t):null,this.max=Z(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Z(this._userMin)&&(this.min=t===pe(this.min,0)?pe(this.min,-1):pe(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),i=this.min,n=this.max,o=a=>i=t?i:a,r=a=>n=e?n:a;i===n&&(i<=0?(o(1),r(10)):(o(pe(i,-1)),r(pe(n,1)))),i<=0&&o(pe(n,-1)),n<=0&&r(pe(i,1)),this.min=i,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},i=Wf(e,this);return t.bounds===\"ticks\"&&nn(i,this,\"value\"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?\"0\":Re(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=Vt(t),this._valueRange=Vt(this.max)-Vt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Vt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};v(Ds,\"id\",\"logarithmic\"),v(Ds,\"defaults\",{ticks:{callback:ms.formatters.logarithmic,major:{enabled:!0}}});function Qn(s){let t=s.ticks;if(t.display&&s.display){let e=nt(t.backdropPadding);return P(t.font&&t.font.size,j.font.size)+e.height}return 0}function Bf(s,t,e){return e=H(e)?e:[e],{w:gr(s,t.string,e),h:e.length*t.lineHeight}}function ka(s,t,e,i,n){return s===i||s===n?{start:t-e/2,end:t+e/2}:s<i||s>n?{start:t-e,end:t}:{start:t,end:t+e}}function Hf(s){let t={l:s.left+s._padding.left,r:s.right-s._padding.right,t:s.top+s._padding.top,b:s.bottom-s._padding.bottom},e=Object.assign({},t),i=[],n=[],o=s._pointLabels.length,r=s.options.pointLabels,a=r.centerPointLabels?F/o:0;for(let l=0;l<o;l++){let c=r.setContext(s.getPointLabelContext(l));n[l]=c.padding;let h=s.getPointPosition(l,s.drawingArea+n[l],a),u=X(c.font),d=Bf(s.ctx,u,s._pointLabels[l]);i[l]=d;let f=st(s.getIndexAngle(l)+a),g=Math.round(si(f)),m=ka(g,h.x,d.w,0,180),p=ka(g,h.y,d.h,90,270);$f(e,t,f,m,p)}s.setCenterPoint(t.l-e.l,e.r-t.r,t.t-e.t,e.b-t.b),s._pointLabelItems=Yf(s,i,n)}function $f(s,t,e,i,n){let o=Math.abs(Math.sin(e)),r=Math.abs(Math.cos(e)),a=0,l=0;i.start<t.l?(a=(t.l-i.start)/o,s.l=Math.min(s.l,t.l-a)):i.end>t.r&&(a=(i.end-t.r)/o,s.r=Math.max(s.r,t.r+a)),n.start<t.t?(l=(t.t-n.start)/r,s.t=Math.min(s.t,t.t-l)):n.end>t.b&&(l=(n.end-t.b)/r,s.b=Math.max(s.b,t.b+l))}function jf(s,t,e){let i=s.drawingArea,{extra:n,additionalAngle:o,padding:r,size:a}=e,l=s.getPointPosition(t,i+n+r,o),c=Math.round(si(st(l.angle+q))),h=Gf(l.y,a.h,c),u=Zf(c),d=qf(l.x,a.w,u);return{visible:!0,x:l.x,y:h,textAlign:u,left:d,top:h,right:d+a.w,bottom:h+a.h}}function Uf(s,t){if(!t)return!0;let{left:e,top:i,right:n,bottom:o}=s;return!(Pt({x:e,y:i},t)||Pt({x:e,y:o},t)||Pt({x:n,y:i},t)||Pt({x:n,y:o},t))}function Yf(s,t,e){let i=[],n=s._pointLabels.length,o=s.options,{centerPointLabels:r,display:a}=o.pointLabels,l={extra:Qn(o)/2,additionalAngle:r?F/n:0},c;for(let h=0;h<n;h++){l.padding=e[h],l.size=t[h];let u=jf(s,h,l);i.push(u),a===\"auto\"&&(u.visible=Uf(u,c),u.visible&&(c=u))}return i}function Zf(s){return s===0||s===180?\"center\":s<180?\"left\":\"right\"}function qf(s,t,e){return e===\"right\"?s-=t:e===\"center\"&&(s-=t/2),s}function Gf(s,t,e){return e===90||e===270?s-=t/2:(e>270||e<90)&&(s-=t),s}function Xf(s,t,e){let{left:i,top:n,right:o,bottom:r}=e,{backdropColor:a}=t;if(!I(a)){let l=te(t.borderRadius),c=nt(t.backdropPadding);s.fillStyle=a;let h=i-c.left,u=n-c.top,d=o-i+c.width,f=r-n+c.height;Object.values(l).some(g=>g!==0)?(s.beginPath(),Ne(s,{x:h,y:u,w:d,h:f,radius:l}),s.fill()):s.fillRect(h,u,d,f)}}function Jf(s,t){let{ctx:e,options:{pointLabels:i}}=s;for(let n=t-1;n>=0;n--){let o=s._pointLabelItems[n];if(!o.visible)continue;let r=i.setContext(s.getPointLabelContext(n));Xf(e,r,o);let a=X(r.font),{x:l,y:c,textAlign:h}=o;Qt(e,s._pointLabels[n],l,c+a.lineHeight/2,a,{color:r.color,textAlign:h,textBaseline:\"middle\"})}}function Za(s,t,e,i){let{ctx:n}=s;if(e)n.arc(s.xCenter,s.yCenter,t,0,$);else{let o=s.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let r=1;r<i;r++)o=s.getPointPosition(r,t),n.lineTo(o.x,o.y)}}function Kf(s,t,e,i,n){let o=s.ctx,r=t.circular,{color:a,lineWidth:l}=t;!r&&!i||!a||!l||e<0||(o.save(),o.strokeStyle=a,o.lineWidth=l,o.setLineDash(n.dash||[]),o.lineDashOffset=n.dashOffset,o.beginPath(),Za(s,e,r,i),o.closePath(),o.stroke(),o.restore())}function Qf(s,t,e){return Bt(s,{label:e,index:t,type:\"pointLabel\"})}var ye=class extends qe{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let t=this._padding=nt(Qn(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!1);this.min=Z(t)&&!isNaN(t)?t:0,this.max=Z(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Qn(this.options))}generateTickLabels(t){qe.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map((e,i)=>{let n=W(this.options.pointLabels.callback,[e,i],this);return n||n===0?n:\"\"}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){let t=this.options;t.display&&t.pointLabels.display?Hf(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,n))}getIndexAngle(t){let e=$/(this._pointLabels.length||1),i=this.options.startAngle||0;return st(t*e+bt(i))}getDistanceFromCenterForValue(t){if(I(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(I(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t<e.length){let i=e[t];return Qf(this.getContext(),t,i)}}getPointPosition(t,e,i=0){let n=this.getIndexAngle(t)-q+i;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter,angle:n}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){let{left:e,top:i,right:n,bottom:o}=this._pointLabelItems[t];return{left:e,top:i,right:n,bottom:o}}drawBackground(){let{backgroundColor:t,grid:{circular:e}}=this.options;if(t){let i=this.ctx;i.save(),i.beginPath(),Za(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){let t=this.ctx,e=this.options,{angleLines:i,grid:n,border:o}=e,r=this._pointLabels.length,a,l,c;if(e.pointLabels.display&&Jf(this,r),n.display&&this.ticks.forEach((h,u)=>{if(u!==0||u===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);let d=this.getContext(u),f=n.setContext(d),g=o.setContext(d);Kf(this,f,l,r,g)}}),i.display){for(t.save(),a=r-1;a>=0;a--){let h=i.setContext(this.getPointLabelContext(a)),{color:u,lineWidth:d}=h;!d||!u||(t.lineWidth=d,t.strokeStyle=u,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(a,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;let n=this.getIndexAngle(0),o,r;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign=\"center\",t.textBaseline=\"middle\",this.ticks.forEach((a,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;let c=i.setContext(this.getContext(l)),h=X(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,r=t.measureText(a.label).width,t.fillStyle=c.backdropColor;let u=nt(c.backdropPadding);t.fillRect(-r/2-u.left,-o-h.size/2-u.top,r+u.width,h.size+u.height)}Qt(t,a.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}};v(ye,\"id\",\"radialLinear\"),v(ye,\"defaults\",{display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:ms.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),v(ye,\"defaultRoutes\",{\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"}),v(ye,\"descriptors\",{angleLines:{_fallback:\"grid\"}});var Ti={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ct=Object.keys(Ti);function va(s,t){return s-t}function Sa(s,t){if(I(t))return null;let e=s._adapter,{parser:i,round:n,isoWeekday:o}=s._parseOpts,r=t;return typeof i==\"function\"&&(r=i(r)),Z(r)||(r=typeof i==\"string\"?e.parse(r,i):e.parse(r)),r===null?null:(n&&(r=n===\"week\"&&(fe(o)||o===!0)?e.startOf(r,\"isoWeek\",o):e.startOf(r,n)),+r)}function Ma(s,t,e,i){let n=ct.length;for(let o=ct.indexOf(s);o<n-1;++o){let r=Ti[ct[o]],a=r.steps?r.steps:Number.MAX_SAFE_INTEGER;if(r.common&&Math.ceil((e-t)/(a*r.size))<=i)return ct[o]}return ct[n-1]}function tg(s,t,e,i,n){for(let o=ct.length-1;o>=ct.indexOf(e);o--){let r=ct[o];if(Ti[r].common&&s._adapter.diff(n,i,r)>=t-1)return r}return ct[e?ct.indexOf(e):0]}function eg(s){for(let t=ct.indexOf(s)+1,e=ct.length;t<e;++t)if(Ti[ct[t]].common)return ct[t]}function Oa(s,t,e){if(!e)s[t]=!0;else if(e.length){let{lo:i,hi:n}=ii(e,t),o=e[i]>=t?e[i]:e[n];s[o]=!0}}function sg(s,t,e,i){let n=s._adapter,o=+n.startOf(t[0].value,i),r=t[t.length-1].value,a,l;for(a=o;a<=r;a=+n.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function Ta(s,t,e){let i=[],n={},o=t.length,r,a;for(r=0;r<o;++r)a=t[r],n[a]=r,i.push({value:a,major:!1});return o===0||!e?i:sg(s,i,n,e)}var _e=class extends we{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){let i=t.time||(t.time={}),n=this._adapter=new to._date(t.adapters.date);n.init(e),Ie(i.displayFormats,n.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return t===void 0?null:Sa(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let t=this.options,e=this._adapter,i=t.time.unit||\"day\",{min:n,max:o,minDefined:r,maxDefined:a}=this.getUserBounds();function l(c){!r&&!isNaN(c.min)&&(n=Math.min(n,c.min)),!a&&!isNaN(c.max)&&(o=Math.max(o,c.max))}(!r||!a)&&(l(this._getLabelBounds()),(t.bounds!==\"ticks\"||t.ticks.source!==\"labels\")&&l(this.getMinMax(!1))),n=Z(n)&&!isNaN(n)?n:+e.startOf(Date.now(),i),o=Z(o)&&!isNaN(o)?o:+e.endOf(Date.now(),i)+1,this.min=Math.min(n,o-1),this.max=Math.max(n+1,o)}_getLabelBounds(){let t=this.getLabelTimestamps(),e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){let t=this.options,e=t.time,i=t.ticks,n=i.source===\"labels\"?this.getLabelTimestamps():this._generate();t.bounds===\"ticks\"&&n.length&&(this.min=this._userMin||n[0],this.max=this._userMax||n[n.length-1]);let o=this.min,r=this.max,a=lr(n,o,r);return this._unit=e.unit||(i.autoSkip?Ma(e.minUnit,this.min,this.max,this._getLabelCapacity(o)):tg(this,a.length,e.minUnit,this.min,this.max)),this._majorUnit=!i.major.enabled||this._unit===\"year\"?void 0:eg(this._unit),this.initOffsets(n),t.reverse&&a.reverse(),Ta(this,a,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(t=>+t.value))}initOffsets(t=[]){let e=0,i=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?i=o:i=(o-this.getDecimalForValue(t[t.length-2]))/2);let r=t.length<3?.5:.25;e=K(e,0,r),i=K(i,0,r),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){let t=this._adapter,e=this.min,i=this.max,n=this.options,o=n.time,r=o.unit||Ma(o.minUnit,e,i,this._getLabelCapacity(e)),a=P(n.ticks.stepSize,1),l=r===\"week\"?o.isoWeekday:!1,c=fe(l)||l===!0,h={},u=e,d,f;if(c&&(u=+t.startOf(u,\"isoWeek\",l)),u=+t.startOf(u,c?\"day\":r),t.diff(i,e,r)>1e5*a)throw new Error(e+\" and \"+i+\" are too far apart with stepSize of \"+a+\" \"+r);let g=n.ticks.source===\"data\"&&this.getDataTimestamps();for(d=u,f=0;d<i;d=+t.add(d,a,r),f++)Oa(h,d,g);return(d===i||n.bounds===\"ticks\"||f===1)&&Oa(h,d,g),Object.keys(h).sort(va).map(m=>+m)}getLabelForValue(t){let e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){let n=this.options.time.displayFormats,o=this._unit,r=e||n[o];return this._adapter.format(t,r)}_tickFormatFunction(t,e,i,n){let o=this.options,r=o.ticks.callback;if(r)return W(r,[t,e,i],this);let a=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&a[l],u=c&&a[c],d=i[e],f=c&&u&&d&&d.major;return this._adapter.format(t,n||(f?u:h))}generateTickLabels(t){let e,i,n;for(e=0,i=t.length;e<i;++e)n=t[e],n.label=this._tickFormatFunction(n.value,e,t)}getDecimalForValue(t){return t===null?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){let e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){let e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){let e=this.options.ticks,i=this.ctx.measureText(t).width,n=bt(this.isHorizontal()?e.maxRotation:e.minRotation),o=Math.cos(n),r=Math.sin(n),a=this._resolveTickFontOptions(0).size;return{w:i*o+a*r,h:i*r+a*o}}_getLabelCapacity(t){let e=this.options.time,i=e.displayFormats,n=i[e.unit]||i.millisecond,o=this._tickFormatFunction(t,0,Ta(this,[t],this._majorUnit),n),r=this._getLabelSize(o),a=Math.floor(this.isHorizontal()?this.width/r.w:this.height/r.h)-1;return a>0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,i=n.length;e<i;++e)t=t.concat(n[e].controller.getAllParsedValues(this));return this._cache.data=this.normalize(t)}getLabelTimestamps(){let t=this._cache.labels||[],e,i;if(t.length)return t;let n=this.getLabels();for(e=0,i=n.length;e<i;++e)t.push(Sa(this,n[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return ln(t.sort(va))}};v(_e,\"id\",\"time\"),v(_e,\"defaults\",{bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",callback:!1,major:{enabled:!1}}});function bi(s,t,e){let i=0,n=s.length-1,o,r,a,l;e?(t>=s[i].pos&&t<=s[n].pos&&({lo:i,hi:n}=Ct(s,\"pos\",t)),{pos:o,time:a}=s[i],{pos:r,time:l}=s[n]):(t>=s[i].time&&t<=s[n].time&&({lo:i,hi:n}=Ct(s,\"time\",t)),{time:o,pos:a}=s[i],{time:r,pos:l}=s[n]);let c=r-o;return c?a+(l-a)*(t-o)/c:a}var Cs=class extends _e{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=bi(e,this.min),this._tableRange=bi(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:i}=this,n=[],o=[],r,a,l,c,h;for(r=0,a=t.length;r<a;++r)c=t[r],c>=e&&c<=i&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(r=0,a=n.length;r<a;++r)h=n[r+1],l=n[r-1],c=n[r],Math.round((h+l)/2)!==c&&o.push({time:c,pos:r/(a-1)});return o}_generate(){let t=this.min,e=this.max,i=super.getDataTimestamps();return(!i.includes(t)||!i.length)&&i.splice(0,0,t),(!i.includes(e)||i.length===1)&&i.push(e),i.sort((n,o)=>n-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;let e=this.getDataTimestamps(),i=this.getLabelTimestamps();return e.length&&i.length?t=this.normalize(e.concat(i)):t=e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(bi(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){let e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return bi(this._table,i*this._tableRange+this._minPos,!0)}};v(Cs,\"id\",\"timeseries\"),v(Cs,\"defaults\",_e.defaults);var ig=Object.freeze({__proto__:null,CategoryScale:Os,LinearScale:Ts,LogarithmicScale:Ds,RadialLinearScale:ye,TimeScale:_e,TimeSeriesScale:Cs}),qa=[gu,zd,Lf,ig];yt.register(...qa);var Mt=yt;var Yt=class extends Error{},ho=class extends Yt{constructor(t){super(`Invalid DateTime: ${t.toMessage()}`)}},uo=class extends Yt{constructor(t){super(`Invalid Interval: ${t.toMessage()}`)}},fo=class extends Yt{constructor(t){super(`Invalid Duration: ${t.toMessage()}`)}},oe=class extends Yt{},Fi=class extends Yt{constructor(t){super(`Invalid unit ${t}`)}},Q=class extends Yt{},Rt=class extends Yt{constructor(){super(\"Zone is an abstract class\")}},O=\"numeric\",Dt=\"short\",mt=\"long\",Ri={year:O,month:O,day:O},Ml={year:O,month:Dt,day:O},ng={year:O,month:Dt,day:O,weekday:Dt},Ol={year:O,month:mt,day:O},Tl={year:O,month:mt,day:O,weekday:mt},Dl={hour:O,minute:O},Cl={hour:O,minute:O,second:O},Pl={hour:O,minute:O,second:O,timeZoneName:Dt},Al={hour:O,minute:O,second:O,timeZoneName:mt},Il={hour:O,minute:O,hourCycle:\"h23\"},El={hour:O,minute:O,second:O,hourCycle:\"h23\"},Ll={hour:O,minute:O,second:O,hourCycle:\"h23\",timeZoneName:Dt},Fl={hour:O,minute:O,second:O,hourCycle:\"h23\",timeZoneName:mt},Rl={year:O,month:O,day:O,hour:O,minute:O},Nl={year:O,month:O,day:O,hour:O,minute:O,second:O},zl={year:O,month:Dt,day:O,hour:O,minute:O},Vl={year:O,month:Dt,day:O,hour:O,minute:O,second:O},og={year:O,month:Dt,day:O,weekday:Dt,hour:O,minute:O},Wl={year:O,month:mt,day:O,hour:O,minute:O,timeZoneName:Dt},Bl={year:O,month:mt,day:O,hour:O,minute:O,second:O,timeZoneName:Dt},Hl={year:O,month:mt,day:O,weekday:mt,hour:O,minute:O,timeZoneName:mt},$l={year:O,month:mt,day:O,weekday:mt,hour:O,minute:O,second:O,timeZoneName:mt},Me=class{get type(){throw new Rt}get name(){throw new Rt}get ianaName(){return this.name}get isUniversal(){throw new Rt}offsetName(t,e){throw new Rt}formatOffset(t,e){throw new Rt}offset(t){throw new Rt}equals(t){throw new Rt}get isValid(){throw new Rt}},eo=null,Ni=class s extends Me{static get instance(){return eo===null&&(eo=new s),eo}get type(){return\"system\"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(t,{format:e,locale:i}){return tc(t,e,i)}formatOffset(t,e){return Vs(this.offset(t),e)}offset(t){return-new Date(t).getTimezoneOffset()}equals(t){return t.type===\"system\"}get isValid(){return!0}},go=new Map;function rg(s){let t=go.get(s);return t===void 0&&(t=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:s,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",era:\"short\"}),go.set(s,t)),t}var ag={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function lg(s,t){let e=s.format(t).replace(/\\u200E/g,\"\"),i=/(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(e),[,n,o,r,a,l,c,h]=i;return[r,n,o,a,l,c,h]}function cg(s,t){let e=s.formatToParts(t),i=[];for(let n=0;n<e.length;n++){let{type:o,value:r}=e[n],a=ag[o];o===\"era\"?i[a]=r:D(a)||(i[a]=parseInt(r,10))}return i}var so=new Map,ae=class s extends Me{static create(t){let e=so.get(t);return e===void 0&&so.set(t,e=new s(t)),e}static resetCache(){so.clear(),go.clear()}static isValidSpecifier(t){return this.isValidZone(t)}static isValidZone(t){if(!t)return!1;try{return new Intl.DateTimeFormat(\"en-US\",{timeZone:t}).format(),!0}catch{return!1}}constructor(t){super(),this.zoneName=t,this.valid=s.isValidZone(t)}get type(){return\"iana\"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(t,{format:e,locale:i}){return tc(t,e,i,this.name)}formatOffset(t,e){return Vs(this.offset(t),e)}offset(t){if(!this.valid)return NaN;let e=new Date(t);if(isNaN(e))return NaN;let i=rg(this.name),[n,o,r,a,l,c,h]=i.formatToParts?cg(i,e):lg(i,e);a===\"BC\"&&(n=-Math.abs(n)+1);let d=$i({year:n,month:o,day:r,hour:l===24?0:l,minute:c,second:h,millisecond:0}),f=+e,g=f%1e3;return f-=g>=0?g:1e3+g,(d-f)/(60*1e3)}equals(t){return t.type===\"iana\"&&t.name===this.name}get isValid(){return this.valid}},Ga={};function hg(s,t={}){let e=JSON.stringify([s,t]),i=Ga[e];return i||(i=new Intl.ListFormat(s,t),Ga[e]=i),i}var mo=new Map;function po(s,t={}){let e=JSON.stringify([s,t]),i=mo.get(e);return i===void 0&&(i=new Intl.DateTimeFormat(s,t),mo.set(e,i)),i}var bo=new Map;function ug(s,t={}){let e=JSON.stringify([s,t]),i=bo.get(e);return i===void 0&&(i=new Intl.NumberFormat(s,t),bo.set(e,i)),i}var yo=new Map;function dg(s,t={}){let{base:e,...i}=t,n=JSON.stringify([s,i]),o=yo.get(n);return o===void 0&&(o=new Intl.RelativeTimeFormat(s,t),yo.set(n,o)),o}var Rs=null;function fg(){return Rs||(Rs=new Intl.DateTimeFormat().resolvedOptions().locale,Rs)}var xo=new Map;function jl(s){let t=xo.get(s);return t===void 0&&(t=new Intl.DateTimeFormat(s).resolvedOptions(),xo.set(s,t)),t}var _o=new Map;function gg(s){let t=_o.get(s);if(!t){let e=new Intl.Locale(s);t=\"getWeekInfo\"in e?e.getWeekInfo():e.weekInfo,\"minimalDays\"in t||(t={...Ul,...t}),_o.set(s,t)}return t}function mg(s){let t=s.indexOf(\"-x-\");t!==-1&&(s=s.substring(0,t));let e=s.indexOf(\"-u-\");if(e===-1)return[s];{let i,n;try{i=po(s).resolvedOptions(),n=s}catch{let l=s.substring(0,e);i=po(l).resolvedOptions(),n=l}let{numberingSystem:o,calendar:r}=i;return[n,o,r]}}function pg(s,t,e){return(e||t)&&(s.includes(\"-u-\")||(s+=\"-u\"),e&&(s+=`-ca-${e}`),t&&(s+=`-nu-${t}`)),s}function bg(s){let t=[];for(let e=1;e<=12;e++){let i=R.utc(2009,e,1);t.push(s(i))}return t}function yg(s){let t=[];for(let e=1;e<=7;e++){let i=R.utc(2016,11,13+e);t.push(s(i))}return t}function Di(s,t,e,i){let n=s.listingMode();return n===\"error\"?null:n===\"en\"?e(t):i(t)}function xg(s){return s.numberingSystem&&s.numberingSystem!==\"latn\"?!1:s.numberingSystem===\"latn\"||!s.locale||s.locale.startsWith(\"en\")||jl(s.locale).numberingSystem===\"latn\"}var wo=class{constructor(t,e,i){this.padTo=i.padTo||0,this.floor=i.floor||!1;let{padTo:n,floor:o,...r}=i;if(!e||Object.keys(r).length>0){let a={useGrouping:!1,...i};i.padTo>0&&(a.minimumIntegerDigits=i.padTo),this.inf=ug(t,a)}}format(t){if(this.inf){let e=this.floor?Math.floor(t):t;return this.inf.format(e)}else{let e=this.floor?Math.floor(t):Eo(t,3);return J(e,this.padTo)}}},ko=class{constructor(t,e,i){this.opts=i,this.originalZone=void 0;let n;if(this.opts.timeZone)this.dt=t;else if(t.zone.type===\"fixed\"){let r=-1*(t.offset/60),a=r>=0?`Etc/GMT+${r}`:`Etc/GMT${r}`;t.offset!==0&&ae.create(a).valid?(n=a,this.dt=t):(n=\"UTC\",this.dt=t.offset===0?t:t.setZone(\"UTC\").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type===\"system\"?this.dt=t:t.zone.type===\"iana\"?(this.dt=t,n=t.zone.name):(n=\"UTC\",this.dt=t.setZone(\"UTC\").plus({minutes:t.offset}),this.originalZone=t.zone);let o={...this.opts};o.timeZone=o.timeZone||n,this.dtf=po(e,o)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(\"\"):this.dtf.format(this.dt.toJSDate())}formatToParts(){let t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(e=>{if(e.type===\"timeZoneName\"){let i=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:i}}else return e}):t}resolvedOptions(){return this.dtf.resolvedOptions()}},vo=class{constructor(t,e,i){this.opts={style:\"long\",...i},!e&&Kl()&&(this.rtf=dg(t,i))}format(t,e){return this.rtf?this.rtf.format(t,e):Wg(e,t,this.opts.numeric,this.opts.style!==\"long\")}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}},Ul={firstDay:1,minimalDays:4,weekend:[6,7]},B=class s{static fromOpts(t){return s.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,i,n,o=!1){let r=t||Y.defaultLocale,a=r||(o?\"en-US\":fg()),l=e||Y.defaultNumberingSystem,c=i||Y.defaultOutputCalendar,h=Oo(n)||Y.defaultWeekSettings;return new s(a,l,c,h,r)}static resetCache(){Rs=null,mo.clear(),bo.clear(),yo.clear(),xo.clear(),_o.clear()}static fromObject({locale:t,numberingSystem:e,outputCalendar:i,weekSettings:n}={}){return s.create(t,e,i,n)}constructor(t,e,i,n,o){let[r,a,l]=mg(t);this.locale=r,this.numberingSystem=e||a||null,this.outputCalendar=i||l||null,this.weekSettings=n,this.intl=pg(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=o,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=xg(this)),this.fastNumbersCached}listingMode(){let t=this.isEnglish(),e=(this.numberingSystem===null||this.numberingSystem===\"latn\")&&(this.outputCalendar===null||this.outputCalendar===\"gregory\");return t&&e?\"en\":\"intl\"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:s.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,Oo(t.weekSettings)||this.weekSettings,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,e=!1){return Di(this,t,ic,()=>{let i=this.intl===\"ja\"||this.intl.startsWith(\"ja-\");e&=!i;let n=e?{month:t,day:\"numeric\"}:{month:t},o=e?\"format\":\"standalone\";if(!this.monthsCache[o][t]){let r=i?a=>this.dtFormatter(a,n).format():a=>this.extract(a,n,\"month\");this.monthsCache[o][t]=bg(r)}return this.monthsCache[o][t]})}weekdays(t,e=!1){return Di(this,t,rc,()=>{let i=e?{weekday:t,year:\"numeric\",month:\"long\",day:\"numeric\"}:{weekday:t},n=e?\"format\":\"standalone\";return this.weekdaysCache[n][t]||(this.weekdaysCache[n][t]=yg(o=>this.extract(o,i,\"weekday\"))),this.weekdaysCache[n][t]})}meridiems(){return Di(this,void 0,()=>ac,()=>{if(!this.meridiemCache){let t={hour:\"numeric\",hourCycle:\"h12\"};this.meridiemCache=[R.utc(2016,11,13,9),R.utc(2016,11,13,19)].map(e=>this.extract(e,t,\"dayperiod\"))}return this.meridiemCache})}eras(t){return Di(this,t,lc,()=>{let e={era:t};return this.eraCache[t]||(this.eraCache[t]=[R.utc(-40,1,1),R.utc(2017,1,1)].map(i=>this.extract(i,e,\"era\"))),this.eraCache[t]})}extract(t,e,i){let n=this.dtFormatter(t,e),o=n.formatToParts(),r=o.find(a=>a.type.toLowerCase()===i);return r?r.value:null}numberFormatter(t={}){return new wo(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,e={}){return new ko(t,this.intl,e)}relFormatter(t={}){return new vo(this.intl,this.isEnglish(),t)}listFormatter(t={}){return hg(this.intl,t)}isEnglish(){return this.locale===\"en\"||this.locale.toLowerCase()===\"en-us\"||jl(this.intl).locale.startsWith(\"en-us\")}getWeekSettings(){return this.weekSettings?this.weekSettings:Ql()?gg(this.locale):Ul}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}},io=null,kt=class s extends Me{static get utcInstance(){return io===null&&(io=new s(0)),io}static instance(t){return t===0?s.utcInstance:new s(t)}static parseSpecifier(t){if(t){let e=t.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);if(e)return new s(ji(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return\"fixed\"}get name(){return this.fixed===0?\"UTC\":`UTC${Vs(this.fixed,\"narrow\")}`}get ianaName(){return this.fixed===0?\"Etc/UTC\":`Etc/GMT${Vs(-this.fixed,\"narrow\")}`}offsetName(){return this.name}formatOffset(t,e){return Vs(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type===\"fixed\"&&t.fixed===this.fixed}get isValid(){return!0}},So=class extends Me{constructor(t){super(),this.zoneName=t}get type(){return\"invalid\"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return\"\"}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function ne(s,t){if(D(s)||s===null)return t;if(s instanceof Me)return s;if(Mg(s)){let e=s.toLowerCase();return e===\"default\"?t:e===\"local\"||e===\"system\"?Ni.instance:e===\"utc\"||e===\"gmt\"?kt.utcInstance:kt.parseSpecifier(e)||ae.create(s)}else return re(s)?kt.instance(s):typeof s==\"object\"&&\"offset\"in s&&typeof s.offset==\"function\"?s:new So(s)}var Co={arab:\"[\\u0660-\\u0669]\",arabext:\"[\\u06F0-\\u06F9]\",bali:\"[\\u1B50-\\u1B59]\",beng:\"[\\u09E6-\\u09EF]\",deva:\"[\\u0966-\\u096F]\",fullwide:\"[\\uFF10-\\uFF19]\",gujr:\"[\\u0AE6-\\u0AEF]\",hanidec:\"[\\u3007|\\u4E00|\\u4E8C|\\u4E09|\\u56DB|\\u4E94|\\u516D|\\u4E03|\\u516B|\\u4E5D]\",khmr:\"[\\u17E0-\\u17E9]\",knda:\"[\\u0CE6-\\u0CEF]\",laoo:\"[\\u0ED0-\\u0ED9]\",limb:\"[\\u1946-\\u194F]\",mlym:\"[\\u0D66-\\u0D6F]\",mong:\"[\\u1810-\\u1819]\",mymr:\"[\\u1040-\\u1049]\",orya:\"[\\u0B66-\\u0B6F]\",tamldec:\"[\\u0BE6-\\u0BEF]\",telu:\"[\\u0C66-\\u0C6F]\",thai:\"[\\u0E50-\\u0E59]\",tibt:\"[\\u0F20-\\u0F29]\",latn:\"\\\\d\"},Xa={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},_g=Co.hanidec.replace(/[\\[|\\]]/g,\"\").split(\"\");function wg(s){let t=parseInt(s,10);if(isNaN(t)){t=\"\";for(let e=0;e<s.length;e++){let i=s.charCodeAt(e);if(s[e].search(Co.hanidec)!==-1)t+=_g.indexOf(s[e]);else for(let n in Xa){let[o,r]=Xa[n];i>=o&&i<=r&&(t+=i-o)}}return parseInt(t,10)}else return t}var Mo=new Map;function kg(){Mo.clear()}function Ot({numberingSystem:s},t=\"\"){let e=s||\"latn\",i=Mo.get(e);i===void 0&&(i=new Map,Mo.set(e,i));let n=i.get(t);return n===void 0&&(n=new RegExp(`${Co[e]}${t}`),i.set(t,n)),n}var Ja=()=>Date.now(),Ka=\"system\",Qa=null,tl=null,el=null,sl=60,il,nl=null,Y=class{static get now(){return Ja}static set now(t){Ja=t}static set defaultZone(t){Ka=t}static get defaultZone(){return ne(Ka,Ni.instance)}static get defaultLocale(){return Qa}static set defaultLocale(t){Qa=t}static get defaultNumberingSystem(){return tl}static set defaultNumberingSystem(t){tl=t}static get defaultOutputCalendar(){return el}static set defaultOutputCalendar(t){el=t}static get defaultWeekSettings(){return nl}static set defaultWeekSettings(t){nl=Oo(t)}static get twoDigitCutoffYear(){return sl}static set twoDigitCutoffYear(t){sl=t%100}static get throwOnInvalid(){return il}static set throwOnInvalid(t){il=t}static resetCaches(){B.resetCache(),ae.resetCache(),R.resetCache(),kg()}},gt=class{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}},Yl=[0,31,59,90,120,151,181,212,243,273,304,334],Zl=[0,31,60,91,121,152,182,213,244,274,305,335];function _t(s,t){return new gt(\"unit out of range\",`you specified ${t} (of type ${typeof t}) as a ${s}, which is invalid`)}function Po(s,t,e){let i=new Date(Date.UTC(s,t-1,e));s<100&&s>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);let n=i.getUTCDay();return n===0?7:n}function ql(s,t,e){return e+(Bs(s)?Zl:Yl)[t-1]}function Gl(s,t){let e=Bs(s)?Zl:Yl,i=e.findIndex(o=>o<t),n=t-e[i];return{month:i+1,day:n}}function Ao(s,t){return(s-t+7)%7+1}function zi(s,t=4,e=1){let{year:i,month:n,day:o}=s,r=ql(i,n,o),a=Ao(Po(i,n,o),e),l=Math.floor((r-a+14-t)/7),c;return l<1?(c=i-1,l=Ws(c,t,e)):l>Ws(i,t,e)?(c=i+1,l=1):c=i,{weekYear:c,weekNumber:l,weekday:a,...Ui(s)}}function ol(s,t=4,e=1){let{weekYear:i,weekNumber:n,weekday:o}=s,r=Ao(Po(i,1,t),e),a=Qe(i),l=n*7+o-r-7+t,c;l<1?(c=i-1,l+=Qe(c)):l>a?(c=i+1,l-=Qe(i)):c=i;let{month:h,day:u}=Gl(c,l);return{year:c,month:h,day:u,...Ui(s)}}function no(s){let{year:t,month:e,day:i}=s,n=ql(t,e,i);return{year:t,ordinal:n,...Ui(s)}}function rl(s){let{year:t,ordinal:e}=s,{month:i,day:n}=Gl(t,e);return{year:t,month:i,day:n,...Ui(s)}}function al(s,t){if(!D(s.localWeekday)||!D(s.localWeekNumber)||!D(s.localWeekYear)){if(!D(s.weekday)||!D(s.weekNumber)||!D(s.weekYear))throw new oe(\"Cannot mix locale-based week fields with ISO-based week fields\");return D(s.localWeekday)||(s.weekday=s.localWeekday),D(s.localWeekNumber)||(s.weekNumber=s.localWeekNumber),D(s.localWeekYear)||(s.weekYear=s.localWeekYear),delete s.localWeekday,delete s.localWeekNumber,delete s.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function vg(s,t=4,e=1){let i=Hi(s.weekYear),n=wt(s.weekNumber,1,Ws(s.weekYear,t,e)),o=wt(s.weekday,1,7);return i?n?o?!1:_t(\"weekday\",s.weekday):_t(\"week\",s.weekNumber):_t(\"weekYear\",s.weekYear)}function Sg(s){let t=Hi(s.year),e=wt(s.ordinal,1,Qe(s.year));return t?e?!1:_t(\"ordinal\",s.ordinal):_t(\"year\",s.year)}function Xl(s){let t=Hi(s.year),e=wt(s.month,1,12),i=wt(s.day,1,Vi(s.year,s.month));return t?e?i?!1:_t(\"day\",s.day):_t(\"month\",s.month):_t(\"year\",s.year)}function Jl(s){let{hour:t,minute:e,second:i,millisecond:n}=s,o=wt(t,0,23)||t===24&&e===0&&i===0&&n===0,r=wt(e,0,59),a=wt(i,0,59),l=wt(n,0,999);return o?r?a?l?!1:_t(\"millisecond\",n):_t(\"second\",i):_t(\"minute\",e):_t(\"hour\",t)}function D(s){return typeof s>\"u\"}function re(s){return typeof s==\"number\"}function Hi(s){return typeof s==\"number\"&&s%1===0}function Mg(s){return typeof s==\"string\"}function Og(s){return Object.prototype.toString.call(s)===\"[object Date]\"}function Kl(){try{return typeof Intl<\"u\"&&!!Intl.RelativeTimeFormat}catch{return!1}}function Ql(){try{return typeof Intl<\"u\"&&!!Intl.Locale&&(\"weekInfo\"in Intl.Locale.prototype||\"getWeekInfo\"in Intl.Locale.prototype)}catch{return!1}}function Tg(s){return Array.isArray(s)?s:[s]}function ll(s,t,e){if(s.length!==0)return s.reduce((i,n)=>{let o=[t(n),n];return i&&e(i[0],o[0])===i[0]?i:o},null)[1]}function Dg(s,t){return t.reduce((e,i)=>(e[i]=s[i],e),{})}function ss(s,t){return Object.prototype.hasOwnProperty.call(s,t)}function Oo(s){if(s==null)return null;if(typeof s!=\"object\")throw new Q(\"Week settings must be an object\");if(!wt(s.firstDay,1,7)||!wt(s.minimalDays,1,7)||!Array.isArray(s.weekend)||s.weekend.some(t=>!wt(t,1,7)))throw new Q(\"Invalid week settings\");return{firstDay:s.firstDay,minimalDays:s.minimalDays,weekend:Array.from(s.weekend)}}function wt(s,t,e){return Hi(s)&&s>=t&&s<=e}function Cg(s,t){return s-t*Math.floor(s/t)}function J(s,t=2){let e=s<0,i;return e?i=\"-\"+(\"\"+-s).padStart(t,\"0\"):i=(\"\"+s).padStart(t,\"0\"),i}function ie(s){if(!(D(s)||s===null||s===\"\"))return parseInt(s,10)}function ke(s){if(!(D(s)||s===null||s===\"\"))return parseFloat(s)}function Io(s){if(!(D(s)||s===null||s===\"\")){let t=parseFloat(\"0.\"+s)*1e3;return Math.floor(t)}}function Eo(s,t,e=\"round\"){let i=10**t;switch(e){case\"expand\":return s>0?Math.ceil(s*i)/i:Math.floor(s*i)/i;case\"trunc\":return Math.trunc(s*i)/i;case\"round\":return Math.round(s*i)/i;case\"floor\":return Math.floor(s*i)/i;case\"ceil\":return Math.ceil(s*i)/i;default:throw new RangeError(`Value rounding ${e} is out of range`)}}function Bs(s){return s%4===0&&(s%100!==0||s%400===0)}function Qe(s){return Bs(s)?366:365}function Vi(s,t){let e=Cg(t-1,12)+1,i=s+(t-e)/12;return e===2?Bs(i)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][e-1]}function $i(s){let t=Date.UTC(s.year,s.month-1,s.day,s.hour,s.minute,s.second,s.millisecond);return s.year<100&&s.year>=0&&(t=new Date(t),t.setUTCFullYear(s.year,s.month-1,s.day)),+t}function cl(s,t,e){return-Ao(Po(s,1,t),e)+t-1}function Ws(s,t=4,e=1){let i=cl(s,t,e),n=cl(s+1,t,e);return(Qe(s)-i+n)/7}function To(s){return s>99?s:s>Y.twoDigitCutoffYear?1900+s:2e3+s}function tc(s,t,e,i=null){let n=new Date(s),o={hourCycle:\"h23\",year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\"};i&&(o.timeZone=i);let r={timeZoneName:t,...o},a=new Intl.DateTimeFormat(e,r).formatToParts(n).find(l=>l.type.toLowerCase()===\"timezonename\");return a?a.value:null}function ji(s,t){let e=parseInt(s,10);Number.isNaN(e)&&(e=0);let i=parseInt(t,10)||0,n=e<0||Object.is(e,-0)?-i:i;return e*60+n}function ec(s){let t=Number(s);if(typeof s==\"boolean\"||s===\"\"||!Number.isFinite(t))throw new Q(`Invalid unit value ${s}`);return t}function Wi(s,t){let e={};for(let i in s)if(ss(s,i)){let n=s[i];if(n==null)continue;e[t(i)]=ec(n)}return e}function Vs(s,t){let e=Math.trunc(Math.abs(s/60)),i=Math.trunc(Math.abs(s%60)),n=s>=0?\"+\":\"-\";switch(t){case\"short\":return`${n}${J(e,2)}:${J(i,2)}`;case\"narrow\":return`${n}${e}${i>0?`:${i}`:\"\"}`;case\"techie\":return`${n}${J(e,2)}${J(i,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function Ui(s){return Dg(s,[\"hour\",\"minute\",\"second\",\"millisecond\"])}var Pg=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],sc=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],Ag=[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"];function ic(s){switch(s){case\"narrow\":return[...Ag];case\"short\":return[...sc];case\"long\":return[...Pg];case\"numeric\":return[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"];case\"2-digit\":return[\"01\",\"02\",\"03\",\"04\",\"05\",\"06\",\"07\",\"08\",\"09\",\"10\",\"11\",\"12\"];default:return null}}var nc=[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"],oc=[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"],Ig=[\"M\",\"T\",\"W\",\"T\",\"F\",\"S\",\"S\"];function rc(s){switch(s){case\"narrow\":return[...Ig];case\"short\":return[...oc];case\"long\":return[...nc];case\"numeric\":return[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\"];default:return null}}var ac=[\"AM\",\"PM\"],Eg=[\"Before Christ\",\"Anno Domini\"],Lg=[\"BC\",\"AD\"],Fg=[\"B\",\"A\"];function lc(s){switch(s){case\"narrow\":return[...Fg];case\"short\":return[...Lg];case\"long\":return[...Eg];default:return null}}function Rg(s){return ac[s.hour<12?0:1]}function Ng(s,t){return rc(t)[s.weekday-1]}function zg(s,t){return ic(t)[s.month-1]}function Vg(s,t){return lc(t)[s.year<0?0:1]}function Wg(s,t,e=\"always\",i=!1){let n={years:[\"year\",\"yr.\"],quarters:[\"quarter\",\"qtr.\"],months:[\"month\",\"mo.\"],weeks:[\"week\",\"wk.\"],days:[\"day\",\"day\",\"days\"],hours:[\"hour\",\"hr.\"],minutes:[\"minute\",\"min.\"],seconds:[\"second\",\"sec.\"]},o=[\"hours\",\"minutes\",\"seconds\"].indexOf(s)===-1;if(e===\"auto\"&&o){let u=s===\"days\";switch(t){case 1:return u?\"tomorrow\":`next ${n[s][0]}`;case-1:return u?\"yesterday\":`last ${n[s][0]}`;case 0:return u?\"today\":`this ${n[s][0]}`}}let r=Object.is(t,-0)||t<0,a=Math.abs(t),l=a===1,c=n[s],h=i?l?c[1]:c[2]||c[1]:l?n[s][0]:s;return r?`${a} ${h} ago`:`in ${a} ${h}`}function hl(s,t){let e=\"\";for(let i of s)i.literal?e+=i.val:e+=t(i.val);return e}var Bg={D:Ri,DD:Ml,DDD:Ol,DDDD:Tl,t:Dl,tt:Cl,ttt:Pl,tttt:Al,T:Il,TT:El,TTT:Ll,TTTT:Fl,f:Rl,ff:zl,fff:Wl,ffff:Hl,F:Nl,FF:Vl,FFF:Bl,FFFF:$l},ft=class s{static create(t,e={}){return new s(t,e)}static parseFormat(t){let e=null,i=\"\",n=!1,o=[];for(let r=0;r<t.length;r++){let a=t.charAt(r);a===\"'\"?((i.length>0||n)&&o.push({literal:n||/^\\s+$/.test(i),val:i===\"\"?\"'\":i}),e=null,i=\"\",n=!n):n||a===e?i+=a:(i.length>0&&o.push({literal:/^\\s+$/.test(i),val:i}),i=a,e=a)}return i.length>0&&o.push({literal:n||/^\\s+$/.test(i),val:i}),o}static macroTokenToFormatOpts(t){return Bg[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t,e={}){return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t,e=0,i=void 0){if(this.opts.forceSimple)return J(t,e);let n={...this.opts};return e>0&&(n.padTo=e),i&&(n.signDisplay=i),this.loc.numberFormatter(n).format(t)}formatDateTimeFromString(t,e){let i=this.loc.listingMode()===\"en\",n=this.loc.outputCalendar&&this.loc.outputCalendar!==\"gregory\",o=(f,g)=>this.loc.extract(t,f,g),r=f=>t.isOffsetFixed&&t.offset===0&&f.allowZ?\"Z\":t.isValid?t.zone.formatOffset(t.ts,f.format):\"\",a=()=>i?Rg(t):o({hour:\"numeric\",hourCycle:\"h12\"},\"dayperiod\"),l=(f,g)=>i?zg(t,f):o(g?{month:f}:{month:f,day:\"numeric\"},\"month\"),c=(f,g)=>i?Ng(t,f):o(g?{weekday:f}:{weekday:f,month:\"long\",day:\"numeric\"},\"weekday\"),h=f=>{let g=s.macroTokenToFormatOpts(f);return g?this.formatWithSystemDefault(t,g):f},u=f=>i?Vg(t,f):o({era:f},\"era\"),d=f=>{switch(f){case\"S\":return this.num(t.millisecond);case\"u\":case\"SSS\":return this.num(t.millisecond,3);case\"s\":return this.num(t.second);case\"ss\":return this.num(t.second,2);case\"uu\":return this.num(Math.floor(t.millisecond/10),2);case\"uuu\":return this.num(Math.floor(t.millisecond/100));case\"m\":return this.num(t.minute);case\"mm\":return this.num(t.minute,2);case\"h\":return this.num(t.hour%12===0?12:t.hour%12);case\"hh\":return this.num(t.hour%12===0?12:t.hour%12,2);case\"H\":return this.num(t.hour);case\"HH\":return this.num(t.hour,2);case\"Z\":return r({format:\"narrow\",allowZ:this.opts.allowZ});case\"ZZ\":return r({format:\"short\",allowZ:this.opts.allowZ});case\"ZZZ\":return r({format:\"techie\",allowZ:this.opts.allowZ});case\"ZZZZ\":return t.zone.offsetName(t.ts,{format:\"short\",locale:this.loc.locale});case\"ZZZZZ\":return t.zone.offsetName(t.ts,{format:\"long\",locale:this.loc.locale});case\"z\":return t.zoneName;case\"a\":return a();case\"d\":return n?o({day:\"numeric\"},\"day\"):this.num(t.day);case\"dd\":return n?o({day:\"2-digit\"},\"day\"):this.num(t.day,2);case\"c\":return this.num(t.weekday);case\"ccc\":return c(\"short\",!0);case\"cccc\":return c(\"long\",!0);case\"ccccc\":return c(\"narrow\",!0);case\"E\":return this.num(t.weekday);case\"EEE\":return c(\"short\",!1);case\"EEEE\":return c(\"long\",!1);case\"EEEEE\":return c(\"narrow\",!1);case\"L\":return n?o({month:\"numeric\",day:\"numeric\"},\"month\"):this.num(t.month);case\"LL\":return n?o({month:\"2-digit\",day:\"numeric\"},\"month\"):this.num(t.month,2);case\"LLL\":return l(\"short\",!0);case\"LLLL\":return l(\"long\",!0);case\"LLLLL\":return l(\"narrow\",!0);case\"M\":return n?o({month:\"numeric\"},\"month\"):this.num(t.month);case\"MM\":return n?o({month:\"2-digit\"},\"month\"):this.num(t.month,2);case\"MMM\":return l(\"short\",!1);case\"MMMM\":return l(\"long\",!1);case\"MMMMM\":return l(\"narrow\",!1);case\"y\":return n?o({year:\"numeric\"},\"year\"):this.num(t.year);case\"yy\":return n?o({year:\"2-digit\"},\"year\"):this.num(t.year.toString().slice(-2),2);case\"yyyy\":return n?o({year:\"numeric\"},\"year\"):this.num(t.year,4);case\"yyyyyy\":return n?o({year:\"numeric\"},\"year\"):this.num(t.year,6);case\"G\":return u(\"short\");case\"GG\":return u(\"long\");case\"GGGGG\":return u(\"narrow\");case\"kk\":return this.num(t.weekYear.toString().slice(-2),2);case\"kkkk\":return this.num(t.weekYear,4);case\"W\":return this.num(t.weekNumber);case\"WW\":return this.num(t.weekNumber,2);case\"n\":return this.num(t.localWeekNumber);case\"nn\":return this.num(t.localWeekNumber,2);case\"ii\":return this.num(t.localWeekYear.toString().slice(-2),2);case\"iiii\":return this.num(t.localWeekYear,4);case\"o\":return this.num(t.ordinal);case\"ooo\":return this.num(t.ordinal,3);case\"q\":return this.num(t.quarter);case\"qq\":return this.num(t.quarter,2);case\"X\":return this.num(Math.floor(t.ts/1e3));case\"x\":return this.num(t.ts);default:return h(f)}};return hl(s.parseFormat(e),d)}formatDurationFromString(t,e){let i=this.opts.signMode===\"negativeLargestOnly\"?-1:1,n=h=>{switch(h[0]){case\"S\":return\"milliseconds\";case\"s\":return\"seconds\";case\"m\":return\"minutes\";case\"h\":return\"hours\";case\"d\":return\"days\";case\"w\":return\"weeks\";case\"M\":return\"months\";case\"y\":return\"years\";default:return null}},o=(h,u)=>d=>{let f=n(d);if(f){let g=u.isNegativeDuration&&f!==u.largestUnit?i:1,m;return this.opts.signMode===\"negativeLargestOnly\"&&f!==u.largestUnit?m=\"never\":this.opts.signMode===\"all\"?m=\"always\":m=\"auto\",this.num(h.get(f)*g,d.length,m)}else return d},r=s.parseFormat(e),a=r.reduce((h,{literal:u,val:d})=>u?h:h.concat(d),[]),l=t.shiftTo(...a.map(n).filter(h=>h)),c={isNegativeDuration:l<0,largestUnit:Object.keys(l.values)[0]};return hl(r,o(l,c))}},cc=/[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;function is(...s){let t=s.reduce((e,i)=>e+i.source,\"\");return RegExp(`^${t}$`)}function ns(...s){return t=>s.reduce(([e,i,n],o)=>{let[r,a,l]=o(t,n);return[{...e,...r},a||i,l]},[{},null,1]).slice(0,2)}function os(s,...t){if(s==null)return[null,null];for(let[e,i]of t){let n=e.exec(s);if(n)return i(n)}return[null,null]}function hc(...s){return(t,e)=>{let i={},n;for(n=0;n<s.length;n++)i[s[n]]=ie(t[e+n]);return[i,null,e+n]}}var uc=/(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/,Hg=`(?:${uc.source}?(?:\\\\[(${cc.source})\\\\])?)?`,Lo=/(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/,dc=RegExp(`${Lo.source}${Hg}`),Fo=RegExp(`(?:[Tt]${dc.source})?`),$g=/([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,jg=/(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,Ug=/(\\d{4})-?(\\d{3})/,Yg=hc(\"weekYear\",\"weekNumber\",\"weekDay\"),Zg=hc(\"year\",\"ordinal\"),qg=/(\\d{4})-(\\d\\d)-(\\d\\d)/,fc=RegExp(`${Lo.source} ?(?:${uc.source}|(${cc.source}))?`),Gg=RegExp(`(?: ${fc.source})?`);function ts(s,t,e){let i=s[t];return D(i)?e:ie(i)}function Xg(s,t){return[{year:ts(s,t),month:ts(s,t+1,1),day:ts(s,t+2,1)},null,t+3]}function rs(s,t){return[{hours:ts(s,t,0),minutes:ts(s,t+1,0),seconds:ts(s,t+2,0),milliseconds:Io(s[t+3])},null,t+4]}function Hs(s,t){let e=!s[t]&&!s[t+1],i=ji(s[t+1],s[t+2]),n=e?null:kt.instance(i);return[{},n,t+3]}function $s(s,t){let e=s[t]?ae.create(s[t]):null;return[{},e,t+1]}var Jg=RegExp(`^T?${Lo.source}$`),Kg=/^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;function Qg(s){let[t,e,i,n,o,r,a,l,c]=s,h=t[0]===\"-\",u=l&&l[0]===\"-\",d=(f,g=!1)=>f!==void 0&&(g||f&&h)?-f:f;return[{years:d(ke(e)),months:d(ke(i)),weeks:d(ke(n)),days:d(ke(o)),hours:d(ke(r)),minutes:d(ke(a)),seconds:d(ke(l),l===\"-0\"),milliseconds:d(Io(c),u)}]}var tm={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Ro(s,t,e,i,n,o,r){let a={year:t.length===2?To(ie(t)):ie(t),month:sc.indexOf(e)+1,day:ie(i),hour:ie(n),minute:ie(o)};return r&&(a.second=ie(r)),s&&(a.weekday=s.length>3?nc.indexOf(s)+1:oc.indexOf(s)+1),a}var em=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;function sm(s){let[,t,e,i,n,o,r,a,l,c,h,u]=s,d=Ro(t,n,i,e,o,r,a),f;return l?f=tm[l]:c?f=0:f=ji(h,u),[d,new kt(f)]}function im(s){return s.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").trim()}var nm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,om=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,rm=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;function ul(s){let[,t,e,i,n,o,r,a]=s;return[Ro(t,n,i,e,o,r,a),kt.utcInstance]}function am(s){let[,t,e,i,n,o,r,a]=s;return[Ro(t,a,e,i,n,o,r),kt.utcInstance]}var lm=is($g,Fo),cm=is(jg,Fo),hm=is(Ug,Fo),um=is(dc),gc=ns(Xg,rs,Hs,$s),dm=ns(Yg,rs,Hs,$s),fm=ns(Zg,rs,Hs,$s),gm=ns(rs,Hs,$s);function mm(s){return os(s,[lm,gc],[cm,dm],[hm,fm],[um,gm])}function pm(s){return os(im(s),[em,sm])}function bm(s){return os(s,[nm,ul],[om,ul],[rm,am])}function ym(s){return os(s,[Kg,Qg])}var xm=ns(rs);function _m(s){return os(s,[Jg,xm])}var wm=is(qg,Gg),km=is(fc),vm=ns(rs,Hs,$s);function Sm(s){return os(s,[wm,gc],[km,vm])}var dl=\"Invalid Duration\",mc={weeks:{days:7,hours:168,minutes:10080,seconds:10080*60,milliseconds:10080*60*1e3},days:{hours:24,minutes:1440,seconds:1440*60,milliseconds:1440*60*1e3},hours:{minutes:60,seconds:3600,milliseconds:3600*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},Mm={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:2184*60,seconds:2184*60*60,milliseconds:2184*60*60*1e3},months:{weeks:4,days:30,hours:720,minutes:720*60,seconds:720*60*60,milliseconds:720*60*60*1e3},...mc},xt=146097/400,Ge=146097/4800,Om={years:{quarters:4,months:12,weeks:xt/7,days:xt,hours:xt*24,minutes:xt*24*60,seconds:xt*24*60*60,milliseconds:xt*24*60*60*1e3},quarters:{months:3,weeks:xt/28,days:xt/4,hours:xt*24/4,minutes:xt*24*60/4,seconds:xt*24*60*60/4,milliseconds:xt*24*60*60*1e3/4},months:{weeks:Ge/7,days:Ge,hours:Ge*24,minutes:Ge*24*60,seconds:Ge*24*60*60,milliseconds:Ge*24*60*60*1e3},...mc},Se=[\"years\",\"quarters\",\"months\",\"weeks\",\"days\",\"hours\",\"minutes\",\"seconds\",\"milliseconds\"],Tm=Se.slice(0).reverse();function Ut(s,t,e=!1){let i={values:e?t.values:{...s.values,...t.values||{}},loc:s.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||s.conversionAccuracy,matrix:t.matrix||s.matrix};return new tt(i)}function pc(s,t){let e=t.milliseconds??0;for(let i of Tm.slice(1))t[i]&&(e+=t[i]*s[i].milliseconds);return e}function fl(s,t){let e=pc(s,t)<0?-1:1;Se.reduceRight((i,n)=>{if(D(t[n]))return i;if(i){let o=t[i]*e,r=s[n][i],a=Math.floor(o/r);t[n]+=a*e,t[i]-=a*r*e}return n},null),Se.reduce((i,n)=>{if(D(t[n]))return i;if(i){let o=t[i]%1;t[i]-=o,t[n]+=o*s[i][n]}return n},null)}function gl(s){let t={};for(let[e,i]of Object.entries(s))i!==0&&(t[e]=i);return t}var tt=class s{constructor(t){let e=t.conversionAccuracy===\"longterm\"||!1,i=e?Om:Mm;t.matrix&&(i=t.matrix),this.values=t.values,this.loc=t.loc||B.create(),this.conversionAccuracy=e?\"longterm\":\"casual\",this.invalid=t.invalid||null,this.matrix=i,this.isLuxonDuration=!0}static fromMillis(t,e){return s.fromObject({milliseconds:t},e)}static fromObject(t,e={}){if(t==null||typeof t!=\"object\")throw new Q(`Duration.fromObject: argument expected to be an object, got ${t===null?\"null\":typeof t}`);return new s({values:Wi(t,s.normalizeUnit),loc:B.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(re(t))return s.fromMillis(t);if(s.isDuration(t))return t;if(typeof t==\"object\")return s.fromObject(t);throw new Q(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,e){let[i]=ym(t);return i?s.fromObject(i,e):s.invalid(\"unparsable\",`the input \"${t}\" can't be parsed as ISO 8601`)}static fromISOTime(t,e){let[i]=_m(t);return i?s.fromObject(i,e):s.invalid(\"unparsable\",`the input \"${t}\" can't be parsed as ISO 8601`)}static invalid(t,e=null){if(!t)throw new Q(\"need to specify a reason the Duration is invalid\");let i=t instanceof gt?t:new gt(t,e);if(Y.throwOnInvalid)throw new fo(i);return new s({invalid:i})}static normalizeUnit(t){let e={year:\"years\",years:\"years\",quarter:\"quarters\",quarters:\"quarters\",month:\"months\",months:\"months\",week:\"weeks\",weeks:\"weeks\",day:\"days\",days:\"days\",hour:\"hours\",hours:\"hours\",minute:\"minutes\",minutes:\"minutes\",second:\"seconds\",seconds:\"seconds\",millisecond:\"milliseconds\",milliseconds:\"milliseconds\"}[t&&t.toLowerCase()];if(!e)throw new Fi(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,e={}){let i={...e,floor:e.round!==!1&&e.floor!==!1};return this.isValid?ft.create(this.loc,i).formatDurationFromString(this,t):dl}toHuman(t={}){if(!this.isValid)return dl;let e=t.showZeros!==!1,i=Se.map(n=>{let o=this.values[n];return D(o)||o===0&&!e?null:this.loc.numberFormatter({style:\"unit\",unitDisplay:\"long\",...t,unit:n.slice(0,-1)}).format(o)}).filter(n=>n);return this.loc.listFormatter({type:\"conjunction\",style:t.listStyle||\"narrow\",...t}).format(i)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t=\"P\";return this.years!==0&&(t+=this.years+\"Y\"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+\"M\"),this.weeks!==0&&(t+=this.weeks+\"W\"),this.days!==0&&(t+=this.days+\"D\"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+=\"T\"),this.hours!==0&&(t+=this.hours+\"H\"),this.minutes!==0&&(t+=this.minutes+\"M\"),(this.seconds!==0||this.milliseconds!==0)&&(t+=Eo(this.seconds+this.milliseconds/1e3,3)+\"S\"),t===\"P\"&&(t+=\"T0S\"),t}toISOTime(t={}){if(!this.isValid)return null;let e=this.toMillis();return e<0||e>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:\"extended\",...t,includeOffset:!1},R.fromMillis(e,{zone:\"UTC\"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for(\"nodejs.util.inspect.custom\")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?pc(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let e=s.fromDurationLike(t),i={};for(let n of Se)(ss(e.values,n)||ss(this.values,n))&&(i[n]=e.get(n)+this.get(n));return Ut(this,{values:i},!0)}minus(t){if(!this.isValid)return this;let e=s.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;let e={};for(let i of Object.keys(this.values))e[i]=ec(t(this.values[i],i));return Ut(this,{values:e},!0)}get(t){return this[s.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let e={...this.values,...Wi(t,s.normalizeUnit)};return Ut(this,{values:e})}reconfigure({locale:t,numberingSystem:e,conversionAccuracy:i,matrix:n}={}){let r={loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:n,conversionAccuracy:i};return Ut(this,r)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;let t=this.toObject();return fl(this.matrix,t),Ut(this,{values:t},!0)}rescale(){if(!this.isValid)return this;let t=gl(this.normalize().shiftToAll().toObject());return Ut(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(r=>s.normalizeUnit(r));let e={},i={},n=this.toObject(),o;for(let r of Se)if(t.indexOf(r)>=0){o=r;let a=0;for(let c in i)a+=this.matrix[c][r]*i[c],i[c]=0;re(n[r])&&(a+=n[r]);let l=Math.trunc(a);e[r]=l,i[r]=(a*1e3-l*1e3)/1e3}else re(n[r])&&(i[r]=n[r]);for(let r in i)i[r]!==0&&(e[o]+=r===o?i[r]:i[r]/this.matrix[o][r]);return fl(this.matrix,e),Ut(this,{values:e},!0)}shiftToAll(){return this.isValid?this.shiftTo(\"years\",\"months\",\"weeks\",\"days\",\"hours\",\"minutes\",\"seconds\",\"milliseconds\"):this}negate(){if(!this.isValid)return this;let t={};for(let e of Object.keys(this.values))t[e]=this.values[e]===0?0:-this.values[e];return Ut(this,{values:t},!0)}removeZeros(){if(!this.isValid)return this;let t=gl(this.values);return Ut(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function e(i,n){return i===void 0||i===0?n===void 0||n===0:i===n}for(let i of Se)if(!e(this.values[i],t.values[i]))return!1;return!0}},Xe=\"Invalid Interval\";function Dm(s,t){return!s||!s.isValid?es.invalid(\"missing or invalid start\"):!t||!t.isValid?es.invalid(\"missing or invalid end\"):t<s?es.invalid(\"end before start\",`The end of an interval must be after its start, but you had start=${s.toISO()} and end=${t.toISO()}`):null}var es=class s{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||null,this.isLuxonInterval=!0}static invalid(t,e=null){if(!t)throw new Q(\"need to specify a reason the Interval is invalid\");let i=t instanceof gt?t:new gt(t,e);if(Y.throwOnInvalid)throw new uo(i);return new s({invalid:i})}static fromDateTimes(t,e){let i=Fs(t),n=Fs(e),o=Dm(i,n);return o??new s({start:i,end:n})}static after(t,e){let i=tt.fromDurationLike(e),n=Fs(t);return s.fromDateTimes(n,n.plus(i))}static before(t,e){let i=tt.fromDurationLike(e),n=Fs(t);return s.fromDateTimes(n.minus(i),n)}static fromISO(t,e){let[i,n]=(t||\"\").split(\"/\",2);if(i&&n){let o,r;try{o=R.fromISO(i,e),r=o.isValid}catch{r=!1}let a,l;try{a=R.fromISO(n,e),l=a.isValid}catch{l=!1}if(r&&l)return s.fromDateTimes(o,a);if(r){let c=tt.fromISO(n,e);if(c.isValid)return s.after(o,c)}else if(l){let c=tt.fromISO(i,e);if(c.isValid)return s.before(a,c)}}return s.invalid(\"unparsable\",`the input \"${t}\" can't be parsed as ISO 8601`)}static isInterval(t){return t&&t.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get lastDateTime(){return this.isValid&&this.e?this.e.minus(1):null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(t=\"milliseconds\"){return this.isValid?this.toDuration(t).get(t):NaN}count(t=\"milliseconds\",e){if(!this.isValid)return NaN;let i=this.start.startOf(t,e),n;return e?.useLocaleWeeks?n=this.end.reconfigure({locale:i.locale}):n=this.end,n=n.startOf(t,e),Math.floor(n.diff(i,t).get(t))+(n.valueOf()!==this.end.valueOf())}hasSame(t){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,t):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(t){return this.isValid?this.s>t:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:e}={}){return this.isValid?s.fromDateTimes(t||this.s,e||this.e):this}splitAt(...t){if(!this.isValid)return[];let e=t.map(Fs).filter(r=>this.contains(r)).sort((r,a)=>r.toMillis()-a.toMillis()),i=[],{s:n}=this,o=0;for(;n<this.e;){let r=e[o]||this.e,a=+r>+this.e?this.e:r;i.push(s.fromDateTimes(n,a)),n=a,o+=1}return i}splitBy(t){let e=tt.fromDurationLike(t);if(!this.isValid||!e.isValid||e.as(\"milliseconds\")===0)return[];let{s:i}=this,n=1,o,r=[];for(;i<this.e;){let a=this.start.plus(e.mapUnits(l=>l*n));o=+a>+this.e?this.e:a,r.push(s.fromDateTimes(i,o)),i=o,n+=1}return r}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s<t.e}abutsStart(t){return this.isValid?+this.e==+t.s:!1}abutsEnd(t){return this.isValid?+t.e==+this.s:!1}engulfs(t){return this.isValid?this.s<=t.s&&this.e>=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;let e=this.s>t.s?this.s:t.s,i=this.e<t.e?this.e:t.e;return e>=i?null:s.fromDateTimes(e,i)}union(t){if(!this.isValid)return this;let e=this.s<t.s?this.s:t.s,i=this.e>t.e?this.e:t.e;return s.fromDateTimes(e,i)}static merge(t){let[e,i]=t.sort((n,o)=>n.s-o.s).reduce(([n,o],r)=>o?o.overlaps(r)||o.abutsStart(r)?[n,o.union(r)]:[n.concat([o]),r]:[n,r],[[],null]);return i&&e.push(i),e}static xor(t){let e=null,i=0,n=[],o=t.map(l=>[{time:l.s,type:\"s\"},{time:l.e,type:\"e\"}]),r=Array.prototype.concat(...o),a=r.sort((l,c)=>l.time-c.time);for(let l of a)i+=l.type===\"s\"?1:-1,i===1?e=l.time:(e&&+e!=+l.time&&n.push(s.fromDateTimes(e,l.time)),e=null);return s.merge(n)}difference(...t){return s.xor([this].concat(t)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \\u2013 ${this.e.toISO()})`:Xe}[Symbol.for(\"nodejs.util.inspect.custom\")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=Ri,e={}){return this.isValid?ft.create(this.s.loc.clone(e),t).formatInterval(this):Xe}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:Xe}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:Xe}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:Xe}toFormat(t,{separator:e=\" \\u2013 \"}={}){return this.isValid?`${this.s.toFormat(t)}${e}${this.e.toFormat(t)}`:Xe}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):tt.invalid(this.invalidReason)}mapEndpoints(t){return s.fromDateTimes(t(this.s),t(this.e))}},Ke=class{static hasDST(t=Y.defaultZone){let e=R.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return ae.isValidZone(t)}static normalizeZone(t){return ne(t,Y.defaultZone)}static getStartOfWeek({locale:t=null,locObj:e=null}={}){return(e||B.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:t=null,locObj:e=null}={}){return(e||B.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:t=null,locObj:e=null}={}){return(e||B.create(t)).getWeekendDays().slice()}static months(t=\"long\",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:o=\"gregory\"}={}){return(n||B.create(e,i,o)).months(t)}static monthsFormat(t=\"long\",{locale:e=null,numberingSystem:i=null,locObj:n=null,outputCalendar:o=\"gregory\"}={}){return(n||B.create(e,i,o)).months(t,!0)}static weekdays(t=\"long\",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||B.create(e,i,null)).weekdays(t)}static weekdaysFormat(t=\"long\",{locale:e=null,numberingSystem:i=null,locObj:n=null}={}){return(n||B.create(e,i,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return B.create(t).meridiems()}static eras(t=\"short\",{locale:e=null}={}){return B.create(e,null,\"gregory\").eras(t)}static features(){return{relative:Kl(),localeWeek:Ql()}}};function ml(s,t){let e=n=>n.toUTC(0,{keepLocalTime:!0}).startOf(\"day\").valueOf(),i=e(t)-e(s);return Math.floor(tt.fromMillis(i).as(\"days\"))}function Cm(s,t,e){let i=[[\"years\",(l,c)=>c.year-l.year],[\"quarters\",(l,c)=>c.quarter-l.quarter+(c.year-l.year)*4],[\"months\",(l,c)=>c.month-l.month+(c.year-l.year)*12],[\"weeks\",(l,c)=>{let h=ml(l,c);return(h-h%7)/7}],[\"days\",ml]],n={},o=s,r,a;for(let[l,c]of i)e.indexOf(l)>=0&&(r=l,n[l]=c(s,t),a=o.plus(n),a>t?(n[l]--,s=o.plus(n),s>t&&(a=s,n[l]--,s=o.plus(n))):s=a);return[s,n,a,r]}function Pm(s,t,e,i){let[n,o,r,a]=Cm(s,t,e),l=t-n,c=e.filter(u=>[\"hours\",\"minutes\",\"seconds\",\"milliseconds\"].indexOf(u)>=0);c.length===0&&(r<t&&(r=n.plus({[a]:1})),r!==n&&(o[a]=(o[a]||0)+l/(r-n)));let h=tt.fromObject(o,i);return c.length>0?tt.fromMillis(l,i).shiftTo(...c).plus(h):h}var Am=\"missing Intl.DateTimeFormat.formatToParts support\";function N(s,t=e=>e){return{regex:s,deser:([e])=>t(wg(e))}}var Im=\"\\xA0\",bc=`[ ${Im}]`,yc=new RegExp(bc,\"g\");function Em(s){return s.replace(/\\./g,\"\\\\.?\").replace(yc,bc)}function pl(s){return s.replace(/\\./g,\"\").replace(yc,\" \").toLowerCase()}function Tt(s,t){return s===null?null:{regex:RegExp(s.map(Em).join(\"|\")),deser:([e])=>s.findIndex(i=>pl(e)===pl(i))+t}}function bl(s,t){return{regex:s,deser:([,e,i])=>ji(e,i),groups:t}}function Ci(s){return{regex:s,deser:([t])=>t}}function Lm(s){return s.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")}function Fm(s,t){let e=Ot(t),i=Ot(t,\"{2}\"),n=Ot(t,\"{3}\"),o=Ot(t,\"{4}\"),r=Ot(t,\"{6}\"),a=Ot(t,\"{1,2}\"),l=Ot(t,\"{1,3}\"),c=Ot(t,\"{1,6}\"),h=Ot(t,\"{1,9}\"),u=Ot(t,\"{2,4}\"),d=Ot(t,\"{4,6}\"),f=p=>({regex:RegExp(Lm(p.val)),deser:([b])=>b,literal:!0}),m=(p=>{if(s.literal)return f(p);switch(p.val){case\"G\":return Tt(t.eras(\"short\"),0);case\"GG\":return Tt(t.eras(\"long\"),0);case\"y\":return N(c);case\"yy\":return N(u,To);case\"yyyy\":return N(o);case\"yyyyy\":return N(d);case\"yyyyyy\":return N(r);case\"M\":return N(a);case\"MM\":return N(i);case\"MMM\":return Tt(t.months(\"short\",!0),1);case\"MMMM\":return Tt(t.months(\"long\",!0),1);case\"L\":return N(a);case\"LL\":return N(i);case\"LLL\":return Tt(t.months(\"short\",!1),1);case\"LLLL\":return Tt(t.months(\"long\",!1),1);case\"d\":return N(a);case\"dd\":return N(i);case\"o\":return N(l);case\"ooo\":return N(n);case\"HH\":return N(i);case\"H\":return N(a);case\"hh\":return N(i);case\"h\":return N(a);case\"mm\":return N(i);case\"m\":return N(a);case\"q\":return N(a);case\"qq\":return N(i);case\"s\":return N(a);case\"ss\":return N(i);case\"S\":return N(l);case\"SSS\":return N(n);case\"u\":return Ci(h);case\"uu\":return Ci(a);case\"uuu\":return N(e);case\"a\":return Tt(t.meridiems(),0);case\"kkkk\":return N(o);case\"kk\":return N(u,To);case\"W\":return N(a);case\"WW\":return N(i);case\"E\":case\"c\":return N(e);case\"EEE\":return Tt(t.weekdays(\"short\",!1),1);case\"EEEE\":return Tt(t.weekdays(\"long\",!1),1);case\"ccc\":return Tt(t.weekdays(\"short\",!0),1);case\"cccc\":return Tt(t.weekdays(\"long\",!0),1);case\"Z\":case\"ZZ\":return bl(new RegExp(`([+-]${a.source})(?::(${i.source}))?`),2);case\"ZZZ\":return bl(new RegExp(`([+-]${a.source})(${i.source})?`),2);case\"z\":return Ci(/[a-z_+-/]{1,256}?/i);case\" \":return Ci(/[^\\S\\n\\r]/);default:return f(p)}})(s)||{invalidReason:Am};return m.token=s,m}var Rm={year:{\"2-digit\":\"yy\",numeric:\"yyyyy\"},month:{numeric:\"M\",\"2-digit\":\"MM\",short:\"MMM\",long:\"MMMM\"},day:{numeric:\"d\",\"2-digit\":\"dd\"},weekday:{short:\"EEE\",long:\"EEEE\"},dayperiod:\"a\",dayPeriod:\"a\",hour12:{numeric:\"h\",\"2-digit\":\"hh\"},hour24:{numeric:\"H\",\"2-digit\":\"HH\"},minute:{numeric:\"m\",\"2-digit\":\"mm\"},second:{numeric:\"s\",\"2-digit\":\"ss\"},timeZoneName:{long:\"ZZZZZ\",short:\"ZZZ\"}};function Nm(s,t,e){let{type:i,value:n}=s;if(i===\"literal\"){let l=/^\\s+$/.test(n);return{literal:!l,val:l?\" \":n}}let o=t[i],r=i;i===\"hour\"&&(t.hour12!=null?r=t.hour12?\"hour12\":\"hour24\":t.hourCycle!=null?t.hourCycle===\"h11\"||t.hourCycle===\"h12\"?r=\"hour12\":r=\"hour24\":r=e.hour12?\"hour12\":\"hour24\");let a=Rm[r];if(typeof a==\"object\"&&(a=a[o]),a)return{literal:!1,val:a}}function zm(s){return[`^${s.map(e=>e.regex).reduce((e,i)=>`${e}(${i.source})`,\"\")}$`,s]}function Vm(s,t,e){let i=s.match(t);if(i){let n={},o=1;for(let r in e)if(ss(e,r)){let a=e[r],l=a.groups?a.groups+1:1;!a.literal&&a.token&&(n[a.token.val[0]]=a.deser(i.slice(o,o+l))),o+=l}return[i,n]}else return[i,{}]}function Wm(s){let t=o=>{switch(o){case\"S\":return\"millisecond\";case\"s\":return\"second\";case\"m\":return\"minute\";case\"h\":case\"H\":return\"hour\";case\"d\":return\"day\";case\"o\":return\"ordinal\";case\"L\":case\"M\":return\"month\";case\"y\":return\"year\";case\"E\":case\"c\":return\"weekday\";case\"W\":return\"weekNumber\";case\"k\":return\"weekYear\";case\"q\":return\"quarter\";default:return null}},e=null,i;return D(s.z)||(e=ae.create(s.z)),D(s.Z)||(e||(e=new kt(s.Z)),i=s.Z),D(s.q)||(s.M=(s.q-1)*3+1),D(s.h)||(s.h<12&&s.a===1?s.h+=12:s.h===12&&s.a===0&&(s.h=0)),s.G===0&&s.y&&(s.y=-s.y),D(s.u)||(s.S=Io(s.u)),[Object.keys(s).reduce((o,r)=>{let a=t(r);return a&&(o[a]=s[r]),o},{}),e,i]}var oo=null;function Bm(){return oo||(oo=R.fromMillis(1555555555555)),oo}function Hm(s,t){if(s.literal)return s;let e=ft.macroTokenToFormatOpts(s.val),i=wc(e,t);return i==null||i.includes(void 0)?s:i}function xc(s,t){return Array.prototype.concat(...s.map(e=>Hm(e,t)))}var Bi=class{constructor(t,e){if(this.locale=t,this.format=e,this.tokens=xc(ft.parseFormat(e),t),this.units=this.tokens.map(i=>Fm(i,t)),this.disqualifyingUnit=this.units.find(i=>i.invalidReason),!this.disqualifyingUnit){let[i,n]=zm(this.units);this.regex=RegExp(i,\"i\"),this.handlers=n}}explainFromTokens(t){if(this.isValid){let[e,i]=Vm(t,this.regex,this.handlers),[n,o,r]=i?Wm(i):[null,null,void 0];if(ss(i,\"a\")&&ss(i,\"H\"))throw new oe(\"Can't include meridiem when specifying 24-hour format\");return{input:t,tokens:this.tokens,regex:this.regex,rawMatches:e,matches:i,result:n,zone:o,specificOffset:r}}else return{input:t,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}};function _c(s,t,e){return new Bi(s,e).explainFromTokens(t)}function $m(s,t,e){let{result:i,zone:n,specificOffset:o,invalidReason:r}=_c(s,t,e);return[i,n,o,r]}function wc(s,t){if(!s)return null;let i=ft.create(t,s).dtFormatter(Bm()),n=i.formatToParts(),o=i.resolvedOptions();return n.map(r=>Nm(r,s,o))}var ro=\"Invalid DateTime\",yl=864e13;function Ns(s){return new gt(\"unsupported zone\",`the zone \"${s.name}\" is not supported`)}function ao(s){return s.weekData===null&&(s.weekData=zi(s.c)),s.weekData}function lo(s){return s.localWeekData===null&&(s.localWeekData=zi(s.c,s.loc.getMinDaysInFirstWeek(),s.loc.getStartOfWeek())),s.localWeekData}function ve(s,t){let e={ts:s.ts,zone:s.zone,c:s.c,o:s.o,loc:s.loc,invalid:s.invalid};return new R({...e,...t,old:e})}function kc(s,t,e){let i=s-t*60*1e3,n=e.offset(i);if(t===n)return[i,t];i-=(n-t)*60*1e3;let o=e.offset(i);return n===o?[i,n]:[s-Math.min(n,o)*60*1e3,Math.max(n,o)]}function Pi(s,t){s+=t*60*1e3;let e=new Date(s);return{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate(),hour:e.getUTCHours(),minute:e.getUTCMinutes(),second:e.getUTCSeconds(),millisecond:e.getUTCMilliseconds()}}function Ii(s,t,e){return kc($i(s),t,e)}function xl(s,t){let e=s.o,i=s.c.year+Math.trunc(t.years),n=s.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,o={...s.c,year:i,month:n,day:Math.min(s.c.day,Vi(i,n))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},r=tt.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as(\"milliseconds\"),a=$i(o),[l,c]=kc(a,e,s.zone);return r!==0&&(l+=r,c=s.zone.offset(l)),{ts:l,o:c}}function Je(s,t,e,i,n,o){let{setZone:r,zone:a}=e;if(s&&Object.keys(s).length!==0||t){let l=t||a,c=R.fromObject(s,{...e,zone:l,specificOffset:o});return r?c:c.setZone(a)}else return R.invalid(new gt(\"unparsable\",`the input \"${n}\" can't be parsed as ${i}`))}function Ai(s,t,e=!0){return s.isValid?ft.create(B.create(\"en-US\"),{allowZ:e,forceSimple:!0}).formatDateTimeFromString(s,t):null}function co(s,t,e){let i=s.c.year>9999||s.c.year<0,n=\"\";if(i&&s.c.year>=0&&(n+=\"+\"),n+=J(s.c.year,i?6:4),e===\"year\")return n;if(t){if(n+=\"-\",n+=J(s.c.month),e===\"month\")return n;n+=\"-\"}else if(n+=J(s.c.month),e===\"month\")return n;return n+=J(s.c.day),n}function _l(s,t,e,i,n,o,r){let a=!e||s.c.millisecond!==0||s.c.second!==0,l=\"\";switch(r){case\"day\":case\"month\":case\"year\":break;default:if(l+=J(s.c.hour),r===\"hour\")break;if(t){if(l+=\":\",l+=J(s.c.minute),r===\"minute\")break;a&&(l+=\":\",l+=J(s.c.second))}else{if(l+=J(s.c.minute),r===\"minute\")break;a&&(l+=J(s.c.second))}if(r===\"second\")break;a&&(!i||s.c.millisecond!==0)&&(l+=\".\",l+=J(s.c.millisecond,3))}return n&&(s.isOffsetFixed&&s.offset===0&&!o?l+=\"Z\":s.o<0?(l+=\"-\",l+=J(Math.trunc(-s.o/60)),l+=\":\",l+=J(Math.trunc(-s.o%60))):(l+=\"+\",l+=J(Math.trunc(s.o/60)),l+=\":\",l+=J(Math.trunc(s.o%60)))),o&&(l+=\"[\"+s.zone.ianaName+\"]\"),l}var vc={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},jm={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},Um={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Ei=[\"year\",\"month\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"],Ym=[\"weekYear\",\"weekNumber\",\"weekday\",\"hour\",\"minute\",\"second\",\"millisecond\"],Zm=[\"year\",\"ordinal\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Li(s){let t={year:\"year\",years:\"year\",month:\"month\",months:\"month\",day:\"day\",days:\"day\",hour:\"hour\",hours:\"hour\",minute:\"minute\",minutes:\"minute\",quarter:\"quarter\",quarters:\"quarter\",second:\"second\",seconds:\"second\",millisecond:\"millisecond\",milliseconds:\"millisecond\",weekday:\"weekday\",weekdays:\"weekday\",weeknumber:\"weekNumber\",weeksnumber:\"weekNumber\",weeknumbers:\"weekNumber\",weekyear:\"weekYear\",weekyears:\"weekYear\",ordinal:\"ordinal\"}[s.toLowerCase()];if(!t)throw new Fi(s);return t}function wl(s){switch(s.toLowerCase()){case\"localweekday\":case\"localweekdays\":return\"localWeekday\";case\"localweeknumber\":case\"localweeknumbers\":return\"localWeekNumber\";case\"localweekyear\":case\"localweekyears\":return\"localWeekYear\";default:return Li(s)}}function qm(s){if(zs===void 0&&(zs=Y.now()),s.type!==\"iana\")return s.offset(zs);let t=s.name,e=Do.get(t);return e===void 0&&(e=s.offset(zs),Do.set(t,e)),e}function kl(s,t){let e=ne(t.zone,Y.defaultZone);if(!e.isValid)return R.invalid(Ns(e));let i=B.fromObject(t),n,o;if(D(s.year))n=Y.now();else{for(let l of Ei)D(s[l])&&(s[l]=vc[l]);let r=Xl(s)||Jl(s);if(r)return R.invalid(r);let a=qm(e);[n,o]=Ii(s,a,e)}return new R({ts:n,zone:e,loc:i,o})}function vl(s,t,e){let i=D(e.round)?!0:e.round,n=D(e.rounding)?\"trunc\":e.rounding,o=(a,l)=>(a=Eo(a,i||e.calendary?0:2,e.calendary?\"round\":n),t.loc.clone(e).relFormatter(e).format(a,l)),r=a=>e.calendary?t.hasSame(s,a)?0:t.startOf(a).diff(s.startOf(a),a).get(a):t.diff(s,a).get(a);if(e.unit)return o(r(e.unit),e.unit);for(let a of e.units){let l=r(a);if(Math.abs(l)>=1)return o(l,a)}return o(s>t?-0:0,e.units[e.units.length-1])}function Sl(s){let t={},e;return s.length>0&&typeof s[s.length-1]==\"object\"?(t=s[s.length-1],e=Array.from(s).slice(0,s.length-1)):e=Array.from(s),[t,e]}var zs,Do=new Map,R=class s{constructor(t){let e=t.zone||Y.defaultZone,i=t.invalid||(Number.isNaN(t.ts)?new gt(\"invalid input\"):null)||(e.isValid?null:Ns(e));this.ts=D(t.ts)?Y.now():t.ts;let n=null,o=null;if(!i)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[n,o]=[t.old.c,t.old.o];else{let a=re(t.o)&&!t.old?t.o:e.offset(this.ts);n=Pi(this.ts,a),i=Number.isNaN(n.year)?new gt(\"invalid input\"):null,n=i?null:n,o=i?null:a}this._zone=e,this.loc=t.loc||B.create(),this.invalid=i,this.weekData=null,this.localWeekData=null,this.c=n,this.o=o,this.isLuxonDateTime=!0}static now(){return new s({})}static local(){let[t,e]=Sl(arguments),[i,n,o,r,a,l,c]=e;return kl({year:i,month:n,day:o,hour:r,minute:a,second:l,millisecond:c},t)}static utc(){let[t,e]=Sl(arguments),[i,n,o,r,a,l,c]=e;return t.zone=kt.utcInstance,kl({year:i,month:n,day:o,hour:r,minute:a,second:l,millisecond:c},t)}static fromJSDate(t,e={}){let i=Og(t)?t.valueOf():NaN;if(Number.isNaN(i))return s.invalid(\"invalid input\");let n=ne(e.zone,Y.defaultZone);return n.isValid?new s({ts:i,zone:n,loc:B.fromObject(e)}):s.invalid(Ns(n))}static fromMillis(t,e={}){if(re(t))return t<-yl||t>yl?s.invalid(\"Timestamp out of range\"):new s({ts:t,zone:ne(e.zone,Y.defaultZone),loc:B.fromObject(e)});throw new Q(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,e={}){if(re(t))return new s({ts:t*1e3,zone:ne(e.zone,Y.defaultZone),loc:B.fromObject(e)});throw new Q(\"fromSeconds requires a numerical input\")}static fromObject(t,e={}){t=t||{};let i=ne(e.zone,Y.defaultZone);if(!i.isValid)return s.invalid(Ns(i));let n=B.fromObject(e),o=Wi(t,wl),{minDaysInFirstWeek:r,startOfWeek:a}=al(o,n),l=Y.now(),c=D(e.specificOffset)?i.offset(l):e.specificOffset,h=!D(o.ordinal),u=!D(o.year),d=!D(o.month)||!D(o.day),f=u||d,g=o.weekYear||o.weekNumber;if((f||h)&&g)throw new oe(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");if(d&&h)throw new oe(\"Can't mix ordinal dates with month/day\");let m=g||o.weekday&&!f,p,b,y=Pi(l,c);m?(p=Ym,b=jm,y=zi(y,r,a)):h?(p=Zm,b=Um,y=no(y)):(p=Ei,b=vc);let _=!1;for(let C of p){let A=o[C];D(A)?_?o[C]=b[C]:o[C]=y[C]:_=!0}let w=m?vg(o,r,a):h?Sg(o):Xl(o),x=w||Jl(o);if(x)return s.invalid(x);let k=m?ol(o,r,a):h?rl(o):o,[S,M]=Ii(k,c,i),T=new s({ts:S,zone:i,o:M,loc:n});return o.weekday&&f&&t.weekday!==T.weekday?s.invalid(\"mismatched weekday\",`you can't specify both a weekday of ${o.weekday} and a date of ${T.toISO()}`):T.isValid?T:s.invalid(T.invalid)}static fromISO(t,e={}){let[i,n]=mm(t);return Je(i,n,e,\"ISO 8601\",t)}static fromRFC2822(t,e={}){let[i,n]=pm(t);return Je(i,n,e,\"RFC 2822\",t)}static fromHTTP(t,e={}){let[i,n]=bm(t);return Je(i,n,e,\"HTTP\",e)}static fromFormat(t,e,i={}){if(D(t)||D(e))throw new Q(\"fromFormat requires an input string and a format\");let{locale:n=null,numberingSystem:o=null}=i,r=B.fromOpts({locale:n,numberingSystem:o,defaultToEN:!0}),[a,l,c,h]=$m(r,t,e);return h?s.invalid(h):Je(a,l,i,`format ${e}`,t,c)}static fromString(t,e,i={}){return s.fromFormat(t,e,i)}static fromSQL(t,e={}){let[i,n]=Sm(t);return Je(i,n,e,\"SQL\",t)}static invalid(t,e=null){if(!t)throw new Q(\"need to specify a reason the DateTime is invalid\");let i=t instanceof gt?t:new gt(t,e);if(Y.throwOnInvalid)throw new ho(i);return new s({invalid:i})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,e={}){let i=wc(t,B.fromObject(e));return i?i.map(n=>n?n.val:null).join(\"\"):null}static expandFormat(t,e={}){return xc(ft.parseFormat(t),B.fromObject(e)).map(n=>n.val).join(\"\")}static resetCache(){zs=void 0,Do.clear()}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?ao(this).weekYear:NaN}get weekNumber(){return this.isValid?ao(this).weekNumber:NaN}get weekday(){return this.isValid?ao(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?lo(this).weekday:NaN}get localWeekNumber(){return this.isValid?lo(this).weekNumber:NaN}get localWeekYear(){return this.isValid?lo(this).weekYear:NaN}get ordinal(){return this.isValid?no(this.c).ordinal:NaN}get monthShort(){return this.isValid?Ke.months(\"short\",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Ke.months(\"long\",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Ke.weekdays(\"short\",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Ke.weekdays(\"long\",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:\"short\",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:\"long\",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let t=864e5,e=6e4,i=$i(this.c),n=this.zone.offset(i-t),o=this.zone.offset(i+t),r=this.zone.offset(i-n*e),a=this.zone.offset(i-o*e);if(r===a)return[this];let l=i-r*e,c=i-a*e,h=Pi(l,r),u=Pi(c,a);return h.hour===u.hour&&h.minute===u.minute&&h.second===u.second&&h.millisecond===u.millisecond?[ve(this,{ts:l}),ve(this,{ts:c})]:[this]}get isInLeapYear(){return Bs(this.year)}get daysInMonth(){return Vi(this.year,this.month)}get daysInYear(){return this.isValid?Qe(this.year):NaN}get weeksInWeekYear(){return this.isValid?Ws(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?Ws(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(t={}){let{locale:e,numberingSystem:i,calendar:n}=ft.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:i,outputCalendar:n}}toUTC(t=0,e={}){return this.setZone(kt.instance(t),e)}toLocal(){return this.setZone(Y.defaultZone)}setZone(t,{keepLocalTime:e=!1,keepCalendarTime:i=!1}={}){if(t=ne(t,Y.defaultZone),t.equals(this.zone))return this;if(t.isValid){let n=this.ts;if(e||i){let o=t.offset(this.ts),r=this.toObject();[n]=Ii(r,o,t)}return ve(this,{ts:n,zone:t})}else return s.invalid(Ns(t))}reconfigure({locale:t,numberingSystem:e,outputCalendar:i}={}){let n=this.loc.clone({locale:t,numberingSystem:e,outputCalendar:i});return ve(this,{loc:n})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;let e=Wi(t,wl),{minDaysInFirstWeek:i,startOfWeek:n}=al(e,this.loc),o=!D(e.weekYear)||!D(e.weekNumber)||!D(e.weekday),r=!D(e.ordinal),a=!D(e.year),l=!D(e.month)||!D(e.day),c=a||l,h=e.weekYear||e.weekNumber;if((c||r)&&h)throw new oe(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");if(l&&r)throw new oe(\"Can't mix ordinal dates with month/day\");let u;o?u=ol({...zi(this.c,i,n),...e},i,n):D(e.ordinal)?(u={...this.toObject(),...e},D(e.day)&&(u.day=Math.min(Vi(u.year,u.month),u.day))):u=rl({...no(this.c),...e});let[d,f]=Ii(u,this.o,this.zone);return ve(this,{ts:d,o:f})}plus(t){if(!this.isValid)return this;let e=tt.fromDurationLike(t);return ve(this,xl(this,e))}minus(t){if(!this.isValid)return this;let e=tt.fromDurationLike(t).negate();return ve(this,xl(this,e))}startOf(t,{useLocaleWeeks:e=!1}={}){if(!this.isValid)return this;let i={},n=tt.normalizeUnit(t);switch(n){case\"years\":i.month=1;case\"quarters\":case\"months\":i.day=1;case\"weeks\":case\"days\":i.hour=0;case\"hours\":i.minute=0;case\"minutes\":i.second=0;case\"seconds\":i.millisecond=0;break}if(n===\"weeks\")if(e){let o=this.loc.getStartOfWeek(),{weekday:r}=this;r<o&&(i.weekNumber=this.weekNumber-1),i.weekday=o}else i.weekday=1;if(n===\"quarters\"){let o=Math.ceil(this.month/3);i.month=(o-1)*3+1}return this.set(i)}endOf(t,e){return this.isValid?this.plus({[t]:1}).startOf(t,e).minus(1):this}toFormat(t,e={}){return this.isValid?ft.create(this.loc.redefaultToEN(e)).formatDateTimeFromString(this,t):ro}toLocaleString(t=Ri,e={}){return this.isValid?ft.create(this.loc.clone(e),t).formatDateTime(this):ro}toLocaleParts(t={}){return this.isValid?ft.create(this.loc.clone(t),t).formatDateTimeParts(this):[]}toISO({format:t=\"extended\",suppressSeconds:e=!1,suppressMilliseconds:i=!1,includeOffset:n=!0,extendedZone:o=!1,precision:r=\"milliseconds\"}={}){if(!this.isValid)return null;r=Li(r);let a=t===\"extended\",l=co(this,a,r);return Ei.indexOf(r)>=3&&(l+=\"T\"),l+=_l(this,a,e,i,n,o,r),l}toISODate({format:t=\"extended\",precision:e=\"day\"}={}){return this.isValid?co(this,t===\"extended\",Li(e)):null}toISOWeekDate(){return Ai(this,\"kkkk-'W'WW-c\")}toISOTime({suppressMilliseconds:t=!1,suppressSeconds:e=!1,includeOffset:i=!0,includePrefix:n=!1,extendedZone:o=!1,format:r=\"extended\",precision:a=\"milliseconds\"}={}){return this.isValid?(a=Li(a),(n&&Ei.indexOf(a)>=3?\"T\":\"\")+_l(this,r===\"extended\",e,t,i,o,a)):null}toRFC2822(){return Ai(this,\"EEE, dd LLL yyyy HH:mm:ss ZZZ\",!1)}toHTTP(){return Ai(this.toUTC(),\"EEE, dd LLL yyyy HH:mm:ss 'GMT'\")}toSQLDate(){return this.isValid?co(this,!0):null}toSQLTime({includeOffset:t=!0,includeZone:e=!1,includeOffsetSpace:i=!0}={}){let n=\"HH:mm:ss.SSS\";return(e||t)&&(i&&(n+=\" \"),e?n+=\"z\":t&&(n+=\"ZZ\")),Ai(this,n,!0)}toSQL(t={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(t)}`:null}toString(){return this.isValid?this.toISO():ro}[Symbol.for(\"nodejs.util.inspect.custom\")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(t={}){if(!this.isValid)return{};let e={...this.c};return t.includeConfig&&(e.outputCalendar=this.outputCalendar,e.numberingSystem=this.loc.numberingSystem,e.locale=this.loc.locale),e}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(t,e=\"milliseconds\",i={}){if(!this.isValid||!t.isValid)return tt.invalid(\"created by diffing an invalid DateTime\");let n={locale:this.locale,numberingSystem:this.numberingSystem,...i},o=Tg(e).map(tt.normalizeUnit),r=t.valueOf()>this.valueOf(),a=r?this:t,l=r?t:this,c=Pm(a,l,o,n);return r?c.negate():c}diffNow(t=\"milliseconds\",e={}){return this.diff(s.now(),t,e)}until(t){return this.isValid?es.fromDateTimes(this,t):this}hasSame(t,e,i){if(!this.isValid)return!1;let n=t.valueOf(),o=this.setZone(t.zone,{keepLocalTime:!0});return o.startOf(e,i)<=n&&n<=o.endOf(e,i)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;let e=t.base||s.fromObject({},{zone:this.zone}),i=t.padding?this<e?-t.padding:t.padding:0,n=[\"years\",\"months\",\"days\",\"hours\",\"minutes\",\"seconds\"],o=t.unit;return Array.isArray(t.unit)&&(n=t.unit,o=void 0),vl(e,this.plus(i),{...t,numeric:\"always\",units:n,unit:o})}toRelativeCalendar(t={}){return this.isValid?vl(t.base||s.fromObject({},{zone:this.zone}),this,{...t,numeric:\"auto\",units:[\"years\",\"months\",\"days\"],calendary:!0}):null}static min(...t){if(!t.every(s.isDateTime))throw new Q(\"min requires all arguments be DateTimes\");return ll(t,e=>e.valueOf(),Math.min)}static max(...t){if(!t.every(s.isDateTime))throw new Q(\"max requires all arguments be DateTimes\");return ll(t,e=>e.valueOf(),Math.max)}static fromFormatExplain(t,e,i={}){let{locale:n=null,numberingSystem:o=null}=i,r=B.fromOpts({locale:n,numberingSystem:o,defaultToEN:!0});return _c(r,t,e)}static fromStringExplain(t,e,i={}){return s.fromFormatExplain(t,e,i)}static buildFormatParser(t,e={}){let{locale:i=null,numberingSystem:n=null}=e,o=B.fromOpts({locale:i,numberingSystem:n,defaultToEN:!0});return new Bi(o,t)}static fromFormatParser(t,e,i={}){if(D(t)||D(e))throw new Q(\"fromFormatParser requires an input string and a format parser\");let{locale:n=null,numberingSystem:o=null}=i,r=B.fromOpts({locale:n,numberingSystem:o,defaultToEN:!0});if(!r.equals(e.locale))throw new Q(`fromFormatParser called with a locale of ${r}, but the format parser was created for ${e.locale}`);let{result:a,zone:l,specificOffset:c,invalidReason:h}=e.explainFromTokens(t);return h?s.invalid(h):Je(a,l,i,`format ${e.format}`,t,c)}static get DATE_SHORT(){return Ri}static get DATE_MED(){return Ml}static get DATE_MED_WITH_WEEKDAY(){return ng}static get DATE_FULL(){return Ol}static get DATE_HUGE(){return Tl}static get TIME_SIMPLE(){return Dl}static get TIME_WITH_SECONDS(){return Cl}static get TIME_WITH_SHORT_OFFSET(){return Pl}static get TIME_WITH_LONG_OFFSET(){return Al}static get TIME_24_SIMPLE(){return Il}static get TIME_24_WITH_SECONDS(){return El}static get TIME_24_WITH_SHORT_OFFSET(){return Ll}static get TIME_24_WITH_LONG_OFFSET(){return Fl}static get DATETIME_SHORT(){return Rl}static get DATETIME_SHORT_WITH_SECONDS(){return Nl}static get DATETIME_MED(){return zl}static get DATETIME_MED_WITH_SECONDS(){return Vl}static get DATETIME_MED_WITH_WEEKDAY(){return og}static get DATETIME_FULL(){return Wl}static get DATETIME_FULL_WITH_SECONDS(){return Bl}static get DATETIME_HUGE(){return Hl}static get DATETIME_HUGE_WITH_SECONDS(){return $l}};function Fs(s){if(R.isDateTime(s))return s;if(s&&s.valueOf&&re(s.valueOf()))return R.fromJSDate(s);if(s&&typeof s==\"object\")return R.fromObject(s);throw new Q(`Unknown datetime argument: ${s}, of type ${typeof s}`)}var Gm={datetime:R.DATETIME_MED_WITH_SECONDS,millisecond:\"h:mm:ss.SSS a\",second:R.TIME_WITH_SECONDS,minute:R.TIME_SIMPLE,hour:{hour:\"numeric\"},day:{day:\"numeric\",month:\"short\"},week:\"DD\",month:{month:\"short\",year:\"numeric\"},quarter:\"'Q'q - yyyy\",year:{year:\"numeric\"}};to._date.override({_id:\"luxon\",_create:function(s){return R.fromMillis(s,this.options)},init(s){this.options.locale||(this.options.locale=s.locale)},formats:function(){return Gm},parse:function(s,t){let e=this.options,i=typeof s;return s===null||i===\"undefined\"?null:(i===\"number\"?s=this._create(s):i===\"string\"?typeof t==\"string\"?s=R.fromFormat(s,t,e):s=R.fromISO(s,e):s instanceof Date?s=R.fromJSDate(s,e):i===\"object\"&&!(s instanceof R)&&(s=R.fromObject(s,e)),s.isValid?s.valueOf():null)},format:function(s,t){let e=this._create(s);return typeof t==\"string\"?e.toFormat(t):e.toLocaleString(t)},add:function(s,t,e){let i={};return i[e]=t,this._create(s).plus(i).valueOf()},diff:function(s,t,e){return this._create(s).diff(this._create(t)).as(e).valueOf()},startOf:function(s,t,e){if(t===\"isoWeek\"){e=Math.trunc(Math.min(Math.max(0,e),6));let i=this._create(s);return i.minus({days:(i.weekday-e+7)%7}).startOf(\"day\").valueOf()}return t?this._create(s).startOf(t).valueOf():s},endOf:function(s,t){return this._create(s).endOf(t).valueOf()}});window.filamentChartJsGlobalPlugins&&Array.isArray(window.filamentChartJsGlobalPlugins)&&window.filamentChartJsGlobalPlugins.length>0&&Mt.register(...window.filamentChartJsGlobalPlugins);function Xm({cachedData:s,maxHeight:t,options:e,type:i}){return{userPointBackgroundColor:e?.pointBackgroundColor,userXGridColor:e?.scales?.x?.grid?.color,userYGridColor:e?.scales?.y?.grid?.color,userRadialGridColor:e?.scales?.r?.grid?.color,userRadialTicksColor:e?.scales?.r?.ticks?.color,init(){this.initChart(),this.$wire.$on(\"updateChartData\",({data:n})=>{let o=this.getChart();o&&(s=n,o.data=n,o.update(\"resize\"))}),Alpine.effect(()=>{Alpine.store(\"theme\"),this.$nextTick(()=>{let n=this.getChart();n&&(n.destroy(),this.initChart())})}),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",()=>{Alpine.store(\"theme\")===\"system\"&&this.$nextTick(()=>{let n=this.getChart();n&&(n.destroy(),this.initChart())})}),this.resizeObserver=new ResizeObserver(Alpine.debounce(()=>{let n=this.getChart();n&&(n.destroy(),this.initChart())},250)),this.resizeObserver.observe(this.$el)},initChart(n=null){var a,l,c,h,u,d,f,g,m,p,b,y,_,w,x,k;if(!this.$refs.canvas||!this.$refs.backgroundColorElement||!this.$refs.borderColorElement||!this.$refs.textColorElement||!this.$refs.gridColorElement)return;Mt.defaults.animation.duration=0,Mt.defaults.backgroundColor=getComputedStyle(this.$refs.backgroundColorElement).color;let o=getComputedStyle(this.$refs.borderColorElement).color;Mt.defaults.borderColor=o,Mt.defaults.color=getComputedStyle(this.$refs.textColorElement).color,Mt.defaults.font.family=getComputedStyle(this.$el).fontFamily,Mt.defaults.plugins.legend.labels.boxWidth=12,Mt.defaults.plugins.legend.position=\"bottom\";let r=getComputedStyle(this.$refs.gridColorElement).color;if(e??(e={}),e.borderWidth??(e.borderWidth=2),e.maintainAspectRatio??(e.maintainAspectRatio=!!t),e.pointBackgroundColor=this.userPointBackgroundColor??o,e.pointHitRadius??(e.pointHitRadius=4),e.pointRadius??(e.pointRadius=2),e.scales??(e.scales={}),(a=e.scales).x??(a.x={}),(l=e.scales.x).border??(l.border={}),(c=e.scales.x.border).display??(c.display=!1),(h=e.scales.x).grid??(h.grid={}),e.scales.x.grid.color=this.userXGridColor??r,(u=e.scales.x.grid).display??(u.display=!1),(d=e.scales).y??(d.y={}),(f=e.scales.y).border??(f.border={}),(g=e.scales.y.border).display??(g.display=!1),(m=e.scales.y).grid??(m.grid={}),e.scales.y.grid.color=this.userYGridColor??r,[\"doughnut\",\"pie\",\"polarArea\"].includes(i)&&((p=e.scales.x).display??(p.display=!1),(b=e.scales.y).display??(b.display=!1),(y=e.scales.y.grid).display??(y.display=!1)),i===\"polarArea\"){let S=getComputedStyle(this.$refs.textColorElement).color;(_=e.scales).r??(_.r={}),(w=e.scales.r).grid??(w.grid={}),e.scales.r.grid.color=this.userRadialGridColor??r,(x=e.scales.r).ticks??(x.ticks={}),e.scales.r.ticks.color=this.userRadialTicksColor??S,(k=e.scales.r.ticks).backdropColor??(k.backdropColor=\"transparent\")}return new Mt(this.$refs.canvas,{type:i,data:n??s,options:e,plugins:window.filamentChartJsPlugins??[]})},getChart(){return this.$refs.canvas?Mt.getChart(this.$refs.canvas):null},destroy(){this.resizeObserver&&this.resizeObserver.disconnect(),this.getChart()?.destroy()}}}export{Xm as default};\n/*! Bundled license information:\n\n@kurkle/color/dist/color.esm.js:\n  (*!\n   * @kurkle/color v0.3.4\n   * https://github.com/kurkle/color#readme\n   * (c) 2024 Jukka Kurkela\n   * Released under the MIT License\n   *)\n\nchart.js/dist/chunks/helpers.dataset.js:\nchart.js/dist/chart.js:\n  (*!\n   * Chart.js v4.5.1\n   * https://www.chartjs.org\n   * (c) 2025 Chart.js Contributors\n   * Released under the MIT License\n   *)\n\nchartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js:\n  (*!\n   * chartjs-adapter-luxon v1.3.1\n   * https://www.chartjs.org\n   * (c) 2023 chartjs-adapter-luxon Contributors\n   * Released under the MIT license\n   *)\n*/\n"
  },
  {
    "path": "public/js/filament/widgets/components/stats-overview/stat/chart.js",
    "content": "var Jo=Object.defineProperty;var Zo=(i,t,e)=>t in i?Jo(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var M=(i,t,e)=>Zo(i,typeof t!=\"symbol\"?t+\"\":t,e);function ve(i){return i+.5|0}var wt=(i,t,e)=>Math.max(Math.min(i,e),t);function _e(i){return wt(ve(i*2.55),0,255)}function St(i){return wt(ve(i*255),0,255)}function mt(i){return wt(ve(i/2.55)/100,0,1)}function zs(i){return wt(ve(i*100),0,100)}var nt={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Ai=[...\"0123456789ABCDEF\"],Qo=i=>Ai[i&15],ta=i=>Ai[(i&240)>>4]+Ai[i&15],Ue=i=>(i&240)>>4===(i&15),ea=i=>Ue(i.r)&&Ue(i.g)&&Ue(i.b)&&Ue(i.a);function ia(i){var t=i.length,e;return i[0]===\"#\"&&(t===4||t===5?e={r:255&nt[i[1]]*17,g:255&nt[i[2]]*17,b:255&nt[i[3]]*17,a:t===5?nt[i[4]]*17:255}:(t===7||t===9)&&(e={r:nt[i[1]]<<4|nt[i[2]],g:nt[i[3]]<<4|nt[i[4]],b:nt[i[5]]<<4|nt[i[6]],a:t===9?nt[i[7]]<<4|nt[i[8]]:255})),e}var sa=(i,t)=>i<255?t(i):\"\";function na(i){var t=ea(i)?Qo:ta;return i?\"#\"+t(i.r)+t(i.g)+t(i.b)+sa(i.a,t):void 0}var oa=/^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function Ns(i,t,e){let s=t*Math.min(e,1-e),n=(o,a=(o+i/30)%12)=>e-s*Math.max(Math.min(a-3,9-a,1),-1);return[n(0),n(8),n(4)]}function aa(i,t,e){let s=(n,o=(n+i/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[s(5),s(3),s(1)]}function ra(i,t,e){let s=Ns(i,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)s[n]*=1-t-e,s[n]+=t;return s}function la(i,t,e,s,n){return i===n?(t-e)/s+(t<e?6:0):t===n?(e-i)/s+2:(i-t)/s+4}function Ti(i){let e=i.r/255,s=i.g/255,n=i.b/255,o=Math.max(e,s,n),a=Math.min(e,s,n),r=(o+a)/2,l,c,h;return o!==a&&(h=o-a,c=r>.5?h/(2-o-a):h/(o+a),l=la(e,s,n,h,o),l=l*60+.5),[l|0,c||0,r]}function Li(i,t,e,s){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,s)).map(St)}function Ri(i,t,e){return Li(Ns,i,t,e)}function ca(i,t,e){return Li(ra,i,t,e)}function ha(i,t,e){return Li(aa,i,t,e)}function Hs(i){return(i%360+360)%360}function da(i){let t=oa.exec(i),e=255,s;if(!t)return;t[5]!==s&&(e=t[6]?_e(+t[5]):St(+t[5]));let n=Hs(+t[2]),o=+t[3]/100,a=+t[4]/100;return t[1]===\"hwb\"?s=ca(n,o,a):t[1]===\"hsv\"?s=ha(n,o,a):s=Ri(n,o,a),{r:s[0],g:s[1],b:s[2],a:e}}function ua(i,t){var e=Ti(i);e[0]=Hs(e[0]+t),e=Ri(e),i.r=e[0],i.g=e[1],i.b=e[2]}function fa(i){if(!i)return;let t=Ti(i),e=t[0],s=zs(t[1]),n=zs(t[2]);return i.a<255?`hsla(${e}, ${s}%, ${n}%, ${mt(i.a)})`:`hsl(${e}, ${s}%, ${n}%)`}var Bs={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},Vs={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};function ga(){let i={},t=Object.keys(Vs),e=Object.keys(Bs),s,n,o,a,r;for(s=0;s<t.length;s++){for(a=r=t[s],n=0;n<e.length;n++)o=e[n],r=r.replace(o,Bs[o]);o=parseInt(Vs[a],16),i[r]=[o>>16&255,o>>8&255,o&255]}return i}var Xe;function pa(i){Xe||(Xe=ga(),Xe.transparent=[0,0,0,0]);let t=Xe[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var ma=/^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function ba(i){let t=ma.exec(i),e=255,s,n,o;if(t){if(t[7]!==s){let a=+t[7];e=t[8]?_e(a):wt(a*255,0,255)}return s=+t[1],n=+t[3],o=+t[5],s=255&(t[2]?_e(s):wt(s,0,255)),n=255&(t[4]?_e(n):wt(n,0,255)),o=255&(t[6]?_e(o):wt(o,0,255)),{r:s,g:n,b:o,a:e}}}function xa(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${mt(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}var Ci=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,Gt=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function _a(i,t,e){let s=Gt(mt(i.r)),n=Gt(mt(i.g)),o=Gt(mt(i.b));return{r:St(Ci(s+e*(Gt(mt(t.r))-s))),g:St(Ci(n+e*(Gt(mt(t.g))-n))),b:St(Ci(o+e*(Gt(mt(t.b))-o))),a:i.a+e*(t.a-i.a)}}function Ke(i,t,e){if(i){let s=Ti(i);s[t]=Math.max(0,Math.min(s[t]+s[t]*e,t===0?360:1)),s=Ri(s),i.r=s[0],i.g=s[1],i.b=s[2]}}function js(i,t){return i&&Object.assign(t||{},i)}function Ws(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=St(i[3]))):(t=js(i,{r:0,g:0,b:0,a:1}),t.a=St(t.a)),t}function ya(i){return i.charAt(0)===\"r\"?ba(i):da(i)}var ye=class i{constructor(t){if(t instanceof i)return t;let e=typeof t,s;e===\"object\"?s=Ws(t):e===\"string\"&&(s=ia(t)||pa(t)||ya(t)),this._rgb=s,this._valid=!!s}get valid(){return this._valid}get rgb(){var t=js(this._rgb);return t&&(t.a=mt(t.a)),t}set rgb(t){this._rgb=Ws(t)}rgbString(){return this._valid?xa(this._rgb):void 0}hexString(){return this._valid?na(this._rgb):void 0}hslString(){return this._valid?fa(this._rgb):void 0}mix(t,e){if(t){let s=this.rgb,n=t.rgb,o,a=e===o?.5:e,r=2*a-1,l=s.a-n.a,c=((r*l===-1?r:(r+l)/(1+r*l))+1)/2;o=1-c,s.r=255&c*s.r+o*n.r+.5,s.g=255&c*s.g+o*n.g+.5,s.b=255&c*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=_a(this._rgb,t._rgb,e)),this}clone(){return new i(this.rgb)}alpha(t){return this._rgb.a=St(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=ve(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Ke(this._rgb,2,t),this}darken(t){return Ke(this._rgb,2,-t),this}saturate(t){return Ke(this._rgb,1,t),this}desaturate(t){return Ke(this._rgb,1,-t),this}rotate(t){return ua(this._rgb,t),this}};function dt(){}var tn=(()=>{let i=0;return()=>i++})();function A(i){return i==null}function z(i){if(Array.isArray&&Array.isArray(i))return!0;let t=Object.prototype.toString.call(i);return t.slice(0,7)===\"[object\"&&t.slice(-6)===\"Array]\"}function T(i){return i!==null&&Object.prototype.toString.call(i)===\"[object Object]\"}function N(i){return(typeof i==\"number\"||i instanceof Number)&&isFinite(+i)}function Z(i,t){return N(i)?i:t}function D(i,t){return typeof i>\"u\"?t:i}var en=(i,t)=>typeof i==\"string\"&&i.endsWith(\"%\")?parseFloat(i)/100:+i/t,zi=(i,t)=>typeof i==\"string\"&&i.endsWith(\"%\")?parseFloat(i)/100*t:+i;function F(i,t,e){if(i&&typeof i.call==\"function\")return i.apply(e,t)}function E(i,t,e,s){let n,o,a;if(z(i))if(o=i.length,s)for(n=o-1;n>=0;n--)t.call(e,i[n],n);else for(n=0;n<o;n++)t.call(e,i[n],n);else if(T(i))for(a=Object.keys(i),o=a.length,n=0;n<o;n++)t.call(e,i[a[n]],a[n])}function we(i,t){let e,s,n,o;if(!i||!t||i.length!==t.length)return!1;for(e=0,s=i.length;e<s;++e)if(n=i[e],o=t[e],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function Ze(i){if(z(i))return i.map(Ze);if(T(i)){let t=Object.create(null),e=Object.keys(i),s=e.length,n=0;for(;n<s;++n)t[e[n]]=Ze(i[e[n]]);return t}return i}function sn(i){return[\"__proto__\",\"prototype\",\"constructor\"].indexOf(i)===-1}function va(i,t,e,s){if(!sn(i))return;let n=t[i],o=e[i];T(n)&&T(o)?Zt(n,o,s):t[i]=Ze(o)}function Zt(i,t,e){let s=z(t)?t:[t],n=s.length;if(!T(i))return i;e=e||{};let o=e.merger||va,a;for(let r=0;r<n;++r){if(a=s[r],!T(a))continue;let l=Object.keys(a);for(let c=0,h=l.length;c<h;++c)o(l[c],i,a,e)}return i}function te(i,t){return Zt(i,t,{merger:Ma})}function Ma(i,t,e){if(!sn(i))return;let s=t[i],n=e[i];T(s)&&T(n)?te(s,n):Object.prototype.hasOwnProperty.call(t,i)||(t[i]=Ze(n))}var $s={\"\":i=>i,x:i=>i.x,y:i=>i.y};function ka(i){let t=i.split(\".\"),e=[],s=\"\";for(let n of t)s+=n,s.endsWith(\"\\\\\")?s=s.slice(0,-1)+\".\":(e.push(s),s=\"\");return e}function wa(i){let t=ka(i);return e=>{for(let s of t){if(s===\"\")break;e=e&&e[s]}return e}}function _t(i,t){return($s[t]||($s[t]=wa(t)))(i)}function ii(i){return i.charAt(0).toUpperCase()+i.slice(1)}var ee=i=>typeof i<\"u\",bt=i=>typeof i==\"function\",Bi=(i,t)=>{if(i.size!==t.size)return!1;for(let e of i)if(!t.has(e))return!1;return!0};function nn(i){return i.type===\"mouseup\"||i.type===\"click\"||i.type===\"contextmenu\"}var R=Math.PI,B=2*R,Sa=B+R,Qe=Number.POSITIVE_INFINITY,Pa=R/180,H=R/2,Ft=R/4,Ys=R*2/3,xt=Math.log10,lt=Math.sign;function ie(i,t,e){return Math.abs(i-t)<e}function Vi(i){let t=Math.round(i);i=ie(i,t,i/1e3)?t:i;let e=Math.pow(10,Math.floor(xt(i))),s=i/e;return(s<=1?1:s<=2?2:s<=5?5:10)*e}function on(i){let t=[],e=Math.sqrt(i),s;for(s=1;s<e;s++)i%s===0&&(t.push(s),t.push(i/s));return e===(e|0)&&t.push(e),t.sort((n,o)=>n-o).pop(),t}function Da(i){return typeof i==\"symbol\"||typeof i==\"object\"&&i!==null&&!(Symbol.toPrimitive in i||\"toString\"in i||\"valueOf\"in i)}function Vt(i){return!Da(i)&&!isNaN(parseFloat(i))&&isFinite(i)}function an(i,t){let e=Math.round(i);return e-t<=i&&e+t>=i}function Wi(i,t,e){let s,n,o;for(s=0,n=i.length;s<n;s++)o=i[s][e],isNaN(o)||(t.min=Math.min(t.min,o),t.max=Math.max(t.max,o))}function ot(i){return i*(R/180)}function si(i){return i*(180/R)}function Ni(i){if(!N(i))return;let t=1,e=0;for(;Math.round(i*t)/t!==i;)t*=10,e++;return e}function Hi(i,t){let e=t.x-i.x,s=t.y-i.y,n=Math.sqrt(e*e+s*s),o=Math.atan2(s,e);return o<-.5*R&&(o+=B),{angle:o,distance:n}}function ti(i,t){return Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2))}function Oa(i,t){return(i-t+Sa)%B-R}function X(i){return(i%B+B)%B}function se(i,t,e,s){let n=X(i),o=X(t),a=X(e),r=X(o-n),l=X(a-n),c=X(n-o),h=X(n-a);return n===o||n===a||s&&o===a||r>l&&c<h}function Y(i,t,e){return Math.max(t,Math.min(e,i))}function rn(i){return Y(i,-32768,32767)}function ut(i,t,e,s=1e-6){return i>=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function ni(i,t,e){e=e||(a=>i[a]<t);let s=i.length-1,n=0,o;for(;s-n>1;)o=n+s>>1,e(o)?n=o:s=o;return{lo:n,hi:s}}var ct=(i,t,e,s)=>ni(i,e,s?n=>{let o=i[n][t];return o<e||o===e&&i[n+1][t]===e}:n=>i[n][t]<e),ln=(i,t,e)=>ni(i,e,s=>i[s][t]>=e);function cn(i,t,e){let s=0,n=i.length;for(;s<n&&i[s]<t;)s++;for(;n>s&&i[n-1]>e;)n--;return s>0||n<i.length?i.slice(s,n):i}var hn=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function dn(i,t){if(i._chartjs){i._chartjs.listeners.push(t);return}Object.defineProperty(i,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),hn.forEach(e=>{let s=\"_onData\"+ii(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){let a=n.apply(this,o);return i._chartjs.listeners.forEach(r=>{typeof r[s]==\"function\"&&r[s](...o)}),a}})})}function ji(i,t){let e=i._chartjs;if(!e)return;let s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(hn.forEach(o=>{delete i[o]}),delete i._chartjs)}function $i(i){let t=new Set(i);return t.size===i.length?i:Array.from(t)}var Yi=(function(){return typeof window>\"u\"?function(i){return i()}:window.requestAnimationFrame})();function Ui(i,t){let e=[],s=!1;return function(...n){e=n,s||(s=!0,Yi.call(window,()=>{s=!1,i.apply(t,e)}))}}function un(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}var oi=i=>i===\"start\"?\"left\":i===\"end\"?\"right\":\"center\",K=(i,t,e)=>i===\"start\"?t:i===\"end\"?e:(t+e)/2,fn=(i,t,e,s)=>i===(s?\"left\":\"right\")?e:i===\"center\"?(t+e)/2:t;function Xi(i,t,e){let s=t.length,n=0,o=s;if(i._sorted){let{iScale:a,vScale:r,_parsed:l}=i,c=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null,h=a.axis,{min:d,max:u,minDefined:f,maxDefined:g}=a.getUserBounds();if(f){if(n=Math.min(ct(l,h,d).lo,e?s:ct(t,h,a.getPixelForValue(d)).lo),c){let p=l.slice(0,n+1).reverse().findIndex(m=>!A(m[r.axis]));n-=Math.max(0,p)}n=Y(n,0,s-1)}if(g){let p=Math.max(ct(l,a.axis,u,!0).hi+1,e?0:ct(t,h,a.getPixelForValue(u),!0).hi+1);if(c){let m=l.slice(p-1).findIndex(b=>!A(b[r.axis]));p+=Math.max(0,m)}o=Y(p,n,s)-n}else o=s-n}return{start:n,count:o}}function Ki(i){let{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;let o=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),o}var qe=i=>i===0||i===1,Us=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*B/e)),Xs=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*B/e)+1,Jt={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*H)+1,easeOutSine:i=>Math.sin(i*H),easeInOutSine:i=>-.5*(Math.cos(R*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>qe(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>qe(i)?i:Us(i,.075,.3),easeOutElastic:i=>qe(i)?i:Xs(i,.075,.3),easeInOutElastic(i){return qe(i)?i:i<.5?.5*Us(i*2,.1125,.45):.5+.5*Xs(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-Jt.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?Jt.easeInBounce(i*2)*.5:Jt.easeOutBounce(i*2-1)*.5+.5};function qi(i){if(i&&typeof i==\"object\"){let t=i.toString();return t===\"[object CanvasPattern]\"||t===\"[object CanvasGradient]\"}return!1}function Gi(i){return qi(i)?i:new ye(i)}function Ei(i){return qi(i)?i:new ye(i).saturate(.5).darken(.1).hexString()}var Ca=[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"],Aa=[\"color\",\"borderColor\",\"backgroundColor\"];function Ta(i){i.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),i.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>t!==\"onProgress\"&&t!==\"onComplete\"&&t!==\"fn\"}),i.set(\"animations\",{colors:{type:\"color\",properties:Aa},numbers:{type:\"number\",properties:Ca}}),i.describe(\"animations\",{_fallback:\"animation\"}),i.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>t|0}}}})}function La(i){i.set(\"layout\",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var Ks=new Map;function Ra(i,t){t=t||{};let e=i+JSON.stringify(t),s=Ks.get(e);return s||(s=new Intl.NumberFormat(i,t),Ks.set(e,s)),s}function ne(i,t,e){return Ra(t,e).format(i)}var gn={values(i){return z(i)?i:\"\"+i},numeric(i,t,e){if(i===0)return\"0\";let s=this.chart.options.locale,n,o=i;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n=\"scientific\"),o=Ea(i,e)}let a=xt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(i,s,l)},logarithmic(i,t,e){if(i===0)return\"0\";let s=e[t].significand||i/Math.pow(10,Math.floor(xt(i)));return[1,2,3,5,10,15].includes(s)||t>.8*e.length?gn.numeric.call(this,i,t,e):\"\"}};function Ea(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var Se={formatters:gn};function Ia(i){i.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Se.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),i.route(\"scale.ticks\",\"color\",\"\",\"color\"),i.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),i.route(\"scale.border\",\"color\",\"\",\"borderColor\"),i.route(\"scale.title\",\"color\",\"\",\"color\"),i.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&t!==\"callback\"&&t!==\"parser\",_indexable:t=>t!==\"borderDash\"&&t!==\"tickBorderDash\"&&t!==\"dash\"}),i.describe(\"scales\",{_fallback:\"scale\"}),i.describe(\"scale.ticks\",{_scriptable:t=>t!==\"backdropPadding\"&&t!==\"callback\",_indexable:t=>t!==\"backdropPadding\"})}var Ot=Object.create(null),ai=Object.create(null);function Me(i,t){if(!t)return i;let e=t.split(\".\");for(let s=0,n=e.length;s<n;++s){let o=e[s];i=i[o]||(i[o]=Object.create(null))}return i}function Ii(i,t,e){return typeof t==\"string\"?Zt(Me(i,t),e):Zt(Me(i,\"\"),t)}var Fi=class{constructor(t,e){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=s=>s.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(s,n)=>Ei(n.backgroundColor),this.hoverBorderColor=(s,n)=>Ei(n.borderColor),this.hoverColor=(s,n)=>Ei(n.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return Ii(this,t,e)}get(t){return Me(this,t)}describe(t,e){return Ii(ai,t,e)}override(t,e){return Ii(Ot,t,e)}route(t,e,s,n){let o=Me(this,t),a=Me(this,s),r=\"_\"+e;Object.defineProperties(o,{[r]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[r],c=a[n];return T(l)?Object.assign({},c,l):D(l,c)},set(l){this[r]=l}}})}apply(t){t.forEach(e=>e(this))}},V=new Fi({_scriptable:i=>!i.startsWith(\"on\"),_indexable:i=>i!==\"events\",hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}},[Ta,La,Ia]);function Fa(i){return!i||A(i.size)||A(i.family)?null:(i.style?i.style+\" \":\"\")+(i.weight?i.weight+\" \":\"\")+i.size+\"px \"+i.family}function ke(i,t,e,s,n){let o=t[n];return o||(o=t[n]=i.measureText(n).width,e.push(n)),o>s&&(s=o),s}function pn(i,t,e,s){s=s||{};let n=s.data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},o=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let a=0,r=e.length,l,c,h,d,u;for(l=0;l<r;l++)if(d=e[l],d!=null&&!z(d))a=ke(i,n,o,a,d);else if(z(d))for(c=0,h=d.length;c<h;c++)u=d[c],u!=null&&!z(u)&&(a=ke(i,n,o,a,u));i.restore();let f=o.length/2;if(f>e.length){for(l=0;l<f;l++)delete n[o[l]];o.splice(0,f)}return a}function Ct(i,t,e){let s=i.currentDevicePixelRatio,n=e!==0?Math.max(e/2,.5):0;return Math.round((t-n)*s)/s+n}function Ji(i,t){!t&&!i||(t=t||i.getContext(\"2d\"),t.save(),t.resetTransform(),t.clearRect(0,0,i.width,i.height),t.restore())}function ri(i,t,e,s){Zi(i,t,e,s,null)}function Zi(i,t,e,s,n){let o,a,r,l,c,h,d,u,f=t.pointStyle,g=t.rotation,p=t.radius,m=(g||0)*Pa;if(f&&typeof f==\"object\"&&(o=f.toString(),o===\"[object HTMLImageElement]\"||o===\"[object HTMLCanvasElement]\")){i.save(),i.translate(e,s),i.rotate(m),i.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),i.restore();return}if(!(isNaN(p)||p<=0)){switch(i.beginPath(),f){default:n?i.ellipse(e,s,n/2,p,0,0,B):i.arc(e,s,p,0,B),i.closePath();break;case\"triangle\":h=n?n/2:p,i.moveTo(e+Math.sin(m)*h,s-Math.cos(m)*p),m+=Ys,i.lineTo(e+Math.sin(m)*h,s-Math.cos(m)*p),m+=Ys,i.lineTo(e+Math.sin(m)*h,s-Math.cos(m)*p),i.closePath();break;case\"rectRounded\":c=p*.516,l=p-c,a=Math.cos(m+Ft)*l,d=Math.cos(m+Ft)*(n?n/2-c:l),r=Math.sin(m+Ft)*l,u=Math.sin(m+Ft)*(n?n/2-c:l),i.arc(e-d,s-r,c,m-R,m-H),i.arc(e+u,s-a,c,m-H,m),i.arc(e+d,s+r,c,m,m+H),i.arc(e-u,s+a,c,m+H,m+R),i.closePath();break;case\"rect\":if(!g){l=Math.SQRT1_2*p,h=n?n/2:l,i.rect(e-h,s-l,2*h,2*l);break}m+=Ft;case\"rectRot\":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+u,s-a),i.lineTo(e+d,s+r),i.lineTo(e-u,s+a),i.closePath();break;case\"crossRot\":m+=Ft;case\"cross\":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+d,s+r),i.moveTo(e+u,s-a),i.lineTo(e-u,s+a);break;case\"star\":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+d,s+r),i.moveTo(e+u,s-a),i.lineTo(e-u,s+a),m+=Ft,d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+d,s+r),i.moveTo(e+u,s-a),i.lineTo(e-u,s+a);break;case\"line\":a=n?n/2:Math.cos(m)*p,r=Math.sin(m)*p,i.moveTo(e-a,s-r),i.lineTo(e+a,s+r);break;case\"dash\":i.moveTo(e,s),i.lineTo(e+Math.cos(m)*(n?n/2:p),s+Math.sin(m)*p);break;case!1:i.closePath();break}i.fill(),t.borderWidth>0&&i.stroke()}}function ht(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.x<t.right+e&&i.y>t.top-e&&i.y<t.bottom+e}function Pe(i,t){i.save(),i.beginPath(),i.rect(t.left,t.top,t.right-t.left,t.bottom-t.top),i.clip()}function De(i){i.restore()}function mn(i,t,e,s,n){if(!t)return i.lineTo(e.x,e.y);if(n===\"middle\"){let o=(t.x+e.x)/2;i.lineTo(o,t.y),i.lineTo(o,e.y)}else n===\"after\"!=!!s?i.lineTo(t.x,e.y):i.lineTo(e.x,t.y);i.lineTo(e.x,e.y)}function bn(i,t,e,s){if(!t)return i.lineTo(e.x,e.y);i.bezierCurveTo(s?t.cp1x:t.cp2x,s?t.cp1y:t.cp2y,s?e.cp2x:e.cp1x,s?e.cp2y:e.cp1y,e.x,e.y)}function za(i,t){t.translation&&i.translate(t.translation[0],t.translation[1]),A(t.rotation)||i.rotate(t.rotation),t.color&&(i.fillStyle=t.color),t.textAlign&&(i.textAlign=t.textAlign),t.textBaseline&&(i.textBaseline=t.textBaseline)}function Ba(i,t,e,s,n){if(n.strikethrough||n.underline){let o=i.measureText(s),a=t-o.actualBoundingBoxLeft,r=t+o.actualBoundingBoxRight,l=e-o.actualBoundingBoxAscent,c=e+o.actualBoundingBoxDescent,h=n.strikethrough?(l+c)/2:c;i.strokeStyle=i.fillStyle,i.beginPath(),i.lineWidth=n.decorationWidth||2,i.moveTo(a,h),i.lineTo(r,h),i.stroke()}}function Va(i,t){let e=i.fillStyle;i.fillStyle=t.color,i.fillRect(t.left,t.top,t.width,t.height),i.fillStyle=e}function At(i,t,e,s,n,o={}){let a=z(t)?t:[t],r=o.strokeWidth>0&&o.strokeColor!==\"\",l,c;for(i.save(),i.font=n.string,za(i,o),l=0;l<a.length;++l)c=a[l],o.backdrop&&Va(i,o.backdrop),r&&(o.strokeColor&&(i.strokeStyle=o.strokeColor),A(o.strokeWidth)||(i.lineWidth=o.strokeWidth),i.strokeText(c,e,s,o.maxWidth)),i.fillText(c,e,s,o.maxWidth),Ba(i,e,s,c,o),s+=Number(n.lineHeight);i.restore()}function oe(i,t){let{x:e,y:s,w:n,h:o,radius:a}=t;i.arc(e+a.topLeft,s+a.topLeft,a.topLeft,1.5*R,R,!0),i.lineTo(e,s+o-a.bottomLeft),i.arc(e+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,R,H,!0),i.lineTo(e+n-a.bottomRight,s+o),i.arc(e+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,H,0,!0),i.lineTo(e+n,s+a.topRight),i.arc(e+n-a.topRight,s+a.topRight,a.topRight,0,-H,!0),i.lineTo(e+a.topLeft,s)}var Wa=/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/,Na=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function Ha(i,t){let e=(\"\"+i).match(Wa);if(!e||e[1]===\"normal\")return t*1.2;switch(i=+e[2],e[3]){case\"px\":return i;case\"%\":i/=100;break}return t*i}var ja=i=>+i||0;function li(i,t){let e={},s=T(t),n=s?Object.keys(t):t,o=T(i)?s?a=>D(i[a],i[t[a]]):a=>i[a]:()=>i;for(let a of n)e[a]=ja(o(a));return e}function Qi(i){return li(i,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function Tt(i){return li(i,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function q(i){let t=Qi(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function $(i,t){i=i||{},t=t||V.font;let e=D(i.size,t.size);typeof e==\"string\"&&(e=parseInt(e,10));let s=D(i.style,t.style);s&&!(\"\"+s).match(Na)&&(console.warn('Invalid font style specified: \"'+s+'\"'),s=void 0);let n={family:D(i.family,t.family),lineHeight:Ha(D(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:D(i.weight,t.weight),string:\"\"};return n.string=Fa(n),n}function ae(i,t,e,s){let n=!0,o,a,r;for(o=0,a=i.length;o<a;++o)if(r=i[o],r!==void 0&&(t!==void 0&&typeof r==\"function\"&&(r=r(t),n=!1),e!==void 0&&z(r)&&(r=r[e%r.length],n=!1),r!==void 0))return s&&!n&&(s.cacheable=!1),r}function xn(i,t,e){let{min:s,max:n}=i,o=zi(t,(n-s)/2),a=(r,l)=>e&&r===0?0:r+l;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function yt(i,t){return Object.assign(Object.create(i),t)}function ci(i,t=[\"\"],e,s,n=()=>i[0]){let o=e||i;typeof s>\"u\"&&(s=vn(\"_fallback\",i));let a={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:i,_rootScopes:o,_fallback:s,_getTarget:n,override:r=>ci([r,...i],t,o,s)};return new Proxy(a,{deleteProperty(r,l){return delete r[l],delete r._keys,delete i[0][l],!0},get(r,l){return _n(r,l,()=>Ja(l,t,i,r))},getOwnPropertyDescriptor(r,l){return Reflect.getOwnPropertyDescriptor(r._scopes[0],l)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(r,l){return Gs(r).includes(l)},ownKeys(r){return Gs(r)},set(r,l,c){let h=r._storage||(r._storage=n());return r[l]=h[l]=c,delete r._keys,!0}})}function Bt(i,t,e,s){let n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:ts(i,s),setContext:o=>Bt(i,o,e,s),override:o=>Bt(i.override(o),t,e,s)};return new Proxy(n,{deleteProperty(o,a){return delete o[a],delete i[a],!0},get(o,a,r){return _n(o,a,()=>Ya(o,a,r))},getOwnPropertyDescriptor(o,a){return o._descriptors.allKeys?Reflect.has(i,a)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,a)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,a){return Reflect.has(i,a)},ownKeys(){return Reflect.ownKeys(i)},set(o,a,r){return i[a]=r,delete o[a],!0}})}function ts(i,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:bt(e)?e:()=>e,isIndexable:bt(s)?s:()=>s}}var $a=(i,t)=>i?i+ii(t):t,es=(i,t)=>T(t)&&i!==\"adapters\"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function _n(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t)||t===\"constructor\")return i[t];let s=e();return i[t]=s,s}function Ya(i,t,e){let{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=i,r=s[t];return bt(r)&&a.isScriptable(t)&&(r=Ua(t,r,i,e)),z(r)&&r.length&&(r=Xa(t,r,i,a.isIndexable)),es(t,r)&&(r=Bt(r,n,o&&o[t],a)),r}function Ua(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_stack:r}=e;if(r.has(i))throw new Error(\"Recursion detected: \"+Array.from(r).join(\"->\")+\"->\"+i);r.add(i);let l=t(o,a||s);return r.delete(i),es(i,l)&&(l=is(n._scopes,n,i,l)),l}function Xa(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=e;if(typeof o.index<\"u\"&&s(i))return t[o.index%t.length];if(T(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let d=is(c,n,i,h);t.push(Bt(d,o,a&&a[i],r))}}return t}function yn(i,t,e){return bt(i)?i(t,e):i}var Ka=(i,t)=>i===!0?t:typeof i==\"string\"?_t(t,i):void 0;function qa(i,t,e,s,n){for(let o of t){let a=Ka(e,o);if(a){i.add(a);let r=yn(a._fallback,e,n);if(typeof r<\"u\"&&r!==e&&r!==s)return r}else if(a===!1&&typeof s<\"u\"&&e!==s)return null}return!1}function is(i,t,e,s){let n=t._rootScopes,o=yn(t._fallback,e,s),a=[...i,...n],r=new Set;r.add(s);let l=qs(r,a,e,o||e,s);return l===null||typeof o<\"u\"&&o!==e&&(l=qs(r,a,o,l,s),l===null)?!1:ci(Array.from(r),[\"\"],n,o,()=>Ga(t,e,s))}function qs(i,t,e,s,n){for(;e;)e=qa(i,t,e,s,n);return e}function Ga(i,t,e){let s=i._getTarget();t in s||(s[t]={});let n=s[t];return z(n)&&T(e)?e:n||{}}function Ja(i,t,e,s){let n;for(let o of t)if(n=vn($a(o,i),e),typeof n<\"u\")return es(i,n)?is(e,s,i,n):n}function vn(i,t){for(let e of t){if(!e)continue;let s=e[i];if(typeof s<\"u\")return s}}function Gs(i){let t=i._keys;return t||(t=i._keys=Za(i._scopes)),t}function Za(i){let t=new Set;for(let e of i)for(let s of Object.keys(e).filter(n=>!n.startsWith(\"_\")))t.add(s);return Array.from(t)}function ss(i,t,e,s){let{iScale:n}=i,{key:o=\"r\"}=this._parsing,a=new Array(s),r,l,c,h;for(r=0,l=s;r<l;++r)c=r+e,h=t[c],a[r]={r:n.parse(_t(h,o),c)};return a}var Qa=Number.EPSILON||1e-14,Qt=(i,t)=>t<i.length&&!i[t].skip&&i[t],Mn=i=>i===\"x\"?\"y\":\"x\";function tr(i,t,e,s){let n=i.skip?t:i,o=t,a=e.skip?t:e,r=ti(o,n),l=ti(a,o),c=r/(r+l),h=l/(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let d=s*c,u=s*h;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function er(i,t,e){let s=i.length,n,o,a,r,l,c=Qt(i,0);for(let h=0;h<s-1;++h)if(l=c,c=Qt(i,h+1),!(!l||!c)){if(ie(t[h],0,Qa)){e[h]=e[h+1]=0;continue}n=e[h]/t[h],o=e[h+1]/t[h],r=Math.pow(n,2)+Math.pow(o,2),!(r<=9)&&(a=3/Math.sqrt(r),e[h]=n*a*t[h],e[h+1]=o*a*t[h])}}function ir(i,t,e=\"x\"){let s=Mn(e),n=i.length,o,a,r,l=Qt(i,0);for(let c=0;c<n;++c){if(a=r,r=l,l=Qt(i,c+1),!r)continue;let h=r[e],d=r[s];a&&(o=(h-a[e])/3,r[`cp1${e}`]=h-o,r[`cp1${s}`]=d-o*t[c]),l&&(o=(l[e]-h)/3,r[`cp2${e}`]=h+o,r[`cp2${s}`]=d+o*t[c])}}function sr(i,t=\"x\"){let e=Mn(t),s=i.length,n=Array(s).fill(0),o=Array(s),a,r,l,c=Qt(i,0);for(a=0;a<s;++a)if(r=l,l=c,c=Qt(i,a+1),!!l){if(c){let h=c[t]-l[t];n[a]=h!==0?(c[e]-l[e])/h:0}o[a]=r?c?lt(n[a-1])!==lt(n[a])?0:(n[a-1]+n[a])/2:n[a-1]:n[a]}er(i,n,o),ir(i,o,t)}function Ge(i,t,e){return Math.max(Math.min(i,e),t)}function nr(i,t){let e,s,n,o,a,r=ht(i[0],t);for(e=0,s=i.length;e<s;++e)a=o,o=r,r=e<s-1&&ht(i[e+1],t),o&&(n=i[e],a&&(n.cp1x=Ge(n.cp1x,t.left,t.right),n.cp1y=Ge(n.cp1y,t.top,t.bottom)),r&&(n.cp2x=Ge(n.cp2x,t.left,t.right),n.cp2y=Ge(n.cp2y,t.top,t.bottom)))}function kn(i,t,e,s,n){let o,a,r,l;if(t.spanGaps&&(i=i.filter(c=>!c.skip)),t.cubicInterpolationMode===\"monotone\")sr(i,n);else{let c=s?i[i.length-1]:i[0];for(o=0,a=i.length;o<a;++o)r=i[o],l=tr(c,r,i[Math.min(o+1,a-(s?0:1))%a],t.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,c=r}t.capBezierPoints&&nr(i,e)}function hi(){return typeof window<\"u\"&&typeof document<\"u\"}function di(i){let t=i.parentNode;return t&&t.toString()===\"[object ShadowRoot]\"&&(t=t.host),t}function ei(i,t,e){let s;return typeof i==\"string\"?(s=parseInt(i,10),i.indexOf(\"%\")!==-1&&(s=s/100*t.parentNode[e])):s=i,s}var ui=i=>i.ownerDocument.defaultView.getComputedStyle(i,null);function or(i,t){return ui(i).getPropertyValue(t)}var ar=[\"top\",\"right\",\"bottom\",\"left\"];function zt(i,t,e){let s={};e=e?\"-\"+e:\"\";for(let n=0;n<4;n++){let o=ar[n];s[o]=parseFloat(i[t+\"-\"+o+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}var rr=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function lr(i,t){let e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:o}=s,a=!1,r,l;if(rr(n,o,i.target))r=n,l=o;else{let c=t.getBoundingClientRect();r=s.clientX-c.left,l=s.clientY-c.top,a=!0}return{x:r,y:l,box:a}}function Lt(i,t){if(\"native\"in i)return i;let{canvas:e,currentDevicePixelRatio:s}=t,n=ui(e),o=n.boxSizing===\"border-box\",a=zt(n,\"padding\"),r=zt(n,\"border\",\"width\"),{x:l,y:c,box:h}=lr(i,e),d=a.left+(h&&r.left),u=a.top+(h&&r.top),{width:f,height:g}=t;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*e.width/s),y:Math.round((c-u)/g*e.height/s)}}function cr(i,t,e){let s,n;if(t===void 0||e===void 0){let o=i&&di(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{let a=o.getBoundingClientRect(),r=ui(o),l=zt(r,\"border\",\"width\"),c=zt(r,\"padding\");t=a.width-c.width-l.width,e=a.height-c.height-l.height,s=ei(r.maxWidth,o,\"clientWidth\"),n=ei(r.maxHeight,o,\"clientHeight\")}}return{width:t,height:e,maxWidth:s||Qe,maxHeight:n||Qe}}var Dt=i=>Math.round(i*10)/10;function wn(i,t,e,s){let n=ui(i),o=zt(n,\"margin\"),a=ei(n.maxWidth,i,\"clientWidth\")||Qe,r=ei(n.maxHeight,i,\"clientHeight\")||Qe,l=cr(i,t,e),{width:c,height:h}=l;if(n.boxSizing===\"content-box\"){let u=zt(n,\"border\",\"width\"),f=zt(n,\"padding\");c-=f.width+u.width,h-=f.height+u.height}return c=Math.max(0,c-o.width),h=Math.max(0,s?c/s:h-o.height),c=Dt(Math.min(c,a,l.maxWidth)),h=Dt(Math.min(h,r,l.maxHeight)),c&&!h&&(h=Dt(c/2)),(t!==void 0||e!==void 0)&&s&&l.height&&h>l.height&&(h=l.height,c=Dt(Math.floor(h*s))),{width:c,height:h}}function ns(i,t,e){let s=t||1,n=Dt(i.height*s),o=Dt(i.width*s);i.height=Dt(i.height),i.width=Dt(i.width);let a=i.canvas;return a.style&&(e||!a.style.height&&!a.style.width)&&(a.style.height=`${i.height}px`,a.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||a.height!==n||a.width!==o?(i.currentDevicePixelRatio=s,a.height=n,a.width=o,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}var Sn=(function(){let i=!1;try{let t={get passive(){return i=!0,!1}};hi()&&(window.addEventListener(\"test\",null,t),window.removeEventListener(\"test\",null,t))}catch{}return i})();function os(i,t){let e=or(i,t),s=e&&e.match(/^(\\d+)(\\.\\d+)?px$/);return s?+s[1]:void 0}function Pt(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function Pn(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s===\"middle\"?e<.5?i.y:t.y:s===\"after\"?e<1?i.y:t.y:e>0?t.y:i.y}}function Dn(i,t,e,s){let n={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},a=Pt(i,n,e),r=Pt(n,o,e),l=Pt(o,t,e),c=Pt(a,r,e),h=Pt(r,l,e);return Pt(c,h,e)}var hr=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e===\"center\"?e:e===\"right\"?\"left\":\"right\"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},dr=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function Wt(i,t,e){return i?hr(t,e):dr()}function as(i,t){let e,s;(t===\"ltr\"||t===\"rtl\")&&(e=i.canvas.style,s=[e.getPropertyValue(\"direction\"),e.getPropertyPriority(\"direction\")],e.setProperty(\"direction\",t,\"important\"),i.prevTextDirection=s)}function rs(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty(\"direction\",t[0],t[1]))}function On(i){return i===\"angle\"?{between:se,compare:Oa,normalize:X}:{between:ut,compare:(t,e)=>t-e,normalize:t=>t}}function Js({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function ur(i,t,e){let{property:s,start:n,end:o}=e,{between:a,normalize:r}=On(s),l=t.length,{start:c,end:h,loop:d}=i,u,f;if(d){for(c+=l,h+=l,u=0,f=l;u<f&&a(r(t[c%l][s]),n,o);++u)c--,h--;c%=l,h%=l}return h<c&&(h+=l),{start:c,end:h,loop:d,style:i.style}}function ls(i,t,e){if(!e)return[i];let{property:s,start:n,end:o}=e,a=t.length,{compare:r,between:l,normalize:c}=On(s),{start:h,end:d,loop:u,style:f}=ur(i,t,e),g=[],p=!1,m=null,b,x,v,y=()=>l(n,v,b)&&r(n,v)!==0,_=()=>r(o,b)===0||l(o,v,b),k=()=>p||y(),w=()=>!p||_();for(let S=h,P=h;S<=d;++S)x=t[S%a],!x.skip&&(b=c(x[s]),b!==v&&(p=l(b,n,o),m===null&&k()&&(m=r(b,n)===0?S:P),m!==null&&w()&&(g.push(Js({start:m,end:S,loop:u,count:a,style:f})),m=null),P=S,v=b));return m!==null&&g.push(Js({start:m,end:d,loop:u,count:a,style:f})),g}function cs(i,t){let e=[],s=i.segments;for(let n=0;n<s.length;n++){let o=ls(s[n],i.points,t);o.length&&e.push(...o)}return e}function fr(i,t,e,s){let n=0,o=t-1;if(e&&!s)for(;n<t&&!i[n].skip;)n++;for(;n<t&&i[n].skip;)n++;for(n%=t,e&&(o+=n);o>n&&i[o%t].skip;)o--;return o%=t,{start:n,end:o}}function gr(i,t,e,s){let n=i.length,o=[],a=t,r=i[t],l;for(l=t+1;l<=e;++l){let c=i[l%n];c.skip||c.stop?r.skip||(s=!1,o.push({start:t%n,end:(l-1)%n,loop:s}),t=a=c.stop?l:null):(a=l,r.skip&&(t=l)),r=c}return a!==null&&o.push({start:t%n,end:a%n,loop:s}),o}function Cn(i,t){let e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];let o=!!i._loop,{start:a,end:r}=fr(e,n,o,s);if(s===!0)return Zs(i,[{start:a,end:r,loop:o}],e,t);let l=r<a?r+n:r,c=!!i._fullLoop&&a===0&&r===n-1;return Zs(i,gr(e,a,l,c),e,t)}function Zs(i,t,e,s){return!s||!s.setContext||!e?t:pr(i,t,e,s)}function pr(i,t,e,s){let n=i._chart.getContext(),o=Qs(i.options),{_datasetIndex:a,options:{spanGaps:r}}=i,l=e.length,c=[],h=o,d=t[0].start,u=d;function f(g,p,m,b){let x=r?-1:1;if(g!==p){for(g+=l;e[g%l].skip;)g-=x;for(;e[p%l].skip;)p+=x;g%l!==p%l&&(c.push({start:g%l,end:p%l,loop:m,style:b}),h=b,d=p%l)}}for(let g of t){d=r?d:g.start;let p=e[d%l],m;for(u=d+1;u<=g.end;u++){let b=e[u%l];m=Qs(s.setContext(yt(n,{type:\"segment\",p0:p,p1:b,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),mr(m,h)&&f(d,u-1,g.loop,h),p=b,h=m}d<u-1&&f(d,u-1,g.loop,h)}return c}function Qs(i){return{backgroundColor:i.backgroundColor,borderCapStyle:i.borderCapStyle,borderDash:i.borderDash,borderDashOffset:i.borderDashOffset,borderJoinStyle:i.borderJoinStyle,borderWidth:i.borderWidth,borderColor:i.borderColor}}function mr(i,t){if(!t)return!1;let e=[],s=function(n,o){return qi(o)?(e.includes(o)||e.push(o),e.indexOf(o)):o};return JSON.stringify(i,s)!==JSON.stringify(t,s)}function Je(i,t,e){return i.options.clip?i[e]:t[e]}function br(i,t){let{xScale:e,yScale:s}=i;return e&&s?{left:Je(e,t,\"left\"),right:Je(e,t,\"right\"),top:Je(s,t,\"top\"),bottom:Je(s,t,\"bottom\")}:t}function hs(i,t){let e=t._clip;if(e.disabled)return!1;let s=br(t,i.chartArea);return{left:e.left===!1?0:s.left-(e.left===!0?0:e.left),right:e.right===!1?i.width:s.right+(e.right===!0?0:e.right),top:e.top===!1?0:s.top-(e.top===!0?0:e.top),bottom:e.bottom===!1?i.height:s.bottom+(e.bottom===!0?0:e.bottom)}}var Ms=class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,s,n){let o=e.listeners[n],a=e.duration;o.forEach(r=>r({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=Yi.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;let o=s.items,a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,\"progress\")),o.length||(s.running=!1,this._notify(n,s,t,\"complete\"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let s=e.items,n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}},vt=new Ms,An=\"transparent\",xr={boolean(i,t,e){return e>.5?t:i},color(i,t,e){let s=Gi(i||An),n=s.valid&&Gi(t||An);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}},ks=class{constructor(t,e,s,n){let o=e[s];n=ae([t.to,n,o,t.from]);let a=ae([t.from,o,n]);this._active=!0,this._fn=t.fn||xr[t.type||typeof a],this._easing=Jt[t.easing]||Jt.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);let n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=ae([t.to,e,n,t.from]),this._from=ae([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to,l;if(this._active=o!==r&&(a||e<s),!this._active){this._target[n]=r,this._notify(!0);return}if(e<0){this._target[n]=o;return}l=e/s%2,l=a&&l>1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){let e=t?\"res\":\"rej\",s=this._promises||[];for(let n=0;n<s.length;n++)s[n][e]()}},vi=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!T(t))return;let e=Object.keys(V.animation),s=this._properties;Object.getOwnPropertyNames(t).forEach(n=>{let o=t[n];if(!T(o))return;let a={};for(let r of e)a[r]=o[r];(z(o.properties)&&o.properties||[n]).forEach(r=>{(r===n||!s.has(r))&&s.set(r,a)})})}_animateOptions(t,e){let s=e.options,n=yr(t,s);if(!n)return[];let o=this._createAnimations(n,s);return s.$shared&&_r(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){let s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now(),l;for(l=a.length-1;l>=0;--l){let c=a[l];if(c.charAt(0)===\"$\")continue;if(c===\"options\"){n.push(...this._animateOptions(t,e));continue}let h=e[c],d=o[c],u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new ks(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let s=this._createAnimations(t,e);if(s.length)return vt.add(this._chart,s),!0}};function _r(i,t){let e=[],s=Object.keys(t);for(let n=0;n<s.length;n++){let o=i[s[n]];o&&o.active()&&e.push(o.wait())}return Promise.all(e)}function yr(i,t){if(!t)return;let e=i.options;if(!e){i.options=t;return}return e.$shared&&(i.options=e=Object.assign({},e,{$shared:!1,$animations:{}})),e}function Tn(i,t){let e=i&&i.options||{},s=e.reverse,n=e.min===void 0?t:0,o=e.max===void 0?t:0;return{start:s?o:n,end:s?n:o}}function vr(i,t,e){if(e===!1)return!1;let s=Tn(i,e),n=Tn(t,e);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}function Mr(i){let t,e,s,n;return T(i)?(t=i.top,e=i.right,s=i.bottom,n=i.left):t=e=s=n=i,{top:t,right:e,bottom:s,left:n,disabled:i===!1}}function Ao(i,t){let e=[],s=i._getSortedDatasetMetas(t),n,o;for(n=0,o=s.length;n<o;++n)e.push(s[n].index);return e}function Ln(i,t,e,s={}){let n=i.keys,o=s.mode===\"single\",a,r,l,c;if(t===null)return;let h=!1;for(a=0,r=n.length;a<r;++a){if(l=+n[a],l===e){if(h=!0,s.all)continue;break}c=i.values[l],N(c)&&(o||t===0||lt(t)===lt(c))&&(t+=c)}return!h&&!s.all?0:t}function kr(i,t){let{iScale:e,vScale:s}=t,n=e.axis===\"x\"?\"x\":\"y\",o=s.axis===\"x\"?\"x\":\"y\",a=Object.keys(i),r=new Array(a.length),l,c,h;for(l=0,c=a.length;l<c;++l)h=a[l],r[l]={[n]:h,[o]:i[h]};return r}function ds(i,t){let e=i&&i.options.stacked;return e||e===void 0&&t.stack!==void 0}function wr(i,t,e){return`${i.id}.${t.id}.${e.stack||e.type}`}function Sr(i){let{min:t,max:e,minDefined:s,maxDefined:n}=i.getUserBounds();return{min:s?t:Number.NEGATIVE_INFINITY,max:n?e:Number.POSITIVE_INFINITY}}function Pr(i,t,e){let s=i[t]||(i[t]={});return s[e]||(s[e]={})}function Rn(i,t,e,s){for(let n of t.getMatchingVisibleMetas(s).reverse()){let o=i[n.index];if(e&&o>0||!e&&o<0)return n.index}return null}function En(i,t){let{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=wr(o,a,s),d=t.length,u;for(let f=0;f<d;++f){let g=t[f],{[l]:p,[c]:m}=g,b=g._stacks||(g._stacks={});u=b[c]=Pr(n,h,p),u[r]=m,u._top=Rn(u,a,!0,s.type),u._bottom=Rn(u,a,!1,s.type);let x=u._visualValues||(u._visualValues={});x[r]=m}}function us(i,t){let e=i.scales;return Object.keys(e).filter(s=>e[s].axis===t).shift()}function Dr(i,t){return yt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:\"default\",type:\"dataset\"})}function Or(i,t,e){return yt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:\"default\",type:\"data\"})}function Oe(i,t){let e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(let n of t){let o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e],o[s]._visualValues!==void 0&&o[s]._visualValues[e]!==void 0&&delete o[s]._visualValues[e]}}}var fs=i=>i===\"reset\"||i===\"none\",In=(i,t)=>t?i:Object.assign({},i),Cr=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:Ao(e,!0),values:null},it=class{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ds(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(\"filler\")&&console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\")}updateIndex(t){this.index!==t&&Oe(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d===\"x\"?u:d===\"r\"?g:f,o=e.xAxisID=D(s.xAxisID,us(t,\"x\")),a=e.yAxisID=D(s.yAxisID,us(t,\"y\")),r=e.rAxisID=D(s.rAxisID,us(t,\"r\")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){let t=this._cachedMeta;this._data&&ji(this._data,this),t._stacked&&Oe(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(T(e)){let n=this._cachedMeta;this._data=kr(e,n)}else if(s!==e){if(s){ji(s,this);let n=this._cachedMeta;Oe(n),n._parsed=[]}e&&Object.isExtensible(e)&&dn(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,s=this.getDataset(),n=!1;this._dataCheck();let o=e._stacked;e._stacked=ds(e.vScale,e),e.stack!==s.stack&&(n=!0,Oe(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&(En(this,e._parsed),e._stacked=ds(e.vScale,e))}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis,l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{z(n[t])?u=this.parseArrayData(s,n,t,e):T(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);let f=()=>d[r]===null||c&&d[r]<c[r];for(h=0;h<e;++h)s._parsed[h+t]=d=u[h],l&&(f()&&(l=!1),c=d);s._sorted=l}a&&En(this,u)}parsePrimitiveData(t,e,s,n){let{iScale:o,vScale:a}=t,r=o.axis,l=a.axis,c=o.getLabels(),h=o===a,d=new Array(n),u,f,g;for(u=0,f=n;u<f;++u)g=u+s,d[u]={[r]:h||o.parse(c[g],g),[l]:a.parse(e[g],g)};return d}parseArrayData(t,e,s,n){let{xScale:o,yScale:a}=t,r=new Array(n),l,c,h,d;for(l=0,c=n;l<c;++l)h=l+s,d=e[h],r[l]={x:o.parse(d[0],h),y:a.parse(d[1],h)};return r}parseObjectData(t,e,s,n){let{xScale:o,yScale:a}=t,{xAxisKey:r=\"x\",yAxisKey:l=\"y\"}=this._parsing,c=new Array(n),h,d,u,f;for(h=0,d=n;h<d;++h)u=h+s,f=e[u],c[h]={x:o.parse(_t(f,r),u),y:a.parse(_t(f,l),u)};return c}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,s){let n=this.chart,o=this._cachedMeta,a=e[t.axis],r={keys:Ao(n,!0),values:e._stacks[t.axis]._visualValues};return Ln(r,a,o.index,{mode:s})}updateRangeFromParsed(t,e,s,n){let o=s[e.axis],a=o===null?NaN:o,r=n&&s._stacks[e.axis];n&&r&&(n.values=r,a=Ln(n,o,this._cachedMeta.index)),t.min=Math.min(t.min,a),t.max=Math.max(t.max,a)}getMinMax(t,e){let s=this._cachedMeta,n=s._parsed,o=s._sorted&&t===s.iScale,a=n.length,r=this._getOtherScale(t),l=Cr(e,s,this.chart),c={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:d}=Sr(r),u,f;function g(){f=n[u];let p=f[r.axis];return!N(f[t.axis])||h>p||d<p}for(u=0;u<a&&!(!g()&&(this.updateRangeFromParsed(c,t,f,l),o));++u);if(o){for(u=a-1;u>=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,s=[],n,o,a;for(n=0,o=e.length;n<o;++n)a=e[n][t.axis],N(a)&&s.push(a);return s}getMaxOverflow(){return!1}getLabelAndValue(t){let e=this._cachedMeta,s=e.iScale,n=e.vScale,o=this.getParsed(t);return{label:s?\"\"+s.getLabelForValue(o[s.axis]):\"\",value:n?\"\"+n.getLabelForValue(o[n.axis]):\"\"}}_update(t){let e=this._cachedMeta;this.update(t||\"default\"),e._clip=Mr(D(this.options.clip,vr(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){let t=this._ctx,e=this.chart,s=this._cachedMeta,n=s.data||[],o=e.chartArea,a=[],r=this._drawStart||0,l=this._drawCount||n.length-r,c=this.options.drawActiveElementsOnTop,h;for(s.dataset&&s.dataset.draw(t,o,r,l),h=r;h<r+l;++h){let d=n[h];d.hidden||(d.active&&c?a.push(d):d.draw(t,o))}for(h=0;h<a.length;++h)a[h].draw(t,o)}getStyle(t,e){let s=e?\"active\":\"default\";return t===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(s):this.resolveDataElementOptions(t||0,s)}getContext(t,e,s){let n=this.getDataset(),o;if(t>=0&&t<this._cachedMeta.data.length){let a=this._cachedMeta.data[t];o=a.$context||(a.$context=Or(this.getContext(),t,a)),o.parsed=this.getParsed(t),o.raw=n.data[t],o.index=o.dataIndex=t}else o=this.$context||(this.$context=Dr(this.chart.getContext(),this.index)),o.dataset=n,o.index=o.datasetIndex=this.index;return o.active=!!e,o.mode=s,o}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",s){let n=e===\"active\",o=this._cachedDataOpts,a=t+\"-\"+e,r=o[a],l=this.enableOptionSharing&&ee(s);if(r)return In(r,l);let c=this.chart.config,h=c.datasetElementScopeKeys(this._type,t),d=n?[`${t}Hover`,\"hover\",t,\"\"]:[t,\"\"],u=c.getOptionScopes(this.getDataset(),h),f=Object.keys(V.elements[t]),g=()=>this.getContext(s,n,e),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(In(p,l))),p}_resolveAnimations(t,e,s){let n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){let h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}let c=new vi(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||fs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){fs(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!fs(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;let o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,\"active\",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,\"active\",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){let e=this._data,s=this._cachedMeta.data;for(let[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];let n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o<n&&this._removeElements(o,n-o)}_insertElements(t,e,s=!0){let n=this._cachedMeta,o=n.data,a=t+e,r,l=c=>{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;r<a;++r)o[r]=new this.dataElementType;this._parsing&&l(n._parsed),this.parse(t,e),s&&this.updateElements(o,t,e,\"reset\")}updateElements(t,e,s,n){}_removeElements(t,e){let s=this._cachedMeta;if(this._parsing){let n=s._parsed.splice(t,e);s._stacked&&Oe(s,n)}s.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{let[e,s,n]=t;this[e](s,n)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){let t=arguments.length;this._sync([\"_insertElements\",this.getDataset().data.length-t,t])}_onDataPop(){this._sync([\"_removeElements\",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync([\"_removeElements\",0,1])}_onDataSplice(t,e){e&&this._sync([\"_removeElements\",t,e]);let s=arguments.length-2;s&&this._sync([\"_insertElements\",t,s])}_onDataUnshift(){this._sync([\"_insertElements\",0,arguments.length])}};M(it,\"defaults\",{}),M(it,\"datasetElementType\",null),M(it,\"dataElementType\",null);function Ar(i,t){if(!i._cache.$bar){let e=i.getMatchingVisibleMetas(t),s=[];for(let n=0,o=e.length;n<o;n++)s=s.concat(e[n].controller.getAllParsedValues(i));i._cache.$bar=$i(s.sort((n,o)=>n-o))}return i._cache.$bar}function Tr(i){let t=i.iScale,e=Ar(t,i.type),s=t._length,n,o,a,r,l=()=>{a===32767||a===-32768||(ee(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n<o;++n)a=t.getPixelForValue(e[n]),l();for(r=void 0,n=0,o=t.ticks.length;n<o;++n)a=t.getPixelForTick(n),l();return s}function Lr(i,t,e,s){let n=e.barThickness,o,a;return A(n)?(o=t.min*e.categoryPercentage,a=e.barPercentage):(o=n*s,a=1),{chunk:o/s,ratio:a,start:t.pixels[i]-o/2}}function Rr(i,t,e,s){let n=t.pixels,o=n[i],a=i>0?n[i-1]:null,r=i<n.length-1?n[i+1]:null,l=e.categoryPercentage;a===null&&(a=o-(r===null?t.end-t.start:r-o)),r===null&&(r=o+o-a);let c=o-(o-Math.min(a,r))/2*l;return{chunk:Math.abs(r-a)/2*l/s,ratio:e.barPercentage,start:c}}function Er(i,t,e,s){let n=e.parse(i[0],s),o=e.parse(i[1],s),a=Math.min(n,o),r=Math.max(n,o),l=a,c=r;Math.abs(a)>Math.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function To(i,t,e,s){return z(i)?Er(i,t,e,s):t[e.axis]=e.parse(i,s),t}function Fn(i,t,e,s){let n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[],c,h,d,u;for(c=e,h=e+s;c<h;++c)u=t[c],d={},d[n.axis]=r||n.parse(a[c],c),l.push(To(u,d,o,c));return l}function gs(i){return i&&i.barStart!==void 0&&i.barEnd!==void 0}function Ir(i,t,e){return i!==0?lt(i):(t.isHorizontal()?1:-1)*(t.min>=e?1:-1)}function Fr(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e=\"left\",s=\"right\"):(t=i.base<i.y,e=\"bottom\",s=\"top\"),t?(n=\"end\",o=\"start\"):(n=\"start\",o=\"end\"),{start:e,end:s,reverse:t,top:n,bottom:o}}function zr(i,t,e,s){let n=t.borderSkipped,o={};if(!n){i.borderSkipped=o;return}if(n===!0){i.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}let{start:a,end:r,reverse:l,top:c,bottom:h}=Fr(i);n===\"middle\"&&e&&(i.enableBorderRadius=!0,(e._top||0)===s?n=c:(e._bottom||0)===s?n=h:(o[zn(h,a,r,l)]=!0,n=c)),o[zn(n,a,r,l)]=!0,i.borderSkipped=o}function zn(i,t,e,s){return s?(i=Br(i,t,e),i=Bn(i,e,t)):i=Bn(i,t,e),i}function Br(i,t,e){return i===t?e:i===e?t:i}function Bn(i,t,e){return i===\"start\"?t:i===\"end\"?e:i}function Vr(i,{inflateAmount:t},e){i.inflateAmount=t===\"auto\"?e===1?.33:0:t}var le=class extends it{parsePrimitiveData(t,e,s,n){return Fn(t,e,s,n)}parseArrayData(t,e,s,n){return Fn(t,e,s,n)}parseObjectData(t,e,s,n){let{iScale:o,vScale:a}=t,{xAxisKey:r=\"x\",yAxisKey:l=\"y\"}=this._parsing,c=o.axis===\"x\"?r:l,h=a.axis===\"x\"?r:l,d=[],u,f,g,p;for(u=s,f=s+n;u<f;++u)p=e[u],g={},g[o.axis]=o.parse(_t(p,c),u),d.push(To(_t(p,h),g,a,u));return d}updateRangeFromParsed(t,e,s,n){super.updateRangeFromParsed(t,e,s,n);let o=s._custom;o&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,o.min),t.max=Math.max(t.max,o.max))}getMaxOverflow(){return 0}getLabelAndValue(t){let e=this._cachedMeta,{iScale:s,vScale:n}=e,o=this.getParsed(t),a=o._custom,r=gs(a)?\"[\"+a.start+\", \"+a.end+\"]\":\"\"+n.getLabelForValue(o[n.axis]);return{label:\"\"+s.getLabelForValue(o[s.axis]),value:r}}initialize(){this.enableOptionSharing=!0,super.initialize();let t=this._cachedMeta;t.stack=this.getDataset().stack}update(t){let e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,s,n){let o=n===\"reset\",{index:a,_cachedMeta:{vScale:r}}=this,l=r.getBasePixel(),c=r.isHorizontal(),h=this._getRuler(),{sharedOptions:d,includeOptions:u}=this._getSharedOptions(e,n);for(let f=e;f<e+s;f++){let g=this.getParsed(f),p=o||A(g[r.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),m=this._calculateBarIndexPixels(f,h),b=(g._stacks||{})[r.axis],x={horizontal:c,base:p.base,enableBorderRadius:!b||gs(g._custom)||a===b._top||a===b._bottom,x:c?p.head:m.center,y:c?m.center:p.head,height:c?m.size:Math.abs(p.size),width:c?Math.abs(p.size):m.size};u&&(x.options=d||this.resolveDataElementOptions(f,t[f].active?\"active\":n));let v=x.options||t[f].options;zr(x,v,b,a),Vr(x,v,h.ratio),this.updateElement(t[f],f,x,n)}}_getStacks(t,e){let{iScale:s}=this._cachedMeta,n=s.getMatchingVisibleMetas(this._type).filter(h=>h.controller.options.grouped),o=s.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[s.axis],c=h=>{let d=h._parsed.find(f=>f[s.axis]===l),u=d&&d[h.vScale.axis];if(A(u)||isNaN(u))return!0};for(let h of n)if(!(e!==void 0&&c(h))&&((o===!1||a.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&a.push(h.stack),h.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(s=>t[s].axis===e).shift()}_getAxis(){let t={},e=this.getFirstScaleIdForIndexAxis();for(let s of this.chart.data.datasets)t[D(this.chart.options.indexAxis===\"x\"?s.xAxisID:s.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,s){let n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){let t=this.options,e=this._cachedMeta,s=e.iScale,n=[],o,a;for(o=0,a=e.data.length;o<a;++o)n.push(s.getPixelForValue(this.getParsed(o)[s.axis],o));let r=t.barThickness;return{min:r||Tr(e),pixels:n,start:s._startPixel,end:s._endPixel,stackCount:this._getStackCount(),scale:s,grouped:t.grouped,ratio:r?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){let{_cachedMeta:{vScale:e,_stacked:s,index:n},options:{base:o,minBarLength:a}}=this,r=o||0,l=this.getParsed(t),c=l._custom,h=gs(c),d=l[e.axis],u=0,f=s?this.applyStack(e,l,s):d,g,p;f!==d&&(u=f-d,f=d),h&&(d=c.barStart,f=c.barEnd-c.barStart,d!==0&&lt(d)!==lt(c.barEnd)&&(u=0),u+=d);let m=!A(o)&&!h?o:u,b=e.getPixelForValue(m);if(this.chart.getDataVisibility(t)?g=e.getPixelForValue(u+f):g=b,p=g-b,Math.abs(p)<a){p=Ir(p,e,r)*a,d===r&&(b-=p/2);let x=e.getPixelForDecimal(0),v=e.getPixelForDecimal(1),y=Math.min(x,v),_=Math.max(x,v);b=Math.max(Math.min(b,_),y),g=b+p,s&&!h&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(g)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){let x=lt(p)*e.getLineWidthForValue(r)/2;b+=x,p-=x}return{size:p,base:b,head:g,center:g+p/2}}_calculateBarIndexPixels(t,e){let s=e.scale,n=this.options,o=n.skipNull,a=D(n.maxBarThickness,1/0),r,l,c=this._getAxisCount();if(e.grouped){let h=o?this._getStackCount(t):e.stackCount,d=n.barThickness===\"flex\"?Rr(t,e,n,h*c):Lr(t,e,n,h*c),u=this.chart.options.indexAxis===\"x\"?this.getDataset().xAxisID:this.getDataset().yAxisID,f=this._getAxis().indexOf(D(u,this.getFirstScaleIdForIndexAxis())),g=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0)+f;r=d.start+d.chunk*g+d.chunk/2,l=Math.min(a,d.chunk*d.ratio)}else r=s.getPixelForValue(this.getParsed(t)[s.axis],t),l=Math.min(a,e.min*e.ratio);return{base:r-l/2,head:r+l/2,center:r,size:l}}draw(){let t=this._cachedMeta,e=t.vScale,s=t.data,n=s.length,o=0;for(;o<n;++o)this.getParsed(o)[e.axis]!==null&&!s[o].hidden&&s[o].draw(this._ctx)}};M(le,\"id\",\"bar\"),M(le,\"defaults\",{datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}}),M(le,\"overrides\",{scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}});var ce=class extends it{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,s,n){let o=super.parsePrimitiveData(t,e,s,n);for(let a=0;a<o.length;a++)o[a]._custom=this.resolveDataElementOptions(a+s).radius;return o}parseArrayData(t,e,s,n){let o=super.parseArrayData(t,e,s,n);for(let a=0;a<o.length;a++){let r=e[s+a];o[a]._custom=D(r[2],this.resolveDataElementOptions(a+s).radius)}return o}parseObjectData(t,e,s,n){let o=super.parseObjectData(t,e,s,n);for(let a=0;a<o.length;a++){let r=e[s+a];o[a]._custom=D(r&&r.r&&+r.r,this.resolveDataElementOptions(a+s).radius)}return o}getMaxOverflow(){let t=this._cachedMeta.data,e=0;for(let s=t.length-1;s>=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y),c=a._custom;return{label:s[t]||\"\",value:\"(\"+r+\", \"+l+(c?\", \"+c:\"\")+\")\"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){let o=n===\"reset\",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;u<e+s;u++){let f=t[u],g=!o&&this.getParsed(u),p={},m=p[h]=o?a.getPixelForDecimal(.5):a.getPixelForValue(g[h]),b=p[d]=o?r.getBasePixel():r.getPixelForValue(g[d]);p.skip=isNaN(m)||isNaN(b),c&&(p.options=l||this.resolveDataElementOptions(u,f.active?\"active\":n),o&&(p.options.radius=0)),this.updateElement(f,u,p,n)}}resolveDataElementOptions(t,e){let s=this.getParsed(t),n=super.resolveDataElementOptions(t,e);n.$shared&&(n=Object.assign({},n,{$shared:!1}));let o=n.radius;return e!==\"active\"&&(n.radius=0),n.radius+=D(s&&s._custom,o),n}};M(ce,\"id\",\"bubble\"),M(ce,\"defaults\",{datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}}),M(ce,\"overrides\",{scales:{x:{type:\"linear\"},y:{type:\"linear\"}}});function Wr(i,t,e){let s=1,n=1,o=0,a=0;if(t<B){let r=i,l=r+t,c=Math.cos(r),h=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(v,y,_)=>se(v,r,l,!0)?1:Math.max(y,y*e,_,_*e),g=(v,y,_)=>se(v,r,l,!0)?-1:Math.min(y,y*e,_,_*e),p=f(0,c,d),m=f(H,h,u),b=g(R,c,d),x=g(R+H,h,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}var kt=class extends it{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(T(s[t])){let{key:l=\"value\"}=this._parsing;o=c=>+_t(s[c],l)}let a,r;for(a=t,r=t+e;a<r;++a)n._parsed[a]=o(a)}}_getRotation(){return ot(this.options.rotation-90)}_getCircumference(){return ot(this.options.circumference)}_getRotationExtents(){let t=B,e=-B;for(let s=0;s<this.chart.data.datasets.length;++s)if(this.chart.isDatasetVisible(s)&&this.chart.getDatasetMeta(s).type===this._type){let n=this.chart.getDatasetMeta(s).controller,o=n._getRotation(),a=n._getCircumference();t=Math.min(t,o),e=Math.max(e,o+a)}return{rotation:t,circumference:e-t}}update(t){let e=this.chart,{chartArea:s}=e,n=this._cachedMeta,o=n.data,a=this.getMaxBorderWidth()+this.getMaxOffset(o)+this.options.spacing,r=Math.max((Math.min(s.width,s.height)-a)/2,0),l=Math.min(en(this.options.cutout,r),1),c=this._getRingWeight(this.index),{circumference:h,rotation:d}=this._getRotationExtents(),{ratioX:u,ratioY:f,offsetX:g,offsetY:p}=Wr(d,h,l),m=(s.width-a)/u,b=(s.height-a)/f,x=Math.max(Math.min(m,b)/2,0),v=zi(this.options.radius,x),y=Math.max(v*l,0),_=(v-y)/this._getVisibleDatasetWeightTotal();this.offsetX=g*v,this.offsetY=p*v,n.total=this.calculateTotal(),this.outerRadius=v-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*c,0),this.updateElements(o,0,o.length,t)}_circumference(t,e){let s=this.options,n=this._cachedMeta,o=this._getCircumference();return e&&s.animation.animateRotate||!this.chart.getDataVisibility(t)||n._parsed[t]===null||n.data[t].hidden?0:this.calculateCircumference(n._parsed[t]*o/B)}updateElements(t,e,s,n){let o=n===\"reset\",a=this.chart,r=a.chartArea,c=a.options.animation,h=(r.left+r.right)/2,d=(r.top+r.bottom)/2,u=o&&c.animateScale,f=u?0:this.innerRadius,g=u?0:this.outerRadius,{sharedOptions:p,includeOptions:m}=this._getSharedOptions(e,n),b=this._getRotation(),x;for(x=0;x<e;++x)b+=this._circumference(x,o);for(x=e;x<e+s;++x){let v=this._circumference(x,o),y=t[x],_={x:h+this.offsetX,y:d+this.offsetY,startAngle:b,endAngle:b+v,circumference:v,outerRadius:g,innerRadius:f};m&&(_.options=p||this.resolveDataElementOptions(x,y.active?\"active\":n)),b+=v,this.updateElement(y,x,_,n)}}calculateTotal(){let t=this._cachedMeta,e=t.data,s=0,n;for(n=0;n<e.length;n++){let o=t._parsed[n];o!==null&&!isNaN(o)&&this.chart.getDataVisibility(n)&&!e[n].hidden&&(s+=Math.abs(o))}return s}calculateCircumference(t){let e=this._cachedMeta.total;return e>0&&!isNaN(t)?B*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=ne(e._parsed[t],s.options.locale);return{label:n[t]||\"\",value:o}}getMaxBorderWidth(t){let e=0,s=this.chart,n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;n<o;++n)if(s.isDatasetVisible(n)){a=s.getDatasetMeta(n),t=a.data,r=a.controller;break}}if(!t)return 0;for(n=0,o=t.length;n<o;++n)l=r.resolveDataElementOptions(n),l.borderAlign!==\"inner\"&&(e=Math.max(e,l.borderWidth||0,l.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let s=0,n=t.length;s<n;++s){let o=this.resolveDataElementOptions(s);e=Math.max(e,o.offset||0,o.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let s=0;s<t;++s)this.chart.isDatasetVisible(s)&&(e+=this._getRingWeight(s));return e}_getRingWeight(t){return Math.max(D(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}};M(kt,\"id\",\"doughnut\"),M(kt,\"defaults\",{datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\",\"spacing\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",spacing:0,indexAxis:\"r\"}),M(kt,\"descriptors\",{_scriptable:t=>t!==\"spacing\",_indexable:t=>t!==\"spacing\"&&!t.startsWith(\"borderDash\")&&!t.startsWith(\"hoverBorderDash\")}),M(kt,\"overrides\",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){let e=t.data,{labels:{pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return e.labels.length&&e.datasets.length?e.labels.map((l,c)=>{let d=t.getDatasetMeta(0).controller.getStyle(c);return{text:l,fillStyle:d.backgroundColor,fontColor:o,hidden:!t.getDataVisibility(c),lineDash:d.borderDash,lineDashOffset:d.borderDashOffset,lineJoin:d.borderJoinStyle,lineWidth:d.borderWidth,strokeStyle:d.borderColor,textAlign:n,pointStyle:s,borderRadius:a&&(r||d.borderRadius),index:c}}):[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}}});var he=class extends it{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled,{start:r,count:l}=Xi(e,n,a);this._drawStart=r,this._drawCount=l,Ki(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){let o=n===\"reset\",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=Vt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n===\"none\",x=e+s,v=t.length,y=e>0&&this.getParsed(e-1);for(let _=0;_<v;++_){let k=t[_],w=b?k:{};if(_<e||_>=x){w.skip=!0;continue}let S=this.getParsed(_),P=A(S[f]),O=w[u]=a.getPixelForValue(S[u],_),C=w[f]=o||P?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,S,l):S[f],_);w.skip=isNaN(O)||isNaN(C)||P,w.stop=_>0&&Math.abs(S[u]-y[u])>m,p&&(w.parsed=S,w.raw=c.data[_]),d&&(w.options=h||this.resolveDataElementOptions(_,k.active?\"active\":n)),b||this.updateElement(k,_,w,n),y=S}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;let o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}};M(he,\"id\",\"line\"),M(he,\"defaults\",{datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1}),M(he,\"overrides\",{scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}});var Yt=class extends it{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=ne(e._parsed[t].r,s.options.locale);return{label:n[t]||\"\",value:o}}parseObjectData(t,e,s,n){return ss.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{let o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(o<e.min&&(e.min=o),o>e.max&&(e.max=o))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){let o=n===\"reset\",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*R,f=u,g,p=360/this.countVisibleElements();for(g=0;g<e;++g)f+=this._computeAngle(g,n,p);for(g=e;g<e+s;g++){let m=t[g],b=f,x=f+this._computeAngle(g,n,p),v=a.getDataVisibility(g)?c.getDistanceFromCenterForValue(this.getParsed(g).r):0;f=x,o&&(l.animateScale&&(v=0),l.animateRotate&&(b=x=u));let y={x:h,y:d,innerRadius:0,outerRadius:v,startAngle:b,endAngle:x,options:this.resolveDataElementOptions(g,m.active?\"active\":n)};this.updateElement(m,g,y,n)}}countVisibleElements(){let t=this._cachedMeta,e=0;return t.data.forEach((s,n)=>{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?ot(this.resolveDataElementOptions(t,e).angle||s):0}};M(Yt,\"id\",\"polarArea\"),M(Yt,\"defaults\",{dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0}),M(Yt,\"overrides\",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){let e=t.data;if(e.labels.length&&e.datasets.length){let{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{let l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});var Re=class extends kt{};M(Re,\"id\",\"pie\"),M(Re,\"defaults\",{cutout:0,rotation:0,circumference:360,radius:\"100%\"});var de=class extends it{getLabelAndValue(t){let e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return ss.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!==\"resize\"){let a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);let r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){let o=this._cachedMeta.rScale,a=n===\"reset\";for(let r=e;r<e+s;r++){let l=t[r],c=this.resolveDataElementOptions(r,l.active?\"active\":n),h=o.getPointPositionForValue(r,this.getParsed(r).r),d=a?o.xCenter:h.x,u=a?o.yCenter:h.y,f={x:d,y:u,angle:h.angle,skip:isNaN(d)||isNaN(u),options:c};this.updateElement(l,r,f,n)}}};M(de,\"id\",\"radar\"),M(de,\"defaults\",{datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}}),M(de,\"overrides\",{aspectRatio:1,scales:{r:{type:\"radialLinear\"}}});var ue=class extends it{getLabelAndValue(t){let e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y);return{label:s[t]||\"\",value:\"(\"+r+\", \"+l+\")\"}}update(t){let e=this._cachedMeta,{data:s=[]}=e,n=this.chart._animationsDisabled,{start:o,count:a}=Xi(e,s,n);if(this._drawStart=o,this._drawCount=a,Ki(e)&&(o=0,a=s.length),this.options.showLine){this.datasetElementType||this.addElements();let{dataset:r,_dataset:l}=e;r._chart=this.chart,r._datasetIndex=this.index,r._decimated=!!l._decimated,r.points=s;let c=this.resolveDatasetElementOptions(t);c.segment=this.options.segment,this.updateElement(r,void 0,{animated:!n,options:c},t)}else this.datasetElementType&&(delete e.dataset,this.datasetElementType=!1);this.updateElements(s,o,a,t)}addElements(){let{showLine:t}=this.options;!this.datasetElementType&&t&&(this.datasetElementType=this.chart.registry.getElement(\"line\")),super.addElements()}updateElements(t,e,s,n){let o=n===\"reset\",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,h=this.resolveDataElementOptions(e,n),d=this.getSharedOptions(h),u=this.includeOptions(n,d),f=a.axis,g=r.axis,{spanGaps:p,segment:m}=this.options,b=Vt(p)?p:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||o||n===\"none\",v=e>0&&this.getParsed(e-1);for(let y=e;y<e+s;++y){let _=t[y],k=this.getParsed(y),w=x?_:{},S=A(k[g]),P=w[f]=a.getPixelForValue(k[f],y),O=w[g]=o||S?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,k,l):k[g],y);w.skip=isNaN(P)||isNaN(O)||S,w.stop=y>0&&Math.abs(k[f]-v[f])>b,m&&(w.parsed=k,w.raw=c.data[y]),u&&(w.options=d||this.resolveDataElementOptions(y,_.active?\"active\":n)),x||this.updateElement(_,y,w,n),v=k}this.updateSharedOptions(d,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}let s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;let o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}};M(ue,\"id\",\"scatter\"),M(ue,\"defaults\",{datasetElementType:!1,dataElementType:\"point\",showLine:!1,fill:!1}),M(ue,\"overrides\",{interaction:{mode:\"point\"},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}});var Nr=Object.freeze({__proto__:null,BarController:le,BubbleController:ce,DoughnutController:kt,LineController:he,PieController:Re,PolarAreaController:Yt,RadarController:de,ScatterController:ue});function Nt(){throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\")}var ws=class i{constructor(t){M(this,\"options\");this.options=t||{}}static override(t){Object.assign(i.prototype,t)}init(){}formats(){return Nt()}parse(){return Nt()}format(){return Nt()}add(){return Nt()}diff(){return Nt()}startOf(){return Nt()}endOf(){return Nt()}},Hr={_date:ws};function jr(i,t,e,s){let{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale,l=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null;if(r&&t===r.axis&&t!==\"r\"&&a&&o.length){let c=r._reversePixels?ln:ct;if(s){if(n._sharedOptions){let h=o[0],d=typeof h.getRange==\"function\"&&h.getRange(t);if(d){let u=c(o,t,e-d),f=c(o,t,e+d);return{lo:u.lo,hi:f.hi}}}}else{let h=c(o,t,e);if(l){let{vScale:d}=n._cachedMeta,{_parsed:u}=i,f=u.slice(0,h.lo+1).reverse().findIndex(p=>!A(p[d.axis]));h.lo-=Math.max(0,f);let g=u.slice(h.hi).findIndex(p=>!A(p[d.axis]));h.hi+=Math.max(0,g)}return h}}return{lo:0,hi:o.length-1}}function $e(i,t,e,s,n){let o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r<l;++r){let{index:c,data:h}=o[r],{lo:d,hi:u}=jr(o[r],t,a,n);for(let f=d;f<=u;++f){let g=h[f];g.skip||s(g,c,f)}}}function $r(i){let t=i.indexOf(\"x\")!==-1,e=i.indexOf(\"y\")!==-1;return function(s,n){let o=t?Math.abs(s.x-n.x):0,a=e?Math.abs(s.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(a,2))}}function ps(i,t,e,s,n){let o=[];return!n&&!i.isPointInArea(t)||$e(i,e,t,function(r,l,c){!n&&!ht(r,i.chartArea,0)||r.inRange(t.x,t.y,s)&&o.push({element:r,datasetIndex:l,index:c})},!0),o}function Yr(i,t,e,s){let n=[];function o(a,r,l){let{startAngle:c,endAngle:h}=a.getProps([\"startAngle\",\"endAngle\"],s),{angle:d}=Hi(a,{x:t.x,y:t.y});se(d,c,h)&&n.push({element:a,datasetIndex:r,index:l})}return $e(i,e,t,o),n}function Ur(i,t,e,s,n,o){let a=[],r=$r(e),l=Number.POSITIVE_INFINITY;function c(h,d,u){let f=h.inRange(t.x,t.y,n);if(s&&!f)return;let g=h.getCenterPoint(n);if(!(!!o||i.isPointInArea(g))&&!f)return;let m=r(t,g);m<l?(a=[{element:h,datasetIndex:d,index:u}],l=m):m===l&&a.push({element:h,datasetIndex:d,index:u})}return $e(i,e,t,c),a}function ms(i,t,e,s,n,o){return!o&&!i.isPointInArea(t)?[]:e===\"r\"&&!s?Yr(i,t,e,n):Ur(i,t,e,s,n,o)}function Vn(i,t,e,s,n){let o=[],a=e===\"x\"?\"inXRange\":\"inYRange\",r=!1;return $e(i,e,t,(l,c,h)=>{l[a]&&l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var Xr={evaluateInteractionItems:$e,modes:{index(i,t,e,s){let n=Lt(t,i),o=e.axis||\"x\",a=e.includeInvisible||!1,r=e.intersect?ps(i,n,o,s,a):ms(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{let h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){let n=Lt(t,i),o=e.axis||\"xy\",a=e.includeInvisible||!1,r=e.intersect?ps(i,n,o,s,a):ms(i,n,o,!1,s,a);if(r.length>0){let l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;h<c.length;++h)r.push({element:c[h],datasetIndex:l,index:h})}return r},point(i,t,e,s){let n=Lt(t,i),o=e.axis||\"xy\",a=e.includeInvisible||!1;return ps(i,n,o,s,a)},nearest(i,t,e,s){let n=Lt(t,i),o=e.axis||\"xy\",a=e.includeInvisible||!1;return ms(i,n,o,e.intersect,s,a)},x(i,t,e,s){let n=Lt(t,i);return Vn(i,n,\"x\",e.intersect,s)},y(i,t,e,s){let n=Lt(t,i);return Vn(i,n,\"y\",e.intersect,s)}}},Lo=[\"left\",\"top\",\"right\",\"bottom\"];function Ce(i,t){return i.filter(e=>e.pos===t)}function Wn(i,t){return i.filter(e=>Lo.indexOf(e.pos)===-1&&e.box.axis===t)}function Ae(i,t){return i.sort((e,s)=>{let n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Kr(i){let t=[],e,s,n,o,a,r;for(e=0,s=(i||[]).length;e<s;++e)n=i[e],{position:o,options:{stack:a,stackWeight:r=1}}=n,t.push({index:e,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return t}function qr(i){let t={};for(let e of i){let{stack:s,pos:n,stackWeight:o}=e;if(!s||!Lo.includes(n))continue;let a=t[s]||(t[s]={count:0,placed:0,weight:0,size:0});a.count++,a.weight+=o}return t}function Gr(i,t){let e=qr(i),{vBoxMaxWidth:s,hBoxMaxHeight:n}=t,o,a,r;for(o=0,a=i.length;o<a;++o){r=i[o];let{fullSize:l}=r.box,c=e[r.stack],h=c&&r.stackWeight/c.weight;r.horizontal?(r.width=h?h*s:l&&t.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:l&&t.availableHeight)}return e}function Jr(i){let t=Kr(i),e=Ae(t.filter(c=>c.box.fullSize),!0),s=Ae(Ce(t,\"left\"),!0),n=Ae(Ce(t,\"right\")),o=Ae(Ce(t,\"top\"),!0),a=Ae(Ce(t,\"bottom\")),r=Wn(t,\"x\"),l=Wn(t,\"y\");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ce(t,\"chartArea\"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function Nn(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function Ro(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function Zr(i,t,e,s){let{pos:n,box:o}=e,a=i.maxPadding;if(!T(n)){e.size&&(i[n]-=e.size);let d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&Ro(a,o.getPadding());let r=Math.max(0,t.outerWidth-Nn(a,i,\"left\",\"right\")),l=Math.max(0,t.outerHeight-Nn(a,i,\"top\",\"bottom\")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function Qr(i){let t=i.maxPadding;function e(s){let n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e(\"top\"),i.x+=e(\"left\"),e(\"right\"),e(\"bottom\")}function tl(i,t){let e=t.maxPadding;function s(n){let o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function Ee(i,t,e,s){let n=[],o,a,r,l,c,h;for(o=0,a=i.length,c=0;o<a;++o){r=i[o],l=r.box,l.update(r.width||t.w,r.height||t.h,tl(r.horizontal,t));let{same:d,other:u}=Zr(t,e,r,s);c|=d&&n.length,h=h||u,l.fullSize||n.push(r)}return c&&Ee(n,t,e,s)||h}function fi(i,t,e,s,n){i.top=e,i.left=t,i.right=t+s,i.bottom=e+n,i.width=s,i.height=n}function Hn(i,t,e,s){let n=e.padding,{x:o,y:a}=t;for(let r of i){let l=r.box,c=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/c.weight||1;if(r.horizontal){let d=t.w*h,u=c.size||l.height;ee(c.start)&&(a=c.start),l.fullSize?fi(l,n.left,a,e.outerWidth-n.right-n.left,u):fi(l,t.left+c.placed,a,d,u),c.start=a,c.placed+=d,a=l.bottom}else{let d=t.h*h,u=c.size||l.width;ee(c.start)&&(o=c.start),l.fullSize?fi(l,o,n.top,u,e.outerHeight-n.bottom-n.top):fi(l,o,t.top+c.placed,u,d),c.start=o,c.placed+=d,o=l.right}}t.x=o,t.y=a}var J={addBox(i,t){i.boxes||(i.boxes=[]),t.fullSize=t.fullSize||!1,t.position=t.position||\"top\",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw(e){t.draw(e)}}]},i.boxes.push(t)},removeBox(i,t){let e=i.boxes?i.boxes.indexOf(t):-1;e!==-1&&i.boxes.splice(e,1)},configure(i,t,e){t.fullSize=e.fullSize,t.position=e.position,t.weight=e.weight},update(i,t,e,s){if(!i)return;let n=q(i.options.layout.padding),o=Math.max(t-n.width,0),a=Math.max(e-n.height,0),r=Jr(i.boxes),l=r.vertical,c=r.horizontal;E(i.boxes,p=>{typeof p.beforeLayout==\"function\"&&p.beforeLayout()});let h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);Ro(u,q(s));let f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Gr(l.concat(c),d);Ee(r.fullSize,f,d,g),Ee(l,f,d,g),Ee(c,f,d,g)&&Ee(l,f,d,g),Qr(f),Hn(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,Hn(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},E(r.chartArea,p=>{let m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},Mi=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}},Ss=class extends Mi{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}updateConfig(t){t.options.animation=!1}},_i=\"$chartjs\",el={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},jn=i=>i===null||i===\"\";function il(i,t){let e=i.style,s=i.getAttribute(\"height\"),n=i.getAttribute(\"width\");if(i[_i]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||\"block\",e.boxSizing=e.boxSizing||\"border-box\",jn(n)){let o=os(i,\"width\");o!==void 0&&(i.width=o)}if(jn(s))if(i.style.height===\"\")i.height=i.width/(t||2);else{let o=os(i,\"height\");o!==void 0&&(i.height=o)}return i}var Eo=Sn?{passive:!0}:!1;function sl(i,t,e){i&&i.addEventListener(t,e,Eo)}function nl(i,t,e){i&&i.canvas&&i.canvas.removeEventListener(t,e,Eo)}function ol(i,t){let e=el[i.type]||i.type,{x:s,y:n}=Lt(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function ki(i,t){for(let e of i)if(e===t||e.contains(t))return!0}function al(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||ki(r.addedNodes,s),a=a&&!ki(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function rl(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||ki(r.removedNodes,s),a=a&&!ki(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var Ne=new Map,$n=0;function Io(){let i=window.devicePixelRatio;i!==$n&&($n=i,Ne.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function ll(i,t){Ne.size||window.addEventListener(\"resize\",Io),Ne.set(i,t)}function cl(i){Ne.delete(i),Ne.size||window.removeEventListener(\"resize\",Io)}function hl(i,t,e){let s=i.canvas,n=s&&di(s);if(!n)return;let o=Ui((r,l)=>{let c=n.clientWidth;e(r,l),c<n.clientWidth&&e()},window),a=new ResizeObserver(r=>{let l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),ll(i,o),a}function bs(i,t,e){e&&e.disconnect(),t===\"resize\"&&cl(i)}function dl(i,t,e){let s=i.canvas,n=Ui(o=>{i.ctx!==null&&e(ol(o,i))},i);return sl(s,t,n),n}var Ps=class extends Mi{acquireContext(t,e){let s=t&&t.getContext&&t.getContext(\"2d\");return s&&s.canvas===t?(il(t,e),s):null}releaseContext(t){let e=t.canvas;if(!e[_i])return!1;let s=e[_i].initial;[\"height\",\"width\"].forEach(o=>{let a=s[o];A(a)?e.removeAttribute(o):e.setAttribute(o,a)});let n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[_i],!0}addEventListener(t,e,s){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),a={attach:al,detach:rl,resize:hl}[e]||dl;n[e]=a(t,e,s)}removeEventListener(t,e){let s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:bs,detach:bs,resize:bs}[e]||nl)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return wn(t,e,s,n)}isAttached(t){let e=t&&di(t);return!!(e&&e.isConnected)}};function ul(i){return!hi()||typeof OffscreenCanvas<\"u\"&&i instanceof OffscreenCanvas?Ss:Ps}var st=class{constructor(){M(this,\"x\");M(this,\"y\");M(this,\"active\",!1);M(this,\"options\");M(this,\"$animations\")}tooltipPosition(t){let{x:e,y:s}=this.getProps([\"x\",\"y\"],t);return{x:e,y:s}}hasValue(){return Vt(this.x)&&Vt(this.y)}getProps(t,e){let s=this.$animations;if(!e||!s)return this;let n={};return t.forEach(o=>{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}};M(st,\"defaults\",{}),M(st,\"defaultRoutes\");function fl(i,t){let e=i.options.ticks,s=gl(i),n=Math.min(e.maxTicksLimit||s,s),o=e.major.enabled?ml(t):[],a=o.length,r=o[0],l=o[a-1],c=[];if(a>n)return bl(t,c,o,a/n),c;let h=pl(o,t,n);if(a>0){let d,u,f=a>1?Math.round((l-r)/(a-1)):null;for(gi(t,c,h,A(f)?0:r-f,r),d=0,u=a-1;d<u;d++)gi(t,c,h,o[d],o[d+1]);return gi(t,c,h,l,A(f)?t.length:l+f),c}return gi(t,c,h),c}function gl(i){let t=i.options.offset,e=i._tickSize(),s=i._length/e+(t?0:1),n=i._maxLength/e;return Math.floor(Math.min(s,n))}function pl(i,t,e){let s=xl(i),n=t.length/e;if(!s)return Math.max(n,1);let o=on(s);for(let a=0,r=o.length-1;a<r;a++){let l=o[a];if(l>n)return l}return Math.max(n,1)}function ml(i){let t=[],e,s;for(e=0,s=i.length;e<s;e++)i[e].major&&t.push(e);return t}function bl(i,t,e,s){let n=0,o=e[0],a;for(s=Math.ceil(s),a=0;a<i.length;a++)a===o&&(t.push(i[a]),n++,o=e[n*s])}function gi(i,t,e,s,n){let o=D(s,0),a=Math.min(D(n,i.length),i.length),r=0,l,c,h;for(e=Math.ceil(e),n&&(l=n-s,e=l/Math.floor(l/e)),h=o;h<0;)r++,h=Math.round(o+r*e);for(c=Math.max(o,0);c<a;c++)c===h&&(t.push(i[c]),r++,h=Math.round(o+r*e))}function xl(i){let t=i.length,e,s;if(t<2)return!1;for(s=i[0],e=1;e<t;++e)if(i[e]-i[e-1]!==s)return!1;return s}var _l=i=>i===\"left\"?\"right\":i===\"right\"?\"left\":i,Yn=(i,t,e)=>t===\"top\"||t===\"left\"?i[t]+e:i[t]-e,Un=(i,t)=>Math.min(t||i,i);function Xn(i,t){let e=[],s=i.length/t,n=i.length,o=0;for(;o<n;o+=s)e.push(i[Math.floor(o)]);return e}function yl(i,t,e){let s=i.ticks.length,n=Math.min(t,s-1),o=i._startPixel,a=i._endPixel,r=1e-6,l=i.getPixelForTick(n),c;if(!(e&&(s===1?c=Math.max(l-o,a-l):t===0?c=(i.getPixelForTick(1)-l)/2:c=(l-i.getPixelForTick(n-1))/2,l+=n<t?c:-c,l<o-r||l>a+r)))return l}function vl(i,t){E(i,e=>{let s=e.gc,n=s.length/2,o;if(n>t){for(o=0;o<n;++o)delete e.data[s[o]];s.splice(0,n)}})}function Te(i){return i.drawTicks?i.tickLength:0}function Kn(i,t){if(!i.display)return 0;let e=$(i.font,t),s=q(i.padding);return(z(i.text)?i.text.length:1)*e.lineHeight+s.height}function Ml(i,t){return yt(i,{scale:t,type:\"scale\"})}function kl(i,t,e){return yt(i,{tick:e,index:t,type:\"tick\"})}function wl(i,t,e){let s=oi(i);return(e&&t!==\"right\"||!e&&t===\"right\")&&(s=_l(s)),s}function Sl(i,t,e,s){let{top:n,left:o,bottom:a,right:r,chart:l}=i,{chartArea:c,scales:h}=l,d=0,u,f,g,p=a-n,m=r-o;if(i.isHorizontal()){if(f=K(s,o,r),T(e)){let b=Object.keys(e)[0],x=e[b];g=h[b].getPixelForValue(x)+p-t}else e===\"center\"?g=(c.bottom+c.top)/2+p-t:g=Yn(i,e,t);u=r-o}else{if(T(e)){let b=Object.keys(e)[0],x=e[b];f=h[b].getPixelForValue(x)-m+t}else e===\"center\"?f=(c.left+c.right)/2-m+t:f=Yn(i,e,t);g=K(s,a,n),d=e===\"left\"?-H:H}return{titleX:f,titleY:g,maxWidth:u,rotation:d}}var Xt=class i extends st{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:s,_suggestedMax:n}=this;return t=Z(t,Number.POSITIVE_INFINITY),e=Z(e,Number.NEGATIVE_INFINITY),s=Z(s,Number.POSITIVE_INFINITY),n=Z(n,Number.NEGATIVE_INFINITY),{min:Z(t,s),max:Z(e,n),minDefined:N(t),maxDefined:N(e)}}getMinMax(t){let{min:e,max:s,minDefined:n,maxDefined:o}=this.getUserBounds(),a;if(n&&o)return{min:e,max:s};let r=this.getMatchingVisibleMetas();for(let l=0,c=r.length;l<c;++l)a=r[l].controller.getMinMax(this,t),n||(e=Math.min(e,a.min)),o||(s=Math.max(s,a.max));return e=o&&e>s?s:e,s=n&&e>s?e:s,{min:Z(e,Z(s,e)),max:Z(s,Z(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){F(this.options.beforeUpdate,[this])}update(t,e,s){let{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=xn(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=r<this.ticks.length;this._convertTicksToLabels(l?Xn(this.ticks,r):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),a.display&&(a.autoSkip||a.source===\"auto\")&&(this.ticks=fl(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),l&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t=this.options.reverse,e,s;this.isHorizontal()?(e=this.left,s=this.right):(e=this.top,s=this.bottom,t=!t),this._startPixel=e,this._endPixel=s,this._reversePixels=t,this._length=s-e,this._alignToPixels=this.options.alignToPixels}afterUpdate(){F(this.options.afterUpdate,[this])}beforeSetDimensions(){F(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){F(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),F(this.options[t],[this])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){F(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){let e=this.options.ticks,s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s],o.label=F(e.callback,[o.value,s,t],this)}afterTickToLabelConversion(){F(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){F(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let t=this.options,e=t.ticks,s=Un(this.ticks.length,t.ticks.maxTicksLimit),n=e.minRotation||0,o=e.maxRotation,a=n,r,l,c;if(!this._isVisible()||!e.display||n>=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-Te(t.grid)-e.padding-Kn(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=si(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){F(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){F(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){let l=Kn(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=Te(o)+l):(t.height=this.maxHeight,t.width=Te(o)+l),s.display&&this.ticks.length){let{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=ot(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){let b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{let b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){let{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!==\"top\"&&this.axis===\"x\";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1),u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o===\"start\"?f=e.width:o===\"end\"?u=t.width:o!==\"inner\"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o===\"start\"?(h=0,d=t.height):o===\"end\"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){F(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e===\"top\"||e===\"bottom\"||t===\"x\"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e<s;e++)A(t[e].label)&&(t.splice(e,1),s--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){let e=this.options.ticks.sampleSize,s=this.ticks;e<s.length&&(s=Xn(s,e)),this._labelSizes=t=this._computeLabelSizes(s,s.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,e,s){let{ctx:n,_longestTextCache:o}=this,a=[],r=[],l=Math.floor(e/Un(e,s)),c=0,h=0,d,u,f,g,p,m,b,x,v,y,_;for(d=0;d<e;d+=l){if(g=t[d].label,p=this._resolveTickFontOptions(d),n.font=m=p.string,b=o[m]=o[m]||{data:{},gc:[]},x=p.lineHeight,v=y=0,!A(g)&&!z(g))v=ke(n,b.data,b.gc,v,g),y=x;else if(z(g))for(u=0,f=g.length;u<f;++u)_=g[u],!A(_)&&!z(_)&&(v=ke(n,b.data,b.gc,v,_),y+=x);a.push(v),r.push(y),c=Math.max(v,c),h=Math.max(y,h)}vl(o,e);let k=a.indexOf(c),w=r.indexOf(h),S=P=>({width:a[P]||0,height:r[P]||0});return{first:S(0),last:S(e-1),widest:S(k),highest:S(w),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return rn(this._alignToPixels?Ct(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&t<e.length){let s=e[t];return s.$context||(s.$context=kl(this.getContext(),t,s))}return this.$context||(this.$context=Ml(this.chart.getContext(),this))}_tickSize(){let t=this.options.ticks,e=ot(this.labelRotation),s=Math.abs(Math.cos(e)),n=Math.abs(Math.sin(e)),o=this._getLabelSizes(),a=t.autoSkipPadding||0,r=o?o.widest.width+a:0,l=o?o.highest.height+a:0;return this.isHorizontal()?l*s>r*n?r/s:l/n:l*n<r*s?l/s:r/n}_isVisible(){let t=this.options.display;return t!==\"auto\"?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){let e=this.axis,s=this.chart,n=this.options,{grid:o,position:a,border:r}=n,l=o.offset,c=this.isHorizontal(),d=this.ticks.length+(l?1:0),u=Te(o),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(W){return Ct(s,W,p)},x,v,y,_,k,w,S,P,O,C,L,U;if(a===\"top\")x=b(this.bottom),w=this.bottom-u,P=x-m,C=b(t.top)+m,U=t.bottom;else if(a===\"bottom\")x=b(this.top),C=t.top,U=b(t.bottom)-m,w=x+m,P=this.top+u;else if(a===\"left\")x=b(this.right),k=this.right-u,S=x-m,O=b(t.left)+m,L=t.right;else if(a===\"right\")x=b(this.left),O=t.left,L=b(t.right)-m,k=x+m,S=this.left+u;else if(e===\"x\"){if(a===\"center\")x=b((t.top+t.bottom)/2+.5);else if(T(a)){let W=Object.keys(a)[0],j=a[W];x=b(this.chart.scales[W].getPixelForValue(j))}C=t.top,U=t.bottom,w=x+m,P=w+u}else if(e===\"y\"){if(a===\"center\")x=b((t.left+t.right)/2);else if(T(a)){let W=Object.keys(a)[0],j=a[W];x=b(this.chart.scales[W].getPixelForValue(j))}k=x-m,S=k-u,O=t.left,L=t.right}let et=D(n.ticks.maxTicksLimit,d),I=Math.max(1,Math.ceil(d/et));for(v=0;v<d;v+=I){let W=this.getContext(v),j=o.setContext(W),rt=r.setContext(W),G=j.lineWidth,Kt=j.color,Ye=rt.dash||[],qt=rt.dashOffset,be=j.tickWidth,Et=j.tickColor,xe=j.tickBorderDash||[],It=j.tickBorderDashOffset;y=yl(this,v,l),y!==void 0&&(_=Ct(s,y,G),c?k=S=O=L=_:w=P=C=U=_,f.push({tx1:k,ty1:w,tx2:S,ty2:P,x1:O,y1:C,x2:L,y2:U,width:G,color:Kt,borderDash:Ye,borderDashOffset:qt,tickWidth:be,tickColor:Et,tickBorderDash:xe,tickBorderDashOffset:It}))}return this._ticksLength=d,this._borderValue=x,f}_computeLabelItems(t){let e=this.axis,s=this.options,{position:n,ticks:o}=s,a=this.isHorizontal(),r=this.ticks,{align:l,crossAlign:c,padding:h,mirror:d}=o,u=Te(s.grid),f=u+h,g=d?-h:f,p=-ot(this.labelRotation),m=[],b,x,v,y,_,k,w,S,P,O,C,L,U=\"middle\";if(n===\"top\")k=this.bottom-g,w=this._getXAxisLabelAlignment();else if(n===\"bottom\")k=this.top+g,w=this._getXAxisLabelAlignment();else if(n===\"left\"){let I=this._getYAxisLabelAlignment(u);w=I.textAlign,_=I.x}else if(n===\"right\"){let I=this._getYAxisLabelAlignment(u);w=I.textAlign,_=I.x}else if(e===\"x\"){if(n===\"center\")k=(t.top+t.bottom)/2+f;else if(T(n)){let I=Object.keys(n)[0],W=n[I];k=this.chart.scales[I].getPixelForValue(W)+f}w=this._getXAxisLabelAlignment()}else if(e===\"y\"){if(n===\"center\")_=(t.left+t.right)/2-f;else if(T(n)){let I=Object.keys(n)[0],W=n[I];_=this.chart.scales[I].getPixelForValue(W)}w=this._getYAxisLabelAlignment(u).textAlign}e===\"y\"&&(l===\"start\"?U=\"top\":l===\"end\"&&(U=\"bottom\"));let et=this._getLabelSizes();for(b=0,x=r.length;b<x;++b){v=r[b],y=v.label;let I=o.setContext(this.getContext(b));S=this.getPixelForTick(b)+o.labelOffset,P=this._resolveTickFontOptions(b),O=P.lineHeight,C=z(y)?y.length:1;let W=C/2,j=I.color,rt=I.textStrokeColor,G=I.textStrokeWidth,Kt=w;a?(_=S,w===\"inner\"&&(b===x-1?Kt=this.options.reverse?\"left\":\"right\":b===0?Kt=this.options.reverse?\"right\":\"left\":Kt=\"center\"),n===\"top\"?c===\"near\"||p!==0?L=-C*O+O/2:c===\"center\"?L=-et.highest.height/2-W*O+O:L=-et.highest.height+O/2:c===\"near\"||p!==0?L=O/2:c===\"center\"?L=et.highest.height/2-W*O:L=et.highest.height-C*O,d&&(L*=-1),p!==0&&!I.showLabelBackdrop&&(_+=O/2*Math.sin(p))):(k=S,L=(1-C)*O/2);let Ye;if(I.showLabelBackdrop){let qt=q(I.backdropPadding),be=et.heights[b],Et=et.widths[b],xe=L-qt.top,It=0-qt.left;switch(U){case\"middle\":xe-=be/2;break;case\"bottom\":xe-=be;break}switch(w){case\"center\":It-=Et/2;break;case\"right\":It-=Et;break;case\"inner\":b===x-1?It-=Et:b>0&&(It-=Et/2);break}Ye={left:It,top:xe,width:Et+qt.width,height:be+qt.height,color:I.backdropColor}}m.push({label:y,font:P,textOffset:L,options:{rotation:p,color:j,strokeColor:rt,strokeWidth:G,textAlign:Kt,textBaseline:U,translation:[_,k],backdrop:Ye}})}return m}_getXAxisLabelAlignment(){let{position:t,ticks:e}=this.options;if(-ot(this.labelRotation))return t===\"top\"?\"left\":\"right\";let n=\"center\";return e.align===\"start\"?n=\"left\":e.align===\"end\"?n=\"right\":e.align===\"inner\"&&(n=\"inner\"),n}_getYAxisLabelAlignment(t){let{position:e,ticks:{crossAlign:s,mirror:n,padding:o}}=this.options,a=this._getLabelSizes(),r=t+o,l=a.widest.width,c,h;return e===\"left\"?n?(h=this.right+o,s===\"near\"?c=\"left\":s===\"center\"?(c=\"center\",h+=l/2):(c=\"right\",h+=l)):(h=this.right-r,s===\"near\"?c=\"right\":s===\"center\"?(c=\"center\",h-=l/2):(c=\"left\",h=this.left)):e===\"right\"?n?(h=this.left+o,s===\"near\"?c=\"right\":s===\"center\"?(c=\"center\",h-=l/2):(c=\"left\",h-=l)):(h=this.left+r,s===\"near\"?c=\"left\":s===\"center\"?(c=\"center\",h+=l/2):(c=\"right\",h=this.right)):c=\"right\",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;let t=this.chart,e=this.options.position;if(e===\"left\"||e===\"right\")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e===\"top\"||e===\"bottom\")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){let{ctx:t,options:{backgroundColor:e},left:s,top:n,width:o,height:a}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(s,n,o,a),t.restore())}getLineWidthForValue(t){let e=this.options.grid;if(!this._isVisible()||!e.display)return 0;let n=this.ticks.findIndex(o=>o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),o,a,r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o<a;++o){let l=n[o];e.drawOnChartArea&&r({x:l.x1,y:l.y1},{x:l.x2,y:l.y2},l),e.drawTicks&&r({x:l.tx1,y:l.ty1},{x:l.tx2,y:l.ty2},{color:l.tickColor,width:l.tickWidth,borderDash:l.tickBorderDash,borderDashOffset:l.tickBorderDashOffset})}}drawBorder(){let{chart:t,ctx:e,options:{border:s,grid:n}}=this,o=s.setContext(this.getContext()),a=s.display?o.width:0;if(!a)return;let r=n.setContext(this.getContext(0)).lineWidth,l=this._borderValue,c,h,d,u;this.isHorizontal()?(c=Ct(t,this.left,a)-a/2,h=Ct(t,this.right,r)+r/2,d=u=l):(d=Ct(t,this.top,a)-a/2,u=Ct(t,this.bottom,r)+r/2,c=h=l),e.save(),e.lineWidth=o.width,e.strokeStyle=o.color,e.beginPath(),e.moveTo(c,d),e.lineTo(h,u),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;let s=this.ctx,n=this._computeLabelArea();n&&Pe(s,n);let o=this.getLabelItems(t);for(let a of o){let r=a.options,l=a.font,c=a.label,h=a.textOffset;At(s,c,0,h,l,r)}n&&De(s)}drawTitle(){let{ctx:t,options:{position:e,title:s,reverse:n}}=this;if(!s.display)return;let o=$(s.font),a=q(s.padding),r=s.align,l=o.lineHeight/2;e===\"bottom\"||e===\"center\"||T(e)?(l+=a.bottom,z(s.text)&&(l+=o.lineHeight*(s.text.length-1))):l+=a.top;let{titleX:c,titleY:h,maxWidth:d,rotation:u}=Sl(this,l,e,r);At(t,s.text,0,0,o,{color:s.color,maxWidth:d,rotation:u,textAlign:wl(r,e,n),textBaseline:\"middle\",translation:[c,h]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){let t=this.options,e=t.ticks&&t.ticks.z||0,s=D(t.grid&&t.grid.z,-1),n=D(t.border&&t.border.z,0);return!this._isVisible()||this.draw!==i.prototype.draw?[{z:e,draw:o=>{this.draw(o)}}]:[{z:s,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+\"AxisID\",n=[],o,a;for(o=0,a=e.length;o<a;++o){let r=e[o];r[s]===this.id&&(!t||r.type===t)&&n.push(r)}return n}_resolveTickFontOptions(t){let e=this.options.ticks.setContext(this.getContext(t));return $(e.font)}_maxDigits(){let t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}},pe=class{constructor(t,e,s){this.type=t,this.scope=e,this.override=s,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){let e=Object.getPrototypeOf(t),s;Ol(e)&&(s=this.register(e));let n=this.items,o=t.id,a=this.scope+\".\"+o;if(!o)throw new Error(\"class does not have id: \"+t);return o in n||(n[o]=t,Pl(t,a,s),this.override&&V.override(t.id,t.overrides)),a}get(t){return this.items[t]}unregister(t){let e=this.items,s=t.id,n=this.scope;s in e&&delete e[s],n&&s in V[n]&&(delete V[n][s],this.override&&delete Ot[s])}};function Pl(i,t,e){let s=Zt(Object.create(null),[e?V.get(e):{},V.get(t),i.defaults]);V.set(t,s),i.defaultRoutes&&Dl(t,i.defaultRoutes),i.descriptors&&V.describe(t,i.descriptors)}function Dl(i,t){Object.keys(t).forEach(e=>{let s=e.split(\".\"),n=s.pop(),o=[i].concat(s).join(\".\"),a=t[e].split(\".\"),r=a.pop(),l=a.join(\".\");V.route(o,n,l,r)})}function Ol(i){return\"id\"in i&&\"defaults\"in i}var Ds=class{constructor(){this.controllers=new pe(it,\"datasets\",!0),this.elements=new pe(st,\"elements\"),this.plugins=new pe(Object,\"plugins\"),this.scales=new pe(Xt,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{let o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):E(n,a=>{let r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){let n=ii(t);F(s[\"before\"+n],[],s),e[t](s),F(s[\"after\"+n],[],s)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){let s=this._typedRegistries[e];if(s.isForType(t))return s}return this.plugins}_get(t,e,s){let n=e.get(t);if(n===void 0)throw new Error('\"'+t+'\" is not a registered '+s+\".\");return n}},gt=new Ds,Os=class{constructor(){this._init=void 0}notify(t,e,s,n){if(e===\"beforeInit\"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,\"install\")),this._init===void 0)return;let o=n?this._descriptors(t).filter(n):this._descriptors(t),a=this._notify(o,t,e,s);return e===\"afterDestroy\"&&(this._notify(o,t,\"stop\"),this._notify(this._init,t,\"uninstall\"),this._init=void 0),a}_notify(t,e,s,n){n=n||{};for(let o of t){let a=o.plugin,r=a[s],l=[e,n,o.options];if(F(r,l,a)===!1&&n.cancelable)return!1}return!0}invalidate(){A(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let s=t&&t.config,n=D(s.options&&s.options.plugins,{}),o=Cl(s);return n===!1&&!e?[]:Tl(t,o,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],s=this._cache,n=(o,a)=>o.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,\"stop\"),this._notify(n(s,e),t,\"start\")}};function Cl(i){let t={},e=[],s=Object.keys(gt.plugins.items);for(let o=0;o<s.length;o++)e.push(gt.getPlugin(s[o]));let n=i.plugins||[];for(let o=0;o<n.length;o++){let a=n[o];e.indexOf(a)===-1&&(e.push(a),t[a.id]=!0)}return{plugins:e,localIds:t}}function Al(i,t){return!t&&i===!1?null:i===!0?{}:i}function Tl(i,{plugins:t,localIds:e},s,n){let o=[],a=i.getContext();for(let r of t){let l=r.id,c=Al(s[l],n);c!==null&&o.push({plugin:r,options:Ll(i.config,{plugin:r,local:e[l]},c,a)})}return o}function Ll(i,{plugin:t,local:e},s,n){let o=i.pluginScopeKeys(t),a=i.getOptionScopes(s,o);return e&&t.defaults&&a.push(t.defaults),i.createResolver(a,n,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function Cs(i,t){let e=V.datasets[i]||{};return((t.datasets||{})[i]||{}).indexAxis||t.indexAxis||e.indexAxis||\"x\"}function Rl(i,t){let e=i;return i===\"_index_\"?e=t:i===\"_value_\"&&(e=t===\"x\"?\"y\":\"x\"),e}function El(i,t){return i===t?\"_index_\":\"_value_\"}function qn(i){if(i===\"x\"||i===\"y\"||i===\"r\")return i}function Il(i){if(i===\"top\"||i===\"bottom\")return\"x\";if(i===\"left\"||i===\"right\")return\"y\"}function As(i,...t){if(qn(i))return i;for(let e of t){let s=e.axis||Il(e.position)||i.length>1&&qn(i[0].toLowerCase());if(s)return s}throw new Error(`Cannot determine type of '${i}' axis. Please provide 'axis' or 'position' option.`)}function Gn(i,t,e){if(e[t+\"AxisID\"]===i)return{axis:t}}function Fl(i,t){if(t.data&&t.data.datasets){let e=t.data.datasets.filter(s=>s.xAxisID===i||s.yAxisID===i);if(e.length)return Gn(i,\"x\",e[0])||Gn(i,\"y\",e[0])}return{}}function zl(i,t){let e=Ot[i.type]||{scales:{}},s=t.scales||{},n=Cs(i.type,t),o=Object.create(null);return Object.keys(s).forEach(a=>{let r=s[a];if(!T(r))return console.error(`Invalid scale configuration for scale: ${a}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);let l=As(a,r,Fl(a,i),V.scales[r.type]),c=El(l,n),h=e.scales||{};o[a]=te(Object.create(null),[{axis:l},r,h[l],h[c]])}),i.data.datasets.forEach(a=>{let r=a.type||i.type,l=a.indexAxis||Cs(r,t),h=(Ot[r]||{}).scales||{};Object.keys(h).forEach(d=>{let u=Rl(d,l),f=a[u+\"AxisID\"]||u;o[f]=o[f]||Object.create(null),te(o[f],[{axis:u},s[f],h[d]])})}),Object.keys(o).forEach(a=>{let r=o[a];te(r,[V.scales[r.type],V.scale])}),o}function Fo(i){let t=i.options||(i.options={});t.plugins=D(t.plugins,{}),t.scales=zl(i,t)}function zo(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function Bl(i){return i=i||{},i.data=zo(i.data),Fo(i),i}var Jn=new Map,Bo=new Set;function pi(i,t){let e=Jn.get(i);return e||(e=t(),Jn.set(i,e),Bo.add(e)),e}var Le=(i,t,e)=>{let s=_t(t,e);s!==void 0&&i.add(s)},Ts=class{constructor(t){this._config=Bl(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=zo(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),Fo(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return pi(t,()=>[[`datasets.${t}`,\"\"]])}datasetAnimationScopeKeys(t,e){return pi(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,\"\"]])}datasetElementScopeKeys(t,e){return pi(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,\"\"]])}pluginScopeKeys(t){let e=t.id,s=this.type;return pi(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let s=this._scopeCache,n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){let{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>Le(l,t,d))),h.forEach(d=>Le(l,n,d)),h.forEach(d=>Le(l,Ot[o]||{},d)),h.forEach(d=>Le(l,V,d)),h.forEach(d=>Le(l,ai,d))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Bo.has(e)&&a.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,Ot[e]||{},V.datasets[e]||{},{type:e},V,ai]}resolveNamedOptions(t,e,s,n=[\"\"]){let o={$shared:!0},{resolver:a,subPrefixes:r}=Zn(this._resolverCache,t,n),l=a;if(Wl(a,e)){o.$shared=!1,s=bt(s)?s():s;let c=this.createResolver(t,s,r);l=Bt(a,s,c)}for(let c of e)o[c]=l[c];return o}createResolver(t,e,s=[\"\"],n){let{resolver:o}=Zn(this._resolverCache,t,s);return T(e)?Bt(o,e,void 0,n):o}};function Zn(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));let n=e.join(),o=s.get(n);return o||(o={resolver:ci(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes(\"hover\"))},s.set(n,o)),o}var Vl=i=>T(i)&&Object.getOwnPropertyNames(i).some(t=>bt(i[t]));function Wl(i,t){let{isScriptable:e,isIndexable:s}=ts(i);for(let n of t){let o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(bt(r)||Vl(r))||a&&z(r))return!0}return!1}var Nl=\"4.5.1\",Hl=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function Qn(i,t){return i===\"top\"||i===\"bottom\"||Hl.indexOf(i)===-1&&t===\"x\"}function to(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function eo(i){let t=i.chart,e=t.options.animation;t.notifyPlugins(\"afterRender\"),F(e&&e.onComplete,[i],t)}function jl(i){let t=i.chart,e=t.options.animation;F(e&&e.onProgress,[i],t)}function Vo(i){return hi()&&typeof i==\"string\"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}var yi={},io=i=>{let t=Vo(i);return Object.values(yi).filter(e=>e.canvas===t).pop()};function $l(i,t,e){let s=Object.keys(i);for(let n of s){let o=+n;if(o>=t){let a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function Yl(i,t,e,s){return!e||i.type===\"mouseout\"?null:s?t:i}var at=class{static register(...t){gt.add(...t),so()}static unregister(...t){gt.remove(...t),so()}constructor(t,e){let s=this.config=new Ts(e),n=Vo(t),o=io(n);if(o)throw new Error(\"Canvas is already in use. Chart with ID '\"+o.id+\"' must be destroyed before the canvas with ID '\"+o.canvas.id+\"' can be reused.\");let a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ul(n)),this.platform.updateConfig(s);let r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=tn(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Os,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=un(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],yi[this.id]=this,!r||!l){console.error(\"Failed to create chart: can't acquire context from the given item\");return}vt.listen(this,\"complete\",eo),vt.listen(this,\"progress\",jl),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return A(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return gt}_initialize(){return this.notifyPlugins(\"beforeInit\"),this.options.responsive?this.resize():ns(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(\"afterInit\"),this}clear(){return Ji(this.canvas,this.ctx),this}stop(){return vt.stop(this),this}resize(t,e){vt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?\"resize\":\"attach\";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,ns(this,r,!0)&&(this.notifyPlugins(\"resize\",{size:a}),F(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};E(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{}),o=[];e&&(o=o.concat(Object.keys(e).map(a=>{let r=e[a],l=As(a,r),c=l===\"r\",h=l===\"x\";return{options:r,dposition:c?\"chartArea\":h?\"bottom\":\"left\",dtype:c?\"radialLinear\":h?\"category\":\"linear\"}}))),E(o,a=>{let r=a.options,l=r.id,c=As(l,r),h=D(r.type,a.dtype);(r.position===void 0||Qn(r.position,c)!==Qn(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{let u=gt.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),E(n,(a,r)=>{a||delete s[r]}),E(s,a=>{J.configure(this,a,a.options),J.addBox(this,a)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;n<s;++n)this._destroyDatasetMeta(n);t.splice(e,s-e)}this._sortedMetasets=t.slice(0).sort(to(\"order\",\"index\"))}_removeUnreferencedMetasets(){let{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s<n;s++){let o=e[s],a=this.getDatasetMeta(s),r=o.type||this.config.type;if(a.type&&a.type!==r&&(this._destroyDatasetMeta(s),a=this.getDatasetMeta(s)),a.type=r,a.indexAxis=o.indexAxis||Cs(r,this.options),a.order=o.order||0,a.index=s,a.label=\"\"+o.label,a.visible=this.isDatasetVisible(s),a.controller)a.controller.updateIndex(s),a.controller.linkScales();else{let l=gt.getController(r),{datasetElementType:c,dataElementType:h}=V.datasets[r];Object.assign(l,{dataElementType:gt.getElement(h),datasetElementType:c&&gt.getElement(c)}),a.controller=new l(this,s),t.push(a.controller)}}return this._updateMetasets(),t}_resetElements(){E(this.data.datasets,(t,e)=>{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){let e=this.config;e.update();let s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0})===!1)return;let o=this.buildOrUpdateControllers();this.notifyPlugins(\"beforeElementsUpdate\");let a=0;for(let c=0,h=this.data.datasets.length;c<h;c++){let{controller:d}=this.getDatasetMeta(c),u=!n&&o.indexOf(d)===-1;d.buildOrUpdateElements(u),a=Math.max(+d.getMaxOverflow(),a)}a=this._minPadding=s.layout.autoPadding?a:0,this._updateLayout(a),n||E(o,c=>{c.reset()}),this._updateDatasets(t),this.notifyPlugins(\"afterUpdate\",{mode:t}),this._layers.sort(to(\"z\",\"_idx\"));let{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){E(this.scales,t=>{J.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!Bi(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:s,start:n,count:o}of e){let a=s===\"_removeElements\"?-o:o;$l(t,n,a)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+\",\"+a.splice(1).join(\",\"))),n=s(0);for(let o=1;o<e;o++)if(!Bi(n,s(o)))return;return Array.from(n).map(o=>o.split(\",\")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins(\"beforeLayout\",{cancelable:!0})===!1)return;J.update(this,this.width,this.height,t);let e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],E(this.boxes,n=>{s&&n.position===\"chartArea\"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins(\"afterLayout\")}_updateDatasets(t){if(this.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e<s;++e)this.getDatasetMeta(e).controller.configure();for(let e=0,s=this.data.datasets.length;e<s;++e)this._updateDataset(e,bt(t)?t({datasetIndex:e}):t);this.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){let s=this.getDatasetMeta(t),n={meta:s,index:t,mode:e,cancelable:!0};this.notifyPlugins(\"beforeDatasetUpdate\",n)!==!1&&(s.controller._update(e),n.cancelable=!1,this.notifyPlugins(\"afterDatasetUpdate\",n))}render(){this.notifyPlugins(\"beforeRender\",{cancelable:!0})!==!1&&(vt.has(this)?this.attached&&!vt.running(this)&&vt.start(this):(this.draw(),eo({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){let{width:s,height:n}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(s,n)}if(this.clear(),this.width<=0||this.height<=0||this.notifyPlugins(\"beforeDraw\",{cancelable:!0})===!1)return;let e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){let e=this._sortedMetasets,s=[],n,o;for(n=0,o=e.length;n<o;++n){let a=e[n];(!t||a.visible)&&s.push(a)}return s}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(this.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0})===!1)return;let t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){let e=this.ctx,s={meta:t,index:t.index,cancelable:!0},n=hs(this,t);this.notifyPlugins(\"beforeDatasetDraw\",s)!==!1&&(n&&Pe(e,n),t.controller.draw(),n&&De(e),s.cancelable=!1,this.notifyPlugins(\"afterDatasetDraw\",s))}isPointInArea(t){return ht(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){let o=Xr.modes[e];return typeof o==\"function\"?o(this,t,s,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],s=this._metasets,n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=yt(null,{chart:this,type:\"chart\"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let s=this.getDatasetMeta(t);return typeof s.hidden==\"boolean\"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){let s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){let n=s?\"show\":\"hide\",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);ee(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),vt.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins(\"beforeDestroy\");let{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),Ji(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),delete yi[this.id],this.notifyPlugins(\"afterDestroy\")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){let t=this._listeners,e=this.platform,s=(o,a)=>{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};E(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)},a,r=()=>{n(\"attach\",r),this.attached=!0,this.resize(),s(\"resize\",o),s(\"detach\",a)};a=()=>{this.attached=!1,n(\"resize\",o),this._stop(),this._resize(0,0),s(\"attach\",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){E(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},E(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){let n=s?\"set\":\"remove\",o,a,r,l;for(e===\"dataset\"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller[\"_\"+n+\"DatasetHoverStyle\"]()),r=0,l=t.length;r<l;++r){a=t[r];let c=a&&this.getDatasetMeta(a.datasetIndex).controller;c&&c[n+\"HoverStyle\"](a.element,a.datasetIndex,a.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){let e=this._active||[],s=t.map(({datasetIndex:o,index:a})=>{let r=this.getDatasetMeta(o);if(!r)throw new Error(\"No dataset found at index \"+o);return{datasetIndex:o,element:r.data[a],index:a}});!we(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,s){let n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){let s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins(\"beforeEvent\",s,n)===!1)return;let o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins(\"afterEvent\",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){let{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=nn(t),c=Yl(t,this._lastEvent,s,l);s&&(this._lastEvent=null,F(o.onHover,[t,r,this],this),l&&F(o.onClick,[t,r,this],this));let h=!we(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type===\"mouseout\")return[];if(!s)return e;let o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}};M(at,\"defaults\",V),M(at,\"instances\",yi),M(at,\"overrides\",Ot),M(at,\"registry\",gt),M(at,\"version\",Nl),M(at,\"getChart\",io);function so(){return E(at.instances,i=>i._plugins.invalidate())}function Ul(i,t,e){let{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=t,{borderWidth:c,borderJoinStyle:h}=l,d=Math.min(c/a,X(s-e));if(i.beginPath(),i.arc(n,o,a-c/2,s+d/2,e-d/2),r>0){let u=Math.min(c/r,X(s-e));i.arc(n,o,r+c/2,e-u/2,s+u/2,!0)}else{let u=Math.min(c/2,a*X(s-e));if(h===\"round\")i.arc(n,o,u,e-R/2,s+R/2,!0);else if(h===\"bevel\"){let f=2*u*u,g=-f*Math.cos(e+R/2)+n,p=-f*Math.sin(e+R/2)+o,m=f*Math.cos(s+R/2)+n,b=f*Math.sin(s+R/2)+o;i.lineTo(g,p),i.lineTo(m,b)}}i.closePath(),i.moveTo(0,0),i.rect(0,0,i.canvas.width,i.canvas.height),i.clip(\"evenodd\")}function Xl(i,t,e){let{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t,c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+H,s-H),i.closePath(),i.clip()}function Kl(i){return li(i,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"])}function ql(i,t,e,s){let n=Kl(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{let c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function re(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function wi(i,t,e,s,n,o){let{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0,f=0,g=n-l;if(s){let I=h>0?h-s:0,W=d>0?d-s:0,j=(I+W)/2,rt=j!==0?g*j/(j+s):g;f=(g-rt)/2}let p=Math.max(.001,g*d-e/R)/d,m=(g-p)/2,b=l+m+f,x=n-m-f,{outerStart:v,outerEnd:y,innerStart:_,innerEnd:k}=ql(t,u,d,x-b),w=d-v,S=d-y,P=b+v/w,O=x-y/S,C=u+_,L=u+k,U=b+_/C,et=x-k/L;if(i.beginPath(),o){let I=(P+O)/2;if(i.arc(a,r,d,P,I),i.arc(a,r,d,I,O),y>0){let G=re(S,O,a,r);i.arc(G.x,G.y,y,O,x+H)}let W=re(L,x,a,r);if(i.lineTo(W.x,W.y),k>0){let G=re(L,et,a,r);i.arc(G.x,G.y,k,x+H,et+Math.PI)}let j=(x-k/u+(b+_/u))/2;if(i.arc(a,r,u,x-k/u,j,!0),i.arc(a,r,u,j,b+_/u,!0),_>0){let G=re(C,U,a,r);i.arc(G.x,G.y,_,U+Math.PI,b-H)}let rt=re(w,b,a,r);if(i.lineTo(rt.x,rt.y),v>0){let G=re(w,P,a,r);i.arc(G.x,G.y,v,b-H,P)}}else{i.moveTo(a,r);let I=Math.cos(P)*d+a,W=Math.sin(P)*d+r;i.lineTo(I,W);let j=Math.cos(O)*d+a,rt=Math.sin(O)*d+r;i.lineTo(j,rt)}i.closePath()}function Gl(i,t,e,s,n){let{fullCircles:o,startAngle:a,circumference:r}=t,l=t.endAngle;if(o){wi(i,t,e,s,l,n);for(let c=0;c<o;++c)i.fill();isNaN(r)||(l=a+(r%B||B))}return wi(i,t,e,s,l,n),i.fill(),l}function Jl(i,t,e,s,n){let{fullCircles:o,startAngle:a,circumference:r,options:l}=t,{borderWidth:c,borderJoinStyle:h,borderDash:d,borderDashOffset:u,borderRadius:f}=l,g=l.borderAlign===\"inner\";if(!c)return;i.setLineDash(d||[]),i.lineDashOffset=u,g?(i.lineWidth=c*2,i.lineJoin=h||\"round\"):(i.lineWidth=c,i.lineJoin=h||\"bevel\");let p=t.endAngle;if(o){wi(i,t,e,s,p,n);for(let m=0;m<o;++m)i.stroke();isNaN(r)||(p=a+(r%B||B))}g&&Xl(i,t,p),l.selfJoin&&p-a>=R&&f===0&&h!==\"miter\"&&Ul(i,t,p),o||(wi(i,t,e,s,p,n),i.stroke())}var jt=class extends st{constructor(e){super();M(this,\"circumference\");M(this,\"endAngle\");M(this,\"fullCircles\");M(this,\"innerRadius\");M(this,\"outerRadius\");M(this,\"pixelMargin\");M(this,\"startAngle\");this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,s,n){let o=this.getProps([\"x\",\"y\"],n),{angle:a,distance:r}=Hi(o,{x:e,y:s}),{startAngle:l,endAngle:c,innerRadius:h,outerRadius:d,circumference:u}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],n),f=(this.options.spacing+this.options.borderWidth)/2,g=D(u,c-l),p=se(a,l,c)&&l!==c,m=g>=B||p,b=ut(r,h+f,d+f);return m&&b}getCenterPoint(e){let{x:s,y:n,startAngle:o,endAngle:a,innerRadius:r,outerRadius:l}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"],e),{offset:c,spacing:h}=this.options,d=(o+a)/2,u=(r+l+h+c)/2;return{x:s+Math.cos(d)*u,y:n+Math.sin(d)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){let{options:s,circumference:n}=this,o=(s.offset||0)/4,a=(s.spacing||0)/2,r=s.circular;if(this.pixelMargin=s.borderAlign===\"inner\"?.33:0,this.fullCircles=n>B?Math.floor(n/B):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();let l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);let c=1-Math.sin(Math.min(R,n||0)),h=o*c;e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,Gl(e,this,h,a,r),Jl(e,this,h,a,r),e.restore()}};M(jt,\"id\",\"arc\"),M(jt,\"defaults\",{borderAlign:\"center\",borderColor:\"#fff\",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),M(jt,\"defaultRoutes\",{backgroundColor:\"backgroundColor\"}),M(jt,\"descriptors\",{_scriptable:!0,_indexable:e=>e!==\"borderDash\"});function Wo(i,t,e=t){i.lineCap=D(e.borderCapStyle,t.borderCapStyle),i.setLineDash(D(e.borderDash,t.borderDash)),i.lineDashOffset=D(e.borderDashOffset,t.borderDashOffset),i.lineJoin=D(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=D(e.borderWidth,t.borderWidth),i.strokeStyle=D(e.borderColor,t.borderColor)}function Zl(i,t,e){i.lineTo(e.x,e.y)}function Ql(i){return i.stepped?mn:i.tension||i.cubicInterpolationMode===\"monotone\"?bn:Zl}function No(i,t,e={}){let s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=n<a&&o<a||n>r&&o>r;return{count:s,start:l,loop:t.loop,ilen:c<l&&!h?s+c-l:c-l}}function tc(i,t,e,s){let{points:n,options:o}=t,{count:a,start:r,loop:l,ilen:c}=No(n,e,s),h=Ql(o),{move:d=!0,reverse:u}=s||{},f,g,p;for(f=0;f<=c;++f)g=n[(r+(u?c-f:f))%a],!g.skip&&(d?(i.moveTo(g.x,g.y),d=!1):h(i,p,g,u,o.stepped),p=g);return l&&(g=n[(r+(u?c:0))%a],h(i,p,g,u,o.stepped)),!!l}function ec(i,t,e,s){let n=t.points,{count:o,start:a,ilen:r}=No(n,e,s),{move:l=!0,reverse:c}=s||{},h=0,d=0,u,f,g,p,m,b,x=y=>(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[x(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[x(u)],f.skip)continue;let y=f.x,_=f.y,k=y|0;k===g?(_<p?p=_:_>m&&(m=_),h=(d*h+y)/++d):(v(),i.lineTo(y,_),g=k,d=0,p=m=_),b=_}v()}function Ls(i){let t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!==\"monotone\"&&!t.stepped&&!e?ec:tc}function ic(i){return i.stepped?Pn:i.tension||i.cubicInterpolationMode===\"monotone\"?Dn:Pt}function sc(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Wo(i,t.options),i.stroke(n)}function nc(i,t,e,s){let{segments:n,options:o}=t,a=Ls(t);for(let r of n)Wo(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}var oc=typeof Path2D==\"function\";function ac(i,t,e,s){oc&&!t.options.segment?sc(i,t,e,s):nc(i,t,e,s)}var pt=class extends st{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let s=this.options;if((s.tension||s.cubicInterpolationMode===\"monotone\")&&!s.stepped&&!this._pointsUpdated){let n=s.spanGaps?this._loop:this._fullLoop;kn(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Cn(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){let s=this.options,n=t[e],o=this.points,a=cs(this,{property:e,start:n,end:n});if(!a.length)return;let r=[],l=ic(s),c,h;for(c=0,h=a.length;c<h;++c){let{start:d,end:u}=a[c],f=o[d],g=o[u];if(f===g){r.push(f);continue}let p=Math.abs((n-f[e])/(g[e]-f[e])),m=l(f,g,p,s.stepped);m[e]=t[e],r.push(m)}return r.length===1?r[0]:r}pathSegment(t,e,s){return Ls(this)(t,this,e,s)}path(t,e,s){let n=this.segments,o=Ls(this),a=this._loop;e=e||0,s=s||this.points.length-e;for(let r of n)a&=o(t,this,r,{start:e,end:e+s-1});return!!a}draw(t,e,s,n){let o=this.options||{};(this.points||[]).length&&o.borderWidth&&(t.save(),ac(t,this,s,n),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}};M(pt,\"id\",\"line\"),M(pt,\"defaults\",{borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0}),M(pt,\"defaultRoutes\",{backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"}),M(pt,\"descriptors\",{_scriptable:!0,_indexable:t=>t!==\"borderDash\"&&t!==\"fill\"});function no(i,t,e,s){let n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)<n.radius+n.hitRadius}var fe=class extends st{constructor(e){super();M(this,\"parsed\");M(this,\"skip\");M(this,\"stop\");this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,e&&Object.assign(this,e)}inRange(e,s,n){let o=this.options,{x:a,y:r}=this.getProps([\"x\",\"y\"],n);return Math.pow(e-a,2)+Math.pow(s-r,2)<Math.pow(o.hitRadius+o.radius,2)}inXRange(e,s){return no(this,e,\"x\",s)}inYRange(e,s){return no(this,e,\"y\",s)}getCenterPoint(e){let{x:s,y:n}=this.getProps([\"x\",\"y\"],e);return{x:s,y:n}}size(e){e=e||this.options||{};let s=e.radius||0;s=Math.max(s,s&&e.hoverRadius||0);let n=s&&e.borderWidth||0;return(s+n)*2}draw(e,s){let n=this.options;this.skip||n.radius<.1||!ht(this,s,this.size(n)/2)||(e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.fillStyle=n.backgroundColor,ri(e,n,this.x,this.y))}getRange(){let e=this.options||{};return e.radius+e.hitRadius}};M(fe,\"id\",\"point\"),M(fe,\"defaults\",{borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0}),M(fe,\"defaultRoutes\",{backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"});function Ho(i,t){let{x:e,y:s,base:n,width:o,height:a}=i.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],t),r,l,c,h,d;return i.horizontal?(d=a/2,r=Math.min(e,n),l=Math.max(e,n),c=s-d,h=s+d):(d=o/2,r=e-d,l=e+d,c=Math.min(s,n),h=Math.max(s,n)),{left:r,top:c,right:l,bottom:h}}function Rt(i,t,e,s){return i?0:Y(t,e,s)}function rc(i,t,e){let s=i.options.borderWidth,n=i.borderSkipped,o=Qi(s);return{t:Rt(n.top,o.top,0,e),r:Rt(n.right,o.right,0,t),b:Rt(n.bottom,o.bottom,0,e),l:Rt(n.left,o.left,0,t)}}function lc(i,t,e){let{enableBorderRadius:s}=i.getProps([\"enableBorderRadius\"]),n=i.options.borderRadius,o=Tt(n),a=Math.min(t,e),r=i.borderSkipped,l=s||T(n);return{topLeft:Rt(!l||r.top||r.left,o.topLeft,0,a),topRight:Rt(!l||r.top||r.right,o.topRight,0,a),bottomLeft:Rt(!l||r.bottom||r.left,o.bottomLeft,0,a),bottomRight:Rt(!l||r.bottom||r.right,o.bottomRight,0,a)}}function cc(i){let t=Ho(i),e=t.right-t.left,s=t.bottom-t.top,n=rc(i,e/2,s/2),o=lc(i,e/2,s/2);return{outer:{x:t.left,y:t.top,w:e,h:s,radius:o},inner:{x:t.left+n.l,y:t.top+n.t,w:e-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,o.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(n.b,n.r))}}}}function xs(i,t,e,s){let n=t===null,o=e===null,r=i&&!(n&&o)&&Ho(i,s);return r&&(n||ut(t,r.left,r.right))&&(o||ut(e,r.top,r.bottom))}function hc(i){return i.topLeft||i.topRight||i.bottomLeft||i.bottomRight}function dc(i,t){i.rect(t.x,t.y,t.w,t.h)}function _s(i,t,e={}){let s=i.x!==e.x?-t:0,n=i.y!==e.y?-t:0,o=(i.x+i.w!==e.x+e.w?t:0)-s,a=(i.y+i.h!==e.y+e.h?t:0)-n;return{x:i.x+s,y:i.y+n,w:i.w+o,h:i.h+a,radius:i.radius}}var ge=class extends st{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){let{inflateAmount:e,options:{borderColor:s,backgroundColor:n}}=this,{inner:o,outer:a}=cc(this),r=hc(a.radius)?oe:dc;t.save(),(a.w!==o.w||a.h!==o.h)&&(t.beginPath(),r(t,_s(a,e,o)),t.clip(),r(t,_s(o,-e,a)),t.fillStyle=s,t.fill(\"evenodd\")),t.beginPath(),r(t,_s(o,e)),t.fillStyle=n,t.fill(),t.restore()}inRange(t,e,s){return xs(this,t,e,s)}inXRange(t,e){return xs(this,t,null,e)}inYRange(t,e){return xs(this,null,t,e)}getCenterPoint(t){let{x:e,y:s,base:n,horizontal:o}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:o?(e+n)/2:e,y:o?s:(s+n)/2}}getRange(t){return t===\"x\"?this.width/2:this.height/2}};M(ge,\"id\",\"bar\"),M(ge,\"defaults\",{borderSkipped:\"start\",borderWidth:0,borderRadius:0,inflateAmount:\"auto\",pointStyle:void 0}),M(ge,\"defaultRoutes\",{backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"});var uc=Object.freeze({__proto__:null,ArcElement:jt,BarElement:ge,LineElement:pt,PointElement:fe}),Rs=[\"rgb(54, 162, 235)\",\"rgb(255, 99, 132)\",\"rgb(255, 159, 64)\",\"rgb(255, 205, 86)\",\"rgb(75, 192, 192)\",\"rgb(153, 102, 255)\",\"rgb(201, 203, 207)\"],oo=Rs.map(i=>i.replace(\"rgb(\",\"rgba(\").replace(\")\",\", 0.5)\"));function jo(i){return Rs[i%Rs.length]}function $o(i){return oo[i%oo.length]}function fc(i,t){return i.borderColor=jo(t),i.backgroundColor=$o(t),++t}function gc(i,t){return i.backgroundColor=i.data.map(()=>jo(t++)),t}function pc(i,t){return i.backgroundColor=i.data.map(()=>$o(t++)),t}function mc(i){let t=0;return(e,s)=>{let n=i.getDatasetMeta(s).controller;n instanceof kt?t=gc(e,t):n instanceof Yt?t=pc(e,t):n&&(t=fc(e,t))}}function ao(i){let t;for(t in i)if(i[t].borderColor||i[t].backgroundColor)return!0;return!1}function bc(i){return i&&(i.borderColor||i.backgroundColor)}function xc(){return V.borderColor!==\"rgba(0,0,0,0.1)\"||V.backgroundColor!==\"rgba(0,0,0,0.1)\"}var _c={id:\"colors\",defaults:{enabled:!0,forceOverride:!1},beforeLayout(i,t,e){if(!e.enabled)return;let{data:{datasets:s},options:n}=i.config,{elements:o}=n,a=ao(s)||bc(n)||o&&ao(o)||xc();if(!e.forceOverride&&a)return;let r=mc(i);s.forEach(r)}};function yc(i,t,e,s,n){let o=n.samples||s;if(o>=e)return i.slice(t,t+e);let a=[],r=(e-2)/(o-2),l=0,c=t+e-1,h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;d<o-2;d++){let m=0,b=0,x,v=Math.floor((d+1)*r)+1+t,y=Math.min(Math.floor((d+2)*r)+1,e)+t,_=y-v;for(x=v;x<y;x++)m+=i[x].x,b+=i[x].y;m/=_,b/=_;let k=Math.floor(d*r)+1+t,w=Math.min(Math.floor((d+1)*r)+1,e)+t,{x:S,y:P}=i[h];for(f=g=-1,x=k;x<w;x++)g=.5*Math.abs((S-m)*(i[x].y-P)-(S-i[x].x)*(b-P)),g>f&&(f=g,u=i[x],p=x);a[l++]=u,h=p}return a[l++]=i[c],a}function vc(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p,m=[],b=t+e-1,x=i[t].x,y=i[b].x-x;for(a=t;a<t+e;++a){r=i[a],l=(r.x-x)/y*s,c=r.y;let _=l|0;if(_===h)c<g?(g=c,d=a):c>p&&(p=c,u=a),n=(o*n+r.x)/++o;else{let k=a-1;if(!A(d)&&!A(u)){let w=Math.min(d,u),S=Math.max(d,u);w!==f&&w!==k&&m.push({...i[w],x:n}),S!==f&&S!==k&&m.push({...i[S],x:n})}a>0&&k!==f&&m.push(i[k]),m.push(r),h=_,o=0,g=p=c,d=u=f=a}}return m}function Yo(i){if(i._decimated){let t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,\"data\",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function ro(i){i.data.datasets.forEach(t=>{Yo(t)})}function Mc(i,t){let e=t.length,s=0,n,{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(ct(t,o.axis,a).lo,0,e-1)),c?n=Y(ct(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var kc={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){ro(i);return}let s=i.width;i.data.datasets.forEach((n,o)=>{let{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(ae([r,i.options.indexAxis])===\"y\"||!l.controller.supportsDecimation)return;let h=i.scales[l.xAxisID];if(h.type!==\"linear\"&&h.type!==\"time\"||i.options.parsing)return;let{start:d,count:u}=Mc(l,c),f=e.threshold||4*s;if(u<=f){Yo(n);return}A(a)&&(n._data=c,delete n.data,Object.defineProperty(n,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case\"lttb\":g=yc(c,d,u,s,e);break;case\"min-max\":g=vc(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){ro(i)}};function wc(i,t,e){let s=i.segments,n=i.points,o=t.points,a=[];for(let r of s){let{start:l,end:c}=r;c=Di(l,c,n);let h=Es(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}let d=cs(t,h);for(let u of d){let f=Es(e,o[u.start],o[u.end],u.loop),g=ls(r,n,f);for(let p of g)a.push({source:p,target:u,start:{[e]:lo(h,f,\"start\",Math.max)},end:{[e]:lo(h,f,\"end\",Math.min)}})}}return a}function Es(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i===\"angle\"&&(n=X(n),o=X(o)),{property:i,start:n,end:o}}function Sc(i,t){let{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=Di(a,r,n);let l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Di(i,t,e){for(;t>i;t--){let s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function lo(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function Uo(i,t){let e=[],s=!1;return z(i)?(s=!0,e=i):e=Sc(i,t),e.length?new pt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function co(i){return i&&i.fill!==!1}function Pc(i,t,e){let n=i[t].fill,o=[t],a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!N(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function Dc(i,t,e){let s=Tc(i);if(T(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return N(n)&&Math.floor(n)===n?Oc(s[0],t,n,e):[\"origin\",\"start\",\"end\",\"stack\",\"shape\"].indexOf(s)>=0&&s}function Oc(i,t,e,s){return(i===\"-\"||i===\"+\")&&(e=t+e),e===t||e<0||e>=s?!1:e}function Cc(i,t){let e=null;return i===\"start\"?e=t.bottom:i===\"end\"?e=t.top:T(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Ac(i,t,e){let s;return i===\"start\"?s=e:i===\"end\"?s=t.options.reverse?t.min:t.max:T(i)?s=i.value:s=t.getBaseValue(),s}function Tc(i){let t=i.options,e=t.fill,s=D(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?\"origin\":s}function Lc(i){let{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=Rc(t,e);r.push(Uo({x:null,y:t.bottom},s));for(let l=0;l<o.length;l++){let c=o[l];for(let h=c.start;h<=c.end;h++)Ec(n,a[h],r)}return new pt({points:n,options:{}})}function Rc(i,t){let e=[],s=i.getMatchingVisibleMetas(\"line\");for(let n=0;n<s.length;n++){let o=s[n];if(o.index===t)break;o.hidden||e.unshift(o.dataset)}return e}function Ec(i,t,e){let s=[];for(let n=0;n<e.length;n++){let o=e[n],{first:a,last:r,point:l}=Ic(o,t,\"x\");if(!(!l||a&&r)){if(a)s.unshift(l);else if(i.push(l),!r)break}}i.push(...s)}function Ic(i,t,e){let s=i.interpolate(t,e);if(!s)return{};let n=s[e],o=i.segments,a=i.points,r=!1,l=!1;for(let c=0;c<o.length;c++){let h=o[c],d=a[h.start][e],u=a[h.end][e];if(ut(n,d,u)){r=n===d,l=n===u;break}}return{first:r,last:l,point:s}}var Si=class{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,s){let{x:n,y:o,radius:a}=this;return e=e||{start:0,end:B},t.arc(n,o,a,e.end,e.start,!0),!s.bounds}interpolate(t){let{x:e,y:s,radius:n}=this,o=t.angle;return{x:e+Math.cos(o)*n,y:s+Math.sin(o)*n,angle:o}}};function Fc(i){let{chart:t,fill:e,line:s}=i;if(N(e))return zc(t,e);if(e===\"stack\")return Lc(i);if(e===\"shape\")return!0;let n=Bc(i);return n instanceof Si?n:Uo(n,s)}function zc(i,t){let e=i.getDatasetMeta(t);return e&&i.isDatasetVisible(t)?e.dataset:null}function Bc(i){return(i.scale||{}).getPointPositionForValue?Wc(i):Vc(i)}function Vc(i){let{scale:t={},fill:e}=i,s=Cc(e,t);if(N(s)){let n=t.isHorizontal();return{x:n?s:null,y:n?null:s}}return null}function Wc(i){let{scale:t,fill:e}=i,s=t.options,n=t.getLabels().length,o=s.reverse?t.max:t.min,a=Ac(e,t,o),r=[];if(s.grid.circular){let l=t.getPointPositionForValue(0,o);return new Si({x:l.x,y:l.y,radius:t.getDistanceFromCenterForValue(a)})}for(let l=0;l<n;++l)r.push(t.getPointPositionForValue(l,a));return r}function ys(i,t,e){let s=Fc(t),{chart:n,index:o,line:a,scale:r,axis:l}=t,c=a.options,h=c.fill,d=c.backgroundColor,{above:u=d,below:f=d}=h||{},g=n.getDatasetMeta(o),p=hs(n,g);s&&a.points.length&&(Pe(i,e),Nc(i,{line:a,target:s,above:u,below:f,area:e,scale:r,axis:l,clip:p}),De(i))}function Nc(i,t){let{line:e,target:s,above:n,below:o,area:a,scale:r,clip:l}=t,c=e._loop?\"angle\":t.axis;i.save();let h=o;o!==n&&(c===\"x\"?(ho(i,s,a.top),vs(i,{line:e,target:s,color:n,scale:r,property:c,clip:l}),i.restore(),i.save(),ho(i,s,a.bottom)):c===\"y\"&&(uo(i,s,a.left),vs(i,{line:e,target:s,color:o,scale:r,property:c,clip:l}),i.restore(),i.save(),uo(i,s,a.right),h=n)),vs(i,{line:e,target:s,color:h,scale:r,property:c,clip:l}),i.restore()}function ho(i,t,e){let{segments:s,points:n}=t,o=!0,a=!1;i.beginPath();for(let r of s){let{start:l,end:c}=r,h=n[l],d=n[Di(l,c,n)];o?(i.moveTo(h.x,h.y),o=!1):(i.lineTo(h.x,e),i.lineTo(h.x,h.y)),a=!!t.pathSegment(i,r,{move:a}),a?i.closePath():i.lineTo(d.x,e)}i.lineTo(t.first().x,e),i.closePath(),i.clip()}function uo(i,t,e){let{segments:s,points:n}=t,o=!0,a=!1;i.beginPath();for(let r of s){let{start:l,end:c}=r,h=n[l],d=n[Di(l,c,n)];o?(i.moveTo(h.x,h.y),o=!1):(i.lineTo(e,h.y),i.lineTo(h.x,h.y)),a=!!t.pathSegment(i,r,{move:a}),a?i.closePath():i.lineTo(e,d.y)}i.lineTo(e,t.first().y),i.closePath(),i.clip()}function vs(i,t){let{line:e,target:s,property:n,color:o,scale:a,clip:r}=t,l=wc(e,s,n);for(let{source:c,target:h,start:d,end:u}of l){let{style:{backgroundColor:f=o}={}}=c,g=s!==!0;i.save(),i.fillStyle=f,Hc(i,a,r,g&&Es(n,d,u)),i.beginPath();let p=!!e.pathSegment(i,c),m;if(g){p?i.closePath():fo(i,s,u,n);let b=!!s.pathSegment(i,h,{move:p,reverse:!0});m=p&&b,m||fo(i,s,d,n)}i.closePath(),i.fill(m?\"evenodd\":\"nonzero\"),i.restore()}}function Hc(i,t,e,s){let n=t.chart.chartArea,{property:o,start:a,end:r}=s||{};if(o===\"x\"||o===\"y\"){let l,c,h,d;o===\"x\"?(l=a,c=n.top,h=r,d=n.bottom):(l=n.left,c=a,h=n.right,d=r),i.beginPath(),e&&(l=Math.max(l,e.left),h=Math.min(h,e.right),c=Math.max(c,e.top),d=Math.min(d,e.bottom)),i.rect(l,c,h-l,d-c),i.clip()}}function fo(i,t,e,s){let n=t.interpolate(e,s);n&&i.lineTo(n.x,n.y)}var jc={id:\"filler\",afterDatasetsUpdate(i,t,e){let s=(i.data.datasets||[]).length,n=[],o,a,r,l;for(a=0;a<s;++a)o=i.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof pt&&(l={visible:i.isDatasetVisible(a),index:a,fill:Dc(r,a,s),chart:i,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a<s;++a)l=n[a],!(!l||l.fill===!1)&&(l.fill=Pc(n,a,e.propagate))},beforeDraw(i,t,e){let s=e.drawTime===\"beforeDraw\",n=i.getSortedVisibleDatasetMetas(),o=i.chartArea;for(let a=n.length-1;a>=0;--a){let r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&ys(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!==\"beforeDatasetsDraw\")return;let s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){let o=s[n].$filler;co(o)&&ys(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){let s=t.meta.$filler;!co(s)||e.drawTime!==\"beforeDatasetDraw\"||ys(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}},go=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},$c=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index,Pi=class extends st{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=F(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let s=t.labels,n=$(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=go(s,o),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,n,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){let{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r,d=t;o.textAlign=\"left\",o.textBaseline=\"middle\";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{let m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){let{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t,d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{let{itemWidth:x,itemHeight:v}=Yc(s,e,o,m,n);b>0&&f+v+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:x,height:v},u=Math.max(u,x),f+=v+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Wt(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=K(s,this.left+n,this.right-this.lineWidths[r]);for(let c of e)r!==c.row&&(r=c.row,l=K(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(let c of e)c.col!==r&&(r=c.col,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position===\"top\"||this.options.position===\"bottom\"}draw(){if(this.options.display){let t=this.ctx;Pe(t,this),this._draw(),De(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=V.color,l=Wt(t.rtl,this.left,this.width),c=$(a.font),{padding:h}=a,d=c.size,u=d/2,f;this.drawTitle(),n.textAlign=l.textAlign(\"left\"),n.textBaseline=\"middle\",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:p,itemHeight:m}=go(a,d),b=function(k,w,S){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();let P=D(S.lineWidth,1);if(n.fillStyle=D(S.fillStyle,r),n.lineCap=D(S.lineCap,\"butt\"),n.lineDashOffset=D(S.lineDashOffset,0),n.lineJoin=D(S.lineJoin,\"miter\"),n.lineWidth=P,n.strokeStyle=D(S.strokeStyle,r),n.setLineDash(D(S.lineDash,[])),a.usePointStyle){let O={radius:p*Math.SQRT2/2,pointStyle:S.pointStyle,rotation:S.rotation,borderWidth:P},C=l.xPlus(k,g/2),L=w+u;Zi(n,O,C,L,a.pointStyleWidth&&g)}else{let O=w+Math.max((d-p)/2,0),C=l.leftForLtr(k,g),L=Tt(S.borderRadius);n.beginPath(),Object.values(L).some(U=>U!==0)?oe(n,{x:C,y:O,w:g,h:p,radius:L}):n.rect(C,O,g,p),n.fill(),P!==0&&n.stroke()}n.restore()},x=function(k,w,S){At(n,S.text,k,w+m/2,c,{strikethrough:S.hidden,textAlign:l.textAlign(S.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();v?f={x:K(o,this.left+h,this.right-s[0]),y:this.top+h+y,line:0}:f={x:this.left+h,y:K(o,this.top+y+h,this.bottom-e[0].height),line:0},as(this.ctx,t.textDirection);let _=m+h;this.legendItems.forEach((k,w)=>{n.strokeStyle=k.fontColor,n.fillStyle=k.fontColor;let S=n.measureText(k.text).width,P=l.textAlign(k.textAlign||(k.textAlign=a.textAlign)),O=g+u+S,C=f.x,L=f.y;l.setWidth(this.width),v?w>0&&C+O+h>this.right&&(L=f.y+=_,f.line++,C=f.x=K(o,this.left+h,this.right-s[f.line])):w>0&&L+_>this.bottom&&(C=f.x=C+e[f.line].width+h,f.line++,L=f.y=K(o,this.top+y+h,this.bottom-e[f.line].height));let U=l.x(C);if(b(U,L,k),C=fn(P,C+g+u,v?C+O:this.right,t.rtl),x(l.x(C),L,k),v)f.x+=O+h;else if(typeof k.text!=\"string\"){let et=c.lineHeight;f.y+=Xo(k,et)+h}else f.y+=_}),rs(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,s=$(e.font),n=q(e.padding);if(!e.display)return;let o=Wt(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l,h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=K(t.align,d,this.right-u);else{let g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+K(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}let f=K(r,d,d+u);a.textAlign=o.textAlign(oi(r)),a.textBaseline=\"middle\",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,At(a,e.text,f,h,s)}_computeTitleHeight(){let t=this.options.title,e=$(t.font),s=q(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(ut(t,this.left,this.right)&&ut(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;s<o.length;++s)if(n=o[s],ut(t,n.left,n.left+n.width)&&ut(e,n.top,n.top+n.height))return this.legendItems[s]}return null}handleEvent(t){let e=this.options;if(!Kc(t.type,e))return;let s=this._getLegendItemAt(t.x,t.y);if(t.type===\"mousemove\"||t.type===\"mouseout\"){let n=this._hoveredItem,o=$c(n,s);n&&!o&&F(e.onLeave,[t,n,this],this),this._hoveredItem=s,s&&!o&&F(e.onHover,[t,s,this],this)}else s&&F(e.onClick,[t,s,this],this)}};function Yc(i,t,e,s,n){let o=Uc(s,i,t,e),a=Xc(n,s,t.lineHeight);return{itemWidth:o,itemHeight:a}}function Uc(i,t,e,s){let n=i.text;return n&&typeof n!=\"string\"&&(n=n.reduce((o,a)=>o.length>a.length?o:a)),t+e.size/2+s.measureText(n).width}function Xc(i,t,e){let s=i;return typeof t.text!=\"string\"&&(s=Xo(t,e)),s}function Xo(i,t){let e=i.text?i.text.length:0;return t*e}function Kc(i,t){return!!((i===\"mousemove\"||i===\"mouseout\")&&(t.onHover||t.onLeave)||t.onClick&&(i===\"click\"||i===\"mouseup\"))}var qc={id:\"legend\",_element:Pi,start(i,t,e){let s=i.legend=new Pi({ctx:i.ctx,options:e,chart:i});J.configure(i,s,e),J.addBox(i,s)},stop(i){J.removeBox(i,i.legend),delete i.legend},beforeUpdate(i,t,e){let s=i.legend;J.configure(i,s,e),s.options=e},afterUpdate(i){let t=i.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(i,t){t.replay||i.legend.handleEvent(t.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(i,t,e){let s=t.datasetIndex,n=e.chart;n.isDatasetVisible(s)?(n.hide(s),t.hidden=!0):(n.show(s),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:i=>i.chart.options.color,boxWidth:40,padding:10,generateLabels(i){let t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=i.legend.options;return i._getSortedDatasetMetas().map(l=>{let c=l.controller.getStyle(e?0:void 0),h=q(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:s||c.pointStyle,rotation:c.rotation,textAlign:n||c.textAlign,borderRadius:a&&(r||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:i=>!i.startsWith(\"on\"),labels:{_scriptable:i=>![\"generateLabels\",\"filter\",\"sort\"].includes(i)}}},He=class extends st{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=z(s.text)?s.text.length:1;this._padding=q(s.padding);let o=n*$(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){let t=this.options.position;return t===\"top\"||t===\"bottom\"}_drawArgs(t){let{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align,l=0,c,h,d;return this.isHorizontal()?(h=K(r,s,o),d=e+t,c=o-s):(a.position===\"left\"?(h=s+t,d=K(r,n,e),l=R*-.5):(h=o-t,d=K(r,e,n),l=R*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let s=$(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);At(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:oi(e.align),textBaseline:\"middle\",translation:[a,r]})}};function Gc(i,t){let e=new He({ctx:i.ctx,options:t,chart:i});J.configure(i,e,t),J.addBox(i,e),i.titleBlock=e}var Jc={id:\"title\",_element:He,start(i,t,e){Gc(i,e)},stop(i){let t=i.titleBlock;J.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){let s=i.titleBlock;J.configure(i,s,e),s.options=e},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}},mi=new WeakMap,Zc={id:\"subtitle\",start(i,t,e){let s=new He({ctx:i.ctx,options:e,chart:i});J.configure(i,s,e),J.addBox(i,s),mi.set(i,s)},stop(i){J.removeBox(i,mi.get(i)),mi.delete(i)},beforeUpdate(i,t,e){let s=mi.get(i);J.configure(i,s,e),s.options=e},defaults:{align:\"center\",display:!1,font:{weight:\"normal\"},fullSize:!0,padding:0,position:\"top\",text:\"\",weight:1500},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}},Ie={average(i){if(!i.length)return!1;let t,e,s=new Set,n=0,o=0;for(t=0,e=i.length;t<e;++t){let r=i[t].element;if(r&&r.hasValue()){let l=r.tooltipPosition();s.add(l.x),n+=l.y,++o}}return o===0||s.size===0?!1:{x:[...s].reduce((r,l)=>r+l)/s.size,y:n/o}},nearest(i,t){if(!i.length)return!1;let e=t.x,s=t.y,n=Number.POSITIVE_INFINITY,o,a,r;for(o=0,a=i.length;o<a;++o){let l=i[o].element;if(l&&l.hasValue()){let c=l.getCenterPoint(),h=ti(t,c);h<n&&(n=h,r=l)}}if(r){let l=r.tooltipPosition();e=l.x,s=l.y}return{x:e,y:s}}};function ft(i,t){return t&&(z(t)?Array.prototype.push.apply(i,t):i.push(t)),i}function Mt(i){return(typeof i==\"string\"||i instanceof String)&&i.indexOf(`\n`)>-1?i.split(`\n`):i}function Qc(i,t){let{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function po(i,t){let e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=q(t.padding),p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){let y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0,v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,E(i.title,v),e.font=l.string,E(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,E(s,y=>{E(y.before,v),E(y.lines,v),E(y.after,v)}),x=0,e.font=h.string,E(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function th(i,t){let{y:e,height:s}=t;return e<s/2?\"top\":e>i.height-s/2?\"bottom\":\"center\"}function eh(i,t,e,s){let{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i===\"left\"&&n+o+a>t.width||i===\"right\"&&n-o-a<0)return!0}function ih(i,t,e,s){let{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i,c=\"center\";return s===\"center\"?c=n<=(r+l)/2?\"left\":\"right\":n<=o/2?c=\"left\":n>=a-o/2&&(c=\"right\"),eh(c,i,t,e)&&(c=\"center\"),c}function mo(i,t,e){let s=e.yAlign||t.yAlign||th(i,e);return{xAlign:e.xAlign||t.xAlign||ih(i,t,e,s),yAlign:s}}function sh(i,t){let{x:e,width:s}=i;return t===\"right\"?e-=s:t===\"center\"&&(e-=s/2),e}function nh(i,t,e){let{y:s,height:n}=i;return t===\"top\"?s+=e:t===\"bottom\"?s-=n+e:s-=n/2,s}function bo(i,t,e,s){let{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a),g=sh(t,r),p=nh(t,l,c);return l===\"center\"?r===\"left\"?g+=c:r===\"right\"&&(g-=c):r===\"left\"?g-=Math.max(h,u)+n:r===\"right\"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function bi(i,t,e){let s=q(e.padding);return t===\"center\"?i.x+i.width/2:t===\"right\"?i.x+i.width-s.right:i.x+s.left}function xo(i){return ft([],Mt(i))}function oh(i,t,e){return yt(i,{tooltip:t,tooltipItems:e,type:\"tooltip\"})}function _o(i,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}var Ko={beforeTitle:dt,title(i){if(i.length>0){let t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode===\"dataset\")return t.dataset.label||\"\";if(t.label)return t.label;if(s>0&&t.dataIndex<s)return e[t.dataIndex]}return\"\"},afterTitle:dt,beforeBody:dt,beforeLabel:dt,label(i){if(this&&this.options&&this.options.mode===\"dataset\")return i.label+\": \"+i.formattedValue||i.formattedValue;let t=i.dataset.label||\"\";t&&(t+=\": \");let e=i.formattedValue;return A(e)||(t+=e),t},labelColor(i){let e=i.chart.getDatasetMeta(i.datasetIndex).controller.getStyle(i.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(i){let e=i.chart.getDatasetMeta(i.datasetIndex).controller.getStyle(i.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:dt,afterBody:dt,beforeFooter:dt,footer:dt,afterFooter:dt};function Q(i,t,e,s){let n=i[t].call(e,s);return typeof n>\"u\"?Ko[t].call(e,s):n}var We=class extends st{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new vi(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=oh(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:s}=e,n=Q(s,\"beforeTitle\",this,t),o=Q(s,\"title\",this,t),a=Q(s,\"afterTitle\",this,t),r=[];return r=ft(r,Mt(n)),r=ft(r,Mt(o)),r=ft(r,Mt(a)),r}getBeforeBody(t,e){return xo(Q(e.callbacks,\"beforeBody\",this,t))}getBody(t,e){let{callbacks:s}=e,n=[];return E(t,o=>{let a={before:[],lines:[],after:[]},r=_o(s,o);ft(a.before,Mt(Q(r,\"beforeLabel\",this,o))),ft(a.lines,Q(r,\"label\",this,o)),ft(a.after,Mt(Q(r,\"afterLabel\",this,o))),n.push(a)}),n}getAfterBody(t,e){return xo(Q(e.callbacks,\"afterBody\",this,t))}getFooter(t,e){let{callbacks:s}=e,n=Q(s,\"beforeFooter\",this,t),o=Q(s,\"footer\",this,t),a=Q(s,\"afterFooter\",this,t),r=[];return r=ft(r,Mt(n)),r=ft(r,Mt(o)),r=ft(r,Mt(a)),r}_createItems(t){let e=this._active,s=this.chart.data,n=[],o=[],a=[],r=[],l,c;for(l=0,c=e.length;l<c;++l)r.push(Qc(this.chart,e[l]));return t.filter&&(r=r.filter((h,d,u)=>t.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),E(r,h=>{let d=_o(t.callbacks,h);n.push(Q(d,\"labelColor\",this,h)),o.push(Q(d,\"labelPointStyle\",this,h)),a.push(Q(d,\"labelTextColor\",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){let s=this.options.setContext(this.getContext()),n=this._active,o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{let r=Ie[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);let l=this._size=po(this,s),c=Object.assign({},r,l),h=mo(this.chart,s,c),d=bo(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){let o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){let{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Tt(r),{x:u,y:f}=t,{width:g,height:p}=e,m,b,x,v,y,_;return o===\"center\"?(y=f+p/2,n===\"left\"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n===\"left\"?b=u+Math.max(l,h)+a:n===\"right\"?b=u+g-Math.max(c,d)-a:b=this.caretX,o===\"top\"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){let n=this.title,o=n.length,a,r,l;if(o){let c=Wt(s.rtl,this.x,this.width);for(t.x=bi(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline=\"middle\",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;l<o;++l)e.fillText(n[l],c.x(t.x),t.y+a.lineHeight/2),t.y+=a.lineHeight+r,l+1===o&&(t.y+=s.titleMarginBottom-r)}}_drawColorBox(t,e,s,n,o){let a=this.labelColors[s],r=this.labelPointStyles[s],{boxHeight:l,boxWidth:c}=o,h=$(o.bodyFont),d=bi(this,\"left\",o),u=n.x(d),f=l<h.lineHeight?(h.lineHeight-l)/2:0,g=e.y+f;if(o.usePointStyle){let p={radius:Math.min(c,l)/2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},m=n.leftForLtr(u,c)+c/2,b=g+l/2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,ri(t,p,m,b),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,ri(t,p,m,b)}else{t.lineWidth=T(a.borderWidth)?Math.max(...Object.values(a.borderWidth)):a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;let p=n.leftForLtr(u,c),m=n.leftForLtr(n.xPlus(u,1),c-2),b=Tt(a.borderRadius);Object.values(b).some(x=>x!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,oe(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),oe(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){let{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont),u=d.lineHeight,f=0,g=Wt(s.rtl,this.x,this.width),p=function(S){e.fillText(S,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a),b,x,v,y,_,k,w;for(e.textAlign=a,e.textBaseline=\"middle\",e.font=d.string,t.x=bi(this,m,s),e.fillStyle=s.bodyColor,E(this.beforeBody,p),f=r&&m!==\"right\"?a===\"center\"?c/2+h:c+2+h:0,y=0,k=n.length;y<k;++y){for(b=n[y],x=this.labelTextColors[y],e.fillStyle=x,E(b.before,p),v=b.lines,r&&v.length&&(this._drawColorBox(e,t,y,g,s),u=Math.max(d.lineHeight,l)),_=0,w=v.length;_<w;++_)p(v[_]),u=d.lineHeight;E(b.after,p)}f=0,u=d.lineHeight,E(this.afterBody,p),t.y-=o}drawFooter(t,e,s){let n=this.footer,o=n.length,a,r;if(o){let l=Wt(s.rtl,this.x,this.width);for(t.x=bi(this,s.footerAlign,s),t.y+=s.footerMarginTop,e.textAlign=l.textAlign(s.footerAlign),e.textBaseline=\"middle\",a=$(s.footerFont),e.fillStyle=s.footerColor,e.font=a.string,r=0;r<o;++r)e.fillText(n[r],l.x(t.x),t.y+a.lineHeight/2),t.y+=a.lineHeight+s.footerSpacing}}drawBackground(t,e,s,n){let{xAlign:o,yAlign:a}=this,{x:r,y:l}=t,{width:c,height:h}=s,{topLeft:d,topRight:u,bottomLeft:f,bottomRight:g}=Tt(n.cornerRadius);e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.beginPath(),e.moveTo(r+d,l),a===\"top\"&&this.drawCaret(t,e,s,n),e.lineTo(r+c-u,l),e.quadraticCurveTo(r+c,l,r+c,l+u),a===\"center\"&&o===\"right\"&&this.drawCaret(t,e,s,n),e.lineTo(r+c,l+h-g),e.quadraticCurveTo(r+c,l+h,r+c-g,l+h),a===\"bottom\"&&this.drawCaret(t,e,s,n),e.lineTo(r+f,l+h),e.quadraticCurveTo(r,l+h,r,l+h-f),a===\"center\"&&o===\"left\"&&this.drawCaret(t,e,s,n),e.lineTo(r,l+d),e.quadraticCurveTo(r,l,r+d,l),e.closePath(),e.fill(),n.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){let a=Ie[t.position].call(this,this._active,this._eventPosition);if(!a)return;let r=this._size=po(this,t),l=Object.assign({},a,this._size),c=mo(e,t,l),h=bo(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),s=this.opacity;if(!s)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;let a=q(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),as(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),rs(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let s=this._active,n=t.map(({datasetIndex:r,index:l})=>{let c=this.chart.getDatasetMeta(r);if(!c)throw new Error(\"Cannot find a dataset at index \"+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!we(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!we(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){let o=this.options;if(t.type===\"mouseout\")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);let a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){let{caretX:s,caretY:n,options:o}=this,a=Ie[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}};M(We,\"positioners\",Ie);var ah={id:\"tooltip\",_element:We,positioners:Ie,afterInit(i,t,e){e&&(i.tooltip=new We({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){let t=i.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(i.notifyPlugins(\"beforeTooltipDraw\",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins(\"afterTooltipDraw\",e)}},afterEvent(i,t){if(i.tooltip){let e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,boxPadding:0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:Ko},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:i=>i!==\"filter\"&&i!==\"itemSort\"&&i!==\"external\",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},rh=Object.freeze({__proto__:null,Colors:_c,Decimation:kc,Filler:jc,Legend:qc,SubTitle:Zc,Title:Jc,Tooltip:ah}),lh=(i,t,e,s)=>(typeof t==\"string\"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function ch(i,t,e,s){let n=i.indexOf(t);if(n===-1)return lh(i,t,e,s);let o=i.lastIndexOf(t);return n!==o?e:n}var hh=(i,t)=>i===null?null:Y(Math.round(i),0,t);function yo(i){let t=this.getLabels();return i>=0&&i<t.length?t[i]:i}var Fe=class extends Xt{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let s=this.getLabels();for(let{index:n,label:o}of e)s[n]===o&&s.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(A(t))return null;let s=this.getLabels();return e=isFinite(e)&&s[e]===t?e:ch(s,t,D(e,t),this._addedLabels),hh(e,s.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:s,max:n}=this.getMinMax(!0);this.options.bounds===\"ticks\"&&(t||(s=0),e||(n=this.getLabels().length-1)),this.min=s,this.max=n}buildTicks(){let t=this.min,e=this.max,s=this.options.offset,n=[],o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(s?0:1),1),this._startValue=this.min-(s?.5:0);for(let a=t;a<=e;a++)n.push({value:a});return n}getLabelForValue(t){return yo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return typeof t!=\"number\"&&(t=this.parse(t)),t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};M(Fe,\"id\",\"category\"),M(Fe,\"defaults\",{ticks:{callback:yo}});function dh(i,t){let e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!A(a),x=!A(r),v=!A(c),y=(m-p)/(d+1),_=Vi((m-p)/g/f)*f,k,w,S,P;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];P=Math.ceil(m/_)-Math.floor(p/_),P>g&&(_=Vi(P*_/g/f)*f),A(l)||(k=Math.pow(10,l),_=Math.ceil(_*k)/k),n===\"ticks\"?(w=Math.floor(p/_)*_,S=Math.ceil(m/_)*_):(w=p,S=m),b&&x&&o&&an((r-a)/o,_/1e3)?(P=Math.round(Math.min((r-a)/_,h)),_=(r-a)/P,w=a,S=r):v?(w=b?a:w,S=x?r:S,P=c-1,_=(S-w)/P):(P=(S-w)/_,ie(P,Math.round(P),_/1e3)?P=Math.round(P):P=Math.ceil(P));let O=Math.max(Ni(_),Ni(w));k=Math.pow(10,A(l)?O:l),w=Math.round(w*k)/k,S=Math.round(S*k)/k;let C=0;for(b&&(u&&w!==a?(e.push({value:a}),w<a&&C++,ie(Math.round((w+C*_)*k)/k,a,vo(a,y,i))&&C++):w<a&&C++);C<P;++C){let L=Math.round((w+C*_)*k)/k;if(x&&L>r)break;e.push({value:L})}return x&&u&&S!==r?e.length&&ie(e[e.length-1].value,r,vo(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||S===r)&&e.push({value:S}),e}function vo(i,t,{horizontal:e,minRotation:s}){let n=ot(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(\"\"+i).length;return Math.min(t/o,a)}var me=class extends Xt{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return A(t)||(typeof t==\"number\"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){let{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds(),{min:n,max:o}=this,a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){let l=lt(n),c=lt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,s=this.getTickLimit();s=Math.max(2,s);let n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=dh(n,o);return t.bounds===\"ticks\"&&Wi(a,this,\"value\"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){let t=this.ticks,e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){let n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}},ze=class extends me{determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?t:0,this.max=N(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,s=ot(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}};M(ze,\"id\",\"linear\"),M(ze,\"defaults\",{ticks:{callback:Se.formatters.numeric}});var je=i=>Math.floor(xt(i)),Ht=(i,t)=>Math.pow(10,je(i)+t);function Mo(i){return i/Math.pow(10,je(i))===1}function ko(i,t,e){let s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function uh(i,t){let e=t-i,s=je(e);for(;ko(i,t,s)>10;)s++;for(;ko(i,t,s)<10;)s--;return Math.min(s,je(i))}function fh(i,{min:t,max:e}){t=Z(i.min,t);let s=[],n=je(t),o=uh(t,e),a=o<0?Math.pow(10,Math.abs(o)):1,r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10,d=Math.floor((c-h)/Math.pow(10,o)),u=Z(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u<e;)s.push({value:u,major:Mo(u),significand:d}),d>=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;let f=Z(i.max,u);return s.push({value:f,major:Mo(f),significand:d}),s}var Be=class extends Xt{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){let s=me.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return N(s)&&s>0?s:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?Math.max(0,t):null,this.max=N(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!N(this._userMin)&&(this.min=t===Ht(this.min,0)?Ht(this.min,-1):Ht(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),s=this.min,n=this.max,o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Ht(s,-1)),a(Ht(n,1)))),s<=0&&o(Ht(n,-1)),n<=0&&a(Ht(s,1)),this.min=s,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},s=fh(e,this);return t.bounds===\"ticks\"&&Wi(s,this,\"value\"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?\"0\":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=xt(t),this._valueRange=xt(this.max)-xt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(xt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};M(Be,\"id\",\"logarithmic\"),M(Be,\"defaults\",{ticks:{callback:Se.formatters.logarithmic,major:{enabled:!0}}});function Is(i){let t=i.ticks;if(t.display&&i.display){let e=q(t.backdropPadding);return D(t.font&&t.font.size,V.font.size)+e.height}return 0}function gh(i,t,e){return e=z(e)?e:[e],{w:pn(i,t.string,e),h:e.length*t.lineHeight}}function wo(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:i<s||i>n?{start:t-e,end:t}:{start:t,end:t+e}}function ph(i){let t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;l<o;l++){let c=a.setContext(i.getPointLabelContext(l));n[l]=c.padding;let h=i.getPointPosition(l,i.drawingArea+n[l],r),d=$(c.font),u=gh(i.ctx,d,i._pointLabels[l]);s[l]=u;let f=X(i.getIndexAngle(l)+r),g=Math.round(si(f)),p=wo(g,h.x,u.w,0,180),m=wo(g,h.y,u.h,90,270);mh(e,t,f,p,m)}i.setCenterPoint(t.l-e.l,e.r-t.r,t.t-e.t,e.b-t.b),i._pointLabelItems=_h(i,s,n)}function mh(i,t,e,s,n){let o=Math.abs(Math.sin(e)),a=Math.abs(Math.cos(e)),r=0,l=0;s.start<t.l?(r=(t.l-s.start)/o,i.l=Math.min(i.l,t.l-r)):s.end>t.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.start<t.t?(l=(t.t-n.start)/a,i.t=Math.min(i.t,t.t-l)):n.end>t.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function bh(i,t,e){let s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(si(X(l.angle+H))),h=Mh(l.y,r.h,c),d=yh(c),u=vh(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function xh(i,t){if(!t)return!0;let{left:e,top:s,right:n,bottom:o}=i;return!(ht({x:e,y:s},t)||ht({x:e,y:o},t)||ht({x:n,y:s},t)||ht({x:n,y:o},t))}function _h(i,t,e){let s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Is(o)/2,additionalAngle:a?R/n:0},c;for(let h=0;h<n;h++){l.padding=e[h],l.size=t[h];let d=bh(i,h,l);s.push(d),r===\"auto\"&&(d.visible=xh(d,c),d.visible&&(c=d))}return s}function yh(i){return i===0||i===180?\"center\":i<180?\"left\":\"right\"}function vh(i,t,e){return e===\"right\"?i-=t:e===\"center\"&&(i-=t/2),i}function Mh(i,t,e){return e===90||e===270?i-=t/2:(e>270||e<90)&&(i-=t),i}function kh(i,t,e){let{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!A(r)){let l=Tt(t.borderRadius),c=q(t.backdropPadding);i.fillStyle=r;let h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),oe(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function wh(i,t){let{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){let o=i._pointLabelItems[n];if(!o.visible)continue;let a=s.setContext(i.getPointLabelContext(n));kh(e,a,o);let r=$(a.font),{x:l,y:c,textAlign:h}=o;At(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:\"middle\"})}}function qo(i,t,e,s){let{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,B);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a<s;a++)o=i.getPointPosition(a,t),n.lineTo(o.x,o.y)}}function Sh(i,t,e,s,n){let o=i.ctx,a=t.circular,{color:r,lineWidth:l}=t;!a&&!s||!r||!l||e<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash||[]),o.lineDashOffset=n.dashOffset,o.beginPath(),qo(i,e,a,s),o.closePath(),o.stroke(),o.restore())}function Ph(i,t,e){return yt(i,{label:e,index:t,type:\"pointLabel\"})}var $t=class extends me{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let t=this._padding=q(Is(this.options)/2),e=this.width=this.maxWidth-t.width,s=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+s/2+t.top),this.drawingArea=Math.floor(Math.min(e,s)/2)}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!1);this.min=N(t)&&!isNaN(t)?t:0,this.max=N(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Is(this.options))}generateTickLabels(t){me.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map((e,s)=>{let n=F(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:\"\"}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){let t=this.options;t.display&&t.pointLabels.display?ph(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){let e=B/(this._pointLabels.length||1),s=this.options.startAngle||0;return X(t*e+ot(s))}getDistanceFromCenterForValue(t){if(A(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(A(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t<e.length){let s=e[t];return Ph(this.getContext(),t,s)}}getPointPosition(t,e,s=0){let n=this.getIndexAngle(t)-H+s;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter,angle:n}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){let{left:e,top:s,right:n,bottom:o}=this._pointLabelItems[t];return{left:e,top:s,right:n,bottom:o}}drawBackground(){let{backgroundColor:t,grid:{circular:e}}=this.options;if(t){let s=this.ctx;s.save(),s.beginPath(),qo(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),s.closePath(),s.fillStyle=t,s.fill(),s.restore()}}drawGrid(){let t=this.ctx,e=this.options,{angleLines:s,grid:n,border:o}=e,a=this._pointLabels.length,r,l,c;if(e.pointLabels.display&&wh(this,a),n.display&&this.ticks.forEach((h,d)=>{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);let u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);Sh(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){let h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;let n=this.getIndexAngle(0),o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign=\"center\",t.textBaseline=\"middle\",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;let c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;let d=q(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}At(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}};M($t,\"id\",\"radialLinear\"),M($t,\"defaults\",{display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Se.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),M($t,\"defaultRoutes\",{\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"}),M($t,\"descriptors\",{angleLines:{_fallback:\"grid\"}});var Oi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},tt=Object.keys(Oi);function So(i,t){return i-t}function Po(i,t){if(A(t))return null;let e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts,a=t;return typeof s==\"function\"&&(a=s(a)),N(a)||(a=typeof s==\"string\"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n===\"week\"&&(Vt(o)||o===!0)?e.startOf(a,\"isoWeek\",o):e.startOf(a,n)),+a)}function Do(i,t,e,s){let n=tt.length;for(let o=tt.indexOf(i);o<n-1;++o){let a=Oi[tt[o]],r=a.steps?a.steps:Number.MAX_SAFE_INTEGER;if(a.common&&Math.ceil((e-t)/(r*a.size))<=s)return tt[o]}return tt[n-1]}function Dh(i,t,e,s,n){for(let o=tt.length-1;o>=tt.indexOf(e);o--){let a=tt[o];if(Oi[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return tt[e?tt.indexOf(e):0]}function Oh(i){for(let t=tt.indexOf(i)+1,e=tt.length;t<e;++t)if(Oi[tt[t]].common)return tt[t]}function Oo(i,t,e){if(!e)i[t]=!0;else if(e.length){let{lo:s,hi:n}=ni(e,t),o=e[s]>=t?e[s]:e[n];i[o]=!0}}function Ch(i,t,e,s){let n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value,r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function Co(i,t,e){let s=[],n={},o=t.length,a,r;for(a=0;a<o;++a)r=t[a],n[r]=a,s.push({value:r,major:!1});return o===0||!e?s:Ch(i,s,n,e)}var Ut=class extends Xt{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){let s=t.time||(t.time={}),n=this._adapter=new Hr._date(t.adapters.date);n.init(e),te(s.displayFormats,n.formats()),this._parseOpts={parser:s.parser,round:s.round,isoWeekday:s.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return t===void 0?null:Po(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let t=this.options,e=this._adapter,s=t.time.unit||\"day\",{min:n,max:o,minDefined:a,maxDefined:r}=this.getUserBounds();function l(c){!a&&!isNaN(c.min)&&(n=Math.min(n,c.min)),!r&&!isNaN(c.max)&&(o=Math.max(o,c.max))}(!a||!r)&&(l(this._getLabelBounds()),(t.bounds!==\"ticks\"||t.ticks.source!==\"labels\")&&l(this.getMinMax(!1))),n=N(n)&&!isNaN(n)?n:+e.startOf(Date.now(),s),o=N(o)&&!isNaN(o)?o:+e.endOf(Date.now(),s)+1,this.min=Math.min(n,o-1),this.max=Math.max(n+1,o)}_getLabelBounds(){let t=this.getLabelTimestamps(),e=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],s=t[t.length-1]),{min:e,max:s}}buildTicks(){let t=this.options,e=t.time,s=t.ticks,n=s.source===\"labels\"?this.getLabelTimestamps():this._generate();t.bounds===\"ticks\"&&n.length&&(this.min=this._userMin||n[0],this.max=this._userMax||n[n.length-1]);let o=this.min,a=this.max,r=cn(n,o,a);return this._unit=e.unit||(s.autoSkip?Do(e.minUnit,this.min,this.max,this._getLabelCapacity(o)):Dh(this,r.length,e.minUnit,this.min,this.max)),this._majorUnit=!s.major.enabled||this._unit===\"year\"?void 0:Oh(this._unit),this.initOffsets(n),t.reverse&&r.reverse(),Co(this,r,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(t=>+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);let a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){let t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||Do(o.minUnit,e,s,this._getLabelCapacity(e)),r=D(n.ticks.stepSize,1),l=a===\"week\"?o.isoWeekday:!1,c=Vt(l)||l===!0,h={},d=e,u,f;if(c&&(d=+t.startOf(d,\"isoWeek\",l)),d=+t.startOf(d,c?\"day\":a),t.diff(s,e,a)>1e5*r)throw new Error(e+\" and \"+s+\" are too far apart with stepSize of \"+r+\" \"+a);let g=n.ticks.source===\"data\"&&this.getDataTimestamps();for(u=d,f=0;u<s;u=+t.add(u,r,a),f++)Oo(h,u,g);return(u===s||n.bounds===\"ticks\"||f===1)&&Oo(h,u,g),Object.keys(h).sort(So).map(p=>+p)}getLabelForValue(t){let e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){let n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){let o=this.options,a=o.ticks.callback;if(a)return F(a,[t,e,s],this);let r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e<s;++e)n=t[e],n.label=this._tickFormatFunction(n.value,e,t)}getDecimalForValue(t){return t===null?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){let e=this._offsets,s=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+s)*e.factor)}getValueForPixel(t){let e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+s*(this.max-this.min)}_getLabelSize(t){let e=this.options.ticks,s=this.ctx.measureText(t).width,n=ot(this.isHorizontal()?e.maxRotation:e.minRotation),o=Math.cos(n),a=Math.sin(n),r=this._resolveTickFontOptions(0).size;return{w:s*o+r*a,h:s*a+r*o}}_getLabelCapacity(t){let e=this.options.time,s=e.displayFormats,n=s[e.unit]||s.millisecond,o=this._tickFormatFunction(t,0,Co(this,[t],this._majorUnit),n),a=this._getLabelSize(o),r=Math.floor(this.isHorizontal()?this.width/a.w:this.height/a.h)-1;return r>0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e<s;++e)t=t.concat(n[e].controller.getAllParsedValues(this));return this._cache.data=this.normalize(t)}getLabelTimestamps(){let t=this._cache.labels||[],e,s;if(t.length)return t;let n=this.getLabels();for(e=0,s=n.length;e<s;++e)t.push(Po(this,n[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return $i(t.sort(So))}};M(Ut,\"id\",\"time\"),M(Ut,\"defaults\",{bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",callback:!1,major:{enabled:!1}}});function xi(i,t,e){let s=0,n=i.length-1,o,a,r,l;e?(t>=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ct(i,\"pos\",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ct(i,\"time\",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);let c=a-o;return c?r+(l-r)*(t-o)/c:r}var Ve=class extends Ut{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=xi(e,this.min),this._tableRange=xi(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:s}=this,n=[],o=[],a,r,l,c,h;for(a=0,r=t.length;a<r;++a)c=t[a],c>=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;a<r;++a)h=n[a+1],l=n[a-1],c=n[a],Math.round((h+l)/2)!==c&&o.push({time:c,pos:a/(r-1)});return o}_generate(){let t=this.min,e=this.max,s=super.getDataTimestamps();return(!s.includes(t)||!s.length)&&s.splice(0,0,t),(!s.includes(e)||s.length===1)&&s.push(e),s.sort((n,o)=>n-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;let e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(xi(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){let e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return xi(this._table,s*this._tableRange+this._minPos,!0)}};M(Ve,\"id\",\"timeseries\"),M(Ve,\"defaults\",Ut.defaults);var Ah=Object.freeze({__proto__:null,CategoryScale:Fe,LinearScale:ze,LogarithmicScale:Be,RadialLinearScale:$t,TimeScale:Ut,TimeSeriesScale:Ve}),Go=[Nr,uc,rh,Ah];at.register(...Go);var Fs=at;function Th({dataChecksum:i,labels:t,values:e}){return{dataChecksum:i,init(){Alpine.effect(()=>{Alpine.store(\"theme\");let s=this.getChart();s&&s.destroy(),this.initChart()}),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",()=>{Alpine.store(\"theme\")===\"system\"&&this.$nextTick(()=>{let s=this.getChart();s&&s.destroy(),this.initChart()})})},initChart(){if(!(!this.$refs.canvas||!this.$refs.backgroundColorElement||!this.$refs.borderColorElement))return new Fs(this.$refs.canvas,{type:\"line\",data:{labels:t,datasets:[{data:e,borderWidth:2,fill:\"start\",tension:.5,backgroundColor:getComputedStyle(this.$refs.backgroundColorElement).color,borderColor:getComputedStyle(this.$refs.borderColorElement).color}]},options:{animation:{duration:0},elements:{point:{radius:0}},maintainAspectRatio:!1,plugins:{legend:{display:!1}},scales:{x:{display:!1},y:{display:!1}},tooltips:{enabled:!1}}})},getChart(){return this.$refs.canvas?Fs.getChart(this.$refs.canvas):null}}}export{Th as default};\n/*! Bundled license information:\n\n@kurkle/color/dist/color.esm.js:\n  (*!\n   * @kurkle/color v0.3.4\n   * https://github.com/kurkle/color#readme\n   * (c) 2024 Jukka Kurkela\n   * Released under the MIT License\n   *)\n\nchart.js/dist/chunks/helpers.dataset.js:\nchart.js/dist/chart.js:\n  (*!\n   * Chart.js v4.5.1\n   * https://www.chartjs.org\n   * (c) 2025 Chart.js Contributors\n   * Released under the MIT License\n   *)\n*/\n"
  },
  {
    "path": "public/js/relaticle/flowforge/components/flowforge.js",
    "content": "function d({state:a}){return{state:a,isLoading:{},fullyLoaded:{},init(){this.$wire.$on(\"kanban-items-loaded\",t=>{let{columnId:e,isFullyLoaded:o}=t;o&&(this.fullyLoaded[e]=!0)})},handleSortableEnd(t){let e=t.to.sortable.toArray(),o=t.item.getAttribute(\"x-sortable-item\");if(!o&&(o=t.item.getAttribute(\"data-card-id\"),!o)){console.error(\"Flowforge: Could not determine card ID for move operation\");return}let s=t.to.getAttribute(\"data-column-id\");if(!s){console.error(\"Flowforge: Target column ID is missing\");return}let i=t.item;this.setCardState(i,!0);let r=e.indexOf(o),l=r>0?e[r-1]:null,n=r<e.length-1?e[r+1]:null;this.$wire.moveCard(o,s,l,n).then(()=>this.setCardState(i,!1)).catch(()=>this.setCardState(i,!1))},setCardState(t,e){t.style.opacity=e?\"0.7\":\"\",t.style.pointerEvents=e?\"none\":\"\"},isLoadingColumn(t){return this.isLoading[t]||!1},isColumnFullyLoaded(t){return this.fullyLoaded[t]||!1},handleSmoothScroll(t){this.isLoadingColumn(t)||this.isColumnFullyLoaded(t)||(this.isLoading[t]=!0,this.$wire.loadMoreItems(t).then(()=>setTimeout(()=>this.isLoading[t]=!1,100)).catch(()=>this.isLoading[t]=!1))},handleColumnScroll(t,e){if(this.isColumnFullyLoaded(e))return;let{scrollTop:o,scrollHeight:s,clientHeight:i}=t.target;(o+i)/s>=.8&&!this.isLoadingColumn(e)&&this.handleSmoothScroll(e)}}}export{d as default};\n"
  },
  {
    "path": "public/js/relaticle/flowforge/flowforge.js",
    "content": "function o({state:i}){return{state:i,columns:i.columns,currentColumn:null,isLoading:{},init:function(){this.$wire.$on(\"kanban-record-created\",e=>{let a=e[0].id,t=e[0].column;this.$dispatch(\"close-modal\",{id:\"create-record-modal\"}),setTimeout(()=>{let n=document.querySelector(`[x-sortable-item=\"${a}\"]`);n&&(n.classList.add(\"animate-kanban-card-add\"),setTimeout(()=>{n.classList.remove(\"animate-kanban-card-add\")},500))},300)}),this.$wire.$on(\"kanban-record-updated\",e=>{}),this.$wire.$on(\"kanban-record-deleted\",e=>{let a=e[0].id;this.$dispatch(\"close-modal\",{id:\"edit-record-modal\"}),setTimeout(()=>{let t=document.querySelector(`[x-sortable-item=\"${a}\"]`);t&&(t.classList.add(\"animate-kanban-card-delete\"),setTimeout(()=>{t.classList.remove(\"animate-kanban-card-delete\")},500))},300)}),this.$wire.$on(\"kanban-items-loaded\",e=>{let a=e[0]?.columnId;a&&(this.isLoading[a]=!1)}),this.$wire.$on(\"close-modal\",e=>{})},isLoadingColumn(e){return this.isLoading[e]||!1},beginLoading(e){this.isLoading[e]=!0}}}export{o as default};\n"
  },
  {
    "path": "public/manifest.webmanifest",
    "content": "{\n  \"icons\": [\n    {\n      \"src\": \"/android-chrome-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/android-chrome-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n  ]\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nDisallow:\n\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\nSitemap: https://relaticle.com/sitemap.xml\n"
  },
  {
    "path": "public/site.webmanifest",
    "content": "{\n  \"name\": \"Relaticle\",\n  \"short_name\": \"Relaticle\",\n  \"icons\": [\n    {\n      \"src\": \"/web-app-manifest-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\",\n      \"purpose\": \"maskable\"\n    },\n    {\n      \"src\": \"/web-app-manifest-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\",\n      \"purpose\": \"maskable\"\n    }\n  ],\n  \"theme_color\": \"#ffffff\",\n  \"background_color\": \"#ffffff\",\n  \"display\": \"standalone\"\n}"
  },
  {
    "path": "rector.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Rector\\CodingStyle\\Rector\\ArrowFunction\\ArrowFunctionDelegatingCallToFirstClassCallableRector;\nuse Rector\\Config\\RectorConfig;\nuse Rector\\DeadCode\\Rector\\ClassMethod\\RemoveUnusedPrivateMethodRector;\nuse Rector\\Php81\\Rector\\Array_\\ArrayToFirstClassCallableRector;\nuse Rector\\Php83\\Rector\\ClassMethod\\AddOverrideAttributeToOverriddenMethodsRector;\nuse Rector\\Privatization\\Rector\\ClassMethod\\PrivatizeFinalClassMethodRector;\nuse RectorLaravel\\Rector\\Class_\\AddHasFactoryToModelsRector;\nuse RectorLaravel\\Rector\\Class_\\UseForwardsCallsTraitRector;\nuse RectorLaravel\\Rector\\Empty_\\EmptyToBlankAndFilledFuncRector;\nuse RectorLaravel\\Set\\LaravelSetList;\nuse RectorLaravel\\Set\\LaravelSetProvider;\n\nreturn RectorConfig::configure()\n    ->withSetProviders(LaravelSetProvider::class)\n    ->withComposerBased(laravel: true)\n    ->withPaths([\n        __DIR__.'/app',\n        __DIR__.'/packages',\n        __DIR__.'/bootstrap/app.php',\n        __DIR__.'/config',\n        __DIR__.'/database',\n        __DIR__.'/public',\n    ])\n    ->withSkip([\n        AddOverrideAttributeToOverriddenMethodsRector::class,\n        RemoveUnusedPrivateMethodRector::class => [\n            // Skip Filament importer lifecycle hooks - they're called dynamically via callHook()\n            __DIR__.'/app/Filament/Imports/*',\n        ],\n        PrivatizeFinalClassMethodRector::class => [\n            // Filament expects protected visibility for lifecycle hooks\n            __DIR__.'/app/Filament/Imports/*',\n        ],\n        ArrayToFirstClassCallableRector::class => [\n            // class_exists has optional bool param that conflicts with Collection::first signature\n            __DIR__.'/app/Providers/AppServiceProvider.php',\n        ],\n        ArrowFunctionDelegatingCallToFirstClassCallableRector::class => [\n            // class_exists has optional bool param that conflicts with Collection::first signature\n            __DIR__.'/app/Providers/AppServiceProvider.php',\n        ],\n        AddHasFactoryToModelsRector::class => [\n            __DIR__.'/app/Models/PersonalAccessToken.php',\n            __DIR__.'/packages/ImportWizard/src/Models/*',\n        ],\n    ])\n    ->withSets([\n        LaravelSetList::LARAVEL_ARRAYACCESS_TO_METHOD_CALL,\n        LaravelSetList::LARAVEL_ARRAY_STR_FUNCTION_TO_STATIC_CALL,\n        LaravelSetList::LARAVEL_CODE_QUALITY,\n        LaravelSetList::LARAVEL_COLLECTION,\n        LaravelSetList::LARAVEL_CONTAINER_STRING_TO_FULLY_QUALIFIED_NAME,\n        LaravelSetList::LARAVEL_ELOQUENT_MAGIC_METHOD_TO_QUERY_BUILDER,\n        LaravelSetList::LARAVEL_FACADE_ALIASES_TO_FULL_NAMES,\n        LaravelSetList::LARAVEL_FACTORIES,\n        LaravelSetList::LARAVEL_IF_HELPERS,\n        LaravelSetList::LARAVEL_TESTING,\n        LaravelSetList::LARAVEL_TYPE_DECLARATIONS,\n    ])\n    ->withRules([\n        EmptyToBlankAndFilledFuncRector::class,\n        UseForwardsCallsTraitRector::class,\n    ])\n    ->withPreparedSets(\n        deadCode: true,\n        codeQuality: true,\n        typeDeclarations: true,\n        privatization: true,\n        earlyReturn: true,\n    )\n    ->withPhpSets();\n"
  },
  {
    "path": "resources/css/app.css",
    "content": "/* Import Tailwind CSS 4 */\n@import \"tailwindcss\";\n\n/* Tailwind Typography Plugin */\n@plugin \"@tailwindcss/typography\";\n\n@import \"./fonts.css\";\n@import \"./theme.css\";\n\n[x-cloak] {\n    display: none !important;\n}\n"
  },
  {
    "path": "resources/css/filament/admin/theme.css",
    "content": "@import '../../../../vendor/filament/filament/resources/css/theme.css';\n@import '../../fonts.css';\n@import '../../theme.css';\n\n@source '../../../../app/Filament';\n@source '../../../../resources/views/filament';\n@source '../../../../vendor/relaticle/custom-fields';\n"
  },
  {
    "path": "resources/css/filament/app/theme.css",
    "content": "@import '../../../../vendor/filament/filament/resources/css/theme.css';\n@import '../../fonts.css';\n@import '../../theme.css';\n\n@source '../../../../app/Filament';\n@source '../../../../resources/views';\n\n/* ImportWizard */\n@source '../../../../packages/ImportWizard/resources';\n@source '../../../../packages/ImportWizardNew/resources';\n\n/* Custom Fields */\n@source '../../../../vendor/relaticle/flowforge/resources/views/**/*.blade.php';\n@source '../../../../vendor/relaticle/custom-fields/resources';\n\n/* ===================================\n   Relaticle Brand Theme Customization\n   Pure Tailwind CSS Classes Only\n   =================================== */\n\n/* App Panel Custom Layout */\n.fi-app-layout {\n    @apply flex h-screen;\n}\n\n.fi-app-main-wrapper {\n    @apply flex-1 flex flex-col min-w-0;\n\n    /* Only the content area scrolls, not the topbar */\n    > .fi-layout {\n        @apply flex-1 overflow-y-auto;\n    }\n}\n\n.fi-header-heading {\n    @apply text-2xl font-bold;\n}\n\n/* Sidebar Enhancements */\n.fi-sidebar {\n    @apply bg-gray-50 border-r border-gray-200 dark:bg-gray-800 dark:border-gray-800;\n\n    .fi-dropdown-list-item-image {\n        @apply rounded-md;\n    }\n}\n\n.fi-sidebar-nav {\n    @apply space-y-1 pt-2.5;\n}\n\n.fi-sidebar-item {\n    @apply transition-colors duration-200 ease-in-out;\n\n    .fi-sidebar-item-btn {\n        @apply dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800;\n        padding-block: calc(var(--spacing) * 1.7);\n    }\n\n    .fi-sidebar-item-icon {\n        width: calc(var(--spacing) * 5);\n        height: calc(var(--spacing) * 5);\n    }\n\n    .fi-sidebar-item-grouped-border {\n        width: calc(var(--spacing) * 5);\n        height: calc(var(--spacing) * 5);\n    }\n}\n\n.fi-sidebar-item.fi-active {\n    > .fi-sidebar-item-btn {\n        @apply bg-gray-100 dark:bg-gray-800 font-semibold;\n    }\n}\n\n.fi-sidebar-group {\n    @apply rounded-xl;\n}\n\n.fi-sidebar-group-items {\n    @apply rounded-xl;\n}\n\n/* Top Navigation Bar */\n.fi-topbar {\n    @apply min-h-14;\n}\n\n.fi-topbar nav {\n    @apply px-4 lg:px-6;\n}\n\n/* Button Enhancements */\n.fi-btn {\n    @apply relative overflow-hidden transition-shadow duration-200 rounded-xl;\n}\n\n/* Icon Buttons */\n.fi-icon-btn {\n    @apply rounded-xl;\n}\n\n/* Cards & Sections */\n\n/* Form Components */\n.fi-fo-component-ctn {\n    @apply rounded-xl;\n}\n\n/* Select & Dropdown Inputs */\n.fi-select-input {\n    @apply rounded-lg;\n}\n\n/* Tables */\n\n.fi-ta-ctn {\n    @apply rounded-xl shadow-sm;\n}\n\n/* Compact table density */\n.fi-ta-header-cell {\n    @apply py-2 text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400;\n}\n\n.fi-ta-text:not(.fi-inline),\n.fi-ta-icon:not(.fi-inline),\n.fi-ta-color:not(.fi-inline),\n.fi-ta-image:not(.fi-inline) {\n    @apply px-3 py-2;\n}\n\n.fi-ta-cell:has(.fi-ta-actions) {\n    @apply px-3 py-2;\n}\n\n.fi-ta-cell:has(.fi-ta-record-checkbox) {\n    @apply py-2;\n}\n\n.fi-ta-cell.fi-ta-selection-cell {\n    @apply py-2 text-start first-of-type:ps-4 sm:first-of-type:ps-4;\n}\n\n/* Column borders on body rows only (header uses resize handle's visual separator) */\n.fi-ta-table tbody td:not(:last-child):not(.fi-ta-selection-cell) {\n    @apply border-r border-gray-100 dark:border-gray-800;\n}\n\n.fi-ta-content {\n    @apply rounded-xl overflow-hidden;\n}\n\n.fi-ta-table thead {\n    @apply bg-gradient-to-r from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900;\n}\n\n/* Table header actions */\n.fi-ta-header {\n    /*@apply rounded-t-xl;*/\n}\n\n/* Table bulk actions */\n.fi-ta-bulk-actions {\n    @apply rounded-xl;\n}\n\n/* Pagination container */\n.fi-ta-pagination {\n    @apply rounded-b-xl bg-white dark:bg-gray-900;\n}\n\n.fi-pagination {\n    @apply rounded-b-xl;\n}\n\n/* Stats Widgets */\n.fi-wi-stats-overview-stat {\n    @apply relative overflow-hidden transition-shadow duration-300 bg-gradient-to-br from-white to-gray-50 dark:from-gray-800 dark:to-gray-900 hover:shadow-md rounded-xl;\n}\n\n/* Widget Containers */\n.fi-wi-widget {\n    @apply rounded-xl;\n}\n\n/* Badges */\n.fi-badge {\n    @apply rounded-lg;\n}\n\n/* Pills & Tags */\n.fi-tag {\n    @apply rounded-lg;\n}\n\n/* Modals */\n.fi-modal-slide-over {\n    .fi-modal-window {\n        @apply backdrop-blur-sm rounded-xl shadow-xl max-h-[calc(100vh-2rem)] mt-2.5 mr-3;\n    }\n}\n\n.fi-modal-content {\n    @apply rounded-xl;\n}\n\n/* Dropdowns */\n.fi-dropdown-panel {\n    @apply rounded-xl;\n}\n\n.fi-dropdown-list-item {\n    @apply rounded-lg;\n}\n\n/* Panels */\n.fi-panel {\n    @apply rounded-xl;\n}\n\n/* Infolists */\n.fi-in-component {\n    @apply rounded-xl;\n}\n\n/* Action Modals */\n.fi-ac-modal {\n    @apply rounded-xl;\n}\n\n/* Breadcrumbs */\n.fi-breadcrumbs {\n    @apply text-sm;\n}\n\n.fi-breadcrumbs-item a {\n    @apply transition-colors duration-200 hover:text-primary-600 dark:hover:text-primary-400;\n}\n\n/* Actions */\n.fi-ac-action:hover,\n.fi-ta-actions button:hover {\n    @apply transition-opacity duration-200 opacity-80;\n}\n\n/* Smooth Transitions */\n.fi-panel-content {\n    @apply transition-opacity duration-300 ease-out;\n}\n\n/* Custom Scrollbar Styling */\n.fi-sidebar {\n    @apply h-full bg-white dark:bg-gray-900;\n    scrollbar-width: thin;\n    scrollbar-color: theme('colors.gray.400') theme('colors.gray.100');\n}\n\n/* Sidebar scrollable content area */\n.fi-sidebar-nav {\n    @apply overflow-y-auto overflow-x-hidden;\n    scrollbar-width: thin;\n    scrollbar-color: theme('colors.gray.400') theme('colors.gray.100');\n}\n\n.fi-sidebar::-webkit-scrollbar {\n    @apply w-2;\n}\n\n.fi-sidebar::-webkit-scrollbar-track {\n    @apply bg-gray-100 dark:bg-gray-800;\n}\n\n.fi-sidebar::-webkit-scrollbar-thumb {\n    @apply bg-gray-400 dark:bg-gray-600 rounded-full hover:bg-gray-500 dark:hover:bg-gray-500;\n}\n\n/* Additional Component Polish */\n\n/* Avatar */\n.fi-avatar {\n    @apply rounded-full;\n}\n\n/* User Menu */\n.fi-user-menu-trigger {\n    @apply rounded-xl;\n}\n\n/* Tenant Menu */\n.fi-tenant-menu-trigger {\n    @apply rounded-lg;\n\n    .fi-tenant-avatar {\n        @apply rounded-md w-6 h-6;\n    }\n}\n\n/* Tenant Menu Dropdown - avatar images in the dropdown list */\n.fi-tenant-menu .fi-dropdown-list-item-image {\n    @apply rounded-md w-6 h-6 shrink-0;\n}\n\n/* Ensure tenant menu dropdown is visible above content when sidebar is collapsed */\n.fi-tenant-menu .fi-dropdown-panel {\n    @apply z-50;\n}\n\n/* Checkbox and Radio */\n.fi-checkbox-input {\n    @apply rounded-md;\n}\n\n.fi-radio-input {\n    @apply rounded-lg;\n}\n\n.fi-input-wrp {\n    @apply rounded-lg;\n}\n\n/* Toggle Switch */\n.fi-toggle {\n    @apply rounded-full;\n}\n\n/* Color Picker */\n.fi-color-picker {\n    @apply rounded-xl;\n}\n\n/* Date Picker */\n.fi-date-picker {\n    @apply rounded-xl;\n}\n\n/* File Upload */\n.fi-file-upload {\n    @apply rounded-xl;\n}\n\n.fi-file-upload-button {\n    @apply rounded-xl;\n}\n\n/* Rich Editor */\n.fi-rich-editor {\n    @apply rounded-xl;\n}\n\n/* Tabs */\n.fi-tabs-tab {\n    @apply rounded-xl;\n}\n\n/* Wizard */\n.fi-wizard {\n    @apply rounded-xl;\n}\n\n.fi-wizard-step {\n    @apply rounded-xl;\n}\n\n/* Account Widget */\n.fi-account-widget {\n    @apply rounded-xl;\n}\n\n/* Simple Page */\n.fi-simple-main {\n    @apply rounded-xl;\n}\n\n/* Layout Components */\n.fi-layout-component {\n    @apply rounded-xl;\n}\n\n/* Grid and Split Layouts */\n.fi-fo-grid {\n    @apply rounded-xl;\n}\n\n.fi-fo-split {\n    @apply rounded-xl;\n}\n\n/* Fieldset */\n.fi-fo-fieldset {\n    @apply rounded-xl border border-gray-200 dark:border-gray-700;\n}\n\n/* Repeater */\n.fi-fo-repeater {\n    @apply rounded-xl;\n}\n\n.fi-fo-repeater-item {\n    @apply rounded-xl;\n}\n\n/* Builder */\n.fi-fo-builder {\n    @apply rounded-xl;\n}\n\n.fi-fo-builder-block {\n    @apply rounded-xl;\n}\n\n/* FlowForge Specific Customizations */\n.flowforge-column-header {\n    @apply bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-700 rounded-t-xl;\n}\n"
  },
  {
    "path": "resources/css/fonts.css",
    "content": "@font-face {\n    font-family: \"Inter\";\n    src: url(\"/fonts/inter/InterVariable.woff2\") format(\"woff2\");\n    font-style: normal;\n    font-weight: 100 900;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: \"Satoshi\";\n    src: url(\"/fonts/satoshi/Satoshi-Variable.woff2\") format(\"woff2\");\n    font-style: normal;\n    font-weight: 300 900;\n    font-display: swap;\n}\n\n@font-face {\n    font-family: \"Satoshi\";\n    src: url(\"/fonts/satoshi/Satoshi-VariableItalic.woff2\") format(\"woff2\");\n    font-style: italic;\n    font-weight: 300 900;\n    font-display: swap;\n}\n"
  },
  {
    "path": "resources/css/theme.css",
    "content": "/* Theme Configuration */\n@theme {\n    /* Font Family */\n    --font-default: \"Inter\", ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --font-display: \"Satoshi\", ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --font-sans: var(--font-default);\n\n    /* Primary Color Scale */\n    --color-primary-50: oklch(0.969 0.016 293.756);\n    --color-primary-100: oklch(0.943 0.028 294.588);\n    --color-primary-200: oklch(0.894 0.055 293.283);\n    --color-primary-300: oklch(0.811 0.101 293.571);\n    --color-primary-400: oklch(0.709 0.159 293.541);\n    --color-primary-500: oklch(0.606 0.219 292.717);\n    --color-primary-600: oklch(0.541 0.247 293.009);\n    --color-primary-700: oklch(0.491 0.241 292.581);\n    --color-primary-800: oklch(0.432 0.211 292.759);\n    --color-primary-900: oklch(0.380 0.178 293.745);\n    --color-primary-950: oklch(0.283 0.135 291.089);\n    --color-primary: oklch(0.541 0.247 293.009); /* DEFAULT: primary-600 */\n}\n\n@custom-variant dark (&:where(.dark, .dark *));\n\n/* Hero gradient text animation — slow, subtle shimmer */\n@keyframes gradient-shift {\n    0%, 100% { background-position: 0% center; }\n    50% { background-position: 100% center; }\n}\n\n/* Badge spinning border */\n@keyframes badge-spin {\n    from { --badge-angle: 0deg; }\n    to   { --badge-angle: 360deg; }\n}\n\n@property --badge-angle {\n    syntax: \"<angle>\";\n    initial-value: 0deg;\n    inherits: false;\n}\n\n.hero-badge-wrapper {\n    overflow: hidden;\n}\n\n.hero-badge-border {\n    position: absolute;\n    inset: -1px;\n    border-radius: 9999px;\n    background: conic-gradient(\n        from var(--badge-angle),\n        transparent 0%,\n        transparent 30%,\n        var(--color-primary-300) 42%,\n        var(--color-primary) 50%,\n        var(--color-primary-300) 58%,\n        transparent 70%,\n        transparent 100%\n    );\n    animation: badge-spin 4s linear infinite;\n    mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\n    mask-composite: exclude;\n    -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\n    -webkit-mask-composite: xor;\n    padding: 1px;\n}\n\n:is(.dark) .hero-badge-border {\n    background: conic-gradient(\n        from var(--badge-angle),\n        transparent 0%,\n        transparent 30%,\n        var(--color-primary-400) 42%,\n        var(--color-primary-300) 50%,\n        var(--color-primary-400) 58%,\n        transparent 70%,\n        transparent 100%\n    );\n}\n\n/* Hero underline shimmer sweep */\n@keyframes shimmer-sweep {\n    0%   { background-position: 200% center; }\n    40%  { background-position: -50% center; }\n    100% { background-position: -50% center; }\n}\n\n/* Hero entrance animation — staggered fade + slide up */\n@keyframes hero-fade-up {\n    from {\n        opacity: 0;\n        transform: translateY(24px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.hero-enter {\n    opacity: 0;\n    animation: hero-fade-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;\n}\n\n.hero-enter-1 { animation-delay: 0ms; }\n.hero-enter-2 { animation-delay: 120ms; }\n.hero-enter-3 { animation-delay: 240ms; }\n.hero-enter-4 { animation-delay: 360ms; }\n.hero-enter-5 { animation-delay: 500ms; }\n.hero-enter-6 { animation-delay: 650ms; }\n\n/* Tab active indicator slide */\n.hero-tab-indicator {\n    transition: left 0.35s cubic-bezier(0.16, 1, 0.3, 1),\n                width 0.35s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n/* Respect reduced motion preference */\n@media (prefers-reduced-motion: reduce) {\n    .hero-enter {\n        opacity: 1;\n        animation: none;\n    }\n    .hero-tab-indicator {\n        transition: none;\n    }\n}\n"
  },
  {
    "path": "resources/js/app.js",
    "content": "import Alpine from \"alpinejs\"\nimport collapse from \"@alpinejs/collapse\"\n\nAlpine.plugin(collapse)\nwindow.Alpine = Alpine\nAlpine.start()\n"
  },
  {
    "path": "resources/js/motion.js",
    "content": "import { animate, scroll, inView, stagger, hover, press } from \"motion\"\n\nwindow.animate = animate\nwindow.scroll = scroll\nwindow.inView = inView\nwindow.stagger = stagger\nwindow.hover = hover\nwindow.press = press\n"
  },
  {
    "path": "resources/markdown/brand-assets.md",
    "content": "# Relaticle Brand Assets\n\n## Asset Map\n\n- `public/brand/logomark.svg`: Symbol-only mark.\n- `public/brand/wordmark.svg`: Lowercase `relaticle` vector wordmark.\n- `public/brand/logo-lockup.svg`: Horizontal lockup (logomark + wordmark).\n\n## Blade Components\n\n- `resources/views/components/brand/logomark.blade.php`:\n  - Use as `<x-brand.logomark size=\"sm|md|lg\" class=\"...\" />`\n  - Renders the symbol-only mark via the lockup source-of-truth component.\n\n- `resources/views/components/brand/wordmark.blade.php`:\n  - Use as `<x-brand.wordmark class=\"...\" />`\n  - Uses `currentColor` for light/dark adaptation.\n\n- `resources/views/components/brand/logo-lockup.blade.php`:\n  - Use as `<x-brand.logo-lockup ... />`\n  - Props:\n    - `size=\"sm|md|lg\"`\n    - `showWordmark=\"true|false\"`\n\n## Current Usage\n\n- Marketing header, footer, and mobile menu use lockup component:\n  - `resources/views/components/layout/header.blade.php`\n  - `resources/views/components/layout/footer.blade.php`\n  - `resources/views/components/layout/mobile-menu.blade.php`\n- Filament app panel logo uses symbol-only component:\n  - `resources/views/filament/app/logo.blade.php`\n- Email HTML header uses static PNG for client compatibility:\n  - `resources/views/vendor/mail/html/header.blade.php`\n\n## Basic Rules\n\n- Minimum size:\n  - Logomark: do not render below `h-6`.\n  - Wordmark: do not render below `h-4`.\n- Prefer lockup for primary navigation.\n- Use logomark-only component for tight app/panel/sidebar spaces.\n- Keep wordmark monochrome (`currentColor`) in app UI for theme consistency.\n- Treat `public/brand/*` as source assets for external/static consumers; use `x-brand.*` components in Blade UI.\n"
  },
  {
    "path": "resources/markdown/font-sources.md",
    "content": "# Font Sources\n\nThis project hosts its runtime web fonts locally under `public/fonts`.\n\n## Inter\n\n- Source URL: `https://rsms.me/inter/`\n- Downloaded file: `InterVariable.woff2`\n- Direct file URL used: `https://rsms.me/inter/font-files/InterVariable.woff2`\n- Retrieved: 2026-02-18\n- License: SIL Open Font License 1.1 (Inter project)\n\n## Satoshi\n\n- Source URL: `https://www.fontshare.com/fonts/satoshi`\n- CSS API URLs used:\n  - `https://api.fontshare.com/v2/css?f[]=satoshi@1&display=swap` (variable normal)\n  - `https://api.fontshare.com/v2/css?f[]=satoshi@2&display=swap` (variable italic)\n- Downloaded files:\n  - `Satoshi-Variable.woff2`\n  - `Satoshi-VariableItalic.woff2`\n- Retrieved: 2026-02-18\n- License: Fontshare terms/license for Satoshi as published on Fontshare\n"
  },
  {
    "path": "resources/markdown/policy.md",
    "content": "# Privacy Policy\n\n**Effective date:** March 20, 2026\n\nThis Privacy Policy explains how Relaticle (\"we\", \"us\", \"our\") collects, uses, and protects your personal data when you use our services.\n\n---\n\n## 1. What We Collect\n\n### Cloud Users (app.relaticle.com)\n\n- **Account information:** Name, email address, and password (hashed)\n- **Profile data:** Avatar, team name, and role\n- **CRM data:** Companies, people, opportunities, tasks, notes, and custom fields you create\n- **Usage data:** Login timestamps, feature usage, and error reports\n- **Technical data:** IP address, browser type, and device information\n\n### Self-Hosted Users\n\nWe do not collect any data from self-hosted installations. Your data stays entirely on your servers.\n\n### Website Visitors (relaticle.com)\n\n- **Contact form submissions:** Name, email, and message content\n- **Analytics:** Anonymous page views and referrer data\n\n## 2. How We Use Your Data\n\nWe use your data to:\n\n- Provide and maintain the CRM service\n- Authenticate your account and enforce team-level access controls\n- Send transactional emails (password resets, team invitations)\n- Improve the service based on aggregated, anonymized usage patterns\n- Respond to support inquiries\n\nWe do **not**:\n\n- Sell your data to third parties\n- Use your CRM data for advertising\n- Share your data with third parties except as described below\n- Train AI models on your data\n\n## 3. Third-Party Services\n\nThe Cloud service uses the following third-party providers:\n\n- **Hosting infrastructure:** For application and database hosting\n- **Email delivery:** For transactional emails (password resets, invitations)\n- **Error monitoring:** For detecting and fixing bugs (anonymized error reports)\n\nWe do not share your CRM data with any third party.\n\n## 4. Data Security\n\nWe protect your data with:\n\n- Encrypted connections (TLS/HTTPS) for all data in transit\n- Encrypted database storage for sensitive fields\n- Team-based access isolation (multi-tenancy)\n- API token authentication with scoped permissions\n- Regular security updates and dependency audits\n\n## 5. Data Retention\n\n- **Active accounts:** Data is retained as long as your account is active\n- **Deleted accounts:** Data is deleted within 30 days of account deletion\n- **Contact form submissions:** Retained for up to 12 months\n- **Server logs:** Retained for up to 90 days\n\n## 6. Your Rights\n\nYou have the right to:\n\n- **Access** your personal data at any time through the application\n- **Export** your data via the application or REST API\n- **Correct** inaccurate personal data through your profile settings\n- **Delete** your account and associated data\n- **Object** to data processing for specific purposes\n\nTo exercise these rights, contact us at [Contact Us](/contact). We will respond within 15 business days.\n\n## 7. Cookies\n\nThe Cloud service uses essential cookies for:\n\n- Session management (keeping you logged in)\n- CSRF protection (security)\n- Theme preferences (light/dark mode)\n\nWe do not use tracking cookies or third-party advertising cookies.\n\n## 8. Children\n\nOur services are not directed to children under 16. We do not knowingly collect personal data from children.\n\n## 9. Changes to This Policy\n\nWe may update this Privacy Policy from time to time. We will notify registered users of material changes via email or in-app notification.\n\n## 10. Contact\n\nQuestions about this Privacy Policy? Reach us at [Contact Us](/contact).\n"
  },
  {
    "path": "resources/markdown/terms.md",
    "content": "# Terms of Service\n\n**Effective date:** March 20, 2026\n\nThese Terms of Service (\"Terms\") govern your use of Relaticle, an open-source CRM platform provided by Relaticle (\"we\", \"us\", \"our\"). By accessing or using our services, you agree to these Terms.\n\n---\n\n## 1. Services\n\nRelaticle provides a customer relationship management (CRM) platform available in two forms:\n\n- **Cloud (Managed Hosting):** We host and maintain the application at app.relaticle.com. You access it through your web browser.\n- **Self-Hosted:** You download and run the open-source software on your own infrastructure under the AGPL-3.0 license.\n\nThese Terms apply to the Cloud service. Self-hosted installations are governed by the [AGPL-3.0 license](https://www.gnu.org/licenses/agpl-3.0.html).\n\n## 2. Accounts\n\nYou must provide accurate information when creating an account. You are responsible for maintaining the security of your account credentials. Notify us immediately if you suspect unauthorized access.\n\nYou must be at least 16 years old to use our services.\n\n## 3. Your Data\n\nYou own your data. We do not claim any intellectual property rights over the data you store in Relaticle.\n\n- **Cloud users:** Your data is stored on our servers. You can export your data at any time via the application or the REST API. If you delete your account, we will delete your data within 30 days.\n- **Self-hosted users:** Your data never touches our servers. You have full control.\n\n## 4. Acceptable Use\n\nYou agree not to:\n\n- Use the service for any illegal purpose\n- Attempt to gain unauthorized access to other users' data\n- Interfere with or disrupt the service\n- Upload malicious content or code\n- Violate the intellectual property rights of others\n\nWe reserve the right to suspend or terminate accounts that violate these terms.\n\n## 5. API and MCP Access\n\nAccess to the REST API and MCP server is governed by API tokens scoped to specific teams and permissions. You are responsible for keeping your API tokens secure. Revoke any token you believe has been compromised.\n\n## 6. Pricing\n\nRelaticle is free to use. Both the Cloud and Self-Hosted options are available at no cost. We may introduce paid features in the future, but existing free functionality will remain free.\n\n## 7. Availability\n\nWe aim for high availability of the Cloud service but do not guarantee uninterrupted access. Scheduled maintenance will be announced in advance when possible.\n\n## 8. Limitation of Liability\n\nThe service is provided \"as is\" without warranty of any kind, express or implied. To the maximum extent permitted by law, we shall not be liable for any indirect, incidental, or consequential damages arising from your use of the service.\n\n## 9. Changes to Terms\n\nWe may update these Terms from time to time. We will notify registered users of material changes via email or in-app notification. Continued use of the service after changes constitutes acceptance.\n\n## 10. Open Source\n\nRelaticle is open-source software licensed under AGPL-3.0. The source code is available at [github.com/Relaticle/relaticle](https://github.com/Relaticle/relaticle). Contributions are welcome under the same license.\n\n## 11. Contact\n\nQuestions about these Terms? Reach us at [Contact Us](/contact).\n"
  },
  {
    "path": "resources/views/api/api-token-manager.blade.php",
    "content": "<div>\n    <!-- Generate Access Token -->\n    <x-form-section submit=\"createApiToken\">\n        <x-slot name=\"title\">\n            {{ __('access-tokens.sections.create.title') }}\n        </x-slot>\n\n        <x-slot name=\"description\">\n            {{ __('access-tokens.sections.create.description') }}\n        </x-slot>\n\n        <x-slot name=\"form\">\n            <!-- Token Name -->\n            <div class=\"col-span-6 sm:col-span-4\">\n                <x-label for=\"name\" value=\"{{ __('Token Name') }}\" />\n                <x-input id=\"name\" type=\"text\" class=\"mt-1 block w-full\" wire:model=\"createApiTokenForm.name\" autofocus />\n                <x-input-error for=\"name\" class=\"mt-2\" />\n            </div>\n\n            <!-- Token Permissions -->\n            @if (Laravel\\Jetstream\\Jetstream::hasPermissions())\n                <div class=\"col-span-6\">\n                    <x-label for=\"permissions\" value=\"{{ __('Permissions') }}\" />\n\n                    <div class=\"mt-2 grid grid-cols-1 md:grid-cols-2 gap-4\">\n                        @foreach (Laravel\\Jetstream\\Jetstream::$permissions as $permission)\n                            <label class=\"flex items-center\">\n                                <x-checkbox wire:model=\"createApiTokenForm.permissions\" :value=\"$permission\"/>\n                                <span class=\"ms-2 text-sm text-gray-600 dark:text-gray-400\">{{ $permission }}</span>\n                            </label>\n                        @endforeach\n                    </div>\n                </div>\n            @endif\n        </x-slot>\n\n        <x-slot name=\"actions\">\n            <x-action-message class=\"me-3\" on=\"created\">\n                {{ __('Created.') }}\n            </x-action-message>\n\n            <x-button>\n                {{ __('Create') }}\n            </x-button>\n        </x-slot>\n    </x-form-section>\n\n    @if ($this->user->tokens->isNotEmpty())\n        <x-section-border />\n\n        <!-- Manage Access Tokens -->\n        <div class=\"mt-10 sm:mt-0\">\n            <x-action-section>\n                <x-slot name=\"title\">\n                    {{ __('access-tokens.sections.manage.title') }}\n                </x-slot>\n\n                <x-slot name=\"description\">\n                    {{ __('access-tokens.sections.manage.description') }}\n                </x-slot>\n\n                <!-- Access Token List -->\n                <x-slot name=\"content\">\n                    <div class=\"space-y-6\">\n                        @foreach ($this->user->tokens->sortBy('name') as $token)\n                            <div class=\"flex items-center justify-between\">\n                                <div class=\"break-all dark:text-white\">\n                                    {{ $token->name }}\n                                </div>\n\n                                <div class=\"flex items-center ms-2\">\n                                    @if ($token->last_used_at)\n                                        <div class=\"text-sm text-gray-400\">\n                                            {{ __('Last used') }} {{ $token->last_used_at->diffForHumans() }}\n                                        </div>\n                                    @endif\n\n                                    @if (Laravel\\Jetstream\\Jetstream::hasPermissions())\n                                        <button class=\"cursor-pointer ms-6 text-sm text-gray-400 underline\" wire:click=\"manageApiTokenPermissions({{ $token->id }})\">\n                                            {{ __('Permissions') }}\n                                        </button>\n                                    @endif\n\n                                    <button class=\"cursor-pointer ms-6 text-sm text-red-500\" wire:click=\"confirmApiTokenDeletion({{ $token->id }})\">\n                                        {{ __('Delete') }}\n                                    </button>\n                                </div>\n                            </div>\n                        @endforeach\n                    </div>\n                </x-slot>\n            </x-action-section>\n        </div>\n    @endif\n\n    <!-- Token Value Modal -->\n    <x-dialog-modal wire:model.live=\"displayingToken\">\n        <x-slot name=\"title\">\n            {{ __('access-tokens.modals.show_token.title') }}\n        </x-slot>\n\n        <x-slot name=\"content\">\n            <div>\n                {{ __('access-tokens.modals.show_token.description') }}\n            </div>\n\n            <x-input x-ref=\"plaintextToken\" type=\"text\" readonly :value=\"$plainTextToken\"\n                class=\"mt-4 bg-gray-100 px-4 py-2 rounded font-mono text-sm text-gray-500 w-full break-all\"\n                autofocus autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"\n                @showing-token-modal.window=\"setTimeout(() => $refs.plaintextToken.select(), 250)\"\n            />\n        </x-slot>\n\n        <x-slot name=\"footer\">\n            <x-secondary-button wire:click=\"$set('displayingToken', false)\" wire:loading.attr=\"disabled\">\n                {{ __('Close') }}\n            </x-secondary-button>\n        </x-slot>\n    </x-dialog-modal>\n\n    <!-- Access Token Permissions Modal -->\n    <x-dialog-modal wire:model.live=\"managingApiTokenPermissions\">\n        <x-slot name=\"title\">\n            {{ __('access-tokens.modals.permissions.title') }}\n        </x-slot>\n\n        <x-slot name=\"content\">\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                @foreach (Laravel\\Jetstream\\Jetstream::$permissions as $permission)\n                    <label class=\"flex items-center\">\n                        <x-checkbox wire:model=\"updateApiTokenForm.permissions\" :value=\"$permission\"/>\n                        <span class=\"ms-2 text-sm text-gray-600 dark:text-gray-400\">{{ $permission }}</span>\n                    </label>\n                @endforeach\n            </div>\n        </x-slot>\n\n        <x-slot name=\"footer\">\n            <x-secondary-button wire:click=\"$set('managingApiTokenPermissions', false)\" wire:loading.attr=\"disabled\">\n                {{ __('Cancel') }}\n            </x-secondary-button>\n\n            <x-button class=\"ms-3\" wire:click=\"updateApiToken\" wire:loading.attr=\"disabled\">\n                {{ __('Save') }}\n            </x-button>\n        </x-slot>\n    </x-dialog-modal>\n\n    <!-- Delete Token Confirmation Modal -->\n    <x-confirmation-modal wire:model.live=\"confirmingApiTokenDeletion\">\n        <x-slot name=\"title\">\n            {{ __('access-tokens.modals.delete.title') }}\n        </x-slot>\n\n        <x-slot name=\"content\">\n            {{ __('access-tokens.modals.delete.description') }}\n        </x-slot>\n\n        <x-slot name=\"footer\">\n            <x-secondary-button wire:click=\"$toggle('confirmingApiTokenDeletion')\" wire:loading.attr=\"disabled\">\n                {{ __('Cancel') }}\n            </x-secondary-button>\n\n            <x-danger-button class=\"ms-3\" wire:click=\"deleteApiToken\" wire:loading.attr=\"disabled\">\n                {{ __('Delete') }}\n            </x-danger-button>\n        </x-slot>\n    </x-confirmation-modal>\n</div>\n"
  },
  {
    "path": "resources/views/components/action-message.blade.php",
    "content": "@props(['on'])\n\n<div x-data=\"{ shown: false, timeout: null }\"\n    x-init=\"@this.on('{{ $on }}', () => { clearTimeout(timeout); shown = true; timeout = setTimeout(() => { shown = false }, 2000); })\"\n    x-show.transition.out.opacity.duration.1500ms=\"shown\"\n    x-transition:leave.opacity.duration.1500ms\n    style=\"display: none;\"\n    {{ $attributes->merge(['class' => 'text-sm text-gray-600 dark:text-gray-400']) }}>\n    {{ $slot->isEmpty() ? 'Saved.' : $slot }}\n</div>\n"
  },
  {
    "path": "resources/views/components/action-section.blade.php",
    "content": "<div {{ $attributes->merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>\n    <x-section-title>\n        <x-slot name=\"title\">{{ $title }}</x-slot>\n        <x-slot name=\"description\">{{ $description }}</x-slot>\n    </x-section-title>\n\n    <div class=\"mt-5 md:mt-0 md:col-span-2\">\n        <div class=\"px-4 py-5 sm:p-6 bg-white dark:bg-gray-800 shadow sm:rounded-lg\">\n            {{ $content }}\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/application-logo.blade.php",
    "content": "<svg viewBox=\"0 0 317 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {{ $attributes }}>\n  <path d=\"M74.09 30.04V13h-4.14v21H82.1v-3.96h-8.01zM95.379 19v1.77c-1.08-1.35-2.7-2.19-4.89-2.19-3.99 0-7.29 3.45-7.29 7.92s3.3 7.92 7.29 7.92c2.19 0 3.81-.84 4.89-2.19V34h3.87V19h-3.87zm-4.17 11.73c-2.37 0-4.14-1.71-4.14-4.23 0-2.52 1.77-4.23 4.14-4.23 2.4 0 4.17 1.71 4.17 4.23 0 2.52-1.77 4.23-4.17 4.23zM106.628 21.58V19h-3.87v15h3.87v-7.17c0-3.15 2.55-4.05 4.56-3.81V18.7c-1.89 0-3.78.84-4.56 2.88zM124.295 19v1.77c-1.08-1.35-2.7-2.19-4.89-2.19-3.99 0-7.29 3.45-7.29 7.92s3.3 7.92 7.29 7.92c2.19 0 3.81-.84 4.89-2.19V34h3.87V19h-3.87zm-4.17 11.73c-2.37 0-4.14-1.71-4.14-4.23 0-2.52 1.77-4.23 4.14-4.23 2.4 0 4.17 1.71 4.17 4.23 0 2.52-1.77 4.23-4.17 4.23zM141.544 19l-3.66 10.5-3.63-10.5h-4.26l5.7 15h4.41l5.7-15h-4.26zM150.354 28.09h11.31c.09-.51.15-1.02.15-1.59 0-4.41-3.15-7.92-7.59-7.92-4.71 0-7.92 3.45-7.92 7.92s3.18 7.92 8.22 7.92c2.88 0 5.13-1.17 6.54-3.21l-3.12-1.8c-.66.87-1.86 1.5-3.36 1.5-2.04 0-3.69-.84-4.23-2.82zm-.06-3c.45-1.92 1.86-3.03 3.93-3.03 1.62 0 3.24.87 3.72 3.03h-7.65zM164.516 34h3.87V12.1h-3.87V34zM185.248 34.36c3.69 0 6.9-2.01 6.9-6.3V13h-2.1v15.06c0 3.03-2.07 4.26-4.8 4.26-2.19 0-3.93-.78-4.62-2.61l-1.77 1.05c1.05 2.43 3.57 3.6 6.39 3.6zM203.124 18.64c-4.65 0-7.83 3.45-7.83 7.86 0 4.53 3.24 7.86 7.98 7.86 3.03 0 5.34-1.41 6.6-3.45l-1.74-1.02c-.81 1.44-2.46 2.55-4.83 2.55-3.18 0-5.55-1.89-5.97-4.95h13.17c.03-.3.06-.63.06-.93 0-4.11-2.85-7.92-7.44-7.92zm0 1.92c2.58 0 4.98 1.71 5.4 5.01h-11.19c.39-2.94 2.64-5.01 5.79-5.01zM221.224 20.92V19h-4.32v-4.2l-1.98.6V19h-3.15v1.92h3.15v9.09c0 3.6 2.25 4.59 6.3 3.99v-1.74c-2.91.12-4.32.33-4.32-2.25v-9.09h4.32zM225.176 22.93c0-1.62 1.59-2.37 3.15-2.37 1.44 0 2.97.57 3.6 2.1l1.65-.96c-.87-1.86-2.79-3.06-5.25-3.06-3 0-5.13 1.89-5.13 4.29 0 5.52 8.76 3.39 8.76 7.11 0 1.77-1.68 2.4-3.45 2.4-2.01 0-3.57-.99-4.11-2.52l-1.68.99c.75 1.92 2.79 3.45 5.79 3.45 3.21 0 5.43-1.77 5.43-4.32 0-5.52-8.76-3.39-8.76-7.11zM244.603 20.92V19h-4.32v-4.2l-1.98.6V19h-3.15v1.92h3.15v9.09c0 3.6 2.25 4.59 6.3 3.99v-1.74c-2.91.12-4.32.33-4.32-2.25v-9.09h4.32zM249.883 21.49V19h-1.98v15h1.98v-8.34c0-3.72 2.34-4.98 4.74-4.98v-1.92c-1.92 0-3.69.63-4.74 2.73zM263.358 18.64c-4.65 0-7.83 3.45-7.83 7.86 0 4.53 3.24 7.86 7.98 7.86 3.03 0 5.34-1.41 6.6-3.45l-1.74-1.02c-.81 1.44-2.46 2.55-4.83 2.55-3.18 0-5.55-1.89-5.97-4.95h13.17c.03-.3.06-.63.06-.93 0-4.11-2.85-7.92-7.44-7.92zm0 1.92c2.58 0 4.98 1.71 5.4 5.01h-11.19c.39-2.94 2.64-5.01 5.79-5.01zM286.848 19v2.94c-1.26-2.01-3.39-3.3-6.06-3.3-4.23 0-7.74 3.42-7.74 7.86s3.51 7.86 7.74 7.86c2.67 0 4.8-1.29 6.06-3.3V34h1.98V19h-1.98zm-5.91 13.44c-3.33 0-5.91-2.61-5.91-5.94 0-3.33 2.58-5.94 5.91-5.94s5.91 2.61 5.91 5.94c0 3.33-2.58 5.94-5.91 5.94zM309.01 18.64c-1.92 0-3.75.87-4.86 2.73-.84-1.74-2.46-2.73-4.56-2.73-1.8 0-3.42.72-4.59 2.55V19h-1.98v15H295v-8.31c0-3.72 2.16-5.13 4.32-5.13 2.13 0 3.51 1.41 3.51 4.08V34h1.98v-8.31c0-3.72 1.86-5.13 4.17-5.13 2.13 0 3.66 1.41 3.66 4.08V34h1.98v-9.36c0-3.75-2.31-6-5.61-6z\" class=\"fill-black dark:fill-white\"/>\n  <path d=\"M11.395 44.428C4.557 40.198 0 32.632 0 24 0 10.745 10.745 0 24 0a23.891 23.891 0 0113.997 4.502c-.2 17.907-11.097 33.245-26.602 39.926z\" fill=\"#6875F5\"/>\n  <path d=\"M14.134 45.885A23.914 23.914 0 0024 48c13.255 0 24-10.745 24-24 0-3.516-.756-6.856-2.115-9.866-4.659 15.143-16.608 27.092-31.75 31.751z\" fill=\"#6875F5\"/>\n</svg>\n"
  },
  {
    "path": "resources/views/components/application-mark.blade.php",
    "content": "<svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {{ $attributes }}>\n  <path d=\"M11.395 44.428C4.557 40.198 0 32.632 0 24 0 10.745 10.745 0 24 0a23.891 23.891 0 0113.997 4.502c-.2 17.907-11.097 33.245-26.602 39.926z\" fill=\"#6875F5\"/>\n  <path d=\"M14.134 45.885A23.914 23.914 0 0024 48c13.255 0 24-10.745 24-24 0-3.516-.756-6.856-2.115-9.866-4.659 15.143-16.608 27.092-31.75 31.751z\" fill=\"#6875F5\"/>\n</svg>\n"
  },
  {
    "path": "resources/views/components/authentication-card-logo.blade.php",
    "content": "<a href=\"/\">\n    <svg class=\"w-16 h-16\" viewbox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.395 44.428C4.557 40.198 0 32.632 0 24 0 10.745 10.745 0 24 0a23.891 23.891 0 0113.997 4.502c-.2 17.907-11.097 33.245-26.602 39.926z\" fill=\"#6875F5\"/>\n        <path d=\"M14.134 45.885A23.914 23.914 0 0024 48c13.255 0 24-10.745 24-24 0-3.516-.756-6.856-2.115-9.866-4.659 15.143-16.608 27.092-31.75 31.751z\" fill=\"#6875F5\"/>\n    </svg>\n</a>\n"
  },
  {
    "path": "resources/views/components/authentication-card.blade.php",
    "content": "<div class=\"min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100 dark:bg-gray-900\">\n    <div>\n        {{ $logo }}\n    </div>\n\n    <div class=\"w-full sm:max-w-md mt-6 px-6 py-4 bg-white dark:bg-gray-800 shadow-md overflow-hidden sm:rounded-lg\">\n        {{ $slot }}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/banner.blade.php",
    "content": "@props(['style' => session('flash.bannerStyle', 'success'), 'message' => session('flash.banner')])\n\n<div x-data=\"{{ json_encode(['show' => true, 'style' => $style, 'message' => $message]) }}\"\n    :class=\"{ 'bg-indigo-500': style == 'success', 'bg-red-700': style == 'danger', 'bg-yellow-500': style == 'warning', 'bg-gray-500': style != 'success' && style != 'danger' && style != 'warning'}\"\n            style=\"display: none;\"\n            x-show=\"show && message\"\n            x-on:banner-message.window=\"\n                style = event.detail.style;\n                message = event.detail.message;\n                show = true;\n            \">\n    <div class=\"max-w-screen-xl mx-auto py-2 px-3 sm:px-6 lg:px-8\">\n        <div class=\"flex items-center justify-between flex-wrap\">\n            <div class=\"w-0 flex-1 flex items-center min-w-0\">\n                <span class=\"flex p-2 rounded-lg\" :class=\"{ 'bg-indigo-600': style == 'success', 'bg-red-600': style == 'danger', 'bg-yellow-600': style == 'warning' }\">\n                    <svg x-show=\"style == 'success'\" class=\"h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n                    </svg>\n                    <svg x-show=\"style == 'danger'\" class=\"h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\" />\n                    </svg>\n                    <svg x-show=\"style != 'success' && style != 'danger' && style != 'warning'\" class=\"h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n                    </svg>\n                    <svg x-show=\"style == 'warning'\" class=\"h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                        <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" />\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 8v4m0 4v.01 0 0 \" />\n                    </svg>\n                </span>\n\n                <p class=\"ms-3 font-medium text-sm text-white truncate\" x-text=\"message\"></p>\n            </div>\n\n            <div class=\"shrink-0 sm:ms-3\">\n                <button\n                    type=\"button\"\n                    class=\"-me-1 flex p-2 rounded-md focus:outline-none sm:-me-2 transition\"\n                    :class=\"{ 'hover:bg-indigo-600 focus:bg-indigo-600': style == 'success', 'hover:bg-red-600 focus:bg-red-600': style == 'danger', 'hover:bg-yellow-600 focus:bg-yellow-600': style == 'warning'}\"\n                    aria-label=\"Dismiss\"\n                    x-on:click=\"show = false\">\n                    <svg class=\"h-5 w-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n                    </svg>\n                </button>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/brand/logo-lockup.blade.php",
    "content": "@props([\n    'showWordmark' => true,\n    'size' => 'md',\n])\n\n@php\n    $sizeMap = [\n        'sm' => 'h-7',\n        'md' => 'h-8',\n        'lg' => 'h-10',\n    ];\n    $heightClass = $sizeMap[$size] ?? $sizeMap['md'];\n    $viewWidth = $showWordmark ? 240 : 64;\n@endphp\n\n<svg\n    width=\"{{ $viewWidth }}\"\n    height=\"64\"\n    viewBox=\"0 0 {{ $viewWidth }} 64\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {{ $attributes->class(\"w-auto {$heightClass}\") }}\n>\n    <g transform=\"scale(0.055268)\">\n        <g clip-path=\"url(#clip0_38_20)\">\n            <path opacity=\"0.85\" d=\"M157.909 412.818C245.12 412.818 315.818 342.12 315.818 254.909C315.818 167.698 245.12 97 157.909 97C70.6983 97 0 167.698 0 254.909C0 342.12 70.6983 412.818 157.909 412.818Z\" fill=\"url(#paint0_linear_38_20)\"/>\n            <path opacity=\"0.75\" d=\"M1035.18 412.818C1103.01 412.818 1158 357.83 1158 290C1158 222.169 1103.01 167.182 1035.18 167.182C967.351 167.182 912.364 222.169 912.364 290C912.364 357.83 967.351 412.818 1035.18 412.818Z\" fill=\"url(#paint1_linear_38_20)\"/>\n            <path opacity=\"0.9\" d=\"M965 1062C1061.9 1062 1140.45 983.446 1140.45 886.545C1140.45 789.644 1061.9 711.09 965 711.09C868.099 711.09 789.545 789.644 789.545 886.545C789.545 983.446 868.099 1062 965 1062Z\" fill=\"url(#paint2_linear_38_20)\"/>\n            <path d=\"M579 869C743.732 869 877.273 735.459 877.273 570.727C877.273 405.996 743.732 272.455 579 272.455C414.269 272.455 280.727 405.996 280.727 570.727C280.727 735.459 414.269 869 579 869Z\" fill=\"url(#paint3_linear_38_20)\"/>\n            <path d=\"M579 570.728L157.909 254.91\" stroke=\"url(#paint4_linear_38_20)\" stroke-width=\"70\" stroke-linecap=\"round\"/>\n            <path d=\"M579 570.727L1035.18 290\" stroke=\"url(#paint5_linear_38_20)\" stroke-width=\"70\" stroke-linecap=\"round\"/>\n            <path d=\"M579 570.727L965 886.546\" stroke=\"url(#paint6_linear_38_20)\" stroke-width=\"70\" stroke-linecap=\"round\"/>\n        </g>\n    </g>\n\n    @if ($showWordmark)\n        <g transform=\"translate(68 3.4) scale(0.0445)\" stroke=\"currentColor\" stroke-width=\"8\" stroke-linejoin=\"round\">\n            <path d=\"M372.90118408203125 496.10015869140625V382.598876953125H327.801025390625Q261.50103759765625 382.598876953125 223.25106811523438 347.1490173339844Q185.0010986328125 311.69915771484375 185.0010986328125 239.49908447265625V0H63.3997802734375V493.30023193359375H177.801025390625L187.70111083984375 390.800048828125H176.4010009765625Q186.4010009765625 439.90008544921875 223.1009521484375 471.20013427734375Q259.8009033203125 502.50018310546875 319.0009765625 502.50018310546875Q332.10101318359375 502.50018310546875 345.10107421875 501.1501770019531Q358.10113525390625 499.8001708984375 372.90118408203125 496.10015869140625Z\" transform=\"translate(120 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M284.30023193359375 -12.70001220703125Q211.10015869140625 -12.70001220703125 154.55007934570312 20.550018310546875Q98 53.800048828125 65.84994506835938 112.40008544921875Q33.69989013671875 171.0001220703125 33.69989013671875 247.400146484375Q33.69989013671875 324.50018310546875 64.99993896484375 383.2502136230469Q96.29998779296875 442.000244140625 152.05007934570312 475.4002685546875Q207.8001708984375 508.80029296875 280.4002685546875 508.80029296875Q354.6004638671875 508.80029296875 408.7505798339844 477.6502380371094Q462.90069580078125 446.50018310546875 492.5507507324219 390.00006103515625Q522.2008056640625 333.49993896484375 522.2008056640625 256.29974365234375V219.399658203125L98.2005615234375 217.9996337890625L100.2005615234375 295.90032958984375H400.99951171875Q400.99951171875 347.29986572265625 368.5997314453125 377.99957275390625Q336.199951171875 408.69927978515625 281.10028076171875 408.69927978515625Q237.90045166015625 408.69927978515625 208.60064697265625 390.69940185546875Q179.30084228515625 372.69952392578125 164.15097045898438 336.99969482421875Q149.0010986328125 301.29986572265625 149.0010986328125 249Q149.0010986328125 169.10040283203125 183.65084838867188 128.25070190429688Q218.30059814453125 87.4010009765625 286.4002685546875 87.4010009765625Q336.4000244140625 87.4010009765625 368.69989013671875 106.15084838867188Q400.999755859375 124.90069580078125 410.7996826171875 159.70037841796875H523.600830078125Q508.200927734375 79.4002685546875 444.4507141113281 33.350128173828125Q380.70050048828125 -12.70001220703125 284.30023193359375 -12.70001220703125Z\" transform=\"translate(513 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M186.2010498046875 0H64.5997314453125V744.400390625H186.2010498046875Z\" transform=\"translate(1070 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M209.89996337890625 -12.70001220703125Q131.49993896484375 -12.70001220703125 86.19989013671875 29.450042724609375Q40.89984130859375 71.60009765625 40.89984130859375 141.000244140625Q40.89984130859375 209.10028076171875 88.54983520507812 249.80029296875Q136.1998291015625 290.50030517578125 224.39990234375 297.50030517578125L371.89959716796875 309.10028076171875V320.10015869140625Q371.89959716796875 353.7998046875 359.19970703125 374.4996337890625Q346.49981689453125 395.199462890625 323.9499816894531 404.7494201660156Q301.400146484375 414.29937744140625 270.4002685546875 414.29937744140625Q216.00048828125 414.29937744140625 186.900634765625 392.8495178222656Q157.80078125 371.399658203125 157.80078125 331.69989013671875H54.3997802734375Q54.3997802734375 385.70001220703125 81.74984741210938 425.4501037597656Q109.09991455078125 465.2001953125 159.45004272460938 487.000244140625Q209.8001708984375 508.80029296875 276.30035400390625 508.80029296875Q343.0006103515625 508.80029296875 390.80072021484375 485.3501892089844Q438.600830078125 461.90008544921875 464.6508483886719 415.3499450683594Q490.70086669921875 368.7998046875 490.70086669921875 299.7996826171875V0H384.399658203125L374.69964599609375 73.19970703125Q358.7998046875 34.69989013671875 313.2498474121094 10.99993896484375Q267.69989013671875 -12.70001220703125 209.89996337890625 -12.70001220703125ZM249.50054931640625 79.40087890625Q305.800048828125 79.40087890625 339.1998291015625 111.25045776367188Q372.599609375 143.10003662109375 372.599609375 199.5994873046875V226.29949951171875L269.70062255859375 217.49957275390625Q212.8009033203125 212.89959716796875 188.7010498046875 194.54983520507812Q164.6011962890625 176.2000732421875 164.6011962890625 146.2003173828125Q164.6011962890625 112.6005859375 186.70098876953125 96.000732421875Q208.80078125 79.40087890625 249.50054931640625 79.40087890625Z\" transform=\"translate(1321 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M13.69989013671875 494.000244140625H326.50115966796875V392.399169921875H13.69989013671875ZM230.90118408203125 0H109.29986572265625V648.1002807617188H230.90118408203125Z\" transform=\"translate(1869 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M63.3997802734375 0V494.000244140625H185.0010986328125V0ZM123.50042724609375 592.6994018554688Q92.50018310546875 592.6994018554688 70.9000244140625 614.299560546875Q49.29986572265625 635.8997192382812 49.29986572265625 666.5999755859375Q49.29986572265625 697.6002197265625 70.9000244140625 719.0003662109375Q92.50018310546875 740.4005126953125 123.50042724609375 740.4005126953125Q153.8006591796875 740.4005126953125 175.40081787109375 719.0003662109375Q197.0009765625 697.6002197265625 197.0009765625 666.5999755859375Q197.0009765625 635.8997192382812 175.40081787109375 614.299560546875Q153.8006591796875 592.6994018554688 123.50042724609375 592.6994018554688Z\" transform=\"translate(2209 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M33.69989013671875 247.8001708984375Q33.69989013671875 324.50018310546875 65.34994506835938 383.2502136230469Q97 442.000244140625 152.55007934570312 475.4002685546875Q208.10015869140625 508.80029296875 281.30023193359375 508.80029296875Q382.10064697265625 508.80029296875 446.7508239746094 456.30010986328125Q511.4010009765625 403.7999267578125 521.1008911132812 314.799560546875H398.49957275390625Q388.399658203125 357.29937744140625 358.89990234375 378.5992431640625Q329.400146484375 399.89910888671875 285.50030517578125 399.89910888671875Q247.2005615234375 399.89910888671875 217.60076904296875 381.2492370605469Q188.0009765625 362.599365234375 171.85110473632812 328.7496032714844Q155.70123291015625 294.89984130859375 155.70123291015625 248.10015869140625Q155.70123291015625 201.50042724609375 171.05111694335938 167.45065307617188Q186.4010009765625 133.40087890625 214.85079956054688 114.95101928710938Q243.30059814453125 96.50115966796875 282.30035400390625 96.50115966796875Q328.400146484375 96.50115966796875 358.89990234375 118.45101928710938Q389.399658203125 140.40087890625 399.09954833984375 181.000732421875H521.7008666992188Q514.3009643554688 123.4005126953125 481.8509216308594 79.95034790039062Q449.40087890625 36.50018310546875 398.000732421875 11.90008544921875Q346.6005859375 -12.70001220703125 282.30035400390625 -12.70001220703125Q207.2001953125 -12.70001220703125 151.25009155273438 19.850006103515625Q95.29998779296875 52.4000244140625 64.49993896484375 110.85006713867188Q33.69989013671875 169.30010986328125 33.69989013671875 247.8001708984375Z\" transform=\"translate(2457 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M186.2010498046875 0H64.5997314453125V744.400390625H186.2010498046875Z\" transform=\"translate(3007 1010) scale(1 -1)\" fill=\"currentColor\"/>\n            <path d=\"M284.30023193359375 -12.70001220703125Q211.10015869140625 -12.70001220703125 154.55007934570312 20.550018310546875Q98 53.800048828125 65.84994506835938 112.40008544921875Q33.69989013671875 171.0001220703125 33.69989013671875 247.400146484375Q33.69989013671875 324.50018310546875 64.99993896484375 383.2502136230469Q96.29998779296875 442.000244140625 152.05007934570312 475.4002685546875Q207.8001708984375 508.80029296875 280.4002685546875 508.80029296875Q354.6004638671875 508.80029296875 408.7505798339844 477.6502380371094Q462.90069580078125 446.50018310546875 492.5507507324219 390.00006103515625Q522.2008056640625 333.49993896484375 522.2008056640625 256.29974365234375V219.399658203125L98.2005615234375 217.9996337890625L100.2005615234375 295.90032958984375H400.99951171875Q400.99951171875 347.29986572265625 368.5997314453125 377.99957275390625Q336.199951171875 408.69927978515625 281.10028076171875 408.69927978515625Q237.90045166015625 408.69927978515625 208.60064697265625 390.69940185546875Q179.30084228515625 372.69952392578125 164.15097045898438 336.99969482421875Q149.0010986328125 301.29986572265625 149.0010986328125 249Q149.0010986328125 169.10040283203125 183.65084838867188 128.25070190429688Q218.30059814453125 87.4010009765625 286.4002685546875 87.4010009765625Q336.4000244140625 87.4010009765625 368.69989013671875 106.15084838867188Q400.999755859375 124.90069580078125 410.7996826171875 159.70037841796875H523.600830078125Q508.200927734375 79.4002685546875 444.4507141113281 33.350128173828125Q380.70050048828125 -12.70001220703125 284.30023193359375 -12.70001220703125Z\" transform=\"translate(3258 1010) scale(1 -1)\" fill=\"currentColor\"/>\n        </g>\n    @endif\n\n    <defs>\n        <linearGradient id=\"paint0_linear_38_20\" x1=\"0\" y1=\"97\" x2=\"31581.8\" y2=\"31678.8\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <linearGradient id=\"paint1_linear_38_20\" x1=\"912.364\" y1=\"167.182\" x2=\"25476\" y2=\"24730.8\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <linearGradient id=\"paint2_linear_38_20\" x1=\"789.545\" y1=\"711.09\" x2=\"35880.5\" y2=\"35802\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <linearGradient id=\"paint3_linear_38_20\" x1=\"280.727\" y1=\"272.455\" x2=\"59935.3\" y2=\"59927\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <linearGradient id=\"paint4_linear_38_20\" x1=\"157.909\" y1=\"254.91\" x2=\"30476.5\" y2=\"40679.7\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <linearGradient id=\"paint5_linear_38_20\" x1=\"579\" y1=\"290\" x2=\"25639.6\" y2=\"41013.5\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <linearGradient id=\"paint6_linear_38_20\" x1=\"579\" y1=\"570.727\" x2=\"31535.4\" y2=\"38406.4\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#5D54E8\"/>\n            <stop offset=\"1\" stop-color=\"#4038CD\"/>\n        </linearGradient>\n        <clipPath id=\"clip0_38_20\">\n            <rect width=\"1158\" height=\"1158\" fill=\"white\"/>\n        </clipPath>\n    </defs>\n</svg>\n"
  },
  {
    "path": "resources/views/components/brand/logomark.blade.php",
    "content": "@props([\n    'size' => 'md',\n])\n\n<x-brand.logo-lockup\n    :show-wordmark=\"false\"\n    :size=\"$size\"\n    {{ $attributes }}\n/>\n"
  },
  {
    "path": "resources/views/components/brand/wordmark.blade.php",
    "content": "<svg\n    width=\"3935\"\n    height=\"1250\"\n    viewBox=\"0 0 3935 1250\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {{ $attributes->class('h-5 w-auto') }}\n>\n    <path d=\"M372.90118408203125 496.10015869140625V382.598876953125H327.801025390625Q261.50103759765625 382.598876953125 223.25106811523438 347.1490173339844Q185.0010986328125 311.69915771484375 185.0010986328125 239.49908447265625V0H63.3997802734375V493.30023193359375H177.801025390625L187.70111083984375 390.800048828125H176.4010009765625Q186.4010009765625 439.90008544921875 223.1009521484375 471.20013427734375Q259.8009033203125 502.50018310546875 319.0009765625 502.50018310546875Q332.10101318359375 502.50018310546875 345.10107421875 501.1501770019531Q358.10113525390625 499.8001708984375 372.90118408203125 496.10015869140625Z\" transform=\"translate(120 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M284.30023193359375 -12.70001220703125Q211.10015869140625 -12.70001220703125 154.55007934570312 20.550018310546875Q98 53.800048828125 65.84994506835938 112.40008544921875Q33.69989013671875 171.0001220703125 33.69989013671875 247.400146484375Q33.69989013671875 324.50018310546875 64.99993896484375 383.2502136230469Q96.29998779296875 442.000244140625 152.05007934570312 475.4002685546875Q207.8001708984375 508.80029296875 280.4002685546875 508.80029296875Q354.6004638671875 508.80029296875 408.7505798339844 477.6502380371094Q462.90069580078125 446.50018310546875 492.5507507324219 390.00006103515625Q522.2008056640625 333.49993896484375 522.2008056640625 256.29974365234375V219.399658203125L98.2005615234375 217.9996337890625L100.2005615234375 295.90032958984375H400.99951171875Q400.99951171875 347.29986572265625 368.5997314453125 377.99957275390625Q336.199951171875 408.69927978515625 281.10028076171875 408.69927978515625Q237.90045166015625 408.69927978515625 208.60064697265625 390.69940185546875Q179.30084228515625 372.69952392578125 164.15097045898438 336.99969482421875Q149.0010986328125 301.29986572265625 149.0010986328125 249Q149.0010986328125 169.10040283203125 183.65084838867188 128.25070190429688Q218.30059814453125 87.4010009765625 286.4002685546875 87.4010009765625Q336.4000244140625 87.4010009765625 368.69989013671875 106.15084838867188Q400.999755859375 124.90069580078125 410.7996826171875 159.70037841796875H523.600830078125Q508.200927734375 79.4002685546875 444.4507141113281 33.350128173828125Q380.70050048828125 -12.70001220703125 284.30023193359375 -12.70001220703125Z\" transform=\"translate(513 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M186.2010498046875 0H64.5997314453125V744.400390625H186.2010498046875Z\" transform=\"translate(1070 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M209.89996337890625 -12.70001220703125Q131.49993896484375 -12.70001220703125 86.19989013671875 29.450042724609375Q40.89984130859375 71.60009765625 40.89984130859375 141.000244140625Q40.89984130859375 209.10028076171875 88.54983520507812 249.80029296875Q136.1998291015625 290.50030517578125 224.39990234375 297.50030517578125L371.89959716796875 309.10028076171875V320.10015869140625Q371.89959716796875 353.7998046875 359.19970703125 374.4996337890625Q346.49981689453125 395.199462890625 323.9499816894531 404.7494201660156Q301.400146484375 414.29937744140625 270.4002685546875 414.29937744140625Q216.00048828125 414.29937744140625 186.900634765625 392.8495178222656Q157.80078125 371.399658203125 157.80078125 331.69989013671875H54.3997802734375Q54.3997802734375 385.70001220703125 81.74984741210938 425.4501037597656Q109.09991455078125 465.2001953125 159.45004272460938 487.000244140625Q209.8001708984375 508.80029296875 276.30035400390625 508.80029296875Q343.0006103515625 508.80029296875 390.80072021484375 485.3501892089844Q438.600830078125 461.90008544921875 464.6508483886719 415.3499450683594Q490.70086669921875 368.7998046875 490.70086669921875 299.7996826171875V0H384.399658203125L374.69964599609375 73.19970703125Q358.7998046875 34.69989013671875 313.2498474121094 10.99993896484375Q267.69989013671875 -12.70001220703125 209.89996337890625 -12.70001220703125ZM249.50054931640625 79.40087890625Q305.800048828125 79.40087890625 339.1998291015625 111.25045776367188Q372.599609375 143.10003662109375 372.599609375 199.5994873046875V226.29949951171875L269.70062255859375 217.49957275390625Q212.8009033203125 212.89959716796875 188.7010498046875 194.54983520507812Q164.6011962890625 176.2000732421875 164.6011962890625 146.2003173828125Q164.6011962890625 112.6005859375 186.70098876953125 96.000732421875Q208.80078125 79.40087890625 249.50054931640625 79.40087890625Z\" transform=\"translate(1321 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M13.69989013671875 494.000244140625H326.50115966796875V392.399169921875H13.69989013671875ZM230.90118408203125 0H109.29986572265625V648.1002807617188H230.90118408203125Z\" transform=\"translate(1869 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M63.3997802734375 0V494.000244140625H185.0010986328125V0ZM123.50042724609375 592.6994018554688Q92.50018310546875 592.6994018554688 70.9000244140625 614.299560546875Q49.29986572265625 635.8997192382812 49.29986572265625 666.5999755859375Q49.29986572265625 697.6002197265625 70.9000244140625 719.0003662109375Q92.50018310546875 740.4005126953125 123.50042724609375 740.4005126953125Q153.8006591796875 740.4005126953125 175.40081787109375 719.0003662109375Q197.0009765625 697.6002197265625 197.0009765625 666.5999755859375Q197.0009765625 635.8997192382812 175.40081787109375 614.299560546875Q153.8006591796875 592.6994018554688 123.50042724609375 592.6994018554688Z\" transform=\"translate(2209 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M33.69989013671875 247.8001708984375Q33.69989013671875 324.50018310546875 65.34994506835938 383.2502136230469Q97 442.000244140625 152.55007934570312 475.4002685546875Q208.10015869140625 508.80029296875 281.30023193359375 508.80029296875Q382.10064697265625 508.80029296875 446.7508239746094 456.30010986328125Q511.4010009765625 403.7999267578125 521.1008911132812 314.799560546875H398.49957275390625Q388.399658203125 357.29937744140625 358.89990234375 378.5992431640625Q329.400146484375 399.89910888671875 285.50030517578125 399.89910888671875Q247.2005615234375 399.89910888671875 217.60076904296875 381.2492370605469Q188.0009765625 362.599365234375 171.85110473632812 328.7496032714844Q155.70123291015625 294.89984130859375 155.70123291015625 248.10015869140625Q155.70123291015625 201.50042724609375 171.05111694335938 167.45065307617188Q186.4010009765625 133.40087890625 214.85079956054688 114.95101928710938Q243.30059814453125 96.50115966796875 282.30035400390625 96.50115966796875Q328.400146484375 96.50115966796875 358.89990234375 118.45101928710938Q389.399658203125 140.40087890625 399.09954833984375 181.000732421875H521.7008666992188Q514.3009643554688 123.4005126953125 481.8509216308594 79.95034790039062Q449.40087890625 36.50018310546875 398.000732421875 11.90008544921875Q346.6005859375 -12.70001220703125 282.30035400390625 -12.70001220703125Q207.2001953125 -12.70001220703125 151.25009155273438 19.850006103515625Q95.29998779296875 52.4000244140625 64.49993896484375 110.85006713867188Q33.69989013671875 169.30010986328125 33.69989013671875 247.8001708984375Z\" transform=\"translate(2457 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M186.2010498046875 0H64.5997314453125V744.400390625H186.2010498046875Z\" transform=\"translate(3007 1010) scale(1 -1)\" fill=\"currentColor\"/>\n    <path d=\"M284.30023193359375 -12.70001220703125Q211.10015869140625 -12.70001220703125 154.55007934570312 20.550018310546875Q98 53.800048828125 65.84994506835938 112.40008544921875Q33.69989013671875 171.0001220703125 33.69989013671875 247.400146484375Q33.69989013671875 324.50018310546875 64.99993896484375 383.2502136230469Q96.29998779296875 442.000244140625 152.05007934570312 475.4002685546875Q207.8001708984375 508.80029296875 280.4002685546875 508.80029296875Q354.6004638671875 508.80029296875 408.7505798339844 477.6502380371094Q462.90069580078125 446.50018310546875 492.5507507324219 390.00006103515625Q522.2008056640625 333.49993896484375 522.2008056640625 256.29974365234375V219.399658203125L98.2005615234375 217.9996337890625L100.2005615234375 295.90032958984375H400.99951171875Q400.99951171875 347.29986572265625 368.5997314453125 377.99957275390625Q336.199951171875 408.69927978515625 281.10028076171875 408.69927978515625Q237.90045166015625 408.69927978515625 208.60064697265625 390.69940185546875Q179.30084228515625 372.69952392578125 164.15097045898438 336.99969482421875Q149.0010986328125 301.29986572265625 149.0010986328125 249Q149.0010986328125 169.10040283203125 183.65084838867188 128.25070190429688Q218.30059814453125 87.4010009765625 286.4002685546875 87.4010009765625Q336.4000244140625 87.4010009765625 368.69989013671875 106.15084838867188Q400.999755859375 124.90069580078125 410.7996826171875 159.70037841796875H523.600830078125Q508.200927734375 79.4002685546875 444.4507141113281 33.350128173828125Q380.70050048828125 -12.70001220703125 284.30023193359375 -12.70001220703125Z\" transform=\"translate(3258 1010) scale(1 -1)\" fill=\"currentColor\"/>\n</svg>\n"
  },
  {
    "path": "resources/views/components/browser-sessions.blade.php",
    "content": "<x-dynamic-component\n    :component=\"$getFieldWrapperView()\"\n    :field=\"$field\"\n>\n    <div class=\"text-sm mb-4\">\n        {{ __('profile.sections.browser_sessions.notice') }}\n    </div>\n\n    @if (count($sessions) > 0)\n        <div class=\"space-y-6\">\n            <!-- Other Browser Sessions -->\n            @foreach ($sessions as $session)\n                <div class=\"flex items-center\">\n                    <div>\n                        @if ($session->agent->isDesktop())\n                            <x-filament::icon icon=\"heroicon-o-computer-desktop\" class=\"w-8 h-8 \"/>\n                        @else\n                            <x-filament::icon icon=\"heroicon-o-device-phone-mobile\" class=\"w-8 h-8 \"/>\n                        @endif\n                    </div>\n\n                    <div class=\"ms-3\">\n                        <div class=\"text-sm\">\n                            {{ $session->agent->platform() ?: __('profile.sections.browser_sessions.labels.unknown_device') }}\n                            - {{ $session->agent->browser() ?: __('profile.sections.browser_sessions.labels.unknown_device') }}\n                        </div>\n\n                        <div>\n                            <div class=\"text-xs text-gray-500\">\n                                {{ $session->ip_address }},\n\n                                @if ($session->is_current_device)\n                                    <span\n                                        class=\"font-semibold\">{{ __('profile.sections.browser_sessions.labels.current_device') }}</span>\n                                @else\n                                    {{ __('profile.sections.browser_sessions.labels.last_active') }} {{ $session->last_active }}\n                                @endif\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            @endforeach\n        </div>\n    @endif\n</x-dynamic-component>\n"
  },
  {
    "path": "resources/views/components/button.blade.php",
    "content": "<x-filament::button {{ $attributes->merge(['type' => 'submit']) }}>\n    {{ $slot }}\n</x-filament::button>\n"
  },
  {
    "path": "resources/views/components/checkbox.blade.php",
    "content": "<input type=\"checkbox\" {!! $attributes->merge(['class' => 'rounded dark:bg-gray-900 border-gray-300 dark:border-gray-700 text-gray-600 shadow-sm focus:ring-gray-500 dark:focus:ring-gray-600 dark:focus:ring-offset-gray-800']) !!}>\n"
  },
  {
    "path": "resources/views/components/confirmation-modal.blade.php",
    "content": "@props(['id' => null, 'maxWidth' => null])\n\n<x-modal :id=\"$id\" :maxWidth=\"$maxWidth\" {{ $attributes }}>\n    <div class=\"bg-white dark:bg-gray-800 px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n        <div class=\"sm:flex sm:items-start\">\n            <div class=\"mx-auto shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\">\n                <svg class=\"h-6 w-6 text-red-600 dark:text-red-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n                </svg>\n            </div>\n\n            <div class=\"mt-3 text-center sm:mt-0 sm:ms-4 sm:text-start\">\n                <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">\n                    {{ $title }}\n                </h3>\n\n                <div class=\"mt-4 text-sm text-gray-600 dark:text-gray-400\">\n                    {{ $content }}\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"flex flex-row justify-end px-6 py-4 bg-gray-100 dark:bg-gray-800 text-end\">\n        {{ $footer }}\n    </div>\n</x-modal>\n"
  },
  {
    "path": "resources/views/components/confirms-password.blade.php",
    "content": "@props(['title' => __('Confirm Password'), 'content' => __('For your security, please confirm your password to continue.'), 'button' => __('Confirm')])\n\n@php\n    $confirmableId = md5($attributes->wire('then'));\n@endphp\n\n<span\n    {{ $attributes->wire('then') }}\n    x-data\n    x-ref=\"span\"\n    x-on:click=\"$wire.startConfirmingPassword('{{ $confirmableId }}')\"\n    x-on:password-confirmed.window=\"setTimeout(() => $event.detail.id === '{{ $confirmableId }}' && $refs.span.dispatchEvent(new CustomEvent('then', { bubbles: false })), 250);\"\n>\n    {{ $slot }}\n</span>\n\n@once\n<x-dialog-modal wire:model.live=\"confirmingPassword\">\n    <x-slot name=\"title\">\n        {{ $title }}\n    </x-slot>\n\n    <x-slot name=\"content\">\n        {{ $content }}\n\n        <div class=\"mt-4\" x-data=\"{}\" x-on:confirming-password.window=\"setTimeout(() => $refs.confirmable_password.focus(), 250)\">\n            <x-input type=\"password\" class=\"mt-1 block w-3/4\" placeholder=\"{{ __('Password') }}\" autocomplete=\"current-password\"\n                        x-ref=\"confirmable_password\"\n                        wire:model=\"confirmablePassword\"\n                        wire:keydown.enter=\"confirmPassword\" />\n\n            <x-input-error for=\"confirmable_password\" class=\"mt-2\" />\n        </div>\n    </x-slot>\n\n    <x-slot name=\"footer\">\n        <x-secondary-button wire:click=\"stopConfirmingPassword\" wire:loading.attr=\"disabled\">\n            {{ __('Cancel') }}\n        </x-secondary-button>\n\n        <x-button class=\"ms-3\" dusk=\"confirm-password-button\" wire:click=\"confirmPassword\" wire:loading.attr=\"disabled\">\n            {{ $button }}\n        </x-button>\n    </x-slot>\n</x-dialog-modal>\n@endonce\n"
  },
  {
    "path": "resources/views/components/danger-button.blade.php",
    "content": "<button {{ $attributes->merge(['type' => 'button', 'class' => 'inline-flex items-center justify-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 active:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150']) }}>\n    {{ $slot }}\n</button>\n"
  },
  {
    "path": "resources/views/components/dialog-modal.blade.php",
    "content": "@props(['id' => null, 'maxWidth' => null])\n\n<x-modal :id=\"$id\" :maxWidth=\"$maxWidth\" {{ $attributes }}>\n    <div class=\"px-6 py-4\">\n        <div class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">\n            {{ $title }}\n        </div>\n\n        <div class=\"mt-4 text-sm text-gray-600 dark:text-gray-400\">\n            {{ $content }}\n        </div>\n    </div>\n\n    <div class=\"flex flex-row justify-end px-6 py-4 bg-gray-100 dark:bg-gray-800 text-end\">\n        {{ $footer }}\n    </div>\n</x-modal>\n"
  },
  {
    "path": "resources/views/components/dropdown-link.blade.php",
    "content": "<a {{ $attributes->merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-800 transition duration-150 ease-in-out']) }}>{{ $slot }}</a>\n"
  },
  {
    "path": "resources/views/components/dropdown.blade.php",
    "content": "@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white dark:bg-gray-700', 'dropdownClasses' => ''])\n\n@php\n$alignmentClasses = match ($align) {\n    'left' => 'ltr:origin-top-left rtl:origin-top-right start-0',\n    'top' => 'origin-top',\n    'none', 'false' => '',\n    default => 'ltr:origin-top-right rtl:origin-top-left end-0',\n};\n\n$width = match ($width) {\n    '48' => 'w-48',\n    '60' => 'w-60',\n    default => 'w-48',\n};\n@endphp\n\n<div class=\"relative\" x-data=\"{ open: false }\" @click.away=\"open = false\" @close.stop=\"open = false\">\n    <div @click=\"open = ! open\">\n        {{ $trigger }}\n    </div>\n\n    <div x-show=\"open\"\n            x-transition:enter=\"transition ease-out duration-200\"\n            x-transition:enter-start=\"transform opacity-0 scale-95\"\n            x-transition:enter-end=\"transform opacity-100 scale-100\"\n            x-transition:leave=\"transition ease-in duration-75\"\n            x-transition:leave-start=\"transform opacity-100 scale-100\"\n            x-transition:leave-end=\"transform opacity-0 scale-95\"\n            class=\"absolute z-50 mt-2 {{ $width }} rounded-md shadow-lg {{ $alignmentClasses }} {{ $dropdownClasses }}\"\n            style=\"display: none;\"\n            @click=\"open = false\">\n        <div class=\"rounded-md ring-1 ring-black ring-opacity-5 {{ $contentClasses }}\">\n            {{ $content }}\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/form-section.blade.php",
    "content": "@props(['submit'])\n\n<div {{ $attributes->merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>\n    <x-section-title>\n        <x-slot name=\"title\">{{ $title }}</x-slot>\n        <x-slot name=\"description\">{{ $description }}</x-slot>\n    </x-section-title>\n\n    <div class=\"mt-5 md:mt-0 md:col-span-2\">\n        <form wire:submit=\"{{ $submit }}\">\n            <div class=\"px-4 py-5 bg-white dark:bg-gray-800 sm:p-6 shadow {{ isset($actions) ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md' }}\">\n                <div class=\"grid grid-cols-6 gap-6\">\n                    {{ $form }}\n                </div>\n            </div>\n\n            @if (isset($actions))\n                <div class=\"flex items-center justify-end px-4 py-3 bg-gray-50 dark:bg-gray-800 text-end sm:px-6 shadow sm:rounded-bl-md sm:rounded-br-md\">\n                    {{ $actions }}\n                </div>\n            @endif\n        </form>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/input-error.blade.php",
    "content": "@props(['for'])\n\n@error($for)\n    <p {{ $attributes->merge(['class' => 'text-sm text-red-600 dark:text-red-400']) }}>{{ $message }}</p>\n@enderror\n"
  },
  {
    "path": "resources/views/components/input.blade.php",
    "content": "@props(['disabled' => false])\n\n<input {{ $disabled ? 'disabled' : '' }} {!! $attributes->merge(['class' => 'border-gray-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 focus:border-gray-500 dark:focus:border-gray-600 focus:ring-gray-500 dark:focus:ring-gray-600 rounded-md shadow-sm']) !!}>\n"
  },
  {
    "path": "resources/views/components/label.blade.php",
    "content": "@props(['value'])\n\n<label {{ $attributes->merge(['class' => 'block font-medium text-sm text-gray-700 dark:text-gray-300']) }}>\n    {{ $value ?? $slot }}\n</label>\n"
  },
  {
    "path": "resources/views/components/layout/footer.blade.php",
    "content": "<!-- Minimalist Footer -->\n<footer class=\"py-12 md:py-16 border-t border-gray-100 dark:border-gray-900 bg-white dark:bg-gray-950\">\n    <div class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n        <div\n            class=\"grid grid-cols-1 md:grid-cols-12 gap-10 md:gap-8 pb-10 border-b border-gray-100 dark:border-gray-900\">\n            <!-- Company Info -->\n            <div class=\"md:col-span-5 space-y-5\">\n                <a href=\"{{ url('/') }}\" class=\"inline-flex w-fit\" aria-label=\"Relaticle Home\">\n                    <x-brand.logo-lockup size=\"md\" class=\"text-black dark:text-white\" />\n                </a>\n                <p class=\"text-gray-500 dark:text-gray-400 text-sm leading-relaxed max-w-md\">\n                    The open-source CRM built for AI agents. Self-hosted. No per-seat pricing. Yours to own.\n                </p>\n\n                <!-- Social links - Simplified -->\n                <div class=\"flex space-x-4\">\n                    <a href=\"https://github.com/Relaticle/relaticle\" target=\"_blank\" rel=\"noopener noreferrer\"\n                       class=\"text-gray-400 hover:text-primary dark:hover:text-primary-400 transition-colors\"\n                       aria-label=\"GitHub\">\n                        <x-ri-github-fill class=\"h-5 w-5\" />\n                    </a>\n                    <a href=\"https://x.com/relaticle\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-400 hover:text-primary dark:hover:text-primary-400 transition-colors\"\n                       aria-label=\"X\">\n                        <x-ri-twitter-x-fill class=\"h-5 w-5\" />\n                    </a>\n                    <a href=\"https://www.linkedin.com/company/relaticle\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-gray-400 hover:text-primary dark:hover:text-primary-400 transition-colors\"\n                       aria-label=\"LinkedIn\">\n                        <x-ri-linkedin-box-fill class=\"h-5 w-5\" />\n                    </a>\n                </div>\n            </div>\n\n            <!-- Quick Links Column - Simplified -->\n            <div class=\"md:col-span-3\">\n                <h3 class=\"font-medium text-xs text-black dark:text-white uppercase tracking-wider mb-4\">\n                    Quick Links\n                </h3>\n                <ul class=\"space-y-3\">\n                    <li>\n                        <a href=\"{{ url('/') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Home\n                        </a>\n                    </li>\n                    <li>\n                        <a href=\"{{ route('pricing') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Pricing\n                        </a>\n                    </li>\n                    <li>\n                        <a href=\"{{ route('documentation.index') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Documentation\n                        </a>\n                    </li>\n                    <li>\n                        <a href=\"{{ url('/#features') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Features\n                        </a>\n                    </li>\n                </ul>\n            </div>\n\n            <!-- Legal Links Column - Simplified -->\n            <div class=\"md:col-span-4\">\n                <h3 class=\"font-medium text-xs text-black dark:text-white uppercase tracking-wider mb-4\">\n                    Support & Legal\n                </h3>\n                <ul class=\"space-y-3\">\n                    <li>\n                        <a href=\"{{ url('privacy-policy') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Privacy Policy\n                        </a>\n                    </li>\n                    <li>\n                        <a href=\"{{ url('terms-of-service') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Terms of Service\n                        </a>\n                    </li>\n                    <li>\n                        <a href=\"{{ route('contact') }}\"\n                           class=\"text-gray-500 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 text-sm transition-colors\">\n                            Contact Us\n                        </a>\n                    </li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- Copyright section -->\n        <div class=\"mt-8 flex flex-col md:flex-row md:justify-between items-center gap-4\">\n            <p class=\"text-gray-500 dark:text-gray-400 text-xs\">&copy; {{ date('Y') }} Relaticle. All rights\n                reserved.</p>\n\n            <x-theme-switcher />\n        </div>\n    </div>\n</footer>\n"
  },
  {
    "path": "resources/views/components/layout/header.blade.php",
    "content": "<div x-data=\"{ mobileMenu: false }\" @resize.window=\"if (window.innerWidth >= 768) mobileMenu = false\">\n    <header\n        id=\"main-header\"\n        class=\"fixed w-full top-0 z-50 bg-white/80 dark:bg-gray-950/90 backdrop-blur-md border-b border-gray-200/60 dark:border-white/[0.06]\">\n        <div class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n            <div class=\"flex items-center justify-between h-16\">\n\n                <div class=\"flex flex-1 items-center\">\n                    <a href=\"{{ url('/') }}\" class=\"transition-opacity\" aria-label=\"Relaticle Home\">\n                        <x-brand.logo-lockup size=\"md\" class=\"text-black dark:text-white\" />\n                    </a>\n                </div>\n\n                <nav class=\"hidden md:flex items-center gap-1\">\n                    <a href=\"{{ url('/#features') }}\"\n                       class=\"px-4 py-1.5 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white text-[13px] font-medium transition-colors\">\n                        Features\n                    </a>\n                    <a href=\"{{ route('pricing') }}\"\n                       class=\"px-4 py-1.5 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white text-[13px] font-medium transition-colors\">\n                        Pricing\n                    </a>\n                    <a href=\"{{ route('documentation.index') }}\"\n                       class=\"px-4 py-1.5 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white text-[13px] font-medium transition-colors\">\n                        Documentation\n                    </a>\n                    <a href=\"{{ route('discord') }}\" target=\"_blank\"\n                       class=\"px-4 py-1.5 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white text-[13px] font-medium transition-colors flex items-center gap-1.5\">\n                        <x-ri-discord-fill class=\"w-4 h-4\"/>\n                        <span>Discord</span>\n                        <x-ri-arrow-right-up-line class=\"h-3 w-3 text-gray-400 dark:text-gray-600\"/>\n                    </a>\n                </nav>\n\n                <div class=\"flex flex-1 items-center justify-end gap-2 sm:gap-3\">\n                    <div class=\"hidden md:flex items-center gap-2\">\n                        <x-marketing.button variant=\"secondary\" size=\"sm\" href=\"{{ route('login') }}\">\n                            Sign In\n                        </x-marketing.button>\n\n                        <x-marketing.button size=\"sm\" href=\"{{ route('register') }}\">\n                            Start for free\n                        </x-marketing.button>\n                    </div>\n\n                    <button @click=\"mobileMenu = !mobileMenu\"\n                            class=\"md:hidden p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white rounded-lg transition-colors cursor-pointer\"\n                            :aria-expanded=\"mobileMenu\"\n                            :aria-label=\"mobileMenu ? 'Close menu' : 'Open menu'\">\n                        <svg class=\"w-5 h-5 transition-transform duration-200\" :class=\"mobileMenu && 'rotate-90'\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n                            <path x-show=\"!mobileMenu\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h16\"/>\n                            <path x-show=\"mobileMenu\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\"/>\n                        </svg>\n                    </button>\n                </div>\n            </div>\n        </div>\n    </header>\n\n    <x-layout.mobile-menu/>\n</div>\n"
  },
  {
    "path": "resources/views/components/layout/mobile-menu.blade.php",
    "content": "{{-- Full-screen mobile menu --}}\n<div x-show=\"mobileMenu\"\n     x-transition.opacity.duration.200ms\n     @keydown.escape.window=\"mobileMenu = false\"\n     class=\"md:hidden fixed inset-0 z-[60] bg-white dark:bg-gray-950 flex flex-col\"\n     x-cloak>\n\n    {{-- Header --}}\n    <div class=\"flex items-center justify-between h-16 px-4 shrink-0\">\n        <a href=\"{{ url('/') }}\" aria-label=\"Relaticle Home\">\n            <x-brand.logo-lockup size=\"md\" class=\"text-black dark:text-white\"/>\n        </a>\n        <button type=\"button\" @click=\"mobileMenu = false\"\n                class=\"p-2 text-gray-400 hover:text-gray-900 dark:hover:text-white rounded-lg transition-colors cursor-pointer\"\n                aria-label=\"Close menu\">\n            <x-ri-close-line class=\"w-5 h-5\"/>\n        </button>\n    </div>\n\n    {{-- Navigation --}}\n    <nav class=\"flex-1 flex flex-col justify-center px-8\">\n        <div class=\"space-y-1\">\n            @foreach([\n                ['url' => url('/#features'), 'label' => 'Features'],\n                ['url' => route('pricing'), 'label' => 'Pricing'],\n                ['url' => route('documentation.index'), 'label' => 'Docs'],\n                ['url' => route('contact'), 'label' => 'Contact'],\n            ] as $link)\n                <a href=\"{{ $link['url'] }}\" @click=\"mobileMenu = false\"\n                   class=\"block text-[2rem] font-semibold text-gray-950 dark:text-white hover:text-primary dark:hover:text-primary-400 transition-colors py-2\">\n                    {{ $link['label'] }}\n                </a>\n            @endforeach\n        </div>\n    </nav>\n\n    {{-- Bottom CTA --}}\n    <div class=\"px-8 pb-10 shrink-0\">\n        <div class=\"grid grid-cols-2 gap-3\">\n            <x-marketing.button variant=\"secondary\" href=\"{{ route('login') }}\">\n                Sign In\n            </x-marketing.button>\n            <x-marketing.button href=\"{{ route('register') }}\">\n                Start for free\n            </x-marketing.button>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/legal-document.blade.php",
    "content": "@props([\n    'title',\n    'subtitle',\n    'content',\n])\n\n<div class=\"py-16 md:py-24 bg-white dark:bg-gray-950 relative\">\n    <!-- Subtle background elements -->\n    <div class=\"absolute inset-0 bg-grid-pattern opacity-[0.01] dark:opacity-[0.02]\"></div>\n    <div class=\"absolute top-24 left-24 w-36 h-36 md:w-96 md:h-96 bg-primary/5 dark:bg-primary/10 rounded-full blur-3xl\"></div>\n    <div class=\"absolute -bottom-24 right-24 w-36 h-36 md:w-96 md:h-96 bg-primary/5 dark:bg-primary/10 rounded-full blur-3xl\"></div>\n\n    <div class=\"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 relative\">\n        <!-- Header Section -->\n        <div class=\" space-y-6 max-w-3xl mb-12\">\n            <h1 class=\"text-4xl sm:text-5xl font-bold text-black dark:text-white leading-[1.1] tracking-tight\">\n                <span class=\"relative inline-block\">\n                    <span class=\"relative z-10\">{{ $title }}</span>\n                    <span class=\"absolute bottom-2 sm:left-0 right-1/4 w-1/2 sm:w-full h-3 bg-primary/10 dark:bg-primary/20 -rotate-1 z-0\"></span>\n                </span>\n            </h1>\n            <p class=\"text-lg text-gray-600 dark:text-gray-300 max-w-2xl leading-relaxed\">\n                {{ $subtitle }}\n            </p>\n        </div>\n\n        <!-- Content Section -->\n        <div class=\"prose dark:prose-invert prose-headings:font-medium prose-headings:text-black dark:prose-headings:text-white prose-a:text-primary dark:prose-a:text-primary-400 prose-img:rounded-xl prose-img:shadow-md max-w-none\">\n            {!! $content !!}\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/marketing/button.blade.php",
    "content": "@props([\n    'variant' => 'primary',\n    'size' => 'base',\n    'href' => null,\n    'icon' => null,\n    'iconTrailing' => null,\n    'external' => false,\n])\n\n@php\n    $tag = $href ? 'a' : 'button';\n\n    $sizes = [\n        'sm' => 'h-9 px-5 text-sm rounded-lg',\n        'base' => 'h-11 px-8 text-sm rounded-lg',\n    ];\n\n    $variants = [\n        'primary' => 'bg-primary font-semibold text-white shadow-[0_1px_2px_rgba(0,0,0,0.1),inset_0_1px_0_rgba(255,255,255,0.1)] hover:brightness-110',\n        'secondary' => 'border border-gray-200 bg-white text-gray-700 shadow-[0_1px_2px_rgba(0,0,0,0.04)] hover:border-gray-300 hover:shadow-[0_2px_8px_rgba(0,0,0,0.06)] dark:border-white/[0.08] dark:bg-white/[0.03] dark:text-white dark:hover:bg-white/[0.06] dark:hover:border-white/[0.15]',\n    ];\n@endphp\n\n<{{ $tag }} {{ $attributes\n    ->class([\n        'inline-flex items-center justify-center gap-2 cursor-pointer font-medium transition-all duration-200',\n        $sizes[$size] ?? $sizes['base'],\n        $variants[$variant] ?? $variants['primary'],\n    ])\n    ->merge(array_filter([\n        'href' => $href,\n        'target' => $external ? '_blank' : null,\n        'rel' => $external ? 'noopener' : null,\n        'type' => ! $href ? 'button' : null,\n    ]))\n}}>\n    @if($icon)\n        <x-dynamic-component :component=\"$icon\" class=\"h-4 w-4\"/>\n    @endif\n\n    {{ $slot }}\n\n    @if($iconTrailing)\n        <x-dynamic-component :component=\"$iconTrailing\" class=\"h-3.5 w-3.5\"/>\n    @endif\n\n    @if($external && ! $iconTrailing)\n        <x-ri-arrow-right-up-line class=\"h-3 w-3 text-gray-400 dark:text-gray-500\"/>\n    @endif\n</{{ $tag }}>\n"
  },
  {
    "path": "resources/views/components/marketing/input.blade.php",
    "content": "@props([\n    'label' => null,\n    'required' => false,\n])\n\n<div>\n    @if($label)\n        <label for=\"{{ $attributes->get('id') }}\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1.5\">\n            {{ $label }}@if($required) <span class=\"text-red-500\">*</span>@endif\n        </label>\n    @endif\n\n    <input {{ $attributes->merge([\n        'class' => 'w-full rounded-lg border border-gray-200 dark:border-white/[0.08] bg-white dark:bg-white/[0.03] px-4 py-3 text-sm text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-colors',\n    ]) }}>\n\n    @error($attributes->get('name'))\n        <p class=\"mt-1.5 text-xs text-red-500\">{{ $message }}</p>\n    @enderror\n</div>\n"
  },
  {
    "path": "resources/views/components/marketing/textarea.blade.php",
    "content": "@props([\n    'label' => null,\n    'required' => false,\n])\n\n<div>\n    @if($label)\n        <label for=\"{{ $attributes->get('id') }}\" class=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1.5\">\n            {{ $label }}@if($required) <span class=\"text-red-500\">*</span>@endif\n        </label>\n    @endif\n\n    <textarea {{ $attributes->merge([\n        'class' => 'w-full rounded-lg border border-gray-200 dark:border-white/[0.08] bg-white dark:bg-white/[0.03] px-4 py-3 text-sm text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-colors resize-none',\n    ]) }}>{{ $slot }}</textarea>\n\n    @error($attributes->get('name'))\n        <p class=\"mt-1.5 text-xs text-red-500\">{{ $message }}</p>\n    @enderror\n</div>\n"
  },
  {
    "path": "resources/views/components/modal.blade.php",
    "content": "@props(['id', 'maxWidth'])\n\n@php\n$id = $id ?? md5($attributes->wire('model'));\n\n$maxWidth = [\n    'sm' => 'sm:max-w-sm',\n    'md' => 'sm:max-w-md',\n    'lg' => 'sm:max-w-lg',\n    'xl' => 'sm:max-w-xl',\n    '2xl' => 'sm:max-w-2xl',\n][$maxWidth ?? '2xl'];\n@endphp\n\n<div\n    x-data=\"{ show: @entangle($attributes->wire('model')) }\"\n    x-on:close.stop=\"show = false\"\n    x-on:keydown.escape.window=\"show = false\"\n    x-show=\"show\"\n    id=\"{{ $id }}\"\n    class=\"jetstream-modal fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50\"\n    style=\"display: none;\"\n>\n    <div x-show=\"show\" class=\"fixed inset-0 transform transition-all\" x-on:click=\"show = false\" x-transition:enter=\"ease-out duration-300\"\n                    x-transition:enter-start=\"opacity-0\"\n                    x-transition:enter-end=\"opacity-100\"\n                    x-transition:leave=\"ease-in duration-200\"\n                    x-transition:leave-start=\"opacity-100\"\n                    x-transition:leave-end=\"opacity-0\">\n        <div class=\"absolute inset-0 bg-gray-500 dark:bg-gray-900 opacity-75\"></div>\n    </div>\n\n    <div x-show=\"show\" class=\"mb-6 bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-xl transform transition-all sm:w-full {{ $maxWidth }} sm:mx-auto\"\n                    x-trap.inert.noscroll=\"show\"\n                    x-transition:enter=\"ease-out duration-300\"\n                    x-transition:enter-start=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n                    x-transition:enter-end=\"opacity-100 translate-y-0 sm:scale-100\"\n                    x-transition:leave=\"ease-in duration-200\"\n                    x-transition:leave-start=\"opacity-100 translate-y-0 sm:scale-100\"\n                    x-transition:leave-end=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\">\n        {{ $slot }}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/nav-link.blade.php",
    "content": "@props(['active'])\n\n@php\n$classes = ($active ?? false)\n            ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out'\n            : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out';\n@endphp\n\n<a {{ $attributes->merge(['class' => $classes]) }}>\n    {{ $slot }}\n</a>\n"
  },
  {
    "path": "resources/views/components/responsive-nav-link.blade.php",
    "content": "@props(['active'])\n\n@php\n$classes = ($active ?? false)\n            ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 dark:border-indigo-600 text-start text-base font-medium text-indigo-700 dark:text-indigo-300 bg-indigo-50 dark:bg-indigo-900/50 focus:outline-none focus:text-indigo-800 dark:focus:text-indigo-200 focus:bg-indigo-100 dark:focus:bg-indigo-900 focus:border-indigo-700 dark:focus:border-indigo-300 transition duration-150 ease-in-out'\n            : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-gray-700 focus:border-gray-300 dark:focus:border-gray-600 transition duration-150 ease-in-out';\n@endphp\n\n<a {{ $attributes->merge(['class' => $classes]) }}>\n    {{ $slot }}\n</a>\n"
  },
  {
    "path": "resources/views/components/secondary-button.blade.php",
    "content": "<button {{ $attributes->merge(['type' => 'button', 'class' => 'inline-flex items-center px-4 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-500 rounded-md font-semibold text-xs text-gray-700 dark:text-gray-300 uppercase tracking-widest shadow-sm hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 disabled:opacity-25 transition ease-in-out duration-150']) }}>\n    {{ $slot }}\n</button>\n"
  },
  {
    "path": "resources/views/components/section-border.blade.php",
    "content": "<div class=\"hidden sm:block\">\n    <div class=\"py-8\">\n        <div class=\"border-t border-gray-200 dark:border-gray-700\"></div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/section-title.blade.php",
    "content": "<div class=\"md:col-span-1 flex justify-between\">\n    <div class=\"px-4 sm:px-0\">\n        <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">{{ $title }}</h3>\n\n        <p class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n            {{ $description }}\n        </p>\n    </div>\n\n    <div class=\"px-4 sm:px-0\">\n        {{ $aside ?? '' }}\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/components/switchable-team.blade.php",
    "content": "@props(['team', 'component' => 'dropdown-link'])\n\n<form method=\"POST\" action=\"{{ route('current-team.update') }}\" x-data>\n    @method('PUT')\n    @csrf\n\n    <!-- Hidden Team ID -->\n    <input type=\"hidden\" name=\"team_id\" value=\"{{ $team->id }}\">\n\n    <x-dynamic-component :component=\"$component\" href=\"#\" x-on:click.prevent=\"$root.submit();\">\n        <div class=\"flex items-center\">\n            @if (Auth::user()->isCurrentTeam($team))\n                <svg class=\"me-2 h-5 w-5 text-green-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n                </svg>\n            @endif\n\n            <div class=\"truncate\">{{ $team->name }}</div>\n        </div>\n    </x-dynamic-component>\n</form>\n"
  },
  {
    "path": "resources/views/components/theme-switcher.blade.php",
    "content": "@props(['size' => 'sm'])\n\n@php\n    $iconSize = match($size) {\n        'md' => 'h-4 w-4',\n        default => 'h-3.5 w-3.5',\n    };\n\n    $buttonClass = 'p-1.5 rounded-full transition-all duration-200 cursor-pointer text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300 aria-pressed:bg-white aria-pressed:dark:bg-gray-700 aria-pressed:shadow-sm aria-pressed:text-gray-900 aria-pressed:dark:text-white';\n@endphp\n\n<div x-data=\"{\n        theme: localStorage.getItem('theme') || 'system',\n        apply(mode) {\n            this.theme = mode;\n            localStorage.setItem('theme', mode);\n\n            if (mode === 'system') {\n                document.documentElement.classList.toggle('dark', window.matchMedia('(prefers-color-scheme: dark)').matches);\n            } else {\n                document.documentElement.classList.toggle('dark', mode === 'dark');\n            }\n\n            window.dispatchEvent(new CustomEvent('theme-changed', { detail: mode }));\n        }\n     }\"\n     x-init=\"\n        window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n            if (theme === 'system') { apply('system'); }\n        });\n     \"\n     @theme-changed.window=\"theme = $event.detail\"\n     class=\"inline-flex items-center rounded-full border border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900 p-0.5\"\n>\n    <button @click=\"apply('system')\" :aria-pressed=\"theme === 'system'\" aria-label=\"System theme\" class=\"{{ $buttonClass }}\">\n        <x-heroicon-o-computer-desktop class=\"{{ $iconSize }}\" />\n    </button>\n    <button @click=\"apply('light')\" :aria-pressed=\"theme === 'light'\" aria-label=\"Light theme\" class=\"{{ $buttonClass }}\">\n        <x-heroicon-o-sun class=\"{{ $iconSize }}\" />\n    </button>\n    <button @click=\"apply('dark')\" :aria-pressed=\"theme === 'dark'\" aria-label=\"Dark theme\" class=\"{{ $buttonClass }}\">\n        <x-heroicon-o-moon class=\"{{ $iconSize }}\" />\n    </button>\n</div>\n"
  },
  {
    "path": "resources/views/components/validation-errors.blade.php",
    "content": "@if ($errors->any())\n    <div {{ $attributes }}>\n        <div class=\"font-medium text-red-600 dark:text-red-400\">{{ __('Whoops! Something went wrong.') }}</div>\n\n        <ul class=\"mt-3 list-disc list-inside text-sm text-red-600 dark:text-red-400\">\n            @foreach ($errors->all() as $error)\n                <li>{{ $error }}</li>\n            @endforeach\n        </ul>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/components/welcome.blade.php",
    "content": "<div class=\"p-6 lg:p-8 bg-white dark:bg-gray-800 dark:bg-gradient-to-bl dark:from-gray-700/50 dark:via-transparent border-b border-gray-200 dark:border-gray-700\">\n    <x-application-logo class=\"block h-12 w-auto\" />\n\n    <h1 class=\"mt-8 text-2xl font-medium text-gray-900 dark:text-white\">\n        Welcome to your Jetstream application!\n    </h1>\n\n    <p class=\"mt-6 text-gray-500 dark:text-gray-400 leading-relaxed\">\n        Laravel Jetstream provides a beautiful, robust starting point for your next Laravel application. Laravel is designed\n        to help you build your application using a development environment that is simple, powerful, and enjoyable. We believe\n        you should love expressing your creativity through programming, so we have spent time carefully crafting the Laravel\n        ecosystem to be a breath of fresh air. We hope you love it.\n    </p>\n</div>\n\n<div class=\"bg-gray-200 dark:bg-gray-800 bg-opacity-25 grid grid-cols-1 md:grid-cols-2 gap-6 lg:gap-8 p-6 lg:p-8\">\n    <div>\n        <div class=\"flex items-center\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" class=\"w-6 h-6 stroke-gray-400\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6.042A8.967 8.967 0 006 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 016 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 016-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0018 18a8.967 8.967 0 00-6 2.292m0-14.25v14.25\" />\n            </svg>\n            <h2 class=\"ms-3 text-xl font-semibold text-gray-900 dark:text-white\">\n                <a href=\"https://laravel.com/docs\">Documentation</a>\n            </h2>\n        </div>\n\n        <p class=\"mt-4 text-gray-500 dark:text-gray-400 text-sm leading-relaxed\">\n            Laravel has wonderful documentation covering every aspect of the framework. Whether you're new to the framework or have previous experience, we recommend reading all of the documentation from beginning to end.\n        </p>\n\n        <p class=\"mt-4 text-sm\">\n            <a href=\"https://laravel.com/docs\" class=\"inline-flex items-center font-semibold text-indigo-700 dark:text-indigo-300\">\n                Explore the documentation\n\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" class=\"ms-1 w-5 h-5 fill-indigo-500 dark:fill-indigo-200\">\n                    <path fill-rule=\"evenodd\" d=\"M5 10a.75.75 0 01.75-.75h6.638L10.23 7.29a.75.75 0 111.04-1.08l3.5 3.25a.75.75 0 010 1.08l-3.5 3.25a.75.75 0 11-1.04-1.08l2.158-1.96H5.75A.75.75 0 015 10z\" clip-rule=\"evenodd\" />\n                </svg>\n            </a>\n        </p>\n    </div>\n\n    <div>\n        <div class=\"flex items-center\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" class=\"w-6 h-6 stroke-gray-400\">\n                <path stroke-linecap=\"round\" d=\"M15.75 10.5l4.72-4.72a.75.75 0 011.28.53v11.38a.75.75 0 01-1.28.53l-4.72-4.72M4.5 18.75h9a2.25 2.25 0 002.25-2.25v-9a2.25 2.25 0 00-2.25-2.25h-9A2.25 2.25 0 002.25 7.5v9a2.25 2.25 0 002.25 2.25z\" />\n            </svg>\n            <h2 class=\"ms-3 text-xl font-semibold text-gray-900 dark:text-white\">\n                <a href=\"https://laracasts.com\">Laracasts</a>\n            </h2>\n        </div>\n\n        <p class=\"mt-4 text-gray-500 dark:text-gray-400 text-sm leading-relaxed\">\n            Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.\n        </p>\n\n        <p class=\"mt-4 text-sm\">\n            <a href=\"https://laracasts.com\" class=\"inline-flex items-center font-semibold text-indigo-700 dark:text-indigo-300\">\n                Start watching Laracasts\n\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" class=\"ms-1 w-5 h-5 fill-indigo-500 dark:fill-indigo-200\">\n                    <path fill-rule=\"evenodd\" d=\"M5 10a.75.75 0 01.75-.75h6.638L10.23 7.29a.75.75 0 111.04-1.08l3.5 3.25a.75.75 0 010 1.08l-3.5 3.25a.75.75 0 11-1.04-1.08l2.158-1.96H5.75A.75.75 0 015 10z\" clip-rule=\"evenodd\" />\n                </svg>\n            </a>\n        </p>\n    </div>\n\n    <div>\n        <div class=\"flex items-center\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" class=\"w-6 h-6 stroke-gray-400\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 001.5-1.5V6a1.5 1.5 0 00-1.5-1.5H3.75A1.5 1.5 0 002.25 6v12a1.5 1.5 0 001.5 1.5zm10.5-11.25h.008v.008h-.008V8.25zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z\" />\n            </svg>\n            <h2 class=\"ms-3 text-xl font-semibold text-gray-900 dark:text-white\">\n                <a href=\"https://tailwindcss.com/\">Tailwind</a>\n            </h2>\n        </div>\n\n        <p class=\"mt-4 text-gray-500 dark:text-gray-400 text-sm leading-relaxed\">\n            Laravel Jetstream is built with Tailwind, an amazing utility first CSS framework that doesn't get in your way. You'll be amazed how easily you can build and maintain fresh, modern designs with this wonderful framework at your fingertips.\n        </p>\n    </div>\n\n    <div>\n        <div class=\"flex items-center\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" class=\"w-6 h-6 stroke-gray-400\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\" />\n            </svg>\n            <h2 class=\"ms-3 text-xl font-semibold text-gray-900 dark:text-white\">\n                Authentication\n            </h2>\n        </div>\n\n        <p class=\"mt-4 text-gray-500 dark:text-gray-400 text-sm leading-relaxed\">\n            Authentication and registration views are included with Laravel Jetstream, as well as support for user email verification and resetting forgotten passwords. So, you're free to get started with what matters most: building your application.\n        </p>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/contact.blade.php",
    "content": "@push('turnstile')\n    <x-turnstile.scripts />\n@endpush\n\n<x-guest-layout\n    title=\"Contact Us - Relaticle\"\n    description=\"Get in touch with the Relaticle team. Questions about enterprise deployments, custom integrations, or partnerships.\"\n    ogTitle=\"Contact Us - Relaticle\"\n>\n    <section class=\"relative pt-32 pb-24 md:pt-40 md:pb-32 bg-white dark:bg-gray-950 overflow-hidden\">\n        <div class=\"absolute inset-0 bg-[linear-gradient(to_right,rgba(0,0,0,0.015)_1px,transparent_1px),linear-gradient(to_bottom,rgba(0,0,0,0.015)_1px,transparent_1px)] dark:bg-[linear-gradient(to_right,rgba(255,255,255,0.025)_1px,transparent_1px),linear-gradient(to_bottom,rgba(255,255,255,0.025)_1px,transparent_1px)] bg-[size:3rem_3rem] [mask-image:radial-gradient(ellipse_70%_50%_at_50%_50%,black_30%,transparent_100%)]\"></div>\n\n        <div class=\"relative max-w-5xl mx-auto px-6 lg:px-8\">\n            <div class=\"grid grid-cols-1 lg:grid-cols-5 gap-16 lg:gap-20\">\n\n                {{-- Left: heading --}}\n                <div class=\"lg:col-span-2\">\n                    <h1 class=\"font-display text-4xl sm:text-5xl font-bold text-gray-950 dark:text-white tracking-[-0.03em] leading-[1.1]\">\n                        Get in Touch\n                    </h1>\n                    <p class=\"mt-5 text-base text-gray-500 dark:text-gray-400 leading-relaxed max-w-sm\">\n                        Questions about enterprise deployments, custom integrations, or partnerships? We'd love to hear from you.\n                    </p>\n\n                    <div class=\"mt-8 space-y-4\">\n                        <a href=\"{{ route('documentation.index') }}\" class=\"flex items-center gap-2 text-sm font-medium text-gray-600 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 transition-colors\">\n                            <x-ri-book-open-line class=\"w-4 h-4\"/>\n                            Documentation\n                        </a>\n                        <a href=\"{{ route('discord') }}\" target=\"_blank\" class=\"flex items-center gap-2 text-sm font-medium text-gray-600 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 transition-colors\">\n                            <x-ri-discord-fill class=\"w-4 h-4\"/>\n                            Join Discord community\n                        </a>\n                        <a href=\"https://github.com/relaticle/relaticle\" target=\"_blank\" class=\"flex items-center gap-2 text-sm font-medium text-gray-600 dark:text-gray-400 hover:text-primary dark:hover:text-primary-400 transition-colors\">\n                            <x-ri-github-fill class=\"w-4 h-4\"/>\n                            GitHub repository\n                        </a>\n                    </div>\n                </div>\n\n                {{-- Right: form --}}\n                <div class=\"lg:col-span-3\">\n                    @if(session('success'))\n                        <div class=\"rounded-xl border border-gray-200 dark:border-white/[0.08] bg-white dark:bg-white/[0.03] p-10 text-center\">\n                            <div class=\"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-primary/10\">\n                                <x-ri-check-line class=\"w-6 h-6 text-primary\"/>\n                            </div>\n                            <h3 class=\"text-lg font-semibold text-gray-950 dark:text-white\">Message sent</h3>\n                            <p class=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">{{ session('success') }}</p>\n                        </div>\n                    @else\n                        <form method=\"POST\" action=\"{{ route('contact') }}\" class=\"space-y-6\">\n                            @csrf\n                            <x-honeypot />\n\n                            <x-marketing.input label=\"Name\" :required=\"true\" type=\"text\" name=\"name\" id=\"name\" required :value=\"old('name')\" placeholder=\"Your name\"/>\n\n                            <x-marketing.input label=\"Work email\" :required=\"true\" type=\"email\" name=\"email\" id=\"email\" required :value=\"old('email')\" placeholder=\"you@company.com\"/>\n\n                            <x-marketing.input label=\"Company\" type=\"text\" name=\"company\" id=\"company\" :value=\"old('company')\" placeholder=\"Your company\"/>\n\n                            <x-marketing.textarea label=\"How can we help?\" :required=\"true\" name=\"message\" id=\"message\" rows=\"5\" required placeholder=\"Tell us about your project, team size, and any specific requirements...\">{{ old('message') }}</x-marketing.textarea>\n\n                            <x-turnstile data-action=\"contact\" data-theme=\"auto\" />\n                            @error('cf-turnstile-response')\n                                <p class=\"text-sm text-red-600 dark:text-red-400\">{{ $message }}</p>\n                            @enderror\n\n                            <x-marketing.button type=\"submit\">\n                                Send message\n                            </x-marketing.button>\n                        </form>\n                    @endif\n                </div>\n            </div>\n        </div>\n    </section>\n</x-guest-layout>\n"
  },
  {
    "path": "resources/views/emails/team-invitation.blade.php",
    "content": "@component('mail::message')\n{{ __('You have been invited to join the :team team!', ['team' => $invitation->team->name]) }}\n\n@if (Laravel\\Fortify\\Features::enabled(Laravel\\Fortify\\Features::registration()))\n{{ __('If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:') }}\n\n@component('mail::button', ['url' => route('register')])\n{{ __('Create Account') }}\n@endcomponent\n\n{{ __('If you already have an account, you may accept this invitation by clicking the button below:') }}\n\n@else\n{{ __('You may accept this invitation by clicking the button below:') }}\n@endif\n\n\n@component('mail::button', ['url' => $acceptUrl])\n{{ __('Accept Invitation') }}\n@endcomponent\n\n@if($invitation->expires_at)\n{{ __('This invitation will expire :expiry.', ['expiry' => $invitation->expires_at->diffForHumans()]) }}\n@endif\n\n{{ __('If you did not expect to receive an invitation to this team, you may discard this email.') }}\n@endcomponent\n"
  },
  {
    "path": "resources/views/filament/actions/ai-summary.blade.php",
    "content": "<div class=\"space-y-4\">\n    <div class=\"rounded-lg bg-gray-50 dark:bg-gray-800 p-4\">\n        <p class=\"text-sm text-gray-700 dark:text-gray-300 leading-relaxed\">\n            {{ $summary->summary }}\n        </p>\n    </div>\n\n    <div class=\"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400\">\n        <div class=\"flex items-center gap-2\">\n            <x-heroicon-o-clock class=\"h-4 w-4\" />\n            <span>Generated {{ $summary->created_at->diffForHumans() }}</span>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/filament/app/analytics.blade.php",
    "content": "@if(app()->isProduction() && !empty(config('services.fathom.site_id')))\n    <script src=\"https://cdn.usefathom.com/script.js\"\n        data-site=\"{{ config('services.fathom.site_id') }}\"\n        data-spa=\"auto\"\n        data-auto=\"false\"\n        defer></script>\n<script>\nwindow.addEventListener('load', function() {\n    function normalizeUrl(pathname) {\n        // Remove tenant slug: /my-team/people → /people\n        pathname = pathname.replace(/^\\/[^\\/]+/, '');\n\n        // Normalize record IDs (numeric or ULID) out of paths:\n        // /people/01abc123 → /people/view\n        // /people/01abc123/edit → /people/edit\n        pathname = pathname\n            .replace(/^(\\/[\\w-]+)\\/[^\\/]+\\/(\\w+)$/, '$1/$2')          // /resource/id/action → /resource/action\n            .replace(/^(\\/[\\w-]+)\\/(?=[^\\/]*\\d)[^\\/]+$/, '$1/view');  // /resource/id → /resource/view (id must contain a digit)\n\n        return pathname || '/dashboard';\n    }\n\n    function track() {\n        if (typeof fathom !== 'undefined') {\n            const normalized = window.location.origin + normalizeUrl(window.location.pathname);\n            fathom.trackPageview({ url: normalized });\n        }\n    }\n\n    // Initial track\n    setTimeout(track, 100);\n\n    // SPA navigation\n    document.addEventListener('livewire:navigated', track);\n});\n</script>\n@endif\n"
  },
  {
    "path": "resources/views/filament/app/import-preview-alpine.blade.php",
    "content": "<script>\ndocument.addEventListener('livewire:init', () => {\n    Alpine.data('previewTable', (config) => ({\n        sessionId: config.sessionId,\n        totalRows: config.totalRows,\n        columns: config.columns,\n        relationshipColumns: config.relationshipColumns || [],\n        isProcessing: config.isProcessing,\n        isReady: config.isReady,\n        creates: config.creates,\n        updates: config.updates,\n        newRelationships: config.newRelationships || {},\n        processed: config.processed,\n        rows: config.rows,\n        currentRowCount: config.rows.length,\n        loadingMore: false,\n        pollInterval: null,\n\n        init() {\n            if (this.isProcessing) {\n                this.startPolling();\n            }\n            this.$nextTick(() => this.setupScroll());\n        },\n\n        destroy() {\n            this.stopPolling();\n        },\n\n        startPolling() {\n            this.pollInterval = setInterval(() => this.pollStatus(), 500);\n        },\n\n        stopPolling() {\n            if (this.pollInterval) {\n                clearInterval(this.pollInterval);\n                this.pollInterval = null;\n            }\n        },\n\n        async pollStatus() {\n            try {\n                const res = await fetch(`/app/import/${this.sessionId}/status`);\n                const data = await res.json();\n\n                this.creates = data.progress.creates;\n                this.updates = data.progress.updates;\n                this.newRelationships = data.progress.newRelationships || {};\n                this.processed = data.progress.processed;\n\n                if (data.status === 'ready') {\n                    this.isProcessing = false;\n                    this.isReady = true;\n                    this.stopPolling();\n                    await this.reloadRows();\n                }\n            } catch {\n                // Silently ignore polling errors\n            }\n        },\n\n        async reloadRows() {\n            try {\n                const res = await fetch(`/app/import/${this.sessionId}/rows?start=0&limit=100`);\n                const data = await res.json();\n\n                if (data.rows && data.rows.length > 0) {\n                    this.rows = data.rows;\n                    this.currentRowCount = data.rows.length;\n                }\n            } catch {\n                // Silently ignore reload errors\n            }\n        },\n\n        async loadMore() {\n            if (this.loadingMore || this.currentRowCount >= this.totalRows) return;\n            this.loadingMore = true;\n\n            try {\n                const res = await fetch(`/app/import/${this.sessionId}/rows?start=${this.currentRowCount}&limit=100`);\n                const data = await res.json();\n\n                if (data.rows && data.rows.length > 0) {\n                    this.rows = [...this.rows, ...data.rows];\n                    this.currentRowCount = this.rows.length;\n                }\n            } catch {\n                // Silently ignore load errors\n            } finally {\n                this.loadingMore = false;\n            }\n        },\n\n        setupScroll() {\n            const container = this.$refs.scrollContainer;\n            if (container) {\n                container.addEventListener('scroll', () => {\n                    const threshold = 200;\n                    if (container.scrollHeight - container.scrollTop - container.clientHeight < threshold) {\n                        this.loadMore();\n                    }\n                });\n            }\n        },\n\n        getActionIcon(action) {\n            if (action === 'create') {\n                return `<svg class='h-5 w-5 text-success-500' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor'><path fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm.75-11.25a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z' clip-rule='evenodd'/></svg>`;\n            } else if (action === 'update') {\n                return `<svg class='h-5 w-5 text-info-500' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor'><path fill-rule='evenodd' d='M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z' clip-rule='evenodd'/></svg>`;\n            }\n            return '';\n        },\n\n        getRelationshipLabel(relName) {\n            const col = this.relationshipColumns.find(c => c.key === relName);\n            return col?.label || relName.replace(/_/g, ' ');\n        }\n    }));\n});\n</script>\n"
  },
  {
    "path": "resources/views/filament/app/import-value-reviewer-alpine.blade.php",
    "content": "<script>\ndocument.addEventListener('livewire:init', () => {\n    Alpine.data('valueReviewer', (config) => ({\n        // Config from Blade\n        sessionId: config.sessionId,\n        csvColumn: config.csvColumn,\n        fieldName: config.fieldName,\n        perPage: config.perPage,\n        isDateField: config.isDateField,\n        isChoiceField: config.isChoiceField,\n        isMultiChoice: config.isMultiChoice,\n        choiceOptions: config.choiceOptions,\n        dateFormat: config.dateFormat,\n        valuesUrl: config.valuesUrl,\n        correctionsStoreUrl: config.correctionsStoreUrl,\n        correctionsDestroyUrl: config.correctionsDestroyUrl,\n\n        // State\n        values: [],\n        page: 1,\n        hasMore: false,\n        total: config.uniqueCount,\n        showing: 0,\n        loading: true,\n        loadingMore: false,\n        errorsOnly: false,\n        loadRequestInFlight: false,\n\n        async loadValues(forceReload = false) {\n            // Prevent race condition if another load is already in progress\n            // Unless forceReload is true (e.g., after format change)\n            if (this.loadRequestInFlight && !forceReload) return;\n\n            this.loadRequestInFlight = true;\n            this.loading = true;\n            this.page = 1;\n            try {\n                const response = await fetch(this.valuesUrl, {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application/json',\n                        'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]')?.content,\n                        'Accept': 'application/json',\n                    },\n                    body: JSON.stringify({\n                        session_id: this.sessionId,\n                        csv_column: this.csvColumn,\n                        field_name: this.fieldName,\n                        page: this.page,\n                        per_page: this.perPage,\n                        errors_only: this.errorsOnly,\n                        date_format: this.dateFormat,\n                    }),\n                });\n                const result = await response.json();\n                this.values = result.values;\n                this.hasMore = result.hasMore;\n                this.total = result.total;\n                this.showing = result.showing;\n            } catch (e) {\n                console.error('Failed to load values:', e);\n            } finally {\n                this.loading = false;\n                this.loadRequestInFlight = false;\n            }\n        },\n\n        async loadMore() {\n            if (this.loadingMore || !this.hasMore) return;\n            this.loadingMore = true;\n            this.page++;\n            try {\n                const response = await fetch(this.valuesUrl, {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application/json',\n                        'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]')?.content,\n                        'Accept': 'application/json',\n                    },\n                    body: JSON.stringify({\n                        session_id: this.sessionId,\n                        csv_column: this.csvColumn,\n                        field_name: this.fieldName,\n                        page: this.page,\n                        per_page: this.perPage,\n                        errors_only: this.errorsOnly,\n                        date_format: this.dateFormat,\n                    }),\n                });\n                const result = await response.json();\n                this.values = [...this.values, ...result.values];\n                this.hasMore = result.hasMore;\n                this.showing = result.showing;\n            } catch (e) {\n                console.error('Failed to load more values:', e);\n                this.page--;\n            } finally {\n                this.loadingMore = false;\n            }\n        },\n\n        async toggleErrorsOnly() {\n            this.errorsOnly = !this.errorsOnly;\n            await this.loadValues();\n        },\n\n        onScroll(event) {\n            const el = event.target;\n            if (!this.loadingMore && this.hasMore && el.scrollTop + el.clientHeight >= el.scrollHeight - 100) {\n                this.loadMore();\n            }\n        },\n\n        async correctValue(oldValue, newValue) {\n            // Update local state immediately for responsiveness\n            // Use array replacement to ensure Alpine reactivity\n            const index = this.values.findIndex(v => v.value === oldValue);\n\n            // Store correction via API and get validation result\n            try {\n                const response = await fetch(this.correctionsStoreUrl, {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application/json',\n                        'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]')?.content,\n                        'Accept': 'application/json',\n                    },\n                    body: JSON.stringify({\n                        session_id: this.sessionId,\n                        field_name: this.fieldName,\n                        old_value: oldValue,\n                        new_value: newValue,\n                        csv_column: this.csvColumn,\n                    }),\n                });\n                const result = await response.json();\n\n                // Update local state with server validation result\n                if (index !== -1) {\n                    this.values[index] = {\n                        ...this.values[index],\n                        correctedValue: newValue,\n                        issue: result.issue || null,\n                        isSkipped: result.isSkipped || false,\n                    };\n                }\n            } catch (e) {\n                console.error('Failed to save correction:', e);\n                // Still update local state on error\n                if (index !== -1) {\n                    this.values[index] = { ...this.values[index], correctedValue: newValue };\n                }\n            }\n        },\n\n        async skipValue(value) {\n            // Update local state immediately for responsiveness\n            // Use array replacement to ensure Alpine reactivity\n            const index = this.values.findIndex(v => v.value === value);\n            if (index === -1) return;\n\n            const item = this.values[index];\n            const wasSkipped = item.isSkipped;\n            const newIsSkipped = !wasSkipped;\n\n            if (newIsSkipped) {\n                this.values[index] = { ...item, isSkipped: true, correctedValue: '' };\n                // Store skip via API\n                try {\n                    await fetch(this.correctionsStoreUrl, {\n                        method: 'POST',\n                        headers: {\n                            'Content-Type': 'application/json',\n                            'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]')?.content,\n                            'Accept': 'application/json',\n                        },\n                        body: JSON.stringify({\n                            session_id: this.sessionId,\n                            field_name: this.fieldName,\n                            old_value: value,\n                            new_value: '',\n                        }),\n                    });\n                } catch (e) {\n                    console.error('Failed to save skip:', e);\n                }\n            } else {\n                this.values[index] = { ...item, isSkipped: false, correctedValue: null };\n                // Remove correction via API\n                try {\n                    await fetch(this.correctionsDestroyUrl, {\n                        method: 'DELETE',\n                        headers: {\n                            'Content-Type': 'application/json',\n                            'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]')?.content,\n                            'Accept': 'application/json',\n                        },\n                        body: JSON.stringify({\n                            session_id: this.sessionId,\n                            field_name: this.fieldName,\n                            old_value: value,\n                        }),\n                    });\n                } catch (e) {\n                    console.error('Failed to remove correction:', e);\n                }\n            }\n        },\n    }));\n});\n</script>\n"
  },
  {
    "path": "resources/views/filament/app/logo-empty.blade.php",
    "content": "<span class=\"sr-only\">Relaticle</span>\n"
  },
  {
    "path": "resources/views/filament/app/logo.blade.php",
    "content": "<div class=\"w-10 h-10 flex items-center overflow-hidden\">\n    <x-brand.logomark size=\"md\" class=\"text-black dark:text-white\" />\n</div>\n"
  },
  {
    "path": "resources/views/filament/auth/social_login_buttons.blade.php",
    "content": "<div class=\"space-y-3\">\n    <x-filament::button\n        :href=\"route('auth.socialite.redirect', 'google')\"\n        :spa-mode=\"false\"\n        tag=\"a\"\n        color=\"gray\"\n        class=\"w-full justify-center\"\n    >\n       <span class=\"flex\">\n        <svg class=\"w-5 h-5 mr-2\" viewBox=\"0 0 24 24\">\n            <path fill=\"#EA4335\"\n                  d=\"M5.266 9.765A7.077 7.077 0 0 1 12 4.909c1.69 0 3.218.6 4.418 1.582L19.91 3C17.782 1.145 15.055 0 12 0 7.27 0 3.198 2.698 1.24 6.65l4.026 3.115Z\"/>\n            <path fill=\"#34A853\"\n                  d=\"M16.04 18.013c-1.09.703-2.474.987-4.04.987a7.077 7.077 0 0 1-6.723-4.823l-4.04 3.067A11.965 11.965 0 0 0 12 24c2.933 0 5.735-1.043 7.834-3l-3.793-2.987Z\"/>\n            <path fill=\"#4A90E2\"\n                  d=\"M19.834 21c2.195-2.048 3.62-5.096 3.62-9 0-.71-.109-1.473-.272-2.182H12v4.637h6.436c-.317 1.559-1.17 2.766-2.395 3.558L19.834 21Z\"/>\n            <path fill=\"#FBBC05\"\n                  d=\"M5.277 14.268A7.12 7.12 0 0 1 4.909 12c0-.782.125-1.533.357-2.235L1.24 6.65A11.934 11.934 0 0 0 0 12c0 1.92.445 3.73 1.237 5.335l4.04-3.067Z\"/>\n        </svg>\n        Continue with Google\n    </span>\n    </x-filament::button>\n\n    <x-filament::button\n        :href=\"route('auth.socialite.redirect', 'github')\"\n        :spa-mode=\"false\"\n        tag=\"a\"\n        color=\"gray\"\n        class=\"w-full justify-center flex\"\n    >\n    <span class=\"flex\">\n        <svg class=\"w-5 h-5 mr-2\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path\n                d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"/>\n        </svg>\n        Continue with GitHub\n    </span>\n    </x-filament::button>\n\n    <div class=\"flex items-center justify-center my-4\">\n        <div class=\"w-full border-t border-gray-300 dark:border-gray-700\"></div>\n        <span class=\"mx-2 text-gray-500 dark:text-gray-400\">or</span>\n        <div class=\"w-full border-t border-gray-300 dark:border-gray-700\"></div>\n    </div>\n\n</div>\n"
  },
  {
    "path": "resources/views/filament/components/infolists/avatar-name.blade.php",
    "content": "@php\n    $state = $getState();\n    $hasAvatar = !empty($state['avatar']);\n\n    // Get the label from the component - handle potential initialization issues\n    try {\n        $label = $getLabel();\n    } catch (\\Throwable $e) {\n        $label = null;\n    }\n\n    // Map text size to Tailwind class\n    $textSizeClass = match ($state['textSize'] ?? 'sm') {\n        'xs' => 'text-xs',\n        'base' => 'text-base',\n        'lg' => 'text-lg',\n        'xl' => 'text-xl',\n        default => 'text-sm',\n    };\n@endphp\n\n<div>\n    @if ($label)\n        <div class=\"flex items-center justify-between gap-2 mb-1\">\n            <span class=\"text-sm font-medium leading-6 text-gray-950 dark:text-white\">\n                {{ $label }}\n            </span>\n        </div>\n    @endif\n\n    <div class=\"flex items-center space-x-2\">\n        @if ($hasAvatar)\n            <x-filament::avatar\n                src=\"{{ $state['avatar'] }}\"\n                alt=\"{{ $state['name'] ?? '' }}\"\n                size=\"{{ $state['avatarSize'] }}\"\n                :circular=\"$state['circular']\"\n                @style([\n                    'border-radius: 0 !important' => !$state['circular'], // Force square shape when not circular\n                ])\n            />\n        @endif\n\n        @if ($state['name'])\n            <span class=\"{{ $textSizeClass }} font-medium\">{{ $state['name'] }}</span>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/filament/pages/access-tokens.blade.php",
    "content": "<x-filament-panels::page>\n    {{ $this->form }}\n\n    <div class=\"mt-2\">\n        <p class=\"text-sm font-medium text-gray-950 dark:text-white mb-3\">\n            {{ __('access-tokens.integrations.heading') }}\n        </p>\n        <div class=\"divide-y divide-gray-200 dark:divide-white/10 rounded-xl border border-gray-200 dark:border-white/10 overflow-hidden\">\n            <a href=\"{{ config('scribe.docs_url') }}\" target=\"_blank\" class=\"flex items-center gap-4 bg-white dark:bg-white/5 px-4 py-3 transition hover:bg-gray-50 dark:hover:bg-white/10 group\">\n                <div class=\"flex-shrink-0 flex items-center justify-center w-9 h-9 rounded-lg bg-gray-100 dark:bg-white/10 text-gray-500 dark:text-gray-400 group-hover:text-primary-600 dark:group-hover:text-primary-400 transition\">\n                    <x-heroicon-o-code-bracket class=\"w-5 h-5\" />\n                </div>\n                <div class=\"flex-1 min-w-0\">\n                    <p class=\"text-sm font-medium text-gray-950 dark:text-white\">{{ __('access-tokens.integrations.api_link') }}</p>\n                    <p class=\"text-xs text-gray-500 dark:text-gray-400\">{{ __('access-tokens.integrations.api_description') }}</p>\n                </div>\n                <x-heroicon-m-arrow-right class=\"w-4 h-4 flex-shrink-0 text-gray-400 dark:text-gray-500 group-hover:text-primary-600 dark:group-hover:text-primary-400 transition\" />\n            </a>\n            <a href=\"{{ route('documentation.show', ['type' => 'mcp']) }}\" target=\"_blank\" class=\"flex items-center gap-4 bg-white dark:bg-white/5 px-4 py-3 transition hover:bg-gray-50 dark:hover:bg-white/10 group\">\n                <div class=\"flex-shrink-0 flex items-center justify-center w-9 h-9 rounded-lg bg-gray-100 dark:bg-white/10 text-gray-500 dark:text-gray-400 group-hover:text-primary-600 dark:group-hover:text-primary-400 transition\">\n                    <x-heroicon-o-cpu-chip class=\"w-5 h-5\" />\n                </div>\n                <div class=\"flex-1 min-w-0\">\n                    <p class=\"text-sm font-medium text-gray-950 dark:text-white\">{{ __('access-tokens.integrations.mcp_link') }}</p>\n                    <p class=\"text-xs text-gray-500 dark:text-gray-400\">{{ __('access-tokens.integrations.mcp_description') }}</p>\n                </div>\n                <x-heroicon-m-arrow-right class=\"w-4 h-4 flex-shrink-0 text-gray-400 dark:text-gray-500 group-hover:text-primary-600 dark:group-hover:text-primary-400 transition\" />\n            </a>\n        </div>\n    </div>\n</x-filament-panels::page>\n"
  },
  {
    "path": "resources/views/filament/pages/create-team.blade.php",
    "content": "<x-filament-panels::page>\n</x-filament-panels::page>\n"
  },
  {
    "path": "resources/views/filament/pages/dashboard.blade.php",
    "content": "<x-filament-panels::page>\n\n</x-filament-panels::page>\n"
  },
  {
    "path": "resources/views/filament/pages/edit-profile.blade.php",
    "content": "<x-filament-panels::page>\n    {{ $this->form }}\n</x-filament-panels::page>\n"
  },
  {
    "path": "resources/views/filament/pages/edit-team.blade.php",
    "content": "<x-filament-panels::page>\n    {{ $this->form }}\n</x-filament-panels::page>\n"
  },
  {
    "path": "resources/views/filament/tables/columns/avatar-name-column.blade.php",
    "content": "@php\n    $record = $getRecord();\n    $name = $record->name ?? '';\n    $avatarUrl = $record->avatar;\n@endphp\n\n<div class=\"flex items-center gap-2 px-3 py-2\">\n    <img\n        src=\"{{ $avatarUrl }}\"\n        alt=\"\"\n        class=\"size-5 rounded-full ring-1 ring-gray-200 dark:ring-gray-700 shrink-0\"\n    />\n    <span class=\"truncate\">{{ $name }}</span>\n</div>\n"
  },
  {
    "path": "resources/views/filament/tables/columns/logo-name-column.blade.php",
    "content": "@php\n    $record = $getRecord();\n    $name = $record->name ?? '';\n    $logoUrl = $record->logo;\n@endphp\n\n<div class=\"flex items-center gap-2 px-3 py-2\">\n    <img\n        src=\"{{ $logoUrl }}\"\n        alt=\"\"\n        class=\"size-5 rounded ring-1 ring-gray-200 dark:ring-gray-700 shrink-0\"\n    />\n    <span class=\"truncate\">{{ $name }}</span>\n</div>\n"
  },
  {
    "path": "resources/views/home/index.blade.php",
    "content": "@php\n    $faqs = [\n        ['Is Relaticle production-ready?', 'Yes. Relaticle has 1,100+ automated tests, 5-layer authorization, 56+ MCP-specific tests, and is used in production. The codebase is continuously tested with PHPStan static analysis and Pest mutation testing.'],\n        ['What AI agents can I connect?', 'Any agent that speaks MCP (Model Context Protocol). Claude, ChatGPT, Gemini, open-source models, or your own custom agents. Relaticle\\'s MCP server provides 30 tools for AI agents to read, create, update, and delete CRM data.'],\n        ['What is MCP?', 'MCP (Model Context Protocol) is an open standard that lets AI agents interact with tools and data sources. Relaticle\\'s MCP server gives agents 30 tools to work with your CRM data — listing companies, creating contacts, updating opportunities, and more.'],\n        ['How is Relaticle different from HubSpot or Salesforce?', 'Relaticle is self-hosted (you own your data), open-source (AGPL-3.0), has 30 MCP tools (vs HubSpot\\'s 9), and has no per-seat pricing. It\\'s designed for teams who want AI agent integration without vendor lock-in.'],\n        ['How do I deploy Relaticle?', 'Deploy with Docker Compose, Laravel Forge, or any PHP 8.4+ hosting with PostgreSQL. Self-hosted means your data never leaves your server. A managed hosting option is also available at app.relaticle.com.'],\n        ['Can I customize the data model?', 'Yes. Relaticle offers 22 custom field types including text, email, phone, currency, date, select, multiselect, entity relationships, conditional visibility, and per-field encryption. No migrations or code changes needed.'],\n    ];\n@endphp\n\n<x-guest-layout\n    :title=\"config('app.name') . ' - ' . __('The Open-Source CRM Built for AI Agents')\"\n    description=\"Open-source, self-hosted CRM with a production-grade MCP server. Connect any AI agent. 22 custom field types, REST API, team isolation.\"\n    :ogTitle=\"config('app.name') . ' - Open-Source Agent-Native CRM'\"\n    ogDescription=\"Self-hosted CRM with 30 MCP tools for AI agents. Full CRUD, custom fields, schema discovery. Own your data, bring your AI.\"\n    :ogImage=\"url('/images/open-graph.jpg')\">\n    @push('preload')\n        <link rel=\"preload\"\n              as=\"image\"\n              href=\"{{ asset('images/app-pipeline-preview-832w.webp') }}\"\n              imagesrcset=\"{{ asset('images/app-pipeline-preview-380w.webp') }} 380w, {{ asset('images/app-pipeline-preview-640w.webp') }} 640w, {{ asset('images/app-pipeline-preview-832w.webp') }} 832w, {{ asset('images/app-pipeline-preview.webp') }} 1440w\"\n              imagesizes=\"(max-width: 640px) 380px, (max-width: 1024px) 640px, 832px\"\n              type=\"image/webp\" />\n    @endpush\n\n    @push('header')\n        @vite('resources/js/motion.js')\n    @endpush\n\n    @include('home.partials.hero')\n    @include('home.partials.features')\n    @include('home.partials.community')\n    @include('home.partials.faq')\n    @include('home.partials.start-building')\n\n    @php\n        $schema = (new \\Spatie\\SchemaOrg\\Graph())\n            ->softwareApplication(fn ($app) => $app\n                ->name('Relaticle')\n                ->applicationCategory('BusinessApplication')\n                ->applicationSubCategory('CRM')\n                ->operatingSystem('Linux, macOS, Windows')\n                ->description('The open-source CRM built for AI agents. Self-hosted with a production-grade MCP server (30 tools), REST API, and 22 custom field types. Connect any AI agent -- Claude, GPT, or open-source models.')\n                ->url(url('/'))\n                ->offers(\\Spatie\\SchemaOrg\\Schema::offer()->price('0')->priceCurrency('USD'))\n                ->setProperty('featureList', [\n                    'MCP server with 30 tools for AI agents',\n                    'REST API with full CRUD operations',\n                    '22 custom field types with conditional visibility and encryption',\n                    'Self-hosted with full data ownership',\n                    'Multi-team isolation with 5-layer authorization',\n                    '1,100+ automated tests',\n                    'CSV import and export',\n                    'AI-powered record summaries',\n                ])\n                ->license('https://www.gnu.org/licenses/agpl-3.0.html')\n            )\n            ->organization(fn ($org) => $org\n                ->name('Relaticle')\n                ->url(url('/'))\n                ->logo(asset('favicon.svg'))\n                ->sameAs(array_filter([\n                    'https://github.com/relaticle/relaticle',\n                    config('services.discord.invite_url'),\n                ]))\n            )\n            ->website(fn ($site) => $site\n                ->name('Relaticle')\n                ->url(url('/'))\n            )\n            ->fAQPage(function ($faq) use ($faqs) {\n                return $faq->mainEntity(array_map(fn ($item) => \\Spatie\\SchemaOrg\\Schema::question()\n                    ->name($item[0])\n                    ->acceptedAnswer(\n                        \\Spatie\\SchemaOrg\\Schema::answer()->text($item[1])\n                    ), $faqs));\n            });\n    @endphp\n\n    {!! $schema->toScript() !!}\n</x-guest-layout>\n"
  },
  {
    "path": "resources/views/home/partials/community.blade.php",
    "content": "<section id=\"community\" class=\"relative py-24 md:py-32 overflow-hidden bg-white dark:bg-gray-950\">\n    <div class=\"absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,rgb(0_0_0/0.04)_1px,transparent_0)] dark:bg-[radial-gradient(circle_at_1px_1px,rgb(255_255_255/0.035)_1px,transparent_0)] bg-[size:24px_24px] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_50%,black_25%,transparent_100%)]\"></div>\n\n    <div class=\"relative max-w-6xl mx-auto px-6 lg:px-8\">\n        <div class=\"max-w-2xl mx-auto text-center mb-16 md:mb-20\">\n            <h2 class=\"font-display text-3xl sm:text-4xl md:text-[2.75rem] font-bold text-gray-950 dark:text-white tracking-[-0.02em] leading-[1.15]\">\n                Built in the Open\n            </h2>\n            <p class=\"mt-5 text-base md:text-lg text-gray-500 dark:text-gray-400 max-w-lg mx-auto leading-relaxed\">\n                Relaticle is AGPL-3.0 open source. Star the repo, join Discord, and help shape the future of agent-native CRM.\n            </p>\n        </div>\n\n        <div class=\"max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-3 gap-3 mb-10\">\n            @foreach([\n                ['url' => 'https://github.com/relaticle/relaticle', 'icon' => 'ri-github-fill', 'iconClass' => '', 'title' => 'GitHub', 'desc' => 'Star our repo, report issues, and contribute code. Completely open source and free to use.', 'cta' => 'View Repository', 'external' => true],\n                ['url' => route('discord'), 'icon' => 'ri-discord-fill', 'iconClass' => 'text-[#5865F2]', 'title' => 'Discord', 'desc' => 'Chat with developers, get help, and share ideas. Join our growing community of builders.', 'cta' => 'Join Discord', 'external' => true],\n                ['url' => route('documentation.index'), 'icon' => 'ri-book-open-line', 'iconClass' => 'text-primary dark:text-primary-400', 'title' => 'Documentation', 'desc' => 'Learn how to use Relaticle. Comprehensive guides for users and developers alike.', 'cta' => 'Read the Docs', 'external' => false],\n            ] as $card)\n                <a href=\"{{ $card['url'] }}\" @if($card['external']) target=\"_blank\" rel=\"noopener noreferrer\" @endif\n                   class=\"group rounded-xl border border-gray-200/80 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] p-6 transition-all duration-300 hover:border-gray-300 dark:hover:border-white/[0.10] hover:shadow-sm flex flex-col\">\n                    <div class=\"flex items-center justify-between mb-3\">\n                        <h3 class=\"font-display text-lg font-medium text-gray-900 dark:text-white inline-flex items-center gap-2\">\n                            <x-dynamic-component :component=\"$card['icon']\" class=\"w-3.5 h-3.5 {{ $card['iconClass'] }}\"/>\n                            {{ $card['title'] }}\n                        </h3>\n                        <x-ri-arrow-right-up-line class=\"w-3.5 h-3.5 text-gray-300 dark:text-gray-600 group-hover:text-gray-400 group-hover:-translate-y-0.5 group-hover:translate-x-0.5 transition-all duration-300\"/>\n                    </div>\n                    <p class=\"text-[13px] leading-relaxed text-gray-500 dark:text-gray-400 mb-5\">{{ $card['desc'] }}</p>\n                    <span class=\"mt-auto text-xs font-medium text-gray-900 dark:text-white group-hover:text-primary dark:group-hover:text-primary-400 transition-colors duration-300\">\n                        {{ $card['cta'] }}\n                    </span>\n                </a>\n            @endforeach\n        </div>\n\n        <div class=\"max-w-3xl mx-auto\">\n            <div class=\"rounded-xl border border-gray-200/80 dark:border-white/[0.06] bg-gray-50/50 dark:bg-white/[0.015] overflow-hidden\">\n                <div class=\"grid grid-cols-2 md:grid-cols-4 divide-x divide-gray-200/60 dark:divide-white/[0.04]\">\n                    @foreach([['AGPL-3.0', 'Open Source'], ['1,100+', 'Automated Tests'], ['30', 'MCP Tools'], ['Free', 'Forever']] as $index => [$value, $label])\n                        <div class=\"px-6 py-5 text-center @if($index >= 2) border-t border-gray-200/60 dark:border-white/[0.04] md:border-t-0 @endif\">\n                            <div class=\"text-lg font-semibold text-gray-900 dark:text-white tracking-tight\">{{ $value }}</div>\n                            <div class=\"text-[11px] text-gray-400 dark:text-gray-500 mt-0.5 uppercase tracking-wider font-medium\">{{ $label }}</div>\n                        </div>\n                    @endforeach\n                </div>\n            </div>\n        </div>\n    </div>\n\n</section>\n"
  },
  {
    "path": "resources/views/home/partials/faq.blade.php",
    "content": "<section id=\"faq\" class=\"py-24 md:py-32 bg-gray-50 dark:bg-gray-950 relative overflow-hidden\">\n    <div class=\"absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,rgb(0_0_0/0.04)_1px,transparent_0)] dark:bg-[radial-gradient(circle_at_1px_1px,rgb(255_255_255/0.035)_1px,transparent_0)] bg-[size:24px_24px] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_50%,black_25%,transparent_100%)]\"></div>\n\n    <!-- Bottom gradient fade into next section -->\n    <div class=\"absolute bottom-0 left-0 right-0 h-32 bg-gradient-to-b from-transparent to-white dark:to-gray-950 pointer-events-none\"></div>\n\n    <div class=\"relative max-w-3xl mx-auto px-6 lg:px-8\">\n        <div class=\"max-w-2xl mx-auto text-center mb-16\">\n            <h2 class=\"font-display text-3xl sm:text-4xl md:text-[2.75rem] font-bold text-gray-950 dark:text-white tracking-[-0.02em] leading-[1.15]\">\n                Frequently Asked Questions\n            </h2>\n            <p class=\"mt-5 text-base md:text-lg text-gray-500 dark:text-gray-400 max-w-lg mx-auto leading-relaxed\">\n                Everything you need to know about Relaticle, from deployment to AI agent integration.\n            </p>\n        </div>\n\n        <div x-data=\"{ open: null }\" class=\"divide-y divide-gray-200/80 dark:divide-white/[0.06]\">\n            @foreach($faqs as $index => [$question, $answer])\n                <div class=\"faq-item py-5\">\n                    <button id=\"faq-question-{{ $index }}\"\n                            @click=\"open = open === {{ $index }} ? null : {{ $index }}\"\n                            :aria-expanded=\"(open === {{ $index }}).toString()\"\n                            aria-controls=\"faq-answer-{{ $index }}\"\n                            class=\"flex w-full items-center justify-between text-left gap-4 cursor-pointer hover:text-primary dark:hover:text-primary-400 transition-colors duration-150\">\n                        <span class=\"text-base font-semibold text-gray-900 dark:text-white\">\n                            {{ $question }}\n                        </span>\n                        <x-ri-arrow-down-s-line class=\"h-5 w-5 shrink-0 text-gray-400 transition-transform duration-200\" ::class=\"open === {{ $index }} ? 'rotate-180' : ''\"/>\n                    </button>\n                    <div id=\"faq-answer-{{ $index }}\" role=\"region\" aria-labelledby=\"faq-question-{{ $index }}\" x-show=\"open === {{ $index }}\" x-collapse x-cloak class=\"mt-3 text-sm text-gray-600 dark:text-gray-400 leading-relaxed\">\n                        {{ $answer }}\n                    </div>\n                </div>\n            @endforeach\n        </div>\n    </div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            var e = [0.22, 1, 0.36, 1];\n            inView('#faq .divide-y', function() {\n                animate('.faq-item', { y: [20, 0] }, { delay: stagger(0.08), duration: 0.5, ease: e });\n            }, { amount: 0.15 });\n        });\n    </script>\n</section>\n"
  },
  {
    "path": "resources/views/home/partials/features.blade.php",
    "content": "@php\n    $cardBase = 'group feat-card rounded-xl border border-gray-200/80 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] transition-all duration-300 hover:border-gray-300 dark:hover:border-white/[0.10] hover:shadow-sm';\n    $cardTitle = 'font-display text-lg font-medium text-gray-900 dark:text-white mb-2';\n    $cardDesc = 'text-[13px] leading-relaxed text-gray-500 dark:text-gray-400';\n@endphp\n\n<section id=\"features\" class=\"py-24 md:py-32 bg-gray-50 dark:bg-gray-950 relative overflow-hidden\">\n    <div class=\"max-w-6xl mx-auto px-6 lg:px-8 relative\">\n\n        <div class=\"max-w-2xl mx-auto text-center mb-16 md:mb-20\">\n            <div class=\"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full border border-gray-200/80 dark:border-white/[0.08] bg-white/80 dark:bg-white/[0.03] backdrop-blur-sm mb-6 shadow-[0_1px_2px_rgba(0,0,0,0.03)]\">\n                <span class=\"uppercase tracking-wider text-[10px] font-medium text-gray-500 dark:text-gray-400\">Features</span>\n            </div>\n            <h2 class=\"font-display text-3xl sm:text-4xl md:text-[2.75rem] font-bold text-gray-950 dark:text-white tracking-[-0.02em] leading-[1.15]\">\n                Built for humans. Accessible to AI.\n            </h2>\n            <p class=\"mt-5 text-base md:text-lg text-gray-500 dark:text-gray-400 max-w-2xl mx-auto leading-relaxed\">\n                30 MCP tools, a REST API, and 22 custom field types. Your team and your AI agents work from the same source of truth.\n            </p>\n        </div>\n\n        <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 md:gap-2\">\n\n            {{-- Agent-Native Infrastructure — 2col 2row --}}\n            <div class=\"{{ $cardBase }} p-6 md:col-span-2 lg:col-span-2 lg:row-span-2 overflow-hidden flex flex-col\">\n                <h3 class=\"font-display text-xl font-semibold text-gray-900 dark:text-white mb-2 inline-flex items-center gap-2\">\n                    <x-ri-git-merge-line class=\"w-4 h-4 text-primary dark:text-primary-400\"/>\n                    Agent-Native Infrastructure\n                </h3>\n                <p class=\"{{ $cardDesc }} max-w-md\">\n                    Connect any AI agent through the MCP server with 30 tools, or build custom integrations with the REST API. Full CRUD, custom field support, and schema discovery built in.\n                </p>\n\n                <div class=\"mt-4 rounded-lg bg-gray-50 dark:bg-gray-800/80 p-5 overflow-hidden flex-1 flex flex-col justify-center\">\n                    <style>\n                        @media (min-width: 1024px) { #flow-mobile { display: none !important; } }\n                        @media (max-width: 1023px) { #flow-desktop { display: none !important; } }\n                    </style>\n\n                    <div id=\"flow-mobile\" class=\"flex flex-col items-center gap-2\">\n                        <div class=\"flex items-center gap-2 flex-wrap justify-center\">\n                            @foreach([['ri-claude-fill', 'text-[#D4763C]', 'Claude'], ['ri-openai-fill', 'text-gray-900 dark:text-gray-200', 'ChatGPT'], ['ri-gemini-fill', 'text-blue-500', 'Gemini']] as [$icon, $color, $name])\n                                <div class=\"fn flex items-center gap-2 bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 rounded-lg px-3 py-1.5\">\n                                    <x-dynamic-component :component=\"$icon\" class=\"w-4 h-4 {{ $color }}\"/>\n                                    <span class=\"text-xs font-medium text-gray-700 dark:text-gray-300\">{{ $name }}</span>\n                                </div>\n                            @endforeach\n                            <div class=\"fn flex items-center gap-2 bg-white dark:bg-gray-700 border border-dashed border-gray-300 dark:border-gray-600 rounded-lg px-3 py-1.5\">\n                                <x-ri-add-line class=\"w-4 h-4 text-gray-400 dark:text-gray-500\"/>\n                                <span class=\"text-xs font-medium text-gray-500 dark:text-gray-500\">Custom</span>\n                            </div>\n                        </div>\n                        <x-ri-arrow-down-double-line class=\"w-6 h-6 text-gray-300 dark:text-gray-600\"/>\n                        <div class=\"fn w-full bg-white dark:bg-gray-700 border border-primary/30 dark:border-primary/40 rounded-lg p-3 shadow-sm shadow-primary/5\">\n                            <div class=\"text-[10px] font-medium text-emerald-700 dark:text-emerald-400 mb-2\">MCP Server · Connected</div>\n                            <div class=\"flex gap-4 text-[11px]\">\n                                <span class=\"text-gray-500 dark:text-gray-400\"><span class=\"font-mono font-medium text-gray-800 dark:text-gray-200\">30</span> tools</span>\n                                <span class=\"text-gray-500 dark:text-gray-400\">REST API <span class=\"font-mono font-medium text-gray-800 dark:text-gray-200\">v1</span></span>\n                                <span class=\"text-gray-500 dark:text-gray-400\">Schema <span class=\"font-mono font-medium text-emerald-700 dark:text-emerald-400\">auto</span></span>\n                            </div>\n                        </div>\n                        <x-ri-arrow-down-double-line class=\"w-6 h-6 text-gray-300 dark:text-gray-600\"/>\n                        <div class=\"fn flex gap-2 flex-wrap justify-center text-[11px] text-gray-600 dark:text-gray-300\">\n                            @foreach(['Contacts', 'Companies', 'Deals', 'Tasks', 'Notes'] as $e)\n                                <span class=\"bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 rounded px-2 py-1\">{{ $e }}</span>\n                            @endforeach\n                        </div>\n                    </div>\n\n                    <div id=\"flow-desktop\" class=\"relative\">\n                        <svg class=\"absolute inset-0 w-full h-full pointer-events-none z-0\" viewBox=\"0 0 613 188\" preserveAspectRatio=\"none\">\n                            <defs>\n                                <linearGradient id=\"cg\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n                                    <stop offset=\"0%\" stop-color=\"#d1d5db\"/><stop offset=\"50%\" stop-color=\"oklch(0.6 0.19 275 / 0.5)\"/><stop offset=\"100%\" stop-color=\"#d1d5db\"/>\n                                </linearGradient>\n                            </defs>\n                            @foreach([42,81,119,158] as $i => $y)\n                                <path class=\"curve-path\" pathLength=\"1\" d=\"M 120 {{ $y }} C 183 {{ $y }}, 183 {{ 65 + $i * 12 }}, 246 {{ 65 + $i * 12 }}\" stroke=\"url(#cg)\" stroke-width=\"1.2\" fill=\"none\" opacity=\"{{ $i === 3 ? '0.4' : '0.6' }}\"/>\n                            @endforeach\n                            @foreach([[65,40],[70,73],[82,105],[90,138],[100,170]] as [$sy,$ey])\n                                <path class=\"curve-path\" pathLength=\"1\" d=\"M 386 {{ $sy }} C 450 {{ $sy }}, 450 {{ $ey }}, 513 {{ $ey }}\" stroke=\"url(#cg)\" stroke-width=\"1.2\" fill=\"none\" opacity=\"0.6\"/>\n                            @endforeach\n                        </svg>\n\n                        <div class=\"relative z-10 grid gap-0\" style=\"grid-template-columns: 120px 1fr minmax(140px, auto) 1fr 100px;\">\n                            <div class=\"space-y-2 py-1\">\n                                <div class=\"text-[10px] uppercase tracking-wider text-gray-400 dark:text-gray-500 font-medium mb-2\">Agents</div>\n                                @foreach([['ri-claude-fill', 'text-[#D4763C]', 'Claude', false], ['ri-openai-fill', 'text-gray-900 dark:text-gray-200', 'ChatGPT', false], ['ri-gemini-fill', 'text-blue-500', 'Gemini', false], ['ri-add-line', 'text-gray-400 dark:text-gray-500', 'Custom', true]] as [$icon, $color, $name, $dashed])\n                                    <div class=\"fn flex items-center gap-2 bg-white dark:bg-gray-700 border {{ $dashed ? 'border-dashed border-gray-300' : 'border-gray-200' }} dark:border-gray-600 rounded-lg px-2.5 py-1.5 {{ $dashed ? '' : 'shadow-sm' }}\">\n                                        <x-dynamic-component :component=\"$icon\" class=\"w-3.5 h-3.5 {{ $color }}\"/>\n                                        <span class=\"text-[11px] font-medium {{ $dashed ? 'text-gray-500 dark:text-gray-500' : 'text-gray-700 dark:text-gray-300' }}\">{{ $name }}</span>\n                                    </div>\n                                @endforeach\n                            </div>\n                            <div></div>\n                            <div class=\"fn py-1\">\n                                <div class=\"text-[10px] uppercase tracking-wider text-gray-400 dark:text-gray-500 font-medium mb-2\">MCP Server</div>\n                                <div class=\"bg-white dark:bg-gray-700 border border-primary/30 dark:border-primary/40 rounded-lg p-3 shadow-sm shadow-primary/5\">\n                                    <div class=\"text-[10px] font-medium text-emerald-700 dark:text-emerald-400 mb-2\">Connected</div>\n                                    <div class=\"space-y-1.5\">\n                                        @foreach([['Tools', '30', ''], ['REST API', 'v1', ''], ['Schema', 'auto', 'text-emerald-700 dark:text-emerald-400']] as [$label, $val, $valClass])\n                                            <div class=\"flex items-center justify-between text-[11px]\">\n                                                <span class=\"text-gray-500 dark:text-gray-400\">{{ $label }}</span>\n                                                <span class=\"font-mono font-medium {{ $valClass ?: 'text-gray-800 dark:text-gray-200' }}\">{{ $val }}</span>\n                                            </div>\n                                        @endforeach\n                                    </div>\n                                </div>\n                            </div>\n                            <div></div>\n                            <div class=\"fn py-1\">\n                                <div class=\"text-[10px] uppercase tracking-wider text-gray-400 dark:text-gray-500 font-medium mb-2\">Your CRM</div>\n                                <div class=\"space-y-1.5\">\n                                    @foreach(['Contacts', 'Companies', 'Deals', 'Tasks', 'Notes'] as $entity)\n                                        <div class=\"flex items-center gap-2 text-[11px] text-gray-600 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 rounded px-2.5 py-1\">\n                                            <div class=\"w-1.5 h-1.5 rounded-full bg-primary/60\"></div>\n                                            {{ $entity }}\n                                        </div>\n                                    @endforeach\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n\n                    <script>\n                        document.addEventListener('DOMContentLoaded', function() {\n                            var ease = [0.22, 1, 0.36, 1];\n                            animate(\".curve-path\", { pathLength: 0 }, { duration: 0 });\n                            inView(\"#flow-desktop\", function() {\n                                animate(\"#flow-desktop .fn\", { y: [12, 0] }, { delay: stagger(0.05), duration: 0.4, ease: ease });\n                                animate(\".curve-path\", { pathLength: [0, 1] }, { duration: 0.8, delay: stagger(0.06, { start: 0.3 }), ease: ease });\n                            }, { amount: 0.3 });\n                            inView(\"#flow-mobile\", function() {\n                                animate(\"#flow-mobile .fn\", { y: [12, 0] }, { delay: stagger(0.06), duration: 0.4, ease: ease });\n                            }, { amount: 0.3 });\n                        });\n                    </script>\n                </div>\n            </div>\n\n            {{-- AI-Powered Insights --}}\n            <div id=\"card-ai\" class=\"{{ $cardBase }} p-6 overflow-hidden\">\n                <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                    <x-ri-lightbulb-flash-line id=\"ai-sparkle\" class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                    AI-Powered Insights\n                </h3>\n                <p class=\"{{ $cardDesc }}\">\n                    One-click summaries of contacts and deals. AI analyzes notes, tasks, and interactions so you always know what happened and what to do next.\n                </p>\n                {{-- Animated insight lines --}}\n                <div class=\"mt-4 space-y-2\">\n                    <div class=\"ai-line h-2 rounded-full bg-primary/[0.07] dark:bg-primary/[0.12] overflow-hidden\"><div class=\"ai-fill h-full rounded-full bg-primary/20 dark:bg-primary/30 w-0\"></div></div>\n                    <div class=\"ai-line h-2 rounded-full bg-primary/[0.07] dark:bg-primary/[0.12] overflow-hidden\"><div class=\"ai-fill h-full rounded-full bg-primary/15 dark:bg-primary/25 w-0\"></div></div>\n                    <div class=\"ai-line h-2 rounded-full bg-primary/[0.07] dark:bg-primary/[0.12] overflow-hidden\"><div class=\"ai-fill h-full rounded-full bg-primary/10 dark:bg-primary/20 w-0\"></div></div>\n                </div>\n            </div>\n\n            {{-- Customizable Data Model --}}\n            <div id=\"card-data\" class=\"{{ $cardBase }} p-6 overflow-hidden\">\n                <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                    <x-ri-stack-line class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                    Customizable Data Model\n                </h3>\n                <p class=\"{{ $cardDesc }}\">\n                    22 field types including entity relationships, conditional visibility, and per-field encryption.\n                </p>\n                <div class=\"mt-4 rounded-lg bg-gray-50 dark:bg-gray-800 p-3 space-y-2\">\n                    @foreach([['Text', 'Company name...', false], ['Select', 'Industry', true]] as [$label, $placeholder, $hasArrow])\n                        <div class=\"field-row flex items-center gap-2\">\n                            <div class=\"w-14 text-[10px] text-gray-500 dark:text-gray-400 shrink-0\">{{ $label }}</div>\n                            <div class=\"flex-1 h-6 rounded bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 px-2 flex items-center {{ $hasArrow ? 'justify-between' : '' }} text-[10px] text-gray-500 dark:text-gray-400\">\n                                <span>{{ $placeholder }}</span>\n                                @if($hasArrow)<x-ri-arrow-down-s-line class=\"w-3 h-3\"/>@endif\n                            </div>\n                        </div>\n                    @endforeach\n                    <div class=\"field-row flex items-center gap-2\">\n                        <div class=\"w-14 text-[10px] text-gray-500 dark:text-gray-400 shrink-0\">Toggle</div>\n                        <div class=\"w-8 h-4 rounded-full bg-primary relative\">\n                            <div class=\"absolute right-0.5 top-0.5 w-3 h-3 rounded-full bg-white shadow-sm\"></div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            {{-- Company Management --}}\n            <div class=\"relative {{ $cardBase }} p-6 overflow-hidden\">\n                <div class=\"absolute w-32 h-32 bg-primary/10 dark:bg-primary/15 rounded-full blur-2xl\" style=\"top: -2rem; left: -2rem;\"></div>\n                <div class=\"relative\">\n                    <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                        <x-ri-building-2-line class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                        Company Management\n                    </h3>\n                    <p class=\"{{ $cardDesc }}\">Track companies with detailed profiles, linked contacts, and opportunity history. See the full picture at a glance.</p>\n                </div>\n            </div>\n\n            {{-- People Management --}}\n            <div class=\"{{ $cardBase }} p-6\">\n                <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                    <x-ri-user-star-line class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                    People Management\n                </h3>\n                <p class=\"{{ $cardDesc }}\">Rich contact profiles with interaction history, notes, and linked companies. Find anyone with advanced search and filters.</p>\n            </div>\n\n            {{-- Sales Opportunities --}}\n            <div id=\"card-sales\" class=\"{{ $cardBase }} p-6 md:col-span-2 lg:col-span-1 overflow-hidden\">\n                <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                    <x-ri-funds-line class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                    Sales Opportunities\n                </h3>\n                <p class=\"{{ $cardDesc }}\">\n                    Manage your pipeline with custom stages, lifecycle tracking, and win/loss analysis.\n                </p>\n                <div class=\"mt-4 flex gap-1 h-2 rounded-full overflow-hidden\">\n                    <div class=\"pipe-seg flex-[3] bg-primary/70 rounded-l-full origin-left\"></div>\n                    <div class=\"pipe-seg flex-[2] bg-primary/45 origin-left\"></div>\n                    <div class=\"pipe-seg flex-[2] bg-primary/25 origin-left\"></div>\n                    <div class=\"pipe-seg flex-[1] bg-gray-200 dark:bg-gray-700 rounded-r-full origin-left\"></div>\n                </div>\n                <div class=\"mt-1.5 flex justify-between text-[10px] text-gray-500 dark:text-gray-500\">\n                    @foreach(['Lead', 'Qualified', 'Proposal', 'Won'] as $stage)\n                        <span>{{ $stage }}</span>\n                    @endforeach\n                </div>\n            </div>\n\n            {{-- Task Management — 2col --}}\n            <div id=\"card-tasks\" class=\"{{ $cardBase }} p-6 md:col-span-2 lg:col-span-2 overflow-hidden\">\n                <div class=\"flex flex-col md:flex-row md:gap-6\">\n                    <div class=\"md:flex-1\">\n                        <h3 class=\"font-display text-xl font-semibold text-gray-900 dark:text-white mb-2 inline-flex items-center gap-2\">\n                            <x-ri-layout-masonry-line class=\"w-4 h-4 text-primary dark:text-primary-400\"/>\n                            Task Management\n                        </h3>\n                        <p class=\"{{ $cardDesc }}\">\n                            Create, assign, and track tasks linked to contacts, companies, and deals. Your AI agent can create follow-ups automatically.\n                        </p>\n                    </div>\n                    <div class=\"mt-4 md:mt-0 md:flex-1 rounded-lg bg-gray-50 dark:bg-gray-800 p-4 space-y-3\">\n                        @foreach([\n                            [true, 'Send proposal to', '@Acme', 'bg-primary/10 text-primary-700 dark:text-primary-300'],\n                            [false, 'Follow up with', '@Sarah', 'bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300'],\n                            [false, 'Review Q4 pipeline', 'Due today', 'bg-amber-50 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300'],\n                        ] as [$done, $text, $badge, $badgeClass])\n                            <div class=\"task-row flex items-center gap-3\">\n                                <div class=\"w-4 h-4 rounded-full border-2 {{ $done ? 'border-green-500 bg-green-500/20' : 'border-gray-300 dark:border-gray-600' }} flex items-center justify-center shrink-0\">\n                                    @if($done)<x-ri-check-line class=\"w-2.5 h-2.5 text-green-600 dark:text-green-400\"/>@endif\n                                </div>\n                                <span class=\"text-sm {{ $done ? 'text-gray-500 dark:text-gray-500 line-through' : 'text-gray-700 dark:text-gray-300' }}\">{{ $text }}</span>\n                                <span class=\"text-[10px] {{ $badgeClass }} px-2 py-0.5 rounded-full shrink-0\">{{ $badge }}</span>\n                            </div>\n                        @endforeach\n                    </div>\n                </div>\n            </div>\n\n            {{-- Simple feature cards row 2 --}}\n            @foreach([\n                ['ri-team-line', 'Team Collaboration', 'Multi-workspace support with role-based permissions and 5-layer authorization. Every team member sees exactly what they should.'],\n                ['ri-download-cloud-2-line', 'Import & Export', 'Migrate from any CRM with CSV imports. Column mapping, validation, and error handling included. Export anytime — your data is yours.'],\n            ] as [$icon, $title, $desc])\n                <div class=\"{{ $cardBase }} p-6\">\n                    <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                        <x-dynamic-component :component=\"$icon\" class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                        {{ $title }}\n                    </h3>\n                    <p class=\"{{ $cardDesc }}\">{{ $desc }}</p>\n                </div>\n            @endforeach\n\n            {{-- Notes & Activity Log — spans full width on tablet to avoid orphan gap --}}\n            <div class=\"{{ $cardBase }} p-6 md:col-span-2 lg:col-span-1\">\n                <h3 class=\"{{ $cardTitle }} inline-flex items-center gap-2\">\n                    <x-ri-quill-pen-line class=\"w-3.5 h-3.5 text-primary dark:text-primary-400\"/>\n                    Notes & Activity Log\n                </h3>\n                <p class=\"{{ $cardDesc }}\">Capture notes linked to any record. Your AI agent can log meeting notes automatically. Search and retrieve context instantly.</p>\n            </div>\n\n            {{-- CTA Card --}}\n            <div class=\"relative {{ $cardBase }} p-6 flex flex-col justify-between md:col-span-2 lg:col-span-1 overflow-hidden\">\n                <div class=\"absolute -bottom-8 -right-8 w-32 h-32 bg-primary/10 dark:bg-primary/15 rounded-full blur-2xl\"></div>\n                <div class=\"relative\">\n                    <h3 class=\"{{ $cardTitle }}\">Ready to start?</h3>\n                    <p class=\"{{ $cardDesc }}\">Give your AI agents a CRM they can actually use.</p>\n                </div>\n                <div class=\"relative mt-5\">\n                    <x-marketing.button size=\"sm\" href=\"{{ route('register') }}\">\n                        Start for free\n                    </x-marketing.button>\n                    <div class=\"mt-3 flex items-center gap-3 text-[10px] text-gray-500 dark:text-gray-500\">\n                        <span>No credit card</span><span>&middot;</span><span>1,100+ tests</span><span>&middot;</span><span>AGPL-3.0</span>\n                    </div>\n                </div>\n            </div>\n\n        </div>\n\n        <script>\n            document.addEventListener('DOMContentLoaded', function() {\n                var e = [0.22, 1, 0.36, 1];\n\n                // Cards entrance — staggered fade up (visible by default for Lighthouse/no-JS)\n                inView('#features .grid', function() {\n                    animate('.feat-card', { y: [32, 0] }, { delay: stagger(0.07), duration: 0.6, ease: e });\n                }, { amount: 0.1 });\n\n                // AI Insights — scanning lines fill to random widths\n                inView('#card-ai', function() {\n                    animate('.ai-fill', { width: ['0%', '85%'] }, { delay: stagger(0.12, { start: 0.3 }), duration: 0.8, ease: e });\n                    setTimeout(function() {\n                        animate('.ai-fill', { width: ['85%', '60%'] }, { delay: stagger(0.08), duration: 0.5, ease: e });\n                        setTimeout(function() {\n                            animate('.ai-fill', { width: ['60%', '92%'] }, { delay: stagger(0.1), duration: 0.6, ease: e });\n                        }, 600);\n                    }, 1000);\n                    // Sparkle icon pulse\n                    animate('#ai-sparkle', { scale: [1, 1.3, 1], rotate: [0, 15, 0] }, { duration: 0.6, delay: 0.2, ease: e });\n                }, { amount: 0.4 });\n\n                // Data Model — form fields slide in from left\n                inView('#card-data', function() {\n                    animate('#card-data .field-row', { x: [-16, 0] }, { delay: stagger(0.1, { start: 0.3 }), duration: 0.4, ease: e });\n                }, { amount: 0.4 });\n\n                // Sales Pipeline — segments scale in from left\n                inView('#card-sales', function() {\n                    animate('.pipe-seg', { scaleX: [0, 1] }, { delay: stagger(0.12, { start: 0.3 }), duration: 0.6, ease: e });\n                }, { amount: 0.4 });\n\n                // Tasks — rows slide in staggered from right\n                inView('#card-tasks', function() {\n                    animate('.task-row', { x: [20, 0] }, { delay: stagger(0.15, { start: 0.2 }), duration: 0.45, ease: e });\n                }, { amount: 0.3 });\n            });\n        </script>\n    </div>\n</section>\n"
  },
  {
    "path": "resources/views/home/partials/hero-agent-preview.blade.php",
    "content": "<style>.hero-agent-preview .mcp-el { opacity: 0; }</style>\n\n<div x-data=\"heroChat()\"\n     @hero-chat-reset.window=\"resetChat()\"\n     @hero-chat-animate.window=\"animateChat()\"\n     class=\"hero-agent-preview bg-white dark:bg-neutral-950 flex flex-col min-h-[300px] sm:min-h-[400px] md:min-h-[500px]\">\n\n    {{-- Messages --}}\n    <div class=\"flex-1 p-4 sm:p-6 md:px-8 md:py-6 space-y-5 sm:space-y-6\">\n\n        {{-- User 1 --}}\n        <div class=\"mcp-el mcp-user flex items-start gap-2.5\">\n            <div class=\"w-6 h-6 rounded-full bg-gray-200 dark:bg-white/[0.1] flex items-center justify-center shrink-0 mt-4\">\n                <x-ri-user-3-fill class=\"w-3 h-3 text-gray-500 dark:text-gray-400\"/>\n            </div>\n            <div class=\"flex-1 min-w-0\">\n                <div class=\"text-xs font-semibold text-gray-900 dark:text-white mb-1\">You</div>\n                <div class=\"text-sm text-gray-900 dark:text-gray-100 leading-relaxed\">Add Sarah Chen as a contact at Kovra Systems. She's VP of Engineering.</div>\n            </div>\n        </div>\n\n        {{-- AI Assistant 1: Tool call + response --}}\n        <div class=\"flex items-start gap-2.5\">\n            <div class=\"w-6 h-6 rounded-full bg-gray-900 dark:bg-white/[0.15] flex items-center justify-center shrink-0 mt-4 mcp-el mcp-avatar\">\n                <x-ri-sparkling-2-fill class=\"w-3 h-3 text-white dark:text-gray-300\"/>\n            </div>\n            <div class=\"flex-1 min-w-0\">\n                <div class=\"mcp-el mcp-label text-xs font-semibold text-gray-900 dark:text-white mb-1\">ChatGPT</div>\n                <div class=\"space-y-2.5\">\n                    <div class=\"mcp-el mcp-tool flex items-center gap-2 text-[11px] sm:text-xs\">\n                        <span class=\"inline-flex items-center gap-1.5 text-primary dark:text-primary-300 font-medium\">\n                            <x-ri-terminal-box-line class=\"w-3 h-3 shrink-0\"/>\n                            <span class=\"font-mono\">relaticle/create-people</span>\n                        </span>\n                        <span class=\"text-emerald-600 dark:text-emerald-400 font-medium\">completed</span>\n                    </div>\n                    <div class=\"mcp-el mcp-text text-sm text-gray-600 dark:text-gray-300 leading-relaxed\">Done. I created the contact and linked her to Kovra Systems.</div>\n                    <div class=\"mcp-el mcp-card rounded-lg p-3 border border-gray-200/80 dark:border-white/[0.06] bg-gray-50/80 dark:bg-white/[0.02]\">\n                        <div class=\"flex items-center justify-between\">\n                            <div>\n                                <div class=\"text-sm font-semibold text-gray-900 dark:text-white\">Sarah Chen</div>\n                                <div class=\"text-xs text-gray-500 dark:text-gray-400 mt-0.5\">VP of Engineering · Kovra Systems</div>\n                            </div>\n                            <div class=\"w-7 h-7 rounded-full bg-gradient-to-br from-rose-400 to-orange-300 dark:from-rose-500 dark:to-orange-400 flex items-center justify-center shrink-0\">\n                                <span class=\"text-[10px] font-bold text-white\">SC</span>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        {{-- User 2 --}}\n        <div class=\"mcp-el mcp-user flex items-start gap-2.5\">\n            <div class=\"w-6 h-6 rounded-full bg-gray-200 dark:bg-white/[0.1] flex items-center justify-center shrink-0 mt-4\">\n                <x-ri-user-3-fill class=\"w-3 h-3 text-gray-500 dark:text-gray-400\"/>\n            </div>\n            <div class=\"flex-1 min-w-0\">\n                <div class=\"text-xs font-semibold text-gray-900 dark:text-white mb-1\">You</div>\n                <div class=\"text-sm text-gray-900 dark:text-gray-100 leading-relaxed\">Show me deals closing this quarter over $50K</div>\n            </div>\n        </div>\n\n        {{-- AI Assistant 2: Tool call + deals --}}\n        <div class=\"flex items-start gap-2.5\">\n            <div class=\"w-6 h-6 rounded-full bg-gray-900 dark:bg-white/[0.15] flex items-center justify-center shrink-0 mt-4 mcp-el mcp-avatar\">\n                <x-ri-sparkling-2-fill class=\"w-3 h-3 text-white dark:text-gray-300\"/>\n            </div>\n            <div class=\"flex-1 min-w-0\">\n                <div class=\"mcp-el mcp-label text-xs font-semibold text-gray-900 dark:text-white mb-1\">ChatGPT</div>\n                <div class=\"space-y-2.5\">\n                    <div class=\"mcp-el mcp-tool flex items-center gap-2 text-[11px] sm:text-xs\">\n                        <span class=\"inline-flex items-center gap-1.5 text-primary dark:text-primary-300 font-medium\">\n                            <x-ri-terminal-box-line class=\"w-3 h-3 shrink-0\"/>\n                            <span class=\"font-mono\">relaticle/list-opportunities</span>\n                        </span>\n                        <span class=\"text-emerald-600 dark:text-emerald-400 font-medium\">completed</span>\n                    </div>\n                    <div class=\"mcp-el mcp-text text-sm text-gray-600 dark:text-gray-300 leading-relaxed\">Found <span class=\"font-semibold text-gray-900 dark:text-white\">3 deals</span> worth <span class=\"font-semibold text-gray-900 dark:text-white\">$245K</span> total.</div>\n                    <div class=\"mcp-el mcp-deals rounded-lg border border-gray-200/80 dark:border-white/[0.06] bg-gray-50/80 dark:bg-white/[0.02] divide-y divide-gray-200/60 dark:divide-white/[0.06]\">\n                        @foreach([\n                            ['Meridian Health', 'Platform License', '$120K', 'Apr 2', 'Proposal'],\n                            ['Trellis Labs', 'Team Expansion', '$85K', 'Apr 15', 'Qualified'],\n                            ['Arcwright Co', 'Add-on Pack', '$40K', 'May 1', 'Lead'],\n                        ] as [$company, $deal, $amount, $date, $stage])\n                            <div class=\"flex items-center justify-between px-3 py-2.5\">\n                                <div class=\"min-w-0\">\n                                    <div class=\"text-[13px] font-medium text-gray-900 dark:text-white truncate\">{{ $company }}</div>\n                                    <div class=\"text-[11px] text-gray-500 dark:text-gray-400 mt-px\">{{ $deal }}</div>\n                                </div>\n                                <div class=\"text-right shrink-0 ml-3\">\n                                    <div class=\"text-[13px] font-semibold text-gray-900 dark:text-white tabular-nums\">{{ $amount }}</div>\n                                    <div class=\"text-[11px] text-gray-500 dark:text-gray-400 mt-px\">{{ $stage }} · {{ $date }}</div>\n                                </div>\n                            </div>\n                        @endforeach\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n\n    {{-- Input bar --}}\n    <div class=\"mcp-el mcp-input border-t border-gray-100 dark:border-white/[0.06] px-4 sm:px-6 md:px-8 py-3\">\n        <div class=\"flex items-center gap-3 bg-gray-50/80 dark:bg-white/[0.03] rounded-lg border border-gray-200/80 dark:border-white/[0.06] px-3.5 py-2.5\">\n            <x-ri-sparkling-2-fill class=\"w-4 h-4 text-gray-400/50 dark:text-gray-500/50 shrink-0\"/>\n            <span class=\"text-sm text-gray-400 dark:text-gray-500 flex-1\">Message ChatGPT...</span>\n            <div class=\"text-[10px] text-gray-300 dark:text-gray-600 border border-gray-200 dark:border-white/[0.06] rounded px-1.5 py-0.5 font-mono\">↵</div>\n        </div>\n    </div>\n\n</div>\n\n<script>\n    function heroChat() {\n        return {\n            ease: [0.22, 1, 0.36, 1],\n\n            resetChat() {\n                this.$root.querySelectorAll('.mcp-el').forEach(function(el) {\n                    el.style.opacity = '0';\n                });\n            },\n\n            animateChat() {\n                this.resetChat();\n\n                if (typeof animate !== 'function') return;\n\n                var root = this.$root;\n                var ease = this.ease;\n                var users = root.querySelectorAll('.mcp-user');\n                var avatars = root.querySelectorAll('.mcp-avatar');\n                var labels = root.querySelectorAll('.mcp-label');\n                var tools = root.querySelectorAll('.mcp-tool');\n                var texts = root.querySelectorAll('.mcp-text');\n\n                animate(root.querySelector('.mcp-input'), { opacity: [0, 1] }, { duration: 0.3, ease: ease });\n\n                // Conversation 1\n                animate(users[0], { opacity: [0, 1], transform: ['translateX(12px)', 'translateX(0px)'] }, { delay: 0.2, duration: 0.4, ease: ease });\n                animate(avatars[0], { opacity: [0, 1], transform: ['scale(0.8)', 'scale(1)'] }, { delay: 0.65, duration: 0.3, ease: ease });\n                animate(labels[0], { opacity: [0, 1] }, { delay: 0.65, duration: 0.3, ease: ease });\n                animate(tools[0], { opacity: [0, 1], transform: ['translateX(-6px)', 'translateX(0px)'] }, { delay: 0.7, duration: 0.3, ease: ease });\n                animate(texts[0], { opacity: [0, 1], transform: ['translateY(6px)', 'translateY(0px)'] }, { delay: 0.95, duration: 0.35, ease: ease });\n                animate(root.querySelector('.mcp-card'), { opacity: [0, 1], transform: ['scale(0.97)', 'scale(1)'] }, { delay: 1.15, duration: 0.4, ease: ease });\n\n                // Conversation 2\n                animate(users[1], { opacity: [0, 1], transform: ['translateX(12px)', 'translateX(0px)'] }, { delay: 1.6, duration: 0.4, ease: ease });\n                animate(avatars[1], { opacity: [0, 1], transform: ['scale(0.8)', 'scale(1)'] }, { delay: 2.0, duration: 0.3, ease: ease });\n                animate(labels[1], { opacity: [0, 1] }, { delay: 2.0, duration: 0.3, ease: ease });\n                animate(tools[1], { opacity: [0, 1], transform: ['translateX(-6px)', 'translateX(0px)'] }, { delay: 2.05, duration: 0.3, ease: ease });\n                animate(texts[1], { opacity: [0, 1], transform: ['translateY(6px)', 'translateY(0px)'] }, { delay: 2.3, duration: 0.35, ease: ease });\n                animate(root.querySelector('.mcp-deals'), { opacity: [0, 1], transform: ['translateY(8px)', 'translateY(0px)'] }, { delay: 2.5, duration: 0.4, ease: ease });\n            }\n        };\n    }\n</script>\n"
  },
  {
    "path": "resources/views/home/partials/hero.blade.php",
    "content": "<section x-data=\"heroTabs()\" x-init=\"init()\" @resize.window=\"positionIndicator()\" class=\"relative pt-32 pb-20 md:pt-40 md:pb-32 bg-white dark:bg-gray-950 overflow-hidden\">\n\n    {{-- Background system — layered depth --}}\n    <div class=\"absolute inset-0 bg-[linear-gradient(to_right,rgba(0,0,0,0.015)_1px,transparent_1px),linear-gradient(to_bottom,rgba(0,0,0,0.015)_1px,transparent_1px)] dark:bg-[linear-gradient(to_right,rgba(255,255,255,0.025)_1px,transparent_1px),linear-gradient(to_bottom,rgba(255,255,255,0.025)_1px,transparent_1px)] bg-[size:3rem_3rem] [mask-image:radial-gradient(ellipse_70%_50%_at_50%_50%,black_30%,transparent_100%)]\"></div>\n\n    <div class=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 relative\">\n        <div class=\"flex flex-col items-center gap-8 md:gap-10\">\n\n            {{-- ── Badge (GitHub) ── --}}\n            <div class=\"flex justify-center\">\n                <a href=\"https://github.com/relaticle/relaticle\" target=\"_blank\" rel=\"noopener\"\n                   class=\"group inline-flex items-center gap-2 rounded-full border border-gray-200/80 dark:border-white/[0.08] bg-white/80 dark:bg-white/[0.04] backdrop-blur-sm px-4 py-1.5 text-xs font-medium text-gray-600 dark:text-gray-300 shadow-[0_1px_2px_rgba(0,0,0,0.04)] transition-all duration-200 hover:border-gray-300 dark:hover:border-white/[0.15]\">\n                    <x-ri-github-fill class=\"h-3.5 w-3.5\"/>\n                    <span class=\"text-gray-900 dark:text-white font-semibold\">{{ $formattedGithubStars ?? '1.2K' }}+ stars</span>\n                    <span class=\"w-px h-3 bg-gray-200 dark:bg-white/10\"></span>\n                    <span>Open Source</span>\n                    <x-ri-arrow-right-up-line class=\"h-3 w-3 text-gray-400 dark:text-gray-500\"/>\n                </a>\n            </div>\n\n            {{-- ── Heading ── --}}\n            <div class=\"text-center max-w-3xl\">\n                <h1 class=\"font-display leading-[1.08] tracking-[-0.035em] text-balance\">\n                    <span class=\"block text-2xl sm:text-[2.5rem] md:text-[3rem] lg:text-[3.25rem] font-normal text-gray-500 dark:text-gray-400\">The Open-Source CRM</span>\n                    <span class=\"block text-[2.25rem] sm:text-5xl md:text-[3.5rem] lg:text-[3.75rem] font-extrabold text-gray-950 dark:text-white mt-1.5 sm:mt-2\">Built for AI Agents</span>\n                </h1>\n\n                <p class=\"mt-6 sm:mt-7 text-[15px] sm:text-lg text-gray-500 dark:text-gray-400 max-w-xl mx-auto leading-relaxed tracking-[-0.01em]\">\n                    Connect any AI agent with 30 MCP tools.<br class=\"hidden sm:block\"/>\n                    Self-hosted. No per-seat pricing. Yours to own.\n                </p>\n            </div>\n\n            {{-- ── CTA Buttons ── --}}\n            <div class=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-3 w-full sm:w-auto max-w-sm sm:max-w-none mx-auto -mt-2 px-2 sm:px-0\">\n                <x-marketing.button href=\"{{ route('register') }}\" class=\"group\">\n                    Start for free\n                </x-marketing.button>\n\n                <x-marketing.button variant=\"secondary\" href=\"{{ route('contact') }}\">\n                    Get in touch\n                </x-marketing.button>\n            </div>\n\n            {{-- ── App Preview with tabs ── --}}\n            <div class=\"relative w-full max-w-5xl mt-8 md:mt-12\">\n\n                {{-- Multi-color glow behind mockup --}}\n                <div class=\"absolute -inset-6 md:-inset-12 -z-10 pointer-events-none\" aria-hidden=\"true\">\n                    <div class=\"absolute top-[0%] left-[15%] w-[70%] h-[60%] rounded-full bg-primary/[0.04] dark:bg-primary/[0.08] blur-[120px]\"></div>\n                </div>\n\n                {{-- ── Decorative framing lines ── --}}\n                <div class=\"hidden md:block absolute left-1/2 -translate-x-1/2 -top-10 w-px h-10 bg-gradient-to-b from-transparent via-gray-200/60 to-gray-200 dark:via-white/[0.04] dark:to-white/[0.08] pointer-events-none\" aria-hidden=\"true\"></div>\n                <div class=\"hidden md:block absolute top-0 left-1/2 -translate-x-1/2 w-[100vw] h-px bg-gray-200 dark:bg-white/[0.08] pointer-events-none\" aria-hidden=\"true\"></div>\n                <div class=\"hidden md:block absolute top-0 -left-12 w-px bg-gradient-to-b from-gray-200 via-gray-200/60 to-transparent dark:from-white/[0.08] dark:via-white/[0.05] dark:to-transparent pointer-events-none\" style=\"height:70%\" aria-hidden=\"true\"></div>\n                <div class=\"hidden md:block absolute top-0 -right-12 w-px bg-gradient-to-b from-gray-200 via-gray-200/60 to-transparent dark:from-white/[0.08] dark:via-white/[0.05] dark:to-transparent pointer-events-none\" style=\"height:70%\" aria-hidden=\"true\"></div>\n\n                {{-- Feature Tabs --}}\n                <div id=\"hero-tabs\" role=\"tablist\" class=\"relative z-10 flex items-stretch\">\n                    <div class=\"absolute bottom-0 left-0 right-0 h-px bg-gray-200 dark:bg-white/[0.08] pointer-events-none\" aria-hidden=\"true\"></div>\n                    <div class=\"absolute bottom-0 left-1/2 -translate-x-1/2 w-[100vw] h-px pointer-events-none bg-[repeating-linear-gradient(to_right,theme(colors.gray.200)_0,theme(colors.gray.200)_10px,transparent_10px,transparent_18px)] dark:bg-[repeating-linear-gradient(to_right,rgba(255,255,255,0.08)_0,rgba(255,255,255,0.08)_10px,transparent_10px,transparent_18px)]\" aria-hidden=\"true\"></div>\n                    <div x-ref=\"indicator\" class=\"absolute bottom-0 h-px bg-primary/80 rounded-full pointer-events-none transition-[left,width] duration-200\" aria-hidden=\"true\"></div>\n                    <button type=\"button\" id=\"tab-pipeline\" role=\"tab\" :aria-selected=\"(activeTab === 'pipeline').toString()\" :tabindex=\"activeTab === 'pipeline' ? 0 : -1\" aria-controls=\"panel-pipeline\" x-ref=\"tab-pipeline\" x-on:click=\"switchTab('pipeline')\" x-on:keydown=\"handleTabKeydown($event)\" :class=\"tabClasses('pipeline')\" class=\"relative flex-1 py-2.5 sm:py-3 text-xs sm:text-sm font-medium whitespace-nowrap transition-colors duration-200 cursor-pointer\">\n                        Pipeline\n                    </button>\n                    <div class=\"w-px self-stretch my-0 bg-gray-200 dark:bg-white/[0.08]\" aria-hidden=\"true\"></div>\n                    <button type=\"button\" id=\"tab-ai-agent\" role=\"tab\" :aria-selected=\"(activeTab === 'ai-agent').toString()\" :tabindex=\"activeTab === 'ai-agent' ? 0 : -1\" aria-controls=\"panel-ai-agent\" x-ref=\"tab-ai-agent\" x-on:click=\"switchTab('ai-agent')\" x-on:keydown=\"handleTabKeydown($event)\" :class=\"tabClasses('ai-agent')\" class=\"relative flex-1 py-2.5 sm:py-3 text-xs sm:text-sm font-medium whitespace-nowrap transition-colors duration-200 cursor-pointer\">\n                        AI Agent\n                    </button>\n                    <div class=\"w-px self-stretch my-0 bg-gray-200 dark:bg-white/[0.08]\" aria-hidden=\"true\"></div>\n                    <button type=\"button\" id=\"tab-companies\" role=\"tab\" :aria-selected=\"(activeTab === 'companies').toString()\" :tabindex=\"activeTab === 'companies' ? 0 : -1\" aria-controls=\"panel-companies\" x-ref=\"tab-companies\" x-on:click=\"switchTab('companies')\" x-on:keydown=\"handleTabKeydown($event)\" :class=\"tabClasses('companies')\" class=\"relative flex-1 py-2.5 sm:py-3 text-xs sm:text-sm font-medium whitespace-nowrap transition-colors duration-200 cursor-pointer\">\n                        Companies\n                    </button>\n                    <div class=\"w-px self-stretch my-0 bg-gray-200 dark:bg-white/[0.08]\" aria-hidden=\"true\"></div>\n                    <button type=\"button\" id=\"tab-custom-fields\" role=\"tab\" :aria-selected=\"(activeTab === 'custom-fields').toString()\" :tabindex=\"activeTab === 'custom-fields' ? 0 : -1\" aria-controls=\"panel-custom-fields\" x-ref=\"tab-custom-fields\" x-on:click=\"switchTab('custom-fields')\" x-on:keydown=\"handleTabKeydown($event)\" :class=\"tabClasses('custom-fields')\" class=\"relative flex-1 py-2.5 sm:py-3 text-xs sm:text-sm font-medium whitespace-nowrap transition-colors duration-200 cursor-pointer\">\n                        <span class=\"sm:hidden\">Fields</span><span class=\"hidden sm:inline\">Custom Fields</span>\n                    </button>\n                </div>\n\n                {{-- Mockup with layered glow border --}}\n                <div class=\"relative z-10 mt-5 [perspective:2000px]\">\n                    <div class=\"hidden md:block absolute -top-[110px] left-0 w-px h-[120px] bg-gradient-to-b from-transparent via-gray-200/60 to-gray-200 dark:via-white/[0.04] dark:to-white/[0.08] pointer-events-none\" aria-hidden=\"true\"></div>\n                    <div class=\"hidden md:block absolute -top-[110px] right-0 w-px h-[120px] bg-gradient-to-b from-transparent via-gray-200/60 to-gray-200 dark:via-white/[0.04] dark:to-white/[0.08] pointer-events-none\" aria-hidden=\"true\"></div>\n                    <div class=\"absolute -inset-3 rounded-3xl bg-gradient-to-b from-black/[0.03] via-black/[0.015] to-transparent dark:from-white/[0.04] dark:via-white/[0.02] dark:to-transparent blur-xl pointer-events-none\" aria-hidden=\"true\"></div>\n                    <div class=\"absolute -inset-[3px] rounded-[18px] bg-gradient-to-b from-gray-300/40 via-gray-200/20 to-gray-100/5 dark:from-white/[0.07] dark:via-white/[0.03] dark:to-transparent blur-[3px] pointer-events-none\" aria-hidden=\"true\"></div>\n                    <div class=\"absolute -inset-px rounded-2xl bg-gradient-to-b from-gray-300/50 via-gray-200/30 to-gray-200/10 dark:from-white/[0.12] dark:via-white/[0.06] dark:to-white/[0.02] pointer-events-none\" aria-hidden=\"true\"></div>\n\n                    <div class=\"relative rounded-2xl overflow-hidden bg-white dark:bg-neutral-950 transform-gpu hover:[transform:rotateX(1deg)] transition-transform duration-700 ease-out\">\n\n                        {{-- Browser chrome --}}\n                        <div class=\"bg-gray-50 dark:bg-neutral-900 border-b border-gray-200/60 dark:border-white/[0.06] px-4 py-2.5 flex items-center justify-between\">\n                            <div class=\"flex gap-1.5\">\n                                <div class=\"w-2.5 h-2.5 rounded-full bg-gray-300/80 dark:bg-white/[0.08]\"></div>\n                                <div class=\"w-2.5 h-2.5 rounded-full bg-gray-300/80 dark:bg-white/[0.08]\"></div>\n                                <div class=\"w-2.5 h-2.5 rounded-full bg-gray-300/80 dark:bg-white/[0.08]\"></div>\n                            </div>\n                            <div class=\"bg-white/60 dark:bg-white/[0.04] rounded-md px-3 py-1 text-[11px] text-gray-500 dark:text-gray-500\">\n                                app.relaticle.com\n                            </div>\n                        </div>\n\n                        {{-- Tab panels — grid stacking for Safari-smooth crossfade --}}\n                        <div class=\"relative grid overflow-hidden\">\n                            {{-- Pipeline tab (default — LCP element, must load eagerly) --}}\n                            <div id=\"panel-pipeline\" role=\"tabpanel\" aria-labelledby=\"tab-pipeline\" x-ref=\"panel-pipeline\" class=\"col-start-1 row-start-1\">\n                                <picture>\n                                    <source data-light-srcset=\"{{ asset('images/app-pipeline-preview-380w.webp') }} 380w, {{ asset('images/app-pipeline-preview-640w.webp') }} 640w, {{ asset('images/app-pipeline-preview-832w.webp') }} 832w, {{ asset('images/app-pipeline-preview.webp') }} 1440w\"\n                                            data-dark-srcset=\"{{ asset('images/app-pipeline-preview-dark-380w.webp') }} 380w, {{ asset('images/app-pipeline-preview-dark-640w.webp') }} 640w, {{ asset('images/app-pipeline-preview-dark-832w.webp') }} 832w, {{ asset('images/app-pipeline-preview-dark.webp') }} 1440w\"\n                                            srcset=\"{{ asset('images/app-pipeline-preview-380w.webp') }} 380w, {{ asset('images/app-pipeline-preview-640w.webp') }} 640w, {{ asset('images/app-pipeline-preview-832w.webp') }} 832w, {{ asset('images/app-pipeline-preview.webp') }} 1440w\"\n                                            sizes=\"(max-width: 640px) 380px, (max-width: 1024px) 640px, 832px\"\n                                            type=\"image/webp\">\n                                    <img data-light-src=\"{{ asset('images/app-pipeline-preview.png') }}\"\n                                         data-dark-src=\"{{ asset('images/app-pipeline-preview-dark.png') }}\"\n                                         src=\"{{ asset('images/app-pipeline-preview.png') }}\"\n                                         alt=\"Relaticle CRM — Pipeline\"\n                                         class=\"hero-preview-image w-full h-auto\"\n                                         width=\"1440\"\n                                         height=\"900\"\n                                         fetchpriority=\"high\">\n                                </picture>\n                            </div>\n\n                            {{-- AI Agent tab --}}\n                            <div id=\"panel-ai-agent\" role=\"tabpanel\" aria-labelledby=\"tab-ai-agent\" x-ref=\"panel-ai-agent\" class=\"col-start-1 row-start-1 invisible absolute inset-0 w-full\">\n                                @include('home.partials.hero-agent-preview')\n                            </div>\n\n                            <div id=\"panel-companies\" role=\"tabpanel\" aria-labelledby=\"tab-companies\" x-ref=\"panel-companies\" class=\"col-start-1 row-start-1 invisible absolute inset-0 w-full\">\n                                <picture>\n                                    <source data-light-srcset=\"{{ asset('images/app-companies-preview.webp') }}\" data-dark-srcset=\"{{ asset('images/app-companies-preview-dark.webp') }}\" srcset=\"{{ asset('images/app-companies-preview.webp') }}\" type=\"image/webp\">\n                                    <img data-light-src=\"{{ asset('images/app-companies-preview.png') }}\"\n                                         data-dark-src=\"{{ asset('images/app-companies-preview-dark.png') }}\"\n                                         src=\"{{ asset('images/app-companies-preview.png') }}\"\n                                         alt=\"Relaticle CRM — Companies\"\n                                         class=\"hero-preview-image w-full h-auto\"\n                                         width=\"1440\"\n                                         height=\"900\"\n                                         loading=\"lazy\">\n                                </picture>\n                            </div>\n\n                            <div id=\"panel-custom-fields\" role=\"tabpanel\" aria-labelledby=\"tab-custom-fields\" x-ref=\"panel-custom-fields\" class=\"col-start-1 row-start-1 invisible absolute inset-0 w-full\">\n                                <picture>\n                                    <source data-light-srcset=\"{{ asset('images/app-custom-fields-preview.webp') }}\" data-dark-srcset=\"{{ asset('images/app-custom-fields-preview-dark.webp') }}\" srcset=\"{{ asset('images/app-custom-fields-preview.webp') }}\" type=\"image/webp\">\n                                    <img data-light-src=\"{{ asset('images/app-custom-fields-preview.png') }}\"\n                                         data-dark-src=\"{{ asset('images/app-custom-fields-preview-dark.png') }}\"\n                                         src=\"{{ asset('images/app-custom-fields-preview.png') }}\"\n                                         alt=\"Relaticle CRM — Custom Fields\"\n                                         class=\"hero-preview-image w-full h-auto\"\n                                         width=\"1440\"\n                                         height=\"900\"\n                                         loading=\"lazy\">\n                                </picture>\n                            </div>\n                            {{-- Bottom fade overlay --}}\n                            <div class=\"absolute bottom-0 left-0 right-0 h-24 bg-gradient-to-t from-white/60 via-white/20 to-transparent dark:from-gray-950/60 dark:via-gray-950/20 dark:to-transparent pointer-events-none\"></div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n\n        </div>\n    </div>\n</section>\n\n<script>\n    function heroTabs() {\n        return {\n            activeTab: 'pipeline',\n            tabOrder: ['pipeline', 'ai-agent', 'companies', 'custom-fields'],\n            reducedMotion: window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n            ease: [0.16, 1, 0.3, 1],\n            duration: 0.35,\n            slideDistance: 40,\n\n            init() {\n                this.positionIndicator();\n                this.updateImages();\n                this.observeDarkMode();\n            },\n\n            positionIndicator() {\n                var tab = this.$refs['tab-' + this.activeTab];\n                var indicator = this.$refs.indicator;\n                if (!tab || !indicator) return;\n                indicator.style.left = tab.offsetLeft + 'px';\n                indicator.style.width = tab.offsetWidth + 'px';\n            },\n\n            showPanel(panel) {\n                panel.classList.remove('invisible', 'absolute', 'inset-0');\n                panel.style.position = 'relative';\n                panel.style.zIndex = '1';\n            },\n\n            hidePanel(panel) {\n                panel.classList.add('invisible', 'absolute', 'inset-0');\n                panel.style.position = '';\n                panel.style.opacity = '';\n                panel.style.transform = '';\n                panel.style.willChange = '';\n                panel.style.zIndex = '';\n            },\n\n            cancelPanelAnimations() {\n                var self = this;\n                this.tabOrder.forEach(function(name) {\n                    var panel = self.$refs['panel-' + name];\n                    if (!panel) return;\n                    if (panel.getAnimations) {\n                        panel.getAnimations().forEach(function(a) { a.cancel(); });\n                    }\n                    panel.style.opacity = '';\n                    panel.style.transform = '';\n                    panel.style.willChange = '';\n                    panel.style.zIndex = '';\n                });\n            },\n\n            switchTab(target) {\n                if (target === this.activeTab) return;\n\n                var previousTab = this.activeTab;\n                var direction = this.tabOrder.indexOf(target) > this.tabOrder.indexOf(previousTab) ? 1 : -1;\n                var self = this;\n\n                this.activeTab = target;\n                this.positionIndicator();\n\n                if (target === 'ai-agent') {\n                    this.$dispatch('hero-chat-reset');\n                }\n\n                this.cancelPanelAnimations();\n\n                this.tabOrder.forEach(function(name) {\n                    var panel = self.$refs['panel-' + name];\n                    if (!panel) return;\n                    if (name !== target && name !== previousTab) {\n                        self.hidePanel(panel);\n                    }\n                });\n\n                var currentPanel = this.$refs['panel-' + previousTab];\n                var nextPanel = this.$refs['panel-' + target];\n                if (!currentPanel || !nextPanel) return;\n\n                this.showPanel(nextPanel);\n\n                if (this.reducedMotion) {\n                    this.hidePanel(currentPanel);\n                    if (target === 'ai-agent') {\n                        this.$dispatch('hero-chat-animate');\n                    }\n                    return;\n                }\n\n                currentPanel.style.willChange = 'transform, opacity';\n                nextPanel.style.willChange = 'transform, opacity';\n\n                var outX = -direction * this.slideDistance;\n                var inX = direction * this.slideDistance;\n\n                animate(currentPanel, {\n                    opacity: [1, 0],\n                    transform: ['translateX(0px)', 'translateX(' + outX + 'px)']\n                }, { duration: this.duration, ease: this.ease });\n\n                animate(nextPanel, {\n                    opacity: [0, 1],\n                    transform: ['translateX(' + inX + 'px)', 'translateX(0px)']\n                }, { duration: this.duration, ease: this.ease }).then(function() {\n                    if (self.activeTab !== target) return;\n                    self.hidePanel(currentPanel);\n                    nextPanel.style.willChange = '';\n                    if (target === 'ai-agent') {\n                        self.$dispatch('hero-chat-animate');\n                    }\n                });\n            },\n\n            handleTabKeydown(event) {\n                var key = event.key;\n                var index = this.tabOrder.indexOf(this.activeTab);\n                var next = -1;\n\n                if (key === 'ArrowRight') {\n                    next = (index + 1) % this.tabOrder.length;\n                } else if (key === 'ArrowLeft') {\n                    next = (index - 1 + this.tabOrder.length) % this.tabOrder.length;\n                } else if (key === 'Home') {\n                    next = 0;\n                } else if (key === 'End') {\n                    next = this.tabOrder.length - 1;\n                }\n\n                if (next >= 0) {\n                    event.preventDefault();\n                    this.switchTab(this.tabOrder[next]);\n                    this.$refs['tab-' + this.tabOrder[next]].focus();\n                }\n            },\n\n            tabClasses(tab) {\n                return this.activeTab === tab\n                    ? 'text-gray-800 dark:text-white'\n                    : 'text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300';\n            },\n\n            updateImages() {\n                var isDark = document.documentElement.classList.contains('dark');\n                this.$root.querySelectorAll('.hero-preview-image').forEach(function(img) {\n                    img.src = isDark ? img.dataset.darkSrc : img.dataset.lightSrc;\n                });\n                this.$root.querySelectorAll('picture source[data-light-srcset]').forEach(function(source) {\n                    source.srcset = isDark ? source.dataset.darkSrcset : source.dataset.lightSrcset;\n                });\n            },\n\n            observeDarkMode() {\n                var self = this;\n                new MutationObserver(function(mutations) {\n                    mutations.forEach(function(mutation) {\n                        if (mutation.attributeName === 'class') {\n                            self.updateImages();\n                        }\n                    });\n                }).observe(document.documentElement, { attributes: true });\n            }\n        };\n    }\n</script>\n"
  },
  {
    "path": "resources/views/home/partials/start-building.blade.php",
    "content": "<section class=\"relative overflow-hidden bg-white dark:bg-gray-950\">\n    <div class=\"container max-w-7xl mx-auto py-24 md:py-32 px-4 sm:px-6 lg:px-8 relative\">\n\n        {{-- Corner & top dots patterns --}}\n        <div class=\"absolute top-0 left-32 right-32 md:left-48 md:right-48 lg:left-64 lg:right-64 h-16 md:h-24 overflow-hidden pointer-events-none\">\n            <svg width=\"100%\" height=\"100%\" class=\"absolute inset-0 opacity-30 md:opacity-40 dark:opacity-20 dark:md:opacity-40\">\n                <pattern id=\"dots-top\" x=\"0\" y=\"0\" width=\"20\" height=\"20\" patternUnits=\"userSpaceOnUse\"><circle cx=\"2\" cy=\"2\" r=\"1.2\" fill=\"#6B7280\"/></pattern>\n                <rect width=\"100%\" height=\"100%\" fill=\"url(#dots-top)\"/>\n            </svg>\n            <div class=\"absolute inset-0 bg-gradient-to-b from-transparent to-white dark:to-gray-950\"></div>\n        </div>\n        @foreach([['left', 'br'], ['right', 'bl']] as [$side, $dir])\n            <div class=\"absolute top-0 {{ $side }}-0 w-32 h-32 md:w-48 md:h-48 lg:w-64 lg:h-64 overflow-hidden pointer-events-none\">\n                <svg width=\"100%\" height=\"100%\" class=\"absolute inset-0 opacity-40 md:opacity-50 lg:opacity-60 dark:opacity-30 dark:md:opacity-40 dark:lg:opacity-50\">\n                    <pattern id=\"dots-{{ $side }}\" x=\"0\" y=\"0\" width=\"20\" height=\"20\" patternUnits=\"userSpaceOnUse\"><circle cx=\"2\" cy=\"2\" r=\"1.2\" fill=\"#6B7280\"/></pattern>\n                    <rect width=\"100%\" height=\"100%\" fill=\"url(#dots-{{ $side }})\"/>\n                </svg>\n                <div class=\"absolute inset-0 bg-gradient-to-{{ $dir }} from-transparent via-white/50 to-white dark:via-gray-950/50 dark:to-gray-950\"></div>\n            </div>\n        @endforeach\n\n        <div class=\"relative max-w-xl mx-auto text-center\">\n            <h2 class=\"font-display text-3xl sm:text-4xl md:text-[2.75rem] font-bold text-gray-950 dark:text-white tracking-[-0.02em] leading-[1.15] mb-5\">\n                Your CRM, Your Rules\n            </h2>\n            <p class=\"text-base md:text-lg text-gray-500 dark:text-gray-400 mb-8 max-w-sm mx-auto leading-relaxed\">\n                Self-hosted. Agent-native. Full control over your data and your AI.\n            </p>\n\n            <div class=\"flex flex-col sm:flex-row items-center justify-center gap-3 mb-6\">\n                <x-marketing.button href=\"{{ route('register') }}\">\n                    Start for free\n                </x-marketing.button>\n\n                <x-marketing.button variant=\"secondary\" href=\"{{ route('contact') }}\">\n                    Get in touch\n                </x-marketing.button>\n            </div>\n        </div>\n    </div>\n</section>\n"
  },
  {
    "path": "resources/views/layouts/guest.blade.php",
    "content": "@props(['title', 'description' => 'Relaticle - The open-source CRM built for AI agents. Self-hosted with MCP server, REST API, and 22 custom field types.', 'ogTitle' => null, 'ogDescription' => null, 'ogImage' => null])\n\n<!DOCTYPE html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    <meta name=\"description\" content=\"{{ $description }}\">\n    <link rel=\"canonical\" href=\"{{ url()->current() }}\" />\n\n    <!-- Open Graph Meta Tags -->\n    <meta property=\"og:title\" content=\"{{ $ogTitle ?? $title ?? config('app.name', 'Relaticle') }}\"/>\n    <meta property=\"og:description\" content=\"{{ $ogDescription ?? $description }}\"/>\n    <meta property=\"og:image\" content=\"{{ $ogImage ?? url('/images/open-graph.jpg') }}\"/>\n    <meta property=\"og:url\" content=\"{{ request()->getUri() }}\"/>\n    <meta property=\"og:type\" content=\"website\" />\n    <meta property=\"og:site_name\" content=\"{{ config('app.name', 'Relaticle') }}\" />\n    <meta property=\"og:locale\" content=\"{{ str_replace('_', '-', app()->getLocale()) }}\" />\n\n    <!-- Twitter Card Meta Tags -->\n    <meta name=\"twitter:card\" content=\"summary_large_image\" />\n    <meta name=\"twitter:title\" content=\"{{ $ogTitle ?? $title ?? config('app.name', 'Relaticle') }}\" />\n    <meta name=\"twitter:description\" content=\"{{ $ogDescription ?? $description }}\" />\n    <meta name=\"twitter:image\" content=\"{{ $ogImage ?? url('/images/open-graph.jpg') }}\" />\n\n    <title>{{ $title ?? config('app.name', 'Relaticle - The Open-Source CRM Built for AI Agents') }}</title>\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png\" sizes=\"96x96\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\" />\n    <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n    <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\" />\n    <meta name=\"apple-mobile-web-app-title\" content=\"Relaticle\" />\n    <meta name=\"theme-color\" content=\"#ffffff\" media=\"(prefers-color-scheme: light)\" />\n    <meta name=\"theme-color\" content=\"#000000\" media=\"(prefers-color-scheme: dark)\" />\n    <link rel=\"manifest\" href=\"/site.webmanifest\" />\n\n    {{-- Preload critical fonts (discovered late if left to CSS) --}}\n    <link rel=\"preload\" as=\"font\" href=\"/fonts/inter/InterVariable.woff2\" type=\"font/woff2\" crossorigin />\n    <link rel=\"preload\" as=\"font\" href=\"/fonts/satoshi/Satoshi-Variable.woff2\" type=\"font/woff2\" crossorigin />\n\n    @stack('preload')\n\n    <!-- Dark mode FOUC prevention (must run synchronously before paint) -->\n    <script>\n        document.documentElement.classList.toggle(\n            'dark',\n            localStorage.getItem('theme') === 'dark' || ((!localStorage.getItem('theme') || localStorage.getItem('theme') === 'system') && window.matchMedia('(prefers-color-scheme: dark)').matches)\n        );\n    </script>\n\n    <!-- Scripts -->\n    @vite(['resources/css/app.css', 'resources/js/app.js'])\n\n    @stack('turnstile')\n\n    @stack('header')\n\n    @if(app()->isProduction() && !empty(config('services.fathom.site_id')))\n        <!-- Fathom - beautiful, simple website analytics -->\n        <script src=\"https://cdn.usefathom.com/script.js\" data-site=\"{{ config('services.fathom.site_id') }}\" defer></script>\n        <!-- / Fathom -->\n    @endif\n</head>\n<body class=\"font-sans antialiased text-gray-800\">\n\n<a href=\"#main-content\" class=\"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-2 focus:bg-white focus:text-gray-900 focus:rounded-md focus:shadow-lg focus:ring-2 focus:ring-primary dark:focus:bg-gray-900 dark:focus:text-white\">\n    Skip to main content\n</a>\n\n<x-layout.header/>\n\n<main id=\"main-content\" tabindex=\"-1\">\n    {{ $slot }}\n</main>\n\n<x-layout.footer/>\n\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/livewire/app/access-tokens/create-access-token.blade.php",
    "content": "<div>\n    <form wire:submit=\"createToken\">\n        {{ $this->form }}\n    </form>\n\n    <x-filament-actions::modals />\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/access-tokens/manage-access-tokens.blade.php",
    "content": "<x-filament::section aside :contained=\"false\">\n    <x-slot name=\"heading\">\n        {{ __('access-tokens.sections.manage.title') }}\n    </x-slot>\n    <x-slot name=\"description\">\n        {{ __('access-tokens.sections.manage.description') }}\n    </x-slot>\n\n    {{ $this->table }}\n\n    <x-filament-actions::modals />\n</x-filament::section>\n"
  },
  {
    "path": "resources/views/livewire/app/profile/delete-account.blade.php",
    "content": "<div>\n    {{ $this->form }}\n\n    <x-filament-actions::modals />\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/profile/logout-other-browser-sessions.blade.php",
    "content": "<div>\n    {{ $this->form }}\n\n    <x-filament-actions::modals />\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/profile/update-password.blade.php",
    "content": "<div>\n    <form wire:submit=\"updatePassword\">\n        {{ $this->form }}\n    </form>\n\n    <x-filament-actions::modals/>\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/profile/update-profile-information.blade.php",
    "content": "<div>\n    <form wire:submit=\"updateProfile\">\n        {{ $this->form }}\n    </form>\n\n    <x-filament-actions::modals/>\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/teams/add-team-member.blade.php",
    "content": "<div>\n    <form wire:submit=\"addTeamMember\">\n        {{ $this->form }}\n    </form>\n\n    <x-filament-actions::modals/>\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/teams/delete-team.blade.php",
    "content": "<div>\n    <form>\n        {{ $this->form }}\n    </form>\n\n    <x-filament-actions::modals/>\n</div>\n"
  },
  {
    "path": "resources/views/livewire/app/teams/pending-team-invitations.blade.php",
    "content": "<x-filament::section aside>\n    <x-slot name=\"heading\">\n        {{ __('teams.sections.pending_team_invitations.title') }}\n    </x-slot>\n    <x-slot name=\"description\">\n        {{ __('teams.sections.pending_team_invitations.description') }}\n    </x-slot>\n\n    {{ $this->table }}\n\n    <x-filament-actions::modals/>\n\n</x-filament::section>\n"
  },
  {
    "path": "resources/views/livewire/app/teams/team-members.blade.php",
    "content": "<x-filament::section aside>\n    <x-slot name=\"heading\">\n        {{ __('teams.sections.team_members.title') }}\n    </x-slot>\n    <x-slot name=\"description\">\n        {{ __('teams.sections.team_members.description') }}\n    </x-slot>\n\n    {{ $this->table }}\n\n    <x-filament-actions::modals/>\n\n</x-filament::section>\n"
  },
  {
    "path": "resources/views/livewire/app/teams/update-team-name.blade.php",
    "content": "<div>\n    <form wire:submit=\"updateTeamName\">\n        {{ $this->form }}\n    </form>\n\n    <x-filament-actions::modals/>\n</div>\n"
  },
  {
    "path": "resources/views/mail/new-contact-submission.blade.php",
    "content": "<x-mail::message>\n# New Contact Submission\n\n**Name:** {{ $data['name'] }}\n\n**Email:** {{ $data['email'] }}\n\n@if($data['company'])\n**Company:** {{ $data['company'] }}\n@endif\n\n**Message:**\n\n{{ $data['message'] }}\n\n<x-mail::button :url=\"'mailto:' . $data['email']\">\nReply to {{ $data['name'] }}\n</x-mail::button>\n\n</x-mail::message>\n"
  },
  {
    "path": "resources/views/policy.blade.php",
    "content": "<x-guest-layout \n    :title=\"'Privacy Policy - ' . config('app.name')\"\n    description=\"Relaticle Privacy Policy - How we collect, use, and protect your personal information.\"\n    :ogTitle=\"'Privacy Policy - ' . config('app.name')\"\n    ogDescription=\"Read the Privacy Policy for Relaticle. Learn about how we handle your personal information and protect your privacy.\">\n    <x-legal-document\n        title=\"Privacy Policy\"\n        subtitle=\"How we collect, use, and protect your personal information.\"\n        :content=\"$policy\"\n    />\n</x-guest-layout>\n"
  },
  {
    "path": "resources/views/pricing.blade.php",
    "content": "<x-guest-layout\n    title=\"Pricing - Relaticle\"\n    description=\"Relaticle pricing. Free forever — self-hosted or cloud. No per-seat pricing. No usage limits.\"\n    ogTitle=\"Pricing - Relaticle\"\n>\n    <section class=\"relative pt-32 pb-24 md:pt-40 md:pb-32 bg-white dark:bg-gray-950 overflow-hidden\">\n        <div class=\"absolute inset-0 bg-[linear-gradient(to_right,rgba(0,0,0,0.015)_1px,transparent_1px),linear-gradient(to_bottom,rgba(0,0,0,0.015)_1px,transparent_1px)] dark:bg-[linear-gradient(to_right,rgba(255,255,255,0.025)_1px,transparent_1px),linear-gradient(to_bottom,rgba(255,255,255,0.025)_1px,transparent_1px)] bg-[size:3rem_3rem] [mask-image:radial-gradient(ellipse_70%_50%_at_50%_50%,black_30%,transparent_100%)]\"></div>\n\n        <div class=\"relative max-w-5xl mx-auto px-6 lg:px-8\">\n\n            {{-- Badge --}}\n            <div class=\"flex justify-center mb-6\">\n                <div class=\"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full border border-gray-200/80 dark:border-white/[0.08] bg-white/80 dark:bg-white/[0.04] backdrop-blur-sm shadow-[0_1px_2px_rgba(0,0,0,0.03)]\">\n                    <x-ri-heart-pulse-line class=\"h-3.5 w-3.5 text-primary dark:text-primary-400\"/>\n                    <span class=\"uppercase tracking-wider text-[10px] font-medium text-gray-500 dark:text-gray-400\">Simple pricing</span>\n                </div>\n            </div>\n\n            {{-- Header --}}\n            <div class=\"text-center max-w-2xl mx-auto mb-16 md:mb-20\">\n                <h1 class=\"font-display text-4xl sm:text-5xl font-bold text-gray-950 dark:text-white tracking-[-0.03em] leading-[1.1]\">\n                    No per-seat pricing. Ever.\n                </h1>\n                <p class=\"mt-5 text-base md:text-lg text-gray-500 dark:text-gray-400 leading-relaxed\">\n                    Unlimited users. Unlimited data. Self-host for free forever, or let us run it for you.\n                </p>\n            </div>\n\n            {{-- Pricing cards --}}\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 max-w-4xl mx-auto\">\n\n                {{-- Cloud (primary) --}}\n                <div class=\"relative rounded-2xl border border-primary/20 dark:border-primary/15 bg-white dark:bg-white/[0.02] flex flex-col overflow-hidden shadow-[0_4px_32px_-8px_rgba(124,58,237,0.08)] dark:shadow-[0_4px_32px_-8px_rgba(124,58,237,0.15)]\">\n                    <div class=\"h-1 bg-gradient-to-r from-primary via-purple-500 to-pink-500\"></div>\n                    <div class=\"flex-1 flex flex-col p-8\">\n\n                    {{-- Recommended badge --}}\n                    <div class=\"absolute top-6 right-5\">\n                        <span class=\"inline-flex items-center gap-1 px-2.5 py-1 rounded-full bg-primary/[0.08] dark:bg-primary/[0.15] text-[10px] font-semibold uppercase tracking-wider text-primary-700 dark:text-primary-300\">\n                            <x-ri-star-fill class=\"w-3 h-3\"/>\n                            Recommended\n                        </span>\n                    </div>\n\n                    <div class=\"relative mb-6\">\n                        <div class=\"flex items-center gap-2.5\">\n                            <div class=\"flex items-center justify-center w-9 h-9 rounded-xl bg-primary/[0.08] dark:bg-primary/[0.15]\">\n                                <x-ri-cloud-line class=\"w-4.5 h-4.5 text-primary dark:text-primary-400\"/>\n                            </div>\n                            <div>\n                                <h2 class=\"font-display text-xl font-semibold text-gray-900 dark:text-white\">Cloud</h2>\n                            </div>\n                        </div>\n                        <p class=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">Managed hosting with automatic updates and backups</p>\n                    </div>\n\n                    <div class=\"relative mb-8\">\n                        <div class=\"flex items-baseline gap-1\">\n                            <span class=\"text-5xl font-bold text-gray-950 dark:text-white tracking-tight\">$0</span>\n                            <span class=\"text-sm text-gray-400 dark:text-gray-500\">/mo</span>\n                        </div>\n                        <p class=\"text-xs text-gray-400 dark:text-gray-500 mt-1.5\">Generous free tier. Always.</p>\n                    </div>\n\n                    <div class=\"relative mb-8 flex-1\">\n                        <div class=\"text-[10px] font-medium uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-4\">Everything included</div>\n                        <ul class=\"space-y-3\">\n                            @foreach([\n                                'Unlimited users and data',\n                                'MCP server with 30 tools',\n                                'REST API with full CRUD',\n                                '22 custom field types',\n                                'Multi-team workspaces',\n                            ] as $feature)\n                                <li class=\"flex items-start gap-2.5 text-sm text-gray-600 dark:text-gray-400\">\n                                    <x-ri-check-line class=\"w-4 h-4 text-primary dark:text-primary-400 shrink-0 mt-0.5\"/>\n                                    {{ $feature }}\n                                </li>\n                            @endforeach\n                        </ul>\n\n                        <div class=\"mt-5 pt-5 border-t border-gray-100 dark:border-white/[0.04]\">\n                            <div class=\"text-[10px] font-medium uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-4\">Cloud benefits</div>\n                            <ul class=\"space-y-3\">\n                                @foreach([\n                                    'Zero-downtime updates',\n                                    'Automatic daily backups',\n                                    'No server maintenance',\n                                    'Email support',\n                                ] as $feature)\n                                    <li class=\"flex items-start gap-2.5 text-sm text-gray-600 dark:text-gray-400\">\n                                        <x-ri-check-line class=\"w-4 h-4 text-primary dark:text-primary-400 shrink-0 mt-0.5\"/>\n                                        {{ $feature }}\n                                    </li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    </div>\n\n                    <x-marketing.button href=\"{{ route('register') }}\">\n                        Start for free\n                    </x-marketing.button>\n                    </div>\n                </div>\n\n                {{-- Self-Hosted --}}\n                <div class=\"relative rounded-2xl border border-gray-200/80 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] flex flex-col overflow-hidden shadow-[0_2px_16px_-6px_rgba(0,0,0,0.05)] dark:shadow-none\">\n                    <div class=\"h-1 bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-white/10 dark:via-white/20 dark:to-white/10\"></div>\n                    <div class=\"flex-1 flex flex-col p-8\">\n                    <div class=\"mb-6\">\n                        <div class=\"flex items-center gap-2.5\">\n                            <div class=\"flex items-center justify-center w-9 h-9 rounded-xl bg-gray-100 dark:bg-white/[0.06]\">\n                                <x-ri-server-line class=\"w-4.5 h-4.5 text-gray-600 dark:text-gray-400\"/>\n                            </div>\n                            <div>\n                                <h2 class=\"font-display text-xl font-semibold text-gray-900 dark:text-white\">Self-Hosted</h2>\n                            </div>\n                        </div>\n                        <p class=\"mt-2 text-sm text-gray-500 dark:text-gray-400\">Your server, your data, your rules</p>\n                    </div>\n\n                    <div class=\"mb-8\">\n                        <div class=\"flex items-baseline gap-1\">\n                            <span class=\"text-5xl font-bold text-gray-950 dark:text-white tracking-tight\">Free</span>\n                            <span class=\"text-sm text-gray-400 dark:text-gray-500\">forever</span>\n                        </div>\n                        <p class=\"text-xs text-gray-400 dark:text-gray-500 mt-1.5\">AGPL-3.0 open source</p>\n                    </div>\n\n                    <div class=\"mb-8 flex-1\">\n                        <div class=\"text-[10px] font-medium uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-4\">Everything included</div>\n                        <ul class=\"space-y-3\">\n                            @foreach([\n                                'Unlimited users and data',\n                                'MCP server with 30 tools',\n                                'REST API with full CRUD',\n                                '22 custom field types',\n                                'Multi-team workspaces',\n                            ] as $feature)\n                                <li class=\"flex items-start gap-2.5 text-sm text-gray-600 dark:text-gray-400\">\n                                    <x-ri-check-line class=\"w-4 h-4 text-gray-400 dark:text-gray-500 shrink-0 mt-0.5\"/>\n                                    {{ $feature }}\n                                </li>\n                            @endforeach\n                        </ul>\n\n                        <div class=\"mt-5 pt-5 border-t border-gray-100 dark:border-white/[0.04]\">\n                            <div class=\"text-[10px] font-medium uppercase tracking-wider text-gray-400 dark:text-gray-500 mb-4\">Self-hosted benefits</div>\n                            <ul class=\"space-y-3\">\n                                @foreach([\n                                    'Full source code access',\n                                    'Docker Compose deployment',\n                                    'Data never leaves your server',\n                                    'Community support (Discord)',\n                                ] as $feature)\n                                    <li class=\"flex items-start gap-2.5 text-sm text-gray-600 dark:text-gray-400\">\n                                        <x-ri-check-line class=\"w-4 h-4 text-gray-400 dark:text-gray-500 shrink-0 mt-0.5\"/>\n                                        {{ $feature }}\n                                    </li>\n                                @endforeach\n                            </ul>\n                        </div>\n                    </div>\n\n                    <x-marketing.button variant=\"secondary\" href=\"https://github.com/relaticle/relaticle\" icon=\"ri-github-fill\" external>\n                        View on GitHub\n                    </x-marketing.button>\n                    </div>\n                </div>\n            </div>\n\n            {{-- Trust signals --}}\n            <div class=\"mt-16 max-w-4xl mx-auto\">\n                <div class=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n                    @foreach([\n                        ['ri-shield-check-line', '1,100+', 'Automated Tests'],\n                        ['ri-robot-2-line', '30', 'MCP Tools'],\n                        ['ri-stack-line', '22', 'Field Types'],\n                        ['ri-lock-line', '5-Layer', 'Authorization'],\n                    ] as [$icon, $value, $label])\n                        <div class=\"rounded-xl border border-gray-200/80 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] px-5 py-4 text-center\">\n                            <x-dynamic-component :component=\"$icon\" class=\"w-5 h-5 text-primary dark:text-primary-400 mx-auto mb-2\"/>\n                            <div class=\"text-lg font-semibold text-gray-900 dark:text-white tracking-tight\">{{ $value }}</div>\n                            <div class=\"text-[11px] text-gray-400 dark:text-gray-500 mt-0.5 uppercase tracking-wider font-medium\">{{ $label }}</div>\n                        </div>\n                    @endforeach\n                </div>\n            </div>\n\n            {{-- Help CTA --}}\n            <div class=\"mt-8 max-w-4xl mx-auto\">\n                <div class=\"relative rounded-2xl border border-gray-200/80 dark:border-white/[0.06] bg-gray-50/50 dark:bg-white/[0.015] p-8 flex flex-col sm:flex-row items-center gap-6 overflow-hidden\">\n                    <div class=\"absolute -bottom-10 -left-10 w-40 h-40 bg-primary/[0.04] dark:bg-primary/[0.08] rounded-full blur-3xl pointer-events-none\" aria-hidden=\"true\"></div>\n                    <div class=\"relative flex-1 text-left\">\n                        <h3 class=\"font-display text-lg font-semibold text-gray-900 dark:text-white\">Need help choosing?</h3>\n                        <p class=\"mt-1 text-sm text-gray-500 dark:text-gray-400 leading-relaxed\">\n                            Not sure which option fits? Have questions about deployment or migration? We're happy to help.\n                        </p>\n                    </div>\n                    <x-marketing.button variant=\"secondary\" href=\"{{ route('contact') }}\" class=\"relative shrink-0\">\n                        Get in touch\n                    </x-marketing.button>\n                </div>\n            </div>\n\n        </div>\n    </section>\n</x-guest-layout>\n"
  },
  {
    "path": "resources/views/profile/delete-user-form.blade.php",
    "content": "<x-action-section>\n    <x-slot name=\"title\">\n        {{ __('Delete Account') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Permanently delete your account.') }}\n    </x-slot>\n\n    <x-slot name=\"content\">\n        <div class=\"max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n            {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }}\n        </div>\n\n        <div class=\"mt-5\">\n            <x-danger-button wire:click=\"confirmUserDeletion\" wire:loading.attr=\"disabled\">\n                {{ __('Delete Account') }}\n            </x-danger-button>\n        </div>\n\n        <!-- Delete User Confirmation Modal -->\n        <x-dialog-modal wire:model.live=\"confirmingUserDeletion\">\n            <x-slot name=\"title\">\n                {{ __('Delete Account') }}\n            </x-slot>\n\n            <x-slot name=\"content\">\n                {{ __('Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }}\n\n                <div class=\"mt-4\" x-data=\"{}\" x-on:confirming-delete-user.window=\"setTimeout(() => $refs.password.focus(), 250)\">\n                    <x-input type=\"password\" class=\"mt-1 block w-3/4\"\n                                autocomplete=\"current-password\"\n                                placeholder=\"{{ __('Password') }}\"\n                                x-ref=\"password\"\n                                wire:model=\"password\"\n                                wire:keydown.enter=\"deleteUser\" />\n\n                    <x-input-error for=\"password\" class=\"mt-2\" />\n                </div>\n            </x-slot>\n\n            <x-slot name=\"footer\">\n                <x-secondary-button wire:click=\"$toggle('confirmingUserDeletion')\" wire:loading.attr=\"disabled\">\n                    {{ __('Cancel') }}\n                </x-secondary-button>\n\n                <x-danger-button class=\"ms-3\" wire:click=\"deleteUser\" wire:loading.attr=\"disabled\">\n                    {{ __('Delete Account') }}\n                </x-danger-button>\n            </x-slot>\n        </x-dialog-modal>\n    </x-slot>\n</x-action-section>\n"
  },
  {
    "path": "resources/views/profile/logout-other-browser-sessions-form.blade.php",
    "content": "<x-action-section>\n    <x-slot name=\"title\">\n        {{ __('Browser Sessions') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Manage and log out your active sessions on other browsers and devices.') }}\n    </x-slot>\n\n    <x-slot name=\"content\">\n        <div class=\"max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n            {{ __('If necessary, you may log out of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password.') }}\n        </div>\n\n        @if (count($this->sessions) > 0)\n            <div class=\"mt-5 space-y-6\">\n                <!-- Other Browser Sessions -->\n                @foreach ($this->sessions as $session)\n                    <div class=\"flex items-center\">\n                        <div>\n                            @if ($session->agent->isDesktop())\n                                <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-8 h-8 text-gray-500\">\n                                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25\" />\n                                </svg>\n                            @else\n                                <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-8 h-8 text-gray-500\">\n                                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10.5 1.5H8.25A2.25 2.25 0 006 3.75v16.5a2.25 2.25 0 002.25 2.25h7.5A2.25 2.25 0 0018 20.25V3.75a2.25 2.25 0 00-2.25-2.25H13.5m-3 0V3h3V1.5m-3 0h3m-3 18.75h3\" />\n                                </svg>\n                            @endif\n                        </div>\n\n                        <div class=\"ms-3\">\n                            <div class=\"text-sm text-gray-600 dark:text-gray-400\">\n                                {{ $session->agent->platform() ? $session->agent->platform() : __('Unknown') }} - {{ $session->agent->browser() ? $session->agent->browser() : __('Unknown') }}\n                            </div>\n\n                            <div>\n                                <div class=\"text-xs text-gray-500\">\n                                    {{ $session->ip_address }},\n\n                                    @if ($session->is_current_device)\n                                        <span class=\"text-green-500 font-semibold\">{{ __('This device') }}</span>\n                                    @else\n                                        {{ __('Last active') }} {{ $session->last_active }}\n                                    @endif\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                @endforeach\n            </div>\n        @endif\n\n        <div class=\"flex items-center mt-5\">\n            <x-button wire:click=\"confirmLogout\" wire:loading.attr=\"disabled\">\n                {{ __('Log Out Other Browser Sessions') }}\n            </x-button>\n\n            <x-action-message class=\"ms-3\" on=\"loggedOut\">\n                {{ __('Done.') }}\n            </x-action-message>\n        </div>\n\n        <!-- Log Out Other Devices Confirmation Modal -->\n        <x-dialog-modal wire:model.live=\"confirmingLogout\">\n            <x-slot name=\"title\">\n                {{ __('Log Out Other Browser Sessions') }}\n            </x-slot>\n\n            <x-slot name=\"content\">\n                {{ __('Please enter your password to confirm you would like to log out of your other browser sessions across all of your devices.') }}\n\n                <div class=\"mt-4\" x-data=\"{}\" x-on:confirming-logout-other-browser-sessions.window=\"setTimeout(() => $refs.password.focus(), 250)\">\n                    <x-input type=\"password\" class=\"mt-1 block w-3/4\"\n                                autocomplete=\"current-password\"\n                                placeholder=\"{{ __('Password') }}\"\n                                x-ref=\"password\"\n                                wire:model=\"password\"\n                                wire:keydown.enter=\"logoutOtherBrowserSessions\" />\n\n                    <x-input-error for=\"password\" class=\"mt-2\" />\n                </div>\n            </x-slot>\n\n            <x-slot name=\"footer\">\n                <x-secondary-button wire:click=\"$toggle('confirmingLogout')\" wire:loading.attr=\"disabled\">\n                    {{ __('Cancel') }}\n                </x-secondary-button>\n\n                <x-button class=\"ms-3\"\n                            wire:click=\"logoutOtherBrowserSessions\"\n                            wire:loading.attr=\"disabled\">\n                    {{ __('Log Out Other Browser Sessions') }}\n                </x-button>\n            </x-slot>\n        </x-dialog-modal>\n    </x-slot>\n</x-action-section>\n"
  },
  {
    "path": "resources/views/profile/two-factor-authentication-form.blade.php",
    "content": "<x-action-section>\n    <x-slot name=\"title\">\n        {{ __('Two Factor Authentication') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Add additional security to your account using two factor authentication.') }}\n    </x-slot>\n\n    <x-slot name=\"content\">\n        <h3 class=\"text-lg font-medium text-gray-900 dark:text-gray-100\">\n            @if ($this->enabled)\n                @if ($showingConfirmation)\n                    {{ __('Finish enabling two factor authentication.') }}\n                @else\n                    {{ __('You have enabled two factor authentication.') }}\n                @endif\n            @else\n                {{ __('You have not enabled two factor authentication.') }}\n            @endif\n        </h3>\n\n        <div class=\"mt-3 max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n            <p>\n                {{ __('When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone\\'s Google Authenticator application.') }}\n            </p>\n        </div>\n\n        @if ($this->enabled)\n            @if ($showingQrCode)\n                <div class=\"mt-4 max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n                    <p class=\"font-semibold\">\n                        @if ($showingConfirmation)\n                            {{ __('To finish enabling two factor authentication, scan the following QR code using your phone\\'s authenticator application or enter the setup key and provide the generated OTP code.') }}\n                        @else\n                            {{ __('Two factor authentication is now enabled. Scan the following QR code using your phone\\'s authenticator application or enter the setup key.') }}\n                        @endif\n                    </p>\n                </div>\n\n                <div class=\"mt-4 p-2 inline-block bg-white\">\n                    {!! $this->user->twoFactorQrCodeSvg() !!}\n                </div>\n\n                <div class=\"mt-4 max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n                    <p class=\"font-semibold\">\n                        {{ __('Setup Key') }}: {{ decrypt($this->user->two_factor_secret) }}\n                    </p>\n                </div>\n\n                @if ($showingConfirmation)\n                    <div class=\"mt-4\">\n                        <x-label for=\"code\" value=\"{{ __('Code') }}\" />\n\n                        <x-input id=\"code\" type=\"text\" name=\"code\" class=\"block mt-1 w-1/2\" inputmode=\"numeric\" autofocus autocomplete=\"one-time-code\"\n                            wire:model=\"code\"\n                            wire:keydown.enter=\"confirmTwoFactorAuthentication\" />\n\n                        <x-input-error for=\"code\" class=\"mt-2\" />\n                    </div>\n                @endif\n            @endif\n\n            @if ($showingRecoveryCodes)\n                <div class=\"mt-4 max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n                    <p class=\"font-semibold\">\n                        {{ __('Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.') }}\n                    </p>\n                </div>\n\n                <div class=\"grid gap-1 max-w-xl mt-4 px-4 py-4 font-mono text-sm bg-gray-100 dark:bg-gray-900 dark:text-gray-100 rounded-lg\">\n                    @foreach (json_decode(decrypt($this->user->two_factor_recovery_codes), true) as $code)\n                        <div>{{ $code }}</div>\n                    @endforeach\n                </div>\n            @endif\n        @endif\n\n        <div class=\"mt-5\">\n            @if (! $this->enabled)\n                <x-confirms-password wire:then=\"enableTwoFactorAuthentication\">\n                    <x-button type=\"button\" wire:loading.attr=\"disabled\">\n                        {{ __('Enable') }}\n                    </x-button>\n                </x-confirms-password>\n            @else\n                @if ($showingRecoveryCodes)\n                    <x-confirms-password wire:then=\"regenerateRecoveryCodes\">\n                        <x-secondary-button class=\"me-3\">\n                            {{ __('Regenerate Recovery Codes') }}\n                        </x-secondary-button>\n                    </x-confirms-password>\n                @elseif ($showingConfirmation)\n                    <x-confirms-password wire:then=\"confirmTwoFactorAuthentication\">\n                        <x-button type=\"button\" class=\"me-3\" wire:loading.attr=\"disabled\">\n                            {{ __('Confirm') }}\n                        </x-button>\n                    </x-confirms-password>\n                @else\n                    <x-confirms-password wire:then=\"showRecoveryCodes\">\n                        <x-secondary-button class=\"me-3\">\n                            {{ __('Show Recovery Codes') }}\n                        </x-secondary-button>\n                    </x-confirms-password>\n                @endif\n\n                @if ($showingConfirmation)\n                    <x-confirms-password wire:then=\"disableTwoFactorAuthentication\">\n                        <x-secondary-button wire:loading.attr=\"disabled\">\n                            {{ __('Cancel') }}\n                        </x-secondary-button>\n                    </x-confirms-password>\n                @else\n                    <x-confirms-password wire:then=\"disableTwoFactorAuthentication\">\n                        <x-danger-button wire:loading.attr=\"disabled\">\n                            {{ __('Disable') }}\n                        </x-danger-button>\n                    </x-confirms-password>\n                @endif\n\n            @endif\n        </div>\n    </x-slot>\n</x-action-section>\n"
  },
  {
    "path": "resources/views/profile/update-password-form.blade.php",
    "content": "<x-form-section submit=\"updatePassword\">\n    <x-slot name=\"title\">\n        {{ __('Update Password') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Ensure your account is using a long, random password to stay secure.') }}\n    </x-slot>\n\n    <x-slot name=\"form\">\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"current_password\" value=\"{{ __('Current Password') }}\" />\n            <x-input id=\"current_password\" type=\"password\" class=\"mt-1 block w-full\" wire:model=\"state.current_password\" autocomplete=\"current-password\" />\n            <x-input-error for=\"current_password\" class=\"mt-2\" />\n        </div>\n\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"password\" value=\"{{ __('New Password') }}\" />\n            <x-input id=\"password\" type=\"password\" class=\"mt-1 block w-full\" wire:model=\"state.password\" autocomplete=\"new-password\" />\n            <x-input-error for=\"password\" class=\"mt-2\" />\n        </div>\n\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"password_confirmation\" value=\"{{ __('Confirm Password') }}\" />\n            <x-input id=\"password_confirmation\" type=\"password\" class=\"mt-1 block w-full\" wire:model=\"state.password_confirmation\" autocomplete=\"new-password\" />\n            <x-input-error for=\"password_confirmation\" class=\"mt-2\" />\n        </div>\n    </x-slot>\n\n    <x-slot name=\"actions\">\n        <x-action-message class=\"me-3\" on=\"saved\">\n            {{ __('Saved.') }}\n        </x-action-message>\n\n        <x-button>\n            {{ __('Save') }}\n        </x-button>\n    </x-slot>\n</x-form-section>\n"
  },
  {
    "path": "resources/views/profile/update-profile-information-form.blade.php",
    "content": "<x-form-section submit=\"updateProfileInformation\">\n    <x-slot name=\"title\">\n        {{ __('Profile Information') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Update your account\\'s profile information and email address.') }}\n    </x-slot>\n\n    <x-slot name=\"form\">\n        <!-- Profile Photo -->\n        @if (Laravel\\Jetstream\\Jetstream::managesProfilePhotos())\n            <div x-data=\"{photoName: null, photoPreview: null}\" class=\"col-span-6 sm:col-span-4\">\n                <!-- Profile Photo File Input -->\n                <input type=\"file\" id=\"photo\" class=\"hidden\"\n                            wire:model.live=\"photo\"\n                            x-ref=\"photo\"\n                            x-on:change=\"\n                                    photoName = $refs.photo.files[0].name;\n                                    const reader = new FileReader();\n                                    reader.onload = (e) => {\n                                        photoPreview = e.target.result;\n                                    };\n                                    reader.readAsDataURL($refs.photo.files[0]);\n                            \" />\n\n                <x-label for=\"photo\" value=\"{{ __('Photo') }}\" />\n\n                <!-- Current Profile Photo -->\n                <div class=\"mt-2\" x-show=\"! photoPreview\">\n                    <img src=\"{{ $this->user->avatar }}\" alt=\"{{ $this->user->name }}\" class=\"rounded-full h-20 w-20 object-cover\">\n                </div>\n\n                <!-- New Profile Photo Preview -->\n                <div class=\"mt-2\" x-show=\"photoPreview\" style=\"display: none;\">\n                    <span class=\"block rounded-full w-20 h-20 bg-cover bg-no-repeat bg-center\"\n                          x-bind:style=\"'background-image: url(\\'' + photoPreview + '\\');'\">\n                    </span>\n                </div>\n\n                <x-secondary-button class=\"mt-2 me-2\" type=\"button\" x-on:click.prevent=\"$refs.photo.click()\">\n                    {{ __('Select A New Photo') }}\n                </x-secondary-button>\n\n                @if ($this->user->profile_photo_path)\n                    <x-secondary-button type=\"button\" class=\"mt-2\" wire:click=\"deleteProfilePhoto\">\n                        {{ __('Remove Photo') }}\n                    </x-secondary-button>\n                @endif\n\n                <x-input-error for=\"photo\" class=\"mt-2\" />\n            </div>\n        @endif\n\n        <!-- Name -->\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"name\" value=\"{{ __('Name') }}\" />\n            <x-input id=\"name\" type=\"text\" class=\"mt-1 block w-full\" wire:model=\"state.name\" required autocomplete=\"name\" />\n            <x-input-error for=\"name\" class=\"mt-2\" />\n        </div>\n\n        <!-- Email -->\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"email\" value=\"{{ __('Email') }}\" />\n            <x-input id=\"email\" type=\"email\" class=\"mt-1 block w-full\" wire:model=\"state.email\" required autocomplete=\"username\" />\n            <x-input-error for=\"email\" class=\"mt-2\" />\n\n            @if (Laravel\\Fortify\\Features::enabled(Laravel\\Fortify\\Features::emailVerification()) && ! $this->user->hasVerifiedEmail())\n                <p class=\"text-sm mt-2 dark:text-white\">\n                    {{ __('Your email address is unverified.') }}\n\n                    <button type=\"button\" class=\"underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800\" wire:click.prevent=\"sendEmailVerification\">\n                        {{ __('Click here to re-send the verification email.') }}\n                    </button>\n                </p>\n\n                @if ($this->verificationLinkSent)\n                    <p class=\"mt-2 font-medium text-sm text-green-600 dark:text-green-400\">\n                        {{ __('A new verification link has been sent to your email address.') }}\n                    </p>\n                @endif\n            @endif\n        </div>\n    </x-slot>\n\n    <x-slot name=\"actions\">\n        <x-action-message class=\"me-3\" on=\"saved\">\n            {{ __('Saved.') }}\n        </x-action-message>\n\n        <x-button wire:loading.attr=\"disabled\" wire:target=\"photo\">\n            {{ __('Save') }}\n        </x-button>\n    </x-slot>\n</x-form-section>\n"
  },
  {
    "path": "resources/views/teams/create-team-form.blade.php",
    "content": "<x-form-section submit=\"createTeam\">\n    <x-slot name=\"title\">\n        {{ __('Team Details') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Create a new team to collaborate with others on projects.') }}\n    </x-slot>\n\n    <x-slot name=\"form\">\n        <div class=\"col-span-6\">\n            <x-label value=\"{{ __('Team Owner') }}\" />\n\n            <div class=\"flex items-center mt-2\">\n                <img class=\"w-12 h-12 rounded-full object-cover\" src=\"{{ $this->user->profile_photo_url }}\" alt=\"{{ $this->user->name }}\">\n\n                <div class=\"ms-4 leading-tight\">\n                    <div class=\"text-gray-900 dark:text-white\">{{ $this->user->name }}</div>\n                    <div class=\"text-gray-700 dark:text-gray-300 text-sm\">{{ $this->user->email }}</div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"name\" value=\"{{ __('Team Name') }}\" />\n            <x-input id=\"name\" type=\"text\" class=\"mt-1 block w-full\" wire:model=\"state.name\" autofocus />\n            <x-input-error for=\"name\" class=\"mt-2\" />\n        </div>\n    </x-slot>\n\n    <x-slot name=\"actions\">\n        <x-button>\n            {{ __('Create') }}\n        </x-button>\n    </x-slot>\n</x-form-section>\n"
  },
  {
    "path": "resources/views/teams/delete-team-form.blade.php",
    "content": "<x-action-section>\n    <x-slot name=\"title\">\n        {{ __('Delete Team') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('Permanently delete this team.') }}\n    </x-slot>\n\n    <x-slot name=\"content\">\n        <div class=\"max-w-xl prose dark:prose-invert text-sm text-gray-600 dark:text-gray-400\">\n            {{ __('Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.') }}\n        </div>\n\n        <!-- Delete Team Confirmation Modal -->\n        <x-filament::modal id=\"delete-team-modal\"\n                           icon=\"heroicon-o-exclamation-triangle\"\n                           icon-color=\"danger\"\n                           width=\"md\"\n                           alignment=\"center\"\n                           footerActionsAlignment=\"center\"\n        >\n            <x-slot name=\"trigger\">\n                <x-filament::button color=\"danger\"\n                                    class=\"mt-5\"\n                                    wire:loading.attr=\"disabled\">\n                    {{ __('Delete Team') }}\n                </x-filament::button>\n            </x-slot>\n\n            <x-slot name=\"heading\">\n                {{ __('Delete Team') }}\n            </x-slot>\n\n            <x-slot name=\"description\">\n                {{ __('Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.') }}\n            </x-slot>\n\n            <x-slot name=\"footerActions\">\n                <x-filament::button color=\"gray\"\n                                    block\n                                    x-on:click=\"$dispatch('close-modal', { id: 'delete-team-modal' })\"\n                                    wire:loading.attr=\"disabled\">\n                    {{ __('Cancel') }}\n                </x-filament::button>\n\n                <x-filament::button color=\"danger\"\n                                    wire:click=\"deleteTeam\"\n                                    wire:loading.attr=\"disabled\">\n                    {{ __('Delete Team') }}\n                </x-filament::button>\n            </x-slot>\n        </x-filament::modal>\n    </x-slot>\n</x-action-section>\n"
  },
  {
    "path": "resources/views/teams/invitation-expired.blade.php",
    "content": "<x-guest-layout title=\"{{ __('Invitation Expired') }}\">\n    <div class=\"flex min-h-[60vh] items-center justify-center\">\n        <div class=\"mx-auto max-w-md px-6 py-12 text-center\">\n            <h1 class=\"text-2xl font-bold text-gray-900 dark:text-white\">\n                {{ __('Invitation Expired') }}\n            </h1>\n\n            <p class=\"mt-4 text-gray-600 dark:text-gray-400\">\n                {{ __('This team invitation has expired. Please ask the team owner to send you a new invitation.') }}\n            </p>\n\n            <div class=\"mt-8\">\n                <a href=\"{{ route('dashboard') }}\"\n                   class=\"inline-flex items-center rounded-md bg-primary-600 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-primary-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-600\">\n                    {{ __('Go to Dashboard') }}\n                </a>\n            </div>\n        </div>\n    </div>\n</x-guest-layout>\n"
  },
  {
    "path": "resources/views/teams/team-member-manager.blade.php",
    "content": "<div>\n    @if (Gate::check('addTeamMember', $team))\n        <x-section-border />\n\n        <!-- Add Team Member -->\n        <div class=\"mt-10 sm:mt-0\">\n            <x-form-section submit=\"addTeamMember\">\n                <x-slot name=\"title\">\n                    {{ __('Add Team Member') }}\n                </x-slot>\n\n                <x-slot name=\"description\">\n                    {{ __('Add a new team member to your team, allowing them to collaborate with you.') }}\n                </x-slot>\n\n                <x-slot name=\"form\">\n                    <div class=\"col-span-6\">\n                        <div class=\"max-w-xl text-sm text-gray-600 dark:text-gray-400\">\n                            {{ __('Please provide the email address of the person you would like to add to this team.') }}\n                        </div>\n                    </div>\n\n                    <!-- Member Email -->\n                    <div class=\"col-span-6 sm:col-span-4\">\n                        <x-label for=\"email\" value=\"{{ __('Email') }}\" />\n                        <x-input id=\"email\" type=\"email\" class=\"mt-1 block w-full\" wire:model=\"addTeamMemberForm.email\" />\n                        <x-input-error for=\"email\" class=\"mt-2\" />\n                    </div>\n\n                    <!-- Role -->\n                    @if (count($this->roles) > 0)\n                        <div class=\"col-span-6 lg:col-span-4\">\n                            <x-label for=\"role\" value=\"{{ __('Role') }}\" />\n                            <x-input-error for=\"role\" class=\"mt-2\" />\n\n                            <div class=\"relative z-0 mt-1 border border-gray-200 dark:border-gray-700 rounded-lg cursor-pointer\">\n                                @foreach ($this->roles as $index => $role)\n                                    <button type=\"button\" class=\"relative px-4 py-3 inline-flex w-full rounded-lg focus:z-10 focus:outline-none focus:border-indigo-500 dark:focus:border-indigo-600 focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-600 {{ $index > 0 ? 'border-t border-gray-200 dark:border-gray-700 focus:border-none rounded-t-none' : '' }} {{ ! $loop->last ? 'rounded-b-none' : '' }}\"\n                                                    wire:click=\"$set('addTeamMemberForm.role', '{{ $role->key }}')\">\n                                        <div class=\"{{ isset($addTeamMemberForm['role']) && $addTeamMemberForm['role'] !== $role->key ? 'opacity-50' : '' }}\">\n                                            <!-- Role Name -->\n                                            <div class=\"flex items-center\">\n                                                <div class=\"text-sm text-gray-600 dark:text-gray-400 {{ $addTeamMemberForm['role'] == $role->key ? 'font-semibold' : '' }}\">\n                                                    {{ $role->name }}\n                                                </div>\n\n                                                @if ($addTeamMemberForm['role'] == $role->key)\n                                                    <svg class=\"ms-2 h-5 w-5 text-green-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                                                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n                                                    </svg>\n                                                @endif\n                                            </div>\n\n                                            <!-- Role Description -->\n                                            <div class=\"mt-2 text-xs text-gray-600 dark:text-gray-400 text-start\">\n                                                {{ $role->description }}\n                                            </div>\n                                        </div>\n                                    </button>\n                                @endforeach\n                            </div>\n                        </div>\n                    @endif\n                </x-slot>\n\n                <x-slot name=\"actions\">\n                    <x-action-message class=\"me-3\" on=\"saved\">\n                        {{ __('Added.') }}\n                    </x-action-message>\n\n                    <x-button>\n                        {{ __('Add') }}\n                    </x-button>\n                </x-slot>\n            </x-form-section>\n        </div>\n    @endif\n\n    @if ($team->teamInvitations->isNotEmpty() && Gate::check('addTeamMember', $team))\n        <x-section-border />\n\n        <!-- Team Member Invitations -->\n        <div class=\"mt-10 sm:mt-0\">\n            <x-action-section>\n                <x-slot name=\"title\">\n                    {{ __('Pending Team Invitations') }}\n                </x-slot>\n\n                <x-slot name=\"description\">\n                    {{ __('These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.') }}\n                </x-slot>\n\n                <x-slot name=\"content\">\n                    <div class=\"space-y-6\">\n                        @foreach ($team->teamInvitations as $invitation)\n                            <div class=\"flex items-center justify-between\">\n                                <div class=\"text-gray-600 dark:text-gray-400\">{{ $invitation->email }}</div>\n\n                                <div class=\"flex items-center\">\n                                    @if (Gate::check('removeTeamMember', $team))\n                                        <!-- Cancel Team Invitation -->\n                                        <button class=\"cursor-pointer ms-6 text-sm text-red-500 focus:outline-none\"\n                                                            wire:click=\"cancelTeamInvitation({{ $invitation->id }})\">\n                                            {{ __('Cancel') }}\n                                        </button>\n                                    @endif\n                                </div>\n                            </div>\n                        @endforeach\n                    </div>\n                </x-slot>\n            </x-action-section>\n        </div>\n    @endif\n\n    @if ($team->users->isNotEmpty())\n        <x-section-border />\n\n        <!-- Manage Team Members -->\n        <div class=\"mt-10 sm:mt-0\">\n            <x-action-section>\n                <x-slot name=\"title\">\n                    {{ __('Team Members') }}\n                </x-slot>\n\n                <x-slot name=\"description\">\n                    {{ __('All of the people that are part of this team.') }}\n                </x-slot>\n\n                <!-- Team Member List -->\n                <x-slot name=\"content\">\n                    <div class=\"space-y-6\">\n                        @foreach ($team->users->sortBy('name') as $user)\n                            <div class=\"flex items-center justify-between\">\n                                <div class=\"flex items-center\">\n                                    <img class=\"w-8 h-8 rounded-full object-cover\" src=\"{{ $user->profile_photo_url }}\" alt=\"{{ $user->name }}\">\n                                    <div class=\"ms-4 dark:text-white\">{{ $user->name }}</div>\n                                </div>\n\n                                <div class=\"flex items-center\">\n                                    <!-- Manage Team Member Role -->\n                                    @if (Gate::check('updateTeamMember', $team) && Laravel\\Jetstream\\Jetstream::hasRoles())\n                                        <button class=\"ms-2 text-sm text-gray-400 underline\" wire:click=\"manageRole('{{ $user->id }}')\">\n                                            {{ Laravel\\Jetstream\\Jetstream::findRole($user->membership->role)->name }}\n                                        </button>\n                                    @elseif (Laravel\\Jetstream\\Jetstream::hasRoles())\n                                        <div class=\"ms-2 text-sm text-gray-400\">\n                                            {{ Laravel\\Jetstream\\Jetstream::findRole($user->membership->role)->name }}\n                                        </div>\n                                    @endif\n\n                                    <!-- Leave Team -->\n                                    @if ($this->user->id === $user->id)\n                                        <button class=\"cursor-pointer ms-6 text-sm text-red-500\" wire:click=\"$toggle('confirmingLeavingTeam')\">\n                                            {{ __('Leave') }}\n                                        </button>\n\n                                    <!-- Remove Team Member -->\n                                    @elseif (Gate::check('removeTeamMember', $team))\n                                        <button class=\"cursor-pointer ms-6 text-sm text-red-500\" wire:click=\"confirmTeamMemberRemoval('{{ $user->id }}')\">\n                                            {{ __('Remove') }}\n                                        </button>\n                                    @endif\n                                </div>\n                            </div>\n                        @endforeach\n                    </div>\n                </x-slot>\n            </x-action-section>\n        </div>\n    @endif\n\n    <!-- Role Management Modal -->\n    <x-dialog-modal wire:model.live=\"currentlyManagingRole\">\n        <x-slot name=\"title\">\n            {{ __('Manage Role') }}\n        </x-slot>\n\n        <x-slot name=\"content\">\n            <div class=\"relative z-0 mt-1 border border-gray-200 dark:border-gray-700 rounded-lg cursor-pointer\">\n                @foreach ($this->roles as $index => $role)\n                    <button type=\"button\" class=\"relative px-4 py-3 inline-flex w-full rounded-lg focus:z-10 focus:outline-none focus:border-indigo-500 dark:focus:border-indigo-600 focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-600 {{ $index > 0 ? 'border-t border-gray-200 dark:border-gray-700 focus:border-none rounded-t-none' : '' }} {{ ! $loop->last ? 'rounded-b-none' : '' }}\"\n                                    wire:click=\"$set('currentRole', '{{ $role->key }}')\">\n                        <div class=\"{{ $currentRole !== $role->key ? 'opacity-50' : '' }}\">\n                            <!-- Role Name -->\n                            <div class=\"flex items-center\">\n                                <div class=\"text-sm text-gray-600 dark:text-gray-400 {{ $currentRole == $role->key ? 'font-semibold' : '' }}\">\n                                    {{ $role->name }}\n                                </div>\n\n                                @if ($currentRole == $role->key)\n                                    <svg class=\"ms-2 h-5 w-5 text-green-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n                                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n                                    </svg>\n                                @endif\n                            </div>\n\n                            <!-- Role Description -->\n                            <div class=\"mt-2 text-xs text-gray-600 dark:text-gray-400\">\n                                {{ $role->description }}\n                            </div>\n                        </div>\n                    </button>\n                @endforeach\n            </div>\n        </x-slot>\n\n        <x-slot name=\"footer\">\n            <x-secondary-button wire:click=\"stopManagingRole\" wire:loading.attr=\"disabled\">\n                {{ __('Cancel') }}\n            </x-secondary-button>\n\n            <x-button class=\"ms-3\" wire:click=\"updateRole\" wire:loading.attr=\"disabled\">\n                {{ __('Save') }}\n            </x-button>\n        </x-slot>\n    </x-dialog-modal>\n\n    <!-- Leave Team Confirmation Modal -->\n    <x-confirmation-modal wire:model.live=\"confirmingLeavingTeam\">\n        <x-slot name=\"title\">\n            {{ __('Leave Team') }}\n        </x-slot>\n\n        <x-slot name=\"content\">\n            {{ __('Are you sure you would like to leave this team?') }}\n        </x-slot>\n\n        <x-slot name=\"footer\">\n            <x-secondary-button wire:click=\"$toggle('confirmingLeavingTeam')\" wire:loading.attr=\"disabled\">\n                {{ __('Cancel') }}\n            </x-secondary-button>\n\n            <x-danger-button class=\"ms-3\" wire:click=\"leaveTeam\" wire:loading.attr=\"disabled\">\n                {{ __('Leave') }}\n            </x-danger-button>\n        </x-slot>\n    </x-confirmation-modal>\n\n    <!-- Remove Team Member Confirmation Modal -->\n    <x-confirmation-modal wire:model.live=\"confirmingTeamMemberRemoval\">\n        <x-slot name=\"title\">\n            {{ __('Remove Team Member') }}\n        </x-slot>\n\n        <x-slot name=\"content\">\n            {{ __('Are you sure you would like to remove this person from the team?') }}\n        </x-slot>\n\n        <x-slot name=\"footer\">\n            <x-secondary-button wire:click=\"$toggle('confirmingTeamMemberRemoval')\" wire:loading.attr=\"disabled\">\n                {{ __('Cancel') }}\n            </x-secondary-button>\n\n            <x-danger-button class=\"ms-3\" wire:click=\"removeTeamMember\" wire:loading.attr=\"disabled\">\n                {{ __('Remove') }}\n            </x-danger-button>\n        </x-slot>\n    </x-confirmation-modal>\n</div>\n"
  },
  {
    "path": "resources/views/teams/update-team-name-form.blade.php",
    "content": "<x-form-section submit=\"updateTeamName\">\n    <x-slot name=\"title\">\n        {{ __('Team Name') }}\n    </x-slot>\n\n    <x-slot name=\"description\">\n        {{ __('The team\\'s name and owner information.') }}\n    </x-slot>\n\n    <x-slot name=\"form\">\n        <!-- Team Owner Information -->\n        <div class=\"col-span-6\">\n            <x-label value=\"{{ __('Team Owner') }}\"/>\n\n            <div class=\"flex items-center mt-2\">\n                <img class=\"w-12 h-12 rounded-full object-cover\" src=\"{{ $team->owner->profile_photo_url }}\"\n                     alt=\"{{ $team->owner->name }}\">\n\n                <div class=\"ms-4 leading-tight\">\n                    <div class=\"text-gray-900 dark:text-white\">{{ $team->owner->name }}</div>\n                    <div class=\"text-gray-700 dark:text-gray-300 text-sm\">{{ $team->owner->email }}</div>\n                </div>\n            </div>\n        </div>\n\n        <!-- Team Name -->\n        <div class=\"col-span-6 sm:col-span-4\">\n            <x-label for=\"name\" value=\"{{ __('Team Name') }}\"/>\n\n            <x-filament::input.wrapper>\n                <x-filament::input id=\"name\" type=\"text\" wire:model=\"state.name\" :disabled=\"! Gate::check('update', $team)\" />\n            </x-filament::input.wrapper>\n\n            <x-input-error for=\"name\" class=\"mt-2\"/>\n        </div>\n    </x-slot>\n\n    @if (Gate::check('update', $team))\n        <x-slot name=\"actions\">\n            <x-action-message class=\"me-3\" on=\"saved\">\n                {{ __('Saved.') }}\n            </x-action-message>\n\n            <x-button>\n                {{ __('Save') }}\n            </x-button>\n        </x-slot>\n    @endif\n</x-form-section>\n"
  },
  {
    "path": "resources/views/terms.blade.php",
    "content": "<x-guest-layout \n    :title=\"'Terms of Service - ' . config('app.name')\"\n    description=\"Relaticle Terms of Service - Use of the Relaticle website and all related services is subject to the following terms of service.\"\n    :ogTitle=\"'Terms of Service - ' . config('app.name')\"\n    ogDescription=\"Read the Terms of Service for Relaticle. Learn about the rules and guidelines for using our open-source CRM platform.\">\n    <x-legal-document\n        title=\"Terms of Service\"\n        subtitle=\"Use of the Relaticle website and all related services is subject to the following terms of service.\"\n        :content=\"$terms\"\n    />\n</x-guest-layout>\n"
  },
  {
    "path": "resources/views/vendor/filament-panels/components/layout/index.blade.php",
    "content": "@php\n    use Filament\\Support\\Enums\\Width;\n\n    $livewire ??= null;\n\n    $hasTopbar = filament()->hasTopbar();\n    $isSidebarCollapsibleOnDesktop = filament()->isSidebarCollapsibleOnDesktop();\n    $isSidebarFullyCollapsibleOnDesktop = filament()->isSidebarFullyCollapsibleOnDesktop();\n    $hasTopNavigation = filament()->hasTopNavigation();\n    $hasNavigation = filament()->hasNavigation();\n    $renderHookScopes = $livewire?->getRenderHookScopes();\n    $maxContentWidth ??= (filament()->getMaxContentWidth() ?? Width::SevenExtraLarge);\n\n    if (is_string($maxContentWidth)) {\n        $maxContentWidth = Width::tryFrom($maxContentWidth) ?? $maxContentWidth;\n    }\n\n    $isAppPanel = filament()->getId() === 'app';\n@endphp\n\n<x-filament-panels::layout.base\n    :livewire=\"$livewire\"\n    @class([\n        'fi-body-has-navigation' => $hasNavigation,\n        'fi-body-has-sidebar-collapsible-on-desktop' => $isSidebarCollapsibleOnDesktop,\n        'fi-body-has-sidebar-fully-collapsible-on-desktop' => $isSidebarFullyCollapsibleOnDesktop,\n        'fi-body-has-topbar' => $hasTopbar,\n        'fi-body-has-top-navigation' => $hasTopNavigation,\n    ])\n>\n    @if ($isAppPanel)\n        {{-- Custom layout structure with full height sidebar and topbar for App panel --}}\n        <div class=\"fi-app-layout\">\n            {{-- Sidebar overlay for mobile --}}\n            @if ($hasNavigation)\n                <div\n                    x-cloak\n                    x-data=\"{}\"\n                    x-on:click=\"$store.sidebar.close()\"\n                    x-show=\"$store.sidebar.isOpen\"\n                    x-transition.opacity.300ms\n                    class=\"fi-sidebar-close-overlay\"\n                    style=\"position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 29;\"\n                    @media (min-width: 1024px) {\n                        style=\"display: none;\"\n                    }\n                ></div>\n\n                {{-- Sidebar - Keep all original Alpine.js functionality --}}\n                @livewire(filament()->getSidebarLivewireComponent())\n            @endif\n\n            {{-- Main content wrapper --}}\n            <div class=\"fi-app-main-wrapper\">\n                {{-- Topbar --}}\n                @if ($hasTopbar)\n                    {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::TOPBAR_BEFORE, scopes: $renderHookScopes) }}\n\n                    @livewire(filament()->getTopbarLivewireComponent())\n\n                    {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::TOPBAR_AFTER, scopes: $renderHookScopes) }}\n                @endif\n\n                {{-- Page content area --}}\n                <div class=\"fi-layout\" style=\"flex: 1; overflow-y: auto;\">\n                    {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::LAYOUT_START, scopes: $renderHookScopes) }}\n\n                    <div\n                        @if ($isSidebarCollapsibleOnDesktop)\n                            x-data=\"{}\"\n                            x-bind:class=\"{\n                                'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,\n                            }\"\n                            x-bind:style=\"'display: flex; opacity:1;'\"\n                            {{-- Mimics `x-cloak`, as using `x-cloak` causes visual issues with chart widgets --}}\n                        @elseif ($isSidebarFullyCollapsibleOnDesktop)\n                            x-data=\"{}\"\n                            x-bind:class=\"{\n                                'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,\n                            }\"\n                            x-bind:style=\"'display: flex; opacity:1;'\"\n                            {{-- Mimics `x-cloak`, as using `x-cloak` causes visual issues with chart widgets --}}\n                        @elseif (! ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop || $hasTopNavigation || (! $hasNavigation)))\n                            x-data=\"{}\"\n                            x-bind:style=\"'display: flex; opacity:1;'\" {{-- Mimics `x-cloak`, as using `x-cloak` causes visual issues with chart widgets --}}\n                        @endif\n                        class=\"fi-main-ctn\"\n                        style=\"min-height: 100%;\"\n                    >\n                        {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_BEFORE, scopes: $renderHookScopes) }}\n\n                        <main\n                            @class([\n                                'fi-main',\n                                ($maxContentWidth instanceof Width) ? \"fi-width-{$maxContentWidth->value}\" : $maxContentWidth,\n                            ])\n                        >\n                            {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_START, scopes: $renderHookScopes) }}\n\n                            {{ $slot }}\n\n                            {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_END, scopes: $renderHookScopes) }}\n                        </main>\n\n                        {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_AFTER, scopes: $renderHookScopes) }}\n\n                        {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::FOOTER, scopes: $renderHookScopes) }}\n                    </div>\n\n                    {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::LAYOUT_END, scopes: $renderHookScopes) }}\n                </div>\n            </div>\n        </div>\n    @else\n        {{-- Default Filament layout for other panels (e.g., sysadmin) --}}\n        @if ($hasTopbar)\n            {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::TOPBAR_BEFORE, scopes: $renderHookScopes) }}\n\n            @livewire(filament()->getTopbarLivewireComponent())\n\n            {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::TOPBAR_AFTER, scopes: $renderHookScopes) }}\n        @elseif ($hasNavigation)\n            <div\n                @if ($isSidebarFullyCollapsibleOnDesktop)\n                    x-data=\"{}\"\n                    x-bind:class=\"{ 'lg:fi-hidden': $store.sidebar.isOpen }\"\n                @endif\n                @class([\n                    'fi-layout-sidebar-toggle-btn-ctn',\n                    'lg:fi-hidden' => ! $isSidebarFullyCollapsibleOnDesktop,\n                ])\n            >\n                <x-filament::icon-button\n                    color=\"gray\"\n                    :icon=\"\\Filament\\Support\\Icons\\Heroicon::OutlinedBars3\"\n                    :icon-alias=\"\\Filament\\View\\PanelsIconAlias::SIDEBAR_EXPAND_BUTTON\"\n                    icon-size=\"lg\"\n                    :label=\"__('filament-panels::layout.actions.sidebar.expand.label')\"\n                    x-cloak\n                    x-data=\"{}\"\n                    x-on:click=\"$store.sidebar.open()\"\n                    class=\"fi-layout-sidebar-toggle-btn\"\n                />\n            </div>\n        @endif\n\n        <div class=\"fi-layout\">\n            {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::LAYOUT_START, scopes: $renderHookScopes) }}\n\n            @if ($hasNavigation)\n                <div\n                    x-cloak\n                    x-data=\"{}\"\n                    x-on:click=\"$store.sidebar.close()\"\n                    x-show=\"$store.sidebar.isOpen\"\n                    x-transition.opacity.300ms\n                    class=\"fi-sidebar-close-overlay\"\n                ></div>\n\n                @livewire(filament()->getSidebarLivewireComponent())\n            @endif\n\n            <div\n                @if ($isSidebarCollapsibleOnDesktop)\n                    x-data=\"{}\"\n                    x-bind:class=\"{\n                        'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,\n                    }\"\n                    x-bind:style=\"'display: flex; opacity:1;'\"\n                    {{-- Mimics `x-cloak`, as using `x-cloak` causes visual issues with chart widgets --}}\n                @elseif ($isSidebarFullyCollapsibleOnDesktop)\n                    x-data=\"{}\"\n                    x-bind:class=\"{\n                        'fi-main-ctn-sidebar-open': $store.sidebar.isOpen,\n                    }\"\n                    x-bind:style=\"'display: flex; opacity:1;'\"\n                    {{-- Mimics `x-cloak`, as using `x-cloak` causes visual issues with chart widgets --}}\n                @elseif (! ($isSidebarCollapsibleOnDesktop || $isSidebarFullyCollapsibleOnDesktop || $hasTopNavigation || (! $hasNavigation)))\n                    x-data=\"{}\"\n                    x-bind:style=\"'display: flex; opacity:1;'\" {{-- Mimics `x-cloak`, as using `x-cloak` causes visual issues with chart widgets --}}\n                @endif\n                class=\"fi-main-ctn\"\n            >\n                {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_BEFORE, scopes: $renderHookScopes) }}\n\n                <main\n                    @class([\n                        'fi-main',\n                        ($maxContentWidth instanceof Width) ? \"fi-width-{$maxContentWidth->value}\" : $maxContentWidth,\n                    ])\n                >\n                    {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_START, scopes: $renderHookScopes) }}\n\n                    {{ $slot }}\n\n                    {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_END, scopes: $renderHookScopes) }}\n                </main>\n\n                {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::CONTENT_AFTER, scopes: $renderHookScopes) }}\n\n                {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::FOOTER, scopes: $renderHookScopes) }}\n            </div>\n\n            {{ \\Filament\\Support\\Facades\\FilamentView::renderHook(\\Filament\\View\\PanelsRenderHook::LAYOUT_END, scopes: $renderHookScopes) }}\n        </div>\n    @endif\n</x-filament-panels::layout.base>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/button.blade.php",
    "content": "@props([\n    'url',\n    'color' => 'primary',\n    'align' => 'center',\n])\n<table class=\"action\" align=\"{{ $align }}\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td align=\"{{ $align }}\">\n<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td align=\"{{ $align }}\">\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td>\n<a href=\"{{ $url }}\" class=\"button button-{{ $color }}\" target=\"_blank\" rel=\"noopener\">{{ $slot }}</a>\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/footer.blade.php",
    "content": "<tr>\n<td>\n<table class=\"footer\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td class=\"content-cell\" align=\"center\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</td>\n</tr>\n</table>\n</td>\n</tr>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/header.blade.php",
    "content": "@props(['url'])\n<tr>\n    <td class=\"header\">\n        <a href=\"{{ $url }}\" style=\"display: inline-block;\">\n            <img src=\"{{ asset('brand/logo-white.png') }}\" class=\"logo\" alt=\"Relaticle Logo\" width=\"146\" height=\"39\" style=\"height: 39px; width: auto; max-height: 39px;\">\n        </a>\n    </td>\n</tr>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/layout.blade.php",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<title>{{ config('app.name') }}</title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta name=\"color-scheme\" content=\"light\">\n<meta name=\"supported-color-schemes\" content=\"light\">\n<style>\n@media only screen and (max-width: 600px) {\n.inner-body {\nwidth: 100% !important;\n}\n\n.footer {\nwidth: 100% !important;\n}\n}\n\n@media only screen and (max-width: 500px) {\n.button {\nwidth: 100% !important;\n}\n}\n</style>\n{{ $head ?? '' }}\n</head>\n<body>\n\n<table class=\"wrapper\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td align=\"center\">\n<table class=\"content\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n{{ $header ?? '' }}\n\n<!-- Email Body -->\n<tr>\n<td class=\"body\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"border: hidden !important;\">\n<table class=\"inner-body\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<!-- Body content -->\n<tr>\n<td class=\"content-cell\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n\n{{ $subcopy ?? '' }}\n</td>\n</tr>\n</table>\n</td>\n</tr>\n\n{{ $footer ?? '' }}\n</table>\n</td>\n</tr>\n</table>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/message.blade.php",
    "content": "<x-mail::layout>\n{{-- Header --}}\n<x-slot:header>\n<x-mail::header :url=\"config('app.url')\">\n{{ config('app.name') }}\n</x-mail::header>\n</x-slot:header>\n\n{{-- Body --}}\n{{ $slot }}\n\n{{-- Subcopy --}}\n@isset($subcopy)\n<x-slot:subcopy>\n<x-mail::subcopy>\n{{ $subcopy }}\n</x-mail::subcopy>\n</x-slot:subcopy>\n@endisset\n\n{{-- Footer --}}\n<x-slot:footer>\n<x-mail::footer>\n© {{ date('Y') }} {{ config('app.name') }}. {{ __('All rights reserved.') }}\n</x-mail::footer>\n</x-slot:footer>\n</x-mail::layout>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/panel.blade.php",
    "content": "<table class=\"panel\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td class=\"panel-content\">\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td class=\"panel-item\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n\n"
  },
  {
    "path": "resources/views/vendor/mail/html/subcopy.blade.php",
    "content": "<table class=\"subcopy\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n<tr>\n<td>\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</td>\n</tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/table.blade.php",
    "content": "<div class=\"table\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</div>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/themes/default.css",
    "content": "/* Base */\n\nbody,\nbody *:not(html):not(style):not(br):not(tr):not(code) {\n    box-sizing: border-box;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,\n        'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n    position: relative;\n}\n\nbody {\n    -webkit-text-size-adjust: none;\n    background-color: #ffffff;\n    color: #718096;\n    height: 100%;\n    line-height: 1.4;\n    margin: 0;\n    padding: 0;\n    width: 100% !important;\n}\n\np,\nul,\nol,\nblockquote {\n    line-height: 1.4;\n    text-align: left;\n}\n\na {\n    color: #3869d4;\n}\n\na img {\n    border: none;\n}\n\n/* Typography */\n\nh1 {\n    color: #3d4852;\n    font-size: 18px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\nh2 {\n    font-size: 16px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\nh3 {\n    font-size: 14px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\np {\n    font-size: 16px;\n    line-height: 1.5em;\n    margin-top: 0;\n    text-align: left;\n}\n\np.sub {\n    font-size: 12px;\n}\n\nimg {\n    max-width: 100%;\n}\n\n/* Layout */\n\n.wrapper {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    background-color: #edf2f7;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n.content {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n/* Header */\n\n.header {\n    padding: 25px 0;\n    text-align: center;\n}\n\n.header a {\n    color: #3d4852;\n    font-size: 19px;\n    font-weight: bold;\n    text-decoration: none;\n}\n\n/* Logo */\n\n.logo {\n    height: 39px;\n    max-height: 39px;\n    width: auto;\n}\n\n/* Body */\n\n.body {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    background-color: #edf2f7;\n    border-bottom: 1px solid #edf2f7;\n    border-top: 1px solid #edf2f7;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n.inner-body {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n    background-color: #ffffff;\n    border-color: #e8e5ef;\n    border-radius: 2px;\n    border-width: 1px;\n    box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015);\n    margin: 0 auto;\n    padding: 0;\n    width: 570px;\n}\n\n.inner-body a {\n    word-break: break-all;\n}\n\n/* Subcopy */\n\n.subcopy {\n    border-top: 1px solid #e8e5ef;\n    margin-top: 25px;\n    padding-top: 25px;\n}\n\n.subcopy p {\n    font-size: 14px;\n}\n\n/* Footer */\n\n.footer {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n    margin: 0 auto;\n    padding: 0;\n    text-align: center;\n    width: 570px;\n}\n\n.footer p {\n    color: #b0adc5;\n    font-size: 12px;\n    text-align: center;\n}\n\n.footer a {\n    color: #b0adc5;\n    text-decoration: underline;\n}\n\n/* Tables */\n\n.table table {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 30px auto;\n    width: 100%;\n}\n\n.table th {\n    border-bottom: 1px solid #edeff2;\n    margin: 0;\n    padding-bottom: 8px;\n}\n\n.table td {\n    color: #74787e;\n    font-size: 15px;\n    line-height: 18px;\n    margin: 0;\n    padding: 10px 0;\n}\n\n.content-cell {\n    max-width: 100vw;\n    padding: 32px;\n}\n\n/* Buttons */\n\n.action {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 30px auto;\n    padding: 0;\n    text-align: center;\n    width: 100%;\n    float: unset;\n}\n\n.button {\n    -webkit-text-size-adjust: none;\n    border-radius: 4px;\n    color: #fff;\n    display: inline-block;\n    overflow: hidden;\n    text-decoration: none;\n}\n\n.button-blue,\n.button-primary {\n    background-color: #7c3aed; /* Updated to brand blue color */\n    border-bottom: 8px solid #7c3aed;\n    border-left: 18px solid #7c3aed;\n    border-right: 18px solid #7c3aed;\n    border-top: 8px solid #7c3aed;\n}\n\n.button-green,\n.button-success {\n    background-color: #48bb78;\n    border-bottom: 8px solid #48bb78;\n    border-left: 18px solid #48bb78;\n    border-right: 18px solid #48bb78;\n    border-top: 8px solid #48bb78;\n}\n\n.button-red,\n.button-error {\n    background-color: #e53e3e;\n    border-bottom: 8px solid #e53e3e;\n    border-left: 18px solid #e53e3e;\n    border-right: 18px solid #e53e3e;\n    border-top: 8px solid #e53e3e;\n}\n\n/* Panels */\n\n.panel {\n    border-left: #0077C8 solid 4px; /* Also updated panel border to match brand color */\n    margin: 21px 0;\n}\n\n.panel-content {\n    background-color: #edf2f7;\n    color: #718096;\n    padding: 16px;\n}\n\n.panel-content p {\n    color: #718096;\n}\n\n.panel-item {\n    padding: 0;\n}\n\n.panel-item p:last-of-type {\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\n/* Utilities */\n\n.break-all {\n    word-break: break-all;\n}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/button.blade.php",
    "content": "{{ $slot }}: {{ $url }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/footer.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/header.blade.php",
    "content": "{{ $slot }}: {{ $url }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/layout.blade.php",
    "content": "{!! strip_tags($header ?? '') !!}\n\n{!! strip_tags($slot) !!}\n@isset($subcopy)\n\n{!! strip_tags($subcopy) !!}\n@endisset\n\n{!! strip_tags($footer ?? '') !!}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/message.blade.php",
    "content": "<x-mail::layout>\n    {{-- Header --}}\n    <x-slot:header>\n        <x-mail::header :url=\"config('app.url')\">\n            {{ config('app.name') }}\n        </x-mail::header>\n    </x-slot:header>\n\n    {{-- Body --}}\n    {{ $slot }}\n\n    {{-- Subcopy --}}\n    @isset($subcopy)\n        <x-slot:subcopy>\n            <x-mail::subcopy>\n                {{ $subcopy }}\n            </x-mail::subcopy>\n        </x-slot:subcopy>\n    @endisset\n\n    {{-- Footer --}}\n    <x-slot:footer>\n        <x-mail::footer>\n            © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')\n        </x-mail::footer>\n    </x-slot:footer>\n</x-mail::layout>\n"
  },
  {
    "path": "resources/views/vendor/mail/text/panel.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/subcopy.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/text/table.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/scribe/components/badges/auth.blade.php",
    "content": "@if($authenticated)@component('scribe::components.badges.base', ['colour' => \"darkred\", 'text' => 'requires authentication'])\n@endcomponent\n@endif\n"
  },
  {
    "path": "resources/views/vendor/scribe/components/badges/base.blade.php",
    "content": "<small class=\"badge badge-{{ $colour }}\">{{ $text }}</small>\n"
  },
  {
    "path": "resources/views/vendor/scribe/components/badges/deprecated.blade.php",
    "content": "@if($deprecated !== false)\n@php($text = $deprecated === true ? 'deprecated' : \"deprecated:$deprecated\")\n@component('scribe::components.badges.base', ['colour' => 'darkgoldenrod', 'text' => $text])\n@endcomponent\n@endif\n"
  },
  {
    "path": "resources/views/vendor/scribe/components/badges/http-method.blade.php",
    "content": "@component('scribe::components.badges.base', [\n    'colour' => \\Knuckles\\Scribe\\Tools\\WritingUtils::$httpMethodToCssColour[$method],\n    'text' => $method,\n    ])\n@endcomponent\n"
  },
  {
    "path": "resources/views/vendor/scribe/components/field-details.blade.php",
    "content": "@php\n    $html ??= []; $class = $html['class'] ?? null;\n@endphp\n<b style=\"line-height: 2;\"><code>{{ $name }}</code></b>&nbsp;&nbsp;\n@if($type)<small>{{ $type }}</small>@endif&nbsp;\n@if($isInput && !$required)<i>optional</i>@endif &nbsp;\n@if($isInput && $deprecated)<i>deprecated</i>@endif &nbsp;\n@if($isInput && empty($hasChildren))\n    @php\n        $isList = Str::endsWith($type, '[]');\n        $fullName = str_replace('[]', '.0', $fullName ?? $name);\n        $baseType = $isList ? substr($type, 0, -2) : $type;\n        // Ignore the first '[]': the frontend will take care of it\n        while (\\Str::endsWith($baseType, '[]')) {\n            $fullName .= '.0';\n            $baseType = substr($baseType, 0, -2);\n        }\n        // When the body is an array, the item names will be \".0.thing\"\n        $fullName = ltrim($fullName, '.');\n        $inputType = match($baseType) {\n            'number', 'integer' => 'number',\n            'file' => 'file',\n            default => 'text',\n        };\n    @endphp\n    @if($type === 'boolean')\n        <label data-endpoint=\"{{ $endpointId }}\" style=\"display: none\">\n            <input type=\"radio\" name=\"{{ $fullName }}\"\n                   value=\"{{$component === 'body' ? 'true' : 1}}\"\n                   data-endpoint=\"{{ $endpointId }}\"\n                   data-component=\"{{ $component }}\" @if($class)class=\"{{ $class }}\"@endif\n            >\n            <code>true</code>\n        </label>\n        <label data-endpoint=\"{{ $endpointId }}\" style=\"display: none\">\n            <input type=\"radio\" name=\"{{ $fullName }}\"\n                   value=\"{{$component === 'body' ? 'false' : 0}}\"\n                   data-endpoint=\"{{ $endpointId }}\"\n                   data-component=\"{{ $component }}\" @if($class)class=\"{{ $class }}\"@endif\n            >\n            <code>false</code>\n        </label>\n    @elseif($isList)\n        <input type=\"{{ $inputType }}\" style=\"display: none\"\n               @if($inputType === 'number')step=\"any\"@endif\n               name=\"{{ $fullName.\"[0]\" }}\" @if($class)class=\"{{ $class }}\"@endif\n               data-endpoint=\"{{ $endpointId }}\"\n               data-component=\"{{ $component }}\">\n        <input type=\"{{ $inputType }}\" style=\"display: none\"\n               name=\"{{ $fullName.\"[1]\" }}\" @if($class)class=\"{{ $class }}\"@endif\n               data-endpoint=\"{{ $endpointId }}\"\n               data-component=\"{{ $component }}\">\n    @else\n        <input type=\"{{ $inputType }}\" style=\"display: none\"\n               @if($inputType === 'number')step=\"any\"@endif\n               name=\"{{ $fullName }}\" @if($class)class=\"{{ $class }}\"@endif\n               data-endpoint=\"{{ $endpointId }}\"\n               value=\"{!! (isset($example) && (is_string($example) || is_numeric($example))) ? $example : '' !!}\"\n               data-component=\"{{ $component }}\">\n    @endif\n@endif\n<br>\n@php\n    if($example !== null && $example !== '' && !is_array($example)) {\n        $exampleAsString = $example;\n        if (is_bool($example)) {\n            $exampleAsString = $example ? \"true\" : \"false\";\n        }\n        $description .= \" Example: `$exampleAsString`\";\n    }\n@endphp\n{!! Parsedown::instance()->text(trim($description)) !!}\n@if(!empty($enumValues))\nMust be one of:\n<ul style=\"list-style-type: square;\">{!! implode(\" \", array_map(fn($val) => \"<li><code>$val</code></li>\", $enumValues)) !!}</ul>\n@endif\n"
  },
  {
    "path": "resources/views/vendor/scribe/components/nested-fields.blade.php",
    "content": "@php\n    $isInput ??= true;\n    $level ??= 0;\n@endphp\n@foreach($fields as $name => $field)\n    @if($name === '[]')\n        @php\n            $description = \"The request body is an array (<code>{$field['type']}</code>`)\";\n            $description .= !empty($field['description']) ? \", representing \".lcfirst($field['description']).\".\" : '.';\n            if(count($field['__fields'])) $description .= \" Each item has the following properties:\";\n        @endphp\n        {!! Parsedown::instance()->text($description) !!}\n\n        @foreach($field['__fields'] as $subfieldName => $subfield)\n                @if(!empty($subfield['__fields']))\n                    <x-scribe::nested-fields\n                            :fields=\"[$subfieldName => $subfield]\" :endpointId=\"$endpointId\" :isInput=\"$isInput\" :level=\"$level + 2\"\n                    />\n                @else\n                    <div style=\"margin-left: {{ ($level + 2) * 14 }}px; clear: unset;\">\n                        @component('scribe::components.field-details', [\n                          'name' => $subfieldName,\n                          'fullName' => $subfield['name'],\n                          'type' => $subfield['type'] ?? 'string',\n                          'required' => $subfield['required'] ?? false,\n                          'deprecated' => $subfield['deprecated'] ?? false,\n                          'description' => $subfield['description'] ?? '',\n                          'example' => $subfield['example'] ?? '',\n                          'enumValues' => $subfield['enumValues'] ?? null,\n                          'endpointId' => $endpointId,\n                          'hasChildren' => false,\n                          'component' => 'body',\n                          'isInput' => $isInput,\n                        ])\n                        @endcomponent\n                    </div>\n                @endif\n            @endforeach\n    @elseif(!empty($field['__fields']))\n        <div style=\"@if($level) margin-left: {{ $level * 14 }}px;@else padding-left: 28px; @endif clear: unset;\">\n        <details>\n            <summary style=\"padding-bottom: 10px;\">\n                @component('scribe::components.field-details', [\n                  'name' => $name,\n                  'fullName' => $field['name'],\n                  'type' => $field['type'] ?? 'string',\n                  'required' => $field['required'] ?? false,\n                  'deprecated' => $field['deprecated'] ?? false,\n                  'description' => $field['description'] ?? '',\n                  'example' => $field['example'] ?? '',\n                  'enumValues' => $field['enumValues'] ?? null,\n                  'endpointId' => $endpointId,\n                  'hasChildren' => true,\n                  'component' => 'body',\n                  'isInput' => $isInput,\n                ])\n                @endcomponent\n            </summary>\n            @foreach($field['__fields'] as $subfieldName => $subfield)\n                @if(!empty($subfield['__fields']))\n                    <x-scribe::nested-fields\n                            :fields=\"[$subfieldName => $subfield]\" :endpointId=\"$endpointId\" :isInput=\"$isInput\" :level=\"$level + 1\"\n                    />\n                @else\n                    <div style=\"margin-left: {{ ($level + 1) * 14 }}px; clear: unset;\">\n                        @component('scribe::components.field-details', [\n                          'name' => $subfieldName,\n                          'fullName' => $subfield['name'],\n                          'type' => $subfield['type'] ?? 'string',\n                          'required' => $subfield['required'] ?? false,\n                          'deprecated' => $subfield['deprecated'] ?? false,\n                          'description' => $subfield['description'] ?? '',\n                          'example' => $subfield['example'] ?? '',\n                          'enumValues' => $subfield['enumValues'] ?? null,\n                          'endpointId' => $endpointId,\n                          'hasChildren' => false,\n                          'component' => 'body',\n                          'isInput' => $isInput,\n                        ])\n                        @endcomponent\n                    </div>\n                @endif\n            @endforeach\n        </details>\n        </div>\n    @else\n        <div style=\"@if($level) margin-left: {{ ($level + 1) * 14 }}px;@else padding-left: 28px; @endif clear: unset;\">\n            @component('scribe::components.field-details', [\n              'name' => $name,\n              'fullName' => $field['name'],\n              'type' => $field['type'] ?? 'string',\n              'required' => $field['required'] ?? false,\n              'deprecated' => $field['deprecated'] ?? false,\n              'description' => $field['description'] ?? '',\n              'example' => $field['example'] ?? '',\n              'enumValues' => $field['enumValues'] ?? null,\n              'endpointId' => $endpointId,\n              'hasChildren' => false,\n              'component' => 'body',\n              'isInput' => $isInput,\n            ])\n            @endcomponent\n        </div>\n    @endif\n@endforeach\n"
  },
  {
    "path": "resources/views/vendor/scribe/external/elements.blade.php",
    "content": "<!-- See https://github.com/stoplightio/elements/blob/main/docs/getting-started/elements/elements-options.md for config -->\n<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>{!! $metadata['title'] !!}</title>\n    <!-- Embed elements Elements via Web Component -->\n    <script src=\"https://unpkg.com/@stoplight/elements/web-components.min.js\"></script>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@stoplight/elements/styles.min.css\">\n    <style>\n        body {\n            height: 100vh;\n        }\n    </style>\n</head>\n<body>\n\n<elements-api\n@foreach($htmlAttributes as $attribute => $value)\n    {{-- Attributes specified first override later ones --}}\n    {!! $attribute !!}=\"{!! $value !!}\"\n@endforeach\n    apiDescriptionUrl=\"{!! $metadata['openapi_spec_url'] !!}\"\n    router=\"hash\"\n    layout=\"sidebar\"\n    hideTryIt=\"{!! ($tryItOut['enabled'] ?? true) ? '' : 'true'!!}\"\n@if(!empty($metadata['logo']))\n    logo=\"{!! $metadata['logo'] !!}\"\n@endif\n/>\n\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/scribe/external/rapidoc.blade.php",
    "content": "<!-- See https://rapidocweb.com/api.html for options -->\n<!doctype html> <!-- Important: must specify -->\n<html>\n<head>\n    <meta charset=\"utf-8\"> <!-- Important: rapi-doc uses utf8 characters -->\n    <script type=\"module\" src=\"https://unpkg.com/rapidoc/dist/rapidoc-min.js\"></script>\n</head>\n<body>\n<rapi-doc\n@foreach($htmlAttributes as $attribute => $value)\n    {{-- Attributes specified first override later ones --}}\n    {!! $attribute !!}=\"{!! $value !!}\"\n@endforeach\n    spec-url=\"{!! $metadata['openapi_spec_url'] !!}\"\n    render-style=\"read\"\n    allow-try=\"{!! ($tryItOut['enabled'] ?? true) ? 'true' : 'false'!!}\"\n>\n    @if($metadata['logo'])\n        <img slot=\"logo\" src=\"{!! $metadata['logo'] !!}\"/>\n    @endif\n</rapi-doc>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/scribe/external/scalar.blade.php",
    "content": "<!doctype html>\n<html>\n<head>\n    <title>{!! $metadata['title'] !!}</title>\n    <meta charset=\"utf-8\"/>\n    <meta\n        name=\"viewport\"\n        content=\"width=device-width, initial-scale=1\"/>\n    <style>\n        body {\n            margin: 0;\n        }\n        .relaticle-nav {\n            position: sticky;\n            top: 0;\n            z-index: 100;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 0 1.5rem;\n            height: 3rem;\n            background: #fff;\n            border-bottom: 1px solid #e5e7eb;\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n        }\n        .relaticle-nav-left {\n            display: flex;\n            align-items: center;\n            gap: 0.75rem;\n        }\n        .relaticle-nav-left a {\n            display: flex;\n            align-items: center;\n            text-decoration: none;\n            color: inherit;\n        }\n        .relaticle-nav-left svg {\n            height: 1.25rem;\n            width: auto;\n        }\n        .relaticle-nav-sep {\n            width: 1px;\n            height: 1rem;\n            background: #e5e7eb;\n        }\n        .relaticle-nav-title {\n            font-size: 0.8125rem;\n            font-weight: 600;\n            color: #111827;\n        }\n        .relaticle-nav-links {\n            display: flex;\n            align-items: center;\n            gap: 0.25rem;\n        }\n        .relaticle-nav-links a {\n            font-size: 0.8125rem;\n            font-weight: 500;\n            color: #6b7280;\n            text-decoration: none;\n            padding: 0.375rem 0.75rem;\n            border-radius: 0.375rem;\n            transition: color 0.15s;\n        }\n        .relaticle-nav-links a:hover {\n            color: #111827;\n        }\n        @media (max-width: 640px) {\n            .relaticle-nav-links { display: none; }\n        }\n        @media (prefers-color-scheme: dark) {\n            .relaticle-nav {\n                background: #0a0a0a;\n                border-bottom-color: rgba(255,255,255,0.06);\n            }\n            .relaticle-nav-sep { background: rgba(255,255,255,0.1); }\n            .relaticle-nav-title { color: #fff; }\n            .relaticle-nav-links a { color: #9ca3af; }\n            .relaticle-nav-links a:hover { color: #fff; }\n            .relaticle-nav-left img { height: 1.25rem; width: auto; }\n        }\n    </style>\n</head>\n<body>\n\n<nav class=\"relaticle-nav\">\n    <div class=\"relaticle-nav-left\">\n        <a href=\"/\" aria-label=\"Relaticle Home\">\n            <img src=\"/brand/logomark.svg\" alt=\"Relaticle\" style=\"height:1.25rem;width:1.25rem;\"/>\n        </a>\n        <div class=\"relaticle-nav-sep\"></div>\n        <span class=\"relaticle-nav-title\">API Reference</span>\n    </div>\n    <div class=\"relaticle-nav-links\">\n        <a href=\"/docs\">Docs</a>\n        <a href=\"/docs/mcp\">MCP</a>\n        <a href=\"/pricing\">Pricing</a>\n        <a href=\"https://github.com/Relaticle/relaticle\" target=\"_blank\" rel=\"noopener\">GitHub</a>\n    </div>\n</nav>\n\n<script\n    id=\"api-reference\"\n@foreach($htmlAttributes as $attribute => $value)\n    {{-- Attributes specified first override later ones --}}\n    {!! $attribute !!}=\"{!! $value !!}\"\n@endforeach\n    data-url=\"{!! $metadata['openapi_spec_url'] !!}\">\n</script>\n<script src=\"https://cdn.jsdelivr.net/npm/@scalar/api-reference\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/scribe/markdown/auth.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\Utils as u;\n@endphp\n# {{ u::trans(\"scribe::headings.auth\") }}\n\n@if(!$isAuthed)\n{!! u::trans(\"scribe::auth.none\") !!}\n@else\n{!! $authDescription !!}\n\n{!! $extraAuthInfo !!}\n@endif\n"
  },
  {
    "path": "resources/views/vendor/scribe/markdown/intro.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\Utils as u;\n@endphp\n# {{ u::trans(\"scribe::headings.introduction\") }}\n\n{!! $description !!}\n\n<aside>\n    <strong>{{ u::trans(\"scribe::labels.base_url\") }}</strong>: <code>{!! $baseUrl !!}</code>\n</aside>\n\n{!! $introText !!}\n\n"
  },
  {
    "path": "resources/views/vendor/scribe/partials/example-requests/bash.md.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\WritingUtils as u;\n    /** @var  Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n```bash\ncurl --request {{$endpoint->httpMethods[0]}} \\\n    {{$endpoint->httpMethods[0] == 'GET' ? '--get ' : ''}}\"{!! rtrim($baseUrl, '/') !!}/{{ ltrim($endpoint->boundUri, '/') }}@if(count($endpoint->cleanQueryParameters))?{!! u::printQueryParamsAsString($endpoint->cleanQueryParameters) !!}@endif\"@if(count($endpoint->headers)) \\\n@foreach($endpoint->headers as $header => $value)\n    --header \"{{$header}}: {{ addslashes($value) }}\"@if(! ($loop->last) || ($loop->last && count($endpoint->bodyParameters))) \\\n@endif\n@endforeach\n@endif\n@if($endpoint->hasFiles() || (isset($endpoint->headers['Content-Type']) && $endpoint->headers['Content-Type'] == 'multipart/form-data' && count($endpoint->cleanBodyParameters)))\n@foreach($endpoint->cleanBodyParameters as $parameter => $value)\n@foreach(u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)\n    --form \"{!! \"$key=\".$actualValue !!}\"@if(!($loop->parent->last) || count($endpoint->fileParameters))\\\n@endif\n@endforeach\n@endforeach\n@foreach($endpoint->fileParameters as $parameter => $value)\n@foreach(u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)\n    --form \"{!! \"$key=@\".$file->path() !!}\" @if(!($loop->parent->last))\\\n@endif\n@endforeach\n@endforeach\n@elseif(count($endpoint->cleanBodyParameters))\n@if ($endpoint->headers['Content-Type'] == 'application/x-www-form-urlencoded')\n    --data \"{!! http_build_query($endpoint->cleanBodyParameters, '', '&') !!}\"\n@else\n    --data \"{!! addslashes(json_encode($endpoint->cleanBodyParameters, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)) !!}\"\n@endif\n@endif\n\n```\n"
  },
  {
    "path": "resources/views/vendor/scribe/partials/example-requests/javascript.md.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\WritingUtils as u;\n    /** @var  Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n```javascript\nconst url = new URL(\n    \"{!! rtrim($baseUrl, '/') !!}/{{ ltrim($endpoint->boundUri, '/') }}\"\n);\n@if(count($endpoint->cleanQueryParameters))\n\nconst params = {!! u::printQueryParamsAsKeyValue($endpoint->cleanQueryParameters, \"\\\"\", \":\", 4, \"{}\") !!};\nObject.keys(params)\n    .forEach(key => url.searchParams.append(key, params[key]));\n@endif\n\n@if(!empty($endpoint->headers))\nconst headers = {\n@foreach($endpoint->headers as $header => $value)\n    \"{{$header}}\": \"{{$value}}\",\n@endforeach\n@empty($endpoint->headers['Accept'])\n    \"Accept\": \"application/json\",\n@endempty\n};\n@endif\n\n@if($endpoint->hasFiles() || (isset($endpoint->headers['Content-Type']) && $endpoint->headers['Content-Type'] == 'multipart/form-data' && count($endpoint->cleanBodyParameters)))\nconst body = new FormData();\n@foreach($endpoint->cleanBodyParameters as $parameter => $value)\n@foreach( u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)\nbody.append('{!! $key !!}', '{!! $actualValue !!}');\n@endforeach\n@endforeach\n@foreach($endpoint->fileParameters as $parameter => $value)\n@foreach( u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)\nbody.append('{!! $key !!}', document.querySelector('input[name=\"{!! $key !!}\"]').files[0]);\n@endforeach\n@endforeach\n@elseif(count($endpoint->cleanBodyParameters))\n@if ($endpoint->headers['Content-Type'] == 'application/x-www-form-urlencoded')\nlet body = \"{!! http_build_query($endpoint->cleanBodyParameters, '', '&') !!}\";\n@else\nlet body = {!! json_encode($endpoint->cleanBodyParameters, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) !!};\n@endif\n@endif\n\nfetch(url, {\n    method: \"{{$endpoint->httpMethods[0]}}\",\n@if(count($endpoint->headers))\n    headers,\n@endif\n@if($endpoint->hasFiles() || (isset($endpoint->headers['Content-Type']) && $endpoint->headers['Content-Type'] == 'multipart/form-data' && count($endpoint->cleanBodyParameters)))\n    body,\n@elseif(count($endpoint->cleanBodyParameters))\n@if ($endpoint->headers['Content-Type'] == 'application/x-www-form-urlencoded')\n    body,\n@else\n    body: JSON.stringify(body),\n@endif\n@endif\n}).then(response => response.json());\n```\n"
  },
  {
    "path": "resources/views/vendor/scribe/partials/example-requests/php.md.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\WritingUtils as u;\n    /** @var  Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n```php\n$client = new \\GuzzleHttp\\Client();\n$url = '{!! rtrim($baseUrl, '/') . '/' . ltrim($endpoint->boundUri, '/') !!}';\n@if($endpoint->hasHeadersOrQueryOrBodyParams())\n$response = $client->{{ strtolower($endpoint->httpMethods[0]) }}(\n    $url,\n    [\n@if(!empty($endpoint->headers))\n        'headers' => {!! u::printPhpValue($endpoint->headers, 8) !!},\n@endif\n@if(!empty($endpoint->cleanQueryParameters))\n        'query' => {!! u::printQueryParamsAsKeyValue($endpoint->cleanQueryParameters, \"'\", \" =>\", 12, \"[]\", 8) !!},\n@endif\n@if($endpoint->hasFiles() || (isset($endpoint->headers['Content-Type']) && $endpoint->headers['Content-Type'] == 'multipart/form-data' && !empty($endpoint->cleanBodyParameters)))\n        'multipart' => [\n@foreach($endpoint->cleanBodyParameters as $parameter => $value)\n@foreach(u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)\n            [\n                'name' => '{!! $key !!}',\n                'contents' => '{!! $actualValue !!}'\n            ],\n@endforeach\n@endforeach\n@foreach($endpoint->fileParameters as $parameter => $value)\n@foreach(u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)\n            [\n                'name' => '{!!  $key !!}',\n                'contents' => fopen('{!! $file->path() !!}', 'r')\n            ],\n@endforeach\n@endforeach\n        ],\n@elseif(count($endpoint->cleanBodyParameters))\n@if ($endpoint->headers['Content-Type'] == 'application/x-www-form-urlencoded')\n        'form_params' => {!! u::printPhpValue($endpoint->cleanBodyParameters, 8) !!},\n@else\n        'json' => {!! u::printPhpValue($endpoint->cleanBodyParameters, 8) !!},\n@endif\n@endif\n    ]\n);\n@else\n$response = $client->{{ strtolower($endpoint->httpMethods[0]) }}($url);\n@endif\n$body = $response->getBody();\nprint_r(json_decode((string) $body));\n```\n"
  },
  {
    "path": "resources/views/vendor/scribe/partials/example-requests/python.md.blade.php",
    "content": "@php\n  use Knuckles\\Scribe\\Tools\\WritingUtils as u;\n  /** @var  Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n```python\nimport requests\nimport json\n\nurl = '{!! rtrim($baseUrl, '/') !!}/{{ $endpoint->boundUri }}'\n@if($endpoint->hasFiles() || (isset($endpoint->headers['Content-Type']) && $endpoint->headers['Content-Type'] == 'multipart/form-data' && count($endpoint->cleanBodyParameters)))\nfiles = {\n@foreach($endpoint->cleanBodyParameters as $parameter => $value)\n@foreach(u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $actualValue)\n  '{!! $key !!}': (None, '{!! $actualValue !!}')@if(!($loop->parent->last) || count($endpoint->fileParameters)),\n@endif\n@endforeach\n@endforeach\n@foreach($endpoint->fileParameters as $parameter => $value)\n@foreach(u::getParameterNamesAndValuesForFormData($parameter, $value) as $key => $file)\n  '{!! $key !!}': open('{!! $file->path() !!}', 'rb')@if(!($loop->parent->last)),\n@endif\n@endforeach\n@endforeach\n}\n@endif\n@if(count($endpoint->cleanBodyParameters))\npayload = {!! json_encode($endpoint->cleanBodyParameters, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) !!}\n@endif\n@if(count($endpoint->cleanQueryParameters))\nparams = {!! u::printQueryParamsAsKeyValue($endpoint->cleanQueryParameters, \"'\", \":\", 2, \"{}\") !!}\n@endif\n@if(!empty($endpoint->headers))\nheaders = {\n@foreach($endpoint->headers as $header => $value)\n  '{{$header}}': '{{$value}}'@if(!($loop->last)),\n@endif\n@endforeach\n\n}\n\n@endif\n@php\n$optionalArguments = [];\nif (count($endpoint->headers)) $optionalArguments[] = \"headers=headers\";\nif (count($endpoint->fileParameters)) $optionalArguments[] = \"files=files\";\nif (count($endpoint->cleanBodyParameters) && $endpoint->headers['Content-Type'] != 'multipart/form-data') $optionalArguments[] = (count($endpoint->fileParameters) || $endpoint->headers['Content-Type'] == 'application/x-www-form-urlencoded' ? \"data=payload\" : \"json=payload\");\nif (count($endpoint->cleanQueryParameters)) $optionalArguments[] = \"params=params\";\n$optionalArguments = implode(', ',$optionalArguments);\n@endphp\nresponse = requests.request('{{$endpoint->httpMethods[0]}}', url, {{ $optionalArguments }})\nresponse.json()\n```\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/default/endpoint.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\Utils as u;\n    /** @var  Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n\n<h2 id=\"{!! $endpoint->fullSlug() !!}\">{{ $endpoint->name() }}</h2>\n\n<p>\n@component('scribe::components.badges.auth', ['authenticated' => $endpoint->isAuthed()])\n@endcomponent\n@component('scribe::components.badges.deprecated', ['deprecated' => $endpoint->metadata->deprecated])\n@endcomponent\n</p>\n\n{!! Parsedown::instance()->text($endpoint->metadata->description ?: '') !!}\n\n<span id=\"example-requests-{!! $endpoint->endpointId() !!}\">\n<blockquote>{{ u::trans(\"scribe::endpoint.example_request\") }}:</blockquote>\n\n@foreach($metadata['example_languages'] as $language)\n\n<div class=\"{{ $language }}-example\">\n    @include(\"scribe::partials.example-requests.$language\")\n</div>\n\n@endforeach\n</span>\n\n<span id=\"example-responses-{!! $endpoint->endpointId() !!}\">\n@if($endpoint->isGet() || $endpoint->hasResponses())\n    @foreach($endpoint->responses as $response)\n        <blockquote>\n            <p>{{ u::trans(\"scribe::endpoint.example_response\") }} ({{ $response->fullDescription() }}):</p>\n        </blockquote>\n        @if(count($response->headers))\n        <details class=\"annotation\">\n            <summary style=\"cursor: pointer;\">\n                <small onclick=\"textContent = parentElement.parentElement.open ? 'Show headers' : 'Hide headers'\">Show headers</small>\n            </summary>\n            <pre><code class=\"language-http\">@foreach($response->headers as $header => $value)\n{{ $header }}: {{ is_array($value) ? implode('; ', $value) : $value }}\n@endforeach </code></pre></details> @endif\n        <pre>\n@if($response->isBinary())\n<code>{!! u::trans(\"scribe::endpoint.responses.binary\") !!} - {{ htmlentities(str_replace(\"<<binary>>\", \"\", $response->content)) }}</code>\n@elseif($response->status == 204)\n<code>{!! u::trans(\"scribe::endpoint.responses.empty\") !!}</code>\n@else\n@php($parsed = json_decode($response->content))\n{{-- If response is a JSON string, prettify it. Otherwise, just print it --}}\n<code class=\"language-json\" style=\"max-height: 300px;\">{!! htmlentities($parsed != null ? json_encode($parsed, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : $response->content) !!}</code>\n@endif </pre>\n    @endforeach\n@endif\n</span>\n<span id=\"execution-results-{{ $endpoint->endpointId() }}\" hidden>\n    <blockquote>{{ u::trans(\"scribe::try_it_out.received_response\") }}<span\n                id=\"execution-response-status-{{ $endpoint->endpointId() }}\"></span>:\n    </blockquote>\n    <pre class=\"json\"><code id=\"execution-response-content-{{ $endpoint->endpointId() }}\"\n      data-empty-response-text=\"<{{ u::trans(\"scribe::endpoint.responses.empty\") }}>\" style=\"max-height: 400px;\"></code></pre>\n</span>\n<span id=\"execution-error-{{ $endpoint->endpointId() }}\" hidden>\n    <blockquote>{{ u::trans(\"scribe::try_it_out.request_failed\") }}:</blockquote>\n    <pre><code id=\"execution-error-message-{{ $endpoint->endpointId() }}\">{{ \"\\n\\n\".u::trans(\"scribe::try_it_out.error_help\") }}</code></pre>\n</span>\n<form id=\"form-{{ $endpoint->endpointId() }}\" data-method=\"{{ $endpoint->httpMethods[0] }}\"\n      data-path=\"{{ $endpoint->uri }}\"\n      data-authed=\"{{ $endpoint->isAuthed() ? 1 : 0 }}\"\n      data-hasfiles=\"{{ $endpoint->hasFiles() ? 1 : 0 }}\"\n      data-isarraybody=\"{{ $endpoint->isArrayBody() ? 1 : 0 }}\"\n      autocomplete=\"off\"\n      onsubmit=\"event.preventDefault(); executeTryOut('{{ $endpoint->endpointId() }}', this);\">\n    <h3>\n        {{ u::trans(\"scribe::endpoint.request\") }}&nbsp;&nbsp;&nbsp;\n        @if($metadata['try_it_out']['enabled'] ?? false)\n            <button type=\"button\"\n                    style=\"background-color: #8fbcd4; padding: 5px 10px; border-radius: 5px; border-width: thin;\"\n                    id=\"btn-tryout-{{ $endpoint->endpointId() }}\"\n                    onclick=\"tryItOut('{{ $endpoint->endpointId() }}');\">{{ u::trans(\"scribe::try_it_out.open\") }}\n            </button>\n            <button type=\"button\"\n                    style=\"background-color: #c97a7e; padding: 5px 10px; border-radius: 5px; border-width: thin;\"\n                    id=\"btn-canceltryout-{{ $endpoint->endpointId() }}\"\n                    onclick=\"cancelTryOut('{{ $endpoint->endpointId() }}');\" hidden>{{ u::trans(\"scribe::try_it_out.cancel\") }}\n            </button>&nbsp;&nbsp;\n            <button type=\"submit\"\n                    style=\"background-color: #6ac174; padding: 5px 10px; border-radius: 5px; border-width: thin;\"\n                    id=\"btn-executetryout-{{ $endpoint->endpointId() }}\"\n                    data-initial-text=\"{{ u::trans(\"scribe::try_it_out.send\") }}\"\n                    data-loading-text=\"{{ u::trans(\"scribe::try_it_out.loading\") }}\"\n                    hidden>{{ u::trans(\"scribe::try_it_out.send\") }}\n            </button>\n        @endif\n    </h3>\n    @foreach($endpoint->httpMethods as $method)\n        <p>\n            @component('scribe::components.badges.http-method', ['method' => $method])@endcomponent\n            <b><code>{{$endpoint->uri}}</code></b>\n        </p>\n    @endforeach\n    @if(count($endpoint->headers))\n        <h4 class=\"fancy-heading-panel\"><b>{{ u::trans(\"scribe::endpoint.headers\") }}</b></h4>\n        @foreach($endpoint->headers as $name => $example)\n            <?php\n                $htmlOptions = [];\n            if ($endpoint->isAuthed() && 'header' == $metadata['auth']['location'] && $metadata['auth']['name'] == $name) {\n                $htmlOptions = ['class' => 'auth-value'];\n            }\n            ?>\n            <div style=\"padding-left: 28px; clear: unset;\">\n                @component('scribe::components.field-details', [\n                  'name' => $name,\n                  'type' => null,\n                  'required' => true,\n                  'deprecated' => false,\n                  'description' => null,\n                  'example' => $example,\n                  'endpointId' => $endpoint->endpointId(),\n                  'component' => 'header',\n                  'isInput' => true,\n                  'html' => $htmlOptions,\n                ])\n                @endcomponent\n            </div>\n        @endforeach\n    @endif\n    @if(count($endpoint->urlParameters))\n        <h4 class=\"fancy-heading-panel\"><b>{{ u::trans(\"scribe::endpoint.url_parameters\") }}</b></h4>\n        @foreach($endpoint->urlParameters as $attribute => $parameter)\n            <div style=\"padding-left: 28px; clear: unset;\">\n                @component('scribe::components.field-details', [\n                  'name' => $parameter->name,\n                  'type' => $parameter->type ?? 'string',\n                  'required' => $parameter->required,\n                  'deprecated' => $parameter->deprecated,\n                  'description' => $parameter->description,\n                  'example' => $parameter->example ?? '',\n                  'enumValues' => $parameter->enumValues,\n                  'endpointId' => $endpoint->endpointId(),\n                  'component' => 'url',\n                  'isInput' => true,\n                ])\n                @endcomponent\n            </div>\n        @endforeach\n    @endif\n    @if(count($endpoint->queryParameters))\n        <h4 class=\"fancy-heading-panel\"><b>{{ u::trans(\"scribe::endpoint.query_parameters\") }}</b></h4>\n        @foreach($endpoint->queryParameters as $attribute => $parameter)\n                <?php\n                $htmlOptions = [];\n            if ($endpoint->isAuthed() && 'query' == $metadata['auth']['location'] && $metadata['auth']['name'] == $attribute) {\n                $htmlOptions = ['class' => 'auth-value'];\n            }\n            ?>\n            <div style=\"padding-left: 28px; clear: unset;\">\n                @component('scribe::components.field-details', [\n                  'name' => $parameter->name,\n                  'type' => $parameter->type,\n                  'required' => $parameter->required,\n                  'deprecated' => $parameter->deprecated,\n                  'description' => $parameter->description,\n                  'example' => $parameter->example ?? '',\n                  'enumValues' => $parameter->enumValues,\n                  'endpointId' => $endpoint->endpointId(),\n                  'component' => 'query',\n                  'isInput' => true,\n                  'html' => $htmlOptions,\n                ])\n                @endcomponent\n            </div>\n        @endforeach\n    @endif\n    @if(count($endpoint->nestedBodyParameters))\n        <h4 class=\"fancy-heading-panel\"><b>{{ u::trans(\"scribe::endpoint.body_parameters\") }}</b></h4>\n        <x-scribe::nested-fields\n                :fields=\"$endpoint->nestedBodyParameters\" :endpointId=\"$endpoint->endpointId()\"\n        />\n    @endif\n</form>\n\n@if(count($endpoint->responseFields))\n    <h3>{{ u::trans(\"scribe::endpoint.response\") }}</h3>\n    <h4 class=\"fancy-heading-panel\"><b>{{ u::trans(\"scribe::endpoint.response_fields\") }}</b></h4>\n    <x-scribe::nested-fields\n            :fields=\"$endpoint->nestedResponseFields\" :endpointId=\"$endpoint->endpointId()\"\n            :isInput=\"false\"\n    />\n@endif\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/default/groups.blade.php",
    "content": "@foreach($groupedEndpoints as $group)\n    <h1 id=\"{!! Str::slug($group['name']) !!}\">{!! $group['name'] !!}</h1>\n\n    {!! Parsedown::instance()->text($group['description']) !!}\n\n    @foreach($group['subgroups'] as $subgroupName => $subgroup)\n        @if($subgroupName !== \"\")\n            <h2 id=\"{!! Str::slug($group['name']) !!}-{!! Str::slug($subgroupName) !!}\">{{ $subgroupName }}</h2>\n            @php($subgroupDescription = collect($subgroup)->first(fn ($e) => $e->metadata->subgroupDescription)?->metadata?->subgroupDescription)\n            @if($subgroupDescription)\n                <p>\n                    {!! Parsedown::instance()->text($subgroupDescription) !!}\n                </p>\n            @endif\n        @endif\n        @foreach($subgroup as $endpoint)\n            @include(\"scribe::themes.default.endpoint\")\n        @endforeach\n    @endforeach\n@endforeach\n\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/default/index.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\WritingUtils as u;\n@endphp\n<!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta content=\"IE=edge,chrome=1\" http-equiv=\"X-UA-Compatible\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <title>{!! $metadata['title'] !!}</title>\n\n    <link href=\"https://fonts.googleapis.com/css?family=Open+Sans&display=swap\" rel=\"stylesheet\">\n\n    <link rel=\"stylesheet\" href=\"{!! $assetPathPrefix !!}css/theme-default.style.css\" media=\"screen\">\n    <link rel=\"stylesheet\" href=\"{!! $assetPathPrefix !!}css/theme-default.print.css\" media=\"print\">\n\n    <script src=\"https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js\"></script>\n\n    <link rel=\"stylesheet\"\n          href=\"https://unpkg.com/@highlightjs/cdn-assets@11.6.0/styles/obsidian.min.css\">\n    <script src=\"https://unpkg.com/@highlightjs/cdn-assets@11.6.0/highlight.min.js\"></script>\n\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jets/0.14.1/jets.min.js\"></script>\n\n@if(isset($metadata['example_languages']))\n    <style id=\"language-style\">\n        /* starts out as display none and is replaced with js later  */\n        @foreach($metadata['example_languages'] as $lang)\n            body .content .{{ $lang }}-example code { display: none; }\n        @endforeach\n    </style>\n@endif\n\n@if($tryItOut['enabled'] ?? true)\n    <script>\n        var tryItOutBaseUrl = \"{!! $tryItOut['base_url'] ?? $baseUrl !!}\";\n        var useCsrf = Boolean({!! $tryItOut['use_csrf'] ?? null !!});\n        var csrfUrl = \"{!! $tryItOut['csrf_url'] ?? null !!}\";\n    </script>\n    <script src=\"{{ u::getVersionedAsset($assetPathPrefix.'js/tryitout.js') }}\"></script>\n@endif\n\n    <script src=\"{{ u::getVersionedAsset($assetPathPrefix.'js/theme-default.js') }}\"></script>\n\n</head>\n\n<body data-languages=\"{{ json_encode($metadata['example_languages'] ?? []) }}\">\n\n@include(\"scribe::themes.default.sidebar\")\n\n<div class=\"page-wrapper\">\n    <div class=\"dark-box\"></div>\n    <div class=\"content\">\n        {!! $intro !!}\n\n        {!! $auth !!}\n\n        @include(\"scribe::themes.default.groups\")\n\n        {!! $append !!}\n    </div>\n    <div class=\"dark-box\">\n        @if(isset($metadata['example_languages']))\n            <div class=\"lang-selector\">\n                @foreach($metadata['example_languages'] as $name => $lang)\n                    @php if (is_numeric($name)) $name = $lang; @endphp\n                    <button type=\"button\" class=\"lang-button\" data-language-name=\"{{$lang}}\">{{$name}}</button>\n                @endforeach\n            </div>\n        @endif\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/default/sidebar.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\Utils as u;\n@endphp\n<a href=\"#\" id=\"nav-button\">\n    <span>\n        MENU\n        <img src=\"{!! $assetPathPrefix !!}images/navbar.png\" alt=\"navbar-image\"/>\n    </span>\n</a>\n<div class=\"tocify-wrapper\">\n    @if($metadata['logo'] != false)\n        <img src=\"{{ $metadata['logo'] }}\" alt=\"logo\" class=\"logo\" style=\"padding-top: 10px;\" width=\"100%\"/>\n    @endif\n\n    @isset($metadata['example_languages'])\n        <div class=\"lang-selector\">\n            @foreach($metadata['example_languages'] as $name => $lang)\n                @php if (is_numeric($name)) $name = $lang; @endphp\n                <button type=\"button\" class=\"lang-button\" data-language-name=\"{{ $lang }}\">{{ $name }}</button>\n            @endforeach\n        </div>\n    @endisset\n\n    <div class=\"search\">\n        <input type=\"text\" class=\"search\" id=\"input-search\" placeholder=\"{{ u::trans(\"scribe::labels.search\") }}\">\n    </div>\n\n    <div id=\"toc\">\n        @foreach($headings as $h1)\n            <ul id=\"tocify-header-{{ $h1['slug'] }}\" class=\"tocify-header\">\n                <li class=\"tocify-item level-1\" data-unique=\"{!! $h1['slug'] !!}\">\n                    <a href=\"#{!! $h1['slug'] !!}\">{!! $h1['name'] !!}</a>\n                </li>\n                @if(count($h1['subheadings']) > 0)\n                    <ul id=\"tocify-subheader-{!! $h1['slug'] !!}\" class=\"tocify-subheader\">\n                        @foreach($h1['subheadings'] as $h2)\n                            <li class=\"tocify-item level-2\" data-unique=\"{!! $h2['slug'] !!}\">\n                                <a href=\"#{!! $h2['slug'] !!}\">{!! $h2['name'] !!}</a>\n                            </li>\n                            @if(count($h2['subheadings']) > 0)\n                                <ul id=\"tocify-subheader-{!! $h2['slug'] !!}\" class=\"tocify-subheader\">\n                                    @foreach($h2['subheadings'] as $h3)\n                                        <li class=\"tocify-item level-3\" data-unique=\"{!! $h3['slug'] !!}\">\n                                            <a href=\"#{!! $h3['slug'] !!}\">{!! $h3['name'] !!}</a>\n                                        </li>\n                                    @endforeach\n                                </ul>\n                            @endif\n                        @endforeach\n                    </ul>\n                @endif\n            </ul>\n        @endforeach\n    </div>\n\n    <ul class=\"toc-footer\" id=\"toc-footer\">\n        @if($metadata['postman_collection_url'])\n            <li style=\"padding-bottom: 5px;\"><a href=\"{!! $metadata['postman_collection_url'] !!}\">{!! u::trans(\"scribe::links.postman\") !!}</a></li>\n        @endif\n        @if($metadata['openapi_spec_url'])\n            <li style=\"padding-bottom: 5px;\"><a href=\"{!! $metadata['openapi_spec_url'] !!}\">{!! u::trans(\"scribe::links.openapi\") !!}</a></li>\n        @endif\n        <li><a href=\"http://github.com/knuckleswtf/scribe\">Documentation powered by Scribe ✍</a></li>\n    </ul>\n\n    <ul class=\"toc-footer\" id=\"last-updated\">\n        <li>{{ $metadata['last_updated'] }}</li>\n    </ul>\n</div>\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/components/field-details.blade.php",
    "content": "@php\n    $hasChildren ??= false;\n    $isArrayBody = $name == \"[]\";\n    $expandable = $hasChildren && !$isArrayBody;\n@endphp\n\n<div class=\"sl-flex sl-relative sl-max-w-full sl-py-2 sl-pl-3\">\n    <div class=\"sl-w-1 sl-mt-2 sl-mr-3 sl--ml-3 sl-border-t\"></div>\n    <div class=\"sl-stack sl-stack--vertical sl-stack--1 sl-flex sl-flex-1 sl-flex-col sl-items-stretch sl-max-w-full sl-ml-2 @if($expandable) sl-cursor-pointer @endif\">\n        <div class=\"sl-flex sl-items-center sl-max-w-full\">\n            @if($expandable)\n                <div class=\"sl-flex sl-justify-center sl-w-8 sl--ml-8 sl-pl-3 sl-text-muted expansion-chevrons\" role=\"button\">\n                    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"chevron-right\"\n                         class=\"svg-inline--fa fa-chevron-right fa-fw fa-sm sl-icon\" role=\"img\"\n                         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                        <path fill=\"currentColor\"\n                              d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"></path>\n                    </svg>\n                </div>\n            @endif\n            @unless($isArrayBody)\n                <div class=\"sl-flex sl-items-baseline sl-text-base\">\n                    <div class=\"sl-font-mono sl-font-semibold sl-mr-2\">{{ $name }}</div>\n                    @if($type)\n                        <span class=\"sl-truncate sl-text-muted\">{{ $type }}</span>\n                    @endif\n                </div>\n                    @if($required || $deprecated)\n                        <div class=\"sl-flex-1 sl-h-px sl-mx-3\"></div>\n                        <div class=\"sl-flex sl-items-center\">\n                            @if($required)\n                                <span class=\"sl-ml-2 sl-text-warning\">required</span>\n                            @endif\n                            @if($deprecated)\n                                <span class=\"sl-ml-2 sl-text-warning\">deprecated</span>\n                            @endif\n                        </div>\n                    @endif\n            @endunless\n        </div>\n        @if($description)\n        <div class=\"sl-prose sl-markdown-viewer\" style=\"font-size: 12px;\">\n            {!! Parsedown::instance()->text($description) !!}\n        </div>\n        @endif\n        @if(!empty($enumValues))\n            Must be one of:\n            <ul style=\"list-style-position: inside; list-style-type: square;\">{!! implode(\" \", array_map(fn($val) => \"<li><code>$val</code></li>\", $enumValues)) !!}</ul>\n        @endif\n        @if($isArrayBody)\n            <div class=\"sl-flex sl-items-baseline sl-text-base\">\n                <div class=\"sl-font-mono sl-font-semibold sl-mr-2\">array of:</div>\n                @if($required)\n                    <div class=\"sl-flex-1 sl-h-px sl-mx-3\"></div>\n                    <span class=\"sl-ml-2 sl-text-warning\">required</span>\n                @endif\n            </div>\n        @endif\n        @if(!$hasChildren && !is_null($example) && $example !== '')\n            <div class=\"sl-stack sl-stack--horizontal sl-stack--2 sl-flex sl-flex-row sl-items-baseline sl-text-muted\">\n                <span>Example:</span> <!-- <span> important for spacing -->\n                <div class=\"sl-flex sl-flex-1 sl-flex-wrap\" style=\"gap: 4px;\">\n                    <div class=\"sl-max-w-full sl-break-all sl-px-1 sl-bg-canvas-tint sl-text-muted sl-rounded sl-border\">\n                        {{ is_array($example) || is_bool($example) ? json_encode($example) : $example }}\n                    </div>\n                </div>\n            </div>\n        @endif\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/components/nested-fields.blade.php",
    "content": "@php\n    $level ??= 0;\n    $levelNestingClass = match($level) {\n        0 => \"sl-ml-px\",\n        default => \"sl-ml-7\"\n    };\n    $expandable ??= !isset($fields[\"[]\"]);\n@endphp\n\n@foreach($fields as $name => $field)\n    <div class=\"{{ $expandable ? 'expandable' : '' }} sl-text-sm sl-border-l {{ $levelNestingClass }}\">\n        @component('scribe::themes.elements.components.field-details', [\n          'name' => $name,\n          'type' => $field['type'] ?? 'string',\n          'required' => $field['required'] ?? false,\n          'deprecated' => $field['deprecated'] ?? false,\n          'description' => $field['description'] ?? '',\n          'example' => $field['example'] ?? '',\n          'enumValues' => $field['enumValues'] ?? null,\n          'endpointId' => $endpointId,\n          'hasChildren' => !empty($field['__fields']),\n          'component' => 'body',\n        ])\n        @endcomponent\n\n        @if(!empty($field['__fields']))\n            <div class=\"children\" style=\"{{ $expandable ? 'display: none;' : '' }}\">\n                @component('scribe::themes.elements.components.nested-fields', [\n                  'fields' => $field['__fields'],\n                  'endpointId' => $endpointId,\n                  'level' => $level + 1,\n                  'expandable'=> $expandable,\n                ])\n                @endcomponent\n            </div>\n        @endif\n    </div>\n@endforeach\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/endpoint.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\Utils as u;\n    /** @var  Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n\n<div class=\"sl-stack sl-stack--vertical sl-stack--8 HttpOperation sl-flex sl-flex-col sl-items-stretch sl-w-full\">\n    <div class=\"sl-stack sl-stack--vertical sl-stack--5 sl-flex sl-flex-col sl-items-stretch\">\n        <div class=\"sl-relative\">\n            <div class=\"sl-stack sl-stack--horizontal sl-stack--5 sl-flex sl-flex-row sl-items-center\">\n                <h2 class=\"sl-text-3xl sl-leading-tight sl-font-prose sl-text-heading sl-mt-5 sl-mb-1\"\n                    id=\"{!! $endpoint->fullSlug() !!}\">\n                    {{ $endpoint->name() }}\n                </h2>\n            </div>\n        </div>\n\n        <div class=\"sl-relative\">\n            <div title=\"{!! rtrim($baseUrl, '/') . '/'. ltrim($endpoint->uri, '/') !!}\"\n                     class=\"sl-stack sl-stack--horizontal sl-stack--3 sl-inline-flex sl-flex-row sl-items-center sl-max-w-full sl-font-mono sl-py-2 sl-pr-4 sl-bg-canvas-50 sl-rounded-lg\"\n                >\n                    @foreach($endpoint->httpMethods as $method)\n                        <div class=\"sl-text-lg sl-font-semibold sl-px-2.5 sl-py-1 sl-text-on-primary sl-rounded-lg\"\n                             style=\"background-color: {{ \\Knuckles\\Scribe\\Tools\\WritingUtils::$httpMethodToCssColour[$method] }};\"\n                        >\n                            {{ $method }}\n                        </div>\n                    @endforeach\n                    <div class=\"sl-flex sl-overflow-x-hidden sl-text-lg sl-select-all\">\n                        <div dir=\"rtl\"\n                             class=\"sl-overflow-x-hidden sl-truncate sl-text-muted\">{!! rtrim($baseUrl, '/') !!}</div>\n                        <div class=\"sl-flex-1 sl-font-semibold\">/{{ ltrim($endpoint->uri, '/') }}</div>\n                    </div>\n\n                        @if($endpoint->metadata->authenticated)\n                            <div class=\"sl-font-prose sl-font-semibold sl-px-1.5 sl-py-0.5 sl-text-on-primary sl-rounded-lg\"\n                                 style=\"background-color: darkred\"\n                            >requires authentication\n                            </div>\n                        @endif\n                        @if($endpoint->metadata->deprecated === true)\n                            <div class=\"sl-font-prose sl-font-semibold sl-px-1.5 sl-py-0.5 sl-text-on-primary sl-rounded-lg\"\n                                 style=\"background-color: darkgoldenrod\"\n                            >deprecated\n                            </div>\n                        @endif\n                        @if(is_string($endpoint->metadata->deprecated))\n                            <div class=\"sl-font-prose sl-font-semibold sl-px-1.5 sl-py-0.5 sl-text-on-primary sl-rounded-lg\"\n                                 style=\"background-color: darkgoldenrod\"\n                            >deprecated:{{$endpoint->metadata->deprecated}}\n                            </div>\n                        @endif\n            </div>\n        </div>\n\n        {!! Parsedown::instance()->text($endpoint->metadata->description ?: '') !!}\n    </div>\n    <div class=\"sl-flex\">\n        <div data-testid=\"two-column-left\" class=\"sl-flex-1 sl-w-0\">\n            <div class=\"sl-stack sl-stack--vertical sl-stack--10 sl-flex sl-flex-col sl-items-stretch\">\n                <div class=\"sl-stack sl-stack--vertical sl-stack--8 sl-flex sl-flex-col sl-items-stretch\">\n                    @if(count($endpoint->headers))\n                        <div class=\"sl-stack sl-stack--vertical sl-stack--5 sl-flex sl-flex-col sl-items-stretch\">\n                            <h3 class=\"sl-text-2xl sl-leading-snug sl-font-prose\">\n                                {{ u::trans(\"scribe::endpoint.headers\") }}\n                            </h3>\n                            <div class=\"sl-text-sm\">\n                                @foreach($endpoint->headers as $header => $value)\n                                    @component('scribe::themes.elements.components.field-details', [\n                                      'name' => $header,\n                                      'type' => null,\n                                      'required' => false,\n                                      'deprecated' => false,\n                                      'description' => null,\n                                      'example' => $value,\n                                      'endpointId' => $endpoint->endpointId(),\n                                      'component' => 'header',\n                                      'isInput' => true,\n                                    ])\n                                    @endcomponent\n                                @endforeach\n                            </div>\n                        </div>\n                    @endif\n\n                    @if(count($endpoint->urlParameters))\n                        <div class=\"sl-stack sl-stack--vertical sl-stack--6 sl-flex sl-flex-col sl-items-stretch\">\n                            <h3 class=\"sl-text-2xl sl-leading-snug sl-font-prose\">{{ u::trans(\"scribe::endpoint.url_parameters\") }}</h3>\n\n                            <div class=\"sl-text-sm\">\n                                @foreach($endpoint->urlParameters as $attribute => $parameter)\n                                    @component('scribe::themes.elements.components.field-details', [\n                                      'name' => $parameter->name,\n                                      'type' => $parameter->type ?? 'string',\n                                      'required' => $parameter->required,\n                                      'deprecated' => $parameter->deprecated,\n                                      'description' => $parameter->description,\n                                      'example' => $parameter->example ?? '',\n                                      'enumValues' => $parameter->enumValues,\n                                      'endpointId' => $endpoint->endpointId(),\n                                      'component' => 'url',\n                                      'isInput' => true,\n                                    ])\n                                    @endcomponent\n                                @endforeach\n                            </div>\n                        </div>\n                    @endif\n\n\n                    @if(count($endpoint->queryParameters))\n                            <div class=\"sl-stack sl-stack--vertical sl-stack--6 sl-flex sl-flex-col sl-items-stretch\">\n                                <h3 class=\"sl-text-2xl sl-leading-snug sl-font-prose\">{{ u::trans(\"scribe::endpoint.query_parameters\") }}</h3>\n\n                                <div class=\"sl-text-sm\">\n                                    @foreach($endpoint->queryParameters as $attribute => $parameter)\n                                        @component('scribe::themes.elements.components.field-details', [\n                                          'name' => $parameter->name,\n                                          'type' => $parameter->type,\n                                          'required' => $parameter->required,\n                                          'deprecated' => $parameter->deprecated,\n                                          'description' => $parameter->description,\n                                          'example' => $parameter->example ?? '',\n                                          'enumValues' => $parameter->enumValues,\n                                          'endpointId' => $endpoint->endpointId(),\n                                          'component' => 'query',\n                                          'isInput' => true,\n                                        ])\n                                        @endcomponent\n                                    @endforeach\n                            </div>\n                        </div>\n                    @endif\n\n                    @if(count($endpoint->nestedBodyParameters))\n                        <div class=\"sl-stack sl-stack--vertical sl-stack--6 sl-flex sl-flex-col sl-items-stretch\">\n                            <h3 class=\"sl-text-2xl sl-leading-snug sl-font-prose\">{{ u::trans(\"scribe::endpoint.body_parameters\") }}</h3>\n\n                                <div class=\"sl-text-sm\">\n                                    @component('scribe::themes.elements.components.nested-fields', [\n                                      'fields' => $endpoint->nestedBodyParameters,\n                                      'endpointId' => $endpoint->endpointId(),\n                                    ])\n                                    @endcomponent\n                            </div>\n                        </div>\n                    @endif\n\n                    @if(count($endpoint->responseFields))\n                            <div class=\"sl-stack sl-stack--vertical sl-stack--6 sl-flex sl-flex-col sl-items-stretch\">\n                                <h3 class=\"sl-text-2xl sl-leading-snug sl-font-prose\">{{ u::trans(\"scribe::endpoint.response_fields\") }}</h3>\n\n                                <div class=\"sl-text-sm\">\n                                    @component('scribe::themes.elements.components.nested-fields', [\n                                      'fields' => $endpoint->nestedResponseFields,\n                                      'endpointId' => $endpoint->endpointId(),\n                                      'isInput' => false,\n                                    ])\n                                    @endcomponent\n                                </div>\n                            </div>\n                        @endif\n                </div>\n            </div>\n        </div>\n\n        <div data-testid=\"two-column-right\" class=\"sl-relative sl-w-2/5 sl-ml-16\" style=\"max-width: 500px;\">\n            <div class=\"sl-stack sl-stack--vertical sl-stack--6 sl-flex sl-flex-col sl-items-stretch\">\n\n                @if($metadata['try_it_out']['enabled'] ?? false)\n                    @include(\"scribe::themes.elements.try_it_out\")\n                @endif\n\n                    @if($metadata['example_languages'])\n                        <div class=\"sl-panel sl-outline-none sl-w-full sl-rounded-lg\">\n                            <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-3 sl-pl-4 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-select-none\">\n                                <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                                    <div class=\"sl--ml-2\">\n                                        {{ u::trans(\"scribe::endpoint.example_request\") }}:\n                                        <select class=\"example-request-lang-toggle sl-text-base\"\n                                                aria-label=\"Request Sample Language\"\n                                                onchange=\"switchExampleLanguage(event.target.value);\">\n                                            @foreach($metadata['example_languages'] as $language)\n                                                <option>{{ $language }}</option>\n                                            @endforeach\n                                        </select>\n                                    </div>\n                                </div>\n                            </div>\n                            @foreach($metadata['example_languages'] as $index => $language)\n                                <div class=\"sl-bg-canvas-100 example-request example-request-{{ $language }}\"\n                                     style=\"{{ $index == 0 ? '' : 'display: none;' }}\">\n                                    <div class=\"sl-px-0 sl-py-1\">\n                                        <div style=\"max-height: 400px;\" class=\"sl-overflow-y-auto sl-rounded\">\n                                            @include(\"scribe::partials.example-requests.$language\")\n                                        </div>\n                                    </div>\n                                </div>\n                            @endforeach\n                        </div>\n                    @endif\n\n                    @if($endpoint->isGet() || $endpoint->hasResponses())\n                        <div class=\"sl-panel sl-outline-none sl-w-full sl-rounded-lg\">\n                            <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-3 sl-pl-4 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-select-none\">\n                                <div class=\"sl-flex sl-flex-1 sl-items-center sl-py-2\">\n                                    <div class=\"sl--ml-2\">\n                                        <div class=\"sl-h-sm sl-text-base sl-font-medium sl-px-1.5 sl-text-muted sl-rounded sl-border-transparent sl-border\">\n                                            <div class=\"sl-mb-2 sl-inline-block\">{{ u::trans(\"scribe::endpoint.example_response\") }}:</div>\n                                            <div class=\"sl-mb-2 sl-inline-block\">\n                                                <select\n                                                        class=\"example-response-{{ $endpoint->endpointId() }}-toggle sl-text-base\"\n                                                        aria-label=\"Response sample\"\n                                                        onchange=\"switchExampleResponse('{{ $endpoint->endpointId() }}', event.target.value);\">\n                                                    @foreach($endpoint->responses as $index => $response)\n                                                        <option value=\"{{ $index }}\">{{ $response->fullDescription() }}</option>\n                                                    @endforeach\n                                                </select></div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <button type=\"button\"\n                                        class=\"sl-button sl-h-sm sl-text-base sl-font-medium sl-px-1.5 hover:sl-bg-canvas-50 active:sl-bg-canvas-100 sl-text-muted hover:sl-text-body focus:sl-text-body sl-rounded sl-border-transparent sl-border disabled:sl-opacity-70\">\n                                    <div class=\"sl-mx-0\">\n                                        <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"copy\"\n                                             class=\"svg-inline--fa fa-copy fa-fw fa-sm sl-icon\" role=\"img\"\n                                             xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n                                            <path fill=\"currentColor\"\n                                                  d=\"M384 96L384 0h-112c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48H464c26.51 0 48-21.49 48-48V128h-95.1C398.4 128 384 113.6 384 96zM416 0v96h96L416 0zM192 352V128h-144c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h192c26.51 0 48-21.49 48-48L288 416h-32C220.7 416 192 387.3 192 352z\"></path>\n                                        </svg>\n                                    </div>\n                                </button>\n                            </div>\n                            @foreach($endpoint->responses as $index => $response)\n                                <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 example-response-{{ $endpoint->endpointId() }} example-response-{{ $endpoint->endpointId() }}-{{ $index }}\"\n                                     style=\" {{ $index == 0 ? '' : 'display: none;' }}\"\n                                >\n                                    <div class=\"sl-panel__content sl-p-0\">@if(count($response->headers))\n                                            <details class=\"sl-pl-2\">\n                                                <summary style=\"cursor: pointer; list-style: none;\">\n                                                    <small>\n                                                        <span class=\"expansion-chevrons\">\n\n    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n         data-icon=\"chevron-right\"\n         class=\"svg-inline--fa fa-chevron-right fa-fw sl-icon sl-text-muted\"\n         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n        <path fill=\"currentColor\"\n              d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"></path>\n    </svg>\n                                                            </span>\n                                                        Headers\n                                                    </small>\n                                                </summary>\n                                                @php\n                                                    $headerLines = [];\n                                                    foreach($response->headers as $header => $value) {\n                                                        $headerLines[] = $header . ': ' . (is_array($value) ? implode('; ', $value) : $value);\n                                                    }\n                                                @endphp\n                                                <pre><code class=\"language-http\">{{ implode(\"\\n\", $headerLines) }}</code></pre>\n                                            </details>\n                                        @endif\n                                        @if($response->isBinary())\n                                            <pre><code>[{{ u::trans(\"scribe::endpoint.responses.binary\") }}] - {{ htmlentities(str_replace(\"<<binary>>\", \"\", $response->content)) }}</code></pre>\n                                        @elseif($response->status == 204)\n                                            <pre><code>[{{ u::trans(\"scribe::endpoint.responses.empty\") }}]</code></pre>\n                                        @else\n                                            @php($parsed = json_decode($response->content))\n                                            {{-- If response is a JSON string, prettify it. Otherwise, just print it --}}\n                                            <pre><code style=\"max-height: 300px;\"\n                                                       class=\"language-json sl-overflow-x-auto sl-overflow-y-auto\">{!! htmlentities($parsed != null ? json_encode($parsed, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : $response->content) !!}</code></pre>\n                                        @endif\n                                    </div>\n                                </div>\n                            @endforeach\n                        </div>\n                    @endif\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/groups.blade.php",
    "content": "@foreach($groupedEndpoints as $group)\n    <h1 id=\"{!! Str::slug($group['name']) !!}\"\n        class=\"sl-text-5xl sl-leading-tight sl-font-prose sl-text-heading\"\n    >\n        {!! $group['name'] !!}\n    </h1>\n\n    {!! Parsedown::instance()->text($group['description']) !!}\n\n    @foreach($group['subgroups'] as $subgroupName => $subgroup)\n        @if($subgroupName !== \"\")\n            <h2 id=\"{!! Str::slug($group['name']) !!}-{!! Str::slug($subgroupName) !!}\"\n                class=\"sl-text-3xl sl-leading-tight sl-font-prose sl-text-heading sl-mt-5 sl-mb-3\"\n            >\n                {{ $subgroupName }}\n            </h2>\n            @php($subgroupDescription = collect($subgroup)->first(fn ($e) => $e->metadata->subgroupDescription)?->metadata?->subgroupDescription)\n            @if($subgroupDescription)\n                {!! Parsedown::instance()->text($subgroupDescription) !!}\n            @endif\n            <br>\n        @endif\n        @foreach($subgroup as $endpoint)\n            @include(\"scribe::themes.elements.endpoint\")\n        @endforeach\n    @endforeach\n@endforeach\n\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/index.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\WritingUtils as u;\n@endphp\n\n        <!doctype html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta content=\"IE=edge,chrome=1\" http-equiv=\"X-UA-Compatible\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <title>{!! $metadata['title'] !!}</title>\n\n    <link href=\"https://fonts.googleapis.com/css?family=PT+Sans&display=swap\" rel=\"stylesheet\">\n\n    <link rel=\"stylesheet\" href=\"{!! $assetPathPrefix !!}css/theme-elements.style.css\" media=\"screen\">\n\n    <script src=\"https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js\"></script>\n\n    <link rel=\"stylesheet\"\n          href=\"https://unpkg.com/@highlightjs/cdn-assets@11.6.0/styles/docco.min.css\">\n    <script src=\"https://unpkg.com/@highlightjs/cdn-assets@11.6.0/highlight.min.js\"></script>\n    <script>hljs.highlightAll();</script>\n    <script type=\"module\">\n        import {CodeJar} from 'https://medv.io/codejar/codejar.js'\n        window.CodeJar = CodeJar;\n    </script>\n\n    @if($tryItOut['enabled'] ?? true)\n        <script>\n            var tryItOutBaseUrl = \"{!! $tryItOut['base_url'] ?? $baseUrl !!}\";\n            var useCsrf = Boolean({{ $tryItOut['use_csrf'] ?? null }});\n            var csrfUrl = \"{{ $tryItOut['csrf_url'] ?? null }}\";\n        </script>\n        <script src=\"{{ u::getVersionedAsset($assetPathPrefix.'js/tryitout.js') }}\"></script>\n        <style>\n            .code-editor, .response-content {\n                color: whitesmoke;\n                background-color: transparent;\n            }\n            /*\n             Problem: we want syntax highlighting for the Try It Out JSON body code editor\n             However, the Try It Out area uses a dark background, while request and response samples\n             (which are already highlighted) use a light background. HighlightJS can only use one theme per document.\n             Our options:\n             1. Change the bg of one. => No, it looks out of place on the page.\n             2. Use the same highlighting for both. => Nope, one would be unreadable.\n             3. Copy styles for a dark-bg h1js theme and prefix them for the CodeEditor, which is what we're doing.\n             Since it's only JSON, we only need a few styles anyway.\n             Styles taken from the Nord theme: https://github.com/highlightjs/highlight.js/blob/3997c9b430a568d5ad46d96693b90a74fc01ea7f/src/styles/nord.css#L2\n             */\n            .code-editor > .hljs-attr {\n                color: #8FBCBB;\n            }\n            .code-editor > .hljs-string {\n                color: #A3BE8C;\n            }\n            .code-editor > .hljs-number {\n                color: #B48EAD;\n            }\n            .code-editor > .hljs-literal{\n                color: #81A1C1;\n            }\n\n        </style>\n\n        <script>\n            function tryItOut(btnElement) {\n                btnElement.disabled = true;\n\n                let endpointId = btnElement.dataset.endpoint;\n\n                let errorPanel = document.querySelector(`.tryItOut-error[data-endpoint=${endpointId}]`);\n                errorPanel.hidden = true;\n                let responsePanel = document.querySelector(`.tryItOut-response[data-endpoint=${endpointId}]`);\n                responsePanel.hidden = true;\n\n                let form = btnElement.form;\n                let { method, path, hasjsonbody: hasJsonBody} = form.dataset;\n                let body = {};\n                if (hasJsonBody === \"1\") {\n                    body = form.querySelector('.code-editor').textContent;\n                } else if (form.dataset.hasfiles === \"1\") {\n                    body = new FormData();\n                    form.querySelectorAll('input[data-component=body]')\n                        .forEach(el => {\n                            if (el.type === 'file') {\n                                if (el.files[0]) body.append(el.name, el.files[0])\n                            } else body.append(el.name, el.value);\n                        });\n                } else {\n                    form.querySelectorAll('input[data-component=body]').forEach(el => {\n                        _.set(body, el.name, el.value);\n                    });\n                }\n\n                const urlParameters = form.querySelectorAll('input[data-component=url]');\n                urlParameters.forEach(el => (path = path.replace(new RegExp(`\\\\{${el.name}\\\\??}`), el.value)));\n\n                const headers = Object.fromEntries(Array.from(form.querySelectorAll('input[data-component=header]'))\n                    .map(el => [el.name, (el.dataset.prefix || '') + el.value]));\n\n                const query = {}\n                form.querySelectorAll('input[data-component=query]').forEach(el => {\n                    _.set(query, el.name, el.value);\n                });\n\n                let preflightPromise = Promise.resolve();\n                if (window.useCsrf && window.csrfUrl) {\n                    preflightPromise = makeAPICall('GET', window.csrfUrl).then(() => {\n                        headers['X-XSRF-TOKEN'] = getCookie('XSRF-TOKEN');\n                    });\n                }\n\n                // content type has to be unset otherwise file upload won't work\n                if (form.dataset.hasfiles === \"1\") {\n                    delete headers['Content-Type'];\n                }\n\n                return preflightPromise.then(() => makeAPICall(method, path, body, query, headers, endpointId))\n                    .then(([responseStatus, statusText, responseContent, responseHeaders]) => {\n                        responsePanel.hidden = false;\n                        responsePanel.querySelector(`.response-status`).textContent = responseStatus + \" \" + statusText ;\n\n                        let contentEl = responsePanel.querySelector(`.response-content`);\n                        if (responseContent === '') {\n                            contentEl.textContent = contentEl.dataset.emptyResponseText;\n                            return;\n                        }\n\n                        // Prettify it if it's JSON\n                        let isJson = false;\n                        try {\n                            const jsonParsed = JSON.parse(responseContent);\n                            if (jsonParsed !== null) {\n                                isJson = true;\n                                responseContent = JSON.stringify(jsonParsed, null, 4);\n                            }\n                        } catch (e) {}\n\n                        // Replace HTML entities\n                        responseContent = responseContent.replace(/[<>&]/g, (i) => '&#' + i.charCodeAt(0) + ';');\n\n                        contentEl.innerHTML = responseContent;\n                        isJson && window.hljs.highlightElement(contentEl);\n                    })\n                    .catch(err => {\n                        console.log(err);\n                        let errorMessage = err.message || err;\n                        errorPanel.hidden = false;\n                        errorPanel.querySelector(`.error-message`).textContent = errorMessage;\n                    })\n                    .finally(() => { btnElement.disabled = false } );\n            }\n\n            window.addEventListener('DOMContentLoaded', () => {\n                document.querySelectorAll('.tryItOut-btn').forEach(el => {\n                    el.addEventListener('click', () => tryItOut(el));\n                });\n            })\n        </script>\n    @endif\n\n</head>\n\n<body>\n\n@if($metadata['example_languages'])\n    <script>\n        function switchExampleLanguage(lang) {\n            document.querySelectorAll(`.example-request`).forEach(el => el.style.display = 'none');\n            document.querySelectorAll(`.example-request-${lang}`).forEach(el => el.style.display = 'initial');\n            document.querySelectorAll(`.example-request-lang-toggle`).forEach(el => el.value = lang);\n        }\n    </script>\n@endif\n\n<script>\n    function switchExampleResponse(endpointId, index) {\n        document.querySelectorAll(`.example-response-${endpointId}`).forEach(el => el.style.display = 'none');\n        document.querySelectorAll(`.example-response-${endpointId}-${index}`).forEach(el => el.style.display = 'initial');\n        document.querySelectorAll(`.example-response-${endpointId}-toggle`).forEach(el => el.value = index);\n    }\n\n\n    /*\n     * Requirement: a div with class `expansion-chevrons`\n     *   (or `expansion-chevrons-solid` to use the solid version).\n     * Also add the `expanded` class if your div is expanded by default.\n     */\n    function toggleExpansionChevrons(evt) {\n        let elem = evt.currentTarget;\n\n        let chevronsArea = elem.querySelector('.expansion-chevrons');\n        const solid = chevronsArea.classList.contains('expansion-chevrons-solid');\n        const newState = chevronsArea.classList.contains('expanded') ? 'expand' : 'expanded';\n        if (newState === 'expanded') {\n            const selector = solid ? '#expanded-chevron-solid' : '#expanded-chevron';\n            const template = document.querySelector(selector);\n            const chevron = template.content.cloneNode(true);\n            chevronsArea.replaceChildren(chevron);\n            chevronsArea.classList.add('expanded');\n        } else {\n            const selector = solid ? '#expand-chevron-solid' : '#expand-chevron';\n            const template = document.querySelector(selector);\n            const chevron = template.content.cloneNode(true);\n            chevronsArea.replaceChildren(chevron);\n            chevronsArea.classList.remove('expanded');\n        }\n\n    }\n\n    /**\n     * 1. Make sure the children are inside the parent element\n     * 2. Add `expandable` class to the parent\n     * 3. Add `children` class to the children.\n     * 4. Wrap the default chevron SVG in a div with class `expansion-chevrons`\n     *   (or `expansion-chevrons-solid` to use the solid version).\n     *   Also add the `expanded` class if your div is expanded by default.\n     */\n    function toggleElementChildren(evt) {\n        let elem = evt.currentTarget;\n        let children = elem.querySelector(`.children`);\n        if (!children) return;\n\n        if (children.contains(event.target)) return;\n\n        let oldState = children.style.display\n        if (oldState === 'none') {\n            children.style.removeProperty('display');\n            toggleExpansionChevrons(evt);\n        } else {\n            children.style.display = 'none';\n            toggleExpansionChevrons(evt);\n        }\n\n        evt.stopPropagation();\n    }\n\n    function highlightSidebarItem(evt = null) {\n        if (evt && evt.oldURL) {\n            let oldHash = new URL(evt.oldURL).hash.slice(1);\n            if (oldHash) {\n                let previousItem = window['sidebar'].querySelector(`#toc-item-${oldHash}`);\n                previousItem.classList.remove('sl-bg-primary-tint');\n                previousItem.classList.add('sl-bg-canvas-100');\n            }\n        }\n\n        let newHash = location.hash.slice(1);\n        if (newHash) {\n            let item = window['sidebar'].querySelector(`#toc-item-${newHash}`);\n            item.classList.remove('sl-bg-canvas-100');\n            item.classList.add('sl-bg-primary-tint');\n        }\n    }\n\n    addEventListener('DOMContentLoaded', () => {\n        highlightSidebarItem();\n\n        document.querySelectorAll('.code-editor').forEach(elem => CodeJar(elem, (editor) => {\n            // highlight.js does not trim old tags,\n            // which means highlighting doesn't update on type (only on paste)\n            // See https://github.com/antonmedv/codejar/issues/18\n            editor.textContent = editor.textContent\n            return hljs.highlightElement(editor)\n        }));\n\n        document.querySelectorAll('.expandable').forEach(el => {\n            el.addEventListener('click', toggleElementChildren);\n        });\n\n        document.querySelectorAll('details').forEach(el => {\n            el.addEventListener('toggle', toggleExpansionChevrons);\n        });\n    });\n\n    addEventListener('hashchange', highlightSidebarItem);\n</script>\n\n<div class=\"sl-elements sl-antialiased sl-h-full sl-text-base sl-font-ui sl-text-body sl-flex sl-inset-0\">\n\n    @include(\"scribe::themes.elements.sidebar\")\n\n    <div class=\"sl-overflow-y-auto sl-flex-1 sl-w-full sl-px-16 sl-bg-canvas sl-py-16\" style=\"max-width: 1500px;\">\n\n        <div class=\"sl-mb-10\">\n            <div class=\"sl-mb-4\">\n                <h1 class=\"sl-text-5xl sl-leading-tight sl-font-prose sl-font-semibold sl-text-heading\">\n                    {!! $metadata['title'] !!}\n                </h1>\n                @if($metadata['postman_collection_url'])\n                    <a title=\"Download Postman collection\" class=\"sl-mx-1\"\n                       href=\"{!! $metadata['postman_collection_url'] !!}\" target=\"_blank\">\n                        <small>Postman collection →</small>\n                    </a>\n                @endif\n                @if($metadata['openapi_spec_url'])\n                    <a title=\"Download OpenAPI spec\" class=\"sl-mx-1\"\n                       href=\"{!! $metadata['openapi_spec_url'] !!}\" target=\"_blank\">\n                        <small>OpenAPI spec →</small>\n                    </a>\n                @endif\n            </div>\n\n            <div class=\"sl-prose sl-markdown-viewer sl-my-4\">\n                {!! $intro !!}\n\n                {!! $auth !!}\n            </div>\n        </div>\n\n        @include(\"scribe::themes.elements.groups\")\n\n        <div class=\"sl-prose sl-markdown-viewer sl-my-5\">\n            {!! $append !!}\n        </div>\n    </div>\n\n</div>\n\n<template id=\"expand-chevron\">\n    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n         data-icon=\"chevron-right\"\n         class=\"svg-inline--fa fa-chevron-right fa-fw sl-icon sl-text-muted\"\n         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n        <path fill=\"currentColor\"\n              d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"></path>\n    </svg>\n</template>\n\n<template id=\"expanded-chevron\">\n    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n         data-icon=\"chevron-down\"\n         class=\"svg-inline--fa fa-chevron-down fa-fw sl-icon sl-text-muted\"\n         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n        <path fill=\"currentColor\"\n              d=\"M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z\"></path>\n    </svg>\n</template>\n\n<template id=\"expand-chevron-solid\">\n    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"caret-right\"\n         class=\"svg-inline--fa fa-caret-right fa-fw sl-icon\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\n         viewBox=\"0 0 256 512\">\n        <path fill=\"currentColor\"\n              d=\"M118.6 105.4l128 127.1C252.9 239.6 256 247.8 256 255.1s-3.125 16.38-9.375 22.63l-128 127.1c-9.156 9.156-22.91 11.9-34.88 6.943S64 396.9 64 383.1V128c0-12.94 7.781-24.62 19.75-29.58S109.5 96.23 118.6 105.4z\"></path>\n    </svg>\n</template>\n\n<template id=\"expanded-chevron-solid\">\n    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n         data-icon=\"caret-down\"\n         class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n        <path fill=\"currentColor\"\n              d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n    </svg>\n</template>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/sidebar.blade.php",
    "content": "<div id=\"sidebar\" class=\"sl-flex sl-overflow-y-auto sl-flex-col sl-sticky sl-inset-y-0 sl-pt-8 sl-bg-canvas-100 sl-border-r\"\n     style=\"width: calc((100% - 1800px) / 2 + 300px); padding-left: calc((100% - 1800px) / 2); min-width: 300px; max-height: 100vh\">\n    <div class=\"sl-flex sl-items-center sl-mb-5 sl-ml-4\">\n        @if($metadata['logo'] != false)\n            <div class=\"sl-inline sl-overflow-x-hidden sl-overflow-y-hidden sl-mr-3 sl-rounded-lg\"\n                 style=\"background-color: transparent;\">\n                <img src=\"{{ $metadata['logo'] }}\" height=\"30px\" width=\"30px\" alt=\"logo\">\n            </div>\n        @endif\n        <h4 class=\"sl-text-paragraph sl-leading-snug sl-font-prose sl-font-semibold sl-text-heading\">\n            {{ $metadata['title'] }}\n        </h4>\n    </div>\n\n    <div class=\"sl-flex sl-overflow-y-auto sl-flex-col sl-flex-grow sl-flex-shrink\">\n        <div class=\"sl-overflow-y-auto sl-w-full sl-bg-canvas-100\">\n            <div class=\"sl-my-3\">\n                @foreach($headings as $h1)\n                    <div class=\"expandable\">\n                        <div title=\"{!! $h1['name'] !!}\" id=\"toc-item-{!! $h1['slug'] !!}\"\n                             class=\"sl-flex sl-items-center sl-h-md sl-pr-4 sl-pl-4 sl-bg-canvas-100 hover:sl-bg-canvas-200 sl-cursor-pointer sl-select-none\">\n                            <a href=\"#{!! $h1['slug'] !!}\"\n                               class=\"sl-flex-1 sl-items-center sl-truncate sl-mr-1.5 sl-p-0\">{!! $h1['name'] !!}</a>\n                            @if(count($h1['subheadings']) > 0)\n                                <div class=\"sl-flex sl-items-center sl-text-xs expansion-chevrons\">\n                                    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                         data-icon=\"chevron-right\"\n                                         class=\"svg-inline--fa fa-chevron-right fa-fw sl-icon sl-text-muted\"\n                                         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                        <path fill=\"currentColor\"\n                                              d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"></path>\n                                    </svg>\n                                </div>\n                            @endif\n                        </div>\n\n                        @if(count($h1['subheadings']) > 0)\n                            <div class=\"children\" style=\"display: none;\">\n                                @foreach($h1['subheadings'] as $h2)\n                                    <div class=\"expandable\">\n                                        <div class=\"sl-flex sl-items-center sl-h-md sl-pr-4 sl-pl-8 sl-bg-canvas-100 hover:sl-bg-canvas-200 sl-cursor-pointer sl-select-none\"\n                                             id=\"toc-item-{!! $h2['slug'] !!}\">\n                                            <div class=\"sl-flex-1 sl-items-center sl-truncate sl-mr-1.5 sl-p-0\" title=\"{!! $h2['name'] !!}\">\n                                                <a class=\"ElementsTableOfContentsItem sl-block sl-no-underline\"\n                                                   href=\"#{!! $h2['slug'] !!}\">\n                                                    {!! $h2['name'] !!}\n                                                </a>\n                                            </div>\n                                            @if(count($h2['subheadings']) > 0)\n                                                <div class=\"sl-flex sl-items-center sl-text-xs expansion-chevrons\">\n                                                    <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                                         data-icon=\"chevron-right\"\n                                                         class=\"svg-inline--fa fa-chevron-right fa-fw sl-icon sl-text-muted\"\n                                                         xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                                        <path fill=\"currentColor\"\n                                                              d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\"></path>\n                                                    </svg>\n                                                </div>\n                                            @endif\n                                        </div>\n\n                                        @if(count($h2['subheadings']) > 0)\n                                            <div class=\"children\" style=\"display: none;\">\n                                                @foreach($h2['subheadings'] as $h3)\n                                                    <a class=\"ElementsTableOfContentsItem sl-block sl-no-underline\"\n                                                       href=\"#{!! $h3['slug'] !!}\">\n                                                        <div title=\"{!! $h3['name'] !!}\" id=\"toc-item-{!! $h3['slug'] !!}\"\n                                                             class=\"sl-flex sl-items-center sl-h-md sl-pr-4 sl-pl-12 sl-bg-canvas-100 hover:sl-bg-canvas-200 sl-cursor-pointer sl-select-none\">\n                                                            {!! $h3['name'] !!}\n                                                        </div>\n                                                    </a>\n                                                @endforeach\n                                            </div>\n                                        @endif\n                                    </div>\n                                @endforeach\n                            </div>\n                        @endif\n                    </div>\n                @endforeach\n            </div>\n\n        </div>\n        <div class=\"sl-flex sl-items-center sl-px-4 sl-py-3 sl-border-t\">\n            {{ $metadata['last_updated'] }}\n        </div>\n\n        <div class=\"sl-flex sl-items-center sl-px-4 sl-py-3 sl-border-t\">\n            <a href=\"http://github.com/knuckleswtf/scribe\">Documentation powered by Scribe ✍</a>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/vendor/scribe/themes/elements/try_it_out.blade.php",
    "content": "@php\n    use Knuckles\\Scribe\\Tools\\Utils as u;\n    /** @var \\Knuckles\\Camel\\Output\\OutputEndpointData $endpoint */\n@endphp\n\n<div class=\"sl-inverted\">\n    <div class=\"sl-overflow-y-hidden sl-rounded-lg\">\n        <form class=\"TryItPanel sl-bg-canvas-100 sl-rounded-lg\"\n              data-method=\"{{ $endpoint->httpMethods[0] }}\"\n              data-path=\"{{ $endpoint->uri }}\"\n              data-hasfiles=\"{{ $endpoint->hasFiles() ? 1 : 0 }}\"\n              data-hasjsonbody=\"{{ $endpoint->hasJsonBody() ? 1 : 0 }}\">\n            @if($endpoint->isAuthed() && $metadata['auth']['location'] !== 'body')\n                <div class=\"sl-panel sl-outline-none sl-w-full expandable\">\n                    <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                         role=\"button\">\n                        <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                            <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                     data-icon=\"caret-down\"\n                                     class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                     xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                    <path fill=\"currentColor\"\n                                          d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                                </svg>\n                            </div>\n                            Auth\n                        </div>\n                    </div>\n                    <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                        <div class=\"ParameterGrid sl-p-4\">\n                            <label aria-hidden=\"true\"\n                                   for=\"auth-{{ $endpoint->endpointId() }}\">{{ $metadata['auth']['name'] }}</label>\n                            <span class=\"sl-mx-3\">:</span>\n                            <div class=\"sl-flex sl-flex-1\">\n                                <div class=\"sl-input sl-flex-1 sl-relative\">\n                                    <code>{{ $metadata['auth']['prefix'] }}</code>\n                                    <input aria-label=\"{{ $metadata['auth']['name'] }}\"\n                                           id=\"auth-{{ $endpoint->endpointId() }}\"\n                                           data-component=\"{{ $metadata['auth']['location'] }}\"\n                                           data-prefix=\"{{ $metadata['auth']['prefix'] }}\"\n                                           name=\"{{ $metadata['auth']['name'] }}\"\n                                           placeholder=\"{{ $metadata['auth']['placeholder'] }}\"\n                                           class=\"auth-value sl-relative {{ $metadata['auth']['prefix'] ? 'sl-w-3/5' : 'sl-w-full sl-pr-2.5 sl-pl-2.5' }} sl-h-md sl-text-base sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            @endif\n\n            @if(count($endpoint->headers))\n                <div class=\"sl-panel sl-outline-none sl-w-full expandable\">\n                    <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                         role=\"button\">\n                        <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                            <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                     data-icon=\"caret-down\"\n                                     class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                     xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                    <path fill=\"currentColor\"\n                                          d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                                </svg>\n                            </div>\n                            Headers\n                        </div>\n                    </div>\n                    <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                        <div class=\"ParameterGrid sl-p-4\">\n                            @foreach($endpoint->headers as $name => $example)\n                                @php\n                                    if($endpoint->isAuthed() && $metadata['auth']['location'] === 'header' && $name === $metadata['auth']['name']) continue;\n                                @endphp\n                                <label aria-hidden=\"true\"\n                                       for=\"header-{{ $endpoint->endpointId() }}-{{ $name }}\">{{ $name }}</label>\n                                <span class=\"sl-mx-3\">:</span>\n                                <div class=\"sl-flex sl-flex-1\">\n                                    <div class=\"sl-input sl-flex-1 sl-relative\">\n                                        <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                               id=\"header-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                               value=\"{{ $example }}\" data-component=\"header\"\n                                               class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\">\n                                    </div>\n                                </div>\n                            @endforeach\n                        </div>\n                    </div>\n                </div>\n            @endif\n\n            @if(count($endpoint->urlParameters))\n                <div class=\"sl-panel sl-outline-none sl-w-full expandable\">\n                    <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                         role=\"button\">\n                        <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                            <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                     data-icon=\"caret-down\"\n                                     class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                     xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                    <path fill=\"currentColor\"\n                                          d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                                </svg>\n                            </div>\n                            URL Parameters\n                        </div>\n                    </div>\n                    <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                        <div class=\"ParameterGrid sl-p-4\">\n                            @foreach($endpoint->urlParameters as $name => $parameter)\n                                <label aria-hidden=\"true\"\n                                       for=\"urlparam-{{ $endpoint->endpointId() }}-{{ $name }}\">{{ $name }}</label>\n                                <span class=\"sl-mx-3\">:</span>\n                                <div class=\"sl-flex sl-flex-1\">\n                                    <div class=\"sl-input sl-flex-1 sl-relative\">\n                                        <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                               id=\"urlparam-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                               placeholder=\"{{ $parameter->description }}\"\n                                               value=\"{{ $parameter->example }}\" data-component=\"url\"\n                                               class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\">\n                                    </div>\n                                </div>\n                            @endforeach\n                        </div>\n                    </div>\n                </div>\n            @endif\n\n            @if(count($endpoint->queryParameters))\n                <div class=\"sl-panel sl-outline-none sl-w-full expandable\">\n                    <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                         role=\"button\">\n                        <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                            <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                     data-icon=\"caret-down\"\n                                     class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                     xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                    <path fill=\"currentColor\"\n                                          d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                                </svg>\n                            </div>\n                            Query Parameters\n                        </div>\n                    </div>\n                    <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                        <div class=\"ParameterGrid sl-p-4\">\n                            @foreach($endpoint->queryParameters as $name => $parameter)\n                                @php\n                                    /** @var \\Knuckles\\Camel\\Output\\Parameter $parameter */\n                                    if ($parameter->type == 'object') // Skip; individual object children are listed\n                                        continue;\n                                    if (str_contains($name, \"[]\"))\n                                        // This likely belongs to an obj-array (eg objs[].a); we only show the parent (objs[]), so skip\n                                        continue;\n                                    if($endpoint->isAuthed() && $metadata['auth']['location'] === 'query'\n                                    && $name === $metadata['auth']['name']) continue;\n                                @endphp\n                                <label aria-hidden=\"true\"\n                                       for=\"queryparam-{{ $endpoint->endpointId() }}-{{ $name }}\">{{ $name }}</label>\n                                <span class=\"sl-mx-3\">:</span>\n                                <div class=\"sl-flex sl-flex-1\">\n                                    <div class=\"sl-input sl-flex-1 sl-relative\">\n                                        @if(str_ends_with($parameter->type, '[]'))\n                                            <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                                   id=\"queryparam-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                                   placeholder=\"{{ $parameter->description }}\"\n                                                   value=\"{{ json_encode($parameter->example, JSON_HEX_TAG | JSON_HEX_AMP) }}\" data-component=\"query\"\n                                                   class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\"\n                                            >\n                                        @else\n                                            <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                                   id=\"queryparam-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                                   placeholder=\"{{ $parameter->description }}\"\n                                                   value=\"{{ $parameter->example }}\" data-component=\"query\"\n                                                   class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\"\n                                            >\n                                        @endif\n                                    </div>\n                                </div>\n                            @endforeach\n                        </div>\n                    </div>\n                </div>\n            @endif\n\n            @if(count($endpoint->bodyParameters))\n                <div class=\"sl-panel sl-outline-none sl-w-full expandable\">\n                    <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                         role=\"button\">\n                        <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                            <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                     data-icon=\"caret-down\"\n                                     class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                     xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                    <path fill=\"currentColor\"\n                                          d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                                </svg>\n                            </div>\n                            Body\n                        </div>\n                    </div>\n                    <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                        @if($endpoint->hasJsonBody())\n                            <div class=\"TextRequestBody sl-p-4\">\n                                <div class=\"code-editor language-json\"\n                                     id=\"json-body-{{ $endpoint->endpointId() }}\"\n                                     style=\"font-family: var(--font-code); font-size: 12px; line-height: var(--lh-code);\"\n                                >{!! json_encode($endpoint->getSampleBody(), JSON_PRETTY_PRINT | JSON_HEX_TAG | JSON_HEX_AMP) !!}</div>\n                            </div>\n                        @else\n                            <div class=\"ParameterGrid sl-p-4\">\n                                @foreach($endpoint->bodyParameters as $name => $parameter)\n                                    @php\n                                        /** @var \\Knuckles\\Camel\\Output\\Parameter $parameter */\n                                        if ($parameter->type == 'object') // Skip; individual object children are listed\n                                            continue;\n                                        if (str_contains($name, \"[]\"))\n                                            // This likely belongs to an obj-array (eg objs[].a); we only show the parent (objs[]), so skip\n                                            continue;\n                                    @endphp\n                                    <label aria-hidden=\"true\"\n                                           for=\"bodyparam-{{ $endpoint->endpointId() }}-{{ $name }}\">{{ $name }}</label>\n                                    <span class=\"sl-mx-3\">:</span>\n                                    <div class=\"sl-flex sl-flex-1\">\n                                        <div class=\"sl-input sl-flex-1 sl-relative\">\n                                            @if($parameter->type == 'file')\n                                                <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                                       id=\"bodyparam-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                                       type=\"file\" data-component=\"body\"\n                                                       class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\"\n                                                >\n                                            @elseif(str_ends_with($parameter->type, '[]'))\n                                                <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                                       id=\"bodyparam-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                                       placeholder=\"{{ $parameter->description }}\"\n                                                       value=\"{{ json_encode($parameter->example, JSON_HEX_TAG | JSON_HEX_AMP) }}\" data-component=\"body\"\n                                                       class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\"\n                                                >\n                                            @else\n                                                <input aria-label=\"{{ $name }}\" name=\"{{ $name }}\"\n                                                       id=\"bodyparam-{{ $endpoint->endpointId() }}-{{ $name }}\"\n                                                       placeholder=\"{{ $parameter->description }}\"\n                                                       value=\"{{ $parameter->example }}\" data-component=\"body\"\n                                                       class=\"sl-relative sl-w-full sl-h-md sl-text-base sl-pr-2.5 sl-pl-2.5 sl-rounded sl-border-transparent hover:sl-border-input focus:sl-border-primary sl-border\"\n                                                >\n                                            @endif\n                                        </div>\n                                    </div>\n                                @endforeach\n                            </div>\n                        @endif\n                    </div>\n                </div>\n            @endif\n\n            <div class=\"SendButtonHolder sl-mt-4 sl-p-4 sl-pt-0\">\n                <div class=\"sl-stack sl-stack--horizontal sl-stack--2 sl-flex sl-flex-row sl-items-center\">\n                    <button type=\"button\" data-endpoint=\"{{ $endpoint->endpointId() }}\"\n                            class=\"tryItOut-btn sl-button sl-h-sm sl-text-base sl-font-medium sl-px-1.5 sl-bg-primary hover:sl-bg-primary-dark active:sl-bg-primary-darker disabled:sl-bg-canvas-100 sl-text-on-primary disabled:sl-text-body sl-rounded sl-border-transparent sl-border disabled:sl-opacity-70\"\n                    >\n                        {{ u::trans(\"scribe::try_it_out.send\") }}\n                    </button>\n                </div>\n            </div>\n\n            <div data-endpoint=\"{{ $endpoint->endpointId() }}\"\n                 class=\"tryItOut-error expandable sl-panel sl-outline-none sl-w-full\" hidden>\n                <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                     role=\"button\">\n                    <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                        <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                            <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                 data-icon=\"caret-down\"\n                                 class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                 xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                <path fill=\"currentColor\"\n                                      d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                            </svg>\n                        </div>\n                        {{ u::trans(\"scribe::try_it_out.request_failed\") }}\n                    </div>\n                </div>\n                <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                    <div class=\"sl-panel__content sl-p-4\">\n                        <p class=\"sl-pb-2\"><strong class=\"error-message\"></strong></p>\n                        <p class=\"sl-pb-2\">{{ u::trans(\"scribe::try_it_out.error_help\") }}</p>\n                    </div>\n                </div>\n            </div>\n\n                <div data-endpoint=\"{{ $endpoint->endpointId() }}\"\n                     class=\"tryItOut-response expandable sl-panel sl-outline-none sl-w-full\" hidden>\n                    <div class=\"sl-panel__titlebar sl-flex sl-items-center sl-relative focus:sl-z-10 sl-text-base sl-leading-none sl-pr-4 sl-pl-3 sl-bg-canvas-200 sl-text-body sl-border-input focus:sl-border-primary sl-cursor-pointer sl-select-none\"\n                         role=\"button\">\n                        <div class=\"sl-flex sl-flex-1 sl-items-center sl-h-lg\">\n                            <div class=\"sl-flex sl-items-center sl-mr-1.5 expansion-chevrons expansion-chevrons-solid expanded\">\n                                <svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\n                                     data-icon=\"caret-down\"\n                                     class=\"svg-inline--fa fa-caret-down fa-fw sl-icon\" role=\"img\"\n                                     xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n                                    <path fill=\"currentColor\"\n                                          d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\"></path>\n                                </svg>\n                            </div>\n                            {{ u::trans(\"scribe::try_it_out.received_response\") }}\n                        </div>\n                    </div>\n                    <div class=\"sl-panel__content-wrapper sl-bg-canvas-100 children\" role=\"region\">\n                        <div class=\"sl-panel__content sl-p-4\">\n                            <p class=\"sl-pb-2 response-status\"></p>\n                            <pre><code class=\"sl-pb-2 response-content language-json\"\n                                       data-empty-response-text=\"<{{ u::trans(\"scribe::endpoint.responses.empty\") }}>\"\n                                       style=\"max-height: 300px;\"></code></pre>\n                        </div>\n                    </div>\n                </div>\n        </form>\n    </div>\n</div>\n"
  },
  {
    "path": "routes/ai.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Middleware\\SetApiTeamContext;\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse Illuminate\\Support\\Facades\\Route;\nuse Laravel\\Mcp\\Facades\\Mcp;\n\n$mcpDomain = config('app.mcp_domain');\n$mcpPath = $mcpDomain ? '/' : '/mcp';\n$mcpMiddleware = ['auth:sanctum', 'throttle:mcp', SetApiTeamContext::class];\n\nif ($mcpDomain) {\n    Route::domain($mcpDomain)->group(function () use ($mcpPath, $mcpMiddleware): void {\n        Mcp::web($mcpPath, RelaticleServer::class)\n            ->middleware($mcpMiddleware);\n    });\n} else {\n    Mcp::web($mcpPath, RelaticleServer::class)\n        ->middleware($mcpMiddleware);\n}\n"
  },
  {
    "path": "routes/api.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Controllers\\Api\\V1\\CompaniesController;\nuse App\\Http\\Controllers\\Api\\V1\\CustomFieldsController;\nuse App\\Http\\Controllers\\Api\\V1\\NotesController;\nuse App\\Http\\Controllers\\Api\\V1\\OpportunitiesController;\nuse App\\Http\\Controllers\\Api\\V1\\PeopleController;\nuse App\\Http\\Controllers\\Api\\V1\\TasksController;\nuse App\\Http\\Middleware\\EnsureTokenHasAbility;\nuse App\\Http\\Middleware\\ForceJsonResponse;\nuse App\\Http\\Middleware\\SetApiTeamContext;\nuse App\\Http\\Resources\\V1\\UserResource;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::prefix('v1')\n    ->middleware([ForceJsonResponse::class, 'auth:sanctum', 'throttle:api', EnsureTokenHasAbility::class, SetApiTeamContext::class])\n    ->group(function (): void {\n        Route::get('user', function (Request $request) {\n            return new UserResource($request->user());\n        });\n\n        Route::apiResource('companies', CompaniesController::class);\n        Route::apiResource('people', PeopleController::class);\n        Route::apiResource('opportunities', OpportunitiesController::class);\n        Route::apiResource('tasks', TasksController::class);\n        Route::apiResource('notes', NotesController::class);\n\n        Route::get('custom-fields', [CustomFieldsController::class, 'index'])->name('custom-fields.index');\n    });\n"
  },
  {
    "path": "routes/web.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Controllers\\AcceptTeamInvitationController;\nuse App\\Http\\Controllers\\Auth\\CallbackController;\nuse App\\Http\\Controllers\\Auth\\RedirectController;\nuse App\\Http\\Controllers\\ContactController;\nuse App\\Http\\Controllers\\HomeController;\nuse App\\Http\\Controllers\\PrivacyPolicyController;\nuse App\\Http\\Controllers\\TermsOfServiceController;\nuse Illuminate\\Session\\Middleware\\AuthenticateSession;\nuse Illuminate\\Support\\Facades\\Route;\nuse Spatie\\Honeypot\\ProtectAgainstSpam;\nuse Spatie\\MarkdownResponse\\Middleware\\ProvideMarkdownResponse;\n\n/*\n|--------------------------------------------------------------------------\n| Web Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register web routes for your application. These\n| routes are loaded by the RouteServiceProvider and all of them will\n| be assigned to the \"web\" middleware group. Make something great!\n|\n*/\n\nRoute::middleware('guest')->group(function () {\n    Route::get('/auth/redirect/{provider}', RedirectController::class)\n        ->name('auth.socialite.redirect')\n        ->middleware('throttle:10,1');\n    Route::get('/auth/callback/{provider}', CallbackController::class)\n        ->name('auth.socialite.callback')\n        ->middleware('throttle:10,1');\n\n    Route::get('/login', fn () => redirect()->to(url()->getAppUrl('login')))->name('login');\n\n    Route::get('/register', fn () => redirect()->to(url()->getAppUrl('register')))->name('register');\n\n    Route::get('/forgot-password', fn () => redirect()->to(url()->getAppUrl('forgot-password')))->name('password.request');\n});\n\nRoute::middleware(ProvideMarkdownResponse::class)->group(function (): void {\n    Route::get('/', HomeController::class);\n    Route::get('/terms-of-service', TermsOfServiceController::class)->name('terms.show');\n    Route::get('/privacy-policy', PrivacyPolicyController::class)->name('policy.show');\n    Route::get('/pricing', fn () => view('pricing'))->name('pricing');\n    Route::get('/contact', [ContactController::class, 'show'])->name('contact');\n    Route::post('/contact', [ContactController::class, 'store'])->middleware(['throttle:5,1', ProtectAgainstSpam::class]);\n});\n\nRoute::get('/dashboard', fn () => redirect()->to(url()->getAppUrl()))->name('dashboard');\n\nRoute::get('/team-invitations/{invitation}', AcceptTeamInvitationController::class)\n    ->middleware(['signed', 'auth', 'verified', AuthenticateSession::class])\n    ->name('team-invitations.accept');\n\n// Legacy documentation redirects\nRoute::get('/documentation/{slug?}', fn (string $slug = '') => redirect(\"/docs/{$slug}\", 301))\n    ->where('slug', '.*');\n\n// Community redirects\nRoute::get('/discord', function () {\n    return redirect()->away(config('services.discord.invite_url'));\n})->name('discord');\n"
  },
  {
    "path": "storage/app/.gitignore",
    "content": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "storage/clockwork/.gitignore",
    "content": "*.json\n*.json.gz\nindex\n"
  },
  {
    "path": "storage/framework/.gitignore",
    "content": "compiled.php\nconfig.php\ndown\nevents.scanned.php\nmaintenance.php\nroutes.php\nroutes.scanned.php\nschedule-*\nservices.json\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "content": "*\n!data/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/testing/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/pail/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "stubs/Mailcoach.stub",
    "content": "<?php\n\nnamespace Spatie\\MailcoachSdk\\Resources;\n\nclass Subscriber\n{\n    /** @var string */\n    public $uuid;\n\n    /** @var string */\n    public $email;\n\n    /** @var array<string> */\n    public $tags;\n}\n\nnamespace Spatie\\MailcoachSdk\\Facades;\n\n/**\n * @method static \\Spatie\\MailcoachSdk\\Resources\\Subscriber createSubscriber(string $emailListUuid, array<string, mixed> $attributes)\n * @method static ?\\Spatie\\MailcoachSdk\\Resources\\Subscriber findByEmail(string $emailListUuid, string $email)\n * @method static \\Spatie\\MailcoachSdk\\Resources\\Subscriber updateSubscriber(string $subscriberUuid, array<string, mixed> $attributes)\n * @method static \\Spatie\\MailcoachSdk\\Resources\\Subscriber subscriber(string $uuid)\n * @method static void deleteSubscriber(string $subscriberUuid)\n * @method static void confirmSubscriber(string $subscriberUuid)\n * @method static void unsubscribeSubscriber(string $subscriberUuid)\n * @method static void resubscribeSubscriber(string $subscriberUuid)\n * @method static void resendConfirmation(string $subscriberUuid)\n *\n * @see \\Spatie\\MailcoachSdk\\Mailcoach\n */\nclass Mailcoach\n{\n}"
  },
  {
    "path": "tests/Arch/ArchTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Exports\\BaseExporter;\nuse App\\Filament\\Imports\\BaseImporter;\nuse App\\Filament\\Pages\\Import\\ImportPage;\nuse App\\Livewire\\BaseLivewireComponent;\nuse App\\Mcp\\Tools\\BaseAttachTool;\nuse App\\Mcp\\Tools\\BaseCreateTool;\nuse App\\Mcp\\Tools\\BaseDeleteTool;\nuse App\\Mcp\\Tools\\BaseDetachTool;\nuse App\\Mcp\\Tools\\BaseListTool;\nuse App\\Mcp\\Tools\\BaseShowTool;\nuse App\\Mcp\\Tools\\BaseUpdateTool;\nuse App\\Models\\PersonalAccessToken;\n\narch()->preset()->php();\n\n// arch()->preset()->strict();\n\narch()->preset()->security()->ignoring('assert');\n\narch()->preset()\n    ->laravel()\n    ->ignoring([\n        'App\\Providers\\AppServiceProvider',\n        'App\\Providers\\Filament\\AppPanelProvider',\n        'Relaticle\\Admin\\AdminPanelProvider',\n        'App\\Enums\\EnumValues',\n        'App\\Enums\\CustomFields\\CustomFieldTrait',\n        'App\\Mcp',\n    ]);\n\narch('strict types')\n    ->expect('App')\n    ->toUseStrictTypes();\n\narch('avoid open for extension')\n    ->expect('App')\n    ->classes()\n    ->toBeFinal()\n    ->ignoring([\n        BaseLivewireComponent::class,\n        BaseImporter::class,\n        BaseExporter::class,\n        BaseListTool::class,\n        BaseShowTool::class,\n        BaseCreateTool::class,\n        BaseUpdateTool::class,\n        BaseDeleteTool::class,\n        BaseAttachTool::class,\n        BaseDetachTool::class,\n        ImportPage::class,\n        PersonalAccessToken::class,\n    ]);\n\narch('ensure no extends')\n    ->expect('App')\n    ->classes()\n    ->not\n    ->toBeAbstract()\n    ->ignoring([\n        BaseLivewireComponent::class,\n        BaseImporter::class,\n        BaseExporter::class,\n        BaseListTool::class,\n        BaseShowTool::class,\n        BaseCreateTool::class,\n        BaseUpdateTool::class,\n        BaseDeleteTool::class,\n        BaseAttachTool::class,\n        BaseDetachTool::class,\n        ImportPage::class,\n    ]);\n\narch('avoid mutation')\n    ->expect('App')\n    ->classes()\n    ->toBeReadonly()\n    ->ignoring([\n        'App\\Console\\Commands',\n        'App\\Exceptions',\n        'App\\Filament',\n        'App\\Health',\n        'App\\Http\\Requests',\n        'App\\Http\\Resources',\n        'App\\Jobs',\n        'App\\Listeners',\n        'App\\Livewire',\n        'App\\Mail',\n        'App\\Mcp',\n        'App\\Models',\n        'App\\Data',\n        'App\\Notifications',\n        'App\\Providers',\n        'App\\View',\n        'App\\Services\\Favicon\\Drivers',\n        'App\\Providers\\Filament',\n        'App\\Scribe',\n    ]);\n\narch('avoid inheritance')\n    ->expect('App')\n    ->classes()\n    ->toExtendNothing()\n    ->ignoring([\n        'App\\Console\\Commands',\n        'App\\Exceptions',\n        'App\\Filament',\n        'App\\Http\\Requests',\n        'App\\Http\\Resources',\n        'App\\Jobs',\n        'App\\Data',\n        'App\\Livewire',\n        'App\\Mail',\n        'App\\Health',\n        'App\\Mcp',\n        'App\\Models',\n        'App\\Notifications',\n        'App\\Providers',\n        'App\\Scribe',\n        'App\\View',\n    ]);\n\n// arch('annotations')\n//    ->expect('App')\n//    ->toHavePropertiesDocumented()\n//    ->toHaveMethodsDocumented();\n\narch('main app must not depend on SystemAdmin module')\n    ->expect('App')\n    ->not\n    ->toUse('Relaticle\\SystemAdmin')\n    ->ignoring([\n        'App\\Providers\\AppServiceProvider',\n        'App\\Console\\Commands\\InstallCommand',\n        'App\\Console\\Commands\\CreateSystemAdminCommand',\n    ]);\n\narch('SystemAdmin module must not depend on main app namespace')\n    ->expect('Relaticle\\SystemAdmin')\n    ->not\n    ->toUse('App')\n    ->ignoring([\n        'App\\Models',\n        'App\\Enums',\n        'App\\Rules',\n    ]);\n\narch('API controllers must not use Eloquent query methods directly')\n    ->expect('App\\Http\\Controllers\\Api\\V1')\n    ->not\n    ->toUse([\n        'Illuminate\\Support\\Facades\\DB',\n    ]);\n\narch('API controllers must depend on actions for write operations')\n    ->expect('App\\Http\\Controllers\\Api\\V1')\n    ->toOnlyUse([\n        'App\\Actions',\n        'App\\Enums',\n        'App\\Http\\Requests',\n        'App\\Http\\Resources',\n        'App\\Models',\n        'Illuminate',\n        'Knuckles\\Scribe',\n        'response',\n    ]);\n\narch('MCP tools must not use DB facade directly')\n    ->expect('App\\Mcp\\Tools')\n    ->not\n    ->toUse([\n        'Illuminate\\Support\\Facades\\DB',\n    ]);\n\narch('must not use custom-fields package models directly')\n    ->expect([\n        'App',\n        'Relaticle\\ImportWizard',\n        'Relaticle\\OnboardSeed',\n        'Relaticle\\Documentation',\n    ])\n    ->not\n    ->toUse([\n        'Relaticle\\CustomFields\\Models\\CustomField',\n        'Relaticle\\CustomFields\\Models\\CustomFieldOption',\n        'Relaticle\\CustomFields\\Models\\CustomFieldSection',\n        'Relaticle\\CustomFields\\Models\\CustomFieldValue',\n    ])\n    ->ignoring([\n        'App\\Models\\CustomField',\n        'App\\Models\\CustomFieldOption',\n        'App\\Models\\CustomFieldSection',\n        'App\\Models\\CustomFieldValue',\n    ]);\n"
  },
  {
    "path": "tests/Browser/Auth/LoginBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Pages\\Auth\\Login;\nuse App\\Models\\User;\n\nmutates(Login::class);\n\nit('user can log in and reach the dashboard', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->ownedTeams()->first();\n\n    $this->visit('/app/login')\n        ->type('[id=\"form.email\"]', $user->email)\n        ->type('[id=\"form.password\"]', 'password')\n        ->click('button.fi-btn')\n        ->assertPathIs(\"/app/{$team->slug}/companies\");\n});\n"
  },
  {
    "path": "tests/Browser/Auth/PasswordResetBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Auth\\Pages\\PasswordReset\\RequestPasswordReset;\nuse Filament\\Auth\\Pages\\PasswordReset\\ResetPassword;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Password;\n\nmutates(RequestPasswordReset::class, ResetPassword::class);\n\nit('can navigate to forgot password from login and request a reset link', function (): void {\n    $user = User::factory()->withTeam()->create();\n\n    $this->visit('/app/login')\n        ->click('a[href*=\"password-reset\"]')\n        ->assertPathContains('/password-reset/request')\n        ->assertSee('Forgot password?')\n        ->type('[id=\"form.email\"]', $user->email)\n        ->press('Send email')\n        ->waitForText('We have emailed your password reset link', 10)\n        ->assertSee('We have emailed your password reset link');\n});\n\nit('can reset password using a valid reset link', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $token = Password::broker('users')->createToken($user);\n\n    $resetUrl = Filament::getPanel('app')->getResetPasswordUrl($token, $user);\n\n    $this->visit('/app/login')\n        ->navigate($resetUrl)\n        ->assertSee('Reset password')\n        ->type('[id=\"form.password\"]', 'new-secure-password')\n        ->type('[id=\"form.passwordConfirmation\"]', 'new-secure-password')\n        ->press('Reset password')\n        ->waitForText('Your password has been reset', 10)\n        ->assertPathContains('/login');\n\n    expect(Hash::check('new-secure-password', $user->fresh()->password))->toBeTrue();\n});\n"
  },
  {
    "path": "tests/Browser/CRM/CompanyBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Models\\Company;\nuse App\\Models\\User;\n\nmutates(CompanyResource::class);\n\nit('can create a company through the browser', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->ownedTeams()->first();\n\n    $this->visit('/app/login')\n        ->type('[id=\"form.email\"]', $user->email)\n        ->type('[id=\"form.password\"]', 'password')\n        ->click('button.fi-btn')\n        ->assertPathIs(\"/app/{$team->slug}/companies\")\n        ->press('New company')\n        ->type('[id=\"mountedActionSchema0.name\"]', 'Browser Test Corp')\n        ->press('Create')\n        ->assertSee('Browser Test Corp');\n\n    expect(Company::where('name', 'Browser Test Corp')->where('team_id', $team->id)->exists())->toBeTrue();\n});\n"
  },
  {
    "path": "tests/Browser/ImportWizard/ImportWizardBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Relaticle\\ImportWizard\\Livewire\\ImportWizard;\n\nmutates(ImportWizard::class);\n\nit('can navigate the import wizard and upload a CSV file', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->ownedTeams()->first();\n\n    $this->visit('/app/login')\n        ->type('[id=\"form.email\"]', $user->email)\n        ->type('[id=\"form.password\"]', 'password')\n        ->click('button.fi-btn')\n        ->assertPathIs(\"/app/{$team->slug}/companies\")\n        ->navigate(\"/app/{$team->slug}/companies/import\")\n        ->assertSee('Import Companies')\n        ->assertSee('Drop your .CSV file onto this area to upload');\n\n    // The full upload + wizard flow involves Livewire file uploads and complex\n    // server-side state transitions that are better covered by the existing\n    // Livewire feature tests in tests/Feature/ImportWizard/.\n});\n"
  },
  {
    "path": "tests/Browser/Onboarding/OnboardingBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Pages\\CreateTeam;\nuse App\\Models\\User;\n\nmutates(CreateTeam::class);\n\nit('new user without teams is directed to create a workspace', function (): void {\n    $user = User::factory()->create();\n\n    $this->visit('/app/login')\n        ->type('[id=\"form.email\"]', $user->email)\n        ->type('[id=\"form.password\"]', 'password')\n        ->click('button.fi-btn')\n        ->assertPathIs('/app/new')\n        ->navigate('/app/new')\n        ->assertSee('Create your workspace')\n        ->type('[id=\"form.name\"]', 'My First Workspace')\n        ->type('[id=\"form.slug\"]', 'my-first-workspace')\n        ->press('Create Team')\n        ->assertPathContains('/app/my-first-workspace/companies');\n\n    $user->refresh();\n\n    expect($user->ownedTeams)->toHaveCount(1)\n        ->and($user->ownedTeams->first()->name)->toBe('My First Workspace');\n});\n"
  },
  {
    "path": "tests/Browser/SmokeBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nit('public pages have no javascript errors', function (): void {\n    $this->visit('/')\n        ->assertNoJavaScriptErrors();\n});\n"
  },
  {
    "path": "tests/Browser/Teams/TeamBrowserTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Pages\\CreateTeam;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nmutates(CreateTeam::class);\n\nit('can create a new team through the browser', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->ownedTeams()->first();\n\n    $this->visit('/app/login')\n        ->type('[id=\"form.email\"]', $user->email)\n        ->type('[id=\"form.password\"]', 'password')\n        ->click('button.fi-btn')\n        ->assertPathIs(\"/app/{$team->slug}/companies\")\n        ->navigate('/app/new')\n        ->assertSee('Create your workspace')\n        ->type('[id=\"form.name\"]', 'Second Workspace')\n        ->type('[id=\"form.slug\"]', 'second-workspace')\n        ->press('Create Team')\n        ->assertPathContains('/app/second-workspace/companies');\n\n    expect(Team::where('name', 'Second Workspace')->where('user_id', $user->id)->exists())->toBeTrue();\n});\n"
  },
  {
    "path": "tests/Feature/AI/RecordSummaryServiceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CustomFields\\CompanyField;\nuse App\\Models\\AiSummary;\nuse App\\Models\\Company;\nuse App\\Models\\Concerns\\HasAiSummary;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse App\\Services\\AI\\RecordContextBuilder;\nuse App\\Services\\AI\\RecordSummaryService;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Relations\\MorphOne;\nuse Prism\\Prism\\Enums\\FinishReason;\nuse Prism\\Prism\\Facades\\Prism;\nuse Prism\\Prism\\Testing\\TextResponseFake;\nuse Prism\\Prism\\ValueObjects\\Usage;\n\nmutates(RecordContextBuilder::class, RecordSummaryService::class, HasAiSummary::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    Filament::setTenant($this->user->currentTeam);\n});\n\ndescribe('RecordContextBuilder', function () {\n    it('builds context for a company', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create(['name' => 'Test Company']);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($company);\n\n        expect($context)\n            ->toHaveKey('entity_type', 'Company')\n            ->toHaveKey('name', 'Test Company')\n            ->toHaveKey('basic_info')\n            ->toHaveKey('relationships')\n            ->toHaveKey('notes')\n            ->toHaveKey('tasks');\n    });\n\n    it('builds context for a person', function () {\n        $person = People::factory()\n            ->for($this->user->currentTeam)\n            ->create(['name' => 'John Doe']);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($person);\n\n        expect($context)\n            ->toHaveKey('entity_type', 'Person')\n            ->toHaveKey('name', 'John Doe')\n            ->toHaveKey('basic_info')\n            ->toHaveKey('notes')\n            ->toHaveKey('tasks');\n    });\n\n    it('builds context for an opportunity', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $opportunity = Opportunity::factory()\n            ->for($this->user->currentTeam)\n            ->for($company)\n            ->create(['name' => 'Test Deal']);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($opportunity);\n\n        expect($context)\n            ->toHaveKey('entity_type', 'Opportunity')\n            ->toHaveKey('basic_info')\n            ->toHaveKey('company', $company->name)\n            ->toHaveKey('notes')\n            ->toHaveKey('tasks');\n    });\n\n    it('includes related notes in context', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $notes = Note::factory()\n            ->for($this->user->currentTeam)\n            ->count(3)\n            ->create();\n\n        $company->notes()->attach($notes);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($company->fresh());\n\n        expect($context['notes'])\n            ->toHaveKey('items')\n            ->toHaveKey('showing', 3)\n            ->toHaveKey('total', 3)\n            ->toHaveKey('has_more', false)\n            ->and($context['notes']['items'])->toHaveCount(3);\n    });\n\n    it('includes related tasks in context', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $tasks = Task::factory()\n            ->for($this->user->currentTeam)\n            ->count(2)\n            ->create();\n\n        $company->tasks()->attach($tasks);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($company->fresh());\n\n        expect($context['tasks'])\n            ->toHaveKey('items')\n            ->toHaveKey('showing', 2)\n            ->toHaveKey('total', 2)\n            ->toHaveKey('has_more', false)\n            ->and($context['tasks']['items'])->toHaveCount(2);\n    });\n\n    it('limits related records and shows pagination info', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $notes = Note::factory()\n            ->for($this->user->currentTeam)\n            ->count(15)\n            ->create();\n\n        $company->notes()->attach($notes);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($company->fresh());\n\n        expect($context['notes'])\n            ->toHaveKey('showing', 10)\n            ->toHaveKey('total', 15)\n            ->toHaveKey('has_more', true)\n            ->and($context['notes']['items'])->toHaveCount(10);\n    });\n\n    it('handles multi-value custom fields as strings in basic info', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $domainsField = CustomField::query()\n            ->where('code', CompanyField::DOMAINS->value)\n            ->forEntity(Company::class)\n            ->firstOrFail();\n\n        CustomFieldValue::forceCreate([\n            'tenant_id' => $this->user->currentTeam->getKey(),\n            'entity_type' => 'company',\n            'entity_id' => $company->getKey(),\n            'custom_field_id' => $domainsField->getKey(),\n            'json_value' => ['example.com', 'test.org'],\n        ]);\n\n        $builder = app(RecordContextBuilder::class);\n        $context = $builder->buildContext($company);\n\n        expect($context['basic_info']['domain'])\n            ->toBeString()\n            ->toBe('example.com, test.org');\n    });\n\n    it('throws exception for unsupported model', function () {\n        $builder = app(RecordContextBuilder::class);\n        $builder->buildContext(new User);\n    })->throws(InvalidArgumentException::class);\n});\n\ndescribe('RecordSummaryService', function () {\n    it('generates and caches a summary for a company', function () {\n        Prism::fake([\n            TextResponseFake::make()\n                ->withText('Test Company is a promising lead with recent engagement.')\n                ->withUsage(new Usage(100, 50))\n                ->withFinishReason(FinishReason::Stop),\n        ]);\n\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $service = app(RecordSummaryService::class);\n        $summary = $service->getSummary($company);\n\n        expect($summary)\n            ->toBeInstanceOf(AiSummary::class)\n            ->summary->toBe('Test Company is a promising lead with recent engagement.')\n            ->model_used->toBe('claude-haiku-4-5')\n            ->prompt_tokens->toBe(100)\n            ->completion_tokens->toBe(50);\n\n        $this->assertDatabaseHas('ai_summaries', [\n            'summarizable_type' => $company->getMorphClass(),\n            'summarizable_id' => $company->getKey(),\n            'team_id' => $this->user->currentTeam->getKey(),\n        ]);\n    });\n\n    it('returns cached summary when available', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $cached = AiSummary::create([\n            'team_id' => $this->user->currentTeam->getKey(),\n            'summarizable_type' => $company->getMorphClass(),\n            'summarizable_id' => $company->getKey(),\n            'summary' => 'Cached summary text',\n            'model_used' => 'claude-haiku-4-5',\n            'prompt_tokens' => 50,\n            'completion_tokens' => 25,\n        ]);\n\n        $service = app(RecordSummaryService::class);\n        $summary = $service->getSummary($company->fresh());\n\n        expect($summary->id)->toBe($cached->id)\n            ->and($summary->summary)->toBe('Cached summary text');\n    });\n\n    it('regenerates summary when requested', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        AiSummary::create([\n            'team_id' => $this->user->currentTeam->getKey(),\n            'summarizable_type' => $company->getMorphClass(),\n            'summarizable_id' => $company->getKey(),\n            'summary' => 'Old cached summary',\n            'model_used' => 'claude-haiku-4-5',\n            'prompt_tokens' => 50,\n            'completion_tokens' => 25,\n        ]);\n\n        Prism::fake([\n            TextResponseFake::make()\n                ->withText('New regenerated summary')\n                ->withUsage(new Usage(100, 50))\n                ->withFinishReason(FinishReason::Stop),\n        ]);\n\n        $service = app(RecordSummaryService::class);\n        $summary = $service->getSummary($company->fresh(), regenerate: true);\n\n        expect($summary->summary)->toBe('New regenerated summary');\n\n        $this->assertDatabaseCount('ai_summaries', 1);\n        $this->assertDatabaseHas('ai_summaries', [\n            'summary' => 'New regenerated summary',\n        ]);\n    });\n\n    it('generates summary for a person', function () {\n        Prism::fake([\n            TextResponseFake::make()\n                ->withText('John is a key decision maker at Acme Corp.')\n                ->withUsage(new Usage(80, 40))\n                ->withFinishReason(FinishReason::Stop),\n        ]);\n\n        $person = People::factory()\n            ->for($this->user->currentTeam)\n            ->create(['name' => 'John Doe']);\n\n        $service = app(RecordSummaryService::class);\n        $summary = $service->getSummary($person);\n\n        expect($summary->summary)->toBe('John is a key decision maker at Acme Corp.');\n    });\n\n    it('generates summary for an opportunity', function () {\n        Prism::fake([\n            TextResponseFake::make()\n                ->withText('High-value opportunity in negotiation stage.')\n                ->withUsage(new Usage(90, 45))\n                ->withFinishReason(FinishReason::Stop),\n        ]);\n\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $opportunity = Opportunity::factory()\n            ->for($this->user->currentTeam)\n            ->for($company)\n            ->create();\n\n        $service = app(RecordSummaryService::class);\n        $summary = $service->getSummary($opportunity);\n\n        expect($summary->summary)->toBe('High-value opportunity in negotiation stage.');\n    });\n});\n\ndescribe('HasAiSummary trait', function () {\n    it('provides aiSummary relationship on Company', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        expect($company->aiSummary())->toBeInstanceOf(MorphOne::class);\n    });\n\n    it('can invalidate summary directly via trait method', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        AiSummary::create([\n            'team_id' => $this->user->currentTeam->getKey(),\n            'summarizable_type' => $company->getMorphClass(),\n            'summarizable_id' => $company->getKey(),\n            'summary' => 'Test summary',\n            'model_used' => 'claude-haiku-4-5',\n            'prompt_tokens' => 50,\n            'completion_tokens' => 25,\n        ]);\n\n        $this->assertDatabaseHas('ai_summaries', [\n            'summarizable_type' => $company->getMorphClass(),\n            'summarizable_id' => $company->getKey(),\n        ]);\n\n        $company->invalidateAiSummary();\n\n        $this->assertDatabaseMissing('ai_summaries', [\n            'summarizable_type' => $company->getMorphClass(),\n            'summarizable_id' => $company->getKey(),\n        ]);\n    });\n\n    it('can invalidate summary for person', function () {\n        $person = People::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        AiSummary::create([\n            'team_id' => $this->user->currentTeam->getKey(),\n            'summarizable_type' => $person->getMorphClass(),\n            'summarizable_id' => $person->getKey(),\n            'summary' => 'Test summary',\n            'model_used' => 'claude-haiku-4-5',\n            'prompt_tokens' => 50,\n            'completion_tokens' => 25,\n        ]);\n\n        $person->invalidateAiSummary();\n\n        $this->assertDatabaseMissing('ai_summaries', [\n            'summarizable_type' => $person->getMorphClass(),\n            'summarizable_id' => $person->getKey(),\n        ]);\n    });\n\n    it('can invalidate summary for opportunity', function () {\n        $company = Company::factory()\n            ->for($this->user->currentTeam)\n            ->create();\n\n        $opportunity = Opportunity::factory()\n            ->for($this->user->currentTeam)\n            ->for($company)\n            ->create();\n\n        AiSummary::create([\n            'team_id' => $this->user->currentTeam->getKey(),\n            'summarizable_type' => $opportunity->getMorphClass(),\n            'summarizable_id' => $opportunity->getKey(),\n            'summary' => 'Test summary',\n            'model_used' => 'claude-haiku-4-5',\n            'prompt_tokens' => 50,\n            'completion_tokens' => 25,\n        ]);\n\n        $opportunity->invalidateAiSummary();\n\n        $this->assertDatabaseMissing('ai_summaries', [\n            'summarizable_type' => $opportunity->getMorphClass(),\n            'summarizable_id' => $opportunity->getKey(),\n        ]);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/AccessTokens/AccessTokenPermissionsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\AccessTokens\\ManageAccessTokens;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Jetstream\\Features;\n\nmutates(User::class);\n\ntest('api token permissions can be updated', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $token = $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => Str::random(40),\n        'abilities' => ['create', 'read'],\n    ]);\n\n    livewire(ManageAccessTokens::class)\n        ->callTableAction('permissions', $token, data: [\n            'permissions' => ['delete', 'update'],\n        ]);\n\n    $freshToken = $user->fresh()->tokens->first();\n\n    expect($freshToken->abilities)->toBe(['delete', 'update']);\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('table shows team name column', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => Str::random(40),\n        'abilities' => ['read'],\n        'team_id' => $user->currentTeam->id,\n    ]);\n\n    livewire(ManageAccessTokens::class)\n        ->assertCanRenderTableColumn('team.name');\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('table shows expiration column', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $user->tokens()->create([\n        'name' => 'Expiring Token',\n        'token' => Str::random(40),\n        'abilities' => ['read'],\n        'expires_at' => now()->addDays(30),\n    ]);\n\n    livewire(ManageAccessTokens::class)\n        ->assertCanRenderTableColumn('expires_at');\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n"
  },
  {
    "path": "tests/Feature/AccessTokens/CreateAccessTokenTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\AccessTokens\\CreateAccessToken;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Jetstream\\Features;\n\nmutates(User::class);\n\ntest('api tokens can be created with team and expiration', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Test Token',\n            'team_id' => $user->currentTeam->id,\n            'expiration' => '30',\n            'permissions' => ['read', 'update'],\n        ])\n        ->call('createToken')\n        ->assertHasNoFormErrors();\n\n    $token = $user->fresh()->tokens->first();\n\n    expect($token)\n        ->name->toEqual('Test Token')\n        ->team_id->toEqual($user->currentTeam->id)\n        ->can('read')->toBeTrue()\n        ->can('delete')->toBeFalse();\n\n    expect($token->expires_at)->not->toBeNull();\n    expect($token->expires_at->startOfDay()->equalTo(now()->addDays(30)->startOfDay()))->toBeTrue();\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('token with no expiration stores null expires_at', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Forever Token',\n            'team_id' => $user->currentTeam->id,\n            'expiration' => '0',\n            'permissions' => ['read'],\n        ])\n        ->call('createToken')\n        ->assertHasNoFormErrors();\n\n    expect($user->fresh()->tokens->first()->expires_at)->toBeNull();\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('cannot create token for a team user does not belong to', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n    $otherTeam = Team::factory()->create();\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Sneaky Token',\n            'team_id' => $otherTeam->id,\n            'expiration' => '30',\n            'permissions' => ['read'],\n        ])\n        ->call('createToken');\n\n    expect($user->fresh()->tokens)->toHaveCount(0);\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('token name is required', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => '',\n            'permissions' => ['read'],\n        ])\n        ->call('createToken')\n        ->assertHasFormErrors(['name' => 'required']);\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('token name must be unique per user', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $user->tokens()->create([\n        'name' => 'Existing Token',\n        'token' => Str::random(40),\n        'abilities' => ['read'],\n    ]);\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Existing Token',\n            'permissions' => ['read'],\n        ])\n        ->call('createToken')\n        ->assertHasFormErrors(['name' => 'unique']);\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('permissions are required', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Test Token',\n            'permissions' => [],\n        ])\n        ->call('createToken')\n        ->assertHasFormErrors(['permissions' => 'required']);\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('plain text token is shown after creation', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $component = livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Test Token',\n            'team_id' => $user->currentTeam->id,\n            'expiration' => '7',\n            'permissions' => ['read'],\n        ])\n        ->call('createToken');\n\n    expect($component->get('plainTextToken'))->not->toBeNull();\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n\ntest('team_id and expiration are required', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    livewire(CreateAccessToken::class)\n        ->fillForm([\n            'name' => 'Test Token',\n            'team_id' => null,\n            'expiration' => null,\n            'permissions' => ['read'],\n        ])\n        ->call('createToken')\n        ->assertHasFormErrors(['team_id' => 'required', 'expiration' => 'required']);\n})->skip(fn () => ! Features::hasApiFeatures(), 'API support is not enabled.');\n"
  },
  {
    "path": "tests/Feature/AccessTokens/DeleteAccessTokenTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\AccessTokens\\ManageAccessTokens;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Laravel\\Jetstream\\Features;\n\nmutates(User::class);\n\ntest('api tokens can be deleted', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $token = $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => Str::random(40),\n        'abilities' => ['create', 'read'],\n    ]);\n\n    livewire(ManageAccessTokens::class)\n        ->callTableAction('delete', $token);\n\n    expect($user->fresh()->tokens)->toHaveCount(0);\n})->skip(function () {\n    return ! Features::hasApiFeatures();\n}, 'API support is not enabled.');\n"
  },
  {
    "path": "tests/Feature/Api/V1/ApiMiddlewareTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Middleware\\ForceJsonResponse;\nuse App\\Http\\Middleware\\SetApiTeamContext;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Support\\Facades\\RateLimiter;\nuse Illuminate\\Support\\Str;\n\nmutates(\n    ForceJsonResponse::class,\n    SetApiTeamContext::class,\n);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\ndescribe('ForceJsonResponse', function (): void {\n    it('returns JSON even without Accept header', function (): void {\n        $token = $this->user->createToken('test', ['*'])->plainTextToken;\n\n        $response = $this->withToken($token)\n            ->get('/api/v1/companies');\n\n        $response->assertOk();\n        expect($response->headers->get('Content-Type'))->toContain('json');\n    });\n\n    it('returns JSON validation error without Accept header', function (): void {\n        $token = $this->user->createToken('test', ['*'])->plainTextToken;\n\n        $response = $this->withToken($token)\n            ->post('/api/v1/companies', []);\n\n        $response->assertUnprocessable();\n        expect($response->headers->get('Content-Type'))->toContain('json');\n    });\n});\n\ndescribe('rate limiting', function (): void {\n    it('returns 429 after exceeding threshold', function (): void {\n        RateLimiter::for('api', fn () => Limit::perMinute(3)->by($this->user->id));\n\n        $token = $this->user->createToken('test', ['*'])->plainTextToken;\n\n        for ($i = 0; $i < 3; $i++) {\n            $this->withToken($token)\n                ->getJson('/api/v1/companies')\n                ->assertOk();\n        }\n\n        $this->withToken($token)\n            ->getJson('/api/v1/companies')\n            ->assertTooManyRequests();\n    });\n\n    it('enforces separate write rate limit', function (): void {\n        RateLimiter::for('api', function () {\n            return [\n                Limit::perMinute(100)->by('team:test'),\n                Limit::perMinute(2)->by('token:test:write'),\n            ];\n        });\n\n        $token = $this->user->createToken('test', ['*'])->plainTextToken;\n\n        $this->withToken($token)\n            ->postJson('/api/v1/companies', ['name' => 'A'])\n            ->assertCreated();\n\n        $this->withToken($token)\n            ->postJson('/api/v1/companies', ['name' => 'B'])\n            ->assertCreated();\n\n        $this->withToken($token)\n            ->postJson('/api/v1/companies', ['name' => 'C'])\n            ->assertTooManyRequests();\n    });\n});\n\ndescribe('real-token middleware chain', function (): void {\n    it('authenticates and scopes via real bearer token through full middleware stack', function (): void {\n        $companies = Company::factory()->for($this->team)->count(2)->create();\n\n        $raw = Str::random(40);\n        $token = $this->user->tokens()->create([\n            'name' => 'full-stack-test',\n            'token' => hash('sha256', $raw),\n            'abilities' => ['*'],\n            'team_id' => $this->team->id,\n        ]);\n\n        $plainToken = \"{$token->id}|{$raw}\";\n\n        $response = $this->withToken($plainToken)\n            ->getJson('/api/v1/companies');\n\n        $response->assertOk();\n        $ids = collect($response->json('data'))->pluck('id');\n        expect($ids)->toContain($companies[0]->id);\n        expect($ids)->toContain($companies[1]->id);\n        expect($response->headers->get('Content-Type'))->toContain('json');\n    });\n\n    it('rejects request with invalid bearer token', function (): void {\n        $this->withToken('invalid-token')\n            ->getJson('/api/v1/companies')\n            ->assertUnauthorized();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/ApiTeamScopingTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Middleware\\SetApiTeamContext;\nuse App\\Models\\Company;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\n\nmutates(SetApiTeamContext::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('uses current team by default', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/companies');\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($company->id);\n});\n\nit('can switch team via X-Team-Id header', function (): void {\n    $otherTeam = Team::factory()->create();\n    $this->user->teams()->attach($otherTeam);\n\n    $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => $otherTeam->id]));\n\n    Sanctum::actingAs($this->user);\n\n    Company::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/companies', ['X-Team-Id' => $otherTeam->id]);\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($otherCompany->id);\n});\n\nit('rejects X-Team-Id for team user does not belong to', function (): void {\n    $foreignTeam = Team::factory()->create();\n\n    Sanctum::actingAs($this->user);\n\n    $this->getJson('/api/v1/companies', ['X-Team-Id' => $foreignTeam->id])\n        ->assertForbidden();\n});\n\nit('returns 403 when user has no team', function (): void {\n    $userWithoutTeam = User::factory()->create();\n    $userWithoutTeam->current_team_id = null;\n    $userWithoutTeam->save();\n\n    Sanctum::actingAs($userWithoutTeam);\n\n    $this->getJson('/api/v1/companies')\n        ->assertForbidden();\n});\n\ndescribe('expired token', function (): void {\n    it('returns 401 for an expired token', function (): void {\n        $newToken = $this->user->createToken('expired', ['*'], now()->subHour());\n        $newToken->accessToken->fill(['team_id' => $this->team->id])->save();\n\n        $this->withToken($newToken->plainTextToken)\n            ->getJson('/api/v1/companies')\n            ->assertUnauthorized();\n    });\n});\n\ndescribe('token-based team scoping', function (): void {\n    it('resolves team context from token team_id', function (): void {\n        $otherTeam = Team::factory()->create();\n        $this->user->teams()->attach($otherTeam);\n\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => $otherTeam->id]));\n        Company::factory()->for($this->team)->create();\n\n        $raw = Str::random(40);\n        $token = $this->user->tokens()->create([\n            'name' => 'team-scoped',\n            'token' => hash('sha256', $raw),\n            'abilities' => ['*'],\n            'team_id' => $otherTeam->id,\n        ]);\n\n        $plainToken = \"{$token->id}|{$raw}\";\n\n        $response = $this->withToken($plainToken)\n            ->getJson('/api/v1/companies');\n\n        $response->assertOk();\n\n        $ids = collect($response->json('data'))->pluck('id');\n        expect($ids)->toContain($otherCompany->id);\n    });\n\n    it('ignores X-Team-Id header when token has team_id', function (): void {\n        $otherTeam = Team::factory()->create();\n        $this->user->teams()->attach($otherTeam);\n\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => $otherTeam->id]));\n        Company::factory()->for($this->team)->create();\n\n        $raw = Str::random(40);\n        $token = $this->user->tokens()->create([\n            'name' => 'team-scoped',\n            'token' => hash('sha256', $raw),\n            'abilities' => ['*'],\n            'team_id' => $otherTeam->id,\n        ]);\n\n        $plainToken = \"{$token->id}|{$raw}\";\n\n        $response = $this->withToken($plainToken)\n            ->getJson('/api/v1/companies', ['X-Team-Id' => $this->team->id]);\n\n        $response->assertOk();\n\n        $ids = collect($response->json('data'))->pluck('id');\n        expect($ids)->toContain($otherCompany->id);\n    });\n});\n\ndescribe('revoked team membership', function (): void {\n    it('rejects token when user no longer belongs to the token team', function (): void {\n        $otherTeam = Team::factory()->create();\n        $this->user->teams()->attach($otherTeam);\n\n        $raw = Str::random(40);\n        $token = $this->user->tokens()->create([\n            'name' => 'team-scoped',\n            'token' => hash('sha256', $raw),\n            'abilities' => ['*'],\n            'team_id' => $otherTeam->id,\n        ]);\n\n        $this->user->teams()->detach($otherTeam);\n\n        $plainToken = \"{$token->id}|{$raw}\";\n\n        $this->withToken($plainToken)\n            ->getJson('/api/v1/companies')\n            ->assertForbidden();\n    });\n});\n\ndescribe('switchTeam regression', function (): void {\n    it('does not persist current_team_id to database on API call', function (): void {\n        $otherTeam = Team::factory()->create();\n        $this->user->teams()->attach($otherTeam);\n\n        $this->user->switchTeam($this->team);\n        $originalTeamId = $this->user->fresh()->current_team_id;\n\n        $raw = Str::random(40);\n        $token = $this->user->tokens()->create([\n            'name' => 'team-scoped',\n            'token' => hash('sha256', $raw),\n            'abilities' => ['*'],\n            'team_id' => $otherTeam->id,\n        ]);\n\n        $plainToken = \"{$token->id}|{$raw}\";\n\n        $this->withToken($plainToken)\n            ->getJson('/api/v1/companies')\n            ->assertOk();\n\n        expect($this->user->fresh()->current_team_id)->toBe($originalTeamId);\n    });\n});\n\ndescribe('/api/v1/user endpoint', function (): void {\n    it('returns current authenticated user', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/user')\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->where('data.id', (string) $this->user->id)\n                ->where('data.type', 'users')\n                ->where('data.attributes.name', $this->user->name)\n                ->where('data.attributes.email', $this->user->email)\n                ->missing('data.attributes.password')\n                ->etc()\n            );\n    });\n\n    it('requires authentication', function (): void {\n        $this->getJson('/api/v1/user')\n            ->assertUnauthorized();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/CompaniesApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\Company\\CreateCompany;\nuse App\\Actions\\Company\\DeleteCompany;\nuse App\\Actions\\Company\\ListCompanies;\nuse App\\Actions\\Company\\UpdateCompany;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Controllers\\Api\\V1\\CompaniesController;\nuse App\\Http\\Resources\\V1\\CompanyResource;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldSection;\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\nuse Relaticle\\CustomFields\\Models\\CustomFieldValue;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\n\nmutates(\n    CompaniesController::class,\n    CreateCompany::class,\n    UpdateCompany::class,\n    DeleteCompany::class,\n    ListCompanies::class,\n);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/companies')->assertUnauthorized();\n});\n\nit('can list companies', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $seeded = Company::query()->where('team_id', $this->team->id)->count();\n    Company::factory(3)->for($this->team)->create();\n\n    $this->getJson('/api/v1/companies')\n        ->assertOk()\n        ->assertJsonCount($seeded + 3, 'data')\n        ->assertJsonStructure(['data' => [['id', 'type', 'attributes']]]);\n});\n\nit('can create a company', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/companies', ['name' => 'Acme Corp'])\n        ->assertCreated()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->whereType('id', 'string')\n                ->where('type', 'companies')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Acme Corp')\n                    ->where('creation_source', CreationSource::API->value)\n                    ->whereType('created_at', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n\n    $this->assertDatabaseHas('companies', ['name' => 'Acme Corp', 'team_id' => $this->team->id]);\n});\n\nit('validates required fields on create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/companies', [])\n        ->assertUnprocessable()\n        ->assertInvalid(['name']);\n});\n\nit('can show a company', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create(['name' => 'Show Test']);\n\n    $this->getJson(\"/api/v1/companies/{$company->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $company->id)\n                ->where('type', 'companies')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Show Test')\n                    ->whereType('creation_source', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can update a company', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n\n    $this->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Updated Name'])\n        ->assertOk()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $company->id)\n                ->where('type', 'companies')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Updated Name')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can delete a company', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n\n    $this->deleteJson(\"/api/v1/companies/{$company->id}\")\n        ->assertNoContent();\n\n    $this->assertSoftDeleted('companies', ['id' => $company->id]);\n});\n\nit('scopes companies to current team', function (): void {\n    $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => Team::factory()->create()->id]));\n\n    Sanctum::actingAs($this->user);\n\n    $ownCompany = Company::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/companies');\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($ownCompany->id);\n    expect($ids)->not->toContain($otherCompany->id);\n});\n\ndescribe('cross-tenant isolation', function (): void {\n    it('cannot show a company from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->getJson(\"/api/v1/companies/{$otherCompany->id}\")\n            ->assertNotFound();\n    });\n\n    it('cannot update a company from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->putJson(\"/api/v1/companies/{$otherCompany->id}\", ['name' => 'Hacked'])\n            ->assertNotFound();\n    });\n\n    it('cannot delete a company from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->deleteJson(\"/api/v1/companies/{$otherCompany->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('includes', function (): void {\n    it('can include relations on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory()->for($this->team)->create();\n\n        $this->getJson('/api/v1/companies?include=creator')\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.0.relationships.creator')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include relations on show endpoint with full structure', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->getJson(\"/api/v1/companies/{$company->id}?include=creator\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                    ->has('attributes', fn (AssertableJson $json) => $json\n                        ->has('name')\n                        ->has('email')\n                    )\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include multiple relations', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->getJson(\"/api/v1/companies/{$company->id}?include=creator,people\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator')\n                ->has('data.relationships.people')\n                ->etc()\n            );\n    });\n\n    it('does not include relations when not requested', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/companies/{$company->id}\")\n            ->assertOk();\n\n        expect($response->json('data.relationships'))->toBeNull();\n    });\n\n    it('can include relationship counts', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        People::factory(3)->for($this->team)->create(['company_id' => $company->id]);\n\n        $response = $this->getJson('/api/v1/companies?include=peopleCount');\n\n        $response->assertOk();\n\n        $companyData = collect($response->json('data'))\n            ->firstWhere('id', $company->id);\n        expect($companyData['attributes']['people_count'])->toBe(3);\n    });\n\n    it('rejects disallowed includes on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/companies?include=secret')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('custom fields', function (): void {\n    beforeEach(function (): void {\n        $this->section = CustomFieldSection::create([\n            'tenant_id' => $this->team->id,\n            'entity_type' => 'company',\n            'name' => 'General',\n            'code' => 'general',\n            'type' => 'section',\n            'sort_order' => 1,\n            'active' => true,\n        ]);\n    });\n\n    it('can create a company with custom fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'industry',\n            'name' => 'Industry',\n            'type' => 'text',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'industry' => 'Technology',\n            ],\n        ])\n            ->assertCreated()\n            ->assertValid()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data', fn (AssertableJson $json) => $json\n                    ->has('attributes', fn (AssertableJson $json) => $json\n                        ->where('name', 'Acme Corp')\n                        ->where('custom_fields.industry', 'Technology')\n                        ->etc()\n                    )\n                    ->etc()\n                )\n            );\n    });\n\n    it('can update a company with custom fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'industry',\n            'name' => 'Industry',\n            'type' => 'text',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->putJson(\"/api/v1/companies/{$company->id}\", [\n            'name' => 'Updated Name',\n            'custom_fields' => [\n                'industry' => 'Finance',\n            ],\n        ])\n            ->assertOk()\n            ->assertValid()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data', fn (AssertableJson $json) => $json\n                    ->has('attributes', fn (AssertableJson $json) => $json\n                        ->where('name', 'Updated Name')\n                        ->where('custom_fields.industry', 'Finance')\n                        ->etc()\n                    )\n                    ->etc()\n                )\n            );\n    });\n\n    it('validates custom field values on create', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'annual_revenue',\n            'name' => 'Annual Revenue',\n            'type' => 'number',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [\n                ['name' => 'numeric', 'parameters' => []],\n            ],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'annual_revenue' => 'not-a-number',\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.annual_revenue']);\n    });\n\n    it('rejects unknown custom field codes', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'nonexistent_field' => 'some value',\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields']);\n    });\n\n    it('does not leak available field names in validation errors', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'secret_field',\n            'name' => 'Secret Field',\n            'type' => 'text',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $response = $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'unknown_key' => 'some value',\n            ],\n        ]);\n\n        $response->assertUnprocessable()\n            ->assertInvalid(['custom_fields']);\n\n        $errorMessage = $response->json('errors.custom_fields.0');\n\n        expect($errorMessage)\n            ->toContain('unknown_key')\n            ->not->toContain('Available fields')\n            ->not->toContain('secret_field');\n    });\n\n    it('rejects invalid option ID for select custom field on create', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $field = CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'stage',\n            'name' => 'Stage',\n            'type' => 'select',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $field->options()->createMany([\n            ['name' => 'Lead', 'sort_order' => 1, 'tenant_id' => $this->team->id],\n            ['name' => 'Customer', 'sort_order' => 2, 'tenant_id' => $this->team->id],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'stage' => 'invalid-option-id-xyz',\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.stage']);\n    });\n\n    it('accepts valid option ID for select custom field on create', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $field = CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'stage',\n            'name' => 'Stage',\n            'type' => 'select',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $option = $field->options()->create([\n            'name' => 'Lead',\n            'sort_order' => 1,\n            'tenant_id' => $this->team->id,\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'stage' => $option->id,\n            ],\n        ])\n            ->assertCreated()\n            ->assertValid();\n    });\n\n    it('rejects invalid option ID for select custom field on update', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $field = CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'stage',\n            'name' => 'Stage',\n            'type' => 'select',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $field->options()->createMany([\n            ['name' => 'Lead', 'sort_order' => 1, 'tenant_id' => $this->team->id],\n            ['name' => 'Customer', 'sort_order' => 2, 'tenant_id' => $this->team->id],\n        ]);\n\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->putJson(\"/api/v1/companies/{$company->id}\", [\n            'name' => 'Updated Name',\n            'custom_fields' => [\n                'stage' => 999999,\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.stage']);\n    });\n\n    it('rejects invalid option IDs for multi-select custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $field = CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'categories',\n            'name' => 'Categories',\n            'type' => 'multi-select',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $validOption = $field->options()->create([\n            'name' => 'Option A',\n            'sort_order' => 1,\n            'tenant_id' => $this->team->id,\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'categories' => [$validOption->id, 'invalid-id'],\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.categories.1']);\n    });\n\n    it('accepts valid option IDs for multi-select custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $field = CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'categories',\n            'name' => 'Categories',\n            'type' => 'multi-select',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $options = $field->options()->createMany([\n            ['name' => 'Option A', 'sort_order' => 1, 'tenant_id' => $this->team->id],\n            ['name' => 'Option B', 'sort_order' => 2, 'tenant_id' => $this->team->id],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'categories' => $options->pluck('id')->all(),\n            ],\n        ])\n            ->assertCreated()\n            ->assertValid();\n    });\n\n    it('handles orphaned custom field values gracefully', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $customField = CustomField::create([\n            'tenant_id' => $this->team->getKey(),\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'orphan_field',\n            'name' => 'Orphan Field',\n            'type' => 'text',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        TenantContextService::withTenant(\n            $this->team->getKey(),\n            fn () => $company->saveCustomFields(['orphan_field' => 'test value']),\n        );\n\n        // Simulate an orphaned value by injecting a CustomFieldValue with a null customField relation\n        $company->load('customFieldValues.customField');\n        $orphanedValue = new CustomFieldValue;\n        $orphanedValue->setRelation('customField', null);\n        $company->setRelation(\n            'customFieldValues',\n            $company->customFieldValues->push($orphanedValue),\n        );\n\n        $resource = new CompanyResource($company);\n        $attributes = $resource->toAttributes(request());\n\n        expect($attributes['custom_fields'])\n            ->toBeInstanceOf(stdClass::class)\n            ->and($attributes['custom_fields']->orphan_field)->toBe('test value');\n    });\n\n    it('rejects custom_fields sent as a string', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => 'not-an-array',\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields']);\n    });\n\n    it('rejects custom_fields sent as an integer', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => 123,\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields']);\n    });\n\n    it('accepts request without custom_fields key', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n        ])\n            ->assertCreated();\n    });\n\n    it('rejects invalid domain format in link custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $domainsField = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->team->id)\n            ->where('entity_type', 'company')\n            ->where('code', 'domains')\n            ->first();\n\n        expect($domainsField)->not->toBeNull('domains custom field should be auto-created by team listener');\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'domains' => ['not a valid domain'],\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.domains.0']);\n    });\n\n    it('accepts valid items in link custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $domainsField = CustomField::query()\n            ->withoutGlobalScopes()\n            ->where('tenant_id', $this->team->id)\n            ->where('entity_type', 'company')\n            ->where('code', 'domains')\n            ->first();\n\n        expect($domainsField)->not->toBeNull('domains custom field should be auto-created by team listener');\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'domains' => ['acme.com', 'example.org'],\n            ],\n        ])\n            ->assertCreated();\n    });\n\n    it('rejects invalid email in email custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'emails',\n            'name' => 'Emails',\n            'type' => 'email',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'emails' => ['not-an-email'],\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.emails.0']);\n    });\n\n    it('accepts valid items in email custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'emails',\n            'name' => 'Emails',\n            'type' => 'email',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'emails' => ['info@acme.com', 'sales@acme.com'],\n            ],\n        ])\n            ->assertCreated();\n    });\n\n    it('rejects invalid phone number in phone custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'phones',\n            'name' => 'Phones',\n            'type' => 'phone',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'phones' => ['not-a-phone'],\n            ],\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['custom_fields.phones.0']);\n    });\n\n    it('accepts valid items in phone custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => 'phones',\n            'name' => 'Phones',\n            'type' => 'phone',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Acme Corp',\n            'custom_fields' => [\n                'phones' => ['+14155552671'],\n            ],\n        ])\n            ->assertCreated();\n    });\n});\n\ndescribe('filtering and sorting', function (): void {\n    it('can filter companies by name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory()->for($this->team)->create(['name' => 'Acme Corp']);\n        Company::factory()->for($this->team)->create(['name' => 'Beta Inc']);\n\n        $response = $this->getJson('/api/v1/companies?filter[name]=Acme');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name');\n        expect($names)->toContain('Acme Corp');\n        expect($names)->not->toContain('Beta Inc');\n    });\n\n    it('can sort companies by name ascending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory()->for($this->team)->create(['name' => 'Zulu Corp']);\n        Company::factory()->for($this->team)->create(['name' => 'Alpha Inc']);\n\n        $response = $this->getJson('/api/v1/companies?sort=name');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name')->values();\n        $alphaIndex = $names->search('Alpha Inc');\n        $zuluIndex = $names->search('Zulu Corp');\n        expect($alphaIndex)->toBeLessThan($zuluIndex);\n    });\n\n    it('can sort companies by name descending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory()->for($this->team)->create(['name' => 'Alpha Inc']);\n        Company::factory()->for($this->team)->create(['name' => 'Zulu Corp']);\n\n        $response = $this->getJson('/api/v1/companies?sort=-name');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name')->values();\n        $zuluIndex = $names->search('Zulu Corp');\n        $alphaIndex = $names->search('Alpha Inc');\n        expect($zuluIndex)->toBeLessThan($alphaIndex);\n    });\n\n    it('rejects disallowed filter fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/companies?filter[team_id]=fake')\n            ->assertStatus(400);\n    });\n\n    it('rejects disallowed sort fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/companies?sort=team_id')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('soft deletes', function (): void {\n    it('excludes soft-deleted companies from list', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create(['name' => 'Deleted Corp']);\n        $company->delete();\n\n        $active = Company::factory()->for($this->team)->create(['name' => 'Active Corp']);\n\n        $response = $this->getJson('/api/v1/companies');\n\n        $ids = collect($response->json('data'))->pluck('id');\n        expect($ids)->toContain($active->id);\n        expect($ids)->not->toContain($company->id);\n    });\n\n    it('cannot show a soft-deleted company', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $company->delete();\n\n        $this->getJson(\"/api/v1/companies/{$company->id}\")\n            ->assertNotFound();\n    });\n\n    it('cannot update a soft-deleted company', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $company->delete();\n\n        $this->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Revived'])\n            ->assertNotFound();\n    });\n});\n\ndescribe('pagination', function (): void {\n    it('paginates with per_page parameter', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory(5)->for($this->team)->create();\n\n        $this->getJson('/api/v1/companies?per_page=2')\n            ->assertOk()\n            ->assertJsonCount(2, 'data');\n    });\n\n    it('returns second page of results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory(5)->for($this->team)->create();\n\n        $page1 = $this->getJson('/api/v1/companies?per_page=3&page=1');\n        $page2 = $this->getJson('/api/v1/companies?per_page=3&page=2');\n\n        $page1->assertOk()->assertJsonCount(3, 'data');\n        $page2->assertOk();\n\n        $page1Ids = collect($page1->json('data'))->pluck('id');\n        $page2Ids = collect($page2->json('data'))->pluck('id');\n        expect($page1Ids->intersect($page2Ids))->toBeEmpty();\n    });\n\n    it('caps per_page at maximum allowed value', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/companies?per_page=500')\n            ->assertUnprocessable()\n            ->assertInvalid(['per_page']);\n    });\n\n    it('returns empty data array for page beyond results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory(2)->for($this->team)->create();\n\n        $this->getJson('/api/v1/companies?page=999')\n            ->assertOk()\n            ->assertJsonCount(0, 'data');\n    });\n});\n\ndescribe('mass assignment protection', function (): void {\n    it('ignores team_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Test Corp',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertCreated();\n\n        $company = Company::query()->where('name', 'Test Corp')->first();\n        expect($company->team_id)->toBe($this->team->id);\n    });\n\n    it('ignores creator_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherUser = User::factory()->create();\n\n        $this->postJson('/api/v1/companies', [\n            'name' => 'Test Corp',\n            'creator_id' => $otherUser->id,\n        ])\n            ->assertCreated();\n\n        $company = Company::query()->where('name', 'Test Corp')->first();\n        expect($company->creator_id)->toBe($this->user->id);\n    });\n\n    it('ignores team_id in update request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n\n        $this->putJson(\"/api/v1/companies/{$company->id}\", [\n            'name' => 'Updated',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertOk();\n\n        expect($company->refresh()->team_id)->toBe($this->team->id);\n    });\n});\n\ndescribe('input validation', function (): void {\n    it('rejects name exceeding 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', ['name' => str_repeat('a', 256)])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('rejects non-string name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', ['name' => 12345])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('rejects array as name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', ['name' => ['nested' => 'value']])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('accepts name at exactly 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/companies', ['name' => str_repeat('a', 255)])\n            ->assertCreated();\n    });\n});\n\ndescribe('non-existent record', function (): void {\n    it('returns 404 for non-existent company', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/companies/'.Str::ulid())\n            ->assertNotFound();\n    });\n});\n\nit('can update a company via PATCH', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n\n    $response = $this->patchJson(\"/api/v1/companies/{$company->id}\", [\n        'name' => 'Patched Name',\n    ]);\n\n    $response->assertOk();\n    expect($company->refresh()->name)->toBe('Patched Name');\n});\n\nit('requires authentication for write operations', function (string $method, string $url): void {\n    $response = $this->json($method, $url, ['name' => 'Test']);\n    $response->assertUnauthorized();\n})->with([\n    'POST' => ['POST', '/api/v1/companies'],\n    'PUT' => ['PUT', '/api/v1/companies/fake-id'],\n    'DELETE' => ['DELETE', '/api/v1/companies/fake-id'],\n]);\n\ndescribe('cursor pagination', function (): void {\n    it('returns cursor-paginated results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Company::factory()->count(5)->create([\n            'team_id' => $this->team->id,\n        ]);\n\n        $response = $this->getJson('/api/v1/companies?cursor=true&per_page=2');\n\n        $response->assertOk()\n            ->assertJsonCount(2, 'data')\n            ->assertJsonStructure([\n                'data',\n                'meta' => ['path', 'per_page'],\n                'links' => ['next', 'prev'],\n            ]);\n\n        expect($response->json('meta.per_page'))->toBe(2);\n        expect($response->json('links.next'))->not->toBeNull();\n        expect($response->json('links.prev'))->toBeNull();\n\n        $firstIds = collect($response->json('data'))->pluck('id');\n        expect($firstIds)->toHaveCount(2);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/CustomFieldsApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Controllers\\Api\\V1\\CustomFieldsController;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldSection;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Laravel\\Sanctum\\Sanctum;\n\nmutates(CustomFieldsController::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n\n    $this->section = CustomFieldSection::create([\n        'tenant_id' => $this->team->id,\n        'entity_type' => 'company',\n        'name' => 'API Test',\n        'code' => 'api_test',\n        'type' => 'section',\n        'sort_order' => 99,\n        'active' => true,\n    ]);\n\n    $this->seededCount = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('active', true)\n        ->count();\n});\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/custom-fields')->assertUnauthorized();\n});\n\nit('can list custom fields with expected structure', function (): void {\n    Sanctum::actingAs($this->user);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_industry',\n        'name' => 'Industry',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [\n            'required' => true,\n        ],\n    ]);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=100');\n\n    $response->assertOk()\n        ->assertJsonCount($this->seededCount + 1, 'data');\n\n    $field = collect($response->json('data'))\n        ->first(fn ($item) => ($item['attributes']['code'] ?? null) === 'cf_industry');\n\n    expect($field)\n        ->not->toBeNull()\n        ->and($field['attributes']['name'])->toBe('Industry')\n        ->and($field['attributes']['type'])->toBe('text')\n        ->and($field['attributes']['entity_type'])->toBe('company')\n        ->and($field['attributes']['required'])->toBeTrue()\n        ->and($field['attributes'])->toHaveKeys(['code', 'name', 'type', 'entity_type', 'required', 'created_at', 'updated_at'])\n        ->and($field)->toHaveKeys(['id', 'type'])\n        ->and($field['type'])->toBe('custom_fields');\n});\n\nit('returns required as false when field has no required rule', function (): void {\n    Sanctum::actingAs($this->user);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_notes',\n        'name' => 'Notes',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=100');\n\n    $response->assertOk();\n\n    $field = collect($response->json('data'))\n        ->first(fn ($item) => ($item['attributes']['code'] ?? null) === 'cf_notes');\n\n    expect($field)->not->toBeNull()\n        ->and($field['attributes']['required'])->toBeFalse();\n});\n\nit('can filter by entity_type', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $personSection = CustomFieldSection::create([\n        'tenant_id' => $this->team->id,\n        'entity_type' => 'people',\n        'name' => 'API Test Person',\n        'code' => 'api_test_person',\n        'type' => 'section',\n        'sort_order' => 99,\n        'active' => true,\n    ]);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_industry',\n        'name' => 'Industry',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $personSection->id,\n        'entity_type' => 'people',\n        'code' => 'cf_birthday',\n        'name' => 'Birthday',\n        'type' => 'date',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    $response = $this->getJson('/api/v1/custom-fields?entity_type=company&per_page=100');\n\n    $response->assertOk();\n\n    $entityTypes = collect($response->json('data'))->pluck('attributes.entity_type')->unique();\n\n    expect($entityTypes->all())->toBe(['company']);\n\n    $codes = collect($response->json('data'))->pluck('attributes.code');\n    expect($codes)->toContain('cf_industry');\n    expect($codes)->not->toContain('cf_birthday');\n});\n\nit('does not return custom fields from other teams', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $otherTeam = Team::factory()->create();\n\n    $otherSection = CustomFieldSection::create([\n        'tenant_id' => $otherTeam->id,\n        'entity_type' => 'company',\n        'name' => 'Other Team',\n        'code' => 'other_team',\n        'type' => 'section',\n        'sort_order' => 1,\n        'active' => true,\n    ]);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_own_field',\n        'name' => 'Own Field',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    CustomField::create([\n        'tenant_id' => $otherTeam->id,\n        'custom_field_section_id' => $otherSection->id,\n        'entity_type' => 'company',\n        'code' => 'cf_secret_field',\n        'name' => 'Secret Field',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=100');\n\n    $response->assertOk();\n\n    $codes = collect($response->json('data'))->pluck('attributes.code');\n    expect($codes)->toContain('cf_own_field');\n    expect($codes)->not->toContain('cf_secret_field');\n});\n\nit('includes options for select fields', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $field = CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_status',\n        'name' => 'Status',\n        'type' => 'select',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    $field->options()->createMany([\n        ['name' => 'Active', 'sort_order' => 1, 'tenant_id' => $this->team->id],\n        ['name' => 'Inactive', 'sort_order' => 2, 'tenant_id' => $this->team->id],\n    ]);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=100');\n\n    $response->assertOk();\n\n    $fieldData = collect($response->json('data'))\n        ->first(fn ($item) => ($item['attributes']['code'] ?? null) === 'cf_status');\n\n    expect($fieldData)->not->toBeNull()\n        ->and($fieldData['attributes']['options'])->toHaveCount(2)\n        ->and($fieldData['attributes']['options'][0]['label'])->toBe('Active')\n        ->and($fieldData['attributes']['options'][0])->toHaveKey('value');\n});\n\nit('paginates results by default', function (): void {\n    Sanctum::actingAs($this->user);\n\n    foreach (range(1, 20) as $i) {\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => \"cf_field_{$i}\",\n            'name' => \"Field {$i}\",\n            'type' => 'text',\n            'sort_order' => $i,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n    }\n\n    $response = $this->getJson('/api/v1/custom-fields');\n\n    $response->assertOk()\n        ->assertJsonStructure(['data', 'links', 'meta'])\n        ->assertJsonPath('meta.per_page', 15);\n\n    expect($response->json('data'))->toHaveCount(min(15, $this->seededCount + 20));\n});\n\nit('respects per_page parameter', function (): void {\n    Sanctum::actingAs($this->user);\n\n    foreach (range(1, 10) as $i) {\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => \"cf_page_field_{$i}\",\n            'name' => \"Page Field {$i}\",\n            'type' => 'text',\n            'sort_order' => $i,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n    }\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=5');\n\n    $response->assertOk()\n        ->assertJsonPath('meta.per_page', 5);\n\n    expect($response->json('data'))->toHaveCount(5);\n});\n\nit('caps per_page at 100', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=200');\n\n    $response->assertUnprocessable();\n});\n\nit('rejects non-integer per_page', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=abc');\n\n    $response->assertUnprocessable();\n});\n\nit('supports page navigation', function (): void {\n    Sanctum::actingAs($this->user);\n\n    foreach (range(1, 5) as $i) {\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $this->section->id,\n            'entity_type' => 'company',\n            'code' => \"cf_nav_field_{$i}\",\n            'name' => \"Nav Field {$i}\",\n            'type' => 'text',\n            'sort_order' => $i,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n    }\n\n    $totalFields = $this->seededCount + 5;\n\n    $page1 = $this->getJson('/api/v1/custom-fields?per_page=3');\n    $page1->assertOk()\n        ->assertJsonPath('meta.per_page', 3)\n        ->assertJsonPath('meta.current_page', 1)\n        ->assertJsonPath('meta.total', $totalFields);\n\n    expect($page1->json('data'))->toHaveCount(3);\n\n    $page2 = $this->getJson('/api/v1/custom-fields?per_page=3&page=2');\n    $page2->assertOk()\n        ->assertJsonPath('meta.current_page', 2);\n\n    expect($page2->json('data'))->toHaveCount(min(3, $totalFields - 3));\n});\n\nit('excludes inactive custom fields', function (): void {\n    Sanctum::actingAs($this->user);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_active_field',\n        'name' => 'Active Field',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    CustomField::create([\n        'tenant_id' => $this->team->id,\n        'custom_field_section_id' => $this->section->id,\n        'entity_type' => 'company',\n        'code' => 'cf_inactive_field',\n        'name' => 'Inactive Field',\n        'type' => 'text',\n        'sort_order' => 2,\n        'active' => false,\n        'validation_rules' => [],\n    ]);\n\n    $response = $this->getJson('/api/v1/custom-fields?per_page=100');\n\n    $response->assertOk();\n\n    $codes = collect($response->json('data'))->pluck('attributes.code');\n    expect($codes)->toContain('cf_active_field');\n    expect($codes)->not->toContain('cf_inactive_field');\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/NotesApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\Note\\CreateNote;\nuse App\\Actions\\Note\\DeleteNote;\nuse App\\Actions\\Note\\ListNotes;\nuse App\\Actions\\Note\\UpdateNote;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Controllers\\Api\\V1\\NotesController;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\n\nmutates(\n    NotesController::class,\n    CreateNote::class,\n    UpdateNote::class,\n    DeleteNote::class,\n    ListNotes::class,\n);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/notes')->assertUnauthorized();\n});\n\nit('can list notes', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $seeded = Note::query()->where('team_id', $this->team->id)->count();\n    Note::factory(3)->for($this->team)->create();\n\n    $this->getJson('/api/v1/notes')\n        ->assertOk()\n        ->assertJsonCount($seeded + 3, 'data')\n        ->assertJsonStructure(['data' => [['id', 'type', 'attributes']]]);\n});\n\nit('can create a note', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/notes', ['title' => 'Meeting notes'])\n        ->assertCreated()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->whereType('id', 'string')\n                ->where('type', 'notes')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('title', 'Meeting notes')\n                    ->where('creation_source', CreationSource::API->value)\n                    ->whereType('created_at', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n\n    $this->assertDatabaseHas('notes', ['title' => 'Meeting notes', 'team_id' => $this->team->id]);\n});\n\nit('validates required fields on create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/notes', [])\n        ->assertUnprocessable()\n        ->assertInvalid(['title']);\n});\n\nit('can show a note', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $note = Note::factory()->for($this->team)->create(['title' => 'Show Test']);\n\n    $this->getJson(\"/api/v1/notes/{$note->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $note->id)\n                ->where('type', 'notes')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('title', 'Show Test')\n                    ->whereType('creation_source', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can update a note', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $note = Note::factory()->for($this->team)->create();\n\n    $this->putJson(\"/api/v1/notes/{$note->id}\", ['title' => 'Updated Title'])\n        ->assertOk()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $note->id)\n                ->where('type', 'notes')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('title', 'Updated Title')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can delete a note', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $note = Note::factory()->for($this->team)->create();\n\n    $this->deleteJson(\"/api/v1/notes/{$note->id}\")\n        ->assertNoContent();\n\n    $this->assertSoftDeleted('notes', ['id' => $note->id]);\n});\n\nit('scopes notes to current team', function (): void {\n    $otherNote = Note::withoutEvents(fn () => Note::factory()->create(['team_id' => Team::factory()->create()->id]));\n\n    Sanctum::actingAs($this->user);\n\n    $ownNote = Note::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/notes');\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($ownNote->id);\n    expect($ids)->not->toContain($otherNote->id);\n});\n\ndescribe('cross-tenant isolation', function (): void {\n    it('cannot show a note from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->getJson(\"/api/v1/notes/{$otherNote->id}\")\n            ->assertNotFound();\n    });\n\n    it('cannot update a note from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->putJson(\"/api/v1/notes/{$otherNote->id}\", ['title' => 'Hacked'])\n            ->assertNotFound();\n    });\n\n    it('cannot delete a note from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->deleteJson(\"/api/v1/notes/{$otherNote->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('includes', function (): void {\n    it('can include creator on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $note = Note::factory()->for($this->team)->create();\n\n        $this->getJson(\"/api/v1/notes/{$note->id}?include=creator\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include creator on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory()->for($this->team)->create();\n\n        $this->getJson('/api/v1/notes?include=creator')\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.0.relationships.creator')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include companies on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $note = Note::factory()->for($this->team)->create();\n        $note->companies()->attach($company);\n\n        $this->getJson(\"/api/v1/notes/{$note->id}?include=companies\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.companies.data')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include multiple relations', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $note = Note::factory()->for($this->team)->create();\n        $note->companies()->attach($company);\n\n        $this->getJson(\"/api/v1/notes/{$note->id}?include=creator,companies\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator')\n                ->has('data.relationships.companies')\n                ->etc()\n            );\n    });\n\n    it('does not include relations when not requested', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $note = Note::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/notes/{$note->id}\")\n            ->assertOk();\n\n        expect($response->json('data.relationships'))->toBeNull();\n    });\n\n    it('can include relationship counts', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $note = Note::factory()->for($this->team)->create();\n\n        $response = $this->getJson('/api/v1/notes?include=companiesCount');\n\n        $response->assertOk();\n\n        $noteData = collect($response->json('data'))\n            ->firstWhere('id', $note->id);\n        expect($noteData['attributes']['companies_count'])->toBe(0);\n    });\n\n    it('rejects disallowed includes on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/notes?include=secret')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('filtering and sorting', function (): void {\n    it('can filter notes by title', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory()->for($this->team)->create(['title' => 'Meeting summary']);\n        Note::factory()->for($this->team)->create(['title' => 'Code review']);\n\n        $response = $this->getJson('/api/v1/notes?filter[title]=Meeting');\n\n        $response->assertOk();\n\n        $titles = collect($response->json('data'))->pluck('attributes.title');\n        expect($titles)->toContain('Meeting summary');\n        expect($titles)->not->toContain('Code review');\n    });\n\n    it('can sort notes by title ascending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory()->for($this->team)->create(['title' => 'Zulu Note']);\n        Note::factory()->for($this->team)->create(['title' => 'Alpha Note']);\n\n        $response = $this->getJson('/api/v1/notes?sort=title');\n\n        $response->assertOk();\n\n        $titles = collect($response->json('data'))->pluck('attributes.title')->values();\n        $alphaIndex = $titles->search('Alpha Note');\n        $zuluIndex = $titles->search('Zulu Note');\n        expect($alphaIndex)->toBeLessThan($zuluIndex);\n    });\n\n    it('can sort notes by title descending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory()->for($this->team)->create(['title' => 'Alpha Note']);\n        Note::factory()->for($this->team)->create(['title' => 'Zulu Note']);\n\n        $response = $this->getJson('/api/v1/notes?sort=-title');\n\n        $response->assertOk();\n\n        $titles = collect($response->json('data'))->pluck('attributes.title')->values();\n        $zuluIndex = $titles->search('Zulu Note');\n        $alphaIndex = $titles->search('Alpha Note');\n        expect($zuluIndex)->toBeLessThan($alphaIndex);\n    });\n\n    it('rejects disallowed filter fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/notes?filter[team_id]=fake')\n            ->assertStatus(400);\n    });\n\n    it('rejects disallowed sort fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/notes?sort=team_id')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('pagination', function (): void {\n    it('paginates with per_page parameter', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory(5)->for($this->team)->create();\n\n        $this->getJson('/api/v1/notes?per_page=2')\n            ->assertOk()\n            ->assertJsonCount(2, 'data');\n    });\n\n    it('returns second page of results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory(5)->for($this->team)->create();\n\n        $page1 = $this->getJson('/api/v1/notes?per_page=3&page=1');\n        $page2 = $this->getJson('/api/v1/notes?per_page=3&page=2');\n\n        $page1->assertOk()->assertJsonCount(3, 'data');\n        $page2->assertOk();\n\n        $page1Ids = collect($page1->json('data'))->pluck('id');\n        $page2Ids = collect($page2->json('data'))->pluck('id');\n        expect($page1Ids->intersect($page2Ids))->toBeEmpty();\n    });\n\n    it('caps per_page at maximum allowed value', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/notes?per_page=500')\n            ->assertUnprocessable()\n            ->assertInvalid(['per_page']);\n    });\n\n    it('returns empty data array for page beyond results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Note::factory(2)->for($this->team)->create();\n\n        $this->getJson('/api/v1/notes?page=999')\n            ->assertOk()\n            ->assertJsonCount(0, 'data');\n    });\n});\n\ndescribe('mass assignment protection', function (): void {\n    it('ignores team_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n\n        $this->postJson('/api/v1/notes', [\n            'title' => 'Test Note',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertCreated();\n\n        $note = Note::query()->where('title', 'Test Note')->first();\n        expect($note->team_id)->toBe($this->team->id);\n    });\n\n    it('ignores creator_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherUser = User::factory()->create();\n\n        $this->postJson('/api/v1/notes', [\n            'title' => 'Test Note',\n            'creator_id' => $otherUser->id,\n        ])\n            ->assertCreated();\n\n        $note = Note::query()->where('title', 'Test Note')->first();\n        expect($note->creator_id)->toBe($this->user->id);\n    });\n\n    it('ignores team_id in update request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $note = Note::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n\n        $this->putJson(\"/api/v1/notes/{$note->id}\", [\n            'title' => 'Updated',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertOk();\n\n        expect($note->refresh()->team_id)->toBe($this->team->id);\n    });\n});\n\ndescribe('input validation', function (): void {\n    it('rejects title exceeding 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/notes', ['title' => str_repeat('a', 256)])\n            ->assertUnprocessable()\n            ->assertInvalid(['title']);\n    });\n\n    it('rejects non-string title', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/notes', ['title' => 12345])\n            ->assertUnprocessable()\n            ->assertInvalid(['title']);\n    });\n\n    it('rejects array as title', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/notes', ['title' => ['nested' => 'value']])\n            ->assertUnprocessable()\n            ->assertInvalid(['title']);\n    });\n\n    it('accepts title at exactly 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/notes', ['title' => str_repeat('a', 255)])\n            ->assertCreated();\n    });\n});\n\ndescribe('soft deletes', function (): void {\n    it('excludes soft-deleted notes from list', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $note = Note::factory()->for($this->team)->create();\n        $deleted = Note::factory()->for($this->team)->create();\n        $deleted->delete();\n\n        $ids = collect($this->getJson('/api/v1/notes')->json('data'))->pluck('id');\n        expect($ids)->toContain($note->id);\n        expect($ids)->not->toContain($deleted->id);\n    });\n\n    it('cannot show a soft-deleted note', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $note = Note::factory()->for($this->team)->create();\n        $note->delete();\n\n        $this->getJson(\"/api/v1/notes/{$note->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('non-existent record', function (): void {\n    it('returns 404 for non-existent note', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/notes/'.Str::ulid())\n            ->assertNotFound();\n    });\n});\n\nit('can create a note with relationship ids', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n    $person = People::factory()->for($this->team)->create();\n    $opportunity = Opportunity::factory()->for($this->team)->create();\n\n    $this->postJson('/api/v1/notes', [\n        'title' => 'Linked note',\n        'company_ids' => [$company->id],\n        'people_ids' => [$person->id],\n        'opportunity_ids' => [$opportunity->id],\n    ])\n        ->assertCreated();\n\n    $note = Note::query()->where('title', 'Linked note')->first();\n    expect($note->companies)->toHaveCount(1)\n        ->and($note->people)->toHaveCount(1)\n        ->and($note->opportunities)->toHaveCount(1);\n});\n\nit('rejects cross-tenant relationship ids on note create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $otherTeam = Team::factory()->create();\n    $otherCompany = Company::factory()->for($otherTeam)->create();\n\n    $this->postJson('/api/v1/notes', [\n        'title' => 'Should fail',\n        'company_ids' => [$otherCompany->id],\n    ])\n        ->assertUnprocessable()\n        ->assertInvalid(['company_ids.0']);\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/OpportunitiesApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\Opportunity\\CreateOpportunity;\nuse App\\Actions\\Opportunity\\DeleteOpportunity;\nuse App\\Actions\\Opportunity\\ListOpportunities;\nuse App\\Actions\\Opportunity\\UpdateOpportunity;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Controllers\\Api\\V1\\OpportunitiesController;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldSection;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\n\nmutates(\n    OpportunitiesController::class,\n    CreateOpportunity::class,\n    UpdateOpportunity::class,\n    DeleteOpportunity::class,\n    ListOpportunities::class,\n);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/opportunities')->assertUnauthorized();\n});\n\nit('can list opportunities', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $seeded = Opportunity::query()->where('team_id', $this->team->id)->count();\n    Opportunity::factory(3)->for($this->team)->create();\n\n    $this->getJson('/api/v1/opportunities')\n        ->assertOk()\n        ->assertJsonCount($seeded + 3, 'data')\n        ->assertJsonStructure(['data' => [['id', 'type', 'attributes']]]);\n});\n\nit('can create an opportunity', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/opportunities', ['name' => 'Big Deal'])\n        ->assertCreated()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->whereType('id', 'string')\n                ->where('type', 'opportunities')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Big Deal')\n                    ->where('creation_source', CreationSource::API->value)\n                    ->whereType('created_at', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n\n    $this->assertDatabaseHas('opportunities', ['name' => 'Big Deal', 'team_id' => $this->team->id]);\n});\n\nit('validates required fields on create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/opportunities', [])\n        ->assertUnprocessable()\n        ->assertInvalid(['name']);\n});\n\nit('can show an opportunity', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $opportunity = Opportunity::factory()->for($this->team)->create(['name' => 'Show Test']);\n\n    $this->getJson(\"/api/v1/opportunities/{$opportunity->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $opportunity->id)\n                ->where('type', 'opportunities')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Show Test')\n                    ->whereType('creation_source', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can update an opportunity', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $opportunity = Opportunity::factory()->for($this->team)->create();\n\n    $this->putJson(\"/api/v1/opportunities/{$opportunity->id}\", ['name' => 'Updated Name'])\n        ->assertOk()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $opportunity->id)\n                ->where('type', 'opportunities')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Updated Name')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can delete an opportunity', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $opportunity = Opportunity::factory()->for($this->team)->create();\n\n    $this->deleteJson(\"/api/v1/opportunities/{$opportunity->id}\")\n        ->assertNoContent();\n\n    $this->assertSoftDeleted('opportunities', ['id' => $opportunity->id]);\n});\n\nit('scopes opportunities to current team', function (): void {\n    $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create(['team_id' => Team::factory()->create()->id]));\n\n    Sanctum::actingAs($this->user);\n\n    $ownOpportunity = Opportunity::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/opportunities');\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($ownOpportunity->id);\n    expect($ids)->not->toContain($otherOpportunity->id);\n});\n\ndescribe('cross-tenant isolation', function (): void {\n    it('cannot show an opportunity from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->getJson(\"/api/v1/opportunities/{$otherOpportunity->id}\")\n            ->assertNotFound();\n    });\n\n    it('cannot update an opportunity from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->putJson(\"/api/v1/opportunities/{$otherOpportunity->id}\", ['name' => 'Hacked'])\n            ->assertNotFound();\n    });\n\n    it('cannot delete an opportunity from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->deleteJson(\"/api/v1/opportunities/{$otherOpportunity->id}\")\n            ->assertNotFound();\n    });\n\n    it('rejects company_id from another team on create', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        $this->postJson('/api/v1/opportunities', [\n            'name' => 'Test Deal',\n            'company_id' => $otherCompany->id,\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['company_id']);\n    });\n\n    it('rejects contact_id from another team on create', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherPerson = People::withoutEvents(fn () => People::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        $this->postJson('/api/v1/opportunities', [\n            'name' => 'Test Deal',\n            'contact_id' => $otherPerson->id,\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['contact_id']);\n    });\n});\n\ndescribe('includes', function (): void {\n    it('can include creator on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        $this->getJson(\"/api/v1/opportunities/{$opportunity->id}?include=creator\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include creator on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory()->for($this->team)->create();\n\n        $this->getJson('/api/v1/opportunities?include=creator')\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.0.relationships.creator')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include company on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $opportunity = Opportunity::factory()->for($this->team)->create(['company_id' => $company->id]);\n\n        $this->getJson(\"/api/v1/opportunities/{$opportunity->id}?include=company\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.company.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'companies')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'companies')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include contact on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n        $opportunity = Opportunity::factory()->for($this->team)->create(['contact_id' => $person->id]);\n\n        $this->getJson(\"/api/v1/opportunities/{$opportunity->id}?include=contact\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.contact.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'people')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'people')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include multiple relations', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $opportunity = Opportunity::factory()->for($this->team)->create(['company_id' => $company->id]);\n\n        $this->getJson(\"/api/v1/opportunities/{$opportunity->id}?include=creator,company\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator')\n                ->has('data.relationships.company')\n                ->etc()\n            );\n    });\n\n    it('does not include relations when not requested', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/opportunities/{$opportunity->id}\")\n            ->assertOk();\n\n        expect($response->json('data.relationships'))->toBeNull();\n    });\n\n    it('can include relationship counts', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        $response = $this->getJson('/api/v1/opportunities?include=tasksCount');\n\n        $response->assertOk();\n\n        $oppData = collect($response->json('data'))\n            ->firstWhere('id', $opportunity->id);\n        expect($oppData['attributes']['tasks_count'])->toBe(0);\n    });\n\n    it('rejects disallowed includes on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/opportunities?include=secret')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('filtering and sorting', function (): void {\n    it('can filter opportunities by name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory()->for($this->team)->create(['name' => 'Enterprise Deal']);\n        Opportunity::factory()->for($this->team)->create(['name' => 'Small Contract']);\n\n        $response = $this->getJson('/api/v1/opportunities?filter[name]=Enterprise');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name');\n        expect($names)->toContain('Enterprise Deal');\n        expect($names)->not->toContain('Small Contract');\n    });\n\n    it('can filter opportunities by company_id', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $matched = Opportunity::factory()->for($this->team)->create(['company_id' => $company->id]);\n        $unmatched = Opportunity::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/opportunities?filter[company_id]={$company->id}\");\n\n        $response->assertOk();\n\n        $ids = collect($response->json('data'))->pluck('id');\n        expect($ids)->toContain($matched->id);\n        expect($ids)->not->toContain($unmatched->id);\n    });\n\n    it('can sort opportunities by name ascending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory()->for($this->team)->create(['name' => 'Zulu Deal']);\n        Opportunity::factory()->for($this->team)->create(['name' => 'Alpha Deal']);\n\n        $response = $this->getJson('/api/v1/opportunities?sort=name');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name')->values();\n        $alphaIndex = $names->search('Alpha Deal');\n        $zuluIndex = $names->search('Zulu Deal');\n        expect($alphaIndex)->toBeLessThan($zuluIndex);\n    });\n\n    it('can sort opportunities by name descending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory()->for($this->team)->create(['name' => 'Alpha Deal']);\n        Opportunity::factory()->for($this->team)->create(['name' => 'Zulu Deal']);\n\n        $response = $this->getJson('/api/v1/opportunities?sort=-name');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name')->values();\n        $zuluIndex = $names->search('Zulu Deal');\n        $alphaIndex = $names->search('Alpha Deal');\n        expect($zuluIndex)->toBeLessThan($alphaIndex);\n    });\n\n    it('rejects disallowed filter fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/opportunities?filter[team_id]=fake')\n            ->assertStatus(400);\n    });\n\n    it('rejects disallowed sort fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/opportunities?sort=team_id')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('pagination', function (): void {\n    it('paginates with per_page parameter', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory(5)->for($this->team)->create();\n\n        $this->getJson('/api/v1/opportunities?per_page=2')\n            ->assertOk()\n            ->assertJsonCount(2, 'data');\n    });\n\n    it('returns second page of results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory(5)->for($this->team)->create();\n\n        $page1 = $this->getJson('/api/v1/opportunities?per_page=3&page=1');\n        $page2 = $this->getJson('/api/v1/opportunities?per_page=3&page=2');\n\n        $page1->assertOk()->assertJsonCount(3, 'data');\n        $page2->assertOk();\n\n        $page1Ids = collect($page1->json('data'))->pluck('id');\n        $page2Ids = collect($page2->json('data'))->pluck('id');\n        expect($page1Ids->intersect($page2Ids))->toBeEmpty();\n    });\n\n    it('caps per_page at maximum allowed value', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/opportunities?per_page=500')\n            ->assertUnprocessable()\n            ->assertInvalid(['per_page']);\n    });\n\n    it('returns empty data array for page beyond results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Opportunity::factory(2)->for($this->team)->create();\n\n        $this->getJson('/api/v1/opportunities?page=999')\n            ->assertOk()\n            ->assertJsonCount(0, 'data');\n    });\n});\n\ndescribe('mass assignment protection', function (): void {\n    it('ignores team_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n\n        $this->postJson('/api/v1/opportunities', [\n            'name' => 'Test Deal',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertCreated();\n\n        $opportunity = Opportunity::query()->where('name', 'Test Deal')->first();\n        expect($opportunity->team_id)->toBe($this->team->id);\n    });\n\n    it('ignores creator_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherUser = User::factory()->create();\n\n        $this->postJson('/api/v1/opportunities', [\n            'name' => 'Test Deal',\n            'creator_id' => $otherUser->id,\n        ])\n            ->assertCreated();\n\n        $opportunity = Opportunity::query()->where('name', 'Test Deal')->first();\n        expect($opportunity->creator_id)->toBe($this->user->id);\n    });\n\n    it('ignores team_id in update request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n\n        $this->putJson(\"/api/v1/opportunities/{$opportunity->id}\", [\n            'name' => 'Updated',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertOk();\n\n        expect($opportunity->refresh()->team_id)->toBe($this->team->id);\n    });\n});\n\ndescribe('input validation', function (): void {\n    it('rejects name exceeding 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/opportunities', ['name' => str_repeat('a', 256)])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('rejects non-string name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/opportunities', ['name' => 12345])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('rejects array as name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/opportunities', ['name' => ['nested' => 'value']])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('accepts name at exactly 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/opportunities', ['name' => str_repeat('a', 255)])\n            ->assertCreated();\n    });\n\n    it('accepts null to clear a date custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $section = CustomFieldSection::create([\n            'tenant_id' => $this->team->id,\n            'entity_type' => 'opportunity',\n            'name' => 'Date Fields',\n            'code' => 'date_fields_test',\n            'type' => 'section',\n            'sort_order' => 99,\n            'active' => true,\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'opportunity',\n            'code' => 'target_close_date',\n            'name' => 'Target Close Date',\n            'type' => 'date',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        $this->putJson(\"/api/v1/opportunities/{$opportunity->id}\", [\n            'name' => $opportunity->name,\n            'custom_fields' => ['target_close_date' => null],\n        ])\n            ->assertOk()\n            ->assertValid();\n    });\n\n    it('accepts null to clear a datetime custom field', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $section = CustomFieldSection::create([\n            'tenant_id' => $this->team->id,\n            'entity_type' => 'opportunity',\n            'name' => 'Timestamps',\n            'code' => 'timestamps',\n            'type' => 'section',\n            'sort_order' => 2,\n            'active' => true,\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'opportunity',\n            'code' => 'last_contacted_at',\n            'name' => 'Last Contacted At',\n            'type' => 'date-time',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        $this->putJson(\"/api/v1/opportunities/{$opportunity->id}\", [\n            'name' => $opportunity->name,\n            'custom_fields' => ['last_contacted_at' => null],\n        ])\n            ->assertOk()\n            ->assertValid();\n    });\n});\n\ndescribe('soft deletes', function (): void {\n    it('excludes soft-deleted opportunities from list', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n        $deleted = Opportunity::factory()->for($this->team)->create();\n        $deleted->delete();\n\n        $ids = collect($this->getJson('/api/v1/opportunities')->json('data'))->pluck('id');\n        expect($ids)->toContain($opportunity->id);\n        expect($ids)->not->toContain($deleted->id);\n    });\n\n    it('cannot show a soft-deleted opportunity', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n        $opportunity->delete();\n\n        $this->getJson(\"/api/v1/opportunities/{$opportunity->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('non-existent record', function (): void {\n    it('returns 404 for non-existent opportunity', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/opportunities/'.Str::ulid())\n            ->assertNotFound();\n    });\n});\n\nit('includes company_id and contact_id in attributes', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n    $person = People::factory()->for($this->team)->create();\n    $opportunity = Opportunity::factory()->for($this->team)->create([\n        'company_id' => $company->id,\n        'contact_id' => $person->id,\n    ]);\n\n    $this->getJson(\"/api/v1/opportunities/{$opportunity->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data.attributes', fn (AssertableJson $json) => $json\n                ->where('company_id', $company->id)\n                ->where('contact_id', $person->id)\n                ->etc()\n            )\n            ->etc()\n        );\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/PeopleApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\People\\CreatePeople;\nuse App\\Actions\\People\\DeletePeople;\nuse App\\Actions\\People\\ListPeople;\nuse App\\Actions\\People\\UpdatePeople;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Controllers\\Api\\V1\\PeopleController;\nuse App\\Models\\Company;\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\n\nmutates(\n    PeopleController::class,\n    CreatePeople::class,\n    UpdatePeople::class,\n    DeletePeople::class,\n    ListPeople::class,\n);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/people')->assertUnauthorized();\n});\n\nit('can list people', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $people = People::factory(3)->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/people');\n\n    $response->assertOk()\n        ->assertJsonStructure(['data' => [['id', 'type', 'attributes']]]);\n\n    $ids = collect($response->json('data'))->pluck('id');\n    $people->each(fn (People $person) => expect($ids)->toContain($person->id));\n});\n\nit('can create a person', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/people', ['name' => 'John Doe'])\n        ->assertCreated()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->whereType('id', 'string')\n                ->where('type', 'people')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'John Doe')\n                    ->where('creation_source', CreationSource::API->value)\n                    ->whereType('created_at', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n\n    $this->assertDatabaseHas('people', ['name' => 'John Doe', 'team_id' => $this->team->id]);\n});\n\nit('validates required fields on create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/people', [])\n        ->assertUnprocessable()\n        ->assertInvalid(['name']);\n});\n\nit('can show a person', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $person = People::factory()->for($this->team)->create(['name' => 'Show Test']);\n\n    $this->getJson(\"/api/v1/people/{$person->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $person->id)\n                ->where('type', 'people')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Show Test')\n                    ->whereType('creation_source', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can update a person', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $person = People::factory()->for($this->team)->create();\n\n    $this->putJson(\"/api/v1/people/{$person->id}\", ['name' => 'Updated Name'])\n        ->assertOk()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $person->id)\n                ->where('type', 'people')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Updated Name')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can delete a person', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $person = People::factory()->for($this->team)->create();\n\n    $this->deleteJson(\"/api/v1/people/{$person->id}\")\n        ->assertNoContent();\n\n    $this->assertSoftDeleted('people', ['id' => $person->id]);\n});\n\nit('scopes people to current team', function (): void {\n    $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n    Sanctum::actingAs($this->user);\n\n    $ownPerson = People::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/people');\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($ownPerson->id);\n    expect($ids)->not->toContain($otherPerson->id);\n});\n\ndescribe('cross-tenant isolation', function (): void {\n    it('cannot show a person from another team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n        Sanctum::actingAs($this->user);\n\n        $this->getJson(\"/api/v1/people/{$otherPerson->id}\")\n            ->assertNotFound();\n    });\n\n    it('cannot update a person from another team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n        Sanctum::actingAs($this->user);\n\n        $this->putJson(\"/api/v1/people/{$otherPerson->id}\", ['name' => 'Hacked'])\n            ->assertNotFound();\n    });\n\n    it('cannot delete a person from another team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n        Sanctum::actingAs($this->user);\n\n        $this->deleteJson(\"/api/v1/people/{$otherPerson->id}\")\n            ->assertNotFound();\n    });\n\n    it('rejects company_id from another team on create', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        $this->postJson('/api/v1/people', [\n            'name' => 'Test Person',\n            'company_id' => $otherCompany->id,\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['company_id']);\n    });\n\n    it('rejects company_id from another team on update', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        $this->putJson(\"/api/v1/people/{$person->id}\", [\n            'company_id' => $otherCompany->id,\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['company_id']);\n    });\n});\n\ndescribe('includes', function (): void {\n    it('can include creator on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n\n        $this->getJson(\"/api/v1/people/{$person->id}?include=creator\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include creator on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory()->for($this->team)->create();\n\n        $this->getJson('/api/v1/people?include=creator')\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.0.relationships.creator')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include company on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $person = People::factory()->for($this->team)->create(['company_id' => $company->id]);\n\n        $this->getJson(\"/api/v1/people/{$person->id}?include=company\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.company.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'companies')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'companies')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include multiple relations', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $person = People::factory()->for($this->team)->create(['company_id' => $company->id]);\n\n        $this->getJson(\"/api/v1/people/{$person->id}?include=creator,company\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator')\n                ->has('data.relationships.company')\n                ->etc()\n            );\n    });\n\n    it('does not include relations when not requested', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/people/{$person->id}\")\n            ->assertOk();\n\n        expect($response->json('data.relationships'))->toBeNull();\n    });\n\n    it('can include relationship counts', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n\n        $response = $this->getJson('/api/v1/people?include=tasksCount');\n\n        $response->assertOk();\n\n        $personData = collect($response->json('data'))\n            ->firstWhere('id', $person->id);\n        expect($personData['attributes']['tasks_count'])->toBe(0);\n    });\n\n    it('rejects disallowed includes on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/people?include=secret')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('filtering and sorting', function (): void {\n    it('can filter people by name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory()->for($this->team)->create(['name' => 'Alice Johnson']);\n        People::factory()->for($this->team)->create(['name' => 'Bob Smith']);\n\n        $response = $this->getJson('/api/v1/people?filter[name]=Alice');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name');\n        expect($names)->toContain('Alice Johnson');\n        expect($names)->not->toContain('Bob Smith');\n    });\n\n    it('can filter people by company_id', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $company = Company::factory()->for($this->team)->create();\n        $matched = People::factory()->for($this->team)->create(['company_id' => $company->id]);\n        $unmatched = People::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/people?filter[company_id]={$company->id}\");\n\n        $response->assertOk();\n\n        $ids = collect($response->json('data'))->pluck('id');\n        expect($ids)->toContain($matched->id);\n        expect($ids)->not->toContain($unmatched->id);\n    });\n\n    it('can sort people by name ascending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory()->for($this->team)->create(['name' => 'Zulu Person']);\n        People::factory()->for($this->team)->create(['name' => 'Alpha Person']);\n\n        $response = $this->getJson('/api/v1/people?sort=name');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name')->values();\n        $alphaIndex = $names->search('Alpha Person');\n        $zuluIndex = $names->search('Zulu Person');\n        expect($alphaIndex)->toBeLessThan($zuluIndex);\n    });\n\n    it('can sort people by name descending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory()->for($this->team)->create(['name' => 'Alpha Person']);\n        People::factory()->for($this->team)->create(['name' => 'Zulu Person']);\n\n        $response = $this->getJson('/api/v1/people?sort=-name');\n\n        $response->assertOk();\n\n        $names = collect($response->json('data'))->pluck('attributes.name')->values();\n        $zuluIndex = $names->search('Zulu Person');\n        $alphaIndex = $names->search('Alpha Person');\n        expect($zuluIndex)->toBeLessThan($alphaIndex);\n    });\n\n    it('rejects disallowed filter fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/people?filter[team_id]=fake')\n            ->assertStatus(400);\n    });\n\n    it('rejects disallowed sort fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/people?sort=team_id')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('pagination', function (): void {\n    it('paginates with per_page parameter', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory(5)->for($this->team)->create();\n\n        $this->getJson('/api/v1/people?per_page=2')\n            ->assertOk()\n            ->assertJsonCount(2, 'data');\n    });\n\n    it('returns second page of results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory(5)->for($this->team)->create();\n\n        $page1 = $this->getJson('/api/v1/people?per_page=3&page=1');\n        $page2 = $this->getJson('/api/v1/people?per_page=3&page=2');\n\n        $page1->assertOk()->assertJsonCount(3, 'data');\n        $page2->assertOk();\n\n        $page1Ids = collect($page1->json('data'))->pluck('id');\n        $page2Ids = collect($page2->json('data'))->pluck('id');\n        expect($page1Ids->intersect($page2Ids))->toBeEmpty();\n    });\n\n    it('caps per_page at maximum allowed value', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/people?per_page=500')\n            ->assertUnprocessable()\n            ->assertInvalid(['per_page']);\n    });\n\n    it('returns empty data array for page beyond results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        People::factory(2)->for($this->team)->create();\n\n        $this->getJson('/api/v1/people?page=999')\n            ->assertOk()\n            ->assertJsonCount(0, 'data');\n    });\n});\n\ndescribe('mass assignment protection', function (): void {\n    it('ignores team_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n\n        $this->postJson('/api/v1/people', [\n            'name' => 'Test Person',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertCreated();\n\n        $person = People::query()->where('name', 'Test Person')->first();\n        expect($person->team_id)->toBe($this->team->id);\n    });\n\n    it('ignores creator_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherUser = User::factory()->create();\n\n        $this->postJson('/api/v1/people', [\n            'name' => 'Test Person',\n            'creator_id' => $otherUser->id,\n        ])\n            ->assertCreated();\n\n        $person = People::query()->where('name', 'Test Person')->first();\n        expect($person->creator_id)->toBe($this->user->id);\n    });\n\n    it('ignores team_id in update request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n\n        $this->putJson(\"/api/v1/people/{$person->id}\", [\n            'name' => 'Updated',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertOk();\n\n        expect($person->refresh()->team_id)->toBe($this->team->id);\n    });\n});\n\ndescribe('input validation', function (): void {\n    it('rejects name exceeding 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/people', ['name' => str_repeat('a', 256)])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('rejects non-string name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/people', ['name' => 12345])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('rejects array as name', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/people', ['name' => ['nested' => 'value']])\n            ->assertUnprocessable()\n            ->assertInvalid(['name']);\n    });\n\n    it('accepts name at exactly 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/people', ['name' => str_repeat('a', 255)])\n            ->assertCreated();\n    });\n\n    it('rejects invalid company_id format', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/people', [\n            'name' => 'Test Person',\n            'company_id' => 'not-a-valid-id',\n        ])\n            ->assertUnprocessable()\n            ->assertInvalid(['company_id']);\n    });\n});\n\ndescribe('soft deletes', function (): void {\n    it('excludes soft-deleted people from list', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n        $deleted = People::factory()->for($this->team)->create();\n        $deleted->delete();\n\n        $ids = collect($this->getJson('/api/v1/people')->json('data'))->pluck('id');\n        expect($ids)->toContain($person->id);\n        expect($ids)->not->toContain($deleted->id);\n    });\n\n    it('cannot show a soft-deleted person', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $person = People::factory()->for($this->team)->create();\n        $person->delete();\n\n        $this->getJson(\"/api/v1/people/{$person->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('non-existent record', function (): void {\n    it('returns 404 for non-existent person', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/people/'.Str::ulid())\n            ->assertNotFound();\n    });\n});\n\nit('includes company_id in attributes', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n    $person = People::factory()->for($this->team)->create([\n        'company_id' => $company->id,\n    ]);\n\n    $this->getJson(\"/api/v1/people/{$person->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data.attributes', fn (AssertableJson $json) => $json\n                ->where('company_id', $company->id)\n                ->etc()\n            )\n            ->etc()\n        );\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/TasksApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\Task\\CreateTask;\nuse App\\Actions\\Task\\DeleteTask;\nuse App\\Actions\\Task\\ListTasks;\nuse App\\Actions\\Task\\UpdateTask;\nuse App\\Enums\\CreationSource;\nuse App\\Http\\Controllers\\Api\\V1\\TasksController;\nuse App\\Models\\Company;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\n\nmutates(\n    TasksController::class,\n    CreateTask::class,\n    UpdateTask::class,\n    DeleteTask::class,\n    ListTasks::class,\n);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/tasks')->assertUnauthorized();\n});\n\nit('can list tasks', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $seeded = Task::query()->where('team_id', $this->team->id)->count();\n    Task::factory(3)->for($this->team)->create();\n\n    $this->getJson('/api/v1/tasks')\n        ->assertOk()\n        ->assertJsonCount($seeded + 3, 'data')\n        ->assertJsonStructure(['data' => [['id', 'type', 'attributes']]]);\n});\n\nit('can create a task', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/tasks', ['title' => 'Fix bug'])\n        ->assertCreated()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->whereType('id', 'string')\n                ->where('type', 'tasks')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('title', 'Fix bug')\n                    ->where('creation_source', CreationSource::API->value)\n                    ->whereType('created_at', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n\n    $this->assertDatabaseHas('tasks', ['title' => 'Fix bug', 'team_id' => $this->team->id]);\n});\n\nit('validates required fields on create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $this->postJson('/api/v1/tasks', [])\n        ->assertUnprocessable()\n        ->assertInvalid(['title']);\n});\n\nit('can show a task', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $task = Task::factory()->for($this->team)->create(['title' => 'Show Test']);\n\n    $this->getJson(\"/api/v1/tasks/{$task->id}\")\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $task->id)\n                ->where('type', 'tasks')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('title', 'Show Test')\n                    ->whereType('creation_source', 'string')\n                    ->whereType('custom_fields', 'array')\n                    ->missing('team_id')\n                    ->missing('creator_id')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can update a task', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $task = Task::factory()->for($this->team)->create();\n\n    $this->putJson(\"/api/v1/tasks/{$task->id}\", ['title' => 'Updated Title'])\n        ->assertOk()\n        ->assertValid()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->where('id', $task->id)\n                ->where('type', 'tasks')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('title', 'Updated Title')\n                    ->etc()\n                )\n                ->etc()\n            )\n        );\n});\n\nit('can delete a task', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $task = Task::factory()->for($this->team)->create();\n\n    $this->deleteJson(\"/api/v1/tasks/{$task->id}\")\n        ->assertNoContent();\n\n    $this->assertSoftDeleted('tasks', ['id' => $task->id]);\n});\n\nit('scopes tasks to current team', function (): void {\n    $otherTask = Task::withoutEvents(fn () => Task::factory()->create(['team_id' => Team::factory()->create()->id]));\n\n    Sanctum::actingAs($this->user);\n\n    $ownTask = Task::factory()->for($this->team)->create();\n\n    $response = $this->getJson('/api/v1/tasks');\n\n    $response->assertOk();\n\n    $ids = collect($response->json('data'))->pluck('id');\n    expect($ids)->toContain($ownTask->id);\n    expect($ids)->not->toContain($otherTask->id);\n});\n\nit('can create a task with relationship ids', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $company = Company::factory()->for($this->team)->create();\n    $person = People::factory()->for($this->team)->create();\n    $opportunity = Opportunity::factory()->for($this->team)->create();\n\n    $this->postJson('/api/v1/tasks', [\n        'title' => 'Linked task',\n        'company_ids' => [$company->id],\n        'people_ids' => [$person->id],\n        'opportunity_ids' => [$opportunity->id],\n        'assignee_ids' => [$this->user->id],\n    ])\n        ->assertCreated();\n\n    $task = Task::query()->where('title', 'Linked task')->first();\n    expect($task->companies)->toHaveCount(1)\n        ->and($task->people)->toHaveCount(1)\n        ->and($task->opportunities)->toHaveCount(1)\n        ->and($task->assignees)->toHaveCount(1);\n});\n\nit('rejects cross-tenant relationship ids on task create', function (): void {\n    Sanctum::actingAs($this->user);\n\n    $otherTeam = Team::factory()->create();\n    $otherCompany = Company::factory()->for($otherTeam)->create();\n\n    $this->postJson('/api/v1/tasks', [\n        'title' => 'Should fail',\n        'company_ids' => [$otherCompany->id],\n    ])\n        ->assertUnprocessable()\n        ->assertInvalid(['company_ids.0']);\n});\n\ndescribe('cross-tenant isolation', function (): void {\n    it('cannot show a task from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->getJson(\"/api/v1/tasks/{$otherTask->id}\")\n            ->assertNotFound();\n    });\n\n    it('cannot update a task from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->putJson(\"/api/v1/tasks/{$otherTask->id}\", ['title' => 'Hacked'])\n            ->assertNotFound();\n    });\n\n    it('cannot delete a task from another team', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create(['team_id' => $otherTeam->id]));\n\n        $this->deleteJson(\"/api/v1/tasks/{$otherTask->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('includes', function (): void {\n    it('can include creator on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n\n        $this->getJson(\"/api/v1/tasks/{$task->id}?include=creator\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator.data', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                )\n                ->has('included.0', fn (AssertableJson $json) => $json\n                    ->whereType('id', 'string')\n                    ->where('type', 'users')\n                    ->has('attributes')\n                    ->etc()\n                )\n                ->etc()\n            );\n    });\n\n    it('can include creator on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory()->for($this->team)->create();\n\n        $this->getJson('/api/v1/tasks?include=creator')\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.0.relationships.creator')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include assignees on show endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n        $task->assignees()->attach($this->user);\n\n        $this->getJson(\"/api/v1/tasks/{$task->id}?include=assignees\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.assignees.data')\n                ->has('included')\n                ->etc()\n            );\n    });\n\n    it('can include multiple relations', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n        $task->assignees()->attach($this->user);\n\n        $this->getJson(\"/api/v1/tasks/{$task->id}?include=creator,assignees\")\n            ->assertOk()\n            ->assertJson(fn (AssertableJson $json) => $json\n                ->has('data.relationships.creator')\n                ->has('data.relationships.assignees')\n                ->etc()\n            );\n    });\n\n    it('does not include relations when not requested', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n\n        $response = $this->getJson(\"/api/v1/tasks/{$task->id}\")\n            ->assertOk();\n\n        expect($response->json('data.relationships'))->toBeNull();\n    });\n\n    it('can include relationship counts', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n\n        $response = $this->getJson('/api/v1/tasks?include=assigneesCount');\n\n        $response->assertOk();\n\n        $taskData = collect($response->json('data'))\n            ->firstWhere('id', $task->id);\n        expect($taskData['attributes']['assignees_count'])->toBe(0);\n    });\n\n    it('rejects disallowed includes on list endpoint', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/tasks?include=secret')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('filtering and sorting', function (): void {\n    it('ignores assigned_to_me filter when value is false', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $unassignedTask = Task::factory()->for($this->team)->create(['title' => 'Unassigned']);\n        $assignedTask = Task::factory()->for($this->team)->create(['title' => 'Assigned']);\n        $assignedTask->assignees()->attach($this->user);\n\n        $this->getJson('/api/v1/tasks?filter[assigned_to_me]=false')\n            ->assertOk()\n            ->assertJsonFragment(['title' => 'Unassigned'])\n            ->assertJsonFragment(['title' => 'Assigned']);\n    });\n\n    it('can filter tasks by title', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory()->for($this->team)->create(['title' => 'Fix login bug']);\n        Task::factory()->for($this->team)->create(['title' => 'Deploy to staging']);\n\n        $response = $this->getJson('/api/v1/tasks?filter[title]=login');\n\n        $response->assertOk();\n\n        $titles = collect($response->json('data'))->pluck('attributes.title');\n        expect($titles)->toContain('Fix login bug');\n        expect($titles)->not->toContain('Deploy to staging');\n    });\n\n    it('can sort tasks by title ascending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory()->for($this->team)->create(['title' => 'Zulu Task']);\n        Task::factory()->for($this->team)->create(['title' => 'Alpha Task']);\n\n        $response = $this->getJson('/api/v1/tasks?sort=title');\n\n        $response->assertOk();\n\n        $titles = collect($response->json('data'))->pluck('attributes.title')->values();\n        $alphaIndex = $titles->search('Alpha Task');\n        $zuluIndex = $titles->search('Zulu Task');\n        expect($alphaIndex)->toBeLessThan($zuluIndex);\n    });\n\n    it('can sort tasks by title descending', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory()->for($this->team)->create(['title' => 'Alpha Task']);\n        Task::factory()->for($this->team)->create(['title' => 'Zulu Task']);\n\n        $response = $this->getJson('/api/v1/tasks?sort=-title');\n\n        $response->assertOk();\n\n        $titles = collect($response->json('data'))->pluck('attributes.title')->values();\n        $zuluIndex = $titles->search('Zulu Task');\n        $alphaIndex = $titles->search('Alpha Task');\n        expect($zuluIndex)->toBeLessThan($alphaIndex);\n    });\n\n    it('rejects disallowed filter fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/tasks?filter[team_id]=fake')\n            ->assertStatus(400);\n    });\n\n    it('rejects disallowed sort fields', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/tasks?sort=team_id')\n            ->assertStatus(400);\n    });\n});\n\ndescribe('pagination', function (): void {\n    it('paginates with per_page parameter', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory(5)->for($this->team)->create();\n\n        $this->getJson('/api/v1/tasks?per_page=2')\n            ->assertOk()\n            ->assertJsonCount(2, 'data');\n    });\n\n    it('returns second page of results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory(5)->for($this->team)->create();\n\n        $page1 = $this->getJson('/api/v1/tasks?per_page=3&page=1');\n        $page2 = $this->getJson('/api/v1/tasks?per_page=3&page=2');\n\n        $page1->assertOk()->assertJsonCount(3, 'data');\n        $page2->assertOk();\n\n        $page1Ids = collect($page1->json('data'))->pluck('id');\n        $page2Ids = collect($page2->json('data'))->pluck('id');\n        expect($page1Ids->intersect($page2Ids))->toBeEmpty();\n    });\n\n    it('caps per_page at maximum allowed value', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/tasks?per_page=500')\n            ->assertUnprocessable()\n            ->assertInvalid(['per_page']);\n    });\n\n    it('returns empty data array for page beyond results', function (): void {\n        Sanctum::actingAs($this->user);\n\n        Task::factory(2)->for($this->team)->create();\n\n        $this->getJson('/api/v1/tasks?page=999')\n            ->assertOk()\n            ->assertJsonCount(0, 'data');\n    });\n});\n\ndescribe('mass assignment protection', function (): void {\n    it('ignores team_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherTeam = Team::factory()->create();\n\n        $this->postJson('/api/v1/tasks', [\n            'title' => 'Test Task',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertCreated();\n\n        $task = Task::query()->where('title', 'Test Task')->first();\n        expect($task->team_id)->toBe($this->team->id);\n    });\n\n    it('ignores creator_id in create request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $otherUser = User::factory()->create();\n\n        $this->postJson('/api/v1/tasks', [\n            'title' => 'Test Task',\n            'creator_id' => $otherUser->id,\n        ])\n            ->assertCreated();\n\n        $task = Task::query()->where('title', 'Test Task')->first();\n        expect($task->creator_id)->toBe($this->user->id);\n    });\n\n    it('ignores team_id in update request', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n\n        $this->putJson(\"/api/v1/tasks/{$task->id}\", [\n            'title' => 'Updated',\n            'team_id' => $otherTeam->id,\n        ])\n            ->assertOk();\n\n        expect($task->refresh()->team_id)->toBe($this->team->id);\n    });\n});\n\ndescribe('input validation', function (): void {\n    it('rejects title exceeding 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/tasks', ['title' => str_repeat('a', 256)])\n            ->assertUnprocessable()\n            ->assertInvalid(['title']);\n    });\n\n    it('rejects non-string title', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/tasks', ['title' => 12345])\n            ->assertUnprocessable()\n            ->assertInvalid(['title']);\n    });\n\n    it('rejects array as title', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/tasks', ['title' => ['nested' => 'value']])\n            ->assertUnprocessable()\n            ->assertInvalid(['title']);\n    });\n\n    it('accepts title at exactly 255 characters', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->postJson('/api/v1/tasks', ['title' => str_repeat('a', 255)])\n            ->assertCreated();\n    });\n});\n\ndescribe('soft deletes', function (): void {\n    it('excludes soft-deleted tasks from list', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n        $deleted = Task::factory()->for($this->team)->create();\n        $deleted->delete();\n\n        $ids = collect($this->getJson('/api/v1/tasks')->json('data'))->pluck('id');\n        expect($ids)->toContain($task->id);\n        expect($ids)->not->toContain($deleted->id);\n    });\n\n    it('cannot show a soft-deleted task', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $task = Task::factory()->for($this->team)->create();\n        $task->delete();\n\n        $this->getJson(\"/api/v1/tasks/{$task->id}\")\n            ->assertNotFound();\n    });\n});\n\ndescribe('non-existent record', function (): void {\n    it('returns 404 for non-existent task', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/tasks/'.Str::ulid())\n            ->assertNotFound();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/TokenAbilitiesApiTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Middleware\\EnsureTokenHasAbility;\nuse App\\Models\\Company;\nuse App\\Models\\User;\n\nmutates(EnsureTokenHasAbility::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\ndescribe('read-only token', function (): void {\n    beforeEach(function (): void {\n        $this->token = $this->user->createToken('test', ['read'])->plainTextToken;\n    });\n\n    it('can list companies', function (): void {\n        $this->withToken($this->token)\n            ->getJson('/api/v1/companies')\n            ->assertOk();\n    });\n\n    it('can show a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->getJson(\"/api/v1/companies/{$company->id}\")\n            ->assertOk();\n    });\n\n    it('cannot create a company', function (): void {\n        $this->withToken($this->token)\n            ->postJson('/api/v1/companies', ['name' => 'Blocked'])\n            ->assertForbidden();\n    });\n\n    it('cannot update a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Blocked'])\n            ->assertForbidden();\n    });\n\n    it('cannot delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->deleteJson(\"/api/v1/companies/{$company->id}\")\n            ->assertForbidden();\n    });\n});\n\ndescribe('create-only token', function (): void {\n    beforeEach(function (): void {\n        $this->token = $this->user->createToken('test', ['create'])->plainTextToken;\n    });\n\n    it('cannot list companies', function (): void {\n        $this->withToken($this->token)\n            ->getJson('/api/v1/companies')\n            ->assertForbidden();\n    });\n\n    it('can create a company', function (): void {\n        $this->withToken($this->token)\n            ->postJson('/api/v1/companies', ['name' => 'Allowed Corp'])\n            ->assertCreated();\n    });\n\n    it('cannot update a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Blocked'])\n            ->assertForbidden();\n    });\n\n    it('cannot delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->deleteJson(\"/api/v1/companies/{$company->id}\")\n            ->assertForbidden();\n    });\n});\n\ndescribe('update-only token', function (): void {\n    beforeEach(function (): void {\n        $this->token = $this->user->createToken('test', ['update'])->plainTextToken;\n    });\n\n    it('cannot list companies', function (): void {\n        $this->withToken($this->token)\n            ->getJson('/api/v1/companies')\n            ->assertForbidden();\n    });\n\n    it('cannot create a company', function (): void {\n        $this->withToken($this->token)\n            ->postJson('/api/v1/companies', ['name' => 'Blocked'])\n            ->assertForbidden();\n    });\n\n    it('can update a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Updated'])\n            ->assertOk();\n    });\n\n    it('cannot delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->deleteJson(\"/api/v1/companies/{$company->id}\")\n            ->assertForbidden();\n    });\n});\n\ndescribe('delete-only token', function (): void {\n    beforeEach(function (): void {\n        $this->token = $this->user->createToken('test', ['delete'])->plainTextToken;\n    });\n\n    it('cannot list companies', function (): void {\n        $this->withToken($this->token)\n            ->getJson('/api/v1/companies')\n            ->assertForbidden();\n    });\n\n    it('cannot create a company', function (): void {\n        $this->withToken($this->token)\n            ->postJson('/api/v1/companies', ['name' => 'Blocked'])\n            ->assertForbidden();\n    });\n\n    it('can delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->deleteJson(\"/api/v1/companies/{$company->id}\")\n            ->assertNoContent();\n    });\n});\n\ndescribe('wildcard token', function (): void {\n    beforeEach(function (): void {\n        $this->token = $this->user->createToken('test', ['*'])->plainTextToken;\n    });\n\n    it('can list companies', function (): void {\n        $this->withToken($this->token)\n            ->getJson('/api/v1/companies')\n            ->assertOk();\n    });\n\n    it('can create a company', function (): void {\n        $this->withToken($this->token)\n            ->postJson('/api/v1/companies', ['name' => 'Wildcard Corp'])\n            ->assertCreated();\n    });\n\n    it('can update a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Updated'])\n            ->assertOk();\n    });\n\n    it('can delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($this->token)\n            ->deleteJson(\"/api/v1/companies/{$company->id}\")\n            ->assertNoContent();\n    });\n});\n\ndescribe('multi-ability token', function (): void {\n    it('read+create token can list and create but not update or delete', function (): void {\n        $token = $this->user->createToken('test', ['read', 'create'])->plainTextToken;\n\n        $this->withToken($token)\n            ->getJson('/api/v1/companies')\n            ->assertOk();\n\n        $this->withToken($token)\n            ->postJson('/api/v1/companies', ['name' => 'Multi Corp'])\n            ->assertCreated();\n\n        $company = Company::factory()->for($this->team)->create();\n\n        $this->withToken($token)\n            ->putJson(\"/api/v1/companies/{$company->id}\", ['name' => 'Blocked'])\n            ->assertForbidden();\n\n        $this->withToken($token)\n            ->deleteJson(\"/api/v1/companies/{$company->id}\")\n            ->assertForbidden();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Api/V1/UserEndpointTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Illuminate\\Testing\\Fluent\\AssertableJson;\nuse Laravel\\Sanctum\\Sanctum;\n\nit('requires authentication', function (): void {\n    $this->getJson('/api/v1/user')->assertUnauthorized();\n});\n\nit('returns user resource with correct shape', function (): void {\n    $user = User::factory()->withPersonalTeam()->create([\n        'name' => 'Jane Doe',\n        'email' => 'jane@example.com',\n    ]);\n\n    Sanctum::actingAs($user);\n\n    $this->getJson('/api/v1/user')\n        ->assertOk()\n        ->assertJson(fn (AssertableJson $json) => $json\n            ->has('data', fn (AssertableJson $json) => $json\n                ->whereType('id', 'string')\n                ->where('type', 'users')\n                ->has('attributes', fn (AssertableJson $json) => $json\n                    ->where('name', 'Jane Doe')\n                    ->where('email', 'jane@example.com')\n                    ->missing('password')\n                    ->missing('remember_token')\n                    ->missing('two_factor_secret')\n                    ->missing('two_factor_recovery_codes')\n                    ->missing('current_team_id')\n                    ->missing('email_verified_at')\n                    ->missing('profile_photo_path')\n                    ->missing('profile_photo_url')\n                    ->missing('created_at')\n                    ->missing('updated_at')\n                )\n            )\n        );\n});\n\nit('does not expose internal fields in response', function (): void {\n    $user = User::factory()->withPersonalTeam()->create();\n\n    Sanctum::actingAs($user);\n\n    $response = $this->getJson('/api/v1/user')->assertOk();\n\n    $attributes = $response->json('data.attributes');\n\n    expect(array_keys($attributes))->toBe(['name', 'email']);\n});\n"
  },
  {
    "path": "tests/Feature/Auth/AuthenticationTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Pages\\Auth\\Login;\nuse App\\Models\\User;\n\nmutates(Login::class);\n\ntest('login screen can be rendered', function () {\n    $response = $this->get(url()->getAppUrl('login'));\n\n    $response->assertStatus(200);\n});\n\ntest('users can authenticate using the login screen', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->ownedTeams()->first();\n\n    livewire(Login::class)\n        ->fillForm([\n            'email' => $user->email,\n            'password' => 'password',\n        ])\n        ->call('authenticate')\n        ->assertRedirect(url()->getAppUrl(\"{$team->slug}/companies\"));\n\n    $this->assertAuthenticated();\n});\n\ntest('users cannot authenticate with invalid password', function () {\n    $user = User::factory()->create();\n\n    livewire(Login::class)\n        ->fillForm([\n            'email' => $user->email,\n            'password' => 'wrong-password',\n        ])\n        ->call('authenticate')\n        ->assertHasFormErrors(['email']);\n\n    $this->assertGuest();\n});\n"
  },
  {
    "path": "tests/Feature/Auth/PasswordResetTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Auth\\Notifications\\ResetPassword as ResetPasswordNotification;\nuse Filament\\Auth\\Pages\\PasswordReset\\RequestPasswordReset;\nuse Filament\\Auth\\Pages\\PasswordReset\\ResetPassword;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Notification;\nuse Illuminate\\Support\\Facades\\Password;\n\nmutates(RequestPasswordReset::class, ResetPassword::class);\n\ntest('forgot password page can be rendered', function () {\n    $response = $this->get(url()->getAppUrl('password-reset/request'));\n\n    $response->assertSuccessful();\n});\n\ntest('reset password link can be requested', function () {\n    Notification::fake();\n\n    $user = User::factory()->withTeam()->create();\n\n    livewire(RequestPasswordReset::class)\n        ->fillForm([\n            'email' => $user->email,\n        ])\n        ->call('request')\n        ->assertNotified();\n\n    Notification::assertSentTo($user, ResetPasswordNotification::class);\n});\n\ntest('reset password link is not sent for non-existent email', function () {\n    Notification::fake();\n\n    livewire(RequestPasswordReset::class)\n        ->fillForm([\n            'email' => 'nonexistent@example.com',\n        ])\n        ->call('request');\n\n    Notification::assertNothingSent();\n});\n\ntest('password can be reset with valid token', function () {\n    $user = User::factory()->withTeam()->create();\n    $token = Password::broker('users')->createToken($user);\n\n    livewire(ResetPassword::class, [\n        'email' => $user->email,\n        'token' => $token,\n    ])\n        ->fillForm([\n            'password' => 'new-secure-password',\n            'passwordConfirmation' => 'new-secure-password',\n        ])\n        ->call('resetPassword')\n        ->assertNotified()\n        ->assertRedirect();\n\n    expect(Hash::check('new-secure-password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('password cannot be reset with invalid token', function () {\n    $user = User::factory()->withTeam()->create();\n\n    livewire(ResetPassword::class, [\n        'email' => $user->email,\n        'token' => 'invalid-token',\n    ])\n        ->fillForm([\n            'password' => 'new-secure-password',\n            'passwordConfirmation' => 'new-secure-password',\n        ])\n        ->call('resetPassword')\n        ->assertNotified();\n\n    expect(Hash::check('password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('password reset requires confirmation to match', function () {\n    $user = User::factory()->withTeam()->create();\n    $token = Password::broker('users')->createToken($user);\n\n    livewire(ResetPassword::class, [\n        'email' => $user->email,\n        'token' => $token,\n    ])\n        ->fillForm([\n            'password' => 'new-secure-password',\n            'passwordConfirmation' => 'different-password',\n        ])\n        ->call('resetPassword')\n        ->assertHasFormErrors(['password']);\n\n    expect(Hash::check('password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('signed password reset URL is accessible', function () {\n    $user = User::factory()->withTeam()->create();\n    $token = Password::broker('users')->createToken($user);\n\n    $url = Filament::getPanel('app')->getResetPasswordUrl($token, $user);\n\n    $this->get($url)->assertSuccessful();\n});\n\ntest('password reset URL with decoded percent-encoding is accessible', function () {\n    $user = User::factory()->withTeam()->create();\n    $token = Password::broker('users')->createToken($user);\n\n    $url = Filament::getPanel('app')->getResetPasswordUrl($token, $user);\n\n    $this->get(urldecode($url))->assertSuccessful();\n});\n\ntest('password reset URL with tampered email is rejected', function () {\n    $user = User::factory()->withTeam()->create();\n    $token = Password::broker('users')->createToken($user);\n\n    $url = Filament::getPanel('app')->getResetPasswordUrl($token, $user);\n\n    // Tamper with the email parameter\n    $tamperedUrl = preg_replace('/email=[^&]+/', 'email=hacker@example.com', $url);\n\n    $this->get($tamperedUrl)->assertForbidden();\n});\n\ntest('authenticated user is redirected from forgot password page', function () {\n    $user = User::factory()->withTeam()->create();\n    $this->actingAs($user);\n\n    livewire(RequestPasswordReset::class)\n        ->assertRedirect();\n});\n"
  },
  {
    "path": "tests/Feature/Auth/RegistrationTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Pages\\Auth\\Register;\nuse App\\Models\\User;\n\nmutates(Register::class);\n\nit('registers a new user without creating a team', function (): void {\n    livewire(Register::class)\n        ->fillForm([\n            'name' => 'Jane Doe',\n            'email' => 'jane-test@gmail.com',\n            'password' => 'Password123!',\n            'passwordConfirmation' => 'Password123!',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $user = User::where('email', 'jane-test@gmail.com')->first();\n\n    expect($user)->not->toBeNull()\n        ->and($user->ownedTeams)->toHaveCount(0)\n        ->and($user->personalTeam())->toBeNull();\n});\n"
  },
  {
    "path": "tests/Feature/Auth/SocialiteLoginTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\SocialiteProvider;\nuse App\\Http\\Controllers\\Auth\\CallbackController;\nuse App\\Http\\Controllers\\Auth\\RedirectController;\nuse App\\Models\\User;\nuse App\\Models\\UserSocialAccount;\nuse Laravel\\Socialite\\Facades\\Socialite;\nuse Laravel\\Socialite\\Two\\User as SocialiteUser;\n\nmutates(CallbackController::class, RedirectController::class);\n\nfunction makeSocialiteUser(string $id, string $name, string $email): SocialiteUser\n{\n    $user = new SocialiteUser;\n    $user->id = $id;\n    $user->name = $name;\n    $user->email = $email;\n\n    return $user;\n}\n\ntest('redirect to socialite provider', function () {\n    Socialite::fake(SocialiteProvider::GOOGLE->value);\n\n    $response = $this->get(route('auth.socialite.redirect', ['provider' => SocialiteProvider::GOOGLE->value]));\n\n    $response->assertRedirect();\n});\n\ntest('callback from socialite provider creates new user when user does not exist', function () {\n    Socialite::fake(\n        SocialiteProvider::GOOGLE->value,\n        makeSocialiteUser('123456789', 'Test User', 'test@example.com'),\n    );\n\n    $response = $this->get(route('auth.socialite.callback', ['provider' => SocialiteProvider::GOOGLE->value, 'code' => 'test-code']));\n\n    $this->assertDatabaseHas('users', [\n        'email' => 'test@example.com',\n        'name' => 'Test User',\n    ]);\n\n    $this->assertDatabaseHas('user_social_accounts', [\n        'provider_name' => SocialiteProvider::GOOGLE->value,\n        'provider_id' => '123456789',\n    ]);\n\n    $this->assertAuthenticated();\n\n    $response->assertRedirect(url()->getAppUrl());\n});\n\ntest('callback from socialite provider logs in existing user when social account exists', function () {\n    $user = User::factory()->withTeam()->create([\n        'email' => 'existing@example.com',\n        'name' => 'Existing User',\n    ]);\n\n    UserSocialAccount::factory()->create([\n        'user_id' => $user->id,\n        'provider_name' => SocialiteProvider::GOOGLE->value,\n        'provider_id' => '123456789',\n    ]);\n\n    Socialite::fake(\n        SocialiteProvider::GOOGLE->value,\n        makeSocialiteUser('123456789', 'Existing User', 'existing@example.com'),\n    );\n\n    $response = $this->get(route('auth.socialite.callback', ['provider' => SocialiteProvider::GOOGLE->value, 'code' => 'test-code']));\n\n    $this->assertAuthenticated();\n    $this->assertAuthenticatedAs($user);\n\n    $response->assertRedirect(url()->getAppUrl());\n});\n\ntest('callback from socialite provider links social account to existing user when email matches', function () {\n    $user = User::factory()->withTeam()->create([\n        'email' => 'existing@example.com',\n        'name' => 'Existing User',\n    ]);\n\n    Socialite::fake(\n        SocialiteProvider::GOOGLE->value,\n        makeSocialiteUser('123456789', 'Existing User', 'existing@example.com'),\n    );\n\n    $response = $this->get(route('auth.socialite.callback', ['provider' => SocialiteProvider::GOOGLE->value, 'code' => 'test-code']));\n\n    $response->assertRedirect();\n\n    $this->assertAuthenticated();\n    $this->assertAuthenticatedAs($user);\n});\n\ntest('callback from socialite provider handles error gracefully', function () {\n    Socialite::fake(\n        SocialiteProvider::GOOGLE->value,\n        fn () => throw new Exception('Socialite error'),\n    );\n\n    $response = $this->get(route('auth.socialite.callback', ['provider' => SocialiteProvider::GOOGLE->value, 'code' => 'test-code']));\n\n    $response->assertRedirect(route('login'));\n    $response->assertSessionHasErrors(['login']);\n});\n\ntest('callback from socialite provider handles missing code parameter', function () {\n    $response = $this->get(route('auth.socialite.callback', ['provider' => SocialiteProvider::GOOGLE->value]));\n\n    $response->assertRedirect(route('login'));\n    $response->assertSessionHasErrors(['login']);\n    $response->assertSessionHas('errors');\n\n    $errors = session('errors')->getBag('default');\n    expect($errors->first('login'))->toBe('Authorization was cancelled or failed. Please try again.');\n});\n"
  },
  {
    "path": "tests/Feature/Auth/TwoFactorAuthenticationSettingsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Laravel\\Fortify\\Features;\nuse Laravel\\Jetstream\\Http\\Livewire\\TwoFactorAuthenticationForm;\nuse Livewire\\Livewire;\n\nmutates(User::class);\n\ntest('two factor authentication can be enabled', function () {\n    $this->actingAs($user = User::factory()->create()->fresh());\n\n    $this->withSession(['auth.password_confirmed_at' => time()]);\n\n    Livewire::test(TwoFactorAuthenticationForm::class)\n        ->call('enableTwoFactorAuthentication');\n\n    $user = $user->fresh();\n\n    expect($user->two_factor_secret)->not->toBeNull();\n    expect($user->recoveryCodes())->toHaveCount(8);\n})->skip(function () {\n    return ! Features::canManageTwoFactorAuthentication();\n}, 'Two factor authentication is not enabled.');\n\ntest('recovery codes can be regenerated', function () {\n    $this->actingAs($user = User::factory()->create()->fresh());\n\n    $this->withSession(['auth.password_confirmed_at' => time()]);\n\n    $component = Livewire::test(TwoFactorAuthenticationForm::class)\n        ->call('enableTwoFactorAuthentication')\n        ->call('regenerateRecoveryCodes');\n\n    $user = $user->fresh();\n\n    $component->call('regenerateRecoveryCodes');\n\n    expect($user->recoveryCodes())->toHaveCount(8);\n    expect(array_diff($user->recoveryCodes(), $user->fresh()->recoveryCodes()))->toHaveCount(8);\n})->skip(function () {\n    return ! Features::canManageTwoFactorAuthentication();\n}, 'Two factor authentication is not enabled.');\n\ntest('two factor authentication can be disabled', function () {\n    $this->actingAs($user = User::factory()->create()->fresh());\n\n    $this->withSession(['auth.password_confirmed_at' => time()]);\n\n    $component = Livewire::test(TwoFactorAuthenticationForm::class)\n        ->call('enableTwoFactorAuthentication');\n\n    $this->assertNotNull($user->fresh()->two_factor_secret);\n\n    $component->call('disableTwoFactorAuthentication');\n\n    expect($user->fresh()->two_factor_secret)->toBeNull();\n})->skip(function () {\n    return ! Features::canManageTwoFactorAuthentication();\n}, 'Two factor authentication is not enabled.');\n"
  },
  {
    "path": "tests/Feature/Auth/UserModelTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse App\\Models\\UserSocialAccount;\nuse Filament\\Panel;\n\nmutates(User::class);\n\ntest('user has many social accounts', function () {\n    $user = User::factory()->create();\n    $socialAccount = UserSocialAccount::factory()->create([\n        'user_id' => $user->id,\n    ]);\n\n    expect($user->socialAccounts->first())->toBeInstanceOf(UserSocialAccount::class)\n        ->and($user->socialAccounts->first()->id)->toBe($socialAccount->id);\n});\n\ntest('user belongs to many tasks', function () {\n    $user = User::factory()->create();\n    $task = Task::factory()->create();\n\n    $user->tasks()->attach($task);\n\n    expect($user->tasks->first())->toBeInstanceOf(Task::class)\n        ->and($user->tasks->first()->id)->toBe($task->id);\n});\n\ntest('user can access tenants', function () {\n    $user = User::factory()->create();\n    $team = Team::factory()->create(['user_id' => $user->id]);\n    $user->ownedTeams()->save($team);\n\n    $tenants = $user->getTenants(app(Panel::class)->id('app'));\n\n    expect($tenants->count())->toBe(1)\n        ->and($tenants->first()->id)->toBe($team->id);\n});\n\ntest('user can access tenant', function () {\n    $user = User::factory()->create();\n    $team = Team::factory()->create(['user_id' => $user->id]);\n    $user->ownedTeams()->save($team);\n    $user->currentTeam()->associate($team);\n    $user->save();\n\n    expect($user->canAccessTenant($team))->toBeTrue();\n});\n\ntest('user has avatar', function () {\n    $user = User::factory()->create([\n        'name' => 'John Doe',\n    ]);\n\n    expect($user->getFilamentAvatarUrl())->not->toBeNull()\n        ->and($user->avatar)->not->toBeNull();\n});\n"
  },
  {
    "path": "tests/Feature/CRM/CompanyModelTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Relaticle\\CustomFields\\Models\\Concerns\\UsesCustomFields;\nuse Relaticle\\CustomFields\\Models\\Contracts\\HasCustomFields;\nuse Spatie\\MediaLibrary\\HasMedia;\nuse Spatie\\MediaLibrary\\InteractsWithMedia;\n\nmutates(Company::class);\n\ntest('company belongs to team', function () {\n    $team = Team::factory()->create();\n    $company = Company::factory()->create([\n        'team_id' => $team->getKey(),\n    ]);\n\n    expect($company->team)->toBeInstanceOf(Team::class)\n        ->and($company->team->getKey())->toBe($team->getKey());\n});\n\ntest('company belongs to creator', function () {\n    $user = User::factory()->create();\n    $company = Company::factory()->create([\n        'creator_id' => $user->getKey(),\n    ]);\n\n    expect($company->creator)->toBeInstanceOf(User::class)\n        ->and($company->creator->getKey())->toBe($user->getKey());\n});\n\ntest('company belongs to account owner', function () {\n    $user = User::factory()->create();\n    $company = Company::factory()->create([\n        'account_owner_id' => $user->getKey(),\n    ]);\n\n    expect($company->accountOwner)->toBeInstanceOf(User::class)\n        ->and($company->accountOwner->getKey())->toBe($user->getKey());\n});\n\ntest('company has many people', function () {\n    $company = Company::factory()->create();\n    $people = People::factory()->create([\n        'company_id' => $company->getKey(),\n    ]);\n\n    expect($company->people->first())->toBeInstanceOf(People::class)\n        ->and($company->people->first()->getKey())->toBe($people->getKey());\n});\n\ntest('company has many opportunities', function () {\n    $company = Company::factory()->create();\n    $opportunity = Opportunity::factory()->create([\n        'company_id' => $company->getKey(),\n    ]);\n\n    expect($company->opportunities->first())->toBeInstanceOf(Opportunity::class)\n        ->and($company->opportunities->first()->getKey())->toBe($opportunity->getKey());\n});\n\ntest('company morph to many tasks', function () {\n    $company = Company::factory()->create();\n    $task = Task::factory()->create();\n\n    $company->tasks()->attach($task);\n\n    expect($company->tasks->first())->toBeInstanceOf(Task::class)\n        ->and($company->tasks->first()->getKey())->toBe($task->getKey());\n});\n\ntest('company morph to many notes', function () {\n    $company = Company::factory()->create();\n    $note = Note::factory()->create();\n\n    $company->notes()->attach($note);\n\n    expect($company->notes->first())->toBeInstanceOf(Note::class)\n        ->and($company->notes->first()->getKey())->toBe($note->getKey());\n});\n\ntest('company has logo attribute', function () {\n    $company = Company::factory()->create([\n        'name' => 'Test Company',\n    ]);\n\n    expect($company->logo)->not->toBeNull();\n});\n\ntest('company uses media library', function () {\n    $company = Company::factory()->create();\n\n    expect(class_implements($company))->toContain(HasMedia::class)\n        ->and(class_uses_recursive($company))->toContain(InteractsWithMedia::class);\n});\n\ntest('company uses custom fields', function () {\n    $company = Company::factory()->create();\n\n    expect(class_implements($company))->toContain(HasCustomFields::class)\n        ->and(class_uses_recursive($company))->toContain(UsesCustomFields::class);\n});\n"
  },
  {
    "path": "tests/Feature/Commands/InstallCommandTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Console\\Commands\\InstallCommand;\nuse Illuminate\\Support\\Facades\\File;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nmutates(InstallCommand::class);\n\nfunction createTempEnvFile(): string\n{\n    $tempEnv = sys_get_temp_dir().'/relaticle-test-'.uniqid().'.env';\n    File::copy(base_path('.env.example'), $tempEnv);\n\n    return $tempEnv;\n}\n\nit('completes installation without demo data and system admin', function (): void {\n    $tempEnv = createTempEnvFile();\n\n    $this->artisan('relaticle:install', [\n        '--force' => true,\n        '--env-file' => $tempEnv,\n    ])\n        ->expectsChoice('Which database would you like to use?', 'sqlite', [\n            'sqlite' => 'SQLite (Recommended for local development)',\n            'pgsql' => 'PostgreSQL (Recommended for production)',\n        ])\n        ->expectsConfirmation('Install demo data?', 'no')\n        ->expectsConfirmation('Create system administrator account?', 'no')\n        ->expectsOutputToContain('Starting installation process')\n        ->expectsOutputToContain('System Requirements completed')\n        ->expectsOutputToContain('Environment Setup completed')\n        ->expectsOutputToContain('Database completed')\n        ->expectsOutputToContain('Relaticle installed successfully!')\n        ->assertSuccessful();\n\n    // Verify .env was modified in temp file\n    expect(File::get($tempEnv))->toContain('DB_CONNECTION=sqlite');\n\n    File::delete($tempEnv);\n});\n\nit('completes installation with demo data but no system admin', function (): void {\n    $this->markTestSkipped('Demo data seeding test needs investigation');\n\n    $tempEnv = createTempEnvFile();\n\n    $this->artisan('relaticle:install', [\n        '--force' => true,\n        '--env-file' => $tempEnv,\n    ])\n        ->expectsChoice('Which database would you like to use?', 'sqlite', [\n            'sqlite' => 'SQLite (Recommended for local development)',\n            'pgsql' => 'PostgreSQL (Recommended for production)',\n        ])\n        ->expectsConfirmation('Install demo data?', 'yes')\n        ->expectsConfirmation('Create system administrator account?', 'no')\n        ->expectsOutputToContain('Starting installation process')\n        ->expectsOutputToContain('Demo Data completed')\n        ->expectsOutputToContain('Relaticle installed successfully!')\n        ->assertExitCode(0);\n\n    File::delete($tempEnv);\n});\n\nit('creates system administrator when requested', function (): void {\n    $tempEnv = createTempEnvFile();\n\n    // Clear any existing system administrators\n    SystemAdministrator::query()->delete();\n\n    $this->artisan('relaticle:install', [\n        '--force' => true,\n        '--env-file' => $tempEnv,\n    ])\n        ->expectsChoice('Which database would you like to use?', 'sqlite', [\n            'sqlite' => 'SQLite (Recommended for local development)',\n            'pgsql' => 'PostgreSQL (Recommended for production)',\n        ])\n        ->expectsConfirmation('Install demo data?', 'no')\n        ->expectsConfirmation('Create system administrator account?', 'yes')\n        ->expectsQuestion('System Administrator name', 'Test Admin')\n        ->expectsQuestion('System Administrator email address', 'test@example.com')\n        ->expectsQuestion('System Administrator password (min. 8 characters)', 'password123')\n        ->expectsOutputToContain('Creating System Administrator account')\n        ->expectsOutputToContain('System Administrator created')\n        ->expectsOutputToContain('Relaticle installed successfully!')\n        ->assertSuccessful();\n\n    // Verify the system administrator was created\n    expect(SystemAdministrator::where('email', 'test@example.com')->exists())->toBeTrue();\n\n    File::delete($tempEnv);\n});\n\nit('skips system admin creation if one already exists', function (): void {\n    $tempEnv = createTempEnvFile();\n\n    // Ensure a system administrator exists\n    SystemAdministrator::firstOrCreate(\n        ['email' => 'existing@example.com'],\n        [\n            'name' => 'Existing Admin',\n            'password' => bcrypt('password'),\n            'role' => SystemAdministratorRole::SuperAdministrator,\n            'email_verified_at' => now(),\n        ]\n    );\n\n    $this->artisan('relaticle:install', [\n        '--force' => true,\n        '--env-file' => $tempEnv,\n    ])\n        ->expectsChoice('Which database would you like to use?', 'sqlite', [\n            'sqlite' => 'SQLite (Recommended for local development)',\n            'pgsql' => 'PostgreSQL (Recommended for production)',\n        ])\n        ->expectsConfirmation('Install demo data?', 'no')\n        ->expectsConfirmation('Create system administrator account?', 'yes')\n        ->expectsConfirmation('Do you want to create another one?', 'no')\n        ->expectsOutputToContain('A System Administrator already exists')\n        ->expectsOutputToContain('System Administrator created')\n        ->expectsOutputToContain('Relaticle installed successfully!')\n        ->assertSuccessful();\n\n    File::delete($tempEnv);\n});\n"
  },
  {
    "path": "tests/Feature/ContactFormTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Controllers\\ContactController;\nuse App\\Http\\Requests\\ContactRequest;\nuse App\\Mail\\NewContactSubmissionMail;\nuse Illuminate\\Support\\Facades\\Mail;\nuse RyanChandler\\LaravelCloudflareTurnstile\\Facades\\Turnstile;\n\nmutates(ContactController::class, ContactRequest::class);\n\nit('displays the contact form', function () {\n    $this->get('/contact')\n        ->assertOk()\n        ->assertViewIs('contact');\n});\n\nit('submits the contact form successfully with valid turnstile', function () {\n    Mail::fake();\n    Turnstile::fake();\n\n    $this->post('/contact', [\n        'name' => 'Jane Doe',\n        'email' => 'jane@gmail.com',\n        'company' => 'Acme Inc',\n        'message' => 'I would like to learn more about your enterprise plan and integrations.',\n        'cf-turnstile-response' => Turnstile::dummy(),\n    ])\n        ->assertRedirect('/contact')\n        ->assertSessionHas('success');\n\n    Mail::assertQueued(NewContactSubmissionMail::class);\n});\n\nit('rejects submission when turnstile verification fails', function () {\n    Mail::fake();\n    Turnstile::fake()->fail();\n\n    $this->post('/contact', [\n        'name' => 'Jane Doe',\n        'email' => 'jane@gmail.com',\n        'message' => 'I would like to learn more about your enterprise plan and integrations.',\n        'cf-turnstile-response' => 'invalid-token',\n    ])\n        ->assertSessionHasErrors('cf-turnstile-response');\n\n    Mail::assertNothingQueued();\n});\n\nit('rejects submission when turnstile response is missing', function () {\n    Mail::fake();\n\n    $this->post('/contact', [\n        'name' => 'Jane Doe',\n        'email' => 'jane@gmail.com',\n        'message' => 'I would like to learn more about your enterprise plan and integrations.',\n    ])\n        ->assertSessionHasErrors('cf-turnstile-response');\n\n    Mail::assertNothingQueued();\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Exports/CompanyExporterTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Feature\\Filament\\App\\Exports;\n\nuse App\\Enums\\CustomFields\\CompanyField;\nuse App\\Filament\\Exports\\CompanyExporter;\nuse App\\Filament\\Resources\\CompanyResource\\Pages\\ListCompanies;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\Export;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Livewire;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\n\nmutates(CompanyExporter::class);\n\nbeforeEach(function () {\n    Event::fake()->except([\n        TeamCreated::class,\n        'eloquent.creating: App\\\\Models\\\\Team',\n    ]);\n\n    $this->team = Team::factory()->create();\n    $this->user = User::factory()->create(['current_team_id' => $this->team->id]);\n    $this->user->teams()->attach($this->team);\n\n    $this->actingAs($this->user);\n    Filament::setTenant($this->team);\n});\n\ntest('exports company records', function () {\n    Livewire::test(ListCompanies::class)\n        ->assertActionExists('export')\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export)->not->toBeNull()\n        ->and($export->exporter)->toBe(CompanyExporter::class)\n        ->and($export->file_disk)->toBe('local')\n        ->and($export->team_id)->toBe($this->team->id);\n});\n\ntest('exports respect team scoping', function () {\n    $otherTeam = Team::factory()->create(['personal_team' => false]);\n    $this->user->teams()->attach($otherTeam);\n\n    Livewire::test(ListCompanies::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export->team_id)->toBe($this->team->id);\n});\n\ntest('export columns include system-seeded custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    $columns = CompanyExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    foreach (CompanyField::cases() as $field) {\n        expect($columnLabels)->toContain($field->getDisplayName());\n    }\n});\n\ntest('export columns include user-created custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    CustomField::forceCreate([\n        'name' => 'Company Size',\n        'code' => 'company_size',\n        'type' => 'text',\n        'entity_type' => 'company',\n        'tenant_id' => $this->team->id,\n        'sort_order' => 99,\n        'active' => true,\n        'system_defined' => false,\n        'settings' => new CustomFieldSettingsData,\n    ]);\n\n    $columns = CompanyExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    expect($columnLabels)->toContain('Company Size');\n});\n\ntest('export generates CSV with correct data', function () {\n    Storage::fake('local');\n\n    Company::factory()->create([\n        'team_id' => $this->team->id,\n        'name' => 'Acme Corp',\n    ]);\n\n    Livewire::test(ListCompanies::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n    $directory = $export->getFileDirectory();\n\n    $headers = Storage::disk('local')->get(\"{$directory}/headers.csv\");\n    $data = Storage::disk('local')->get(\"{$directory}/0000000000000001.csv\");\n\n    expect($headers)->toContain('Company Name')\n        ->and($headers)->toContain('ICP')\n        ->and($data)->toContain('Acme Corp');\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Exports/NoteExporterTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Feature\\Filament\\App\\Exports;\n\nuse App\\Enums\\CustomFields\\NoteField;\nuse App\\Filament\\Exports\\NoteExporter;\nuse App\\Filament\\Resources\\NoteResource\\Pages\\ManageNotes;\nuse App\\Models\\CustomField;\nuse App\\Models\\Export;\nuse App\\Models\\Note;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Livewire;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\n\nmutates(NoteExporter::class);\n\nbeforeEach(function () {\n    Event::fake()->except([\n        TeamCreated::class,\n        'eloquent.creating: App\\\\Models\\\\Team',\n    ]);\n\n    $this->team = Team::factory()->create();\n    $this->user = User::factory()->create(['current_team_id' => $this->team->id]);\n    $this->user->teams()->attach($this->team);\n\n    $this->actingAs($this->user);\n    Filament::setTenant($this->team);\n});\n\ntest('exports note records', function () {\n    Livewire::test(ManageNotes::class)\n        ->assertActionExists('export')\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export)->not->toBeNull()\n        ->and($export->exporter)->toBe(NoteExporter::class)\n        ->and($export->file_disk)->toBe('local')\n        ->and($export->team_id)->toBe($this->team->id);\n});\n\ntest('exports respect team scoping', function () {\n    $otherTeam = Team::factory()->create(['personal_team' => false]);\n    $this->user->teams()->attach($otherTeam);\n\n    Livewire::test(ManageNotes::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export->team_id)->toBe($this->team->id);\n});\n\ntest('export columns include system-seeded custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    $columns = NoteExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    foreach (NoteField::cases() as $field) {\n        expect($columnLabels)->toContain($field->getDisplayName());\n    }\n});\n\ntest('export columns include user-created custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    CustomField::forceCreate([\n        'name' => 'Follow-up Date',\n        'code' => 'follow_up_date',\n        'type' => 'date',\n        'entity_type' => 'note',\n        'tenant_id' => $this->team->id,\n        'sort_order' => 99,\n        'active' => true,\n        'system_defined' => false,\n        'settings' => new CustomFieldSettingsData,\n    ]);\n\n    $columns = NoteExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    expect($columnLabels)->toContain('Follow-up Date');\n});\n\ntest('export generates CSV with correct data', function () {\n    Storage::fake('local');\n\n    Note::factory()->create([\n        'team_id' => $this->team->id,\n        'title' => 'Meeting notes Q1',\n    ]);\n\n    Livewire::test(ManageNotes::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n    $directory = $export->getFileDirectory();\n\n    $headers = Storage::disk('local')->get(\"{$directory}/headers.csv\");\n    $data = Storage::disk('local')->get(\"{$directory}/0000000000000001.csv\");\n\n    expect($headers)->toContain('Title')\n        ->and($headers)->toContain('Body')\n        ->and($data)->toContain('Meeting notes Q1');\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Exports/OpportunityExporterTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Feature\\Filament\\App\\Exports;\n\nuse App\\Enums\\CustomFields\\OpportunityField;\nuse App\\Filament\\Exports\\OpportunityExporter;\nuse App\\Filament\\Resources\\OpportunityResource\\Pages\\ListOpportunities;\nuse App\\Models\\CustomField;\nuse App\\Models\\Export;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Livewire;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\n\nmutates(OpportunityExporter::class);\n\nbeforeEach(function () {\n    Event::fake()->except([\n        TeamCreated::class,\n        'eloquent.creating: App\\\\Models\\\\Team',\n    ]);\n\n    $this->team = Team::factory()->create();\n    $this->user = User::factory()->create(['current_team_id' => $this->team->id]);\n    $this->user->teams()->attach($this->team);\n\n    $this->actingAs($this->user);\n    Filament::setTenant($this->team);\n});\n\ntest('exports opportunity records', function () {\n    Livewire::test(ListOpportunities::class)\n        ->assertActionExists('export')\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export)->not->toBeNull()\n        ->and($export->exporter)->toBe(OpportunityExporter::class)\n        ->and($export->file_disk)->toBe('local')\n        ->and($export->team_id)->toBe($this->team->id);\n});\n\ntest('exports respect team scoping', function () {\n    $otherTeam = Team::factory()->create(['personal_team' => false]);\n    $this->user->teams()->attach($otherTeam);\n\n    Livewire::test(ListOpportunities::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export->team_id)->toBe($this->team->id);\n});\n\ntest('export columns include system-seeded custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    $columns = OpportunityExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    foreach (OpportunityField::cases() as $field) {\n        expect($columnLabels)->toContain($field->getDisplayName());\n    }\n});\n\ntest('export columns include user-created custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    CustomField::forceCreate([\n        'name' => 'Win Probability',\n        'code' => 'win_probability',\n        'type' => 'number',\n        'entity_type' => 'opportunity',\n        'tenant_id' => $this->team->id,\n        'sort_order' => 99,\n        'active' => true,\n        'system_defined' => false,\n        'settings' => new CustomFieldSettingsData,\n    ]);\n\n    $columns = OpportunityExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    expect($columnLabels)->toContain('Win Probability');\n});\n\ntest('export generates CSV with correct data', function () {\n    Storage::fake('local');\n\n    Opportunity::factory()->create([\n        'team_id' => $this->team->id,\n        'name' => 'Big Deal',\n    ]);\n\n    Livewire::test(ListOpportunities::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n    $directory = $export->getFileDirectory();\n\n    $headers = Storage::disk('local')->get(\"{$directory}/headers.csv\");\n    $data = Storage::disk('local')->get(\"{$directory}/0000000000000001.csv\");\n\n    expect($headers)->toContain('Opportunity Name')\n        ->and($headers)->toContain('Amount')\n        ->and($data)->toContain('Big Deal');\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Exports/PeopleExporterTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Feature\\Filament\\App\\Exports;\n\nuse App\\Enums\\CustomFields\\PeopleField;\nuse App\\Filament\\Exports\\PeopleExporter;\nuse App\\Filament\\Resources\\PeopleResource\\Pages\\ListPeople;\nuse App\\Models\\CustomField;\nuse App\\Models\\Export;\nuse App\\Models\\People;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Livewire;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\n\nmutates(PeopleExporter::class);\n\nbeforeEach(function () {\n    Event::fake()->except([\n        TeamCreated::class,\n        'eloquent.creating: App\\\\Models\\\\Team',\n    ]);\n\n    $this->team = Team::factory()->create();\n    $this->user = User::factory()->create(['current_team_id' => $this->team->id]);\n    $this->user->teams()->attach($this->team);\n\n    $this->actingAs($this->user);\n    Filament::setTenant($this->team);\n});\n\ntest('exports people records', function () {\n    Livewire::test(ListPeople::class)\n        ->assertActionExists('export')\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export)->not->toBeNull()\n        ->and($export->exporter)->toBe(PeopleExporter::class)\n        ->and($export->file_disk)->toBe('local')\n        ->and($export->team_id)->toBe($this->team->id);\n});\n\ntest('exports respect team scoping', function () {\n    $otherTeam = Team::factory()->create(['personal_team' => false]);\n    $this->user->teams()->attach($otherTeam);\n\n    Livewire::test(ListPeople::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export->team_id)->toBe($this->team->id);\n});\n\ntest('export columns include system-seeded custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    $columns = PeopleExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    foreach (PeopleField::cases() as $field) {\n        expect($columnLabels)->toContain($field->getDisplayName());\n    }\n});\n\ntest('export columns include user-created custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    CustomField::forceCreate([\n        'name' => 'Lead Score',\n        'code' => 'lead_score',\n        'type' => 'number',\n        'entity_type' => 'people',\n        'tenant_id' => $this->team->id,\n        'sort_order' => 99,\n        'active' => true,\n        'system_defined' => false,\n        'settings' => new CustomFieldSettingsData,\n    ]);\n\n    $columns = PeopleExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    expect($columnLabels)->toContain('Lead Score');\n});\n\ntest('export generates CSV with correct data', function () {\n    Storage::fake('local');\n\n    People::factory()->create([\n        'team_id' => $this->team->id,\n        'name' => 'Jane Doe',\n    ]);\n\n    Livewire::test(ListPeople::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n    $directory = $export->getFileDirectory();\n\n    $headers = Storage::disk('local')->get(\"{$directory}/headers.csv\");\n    $data = Storage::disk('local')->get(\"{$directory}/0000000000000001.csv\");\n\n    expect($headers)->toContain('Name')\n        ->and($headers)->toContain('Emails')\n        ->and($data)->toContain('Jane Doe');\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Exports/TaskExporterTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests\\Feature\\Filament\\App\\Exports;\n\nuse App\\Enums\\CustomFields\\TaskField;\nuse App\\Filament\\Exports\\TaskExporter;\nuse App\\Filament\\Resources\\TaskResource\\Pages\\ManageTasks;\nuse App\\Models\\CustomField;\nuse App\\Models\\Export;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Livewire;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Services\\TenantContextService;\n\nmutates(TaskExporter::class);\n\nbeforeEach(function () {\n    Event::fake()->except([\n        TeamCreated::class,\n        'eloquent.creating: App\\\\Models\\\\Team',\n    ]);\n\n    $this->team = Team::factory()->create();\n    $this->user = User::factory()->create(['current_team_id' => $this->team->id]);\n    $this->user->teams()->attach($this->team);\n\n    $this->actingAs($this->user);\n    Filament::setTenant($this->team);\n});\n\ntest('exports task records', function () {\n    Livewire::test(ManageTasks::class)\n        ->assertActionExists('export')\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export)->not->toBeNull()\n        ->and($export->exporter)->toBe(TaskExporter::class)\n        ->and($export->file_disk)->toBe('local')\n        ->and($export->team_id)->toBe($this->team->id);\n});\n\ntest('exports respect team scoping', function () {\n    $otherTeam = Team::factory()->create(['personal_team' => false]);\n    $this->user->teams()->attach($otherTeam);\n\n    Livewire::test(ManageTasks::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n\n    expect($export->team_id)->toBe($this->team->id);\n});\n\ntest('export columns include system-seeded custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    $columns = TaskExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    foreach (TaskField::cases() as $field) {\n        expect($columnLabels)->toContain($field->getDisplayName());\n    }\n});\n\ntest('export columns include user-created custom fields', function () {\n    TenantContextService::setTenantId($this->team->id);\n\n    CustomField::forceCreate([\n        'name' => 'Estimated Hours',\n        'code' => 'estimated_hours',\n        'type' => 'number',\n        'entity_type' => 'task',\n        'tenant_id' => $this->team->id,\n        'sort_order' => 99,\n        'active' => true,\n        'system_defined' => false,\n        'settings' => new CustomFieldSettingsData,\n    ]);\n\n    $columns = TaskExporter::getColumns();\n    $columnLabels = collect($columns)->map(fn ($column) => $column->getLabel())->all();\n\n    expect($columnLabels)->toContain('Estimated Hours');\n});\n\ntest('export generates CSV with correct data', function () {\n    Storage::fake('local');\n\n    Task::factory()->create([\n        'team_id' => $this->team->id,\n        'title' => 'Fix login bug',\n    ]);\n\n    Livewire::test(ManageTasks::class)\n        ->callAction('export')\n        ->assertHasNoFormErrors();\n\n    $export = Export::latest()->first();\n    $directory = $export->getFileDirectory();\n\n    $headers = Storage::disk('local')->get(\"{$directory}/headers.csv\");\n    $data = Storage::disk('local')->get(\"{$directory}/0000000000000001.csv\");\n\n    expect($headers)->toContain('Title')\n        ->and($headers)->toContain('Status')\n        ->and($data)->toContain('Fix login bug');\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Pages/OpportunitiesBoardTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CustomFields\\OpportunityField;\nuse App\\Filament\\Pages\\OpportunitiesBoard;\nuse App\\Models\\CustomField;\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Relaticle\\Flowforge\\Board;\n\nmutates(OpportunitiesBoard::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n\n    $this->stageField = CustomField::query()\n        ->forEntity(Opportunity::class)\n        ->where('code', OpportunityField::STAGE)\n        ->first();\n});\n\nfunction getOpportunityBoard(): Board\n{\n    $component = livewire(OpportunitiesBoard::class);\n\n    return $component->instance()->getBoard();\n}\n\nit('can render the board page', function (): void {\n    livewire(OpportunitiesBoard::class)\n        ->assertOk();\n});\n\nit('displays opportunities in the correct board columns', function (): void {\n    $prospecting = $this->stageField->options->firstWhere('name', 'Prospecting');\n    $closedWon = $this->stageField->options->firstWhere('name', 'Closed Won');\n\n    $prospectingOpportunity = Opportunity::factory()->for($this->team)->create();\n    $prospectingOpportunity->saveCustomFieldValue($this->stageField, $prospecting->getKey());\n\n    $closedWonOpportunity = Opportunity::factory()->for($this->team)->create();\n    $closedWonOpportunity->saveCustomFieldValue($this->stageField, $closedWon->getKey());\n\n    $board = getOpportunityBoard();\n\n    expect($board->getBoardRecords((string) $prospecting->getKey())->pluck('id'))\n        ->toContain($prospectingOpportunity->id)\n        ->and($board->getBoardRecords((string) $closedWon->getKey())->pluck('id'))\n        ->toContain($closedWonOpportunity->id);\n});\n\nit('does not show opportunities from other teams', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherOpportunity = Opportunity::factory()->for($otherUser->currentTeam)->create();\n\n    $board = getOpportunityBoard();\n    $allRecordIds = collect($this->stageField->options)\n        ->flatMap(fn ($opt) => $board->getBoardRecords((string) $opt->getKey()))\n        ->pluck('id');\n\n    expect($allRecordIds)->not->toContain($otherOpportunity->id);\n});\n\nit('moves a card between columns via moveCard', function (): void {\n    $prospecting = $this->stageField->options->firstWhere('name', 'Prospecting');\n    $qualification = $this->stageField->options->firstWhere('name', 'Qualification');\n\n    $opportunity = Opportunity::factory()->for($this->team)->create();\n    $opportunity->saveCustomFieldValue($this->stageField, $prospecting->getKey());\n\n    livewire(OpportunitiesBoard::class)\n        ->call('moveCard', (string) $opportunity->id, (string) $qualification->getKey())\n        ->assertDispatched('kanban-card-moved');\n\n    $updatedValue = $opportunity->fresh()->customFieldValues()\n        ->where('custom_field_id', $this->stageField->getKey())\n        ->value($this->stageField->getValueColumn());\n\n    expect($updatedValue)->toBe($qualification->getKey());\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Pages/TasksBoardTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CustomFields\\TaskField;\nuse App\\Filament\\Pages\\TasksBoard;\nuse App\\Models\\CustomField;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Relaticle\\Flowforge\\Board;\n\nmutates(TasksBoard::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n\n    $this->statusField = CustomField::query()\n        ->forEntity(Task::class)\n        ->where('code', TaskField::STATUS)\n        ->first();\n});\n\nfunction getTaskBoard(): Board\n{\n    $component = livewire(TasksBoard::class);\n\n    return $component->instance()->getBoard();\n}\n\nit('can render the board page', function (): void {\n    livewire(TasksBoard::class)\n        ->assertOk();\n});\n\nit('displays tasks in the correct board columns', function (): void {\n    $todo = $this->statusField->options->firstWhere('name', 'To do');\n    $done = $this->statusField->options->firstWhere('name', 'Done');\n\n    $todoTask = Task::factory()->for($this->team)->create();\n    $todoTask->saveCustomFieldValue($this->statusField, $todo->getKey());\n\n    $doneTask = Task::factory()->for($this->team)->create();\n    $doneTask->saveCustomFieldValue($this->statusField, $done->getKey());\n\n    $board = getTaskBoard();\n\n    expect($board->getBoardRecords((string) $todo->getKey())->pluck('id'))\n        ->toContain($todoTask->id)\n        ->and($board->getBoardRecords((string) $done->getKey())->pluck('id'))\n        ->toContain($doneTask->id);\n});\n\nit('does not show tasks from other teams', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTask = Task::factory()->for($otherUser->currentTeam)->create();\n\n    $board = getTaskBoard();\n    $allRecordIds = collect($this->statusField->options)\n        ->flatMap(fn ($opt) => $board->getBoardRecords((string) $opt->getKey()))\n        ->pluck('id');\n\n    expect($allRecordIds)->not->toContain($otherTask->id);\n});\n\nit('moves a card between columns via moveCard', function (): void {\n    $todo = $this->statusField->options->firstWhere('name', 'To do');\n    $inProgress = $this->statusField->options->firstWhere('name', 'In progress');\n\n    $task = Task::factory()->for($this->team)->create();\n    $task->saveCustomFieldValue($this->statusField, $todo->getKey());\n\n    livewire(TasksBoard::class)\n        ->call('moveCard', (string) $task->id, (string) $inProgress->getKey())\n        ->assertDispatched('kanban-card-moved');\n\n    $updatedValue = $task->fresh()->customFieldValues()\n        ->where('custom_field_id', $this->statusField->getKey())\n        ->value($this->statusField->getValueColumn());\n\n    expect($updatedValue)->toBe($inProgress->getKey());\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Resources/CompanyResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Filament\\Resources\\CompanyResource\\Pages\\ListCompanies;\nuse App\\Filament\\Resources\\CompanyResource\\Pages\\ViewCompany;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nmutates(CompanyResource::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n});\n\nit('can render the index page', function (): void {\n    livewire(ListCompanies::class)\n        ->assertOk();\n});\n\nit('can render the view page', function (): void {\n    $record = Company::factory()->for($this->team)->create();\n\n    livewire(ViewCompany::class, ['record' => $record->getKey()])\n        ->assertOk();\n});\n\nit('can render `:dataset` column', function (string $column): void {\n    livewire(ListCompanies::class)\n        ->assertCanRenderTableColumn($column);\n})->with(['name', 'accountOwner.name', 'creator.name', 'created_at', 'updated_at']);\n\nit('cannot render `:dataset` column', function (string $column): void {\n    livewire(ListCompanies::class)\n        ->assertCanNotRenderTableColumn($column);\n})->with(['deleted_at']);\n\nit('has `:dataset` column', function (string $column): void {\n    livewire(ListCompanies::class)\n        ->assertTableColumnExists($column);\n})->with(['name', 'accountOwner.name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('shows `:dataset` column', function (string $column): void {\n    livewire(ListCompanies::class)\n        ->assertTableColumnVisible($column);\n})->with(['name', 'accountOwner.name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('can sort `:dataset` column', function (string $column): void {\n    $records = Company::factory(3)->for($this->team)->create();\n\n    $sortingKey = data_get($records->first(), $column) instanceof BackedEnum\n        ? fn (Model $record) => data_get($record, $column)->value\n        : $column;\n\n    livewire(ListCompanies::class)\n        ->sortTable($column)\n        ->assertCanSeeTableRecords($records->sortBy($sortingKey), inOrder: true)\n        ->sortTable($column, 'desc')\n        ->assertCanSeeTableRecords($records->sortByDesc($sortingKey), inOrder: true);\n})->with(['name', 'accountOwner.name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('can search `:dataset` column', function (string $column): void {\n    $records = Company::factory(3)->for($this->team)->create();\n    $search = data_get($records->first(), $column);\n\n    $visibleRecords = $records->filter(fn (Model $record) => data_get($record, $column) === $search);\n\n    livewire(ListCompanies::class)\n        ->searchTable($search instanceof BackedEnum ? $search->value : $search)\n        ->assertCanSeeTableRecords($visibleRecords)\n        ->assertCountTableRecords($visibleRecords->count());\n})->with(['name', 'accountOwner.name', 'creator.name']);\n\nit('cannot display trashed records by default', function (): void {\n    $records = Company::factory()->count(4)->for($this->team)->create();\n    $trashedRecords = Company::factory()->trashed()->count(6)->for($this->team)->create();\n\n    livewire(ListCompanies::class)\n        ->assertCanSeeTableRecords($records)\n        ->assertCanNotSeeTableRecords($trashedRecords)\n        ->assertCountTableRecords(4);\n});\n\nit('can paginate records', function (): void {\n    $records = Company::factory(20)->for($this->team)->create();\n\n    // Fetch records with the same sort order as the table (created_at DESC)\n    $sortedRecords = Company::query()\n        ->whereIn('id', $records->pluck('id'))\n        ->orderBy('created_at', 'desc')\n        ->get();\n\n    livewire(ListCompanies::class)\n        ->assertCanSeeTableRecords($sortedRecords->take(10), inOrder: true)\n        ->call('gotoPage', 2)\n        ->assertCanSeeTableRecords($sortedRecords->skip(10)->take(10), inOrder: true);\n});\n\nit('can bulk delete records', function (): void {\n    $records = Company::factory(5)->for($this->team)->create();\n\n    livewire(ListCompanies::class)\n        ->assertCanSeeTableRecords($records)\n        ->selectTableRecords($records)\n        // NOTE: Using direct action array instead of TestAction::make()->bulk()\n        // because TestAction triggers unnecessary form building during bulk actions\n        ->callAction([['name' => 'delete', 'context' => ['table' => true, 'bulk' => true]]])\n        ->assertNotified()\n        ->assertCanNotSeeTableRecords($records);\n\n    $this->assertSoftDeleted($records);\n});\n\nit('can create a company', function (): void {\n    livewire(ListCompanies::class)\n        ->callAction('create', data: [\n            'name' => 'Acme Corp',\n        ])\n        ->assertHasNoActionErrors();\n\n    $this->assertDatabaseHas(Company::class, [\n        'name' => 'Acme Corp',\n        'team_id' => $this->team->id,\n    ]);\n});\n\nit('can edit a company', function (): void {\n    $record = Company::factory()->for($this->team)->create();\n\n    livewire(ListCompanies::class)\n        ->callAction(TestAction::make('edit')->table($record), data: [\n            'name' => 'Updated Company',\n        ])\n        ->assertHasNoActionErrors();\n\n    expect($record->refresh()->name)->toBe('Updated Company');\n});\n\nit('can delete a company', function (): void {\n    $record = Company::factory()->for($this->team)->create();\n\n    livewire(ListCompanies::class)\n        ->callAction(TestAction::make('delete')->table($record));\n\n    $this->assertSoftDeleted($record);\n});\n\nit('validates name is required on create', function (): void {\n    livewire(ListCompanies::class)\n        ->callAction('create', data: [\n            'name' => null,\n        ])\n        ->assertHasActionErrors(['name' => 'required']);\n});\n\nit('has `:dataset` filter', function (string $filter): void {\n    livewire(ListCompanies::class)\n        ->assertTableFilterExists($filter);\n})->with(['creation_source', 'trashed']);\n\nit('sets creator_id and team_id via observer when creating a company', function (): void {\n    livewire(ListCompanies::class)\n        ->callAction('create', data: [\n            'name' => 'Observer Test Corp',\n        ])\n        ->assertHasNoActionErrors();\n\n    $company = Company::query()->where('name', 'Observer Test Corp')->first();\n\n    expect($company->creator_id)->toBe($this->user->id)\n        ->and($company->team_id)->toBe($this->team->id);\n});\n\nit('authorizes team member to view and update own team company', function (): void {\n    $record = Company::factory()->for($this->team)->create();\n\n    expect($this->user->can('view', $record))->toBeTrue()\n        ->and($this->user->can('update', $record))->toBeTrue()\n        ->and($this->user->can('delete', $record))->toBeTrue();\n});\n\nit('denies non-team-member from viewing another team company', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $this->actingAs($otherUser);\n    $record = Company::factory()->for($otherTeam)->create();\n    $this->actingAs($this->user);\n\n    expect($this->user->can('view', $record))->toBeFalse()\n        ->and($this->user->can('update', $record))->toBeFalse()\n        ->and($this->user->can('delete', $record))->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Resources/NoteResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\NoteResource;\nuse App\\Filament\\Resources\\NoteResource\\Pages\\ManageNotes;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nmutates(NoteResource::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n});\n\nit('can render the index page', function (): void {\n    livewire(ManageNotes::class)\n        ->assertOk();\n});\n\nit('can render `:dataset` column', function (string $column): void {\n    livewire(ManageNotes::class)\n        ->assertCanRenderTableColumn($column);\n})->with(['title', 'companies.name', 'people.name', 'creator.name', 'created_at']);\n\nit('cannot render `:dataset` column', function (string $column): void {\n    livewire(ManageNotes::class)\n        ->assertCanNotRenderTableColumn($column);\n})->with(['deleted_at', 'updated_at']);\n\nit('has `:dataset` column', function (string $column): void {\n    livewire(ManageNotes::class)\n        ->assertTableColumnExists($column);\n})->with(['title', 'companies.name', 'people.name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('shows `:dataset` column', function (string $column): void {\n    livewire(ManageNotes::class)\n        ->assertTableColumnVisible($column);\n})->with(['title', 'companies.name', 'people.name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('can sort `:dataset` column', function (string $column): void {\n    $records = Note::factory(3)->for($this->team)->create();\n\n    $sortingKey = data_get($records->first(), $column) instanceof BackedEnum\n        ? fn (Model $record) => data_get($record, $column)->value\n        : $column;\n\n    livewire(ManageNotes::class)\n        ->sortTable($column)\n        ->assertCanSeeTableRecords($records->sortBy($sortingKey), inOrder: true)\n        ->sortTable($column, 'desc')\n        ->assertCanSeeTableRecords($records->sortByDesc($sortingKey), inOrder: true);\n})->with(['creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('can search `:dataset` column', function (string $column): void {\n    $records = Note::factory(3)->for($this->team)->create();\n    $search = data_get($records->first(), $column);\n\n    livewire(ManageNotes::class)\n        ->searchTable($search instanceof BackedEnum ? $search->value : $search)\n        ->assertCanSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) === $search))\n        ->assertCanNotSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) !== $search));\n})->with(['title', 'creator.name']);\n\nit('cannot display trashed records by default', function (): void {\n    $records = Note::factory()->count(4)->for($this->team)->create();\n    $trashedRecords = Note::factory()->trashed()->count(6)->for($this->team)->create();\n\n    livewire(ManageNotes::class)\n        ->assertCanSeeTableRecords($records)\n        ->assertCanNotSeeTableRecords($trashedRecords)\n        ->assertCountTableRecords(4);\n});\n\nit('can paginate records', function (): void {\n    $records = Note::factory(20)->for($this->team)->create();\n\n    livewire(ManageNotes::class)\n        ->assertCanSeeTableRecords($records->take(10), inOrder: true)\n        ->call('gotoPage', 2)\n        ->assertCanSeeTableRecords($records->skip(10)->take(10), inOrder: true);\n});\n\nit('can bulk delete records', function (): void {\n    $records = Note::factory(5)->for($this->team)->create();\n\n    livewire(ManageNotes::class)\n        ->assertCanSeeTableRecords($records)\n        ->selectTableRecords($records)\n        // NOTE: Using direct action array instead of TestAction::make()->bulk()\n        // because TestAction triggers unnecessary form building during bulk actions\n        ->callAction([['name' => 'delete', 'context' => ['table' => true, 'bulk' => true]]])\n        ->assertNotified()\n        ->assertCanNotSeeTableRecords($records);\n\n    $this->assertSoftDeleted($records);\n});\n\nit('can create a note', function (): void {\n    livewire(ManageNotes::class)\n        ->callAction('create', data: [\n            'title' => 'New Note',\n        ])\n        ->assertHasNoActionErrors();\n\n    $this->assertDatabaseHas(Note::class, [\n        'title' => 'New Note',\n        'team_id' => $this->team->id,\n    ]);\n});\n\nit('can edit a note', function (): void {\n    $record = Note::factory()->for($this->team)->create();\n\n    livewire(ManageNotes::class)\n        ->callAction(TestAction::make('edit')->table($record), data: [\n            'title' => 'Updated Note',\n        ])\n        ->assertHasNoActionErrors();\n\n    expect($record->refresh()->title)->toBe('Updated Note');\n});\n\nit('can delete a note', function (): void {\n    $record = Note::factory()->for($this->team)->create();\n\n    livewire(ManageNotes::class)\n        ->callAction(TestAction::make('delete')->table($record));\n\n    $this->assertSoftDeleted($record);\n});\n\nit('validates title is required on create', function (): void {\n    livewire(ManageNotes::class)\n        ->callAction('create', data: [\n            'title' => null,\n        ])\n        ->assertHasActionErrors(['title' => 'required']);\n});\n\nit('has `:dataset` filter', function (string $filter): void {\n    livewire(ManageNotes::class)\n        ->assertTableFilterExists($filter);\n})->with(['creation_source', 'trashed']);\n\nit('sets creator_id and team_id via observer when creating a note', function (): void {\n    livewire(ManageNotes::class)\n        ->callAction('create', data: [\n            'title' => 'Observer Test Note',\n        ])\n        ->assertHasNoActionErrors();\n\n    $note = Note::query()->where('title', 'Observer Test Note')->first();\n\n    expect($note->creator_id)->toBe($this->user->id)\n        ->and($note->team_id)->toBe($this->team->id);\n});\n\nit('authorizes team member to view and update own team note', function (): void {\n    $record = Note::factory()->for($this->team)->create();\n\n    expect($this->user->can('view', $record))->toBeTrue()\n        ->and($this->user->can('update', $record))->toBeTrue()\n        ->and($this->user->can('delete', $record))->toBeTrue();\n});\n\nit('denies non-team-member from viewing another team note', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $this->actingAs($otherUser);\n    $record = Note::factory()->for($otherTeam)->create();\n    $this->actingAs($this->user);\n\n    expect($this->user->can('view', $record))->toBeFalse()\n        ->and($this->user->can('update', $record))->toBeFalse()\n        ->and($this->user->can('delete', $record))->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Resources/OpportunityResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\OpportunityResource;\nuse App\\Filament\\Resources\\OpportunityResource\\Pages\\ListOpportunities;\nuse App\\Filament\\Resources\\OpportunityResource\\Pages\\ViewOpportunity;\nuse App\\Models\\Opportunity;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nmutates(OpportunityResource::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n});\n\nit('can render the index page', function (): void {\n    livewire(ListOpportunities::class)\n        ->assertOk();\n});\n\nit('can render the view page', function (): void {\n    $record = Opportunity::factory()->for($this->team)->create();\n\n    livewire(ViewOpportunity::class, ['record' => $record->getKey()])\n        ->assertOk();\n});\n\nit('can render `:dataset` column', function (string $column): void {\n    livewire(ListOpportunities::class)\n        ->assertCanRenderTableColumn($column);\n})->with(['name', 'creator.name']);\n\nit('cannot render `:dataset` column', function (string $column): void {\n    livewire(ListOpportunities::class)\n        ->assertCanNotRenderTableColumn($column);\n})->with(['deleted_at', 'created_at', 'updated_at']);\n\nit('has `:dataset` column', function (string $column): void {\n    livewire(ListOpportunities::class)\n        ->assertTableColumnExists($column);\n})->with(['name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('shows `:dataset` column', function (string $column): void {\n    livewire(ListOpportunities::class)\n        ->assertTableColumnVisible($column);\n})->with(['name', 'creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('can sort `:dataset` column', function (string $column): void {\n    $records = Opportunity::factory(3)->for($this->team)->create();\n\n    $sortingKey = data_get($records->first(), $column) instanceof BackedEnum\n        ? fn (Model $record) => data_get($record, $column)->value\n        : $column;\n\n    livewire(ListOpportunities::class)\n        ->sortTable($column)\n        ->assertCanSeeTableRecords($records->sortBy($sortingKey), inOrder: true)\n        ->sortTable($column, 'desc')\n        ->assertCanSeeTableRecords($records->sortByDesc($sortingKey), inOrder: true);\n})->with(['creator.name', 'deleted_at', 'created_at', 'updated_at']);\n\nit('can search `:dataset` column', function (string $column): void {\n    $records = Opportunity::factory(3)->for($this->team)->create();\n    $search = data_get($records->first(), $column);\n\n    livewire(ListOpportunities::class)\n        ->searchTable($search instanceof BackedEnum ? $search->value : $search)\n        ->assertCanSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) === $search))\n        ->assertCanNotSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) !== $search));\n})->with(['name', 'creator.name']);\n\nit('cannot display trashed records by default', function (): void {\n    $records = Opportunity::factory()->count(4)->for($this->team)->create();\n    $trashedRecords = Opportunity::factory()->trashed()->count(6)->for($this->team)->create();\n\n    livewire(ListOpportunities::class)\n        ->assertCanSeeTableRecords($records)\n        ->assertCanNotSeeTableRecords($trashedRecords)\n        ->assertCountTableRecords(4);\n});\n\nit('can paginate records', function (): void {\n    $records = Opportunity::factory(20)->for($this->team)->create();\n\n    livewire(ListOpportunities::class)\n        ->assertCanSeeTableRecords($records->take(10), inOrder: true)\n        ->call('gotoPage', 2)\n        ->assertCanSeeTableRecords($records->skip(10)->take(10), inOrder: true);\n});\n\nit('can bulk delete records', function (): void {\n    $records = Opportunity::factory(5)->for($this->team)->create();\n\n    livewire(ListOpportunities::class)\n        ->assertCanSeeTableRecords($records)\n        ->selectTableRecords($records)\n        // NOTE: Using direct action array instead of TestAction::make()->bulk()\n        // because TestAction triggers unnecessary form building during bulk actions\n        ->callAction([['name' => 'delete', 'context' => ['table' => true, 'bulk' => true]]])\n        ->assertNotified()\n        ->assertCanNotSeeTableRecords($records);\n\n    $this->assertSoftDeleted($records);\n});\n\nit('can create an opportunity', function (): void {\n    livewire(ListOpportunities::class)\n        ->callAction('create', data: [\n            'name' => 'Big Deal',\n        ])\n        ->assertHasNoActionErrors();\n\n    $this->assertDatabaseHas(Opportunity::class, [\n        'name' => 'Big Deal',\n        'team_id' => $this->team->id,\n    ]);\n});\n\nit('can edit an opportunity', function (): void {\n    $record = Opportunity::factory()->for($this->team)->create();\n\n    livewire(ListOpportunities::class)\n        ->callAction(TestAction::make('edit')->table($record), data: [\n            'name' => 'Updated Opportunity',\n        ])\n        ->assertHasNoActionErrors();\n\n    expect($record->refresh()->name)->toBe('Updated Opportunity');\n});\n\nit('can delete an opportunity', function (): void {\n    $record = Opportunity::factory()->for($this->team)->create();\n\n    livewire(ListOpportunities::class)\n        ->callAction(TestAction::make('delete')->table($record));\n\n    $this->assertSoftDeleted($record);\n});\n\nit('validates name is required on create', function (): void {\n    livewire(ListOpportunities::class)\n        ->callAction('create', data: [\n            'name' => null,\n        ])\n        ->assertHasActionErrors(['name' => 'required']);\n});\n\nit('has `:dataset` filter', function (string $filter): void {\n    livewire(ListOpportunities::class)\n        ->assertTableFilterExists($filter);\n})->with(['creation_source', 'trashed']);\n\nit('sets creator_id and team_id via observer when creating an opportunity', function (): void {\n    livewire(ListOpportunities::class)\n        ->callAction('create', data: [\n            'name' => 'Observer Test Deal',\n        ])\n        ->assertHasNoActionErrors();\n\n    $opportunity = Opportunity::query()->where('name', 'Observer Test Deal')->first();\n\n    expect($opportunity->creator_id)->toBe($this->user->id)\n        ->and($opportunity->team_id)->toBe($this->team->id);\n});\n\nit('authorizes team member to view and update own team opportunity', function (): void {\n    $record = Opportunity::factory()->for($this->team)->create();\n\n    expect($this->user->can('view', $record))->toBeTrue()\n        ->and($this->user->can('update', $record))->toBeTrue()\n        ->and($this->user->can('delete', $record))->toBeTrue();\n});\n\nit('denies non-team-member from viewing another team opportunity', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $this->actingAs($otherUser);\n    $record = Opportunity::factory()->for($otherTeam)->create();\n    $this->actingAs($this->user);\n\n    expect($this->user->can('view', $record))->toBeFalse()\n        ->and($this->user->can('update', $record))->toBeFalse()\n        ->and($this->user->can('delete', $record))->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Resources/PeopleResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\PeopleResource;\nuse App\\Filament\\Resources\\PeopleResource\\Pages\\ListPeople;\nuse App\\Filament\\Resources\\PeopleResource\\Pages\\ViewPeople;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nmutates(PeopleResource::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n});\n\nit('can render the index page', function (): void {\n    livewire(ListPeople::class)\n        ->assertOk();\n});\n\nit('can render the view page', function (): void {\n    $record = People::factory()->for($this->team)->create();\n\n    livewire(ViewPeople::class, ['record' => $record->getKey()])\n        ->assertOk();\n});\n\nit('can render `:dataset` column', function (string $column): void {\n    livewire(ListPeople::class)\n        ->assertCanRenderTableColumn($column);\n})->with(['name', 'company.name', 'creator.name']);\n\nit('cannot render `:dataset` column', function (string $column): void {\n    livewire(ListPeople::class)\n        ->assertCanNotRenderTableColumn($column);\n})->with(['created_at', 'updated_at', 'deleted_at']);\n\nit('has `:dataset` column', function (string $column): void {\n    livewire(ListPeople::class)\n        ->assertTableColumnExists($column);\n})->with(['name', 'company.name', 'creator.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('shows `:dataset` column', function (string $column): void {\n    livewire(ListPeople::class)\n        ->assertTableColumnVisible($column);\n})->with(['name', 'company.name', 'creator.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('can sort `:dataset` column', function (string $column): void {\n    $records = People::factory(3)->for($this->team)->create();\n\n    $sortingKey = data_get($records->first(), $column) instanceof BackedEnum\n        ? fn (Model $record) => data_get($record, $column)->value\n        : $column;\n\n    livewire(ListPeople::class)\n        ->sortTable($column)\n        ->assertCanSeeTableRecords($records->sortBy($sortingKey), inOrder: true)\n        ->sortTable($column, 'desc')\n        ->assertCanSeeTableRecords($records->sortByDesc($sortingKey), inOrder: true);\n})->with(['company.name', 'creator.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('can search `:dataset` column', function (string $column): void {\n    $records = People::factory(3)->for($this->team)->create();\n    $search = data_get($records->first(), $column);\n\n    livewire(ListPeople::class)\n        ->searchTable($search instanceof BackedEnum ? $search->value : $search)\n        ->assertCanSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) === $search))\n        ->assertCanNotSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) !== $search));\n})->with(['name', 'company.name', 'creator.name']);\n\nit('cannot display trashed records by default', function (): void {\n    $records = People::factory()->count(4)->for($this->team)->create();\n    $trashedRecords = People::factory()->trashed()->count(6)->for($this->team)->create();\n\n    livewire(ListPeople::class)\n        ->assertCanSeeTableRecords($records)\n        ->assertCanNotSeeTableRecords($trashedRecords)\n        ->assertCountTableRecords(4);\n});\n\nit('can paginate records', function (): void {\n    $records = People::factory(20)->for($this->team)->create();\n\n    livewire(ListPeople::class)\n        ->assertCanSeeTableRecords($records->take(10), inOrder: true)\n        ->call('gotoPage', 2)\n        ->assertCanSeeTableRecords($records->skip(10)->take(10), inOrder: true);\n});\n\nit('can bulk delete records', function (): void {\n    $records = People::factory(5)->for($this->team)->create();\n\n    livewire(ListPeople::class)\n        ->assertCanSeeTableRecords($records)\n        ->selectTableRecords($records)\n        // NOTE: Using direct action array instead of TestAction::make()->bulk()\n        // because TestAction triggers unnecessary form building during bulk actions\n        ->callAction([['name' => 'delete', 'context' => ['table' => true, 'bulk' => true]]])\n        ->assertNotified()\n        ->assertCanNotSeeTableRecords($records);\n\n    $this->assertSoftDeleted($records);\n});\n\nit('can create a person', function (): void {\n    livewire(ListPeople::class)\n        ->callAction('create', data: [\n            'name' => 'Jane Doe',\n        ])\n        ->assertHasNoActionErrors();\n\n    $this->assertDatabaseHas(People::class, [\n        'name' => 'Jane Doe',\n        'team_id' => $this->team->id,\n    ]);\n});\n\nit('can edit a person', function (): void {\n    $record = People::factory()->for($this->team)->create();\n\n    livewire(ListPeople::class)\n        ->callAction(TestAction::make('edit')->table($record), data: [\n            'name' => 'Updated Person',\n        ])\n        ->assertHasNoActionErrors();\n\n    expect($record->refresh()->name)->toBe('Updated Person');\n});\n\nit('can delete a person', function (): void {\n    $record = People::factory()->for($this->team)->create();\n\n    livewire(ListPeople::class)\n        ->callAction(TestAction::make('delete')->table($record));\n\n    $this->assertSoftDeleted($record);\n});\n\nit('validates name is required on create', function (): void {\n    livewire(ListPeople::class)\n        ->callAction('create', data: [\n            'name' => null,\n        ])\n        ->assertHasActionErrors(['name' => 'required']);\n});\n\nit('has `:dataset` filter', function (string $filter): void {\n    livewire(ListPeople::class)\n        ->assertTableFilterExists($filter);\n})->with(['creation_source', 'trashed']);\n\nit('sets creator_id and team_id via observer when creating a person', function (): void {\n    livewire(ListPeople::class)\n        ->callAction('create', data: [\n            'name' => 'Observer Test Person',\n        ])\n        ->assertHasNoActionErrors();\n\n    $person = People::query()->where('name', 'Observer Test Person')->first();\n\n    expect($person->creator_id)->toBe($this->user->id)\n        ->and($person->team_id)->toBe($this->team->id);\n});\n\nit('authorizes team member to view and update own team person', function (): void {\n    $record = People::factory()->for($this->team)->create();\n\n    expect($this->user->can('view', $record))->toBeTrue()\n        ->and($this->user->can('update', $record))->toBeTrue()\n        ->and($this->user->can('delete', $record))->toBeTrue();\n});\n\nit('denies non-team-member from viewing another team person', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $this->actingAs($otherUser);\n    $record = People::factory()->for($otherTeam)->create();\n    $this->actingAs($this->user);\n\n    expect($this->user->can('view', $record))->toBeFalse()\n        ->and($this->user->can('update', $record))->toBeFalse()\n        ->and($this->user->can('delete', $record))->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/Filament/App/Resources/TaskResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Resources\\TaskResource;\nuse App\\Filament\\Resources\\TaskResource\\Pages\\ManageTasks;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nmutates(TaskResource::class);\n\nbeforeEach(function () {\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n});\n\nit('can render the index page', function (): void {\n    livewire(ManageTasks::class)\n        ->assertOk();\n});\n\nit('can render `:dataset` column', function (string $column): void {\n    livewire(ManageTasks::class)\n        ->assertCanRenderTableColumn($column);\n})->with(['title', 'creator.name']);\n\nit('cannot render `:dataset` column', function (string $column): void {\n    livewire(ManageTasks::class)\n        ->assertCanNotRenderTableColumn($column);\n})->with(['assignees.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('has `:dataset` column', function (string $column): void {\n    livewire(ManageTasks::class)\n        ->assertTableColumnExists($column);\n})->with(['title', 'assignees.name', 'creator.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('shows `:dataset` column', function (string $column): void {\n    livewire(ManageTasks::class)\n        ->assertTableColumnVisible($column);\n})->with(['title', 'assignees.name', 'creator.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('can sort `:dataset` column', function (string $column): void {\n    $records = Task::factory(3)->for($this->team)->create();\n\n    $sortingKey = data_get($records->first(), $column) instanceof BackedEnum\n        ? fn (Model $record) => data_get($record, $column)->value\n        : $column;\n\n    livewire(ManageTasks::class)\n        ->sortTable($column)\n        ->assertCanSeeTableRecords($records->sortBy($sortingKey), inOrder: true)\n        ->sortTable($column, 'desc')\n        ->assertCanSeeTableRecords($records->sortByDesc($sortingKey), inOrder: true);\n})->with(['creator.name', 'created_at', 'updated_at', 'deleted_at']);\n\nit('can search `:dataset` column', function (string $column): void {\n    $records = Task::factory(3)->for($this->team)->create();\n    $search = data_get($records->first(), $column);\n\n    livewire(ManageTasks::class)\n        ->searchTable($search instanceof BackedEnum ? $search->value : $search)\n        ->assertCanSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) === $search))\n        ->assertCanNotSeeTableRecords($records->filter(fn (Model $record) => data_get($record, $column) !== $search));\n})->with(['title', 'assignees.name', 'creator.name']);\n\nit('cannot display trashed records by default', function (): void {\n    $records = Task::factory()->count(4)->for($this->team)->create();\n    $trashedRecords = Task::factory()->trashed()->count(6)->for($this->team)->create();\n\n    livewire(ManageTasks::class)\n        ->assertCanSeeTableRecords($records)\n        ->assertCanNotSeeTableRecords($trashedRecords)\n        ->assertCountTableRecords(4);\n});\n\nit('can paginate records', function (): void {\n    $records = Task::factory(20)->for($this->team)->create();\n\n    livewire(ManageTasks::class)\n        ->assertCanSeeTableRecords($records->take(10), inOrder: true)\n        ->call('gotoPage', 2)\n        ->assertCanSeeTableRecords($records->skip(10)->take(10), inOrder: true);\n});\n\nit('can bulk delete records', function (): void {\n    $records = Task::factory(5)->for($this->team)->create();\n\n    livewire(ManageTasks::class)\n        ->assertCanSeeTableRecords($records)\n        ->selectTableRecords($records)\n        // NOTE: Using direct action array instead of TestAction::make()->bulk()\n        // because TestAction triggers unnecessary form building during bulk actions\n        ->callAction([['name' => 'delete', 'context' => ['table' => true, 'bulk' => true]]])\n        ->assertNotified()\n        ->assertCanNotSeeTableRecords($records);\n\n    $this->assertSoftDeleted($records);\n});\n\nit('can create a task', function (): void {\n    livewire(ManageTasks::class)\n        ->callAction('create', data: [\n            'title' => 'New Task',\n        ])\n        ->assertHasNoActionErrors();\n\n    $this->assertDatabaseHas(Task::class, [\n        'title' => 'New Task',\n        'team_id' => $this->team->id,\n    ]);\n});\n\nit('can edit a task', function (): void {\n    $record = Task::factory()->for($this->team)->create();\n\n    livewire(ManageTasks::class)\n        ->callAction(TestAction::make('edit')->table($record), data: [\n            'title' => 'Updated Task',\n        ])\n        ->assertHasNoActionErrors();\n\n    expect($record->refresh()->title)->toBe('Updated Task');\n});\n\nit('can delete a task', function (): void {\n    $record = Task::factory()->for($this->team)->create();\n\n    livewire(ManageTasks::class)\n        ->callAction(TestAction::make('delete')->table($record));\n\n    $this->assertSoftDeleted($record);\n});\n\nit('validates title is required on create', function (): void {\n    livewire(ManageTasks::class)\n        ->callAction('create', data: [\n            'title' => null,\n        ])\n        ->assertHasActionErrors(['title' => 'required']);\n});\n\nit('has `:dataset` filter', function (string $filter): void {\n    livewire(ManageTasks::class)\n        ->assertTableFilterExists($filter);\n})->with(['assigned_to_me', 'assignees', 'creation_source', 'trashed']);\n\nit('sets creator_id and team_id via observer when creating a task', function (): void {\n    livewire(ManageTasks::class)\n        ->callAction('create', data: [\n            'title' => 'Observer Test Task',\n        ])\n        ->assertHasNoActionErrors();\n\n    $task = Task::query()->where('title', 'Observer Test Task')->first();\n\n    expect($task->creator_id)->toBe($this->user->id)\n        ->and($task->team_id)->toBe($this->team->id);\n});\n\nit('authorizes team member to view and update own team task', function (): void {\n    $record = Task::factory()->for($this->team)->create();\n\n    expect($this->user->can('view', $record))->toBeTrue()\n        ->and($this->user->can('update', $record))->toBeTrue()\n        ->and($this->user->can('delete', $record))->toBeTrue();\n});\n\nit('denies non-team-member from viewing another team task', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $this->actingAs($otherUser);\n    $record = Task::factory()->for($otherTeam)->create();\n    $this->actingAs($this->user);\n\n    expect($this->user->can('view', $record))->toBeFalse()\n        ->and($this->user->can('update', $record))->toBeFalse()\n        ->and($this->user->can('delete', $record))->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/HealthChecks/HealthServiceProviderTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Providers\\HealthServiceProvider;\nuse Spatie\\Health\\Checks\\Checks\\DatabaseCheck;\nuse Spatie\\Health\\Checks\\Checks\\HorizonCheck;\nuse Spatie\\Health\\Checks\\Checks\\RedisCheck;\nuse Spatie\\Health\\Facades\\Health;\n\nmutates(HealthServiceProvider::class);\n\nit('does not register health checks when disabled', function () {\n    Health::clearChecks();\n\n    config()->set('app.health_checks_enabled', false);\n\n    $provider = new HealthServiceProvider(app());\n    $provider->boot();\n\n    expect(Health::registeredChecks())->toBeEmpty();\n});\n\nit('registers health checks when enabled', function () {\n    Health::clearChecks();\n\n    config()->set('app.health_checks_enabled', true);\n\n    $provider = new HealthServiceProvider(app());\n    $provider->boot();\n\n    $checkClasses = collect(Health::registeredChecks())\n        ->map(fn ($check) => $check::class);\n\n    expect($checkClasses)\n        ->toContain(DatabaseCheck::class)\n        ->toContain(RedisCheck::class)\n        ->toContain(HorizonCheck::class);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Commands/CleanupImportsCommandTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\File;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Relaticle\\ImportWizard\\Commands\\CleanupImportsCommand;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nmutates(CleanupImportsCommand::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->team = $this->user->currentTeam;\n    $this->imports = [];\n\n    File::cleanDirectory(storage_path('app/imports'));\n});\n\nafterEach(function (): void {\n    foreach ($this->imports as $import) {\n        ImportStore::load($import->id)?->destroy();\n        $import->delete();\n    }\n});\n\nfunction createTestImport(object $context, ImportStatus $status, string $updatedAt): Import\n{\n    $import = Import::create([\n        'team_id' => (string) $context->team->id,\n        'user_id' => (string) $context->user->id,\n        'entity_type' => ImportEntityType::People,\n        'file_name' => 'test.csv',\n        'status' => $status,\n        'total_rows' => 0,\n        'headers' => [],\n    ]);\n\n    $import->updated_at = $updatedAt;\n    $import->saveQuietly();\n\n    $store = ImportStore::create($import->id);\n\n    $context->imports[] = $import;\n\n    return $import;\n}\n\nit('deletes completed import files older than completed-hours threshold', function (): void {\n    $import = createTestImport($this, ImportStatus::Completed, now()->subHours(3)->toIso8601String());\n\n    $storePath = storage_path(\"app/imports/{$import->id}\");\n    expect(File::isDirectory($storePath))->toBeTrue();\n\n    $this->artisan('import:cleanup')\n        ->expectsOutputToContain('Cleaned up 1 import(s)')\n        ->assertExitCode(0);\n\n    expect(File::isDirectory($storePath))->toBeFalse();\n    expect(Import::find($import->id))->not->toBeNull();\n});\n\nit('preserves recently completed import files', function (): void {\n    $import = createTestImport($this, ImportStatus::Completed, now()->subMinutes(30)->toIso8601String());\n\n    $this->artisan('import:cleanup')\n        ->expectsOutputToContain('Cleaned up 0 import(s)')\n        ->assertExitCode(0);\n\n    $storePath = storage_path(\"app/imports/{$import->id}\");\n    expect(File::isDirectory($storePath))->toBeTrue();\n    expect(Import::find($import->id))->not->toBeNull();\n});\n\nit('deletes abandoned imports older than hours threshold', function (): void {\n    $import = createTestImport($this, ImportStatus::Mapping, now()->subHours(25)->toIso8601String());\n\n    $storePath = storage_path(\"app/imports/{$import->id}\");\n\n    $this->artisan('import:cleanup')\n        ->expectsOutputToContain('Cleaned up 1 import(s)')\n        ->assertExitCode(0);\n\n    expect(File::isDirectory($storePath))->toBeFalse();\n    expect(Import::find($import->id))->toBeNull();\n});\n\nit('preserves active in-progress imports', function (): void {\n    $import = createTestImport($this, ImportStatus::Mapping, now()->subHours(2)->toIso8601String());\n\n    $this->artisan('import:cleanup')\n        ->expectsOutputToContain('Cleaned up 0 import(s)')\n        ->assertExitCode(0);\n\n    $storePath = storage_path(\"app/imports/{$import->id}\");\n    expect(File::isDirectory($storePath))->toBeTrue();\n    expect(Import::find($import->id))->not->toBeNull();\n});\n\nit('deletes orphaned directories without DB records', function (): void {\n    $path = storage_path('app/imports/orphaned-dir');\n    File::ensureDirectoryExists($path);\n\n    $this->artisan('import:cleanup')\n        ->expectsOutputToContain('Cleaned up 1 import(s)')\n        ->assertExitCode(0);\n\n    expect(File::isDirectory($path))->toBeFalse();\n});\n\nit('respects custom hours option', function (): void {\n    $import = createTestImport($this, ImportStatus::Reviewing, now()->subHours(5)->toIso8601String());\n\n    $this->artisan('import:cleanup --hours=48')\n        ->expectsOutputToContain('Cleaned up 0 import(s)')\n        ->assertExitCode(0);\n\n    $storePath = storage_path(\"app/imports/{$import->id}\");\n    expect(File::isDirectory($storePath))->toBeTrue();\n    expect(Import::find($import->id))->not->toBeNull();\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Components/MultiValueInputTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Facades\\View;\n\nfunction renderMultiValueInput(array $overrides = []): string\n{\n    return View::make('import-wizard-new::components.multi-value-input', array_merge([\n        'value' => '',\n        'placeholder' => 'Add value...',\n        'disabled' => false,\n        'inputType' => 'text',\n        'borderless' => false,\n        'errors' => [],\n        'eventName' => 'input',\n    ], $overrides))->render();\n}\n\n// ─── Value Parsing ───────────────────────────────────────────────────────────\n\nit('parses comma-separated values into Alpine array', function (): void {\n    $html = renderMultiValueInput([\n        'value' => 'alice@test.com, bob@test.com',\n    ]);\n\n    expect($html)\n        ->toContain('alice@test.com')\n        ->toContain('bob@test.com');\n});\n\nit('renders single value without comma', function (): void {\n    $html = renderMultiValueInput([\n        'value' => 'only@one.com',\n    ]);\n\n    expect($html)->toContain('only@one.com');\n});\n\nit('filters out empty and whitespace-only values', function (): void {\n    $html = renderMultiValueInput([\n        'value' => 'real@test.com, , ,  , valid@test.com',\n    ]);\n\n    expect($html)\n        ->toContain('real@test.com')\n        ->toContain('valid@test.com');\n});\n\nit('handles null value gracefully', function (): void {\n    $html = renderMultiValueInput([\n        'value' => null,\n    ]);\n\n    expect($html)->toContain('data-multi-value-input');\n});\n\nit('renders empty state with placeholder', function (): void {\n    $html = renderMultiValueInput([\n        'placeholder' => 'Add email...',\n    ]);\n\n    expect($html)->toContain('Add email...');\n});\n\n// ─── Input Types & Link Prefixes ─────────────────────────────────────────────\n\nit('sets mailto link prefix for email input type', function (): void {\n    $html = renderMultiValueInput(['inputType' => 'email']);\n\n    expect($html)\n        ->toContain(\"linkPrefix: 'mailto:'\")\n        ->toContain('inputmode=\"email\"');\n});\n\nit('sets tel link prefix for phone input type', function (): void {\n    $html = renderMultiValueInput(['inputType' => 'tel']);\n\n    expect($html)\n        ->toContain(\"linkPrefix: 'tel:'\")\n        ->toContain('inputmode=\"tel\"');\n});\n\nit('sets empty link prefix for url input type', function (): void {\n    $html = renderMultiValueInput(['inputType' => 'url']);\n\n    expect($html)\n        ->toContain(\"linkPrefix: ''\")\n        ->toContain('inputmode=\"url\"');\n});\n\nit('sets null link prefix for text input type', function (): void {\n    $html = renderMultiValueInput(['inputType' => 'text']);\n\n    expect($html)\n        ->toContain('linkPrefix: null')\n        ->toContain('inputmode=\"text\"');\n});\n\n// ─── Component States ────────────────────────────────────────────────────────\n\nit('renders disabled state', function (): void {\n    $html = renderMultiValueInput(['disabled' => true]);\n\n    expect($html)->toContain('isDisabled: true');\n});\n\nit('renders enabled state by default', function (): void {\n    $html = renderMultiValueInput(['disabled' => false]);\n\n    expect($html)->toContain('isDisabled: false');\n});\n\nit('renders bordered style by default', function (): void {\n    $html = renderMultiValueInput(['borderless' => false]);\n\n    expect($html)->toContain('border border-gray-200');\n});\n\nit('renders borderless style when specified', function (): void {\n    $html = renderMultiValueInput(['borderless' => true]);\n\n    expect($html)->toContain('border-0 bg-transparent');\n});\n\nit('uses custom event name for change emission', function (): void {\n    $html = renderMultiValueInput(['eventName' => 'multi-value-change']);\n\n    expect($html)->toContain(\"eventName: 'multi-value-change'\");\n});\n\n// ─── Error Rendering ─────────────────────────────────────────────────────────\n\nit('initializes errors from props', function (): void {\n    $html = renderMultiValueInput([\n        'value' => 'good@test.com, bad-value',\n        'errors' => ['bad-value' => 'Invalid format'],\n    ]);\n\n    expect($html)\n        ->toContain('good@test.com')\n        ->toContain('bad-value')\n        ->toContain('Invalid format');\n});\n\nit('initializes multiple errors from props', function (): void {\n    $html = renderMultiValueInput([\n        'value' => 'ok@test.com, bad1, bad2',\n        'errors' => [\n            'bad1' => 'Error one',\n            'bad2' => 'Error two',\n        ],\n    ]);\n\n    expect($html)\n        ->toContain('Error one')\n        ->toContain('Error two');\n});\n\nit('initializes empty errors as empty array', function (): void {\n    $html = renderMultiValueInput(['errors' => []]);\n\n    expect($html)->toContain('errors: []');\n});\n\n// ─── x-teleport & Root Element Resolution ────────────────────────────────────\n\nit('locates root element via $refs.trigger.closest() getter', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)\n        ->toContain(\"this.\\$refs.trigger?.closest('[data-multi-value-input]')\");\n});\n\nit('dispatches events on rootEl instead of $dispatch or _rootEl', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)\n        ->toContain('this.rootEl?.dispatchEvent')\n        ->not->toContain('this.$dispatch(')\n        ->not->toContain('this._rootEl');\n});\n\nit('teleports panel to body', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)->toContain('x-teleport=\"body\"');\n});\n\nit('listens for update-errors CustomEvent on root element', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)->toContain('x-on:update-errors=\"errors = $event.detail.errors || {}\"');\n});\n\n// ─── DOM Ordering & Sortable ─────────────────────────────────────────────────\n\nit('uses composite keys for x-for to prevent order mismatch with sortable', function (): void {\n    $html = renderMultiValueInput([\n        'value' => 'a, b, c',\n    ]);\n\n    expect($html)->toContain('`${value}-${index}`');\n});\n\nit('includes sortable directives on values list', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)\n        ->toContain('x-sortable')\n        ->toContain('x-sortable-handle')\n        ->toContain('reorderValues($event)');\n});\n\n// ─── Livewire Decoupling ─────────────────────────────────────────────────────\n\nit('has no Livewire event coupling', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)\n        ->not->toContain('Livewire.on')\n        ->not->toContain('$wire')\n        ->not->toContain('validation-updated')\n        ->not->toContain('uniqueId');\n});\n\n// ─── Accessibility ───────────────────────────────────────────────────────────\n\nit('has proper accessibility attributes', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)\n        ->toContain('aria-haspopup=\"dialog\"')\n        ->toContain('role=\"dialog\"')\n        ->toContain('aria-label=\"Manage values\"')\n        ->toContain('aria-label=\"Add new value\"')\n        ->toContain('aria-label=\"Add value\"');\n});\n\n// ─── Panel Structure ─────────────────────────────────────────────────────────\n\nit('renders add input with correct placeholder', function (): void {\n    $html = renderMultiValueInput(['placeholder' => 'Add tag...']);\n\n    expect($html)->toContain('placeholder=\"Add tag...\"');\n});\n\nit('renders delete buttons bound to deleteValue', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)->toContain('deleteValue(value)');\n});\n\nit('renders add button bound to addValue', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)\n        ->toContain('addValue()')\n        ->toContain('Add')\n        ->toContain('aria-label=\"Add value\"');\n});\n\n// ─── Lifecycle ───────────────────────────────────────────────────────────────\n\nit('registers document click listener on init', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)->toContain(\"document.addEventListener('click', this.documentClickListener)\");\n});\n\nit('removes document click listener on destroy', function (): void {\n    $html = renderMultiValueInput();\n\n    expect($html)->toContain(\"document.removeEventListener('click', this.documentClickListener)\");\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Components/SelectMenuInvalidOptionsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Illuminate\\Support\\Facades\\View;\n\nit('renders options with invalid flag in select-menu', function (): void {\n    $html = View::make('import-wizard-new::components.select-menu', [\n        'options' => [\n            ['value' => 'invalid_status', 'label' => 'invalid_status', 'invalid' => true],\n            ['value' => 'active', 'label' => 'Active'],\n            ['value' => 'inactive', 'label' => 'Inactive'],\n        ],\n        'value' => 'invalid_status',\n        'multiple' => false,\n    ])->render();\n\n    expect($html)\n        ->toContain('invalid_status')\n        ->toContain('Active');\n});\n\nit('renders invalid options with badge styling', function (): void {\n    $html = View::make('import-wizard-new::components.select-menu', [\n        'options' => [\n            ['value' => 'bad', 'label' => 'bad', 'invalid' => true],\n            ['value' => 'a', 'label' => 'Option A'],\n            ['value' => 'b', 'label' => 'Option B'],\n        ],\n        'value' => 'bad',\n        'multiple' => false,\n    ])->render();\n\n    expect($html)\n        ->toContain('bad')\n        ->toContain('Option A');\n});\n\nit('handles multiple values with some invalid in multi-select mode', function (): void {\n    $html = View::make('import-wizard-new::components.select-menu', [\n        'options' => [\n            ['value' => 'purple', 'label' => 'purple', 'invalid' => true],\n            ['value' => 'orange', 'label' => 'orange', 'invalid' => true],\n            ['value' => 'red', 'label' => 'Red'],\n            ['value' => 'blue', 'label' => 'Blue'],\n        ],\n        'value' => ['purple', 'orange', 'red'],\n        'multiple' => true,\n    ])->render();\n\n    expect($html)\n        ->toContain('purple')\n        ->toContain('orange')\n        ->toContain('Red');\n});\n\nit('works with only valid options', function (): void {\n    $html = View::make('import-wizard-new::components.select-menu', [\n        'options' => [\n            ['value' => 'yes', 'label' => 'Yes'],\n            ['value' => 'no', 'label' => 'No'],\n        ],\n        'value' => 'yes',\n        'multiple' => false,\n    ])->render();\n\n    expect($html)\n        ->toContain('Yes')\n        ->toContain('No');\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Jobs/ExecuteImportJobTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\ModelNotFoundException;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Enums\\MatchBehavior;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Relaticle\\ImportWizard\\Jobs\\ExecuteImportJob;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkResolver;\n\nmutates(ExecuteImportJob::class, EntityLinkResolver::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n});\n\nafterEach(function (): void {\n    if (isset($this->import)) {\n        ImportStore::load($this->import->id)?->destroy();\n        $this->import->delete();\n    }\n});\n\nfunction createImportReadyStore(\n    object $context,\n    array $headers,\n    array $rows,\n    array $mappings,\n    ImportEntityType $entityType = ImportEntityType::People,\n): array {\n    $import = Import::create([\n        'team_id' => (string) $context->team->id,\n        'user_id' => (string) $context->user->id,\n        'entity_type' => $entityType,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Importing,\n        'total_rows' => count($rows),\n        'headers' => $headers,\n        'column_mappings' => collect($mappings)->map(fn (ColumnData $m) => $m->toArray())->all(),\n    ]);\n\n    $store = ImportStore::create($import->id);\n    $store->query()->insert($rows);\n\n    $context->import = $import;\n    $context->store = $store;\n\n    return [$import, $store];\n}\n\nfunction runImportJob(object $context): void\n{\n    $job = new ExecuteImportJob(\n        importId: $context->import->id,\n        teamId: (string) $context->team->id,\n    );\n\n    $job->handle();\n}\n\nif (! function_exists('makeRow')) {\n    /** @param array<string, mixed> $overrides */\n    function makeRow(int $rowNumber, array $rawData, array $overrides = []): array\n    {\n        return array_merge([\n            'row_number' => $rowNumber,\n            'raw_data' => json_encode($rawData),\n            'validation' => null,\n            'corrections' => null,\n            'skipped' => null,\n            'match_action' => null,\n            'matched_id' => null,\n            'relationships' => null,\n        ], $overrides);\n    }\n}\n\nit('creates new People records for rows with match_action=Create', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John Doe'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Jane Smith'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $initialCount = People::where('team_id', $this->team->id)->count();\n\n    runImportJob($this);\n\n    $newPeople = People::where('team_id', $this->team->id)->get();\n    expect($newPeople)->toHaveCount($initialCount + 2)\n        ->and($newPeople->pluck('name')->toArray())->toContain('John Doe', 'Jane Smith');\n\n    $john = People::where('team_id', $this->team->id)->where('name', 'John Doe')->first();\n    expect($john->creation_source)->toBe(CreationSource::IMPORT)\n        ->and((string) $john->team_id)->toBe((string) $this->team->id);\n});\n\nit('creates new Company records for rows with match_action=Create', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Acme Corp'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ], ImportEntityType::Company);\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'Acme Corp')->first();\n    expect($company)->not->toBeNull()\n        ->and($company->creation_source)->toBe(CreationSource::IMPORT);\n});\n\nit('sets custom field values on created records', function (): void {\n    createImportReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'john@test.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull();\n\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    if ($emailField) {\n        $cfValue = CustomFieldValue::query()\n            ->where('custom_field_id', $emailField->id)\n            ->where('entity_id', $person->id)\n            ->first();\n\n        expect($cfValue)->not->toBeNull();\n    }\n});\n\nit('resolves multiple custom field values via batch JSON query', function (): void {\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    if ($emailField === null) {\n        $this->markTestSkipped('No emails custom field configured');\n    }\n\n    $existingPeople = [];\n    $emails = ['alice@test.com', 'bob@test.com', 'carol@test.com', 'dave@test.com', 'eve@test.com'];\n\n    foreach ($emails as $email) {\n        $person = People::factory()->create([\n            'name' => \"Person {$email}\",\n            'team_id' => $this->team->id,\n        ]);\n\n        CustomFieldValue::create([\n            'custom_field_id' => $emailField->id,\n            'entity_type' => 'people',\n            'entity_id' => $person->id,\n            'tenant_id' => $this->team->id,\n            'json_value' => [$email],\n        ]);\n\n        $existingPeople[$email] = $person;\n    }\n\n    $rows = [];\n    foreach ($emails as $i => $email) {\n        $rows[] = makeRow($i + 2, ['Name' => \"Updated {$email}\", 'Email' => $email], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $existingPeople[$email]->id,\n        ]);\n    }\n\n    createImportReadyStore($this, ['Name', 'Email'], $rows, [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n\n    expect($import->updated_rows)->toBe(5)\n        ->and($import->failed_rows)->toBe(0);\n\n    foreach ($emails as $email) {\n        $person = $existingPeople[$email]->refresh();\n        expect($person->name)->toBe(\"Updated {$email}\");\n    }\n});\n\nit('updates existing People records for rows with match_action=Update', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Old Name',\n        'team_id' => $this->team->id,\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'New Name'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $person->refresh();\n    expect($person->name)->toBe('New Name');\n});\n\nit('preserves existing data when updating with partial fields', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Original Name',\n        'team_id' => $this->team->id,\n        'creator_id' => $this->user->id,\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'Updated Name'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $person->refresh();\n    expect($person->name)->toBe('Updated Name')\n        ->and((string) $person->creator_id)->toBe((string) $this->user->id)\n        ->and((string) $person->team_id)->toBe((string) $this->team->id);\n});\n\nit('skips rows with match_action=Skip', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Ghost'], ['match_action' => RowMatchAction::Skip->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $initialCount = People::where('team_id', $this->team->id)->count();\n\n    runImportJob($this);\n\n    expect(People::where('team_id', $this->team->id)->count())->toBe($initialCount);\n});\n\nit('creates company relationship on People record via entity link', function (): void {\n    $company = Company::factory()->create([\n        'name' => 'Acme Corp',\n        'team_id' => $this->team->id,\n    ]);\n\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'update', 'id' => (string) $company->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'Acme Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull()\n        ->and((string) $person->company_id)->toBe((string) $company->id);\n});\n\nit('uses corrected values over raw values', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Jhon'], [\n            'corrections' => json_encode(['Name' => 'John']),\n            'match_action' => RowMatchAction::Create->value,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull();\n\n    expect(People::where('team_id', $this->team->id)->where('name', 'Jhon')->exists())->toBeFalse();\n});\n\nit('skips individual values marked as skipped', function (): void {\n    createImportReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'bad-email'], [\n            'skipped' => json_encode(['Email' => true]),\n            'match_action' => RowMatchAction::Create->value,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull();\n});\n\nit('sets store status to Completed on success', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n});\n\nit('skips rows with null match_action without crashing', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Good Person'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Null Action'], ['match_action' => null]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n\n    expect($import->created_rows)->toBe(1)\n        ->and($import->skipped_rows)->toBe(1)\n        ->and($import->failed_rows)->toBe(0);\n});\n\nit('stores results with counts in meta', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing',\n        'team_id' => $this->team->id,\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => '', 'Name' => 'New Person'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['ID' => (string) $person->id, 'Name' => 'Updated'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n        makeRow(4, ['ID' => '99999', 'Name' => 'Ghost'], ['match_action' => RowMatchAction::Skip->value]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n\n    expect($import->created_rows)->toBe(1)\n        ->and($import->updated_rows)->toBe(1)\n        ->and($import->skipped_rows)->toBe(1);\n});\n\nit('sets store status to Failed on exception', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ], ImportEntityType::People);\n\n    DB::table('imports')->where('id', $this->import->id)->update(['entity_type' => 'nonexistent']);\n\n    try {\n        runImportJob($this);\n    } catch (Throwable) {\n    }\n\n    $import = $this->import->fresh();\n\n    if ($import !== null) {\n        expect($import->status->value)->toBeIn([ImportStatus::Failed->value, ImportStatus::Importing->value]);\n    }\n});\n\nit('handles empty import where all rows are skipped', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Ghost'], ['match_action' => RowMatchAction::Skip->value]),\n        makeRow(3, ['Name' => 'Phantom'], ['match_action' => RowMatchAction::Skip->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n\n    expect($import->created_rows)->toBe(0)\n        ->and($import->updated_rows)->toBe(0)\n        ->and($import->skipped_rows)->toBe(2);\n});\n\nit('processes rows in chunks without issues', function (): void {\n    $rows = [];\n    for ($i = 2; $i <= 51; $i++) {\n        $rows[] = makeRow($i, ['Name' => \"Person {$i}\"], ['match_action' => RowMatchAction::Create->value]);\n    }\n\n    createImportReadyStore($this, ['Name'], $rows, [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n\n    expect($import->created_rows)->toBe(50);\n});\n\nit('auto-creates company when entity link value is unresolved', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => 'New Corp', 'behavior' => MatchBehavior::Create->value],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'New Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull();\n\n    $newCompany = Company::where('team_id', $this->team->id)->where('name', 'New Corp')->first();\n    expect($newCompany)->not->toBeNull()\n        ->and((string) $person->company_id)->toBe((string) $newCompany->id);\n});\n\nit('deduplicates auto-created companies across multiple rows', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => 'Same Corp', 'behavior' => MatchBehavior::Create->value],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'Alice', 'Company' => 'Same Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n        makeRow(3, ['Name' => 'Bob', 'Company' => 'Same Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n        makeRow(4, ['Name' => 'Carol', 'Company' => 'Same Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $companies = Company::where('team_id', $this->team->id)->where('name', 'Same Corp')->get();\n    expect($companies)->toHaveCount(1);\n\n    $people = People::where('team_id', $this->team->id)->whereIn('name', ['Alice', 'Bob', 'Carol'])->get();\n    expect($people)->toHaveCount(3);\n\n    $people->each(function ($person) use ($companies): void {\n        expect((string) $person->company_id)->toBe((string) $companies->first()->id);\n    });\n});\n\nit('skips auto-creation for entity links with only MatchOnly matchers', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'opportunities', 'action' => 'create', 'id' => null, 'name' => 'Big Deal', 'behavior' => MatchBehavior::MatchOnly->value],\n    ]);\n\n    createImportReadyStore($this, ['Title', 'Opportunity'], [\n        makeRow(2, ['Title' => 'Follow up', 'Opportunity' => 'Big Deal'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toEntityLink(source: 'Opportunity', matcherKey: 'id', entityLinkKey: 'opportunities'),\n    ], ImportEntityType::Task);\n\n    $initialOpportunityCount = Opportunity::where('team_id', $this->team->id)->count();\n\n    runImportJob($this);\n\n    expect(Opportunity::where('team_id', $this->team->id)->count())->toBe($initialOpportunityCount);\n});\n\nit('calls store() for MorphToMany entity links after record save', function (): void {\n    $company = Company::factory()->create([\n        'name' => 'Linked Corp',\n        'team_id' => $this->team->id,\n    ]);\n\n    $relationships = json_encode([\n        ['relationship' => 'companies', 'action' => 'update', 'id' => (string) $company->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Title', 'Company'], [\n        makeRow(2, ['Title' => 'Follow up', 'Company' => 'Linked Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'companies'),\n    ], ImportEntityType::Task);\n\n    runImportJob($this);\n\n    $task = Task::where('team_id', $this->team->id)->where('title', 'Follow up')->first();\n    expect($task)->not->toBeNull();\n\n    $linkedCompanies = $task->companies()->pluck('companies.id')->map(fn ($id) => (string) $id)->all();\n    expect($linkedCompanies)->toContain((string) $company->id);\n});\n\nit('auto-created records have correct team and creation source', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => 'Auto Corp', 'behavior' => MatchBehavior::Create->value],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'Jane', 'Company' => 'Auto Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $autoCreatedCompany = Company::where('team_id', $this->team->id)->where('name', 'Auto Corp')->first();\n    expect($autoCreatedCompany)->not->toBeNull()\n        ->and($autoCreatedCompany->creation_source)->toBe(CreationSource::IMPORT)\n        ->and((string) $autoCreatedCompany->team_id)->toBe((string) $this->team->id)\n        ->and((string) $autoCreatedCompany->creator_id)->toBe((string) $this->user->id);\n});\n\nit('skips Update row when matched record no longer exists', function (): void {\n    createImportReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => '99999', 'Name' => 'Ghost'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => '99999',\n        ]),\n        makeRow(3, ['ID' => '', 'Name' => 'New Person'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n\n    expect($import->skipped_rows)->toBe(1)\n        ->and($import->created_rows)->toBe(1);\n});\n\nit('processes row with multiple entity links', function (): void {\n    $company = Company::factory()->create(['name' => 'Multi Corp', 'team_id' => $this->team->id]);\n    $person = People::factory()->create(['name' => 'Contact Person', 'team_id' => $this->team->id]);\n\n    $relationships = json_encode([\n        ['relationship' => 'companies', 'action' => 'update', 'id' => (string) $company->id, 'name' => null],\n        ['relationship' => 'people', 'action' => 'update', 'id' => (string) $person->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Title', 'Company', 'Contact'], [\n        makeRow(2, ['Title' => 'Multi-link task', 'Company' => 'Multi Corp', 'Contact' => 'Contact Person'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'companies'),\n        ColumnData::toEntityLink(source: 'Contact', matcherKey: 'name', entityLinkKey: 'people'),\n    ], ImportEntityType::Task);\n\n    runImportJob($this);\n\n    $task = Task::where('team_id', $this->team->id)->where('title', 'Multi-link task')->first();\n    expect($task)->not->toBeNull();\n\n    expect($task->companies()->pluck('companies.id')->map(fn ($id) => (string) $id)->all())\n        ->toContain((string) $company->id);\n\n    expect($task->people()->pluck('people.id')->map(fn ($id) => (string) $id)->all())\n        ->toContain((string) $person->id);\n});\n\nit('handles nonexistent import gracefully', function (): void {\n    $job = new ExecuteImportJob('nonexistent-id', (string) $this->team->id);\n\n    try {\n        $job->handle();\n        expect(false)->toBeTrue('Expected exception was not thrown');\n    } catch (ModelNotFoundException $e) {\n        expect($e->getModel())->toBe(Import::class);\n    }\n});\n\nit('filters out unexpected attributes from CSV data before saving', function (): void {\n    createImportReadyStore($this, ['Name', 'Malicious'], [\n        makeRow(2, ['Name' => 'Safe Person', 'Malicious' => 'hacked'], [\n            'match_action' => RowMatchAction::Create->value,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Malicious', target: 'is_admin'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'Safe Person')->first();\n    expect($person)->not->toBeNull();\n\n    $raw = DB::table('people')->where('id', $person->id)->first();\n    expect($raw)->not->toHaveProperty('is_admin', 'hacked');\n});\n\nit('persists failed row details in store metadata', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Good Person'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Good Person 2'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n\n    expect($import->created_rows)->toBe(2)\n        ->and($import->failedRows)->toBeEmpty();\n});\n\nit('sends success notification to user on import completion', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John Doe'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Jane Smith'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $notifications = $this->user->notifications()->get();\n    expect($notifications)->toHaveCount(1);\n\n    $notification = $notifications->first();\n    expect($notification->data['title'])->toBe('Import of People completed')\n        ->and($notification->data['viewData']['results']['created'])->toBe(2)\n        ->and($notification->data['viewData']['results']['failed'])->toBe(0);\n});\n\nit('includes result counts in completion notification body', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing',\n        'team_id' => $this->team->id,\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => '', 'Name' => 'New Person'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['ID' => (string) $person->id, 'Name' => 'Updated'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n        makeRow(4, ['ID' => '', 'Name' => 'Ghost'], ['match_action' => RowMatchAction::Skip->value]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $notification = $this->user->notifications()->first();\n    expect($notification)->not->toBeNull()\n        ->and($notification->data['viewData']['results']['created'])->toBe(1)\n        ->and($notification->data['viewData']['results']['updated'])->toBe(1)\n        ->and($notification->data['viewData']['results']['skipped'])->toBe(1)\n        ->and($notification->data['viewData']['results']['failed'])->toBe(0);\n});\n\nit('records failed rows with row number and error message', function (): void {\n    createImportReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => '', 'Name' => 'Valid Person'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['ID' => '99999', 'Name' => 'Ghost Person'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => '99999',\n        ]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n\n    expect($import->created_rows)->toBe(1)\n        ->and($import->skipped_rows)->toBe(1)\n        ->and($import->failedRows)->toBeEmpty();\n});\n\nit('handles Japanese characters in name fields', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => '田中太郎'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => '佐藤花子'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n\n    expect(People::where('team_id', $this->team->id)->where('name', '田中太郎')->exists())->toBeTrue()\n        ->and(People::where('team_id', $this->team->id)->where('name', '佐藤花子')->exists())->toBeTrue();\n});\n\nit('handles Arabic characters in name fields', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'محمد أحمد'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'محمد أحمد')->first();\n    expect($person)->not->toBeNull()\n        ->and($person->name)->toBe('محمد أحمد');\n});\n\nit('handles emoji characters in name fields', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'Test User 🚀'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'Test User 🚀')->first();\n    expect($person)->not->toBeNull()\n        ->and($person->name)->toBe('Test User 🚀');\n});\n\nit('handles accented Latin characters in name fields', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'José García'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'François Müller'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    expect(People::where('team_id', $this->team->id)->where('name', 'José García')->exists())->toBeTrue()\n        ->and(People::where('team_id', $this->team->id)->where('name', 'François Müller')->exists())->toBeTrue();\n});\n\nit('handles international data with entity link auto-creation', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => '株式会社テスト', 'behavior' => MatchBehavior::Create->value],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => '田中太郎', 'Company' => '株式会社テスト'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', '田中太郎')->first();\n    expect($person)->not->toBeNull();\n\n    $company = Company::where('team_id', $this->team->id)->where('name', '株式会社テスト')->first();\n    expect($company)->not->toBeNull()\n        ->and((string) $person->company_id)->toBe((string) $company->id);\n});\n\nit('persists results to Import model on completion', function (): void {\n    $headers = ['Name', 'Email'];\n    $rows = [\n        makeRow(2, ['Name' => 'John', 'Email' => 'john@test.com'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Jane', 'Email' => 'jane@test.com'], ['match_action' => RowMatchAction::Create->value]),\n    ];\n    $mappings = [\n        ColumnData::toField('Name', 'name'),\n        ColumnData::toField('Email', 'email'),\n    ];\n\n    [$import, $store] = createImportReadyStore($this, $headers, $rows, $mappings);\n\n    runImportJob($this);\n\n    $import->refresh();\n    expect($import->status)->toBe(ImportStatus::Completed)\n        ->and($import->completed_at)->not->toBeNull()\n        ->and($import->created_rows)->toBe(2)\n        ->and($import->updated_rows)->toBe(0)\n        ->and($import->skipped_rows)->toBe(0)\n        ->and($import->failed_rows)->toBe(0);\n});\n\nit('processes 1000 row create import', function (): void {\n    $rows = [];\n    for ($i = 2; $i <= 1001; $i++) {\n        $rows[] = makeRow($i, ['Name' => \"Person {$i}\"], ['match_action' => RowMatchAction::Create->value]);\n    }\n\n    createImportReadyStore($this, ['Name'], $rows, [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Completed);\n\n    expect($import->created_rows)->toBe(1000)\n        ->and($import->failed_rows)->toBe(0);\n})->group('slow');\n\nit('processes 1000 row mixed operations import', function (): void {\n    $existingPeople = People::factory()->count(100)->create([\n        'team_id' => $this->team->id,\n    ]);\n\n    $rows = [];\n    $rowNumber = 2;\n\n    foreach ($existingPeople as $person) {\n        $rows[] = makeRow($rowNumber++, ['ID' => (string) $person->id, 'Name' => \"Updated {$person->name}\"], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]);\n    }\n\n    for ($i = 0; $i < 50; $i++) {\n        $rows[] = makeRow($rowNumber++, ['ID' => (string) (900000 + $i), 'Name' => \"Ghost {$i}\"], [\n            'match_action' => RowMatchAction::Skip->value,\n        ]);\n    }\n\n    for ($i = 0; $i < 850; $i++) {\n        $rows[] = makeRow($rowNumber++, ['ID' => '', 'Name' => \"New Person {$i}\"], [\n            'match_action' => RowMatchAction::Create->value,\n        ]);\n    }\n\n    createImportReadyStore($this, ['ID', 'Name'], $rows, [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(850)\n        ->and($import->updated_rows)->toBe(100)\n        ->and($import->skipped_rows)->toBe(50)\n        ->and($import->failed_rows)->toBe(0)\n        ->and($import->status)->toBe(ImportStatus::Completed);\n})->group('slow');\n\nit('marks import as Failed when job exhausts retries via failed() handler', function (): void {\n    createImportReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $job = new ExecuteImportJob(\n        importId: $this->import->id,\n        teamId: (string) $this->team->id,\n    );\n\n    $job->failed(new RuntimeException('Queue worker gave up'));\n\n    $import = $this->import->fresh();\n    expect($import->status)->toBe(ImportStatus::Failed);\n});\n\nit('processes 1000 rows with entity link relationships and deduplication', function (): void {\n    $companyNames = [];\n    for ($i = 0; $i < 20; $i++) {\n        $companyNames[] = \"Company {$i}\";\n    }\n\n    $rows = [];\n    for ($i = 2; $i <= 1001; $i++) {\n        $companyName = $companyNames[($i - 2) % count($companyNames)];\n        $relationships = json_encode([\n            ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => $companyName, 'behavior' => MatchBehavior::Create->value],\n        ]);\n\n        $rows[] = makeRow($i, ['Name' => \"Person {$i}\", 'Company' => $companyName], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]);\n    }\n\n    createImportReadyStore($this, ['Name', 'Company'], $rows, [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(1000)\n        ->and($import->failed_rows)->toBe(0)\n        ->and($import->status)->toBe(ImportStatus::Completed);\n\n    $companies = Company::where('team_id', $this->team->id)\n        ->whereIn('name', $companyNames)\n        ->get();\n\n    expect($companies)->toHaveCount(20);\n})->group('slow');\n\n// --- Custom Field Import Tests ---\n\nfunction createTestCustomField(object $context, string $code, string $type, string $entityType = 'people', array $options = []): CustomField\n{\n    $cf = CustomField::forceCreate([\n        'tenant_id' => $context->team->id,\n        'code' => $code,\n        'name' => ucfirst(str_replace('_', ' ', $code)),\n        'type' => $type,\n        'entity_type' => $entityType,\n        'sort_order' => 1,\n        'active' => true,\n        'system_defined' => false,\n        'validation_rules' => [],\n        'settings' => new CustomFieldSettingsData,\n    ]);\n\n    foreach ($options as $i => $optionName) {\n        $cf->options()->forceCreate([\n            'custom_field_id' => $cf->id,\n            'tenant_id' => $context->team->id,\n            'name' => $optionName,\n            'sort_order' => $i + 1,\n        ]);\n    }\n\n    return $cf->fresh();\n}\n\nfunction getTestCustomFieldValue(object $context, string $entityId, string $customFieldId): ?CustomFieldValue\n{\n    return CustomFieldValue::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $context->team->id)\n        ->where('entity_id', $entityId)\n        ->where('custom_field_id', $customFieldId)\n        ->first();\n}\n\nit('imports text custom field value', function (): void {\n    $cf = createTestCustomField($this, 'website_notes', 'text');\n\n    createImportReadyStore($this, ['Name', 'Notes'], [\n        makeRow(2, ['Name' => 'John', 'Notes' => 'Some important text'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Notes', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull();\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->text_value)->toBe('Some important text');\n});\n\nit('imports number custom field as integer', function (): void {\n    $cf = createTestCustomField($this, 'employee_count', 'number');\n\n    createImportReadyStore($this, ['Name', 'Employees'], [\n        makeRow(2, ['Name' => 'Acme', 'Employees' => '42'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Employees', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'Acme')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->integer_value)->toBe(42);\n});\n\nit('imports currency custom field with point decimal format', function (): void {\n    $cf = createTestCustomField($this, 'revenue', 'currency');\n\n    createImportReadyStore($this, ['Name', 'Revenue'], [\n        makeRow(2, ['Name' => 'Acme', 'Revenue' => '1234.56'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Revenue', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'Acme')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->float_value)->toBe(1234.56);\n});\n\nit('imports currency custom field with comma decimal format', function (): void {\n    $cf = createTestCustomField($this, 'revenue_eu', 'currency');\n\n    createImportReadyStore($this, ['Name', 'Revenue'], [\n        makeRow(2, ['Name' => 'Acme', 'Revenue' => '1.234,56'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        (new ColumnData(\n            source: 'Revenue',\n            target: \"custom_fields_{$cf->code}\",\n            numberFormat: NumberFormat::COMMA,\n        )),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'Acme')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->float_value)->toBe(1234.56);\n});\n\nit('imports date custom field with ISO format', function (): void {\n    $cf = createTestCustomField($this, 'start_date', 'date');\n\n    createImportReadyStore($this, ['Name', 'Start'], [\n        makeRow(2, ['Name' => 'John', 'Start' => '2024-05-15'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Start', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->date_value->format('Y-m-d'))->toBe('2024-05-15');\n});\n\nit('imports date custom field with European format', function (): void {\n    $cf = createTestCustomField($this, 'start_date_eu', 'date');\n\n    createImportReadyStore($this, ['Name', 'Start'], [\n        makeRow(2, ['Name' => 'John', 'Start' => '15/05/2024'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        (new ColumnData(\n            source: 'Start',\n            target: \"custom_fields_{$cf->code}\",\n            dateFormat: DateFormat::EUROPEAN,\n        )),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->date_value->format('Y-m-d'))->toBe('2024-05-15');\n});\n\nit('imports date custom field with American format', function (): void {\n    $cf = createTestCustomField($this, 'start_date_us', 'date');\n\n    createImportReadyStore($this, ['Name', 'Start'], [\n        makeRow(2, ['Name' => 'John', 'Start' => '05/15/2024'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        (new ColumnData(\n            source: 'Start',\n            target: \"custom_fields_{$cf->code}\",\n            dateFormat: DateFormat::AMERICAN,\n        )),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->date_value->format('Y-m-d'))->toBe('2024-05-15');\n});\n\nit('imports datetime custom field with ISO format including time', function (): void {\n    $cf = createTestCustomField($this, 'meeting_at', 'date-time');\n\n    createImportReadyStore($this, ['Name', 'Meeting'], [\n        makeRow(2, ['Name' => 'John', 'Meeting' => '2024-05-15 14:30:00'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Meeting', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->datetime_value->format('Y-m-d H:i:s'))->toBe('2024-05-15 14:30:00');\n});\n\nit('imports datetime custom field with European format including time', function (): void {\n    $cf = createTestCustomField($this, 'meeting_at_eu', 'date-time');\n\n    createImportReadyStore($this, ['Name', 'Meeting'], [\n        makeRow(2, ['Name' => 'John', 'Meeting' => '15/05/2024 14:30'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        (new ColumnData(\n            source: 'Meeting',\n            target: \"custom_fields_{$cf->code}\",\n            dateFormat: DateFormat::EUROPEAN,\n        )),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->datetime_value->format('Y-m-d H:i'))->toBe('2024-05-15 14:30');\n});\n\nit('imports boolean custom field with truthy values', function (): void {\n    $cf = createTestCustomField($this, 'is_vip', 'checkbox');\n\n    createImportReadyStore($this, ['Name', 'VIP'], [\n        makeRow(2, ['Name' => 'John', 'VIP' => '1'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'VIP', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->boolean_value)->toBeTrue();\n});\n\nit('imports select custom field with option name resolved to ID', function (): void {\n    $cf = createTestCustomField($this, 'priority', 'select', 'people', ['Low', 'Medium', 'High']);\n    $mediumOption = $cf->options->firstWhere('name', 'Medium');\n\n    createImportReadyStore($this, ['Name', 'Priority'], [\n        makeRow(2, ['Name' => 'John', 'Priority' => 'Medium'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Priority', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->string_value)->toBe((string) $mediumOption->id);\n});\n\nit('imports multi-select custom field with option names resolved to IDs', function (): void {\n    $cf = createTestCustomField($this, 'tags_field', 'multi-select', 'people', ['Urgent', 'Follow-up', 'VIP']);\n    $urgentOption = $cf->options->firstWhere('name', 'Urgent');\n    $vipOption = $cf->options->firstWhere('name', 'VIP');\n\n    createImportReadyStore($this, ['Name', 'Tags'], [\n        makeRow(2, ['Name' => 'John', 'Tags' => 'Urgent, VIP'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Tags', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = $cfv->json_value;\n    expect($jsonValue)->toContain((string) $urgentOption->id)\n        ->toContain((string) $vipOption->id);\n});\n\nit('imports tags-input custom field with comma-separated values', function (): void {\n    $cf = createTestCustomField($this, 'labels', 'tags-input');\n\n    createImportReadyStore($this, ['Name', 'Labels'], [\n        makeRow(2, ['Name' => 'John', 'Labels' => 'tag1, tag2, tag3'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Labels', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = $cfv->json_value;\n    expect($jsonValue)->toContain('tag1')\n        ->toContain('tag2')\n        ->toContain('tag3');\n});\n\nit('skips blank custom field values without creating custom_field_values row', function (): void {\n    $cf = createTestCustomField($this, 'optional_notes', 'text');\n\n    createImportReadyStore($this, ['Name', 'Notes'], [\n        makeRow(2, ['Name' => 'John', 'Notes' => ''], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Notes', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    expect($person)->not->toBeNull();\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->toBeNull();\n});\n\nit('updates existing custom field value on record update', function (): void {\n    $cf = createTestCustomField($this, 'note_field', 'text');\n\n    $person = People::factory()->create([\n        'name' => 'John',\n        'team_id' => $this->team->id,\n    ]);\n\n    CustomFieldValue::forceCreate([\n        'custom_field_id' => $cf->id,\n        'entity_type' => 'people',\n        'entity_id' => $person->id,\n        'tenant_id' => $this->team->id,\n        'text_value' => 'old value',\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name', 'Notes'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'John', 'Notes' => 'new value'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Notes', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->text_value)->toBe('new value');\n});\n\nit('imports email custom field with comma-separated addresses as array', function (): void {\n    $cf = createTestCustomField($this, 'contact_emails', 'email');\n\n    createImportReadyStore($this, ['Name', 'Emails'], [\n        makeRow(2, ['Name' => 'John', 'Emails' => 'a@b.com, c@d.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Emails', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = collect($cfv->json_value)->all();\n    expect($jsonValue)->toBeArray()\n        ->toContain('a@b.com')\n        ->toContain('c@d.com');\n});\n\nit('imports select custom field with case-insensitive option name', function (): void {\n    $cf = createTestCustomField($this, 'priority_ci', 'select', 'people', ['Low', 'Medium', 'High']);\n    $mediumOption = $cf->options->firstWhere('name', 'Medium');\n\n    createImportReadyStore($this, ['Name', 'Priority'], [\n        makeRow(2, ['Name' => 'John', 'Priority' => 'medium'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Priority', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->string_value)->toBe((string) $mediumOption->id);\n});\n\nit('imports select custom field with value already being an option ID', function (): void {\n    $cf = createTestCustomField($this, 'priority_id', 'select', 'people', ['Low', 'Medium', 'High']);\n    $mediumOption = $cf->options->firstWhere('name', 'Medium');\n\n    createImportReadyStore($this, ['Name', 'Priority'], [\n        makeRow(2, ['Name' => 'John', 'Priority' => (string) $mediumOption->id], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Priority', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->string_value)->toBe((string) $mediumOption->id);\n});\n\nit('imports multi-select custom field with mixed option names resolved to IDs', function (): void {\n    $cf = createTestCustomField($this, 'categories', 'multi-select', 'people', ['Alpha', 'Beta', 'Gamma']);\n    $alphaOption = $cf->options->firstWhere('name', 'Alpha');\n    $gammaOption = $cf->options->firstWhere('name', 'Gamma');\n\n    createImportReadyStore($this, ['Name', 'Categories'], [\n        makeRow(2, ['Name' => 'John', 'Categories' => 'Alpha, Gamma'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Categories', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = collect($cfv->json_value)->all();\n    expect($jsonValue)->toBeArray()\n        ->toContain((string) $alphaOption->id)\n        ->toContain((string) $gammaOption->id)\n        ->not->toContain('Alpha')\n        ->not->toContain('Gamma');\n});\n\n// --- Missing Custom Field Type Tests ---\n\nit('imports phone custom field with comma-separated numbers as array', function (): void {\n    $cf = createTestCustomField($this, 'phones', 'phone');\n\n    createImportReadyStore($this, ['Name', 'Phones'], [\n        makeRow(2, ['Name' => 'John', 'Phones' => '+1-555-0101, +44-20-7946-0958'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Phones', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = collect($cfv->json_value)->all();\n    expect($jsonValue)->toBeArray()\n        ->toContain('+1-555-0101')\n        ->toContain('+44-20-7946-0958');\n});\n\nit('imports link custom field with URL value', function (): void {\n    $cf = createTestCustomField($this, 'website', 'link');\n\n    createImportReadyStore($this, ['Name', 'Website'], [\n        makeRow(2, ['Name' => 'John', 'Website' => 'https://example.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Website', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = collect($cfv->json_value)->all();\n    expect($jsonValue)->toContain('https://example.com');\n});\n\nit('imports toggle custom field with truthy values', function (): void {\n    $cf = createTestCustomField($this, 'is_active', 'toggle');\n\n    createImportReadyStore($this, ['Name', 'Active'], [\n        makeRow(2, ['Name' => 'John', 'Active' => 'yes'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Active', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->boolean_value)->toBeTrue();\n});\n\nit('imports toggle custom field with falsy values', function (): void {\n    $cf = createTestCustomField($this, 'opted_out', 'toggle');\n\n    createImportReadyStore($this, ['Name', 'OptedOut'], [\n        makeRow(2, ['Name' => 'John', 'OptedOut' => '0'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'OptedOut', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->boolean_value)->toBeFalse();\n});\n\nit('imports textarea custom field value', function (): void {\n    $cf = createTestCustomField($this, 'bio', 'textarea');\n\n    createImportReadyStore($this, ['Name', 'Bio'], [\n        makeRow(2, ['Name' => 'John', 'Bio' => 'A long biography text that spans multiple lines conceptually.'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Bio', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->text_value)->toBe('A long biography text that spans multiple lines conceptually.');\n});\n\nit('imports rich-editor custom field value as text', function (): void {\n    $cf = createTestCustomField($this, 'detailed_notes', 'rich-editor');\n\n    createImportReadyStore($this, ['Name', 'Notes'], [\n        makeRow(2, ['Name' => 'John', 'Notes' => '<p>Bold statement</p>'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Notes', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->text_value)->toBe('<p>Bold statement</p>');\n});\n\nit('imports markdown-editor custom field value as text', function (): void {\n    $cf = createTestCustomField($this, 'readme', 'markdown-editor');\n\n    createImportReadyStore($this, ['Name', 'Readme'], [\n        makeRow(2, ['Name' => 'John', 'Readme' => '# Heading\\n\\nSome **bold** text'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Readme', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->text_value)->toBe('# Heading\\n\\nSome **bold** text');\n});\n\nit('imports checkbox-list custom field with option names resolved to IDs', function (): void {\n    $cf = createTestCustomField($this, 'interests', 'checkbox-list', 'people', ['Sports', 'Music', 'Tech']);\n    $sportsOption = $cf->options->firstWhere('name', 'Sports');\n    $techOption = $cf->options->firstWhere('name', 'Tech');\n\n    createImportReadyStore($this, ['Name', 'Interests'], [\n        makeRow(2, ['Name' => 'John', 'Interests' => 'Sports, Tech'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Interests', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull();\n\n    $jsonValue = collect($cfv->json_value)->all();\n    expect($jsonValue)->toBeArray()\n        ->toContain((string) $sportsOption->id)\n        ->toContain((string) $techOption->id);\n});\n\nit('imports radio custom field with option name resolved to ID', function (): void {\n    $cf = createTestCustomField($this, 'size', 'radio', 'people', ['Small', 'Medium', 'Large']);\n    $mediumOption = $cf->options->firstWhere('name', 'Medium');\n\n    createImportReadyStore($this, ['Name', 'Size'], [\n        makeRow(2, ['Name' => 'John', 'Size' => 'Medium'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Size', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->string_value)->toBe((string) $mediumOption->id);\n});\n\nit('imports toggle-buttons custom field with option name resolved to ID', function (): void {\n    $cf = createTestCustomField($this, 'urgency', 'toggle-buttons', 'people', ['Low', 'Normal', 'Urgent']);\n    $urgentOption = $cf->options->firstWhere('name', 'Urgent');\n\n    createImportReadyStore($this, ['Name', 'Urgency'], [\n        makeRow(2, ['Name' => 'John', 'Urgency' => 'Urgent'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Urgency', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->string_value)->toBe((string) $urgentOption->id);\n});\n\nit('imports color-picker custom field value as text', function (): void {\n    $cf = createTestCustomField($this, 'brand_color', 'color-picker');\n\n    createImportReadyStore($this, ['Name', 'Color'], [\n        makeRow(2, ['Name' => 'John', 'Color' => '#ff5733'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Color', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'John')->first();\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->text_value)->toBe('#ff5733');\n});\n\n// --- Entity-Specific Importer Tests ---\n\nit('imports company with account_owner resolved by email via entity link', function (): void {\n    $owner = User::factory()->create();\n    $this->team->users()->attach($owner, ['role' => 'editor']);\n\n    $relationships = json_encode([\n        ['relationship' => 'account_owner', 'action' => 'update', 'id' => (string) $owner->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Owner Email'], [\n        makeRow(2, ['Name' => 'Test Corp', 'Owner Email' => $owner->email], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Owner Email', matcherKey: 'email', entityLinkKey: 'account_owner'),\n    ], ImportEntityType::Company);\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'Test Corp')->first();\n    expect($company)->not->toBeNull()\n        ->and((string) $company->account_owner_id)->toBe((string) $owner->id);\n});\n\nit('imports company with unmatched account_owner email skipping silently', function (): void {\n    createImportReadyStore($this, ['Name', 'Owner Email'], [\n        makeRow(2, ['Name' => 'Test Corp', 'Owner Email' => 'nonexistent@example.com'], [\n            'match_action' => RowMatchAction::Create->value,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Owner Email', matcherKey: 'email', entityLinkKey: 'account_owner'),\n    ], ImportEntityType::Company);\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'Test Corp')->first();\n    expect($company)->not->toBeNull()\n        ->and($company->account_owner_id)->toBeNull();\n});\n\nit('imports company with account_owner resolved for team owner', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'account_owner', 'action' => 'update', 'id' => (string) $this->user->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Owner Email'], [\n        makeRow(2, ['Name' => 'Owner Corp', 'Owner Email' => $this->user->email], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Owner Email', matcherKey: 'email', entityLinkKey: 'account_owner'),\n    ], ImportEntityType::Company);\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'Owner Corp')->first();\n    expect($company)->not->toBeNull()\n        ->and((string) $company->account_owner_id)->toBe((string) $this->user->id);\n});\n\nit('imports task with assignee resolved by email via entity link', function (): void {\n    $assignee = User::factory()->create();\n    $this->team->users()->attach($assignee, ['role' => 'editor']);\n\n    $relationships = json_encode([\n        ['relationship' => 'assignees', 'action' => 'update', 'id' => (string) $assignee->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Title', 'Assignee Email'], [\n        makeRow(2, ['Title' => 'Test Task', 'Assignee Email' => $assignee->email], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toEntityLink(source: 'Assignee Email', matcherKey: 'email', entityLinkKey: 'assignees'),\n    ], ImportEntityType::Task);\n\n    runImportJob($this);\n\n    $task = Task::where('team_id', $this->team->id)->where('title', 'Test Task')->first();\n    expect($task)->not->toBeNull();\n\n    $assigneeIds = $task->assignees()->pluck('users.id')->map(fn ($id) => (string) $id)->all();\n    expect($assigneeIds)->toContain((string) $assignee->id);\n});\n\nit('imports task with unmatched assignee email skipping silently', function (): void {\n    createImportReadyStore($this, ['Title', 'Assignee Email'], [\n        makeRow(2, ['Title' => 'Orphan Task', 'Assignee Email' => 'ghost@nowhere.com'], [\n            'match_action' => RowMatchAction::Create->value,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toEntityLink(source: 'Assignee Email', matcherKey: 'email', entityLinkKey: 'assignees'),\n    ], ImportEntityType::Task);\n\n    runImportJob($this);\n\n    $task = Task::where('team_id', $this->team->id)->where('title', 'Orphan Task')->first();\n    expect($task)->not->toBeNull()\n        ->and($task->assignees()->count())->toBe(0);\n});\n\nit('imports opportunity with company and contact entity links', function (): void {\n    $company = Company::factory()->create(['name' => 'Deal Corp', 'team_id' => $this->team->id]);\n    $contact = People::factory()->create(['name' => 'Deal Contact', 'team_id' => $this->team->id]);\n\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'update', 'id' => (string) $company->id, 'name' => null],\n        ['relationship' => 'contact', 'action' => 'update', 'id' => (string) $contact->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company', 'Contact'], [\n        makeRow(2, ['Name' => 'Big Deal', 'Company' => 'Deal Corp', 'Contact' => 'Deal Contact'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n        ColumnData::toEntityLink(source: 'Contact', matcherKey: 'name', entityLinkKey: 'contact'),\n    ], ImportEntityType::Opportunity);\n\n    runImportJob($this);\n\n    $opportunity = Opportunity::where('team_id', $this->team->id)->where('name', 'Big Deal')->first();\n    expect($opportunity)->not->toBeNull()\n        ->and((string) $opportunity->company_id)->toBe((string) $company->id)\n        ->and((string) $opportunity->contact_id)->toBe((string) $contact->id);\n});\n\nit('imports note with polymorphic entity links to company and person', function (): void {\n    $company = Company::factory()->create(['name' => 'Note Corp', 'team_id' => $this->team->id]);\n    $person = People::factory()->create(['name' => 'Note Person', 'team_id' => $this->team->id]);\n\n    $relationships = json_encode([\n        ['relationship' => 'companies', 'action' => 'update', 'id' => (string) $company->id, 'name' => null],\n        ['relationship' => 'people', 'action' => 'update', 'id' => (string) $person->id, 'name' => null],\n    ]);\n\n    createImportReadyStore($this, ['Title', 'Company', 'Person'], [\n        makeRow(2, ['Title' => 'Meeting Notes', 'Company' => 'Note Corp', 'Person' => 'Note Person'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'companies'),\n        ColumnData::toEntityLink(source: 'Person', matcherKey: 'name', entityLinkKey: 'people'),\n    ], ImportEntityType::Note);\n\n    runImportJob($this);\n\n    $note = Note::where('team_id', $this->team->id)->where('title', 'Meeting Notes')->first();\n    expect($note)->not->toBeNull();\n\n    expect($note->companies()->pluck('companies.id')->map(fn ($id) => (string) $id)->all())\n        ->toContain((string) $company->id);\n\n    expect($note->people()->pluck('people.id')->map(fn ($id) => (string) $id)->all())\n        ->toContain((string) $person->id);\n});\n\nit('imports note with title field only', function (): void {\n    createImportReadyStore($this, ['Title'], [\n        makeRow(2, ['Title' => 'Quick note'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n    ], ImportEntityType::Note);\n\n    runImportJob($this);\n\n    $note = Note::where('team_id', $this->team->id)->where('title', 'Quick note')->first();\n    expect($note)->not->toBeNull()\n        ->and($note->creation_source)->toBe(CreationSource::IMPORT);\n});\n\nit('imports task with custom field values for select fields', function (): void {\n    $statusCf = createTestCustomField($this, 'task_status', 'select', 'task', ['To do', 'In progress', 'Done']);\n    $priorityCf = createTestCustomField($this, 'task_priority', 'select', 'task', ['Low', 'Medium', 'High']);\n    $inProgressOption = $statusCf->options->firstWhere('name', 'In progress');\n    $highOption = $priorityCf->options->firstWhere('name', 'High');\n\n    createImportReadyStore($this, ['Title', 'Status', 'Priority'], [\n        makeRow(2, ['Title' => 'Urgent Task', 'Status' => 'In progress', 'Priority' => 'High'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Title', target: 'title'),\n        ColumnData::toField(source: 'Status', target: \"custom_fields_{$statusCf->code}\"),\n        ColumnData::toField(source: 'Priority', target: \"custom_fields_{$priorityCf->code}\"),\n    ], ImportEntityType::Task);\n\n    runImportJob($this);\n\n    $task = Task::where('team_id', $this->team->id)->where('title', 'Urgent Task')->first();\n    expect($task)->not->toBeNull();\n\n    $statusCfv = getTestCustomFieldValue($this, (string) $task->id, (string) $statusCf->id);\n    expect($statusCfv)->not->toBeNull()\n        ->and($statusCfv->string_value)->toBe((string) $inProgressOption->id);\n\n    $priorityCfv = getTestCustomFieldValue($this, (string) $task->id, (string) $priorityCf->id);\n    expect($priorityCfv)->not->toBeNull()\n        ->and($priorityCfv->string_value)->toBe((string) $highOption->id);\n});\n\nit('imports company with custom field values for toggle and link', function (): void {\n    $icpCf = createTestCustomField($this, 'is_icp', 'toggle', 'company');\n    $linkedinCf = createTestCustomField($this, 'linkedin_url', 'link', 'company');\n\n    createImportReadyStore($this, ['Name', 'ICP', 'LinkedIn'], [\n        makeRow(2, ['Name' => 'Great Corp', 'ICP' => 'true', 'LinkedIn' => 'https://linkedin.com/company/great'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'ICP', target: \"custom_fields_{$icpCf->code}\"),\n        ColumnData::toField(source: 'LinkedIn', target: \"custom_fields_{$linkedinCf->code}\"),\n    ], ImportEntityType::Company);\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'Great Corp')->first();\n    expect($company)->not->toBeNull();\n\n    $icpCfv = getTestCustomFieldValue($this, (string) $company->id, (string) $icpCf->id);\n    expect($icpCfv)->not->toBeNull()\n        ->and($icpCfv->boolean_value)->toBeTrue();\n\n    $linkedinCfv = getTestCustomFieldValue($this, (string) $company->id, (string) $linkedinCf->id);\n    expect($linkedinCfv)->not->toBeNull()\n        ->and(collect($linkedinCfv->json_value)->all())->toContain('https://linkedin.com/company/great');\n});\n\n// --- Intra-Import Dedup Tests ---\n\nit('deduplicates Create rows with same matchable email value', function (): void {\n    createImportReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'Lay', 'Email' => 'same@acme.com'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Ray', 'Email' => 'same@acme.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(1)\n        ->and($import->updated_rows)->toBe(1)\n        ->and($import->failed_rows)->toBe(0);\n\n    $people = People::where('team_id', $this->team->id)->whereIn('name', ['Lay', 'Ray'])->get();\n    expect($people)->toHaveCount(1)\n        ->and($people->first()->name)->toBe('Ray');\n\n    $row3 = $this->store->query()->where('row_number', 3)->first();\n    expect($row3->match_action)->toBe(RowMatchAction::Update);\n});\n\nit('does not dedup Create rows with different matchable values', function (): void {\n    createImportReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'Alice', 'Email' => 'alice@acme.com'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Bob', 'Email' => 'bob@acme.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(2)\n        ->and($import->updated_rows)->toBe(0);\n\n    $people = People::where('team_id', $this->team->id)->whereIn('name', ['Alice', 'Bob'])->get();\n    expect($people)->toHaveCount(2);\n});\n\nit('deduplicates Create rows with multi-value matchable field', function (): void {\n    createImportReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'First', 'Email' => 'shared@acme.com, extra@acme.com'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Second', 'Email' => 'shared@acme.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(1)\n        ->and($import->updated_rows)->toBe(1)\n        ->and($import->failed_rows)->toBe(0);\n\n    $people = People::where('team_id', $this->team->id)->whereIn('name', ['First', 'Second'])->get();\n    expect($people)->toHaveCount(1)\n        ->and($people->first()->name)->toBe('Second');\n});\n\nit('deduplicates company Create rows by domain', function (): void {\n    createImportReadyStore($this, ['Name', 'Domain'], [\n        makeRow(2, ['Name' => 'Acme Inc', 'Domain' => 'acme.com'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Acme Corp', 'Domain' => 'acme.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Domain', target: 'custom_fields_domains'),\n    ], ImportEntityType::Company);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(1)\n        ->and($import->updated_rows)->toBe(1)\n        ->and($import->failed_rows)->toBe(0);\n\n    $companies = Company::where('team_id', $this->team->id)->whereIn('name', ['Acme Inc', 'Acme Corp'])->get();\n    expect($companies)->toHaveCount(1)\n        ->and($companies->first()->name)->toBe('Acme Corp');\n});\n\n// --- Multi-Choice Merge Tests ---\n\nit('merges multi-choice custom field values during update', function (): void {\n    $cf = createTestCustomField($this, 'merge_emails', 'email');\n\n    $person = People::factory()->create([\n        'name' => 'Merge Test',\n        'team_id' => $this->team->id,\n    ]);\n\n    CustomFieldValue::create([\n        'custom_field_id' => $cf->id,\n        'entity_type' => 'people',\n        'entity_id' => $person->id,\n        'tenant_id' => $this->team->id,\n        'json_value' => ['old@work.com'],\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name', 'Email'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'Merge Test', 'Email' => 'new@work.com'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->updated_rows)->toBe(1)\n        ->and($import->failed_rows)->toBe(0);\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and(collect($cfv->json_value)->all())->toBe(['old@work.com', 'new@work.com']);\n});\n\nit('merges multi-choice custom field values during dedup', function (): void {\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    if ($emailField === null) {\n        $this->markTestSkipped('No emails custom field configured');\n    }\n\n    createImportReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'Dedup A', 'Email' => 'a@test.com'], ['match_action' => RowMatchAction::Create->value]),\n        makeRow(3, ['Name' => 'Dedup B', 'Email' => 'a@test.com'], ['match_action' => RowMatchAction::Create->value]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->created_rows)->toBe(1)\n        ->and($import->updated_rows)->toBe(1);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'Dedup B')->first();\n    expect($person)->not->toBeNull();\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $emailField->id);\n    expect($cfv)->not->toBeNull()\n        ->and(collect($cfv->json_value)->all())->toBe(['a@test.com']);\n});\n\nit('does not duplicate existing multi-choice values during merge', function (): void {\n    $cf = createTestCustomField($this, 'dedup_emails', 'email');\n\n    $person = People::factory()->create([\n        'name' => 'Dedup Merge',\n        'team_id' => $this->team->id,\n    ]);\n\n    CustomFieldValue::create([\n        'custom_field_id' => $cf->id,\n        'entity_type' => 'people',\n        'entity_id' => $person->id,\n        'tenant_id' => $this->team->id,\n        'json_value' => ['shared@work.com'],\n    ]);\n\n    createImportReadyStore($this, ['ID', 'Name', 'Email'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'Dedup Merge', 'Email' => 'shared@work.com, new@work.com'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => (string) $person->id,\n        ]),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: \"custom_fields_{$cf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $import = $this->import->fresh();\n    expect($import->updated_rows)->toBe(1)\n        ->and($import->failed_rows)->toBe(0);\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $cf->id);\n    expect($cfv)->not->toBeNull()\n        ->and(collect($cfv->json_value)->all())->toBe(['shared@work.com', 'new@work.com']);\n});\n\nit('populates matching custom field when auto-creating person via email MatchOrCreate', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'contact', 'action' => 'create', 'id' => null, 'name' => 'john@example.com', 'behavior' => MatchBehavior::MatchOrCreate->value, 'matchField' => 'custom_fields_emails'],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Contact'], [\n        makeRow(2, ['Name' => 'Test Opportunity', 'Contact' => 'john@example.com'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Contact', matcherKey: 'custom_fields_emails', entityLinkKey: 'contact'),\n    ], ImportEntityType::Opportunity);\n\n    runImportJob($this);\n\n    $person = People::where('team_id', $this->team->id)->where('name', 'john@example.com')->first();\n    expect($person)->not->toBeNull();\n\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    expect($emailField)->not->toBeNull();\n\n    $cfv = getTestCustomFieldValue($this, (string) $person->id, (string) $emailField->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->json_value)->toBeInstanceOf(Collection::class)\n        ->and($cfv->json_value->all())->toBe(['john@example.com']);\n});\n\nit('populates matching custom field when auto-creating company via domain MatchOrCreate', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => 'example.com', 'behavior' => MatchBehavior::MatchOrCreate->value, 'matchField' => 'custom_fields_domains'],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John Doe', 'Company' => 'example.com'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'custom_fields_domains', entityLinkKey: 'company'),\n    ]);\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'example.com')->first();\n    expect($company)->not->toBeNull();\n\n    $domainField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'company')\n        ->where('code', 'domains')\n        ->first();\n\n    expect($domainField)->not->toBeNull();\n\n    $cfv = getTestCustomFieldValue($this, (string) $company->id, (string) $domainField->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->json_value)->toBeInstanceOf(Collection::class)\n        ->and($cfv->json_value->all())->toBe(['example.com']);\n});\n\nit('does not populate custom field when auto-creating via name matcher', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'company', 'action' => 'create', 'id' => null, 'name' => 'New Corp', 'behavior' => MatchBehavior::Create->value, 'matchField' => 'name'],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John Doe', 'Company' => 'New Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    $cfCountBefore = DB::table(config('custom-fields.database.table_names.custom_field_values'))->count();\n\n    runImportJob($this);\n\n    $company = Company::where('team_id', $this->team->id)->where('name', 'New Corp')->first();\n    expect($company)->not->toBeNull();\n\n    $cfCountAfter = DB::table(config('custom-fields.database.table_names.custom_field_values'))->count();\n    expect($cfCountAfter)->toBe($cfCountBefore);\n});\n\nit('deduplicates auto-created records while still populating matching custom field', function (): void {\n    $relationships = json_encode([\n        ['relationship' => 'contact', 'action' => 'create', 'id' => null, 'name' => 'jane@example.com', 'behavior' => MatchBehavior::MatchOrCreate->value, 'matchField' => 'custom_fields_emails'],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Contact'], [\n        makeRow(2, ['Name' => 'Opp One', 'Contact' => 'jane@example.com'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n        makeRow(3, ['Name' => 'Opp Two', 'Contact' => 'jane@example.com'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Contact', matcherKey: 'custom_fields_emails', entityLinkKey: 'contact'),\n    ], ImportEntityType::Opportunity);\n\n    runImportJob($this);\n\n    $people = People::where('team_id', $this->team->id)->where('name', 'jane@example.com')->get();\n    expect($people)->toHaveCount(1);\n\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    $cfv = getTestCustomFieldValue($this, (string) $people->first()->id, (string) $emailField->id);\n    expect($cfv)->not->toBeNull()\n        ->and($cfv->json_value->all())->toBe(['jane@example.com']);\n});\n\nit('does not auto-create record for custom field entity link', function (): void {\n    $recordCf = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('type', 'record')\n        ->first();\n\n    if ($recordCf === null) {\n        $this->markTestSkipped('No record-type custom field configured for people');\n    }\n\n    $companyCountBefore = Company::where('team_id', $this->team->id)->count();\n\n    $relationships = json_encode([\n        ['relationship' => \"cf_{$recordCf->code}\", 'action' => 'create', 'id' => null, 'name' => 'Nonexistent Corp', 'behavior' => MatchBehavior::MatchOrCreate->value],\n    ]);\n\n    createImportReadyStore($this, ['Name', 'Related Company'], [\n        makeRow(2, ['Name' => 'Test Person', 'Related Company' => 'Nonexistent Corp'], [\n            'match_action' => RowMatchAction::Create->value,\n            'relationships' => $relationships,\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Related Company', matcherKey: 'name', entityLinkKey: \"cf_{$recordCf->code}\"),\n    ]);\n\n    runImportJob($this);\n\n    $companyCountAfter = Company::where('team_id', $this->team->id)->count();\n    expect($companyCountAfter)->toBe($companyCountBefore);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Jobs/ResolveMatchesJobTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\ModelNotFoundException;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\RelationshipMatch;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Relaticle\\ImportWizard\\Jobs\\ResolveMatchesJob;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\MatchResolver;\n\nmutates(ResolveMatchesJob::class, MatchResolver::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n});\n\nafterEach(function (): void {\n    if (isset($this->import)) {\n        ImportStore::load($this->import->id)?->destroy();\n        $this->import->delete();\n    }\n});\n\nfunction createStoreForMatchResolution(\n    object $context,\n    array $headers,\n    array $rows,\n    array $mappings,\n): array {\n    $import = Import::create([\n        'team_id' => (string) $context->team->id,\n        'user_id' => (string) $context->user->id,\n        'entity_type' => ImportEntityType::People,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Reviewing,\n        'total_rows' => count($rows),\n        'headers' => $headers,\n        'column_mappings' => collect($mappings)->map(fn (ColumnData $m) => $m->toArray())->all(),\n    ]);\n\n    $store = ImportStore::create($import->id);\n    $store->query()->insert($rows);\n\n    $context->import = $import;\n    $context->store = $store;\n\n    return [$import, $store];\n}\n\nfunction makeMatchRow(int $rowNumber, array $rawData, array $overrides = []): array\n{\n    return [\n        'row_number' => $rowNumber,\n        'raw_data' => json_encode($rawData),\n        'validation' => null,\n        'corrections' => null,\n        'skipped' => null,\n        'match_action' => null,\n        'matched_id' => null,\n        'relationships' => null,\n        ...$overrides,\n    ];\n}\n\nit('resolves all rows as Create when no match field mapped', function (): void {\n    createStoreForMatchResolution($this, ['Name'], [\n        makeMatchRow(2, ['Name' => 'John']),\n        makeMatchRow(3, ['Name' => 'Jane']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $rows = $this->store->query()->get();\n    expect($rows)->toHaveCount(2)\n        ->and($rows->every(fn ($row) => $row->match_action === RowMatchAction::Create))->toBeTrue();\n});\n\nit('resolves Update when email matches existing record', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing Person',\n        'team_id' => $this->team->id,\n    ]);\n\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    if ($emailField) {\n        CustomFieldValue::create([\n            'custom_field_id' => $emailField->id,\n            'entity_type' => 'people',\n            'entity_id' => $person->id,\n            'tenant_id' => $this->team->id,\n            'json_value' => ['existing@test.com'],\n        ]);\n    }\n\n    createStoreForMatchResolution($this, ['Name', 'Email'], [\n        makeMatchRow(2, ['Name' => 'John', 'Email' => 'existing@test.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    if ($emailField) {\n        expect($row->match_action)->toBe(RowMatchAction::Update)\n            ->and($row->matched_id)->toBe((string) $person->id);\n    } else {\n        expect($row->match_action)->toBe(RowMatchAction::Create);\n    }\n});\n\nit('resolves Skip when id does not match existing record', function (): void {\n    createStoreForMatchResolution($this, ['ID', 'Name'], [\n        makeMatchRow(2, ['ID' => '99999', 'Name' => 'Ghost']),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Skip);\n});\n\nit('does not clear relationships column', function (): void {\n    $companyMatch = RelationshipMatch::create('company', 'Acme Corp');\n\n    createStoreForMatchResolution($this, ['Name'], [\n        makeMatchRow(2, ['Name' => 'John'], [\n            'relationships' => json_encode([$companyMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->relationship)->toBe('company');\n});\n\nit('resets previous match resolutions when re-resolving', function (): void {\n    createStoreForMatchResolution($this, ['Name'], [\n        makeMatchRow(2, ['Name' => 'John'], [\n            'match_action' => RowMatchAction::Update->value,\n            'matched_id' => '999',\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Create)\n        ->and($row->matched_id)->toBeNull();\n});\n\nit('marks unmatched rows as Create when mixed matched and empty values', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing',\n        'team_id' => $this->team->id,\n    ]);\n\n    createStoreForMatchResolution($this, ['ID', 'Name'], [\n        makeMatchRow(2, ['ID' => (string) $person->id, 'Name' => 'Updated'], []),\n        makeMatchRow(3, ['ID' => '', 'Name' => 'New Person'], []),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $matched = $this->store->query()->where('row_number', 2)->first();\n    $unmatched = $this->store->query()->where('row_number', 3)->first();\n\n    expect($matched->match_action)->toBe(RowMatchAction::Update)\n        ->and($matched->matched_id)->toBe((string) $person->id)\n        ->and($unmatched->match_action)->toBe(RowMatchAction::Skip);\n});\n\nit('resolves Update when CSV email column contains comma-separated values matching existing record', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing Person',\n        'team_id' => $this->team->id,\n    ]);\n\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    if (! $emailField) {\n        $this->markTestSkipped('No email custom field seeded for team');\n    }\n\n    CustomFieldValue::create([\n        'custom_field_id' => $emailField->id,\n        'entity_type' => 'people',\n        'entity_id' => $person->id,\n        'tenant_id' => $this->team->id,\n        'json_value' => ['existing@test.com', 'other@test.com'],\n    ]);\n\n    createStoreForMatchResolution($this, ['Name', 'Email'], [\n        makeMatchRow(2, ['Name' => 'John', 'Email' => 'existing@test.com, new@test.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    (new ResolveMatchesJob($this->import->id, (string) $this->team->id))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    expect($row->match_action)->toBe(RowMatchAction::Update)\n        ->and($row->matched_id)->toBe((string) $person->id);\n});\n\nit('handles missing import gracefully', function (): void {\n    (new ResolveMatchesJob('nonexistent-id', (string) $this->team->id))->handle();\n})->throws(ModelNotFoundException::class);\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Jobs/ValidateColumnJobTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Database\\Eloquent\\ModelNotFoundException;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Relaticle\\CustomFields\\Data\\CustomFieldSettingsData;\nuse Relaticle\\CustomFields\\Enums\\FieldDataType;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Jobs\\ValidateColumnJob;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkValidator;\nuse Relaticle\\ImportWizard\\Support\\Validation\\ColumnValidator;\n\nmutates(ValidateColumnJob::class, ColumnValidator::class, EntityLinkValidator::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n});\n\nafterEach(function (): void {\n    if (isset($this->import)) {\n        ImportStore::load($this->import->id)?->destroy();\n        $this->import->delete();\n    }\n});\n\nfunction createValidationStore(\n    object $context,\n    array $headers,\n    array $rows,\n    array $mappings,\n    ImportEntityType $entityType = ImportEntityType::People,\n): array {\n    $import = Import::create([\n        'team_id' => (string) $context->team->id,\n        'user_id' => (string) $context->user->id,\n        'entity_type' => $entityType,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Reviewing,\n        'total_rows' => count($rows),\n        'headers' => $headers,\n        'column_mappings' => collect($mappings)->map(fn (ColumnData $m) => $m->toArray())->all(),\n    ]);\n\n    $store = ImportStore::create($import->id);\n    $store->query()->insert($rows);\n\n    $context->import = $import;\n    $context->store = $store;\n\n    return [$import, $store];\n}\n\nfunction makeValidationRow(int $rowNumber, array $rawData, array $overrides = []): array\n{\n    return array_merge([\n        'row_number' => $rowNumber,\n        'raw_data' => json_encode($rawData),\n        'validation' => null,\n        'corrections' => null,\n        'skipped' => null,\n        'match_action' => null,\n        'matched_id' => null,\n        'relationships' => null,\n    ], $overrides);\n}\n\nit('writes RelationshipMatch create for Create entity links', function (): void {\n    $column = ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company' => 'Acme Corp']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->relationship)->toBe('company')\n        ->and($row->relationships[0]->isCreate())->toBeTrue()\n        ->and($row->relationships[0]->name)->toBe('Acme Corp');\n});\n\nit('writes RelationshipMatch existing when resolved to existing record', function (): void {\n    $company = Company::factory()->create([\n        'name' => 'Acme Corp',\n        'team_id' => $this->team->id,\n    ]);\n\n    $column = ColumnData::toEntityLink(source: 'Company ID', matcherKey: 'id', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company ID'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company ID' => (string) $company->id]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->relationship)->toBe('company')\n        ->and($row->relationships[0]->isExisting())->toBeTrue()\n        ->and($row->relationships[0]->id)->toBe((string) $company->id);\n});\n\nit('skips relationship for MatchOnly when no match found', function (): void {\n    $column = ColumnData::toEntityLink(source: 'Company ID', matcherKey: 'id', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company ID'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company ID' => '99999']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->toBeNull();\n});\n\nit('writes validation errors for unresolvable account owner entity link', function (): void {\n    $column = ColumnData::toEntityLink(source: 'Owner Email', matcherKey: 'email', entityLinkKey: 'account_owner');\n\n    createValidationStore($this, ['Name', 'Owner Email'], [\n        makeValidationRow(1, ['Name' => 'Acme', 'Owner Email' => 'nonexistent@example.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ], ImportEntityType::Company);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 1)->first();\n\n    expect($row->hasValidationError('Owner Email'))->toBeTrue();\n});\n\nit('writes validation errors for entity link column with invalid id', function (): void {\n    $column = ColumnData::toEntityLink(source: 'Company ID', matcherKey: 'id', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company ID'], [\n        makeValidationRow(1, ['Name' => 'John', 'Company ID' => '99999']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 1)->first();\n\n    expect($row->hasValidationError('Company ID'))->toBeTrue();\n});\n\nit('clears validation for corrected date fields', function (): void {\n    $column = ColumnData::toField(source: 'Due Date', target: 'due_date');\n    $column->importField = new ImportField(\n        key: 'due_date',\n        label: 'Due Date',\n        rules: ['nullable', 'date'],\n        type: FieldDataType::DATE,\n    );\n\n    createValidationStore($this, ['Name', 'Due Date'], [\n        makeValidationRow(1, ['Name' => 'Task 1', 'Due Date' => 'not-a-date'], [\n            'validation' => json_encode(['Due Date' => 'Invalid date format']),\n            'corrections' => json_encode(['Due Date' => '2024-01-15']),\n        ]),\n        makeValidationRow(2, ['Name' => 'Task 2', 'Due Date' => 'also-invalid'], [\n            'validation' => json_encode(['Due Date' => 'Invalid date format']),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ], ImportEntityType::Task);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $correctedRow = $this->store->query()->where('row_number', 1)->first();\n    $uncorrectedRow = $this->store->query()->where('row_number', 2)->first();\n\n    expect($correctedRow->hasValidationError('Due Date'))->toBeFalse();\n    expect($uncorrectedRow->hasValidationError('Due Date'))->toBeTrue();\n});\n\nit('skips validation when import does not exist', function (): void {\n    $column = ColumnData::toField(source: 'Name', target: 'name');\n\n    $job = new ValidateColumnJob('nonexistent-import-id', $column);\n\n    try {\n        $job->handle();\n        expect(false)->toBeTrue('Expected exception was not thrown');\n    } catch (ModelNotFoundException $e) {\n        expect($e->getModel())->toBe(Import::class);\n    }\n});\n\nit('skips validation when all values are empty', function (): void {\n    $column = ColumnData::toField(source: 'Owner Email', target: 'account_owner_email');\n\n    createValidationStore($this, ['Name', 'Owner Email'], [\n        makeValidationRow(1, ['Name' => 'Acme', 'Owner Email' => '']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ], ImportEntityType::Company);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 1)->first();\n    expect($row->validation)->toBeNull();\n});\n\nit('appends to existing relationships array without overwriting', function (): void {\n    $column = ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company');\n\n    $existingRelationship = [\n        'relationship' => 'contact',\n        'action' => 'create',\n        'name' => 'Jane Doe',\n    ];\n\n    createValidationStore($this, ['Name', 'Company'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company' => 'Acme Corp'], [\n            'relationships' => json_encode([$existingRelationship]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->toHaveCount(2)\n        ->and($row->relationships[0]->relationship)->toBe('contact')\n        ->and($row->relationships[1]->relationship)->toBe('company');\n});\n\nit('validates color picker hex format', function (): void {\n    $column = ColumnData::toField(source: 'Color', target: 'custom_fields_brand_color');\n    $column->importField = new ImportField(\n        key: 'custom_fields_brand_color',\n        label: 'Brand Color',\n        rules: ['regex:/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/'],\n        isCustomField: true,\n        type: FieldDataType::STRING,\n    );\n\n    createValidationStore($this, ['Name', 'Color'], [\n        makeValidationRow(1, ['Name' => 'John', 'Color' => 'not-a-color']),\n        makeValidationRow(2, ['Name' => 'Jane', 'Color' => '#ff5733']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $invalidRow = $this->store->query()->where('row_number', 1)->first();\n    $validRow = $this->store->query()->where('row_number', 2)->first();\n\n    expect($invalidRow->hasValidationError('Color'))->toBeTrue()\n        ->and($validRow->hasValidationError('Color'))->toBeFalse();\n});\n\n// --- Entity Link Format Validation Tests ---\n\nfunction ensureCustomFieldExists(object $context, string $code, string $type, string $entityType = 'people'): CustomField\n{\n    $existing = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $context->team->id)\n        ->where('entity_type', $entityType)\n        ->where('code', $code)\n        ->first();\n\n    if ($existing !== null) {\n        return $existing;\n    }\n\n    return CustomField::forceCreate([\n        'tenant_id' => $context->team->id,\n        'code' => $code,\n        'name' => ucfirst(str_replace('_', ' ', $code)),\n        'type' => $type,\n        'entity_type' => $entityType,\n        'sort_order' => 1,\n        'active' => true,\n        'system_defined' => false,\n        'validation_rules' => [],\n        'settings' => new CustomFieldSettingsData,\n    ]);\n}\n\nit('rejects invalid domain format in entity link and prevents relationship creation', function (): void {\n    ensureCustomFieldExists($this, 'domains', 'link', 'company');\n\n    $column = ColumnData::toEntityLink(source: 'Company', matcherKey: 'custom_fields_domains', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company' => 'GlobalHealth Inc']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    expect($row->hasValidationError('Company'))->toBeTrue()\n        ->and($row->relationships)->toBeNull();\n});\n\nit('accepts valid domain format in entity link and creates relationship', function (): void {\n    ensureCustomFieldExists($this, 'domains', 'link', 'company');\n\n    $column = ColumnData::toEntityLink(source: 'Company', matcherKey: 'custom_fields_domains', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company' => 'globalhealth.io']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->isCreate())->toBeTrue()\n        ->and($row->relationships[0]->name)->toBe('globalhealth.io');\n});\n\nit('rejects invalid email format in entity link', function (): void {\n    ensureCustomFieldExists($this, 'emails', 'email');\n\n    $column = ColumnData::toEntityLink(source: 'Contact', matcherKey: 'custom_fields_emails', entityLinkKey: 'contact');\n\n    createValidationStore($this, ['Name', 'Contact'], [\n        makeValidationRow(2, ['Name' => 'Deal', 'Contact' => 'not-an-email']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ], ImportEntityType::Opportunity);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    expect($row->hasValidationError('Contact'))->toBeTrue()\n        ->and($row->relationships)->toBeNull();\n});\n\nit('accepts valid email format in entity link and creates relationship', function (): void {\n    ensureCustomFieldExists($this, 'emails', 'email');\n\n    $column = ColumnData::toEntityLink(source: 'Contact', matcherKey: 'custom_fields_emails', entityLinkKey: 'contact');\n\n    createValidationStore($this, ['Name', 'Contact'], [\n        makeValidationRow(2, ['Name' => 'Deal', 'Contact' => 'john@example.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ], ImportEntityType::Opportunity);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->isCreate())->toBeTrue()\n        ->and($row->relationships[0]->name)->toBe('john@example.com');\n});\n\nit('skips format validation for name matcher on entity link', function (): void {\n    $column = ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company');\n\n    createValidationStore($this, ['Name', 'Company'], [\n        makeValidationRow(2, ['Name' => 'John', 'Company' => 'Acme Corp']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        $column,\n    ]);\n\n    (new ValidateColumnJob($this->import->id, $column))->handle();\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    expect($row->hasValidationError('Company'))->toBeFalse()\n        ->and($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Livewire/ImportWizardTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Bus;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Features\\SupportTesting\\Testable;\nuse Livewire\\Livewire;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Livewire\\ImportWizard;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nmutates(ImportWizard::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n    Bus::fake();\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n\n    $this->createdStoreIds = [];\n});\n\nafterEach(function (): void {\n    foreach ($this->createdStoreIds as $storeId) {\n        ImportStore::load($storeId)?->destroy();\n        Import::find($storeId)?->delete();\n    }\n});\n\nfunction mountImportWizard(object $context, ?string $returnUrl = null): Testable\n{\n    return Livewire::test(ImportWizard::class, [\n        'entityType' => ImportEntityType::People,\n        'returnUrl' => $returnUrl,\n    ]);\n}\n\nfunction createFullTestStore(object $context): ImportStore\n{\n    $import = Import::create([\n        'team_id' => (string) $context->team->id,\n        'user_id' => (string) $context->user->id,\n        'entity_type' => ImportEntityType::People,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Reviewing,\n        'total_rows' => 1,\n        'headers' => ['Name', 'Email'],\n    ]);\n\n    $import->setColumnMappings([\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $store = ImportStore::create($import->id);\n    $store->query()->insert([\n        'row_number' => 2,\n        'raw_data' => json_encode(['Name' => 'John', 'Email' => 'john@test.com']),\n    ]);\n\n    $context->createdStoreIds[] = $store->id();\n\n    return $store;\n}\n\nfunction markStoreAsDestroyed(object $context, ImportStore $store): void\n{\n    $context->createdStoreIds = array_filter(\n        $context->createdStoreIds,\n        fn (string $id): bool => $id !== $store->id(),\n    );\n}\n\nit('mounts at step 1 (Upload)', function (): void {\n    $component = mountImportWizard($this);\n\n    $component->assertOk();\n    expect($component->get('currentStep'))->toBe(1);\n});\n\nit('onUploadCompleted advances to step 2 with store data', function (): void {\n    $store = createFullTestStore($this);\n\n    $component = mountImportWizard($this);\n    $component->call('onUploadCompleted', $store->id(), 5, 3);\n\n    expect($component->get('currentStep'))->toBe(2)\n        ->and($component->get('storeId'))->toBe($store->id())\n        ->and($component->get('rowCount'))->toBe(5)\n        ->and($component->get('columnCount'))->toBe(3);\n});\n\nit('goBack caps at step 1', function (): void {\n    $component = mountImportWizard($this);\n\n    $component->call('goBack');\n\n    expect($component->get('currentStep'))->toBe(1);\n});\n\nit('goToStep ignores forward navigation', function (): void {\n    $store = createFullTestStore($this);\n\n    $component = mountImportWizard($this);\n    $component->set('storeId', $store->id());\n    $component->set('currentStep', 2);\n\n    $component->call('goToStep', 3);\n\n    expect($component->get('currentStep'))->toBe(2);\n});\n\nit('goToStep navigates to completed step', function (): void {\n    $store = createFullTestStore($this);\n\n    $component = mountImportWizard($this);\n    $component->set('storeId', $store->id());\n    $component->set('currentStep', 3);\n\n    $component->call('goToStep', 2);\n\n    expect($component->get('currentStep'))->toBe(2);\n});\n\nit('cancelImport destroys store and redirects', function (): void {\n    $store = createFullTestStore($this);\n    $returnUrl = '/dashboard';\n\n    $component = mountImportWizard($this, $returnUrl);\n    $component->set('storeId', $store->id());\n    $component->call('cancelImport');\n\n    $component->assertRedirect($returnUrl);\n\n    expect(ImportStore::load($store->id()))->toBeNull();\n\n    markStoreAsDestroyed($this, $store);\n});\n\nit('startOver resets to step 1', function (): void {\n    $store = createFullTestStore($this);\n\n    $component = mountImportWizard($this);\n    $component->set('storeId', $store->id());\n    $component->set('currentStep', 2);\n    $component->set('rowCount', 10);\n    $component->set('columnCount', 5);\n\n    $component->call('startOver');\n\n    expect($component->get('currentStep'))->toBe(1)\n        ->and($component->get('storeId'))->toBeNull()\n        ->and($component->get('rowCount'))->toBe(0)\n        ->and($component->get('columnCount'))->toBe(0);\n\n    expect(ImportStore::load($store->id()))->toBeNull();\n\n    markStoreAsDestroyed($this, $store);\n});\n\nit('getStepTitle returns correct title for Upload step', function (): void {\n    $component = mountImportWizard($this);\n\n    $component->call('getStepTitle')->assertReturned('Upload CSV');\n});\n\nit('getStepTitle returns correct title for Map step', function (): void {\n    $store = createFullTestStore($this);\n\n    $component = mountImportWizard($this);\n    $component->call('onUploadCompleted', $store->id(), 1, 2);\n\n    $component->call('getStepTitle')->assertReturned('Map Columns');\n});\n\nit('getStepDescription returns correct description per step', function (): void {\n    $component = mountImportWizard($this);\n\n    $component->call('getStepDescription')\n        ->assertReturned('Upload your CSV file to import People');\n});\n\nit('restores to mapping step when store status is Mapping', function (): void {\n    $store = createFullTestStore($this);\n    $import = Import::find($store->id());\n    $import->update(['status' => ImportStatus::Mapping]);\n\n    $component = Livewire::withQueryParams(['import' => $store->id()])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('currentStep'))->toBe(2)\n        ->and($component->get('storeId'))->toBe($store->id())\n        ->and($component->get('rowCount'))->toBe(1)\n        ->and($component->get('columnCount'))->toBe(2);\n});\n\nit('restores to review step when store status is Reviewing', function (): void {\n    $store = createFullTestStore($this);\n    $import = Import::find($store->id());\n    $import->update(['status' => ImportStatus::Reviewing]);\n\n    $component = Livewire::withQueryParams(['import' => $store->id()])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('currentStep'))->toBe(3)\n        ->and($component->get('storeId'))->toBe($store->id());\n});\n\nit('restores to preview step with locked navigation when store status is Completed', function (): void {\n    $store = createFullTestStore($this);\n    $import = Import::find($store->id());\n    $import->update(['status' => ImportStatus::Completed]);\n\n    $component = Livewire::withQueryParams(['import' => $store->id()])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('currentStep'))->toBe(4)\n        ->and($component->get('storeId'))->toBe($store->id())\n        ->and($component->get('importStarted'))->toBeTrue();\n});\n\nit('blocks navigation when import has started', function (): void {\n    $store = createFullTestStore($this);\n    $import = Import::find($store->id());\n    $import->update(['status' => ImportStatus::Importing]);\n\n    $component = Livewire::withQueryParams(['import' => $store->id()])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('importStarted'))->toBeTrue();\n\n    $component->call('goToStep', 2);\n    expect($component->get('currentStep'))->toBe(4);\n\n    $component->call('goBack');\n    expect($component->get('currentStep'))->toBe(4);\n});\n\nit('allows backward navigation during validation', function (): void {\n    $store = createFullTestStore($this);\n\n    $component = Livewire::withQueryParams(['import' => $store->id()])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('currentStep'))->toBe(3);\n\n    $component->call('goBack');\n    expect($component->get('currentStep'))->toBe(2);\n});\n\nit('resets storeId when store not found', function (): void {\n    $component = Livewire::withQueryParams(['import' => 'nonexistent-id'])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('currentStep'))->toBe(1)\n        ->and($component->get('storeId'))->toBeNull();\n});\n\nit('rejects path traversal storeId values', function (string $maliciousId): void {\n    expect(ImportStore::load($maliciousId))->toBeNull();\n})->with([\n    '../../etc/passwd',\n    '../../../secret',\n    'valid-but-has-slashes/nested',\n    '',\n    'short',\n    str_repeat('A', 27),\n]);\n\nit('resets storeId when store belongs to different team', function (): void {\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $import = Import::create([\n        'team_id' => (string) $otherTeam->id,\n        'user_id' => (string) $otherUser->id,\n        'entity_type' => ImportEntityType::People,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Mapping,\n        'total_rows' => 1,\n        'headers' => ['Name', 'Email'],\n    ]);\n\n    $store = ImportStore::create($import->id);\n\n    $component = Livewire::withQueryParams(['import' => $store->id()])\n        ->test(ImportWizard::class, [\n            'entityType' => ImportEntityType::People,\n        ]);\n\n    expect($component->get('currentStep'))->toBe(1)\n        ->and($component->get('storeId'))->toBeNull();\n\n    $store->destroy();\n    $import->delete();\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Livewire/MappingStepTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Features\\SupportTesting\\Testable;\nuse Livewire\\Livewire;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Data\\ImportFieldCollection;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\MappingStep;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nmutates(MappingStep::class, ColumnData::class, ImportField::class, ImportFieldCollection::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n\n    $this->import = Import::create([\n        'team_id' => (string) $this->team->id,\n        'user_id' => (string) $this->user->id,\n        'entity_type' => ImportEntityType::People,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Mapping,\n        'total_rows' => 0,\n        'headers' => [],\n    ]);\n\n    $this->store = ImportStore::create($this->import->id);\n});\n\nafterEach(function (): void {\n    $this->store->destroy();\n    $this->import->delete();\n});\n\nfunction createStoreWithHeaders(object $context, array $headers, array $rows = []): void\n{\n    $context->import->update(['headers' => $headers]);\n\n    if ($rows === []) {\n        $rowData = array_combine($headers, array_fill(0, count($headers), 'sample'));\n        $rows = [$rowData];\n    }\n\n    foreach ($rows as $index => $row) {\n        $context->store->query()->insert([\n            'row_number' => $index + 2,\n            'raw_data' => json_encode($row),\n            'validation' => null,\n            'corrections' => null,\n            'skipped' => null,\n            'match_action' => null,\n            'matched_id' => null,\n            'relationships' => null,\n        ]);\n    }\n\n    $context->import->update(['total_rows' => count($rows)]);\n}\n\nfunction mountMappingStep(object $context): Testable\n{\n    return Livewire::test(MappingStep::class, [\n        'storeId' => $context->store->id(),\n        'entityType' => ImportEntityType::People,\n    ]);\n}\n\nit('renders with correct headers from store', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Phone', 'Notes']);\n\n    $component = mountMappingStep($this);\n\n    $component->assertOk();\n});\n\nit('auto-maps Name header to name field on mount', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Phone']);\n\n    $component = mountMappingStep($this);\n\n    $columns = $component->get('columns');\n    expect($columns)->toHaveKey('Name')\n        ->and($columns['Name']['target'])->toBe('name')\n        ->and($columns['Name']['entityLink'])->toBeNull();\n});\n\nit('auto-maps Company header to company entity link', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Company'], [\n        ['Name' => 'John', 'Company' => 'Acme Inc'],\n    ]);\n\n    $component = mountMappingStep($this);\n\n    $columns = $component->get('columns');\n    expect($columns)->toHaveKey('Company')\n        ->and($columns['Company']['entityLink'])->toBe('company');\n});\n\nit('mapToField updates column mapping', function (): void {\n    createStoreWithHeaders($this, ['Full Name', 'Notes']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToField', 'Full Name', 'name');\n\n    $columns = $component->get('columns');\n    expect($columns)->toHaveKey('Full Name')\n        ->and($columns['Full Name']['target'])->toBe('name');\n});\n\nit('mapToField with empty target removes mapping', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Notes']);\n\n    $component = mountMappingStep($this);\n\n    expect($component->get('columns'))->toHaveKey('Name');\n\n    $component->call('mapToField', 'Name', '');\n\n    expect($component->get('columns'))->not->toHaveKey('Name');\n});\n\nit('mapToField rejects duplicate target', function (): void {\n    createStoreWithHeaders($this, ['Col A', 'Col B']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToField', 'Col A', 'name');\n    $component->call('mapToField', 'Col B', 'name');\n\n    $columns = $component->get('columns');\n    expect($columns['Col A']['target'])->toBe('name')\n        ->and($columns)->not->toHaveKey('Col B');\n});\n\nit('mapToEntityLink creates entity link mapping', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Org']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToEntityLink', 'Org', 'name', 'company');\n\n    $columns = $component->get('columns');\n    expect($columns)->toHaveKey('Org')\n        ->and($columns['Org']['entityLink'])->toBe('company')\n        ->and($columns['Org']['target'])->toBe('name');\n});\n\nit('unmapColumn removes mapping', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Notes']);\n\n    $component = mountMappingStep($this);\n\n    expect($component->get('columns'))->toHaveKey('Name');\n\n    $component->call('unmapColumn', 'Name');\n\n    expect($component->get('columns'))->not->toHaveKey('Name');\n});\n\nit('canProceed returns false when required field is unmapped', function (): void {\n    createStoreWithHeaders($this, ['Notes', 'Phone']);\n\n    $component = mountMappingStep($this);\n\n    $component->call('unmapColumn', 'Notes');\n    $component->call('unmapColumn', 'Phone');\n\n    $component->call('canProceed')\n        ->assertReturned(false);\n});\n\nit('canProceed returns true when all required fields are mapped', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Notes']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToField', 'Name', 'name');\n\n    $component->call('canProceed')\n        ->assertReturned(true);\n});\n\nit('continue action saves mappings to store', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Notes']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToField', 'Name', 'name');\n    $component->callAction('continue');\n\n    $freshImport = $this->import->fresh();\n    $savedMappings = $freshImport->columnMappings();\n    expect($savedMappings)->toHaveCount(1)\n        ->and($savedMappings->first()->source)->toBe('Name')\n        ->and($savedMappings->first()->target)->toBe('name');\n});\n\nit('continue action sets status to Reviewing', function (): void {\n    createStoreWithHeaders($this, ['Name']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToField', 'Name', 'name');\n    $component->callAction('continue');\n\n    $freshImport = $this->import->fresh();\n    expect($freshImport->status)->toBe(ImportStatus::Reviewing);\n});\n\nit('continue action dispatches completed event', function (): void {\n    createStoreWithHeaders($this, ['Name']);\n\n    $component = mountMappingStep($this);\n    $component->call('mapToField', 'Name', 'name');\n    $component->callAction('continue');\n\n    $component->assertDispatched('completed');\n});\n\nit('continue action is disabled when required fields are unmapped', function (): void {\n    createStoreWithHeaders($this, ['Notes', 'Phone']);\n\n    $component = mountMappingStep($this);\n    $component->call('unmapColumn', 'Notes');\n    $component->call('unmapColumn', 'Phone');\n\n    $component->assertActionDisabled('continue');\n});\n\nit('previewValues returns sample values from SQLite', function (): void {\n    createStoreWithHeaders($this, ['Name', 'Email'], [\n        ['Name' => 'John', 'Email' => 'john@test.com'],\n        ['Name' => 'Jane', 'Email' => 'jane@test.com'],\n    ]);\n\n    $component = mountMappingStep($this);\n\n    $component->call('previewValues', 'Name')\n        ->assertReturned(['John', 'Jane']);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Livewire/PreviewStepTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\People;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Contracts\\Pagination\\LengthAwarePaginator;\nuse Illuminate\\Support\\Facades\\Bus;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Features\\SupportTesting\\Testable;\nuse Livewire\\Livewire;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\RelationshipMatch;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Enums\\RowMatchAction;\nuse Relaticle\\ImportWizard\\Jobs\\ExecuteImportJob;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\PreviewStep;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\nuse Relaticle\\ImportWizard\\Support\\MatchResolver;\n\nmutates(PreviewStep::class, MatchResolver::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n});\n\nafterEach(function (): void {\n    if (isset($this->store)) {\n        $this->store->destroy();\n    }\n    if (isset($this->import)) {\n        $this->import->delete();\n    }\n});\n\nfunction createPreviewReadyStore(\n    object $context,\n    array $headers,\n    array $rows,\n    array $mappings,\n    ImportEntityType $entityType = ImportEntityType::People,\n): ImportStore {\n    $import = Import::create([\n        'team_id' => (string) $context->team->id,\n        'user_id' => (string) $context->user->id,\n        'entity_type' => $entityType,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Reviewing,\n        'total_rows' => count($rows),\n        'headers' => $headers,\n        'column_mappings' => collect($mappings)->map(fn (ColumnData $m) => $m->toArray())->all(),\n    ]);\n\n    $store = ImportStore::create($import->id);\n    $store->query()->insert($rows);\n\n    (new MatchResolver($store, $import, $import->getImporter()))->resolve();\n\n    $context->import = $import;\n    $context->store = $store;\n\n    return $store;\n}\n\nfunction mountPreviewStep(object $context): Testable\n{\n    return Livewire::test(PreviewStep::class, [\n        'storeId' => $context->store->id(),\n        'entityType' => ImportEntityType::People,\n    ]);\n}\n\nif (! function_exists('makeRow')) {\n    /** @param array<string, mixed> $overrides */\n    function makeRow(int $rowNumber, array $rawData, array $overrides = []): array\n    {\n        return array_merge([\n            'row_number' => $rowNumber,\n            'raw_data' => json_encode($rawData),\n            'validation' => null,\n            'corrections' => null,\n            'skipped' => null,\n            'match_action' => null,\n            'matched_id' => null,\n            'relationships' => null,\n        ], $overrides);\n    }\n}\n\nit('mounts and renders with summary data', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n        makeRow(3, ['Name' => 'Jane']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $component->assertOk()\n        ->assertSee('People')\n        ->assertSee('Start Import');\n});\n\nit('resolves all rows as Create when only name is mapped', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n        makeRow(3, ['Name' => 'Jane']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $rows = $this->store->query()->get();\n    expect($rows)->toHaveCount(2)\n        ->and($rows->every(fn ($row) => $row->match_action === RowMatchAction::Create))->toBeTrue();\n});\n\nit('resolves rows as Update when email matches existing record', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing Person',\n        'team_id' => $this->team->id,\n    ]);\n\n    $emailField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->id)\n        ->where('entity_type', 'people')\n        ->where('code', 'emails')\n        ->first();\n\n    if ($emailField) {\n        CustomFieldValue::create([\n            'custom_field_id' => $emailField->id,\n            'entity_type' => 'people',\n            'entity_id' => $person->id,\n            'tenant_id' => $this->team->id,\n            'json_value' => ['existing@test.com'],\n        ]);\n    }\n\n    createPreviewReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'existing@test.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n\n    if ($emailField) {\n        expect($row->match_action)->toBe(RowMatchAction::Update)\n            ->and($row->matched_id)->toBe((string) $person->id);\n    } else {\n        expect($row->match_action)->toBe(RowMatchAction::Create);\n    }\n});\n\nit('resolves rows as Create when email does not match existing record', function (): void {\n    createPreviewReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'nonexistent@test.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Create);\n});\n\nit('resolves rows as Skip when id does not match existing record', function (): void {\n    createPreviewReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => '99999', 'Name' => 'Ghost']),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Skip);\n});\n\nit('resolves rows as Update when id matches existing record', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing Person',\n        'team_id' => $this->team->id,\n    ]);\n\n    createPreviewReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'Updated Name']),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Update)\n        ->and($row->matched_id)->toBe((string) $person->id);\n});\n\nit('renders entity link relationships from pre-populated data', function (): void {\n    $companyMatch = RelationshipMatch::create('company', 'Acme Corp');\n\n    createPreviewReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'Acme Corp'], [\n            'relationships' => json_encode([$companyMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->relationship)->toBe('company')\n        ->and($row->relationships[0]->isCreate())->toBeTrue()\n        ->and($row->relationships[0]->name)->toBe('Acme Corp');\n});\n\nit('handles rows with no entity link relationships', function (): void {\n    createPreviewReadyStore($this, ['Name', 'Company ID'], [\n        makeRow(2, ['Name' => 'John', 'Company ID' => '99999']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company ID', matcherKey: 'id', entityLinkKey: 'company'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->toBeNull();\n});\n\nit('renders existing entity link relationships from pre-populated data', function (): void {\n    $company = Company::factory()->create([\n        'name' => 'Acme Corp',\n        'team_id' => $this->team->id,\n    ]);\n\n    $companyMatch = RelationshipMatch::existing('company', (string) $company->id);\n\n    createPreviewReadyStore($this, ['Name', 'Company ID'], [\n        makeRow(2, ['Name' => 'John', 'Company ID' => (string) $company->id], [\n            'relationships' => json_encode([$companyMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company ID', matcherKey: 'id', entityLinkKey: 'company'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->not->toBeNull()\n        ->and($row->relationships)->toHaveCount(1)\n        ->and($row->relationships[0]->relationship)->toBe('company')\n        ->and($row->relationships[0]->isExisting())->toBeTrue()\n        ->and($row->relationships[0]->id)->toBe((string) $company->id);\n});\n\nit('resolves rows with validation errors through normal match resolution', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John'], ['validation' => json_encode(['Name' => 'Name is required'])]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Create);\n});\n\nit('createCount returns correct count', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n        makeRow(3, ['Name' => 'Jane']),\n        makeRow(4, ['Name' => 'Bob']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('createCount'))->toBe(3);\n});\n\nit('updateCount returns correct count', function (): void {\n    $person = People::factory()->create([\n        'name' => 'Existing',\n        'team_id' => $this->team->id,\n    ]);\n\n    createPreviewReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => (string) $person->id, 'Name' => 'Updated']),\n        makeRow(3, ['ID' => '99999', 'Name' => 'Ghost']),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('updateCount'))->toBe(1);\n});\n\nit('skipCount returns correct count', function (): void {\n    createPreviewReadyStore($this, ['ID', 'Name'], [\n        makeRow(2, ['ID' => '99999', 'Name' => 'Ghost']),\n    ], [\n        ColumnData::toField(source: 'ID', target: 'id'),\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('skipCount'))->toBe(1);\n});\n\nit('errorCount returns count of rows with validation errors', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John'], ['validation' => json_encode(['Name' => 'Error'])]),\n        makeRow(3, ['Name' => 'Jane']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('errorCount'))->toBe(1);\n});\n\nit('startImport dispatches ExecuteImportJob and sets status to Importing', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->call('startImport');\n\n    Bus::assertBatched(function ($batch) {\n        return $batch->jobs->count() === 1\n            && $batch->jobs->first() instanceof ExecuteImportJob;\n    });\n\n    $freshImport = $this->import->fresh();\n    expect($freshImport->status)->toBe(ImportStatus::Importing);\n});\n\nit('startImport proceeds even when rows have validation errors', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John'], ['validation' => json_encode(['Name' => 'Error'])]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->call('startImport');\n\n    Bus::assertBatched(function ($batch) {\n        return $batch->jobs->count() === 1\n            && $batch->jobs->first() instanceof ExecuteImportJob;\n    });\n});\n\nit('startImport sets batchId for progress tracking', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->call('startImport');\n\n    expect($component->get('batchId'))->not->toBeNull();\n});\n\nit('isImporting returns true while batch is running', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->call('startImport');\n\n    expect($component->get('isImporting'))->toBeTrue();\n});\n\nit('does not skip rows with validation errors that are covered by per-value skips', function (): void {\n    createPreviewReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'bad-email'], [\n            'validation' => json_encode(['$.Email' => 'Invalid email']),\n            'skipped' => json_encode(['$.Email' => true]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->match_action)->toBe(RowMatchAction::Create);\n});\n\nit('previewRows returns paginated rows', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n        makeRow(3, ['Name' => 'Jane']),\n        makeRow(4, ['Name' => 'Bob']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $previewRows = $component->get('previewRows');\n    expect($previewRows)->toBeInstanceOf(LengthAwarePaginator::class)\n        ->and($previewRows->total())->toBe(3)\n        ->and($previewRows->items())->toHaveCount(3);\n});\n\nit('columns returns mapped column data', function (): void {\n    createPreviewReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'john@test.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $columns = $component->get('columns');\n    expect($columns)->toHaveCount(2)\n        ->and($columns->first()->source)->toBe('Name')\n        ->and($columns->last()->source)->toBe('Email');\n});\n\nit('relationshipTabs returns entity link tabs', function (): void {\n    $companyMatch = RelationshipMatch::create('company', 'Acme');\n\n    createPreviewReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'Acme'], [\n            'relationships' => json_encode([$companyMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $tabs = $component->get('relationshipTabs');\n    expect($tabs)->toHaveCount(1)\n        ->and($tabs[0]['key'])->toBe('company')\n        ->and($tabs[0]['label'])->toBe('Company');\n});\n\nit('relationshipTabs returns empty when no entity links mapped', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('relationshipTabs'))->toBeEmpty();\n});\n\nit('relationshipSummary aggregates by entity link key', function (): void {\n    $acmeMatch = RelationshipMatch::create('company', 'Acme Corp');\n    $newCorpMatch = RelationshipMatch::create('company', 'New Corp');\n\n    createPreviewReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'Acme Corp'], [\n            'relationships' => json_encode([$acmeMatch->toArray()]),\n        ]),\n        makeRow(3, ['Name' => 'Jane', 'Company' => 'Acme Corp'], [\n            'relationships' => json_encode([$acmeMatch->toArray()]),\n        ]),\n        makeRow(4, ['Name' => 'Bob', 'Company' => 'New Corp'], [\n            'relationships' => json_encode([$newCorpMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->call('setActiveTab', 'company');\n\n    $summary = $component->get('relationshipSummary');\n\n    $createEntries = collect($summary->items())->where('action', 'create');\n    $totalCreated = $createEntries->sum('count');\n\n    expect($totalCreated)->toBe(3);\n});\n\nit('relationshipSummary returns empty on all tab', function (): void {\n    $companyMatch = RelationshipMatch::create('company', 'Acme');\n\n    createPreviewReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'Acme'], [\n            'relationships' => json_encode([$companyMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('relationshipSummary'))->toBeEmpty();\n});\n\nit('setActiveTab changes tab and resets page', function (): void {\n    $companyMatch = RelationshipMatch::create('company', 'Acme');\n\n    createPreviewReadyStore($this, ['Name', 'Company'], [\n        makeRow(2, ['Name' => 'John', 'Company' => 'Acme'], [\n            'relationships' => json_encode([$companyMatch->toArray()]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toEntityLink(source: 'Company', matcherKey: 'name', entityLinkKey: 'company'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    expect($component->get('activeTab'))->toBe('all');\n\n    $component->call('setActiveTab', 'company');\n    expect($component->get('activeTab'))->toBe('company');\n\n    $component->call('setActiveTab', 'all');\n    expect($component->get('activeTab'))->toBe('all');\n});\n\nit('renders preview data table with row values', function (): void {\n    createPreviewReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'john@test.com']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $component->assertOk()\n        ->assertSee('People')\n        ->assertSee('John')\n        ->assertSee('john@test.com')\n        ->assertSee('will be created');\n});\n\nit('renders skipped and invalid cells as empty', function (): void {\n    createPreviewReadyStore($this, ['Name', 'Email'], [\n        makeRow(2, ['Name' => 'John', 'Email' => 'bad'], [\n            'validation' => json_encode(['Email' => 'Invalid']),\n            'skipped' => json_encode(['Name' => true]),\n        ]),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n        ColumnData::toField(source: 'Email', target: 'custom_fields_emails'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $component->assertOk()\n        ->assertDontSee('John')\n        ->assertDontSee('bad');\n});\n\nit('checkImportProgress detects completion', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $this->import->update([\n        'status' => ImportStatus::Completed,\n        'created_rows' => 1,\n        'updated_rows' => 0,\n        'skipped_rows' => 0,\n        'failed_rows' => 0,\n    ]);\n\n    $component->set('batchId', 'fake-batch-id');\n    $component->call('checkImportProgress');\n\n    expect($component->get('isCompleted'))->toBeTrue();\n});\n\nit('startImport is a no-op when batchId is already set', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->set('batchId', 'existing-batch-id');\n    $component->call('startImport');\n\n    Bus::assertNothingBatched();\n});\n\nit('startImport is a no-op when already completed', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $component = mountPreviewStep($this);\n    $component->set('isCompleted', true);\n    $component->call('startImport');\n\n    Bus::assertNothingBatched();\n});\n\nit('startImport is a no-op when status is already Importing', function (): void {\n    Bus::fake();\n\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $this->import->update(['status' => ImportStatus::Importing]);\n\n    $component = mountPreviewStep($this);\n    $component->call('startImport');\n\n    Bus::assertNothingBatched();\n});\n\nit('downloadFailedRows action is visible when there are failed rows', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $this->import->update([\n        'status' => ImportStatus::Completed,\n        'created_rows' => 0,\n        'updated_rows' => 0,\n        'skipped_rows' => 0,\n        'failed_rows' => 1,\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $component->assertSee('Download Failed Rows');\n});\n\nit('downloadFailedRows action is hidden when there are no failed rows', function (): void {\n    createPreviewReadyStore($this, ['Name'], [\n        makeRow(2, ['Name' => 'John']),\n    ], [\n        ColumnData::toField(source: 'Name', target: 'name'),\n    ]);\n\n    $this->import->update([\n        'status' => ImportStatus::Completed,\n        'created_rows' => 1,\n        'updated_rows' => 0,\n        'skipped_rows' => 0,\n        'failed_rows' => 0,\n    ]);\n\n    $component = mountPreviewStep($this);\n\n    $component->assertDontSee('Download Failed Rows');\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Livewire/ReviewStepTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Bus;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Features\\SupportTesting\\Testable;\nuse Livewire\\Livewire;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Enums\\ReviewFilter;\nuse Relaticle\\ImportWizard\\Enums\\SortDirection;\nuse Relaticle\\ImportWizard\\Enums\\SortField;\nuse Relaticle\\ImportWizard\\Jobs\\ResolveMatchesJob;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\ReviewStep;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nmutates(ReviewStep::class);\n\nbeforeEach(function (): void {\n    // Override the global Event::fake() from Pest.php to allow TeamCreated through,\n    // so CreateTeamCustomFields listener runs and creates email/phone custom fields.\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n\n    $this->import = Import::create([\n        'team_id' => (string) $this->team->id,\n        'user_id' => (string) $this->user->id,\n        'entity_type' => ImportEntityType::People,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Reviewing,\n        'total_rows' => 2,\n        'headers' => ['Name', 'Emails'],\n        'column_mappings' => collect([\n            ColumnData::toField(source: 'Name', target: 'name'),\n            ColumnData::toField(source: 'Emails', target: 'custom_fields_emails'),\n        ])->map(fn (ColumnData $m) => $m->toArray())->all(),\n    ]);\n\n    $this->store = ImportStore::create($this->import->id);\n\n    $this->store->query()->insert([\n        [\n            'row_number' => 2,\n            'raw_data' => json_encode(['Name' => 'John', 'Emails' => 'john@test.com']),\n            'validation' => null,\n            'corrections' => null,\n            'skipped' => null,\n            'match_action' => null,\n            'matched_id' => null,\n            'relationships' => null,\n        ],\n        [\n            'row_number' => 3,\n            'raw_data' => json_encode(['Name' => 'Jane', 'Emails' => 'jane@test.com, admin@test.com']),\n            'validation' => null,\n            'corrections' => null,\n            'skipped' => null,\n            'match_action' => null,\n            'matched_id' => null,\n            'relationships' => null,\n        ],\n    ]);\n\n    Cache::forget(\"import-{$this->import->id}-validation\");\n});\n\nafterEach(function (): void {\n    $this->store->destroy();\n    $this->import->delete();\n});\n\nfunction mountReviewStep(object $context): Testable\n{\n    Bus::fake();\n\n    return Livewire::test(ReviewStep::class, [\n        'storeId' => $context->store->id(),\n        'entityType' => ImportEntityType::People,\n    ]);\n}\n\nit('renders with correct columns', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->assertOk();\n\n    $columns = $component->get('columns');\n    expect($columns)->toHaveCount(2)\n        ->and($columns->pluck('source')->all())->toBe(['Name', 'Emails']);\n});\n\nit('selects first column by default on mount', function (): void {\n    $component = mountReviewStep($this);\n\n    expect($component->get('selectedColumn.source'))->toBe('Name');\n});\n\nit('changes selected column via selectColumn', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('selectColumn', 'Emails');\n\n    expect($component->get('selectedColumn.source'))->toBe('Emails');\n});\n\nit('stores text correction in SQLite via updateMappedValue', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('updateMappedValue', 'John', 'Johnny');\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->corrections->get('Name'))->toBe('Johnny');\n});\n\nit('stores validation error for invalid text correction', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('selectColumn', 'Emails');\n    $component->call('updateMappedValue', 'john@test.com', 'not-an-email');\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->corrections->get('Emails'))->toBe('not-an-email')\n        ->and($row->validation->get('Emails'))->not->toBeNull();\n});\n\nit('returns empty errors for valid emails in multi-value field', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('selectColumn', 'Emails');\n    $component\n        ->call('updateMappedValue', 'john@test.com', 'valid@test.com, another@test.com')\n        ->assertReturned([]);\n});\n\nit('returns per-item errors for invalid emails in multi-value field', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('selectColumn', 'Emails');\n    $component\n        ->call('updateMappedValue', 'john@test.com', 'valid@test.com, not-an-email')\n        ->assertReturned(fn (array $errors) => isset($errors['not-an-email']) && ! isset($errors['valid@test.com']));\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->corrections->get('Emails'))->toBe('valid@test.com, not-an-email')\n        ->and($row->validation->get('Emails'))->not->toBeNull();\n});\n\nit('marks value as skipped via skipValue', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('skipValue', 'John');\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->skipped->get('Name'))->toBeTrue();\n});\n\nit('removes skip flag via unskipValue', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('skipValue', 'John');\n    $component->call('unskipValue', 'John');\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->skipped?->get('Name'))->toBeNull();\n});\n\nit('removes correction and re-validates raw value via undoCorrection', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('updateMappedValue', 'John', 'Johnny');\n    $component->call('undoCorrection', 'John');\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->corrections?->get('Name'))->toBeNull();\n});\n\nit('setFilter changes filter and resets pagination', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('setFilter', 'needs_review');\n\n    expect($component->get('filter'))->toBe(ReviewFilter::NeedsReview);\n});\n\nit('clearFilters resets search and filter', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->set('search', 'John');\n    $component->call('setFilter', 'needs_review');\n    $component->call('clearFilters');\n\n    expect($component->get('search'))->toBe('')\n        ->and($component->get('filter'))->toBe(ReviewFilter::All);\n});\n\nit('setSortField changes sort', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('setSortField', 'raw_value');\n\n    expect($component->get('sortField'))->toBe(SortField::Value);\n});\n\nit('setSortDirection changes direction', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->call('setSortDirection', 'asc');\n\n    expect($component->get('sortDirection'))->toBe(SortDirection::Asc);\n});\n\nit('updatedSearch applies and component renders without error', function (): void {\n    $component = mountReviewStep($this);\n\n    $component->set('search', 'John');\n\n    $component->assertOk();\n    expect($component->get('search'))->toBe('John');\n});\n\nit('columnErrorStatuses reflects validation state', function (): void {\n    $jsonPath = '$.Name';\n    $this->store->connection()->statement(\"\n        UPDATE import_rows\n        SET validation = json_set(COALESCE(validation, '{}'), ?, ?)\n        WHERE json_extract(raw_data, ?) = ?\n    \", [$jsonPath, 'Required field', $jsonPath, 'John']);\n\n    $component = mountReviewStep($this);\n\n    $statuses = $component->get('columnErrorStatuses');\n    expect($statuses['Name'])->toBeTrue();\n});\n\nit('dispatches completed event when continueToPreview is called', function (): void {\n    $component = mountReviewStep($this);\n    $component->set('batchIds', []);\n\n    $component->call('continueToPreview')\n        ->assertDispatched('completed');\n});\n\nit('does not dispatch completed while validation batches are still running', function (): void {\n    $component = mountReviewStep($this);\n    $component->set('batchIds', ['Name' => 'fake-batch-id']);\n\n    $component->call('continueToPreview')\n        ->assertNotDispatched('completed');\n});\n\nit('dispatches completed even when unresolved validation errors exist', function (): void {\n    $jsonPath = '$.Name';\n    $this->store->connection()->statement(\"\n        UPDATE import_rows\n        SET validation = json_set(COALESCE(validation, '{}'), ?, ?)\n        WHERE json_extract(raw_data, ?) = ?\n    \", [$jsonPath, 'Required field', $jsonPath, 'John']);\n\n    $component = mountReviewStep($this);\n    $component->set('batchIds', []);\n\n    $component->call('continueToPreview')\n        ->assertDispatched('completed');\n});\n\nit('dispatches ResolveMatchesJob batch on mount', function (): void {\n    $component = mountReviewStep($this);\n\n    Bus::assertBatched(function ($batch) {\n        return $batch->jobs->contains(fn ($job) => $job instanceof ResolveMatchesJob);\n    });\n});\n\nit('includes __match_resolution key in batchIds', function (): void {\n    $component = mountReviewStep($this);\n\n    expect($component->get('batchIds'))->toHaveKey('__match_resolution');\n});\n\nit('allows continueToPreview while only match resolution is running', function (): void {\n    $component = mountReviewStep($this);\n    $component->set('batchIds', ['__match_resolution' => 'fake-batch-id']);\n\n    $component->call('continueToPreview')\n        ->assertDispatched('completed');\n\n    $cachedBatchId = Cache::get(\"import-{$this->store->id()}-match-resolution-batch\");\n\n    expect($cachedBatchId)->toBe('fake-batch-id');\n});\n\nit('clears relationships column on mount', function (): void {\n    $this->store->connection()->statement(\"\n        UPDATE import_rows SET relationships = '[{\\\"relationship\\\":\\\"company\\\",\\\"action\\\":\\\"create\\\",\\\"name\\\":\\\"Stale\\\"}]'\n    \");\n\n    $row = $this->store->query()->where('row_number', 2)->first();\n    expect($row->relationships)->not->toBeNull();\n\n    mountReviewStep($this);\n\n    $freshRow = $this->store->query()->where('row_number', 2)->first();\n    expect($freshRow->relationships)->toBeNull();\n});\n\nit('skips dispatching batches when cache hash matches', function (): void {\n    mountReviewStep($this);\n\n    Bus::assertBatched(fn () => true);\n\n    Bus::fake();\n\n    mountReviewStep($this);\n\n    Bus::assertNothingBatched();\n});\n\nit('dispatches new batches when mappings hash changes', function (): void {\n    mountReviewStep($this);\n\n    Bus::assertBatched(fn () => true);\n\n    $this->import->update([\n        'column_mappings' => collect([\n            ColumnData::toField(source: 'Name', target: 'name'),\n        ])->map(fn (ColumnData $m) => $m->toArray())->all(),\n    ]);\n\n    Bus::fake();\n\n    mountReviewStep($this);\n\n    Bus::assertBatched(fn () => true);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Livewire/UploadStepTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Livewire\\Features\\SupportTesting\\Testable;\nuse Livewire\\Livewire;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Livewire\\Steps\\UploadStep;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\ImportWizard\\Store\\ImportStore;\n\nmutates(UploadStep::class);\n\nfunction makeCsvFile(string $content, string $name = 'test.csv'): UploadedFile\n{\n    return UploadedFile::fake()->createWithContent($name, $content);\n}\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n\n    $this->createdStoreIds = [];\n});\n\nafterEach(function (): void {\n    foreach ($this->createdStoreIds as $storeId) {\n        ImportStore::load($storeId)?->destroy();\n    }\n});\n\nfunction mountUploadStep(object $context, ?string $storeId = null): Testable\n{\n    return Livewire::test(UploadStep::class, [\n        'entityType' => ImportEntityType::People,\n        'storeId' => $storeId,\n    ]);\n}\n\n// ─── Mount ──────────────────────────────────────────────────────────────────\n\nit('renders upload form on mount', function (): void {\n    $component = mountUploadStep($this);\n\n    $component->assertOk();\n\n    expect($component->get('isParsed'))->toBeFalse()\n        ->and($component->get('headers'))->toBe([])\n        ->and($component->get('rowCount'))->toBe(0);\n});\n\n// ─── File Parsing ───────────────────────────────────────────────────────────\n\nit('parses valid CSV and shows preview', function (): void {\n    $csv = makeCsvFile(\"Name,Email,Phone\\nJohn,john@test.com,555-1234\\nJane,jane@test.com,555-5678\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    expect($component->get('isParsed'))->toBeTrue()\n        ->and($component->get('headers'))->toBe(['Name', 'Email', 'Phone'])\n        ->and($component->get('rowCount'))->toBe(2);\n});\n\nit('rejects non-CSV file type', function (): void {\n    $file = UploadedFile::fake()->create('report.pdf', 100, 'application/pdf');\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $file);\n\n    $component->assertHasErrors(['uploadedFile']);\n});\n\nit('rejects empty CSV with no headers', function (): void {\n    $csv = makeCsvFile('');\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    $component->assertHasErrors(['uploadedFile' => 'CSV file is empty']);\n});\n\nit('rejects CSV with headers but no data rows', function (): void {\n    $csv = makeCsvFile(\"Name,Email,Phone\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    $component->assertHasErrors(['uploadedFile' => 'CSV file has no data rows']);\n});\n\nit('fills blank headers with Column_N', function (): void {\n    $csv = makeCsvFile(\"Name,,Email\\nJohn,value,john@test.com\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    expect($component->get('isParsed'))->toBeTrue()\n        ->and($component->get('headers'))->toBe(['Name', 'Column_2', 'Email']);\n});\n\nit('rejects duplicate column headers', function (): void {\n    $csv = makeCsvFile(\"Name,Name,Email\\nJohn,Doe,john@test.com\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    $component->assertHasErrors(['uploadedFile' => 'Duplicate column names found.']);\n});\n\nit('normalizes rows with fewer columns than headers', function (): void {\n    $csv = makeCsvFile(\"Name,Email,Phone\\nJohn\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    expect($component->get('isParsed'))->toBeTrue()\n        ->and($component->get('rowCount'))->toBe(1);\n});\n\n// ─── Continue to Mapping ────────────────────────────────────────────────────\n\nit('continueToMapping creates ImportStore with rows', function (): void {\n    $csv = makeCsvFile(\"Name,Email\\nJohn,john@test.com\\nJane,jane@test.com\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n    $component->call('continueToMapping');\n\n    $component->assertDispatched('completed', function (string $event, array $params): bool {\n        $this->createdStoreIds[] = $params['storeId'];\n\n        $import = Import::find($params['storeId']);\n        $store = ImportStore::load($params['storeId']);\n\n        expect($import)->not->toBeNull()\n            ->and($store)->not->toBeNull()\n            ->and($import->headers)->toBe(['Name', 'Email'])\n            ->and($import->total_rows)->toBe(2)\n            ->and($import->status)->toBe(ImportStatus::Mapping);\n\n        $rows = $store->query()->get();\n        expect($rows)->toHaveCount(2);\n\n        $firstRow = $rows->first();\n        expect($firstRow->raw_data->get('Name'))->toBe('John')\n            ->and($firstRow->raw_data->get('Email'))->toBe('john@test.com');\n\n        return true;\n    });\n});\n\nit('continueToMapping dispatches completed event with correct params', function (): void {\n    $csv = makeCsvFile(\"Name,Email,Phone\\nJohn,john@test.com,555\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n    $component->call('continueToMapping');\n\n    $component->assertDispatched('completed', function (string $event, array $params): bool {\n        $this->createdStoreIds[] = $params['storeId'];\n\n        expect($params['rowCount'])->toBe(1)\n            ->and($params['columnCount'])->toBe(3)\n            ->and($params['storeId'])->toBeString()->not->toBeEmpty();\n\n        return true;\n    });\n});\n\nit('continueToMapping fails when file is missing', function (): void {\n    $component = mountUploadStep($this);\n\n    $component->set('isParsed', true);\n    $component->call('continueToMapping');\n\n    $component->assertHasErrors(['uploadedFile' => 'File no longer available. Please re-upload.']);\n    expect($component->get('isParsed'))->toBeFalse();\n});\n\n// ─── Remove File ────────────────────────────────────────────────────────────\n\nit('removeFile resets state', function (): void {\n    $csv = makeCsvFile(\"Name,Email\\nJohn,john@test.com\\n\");\n\n    $component = mountUploadStep($this);\n    $component->set('uploadedFile', $csv);\n\n    expect($component->get('isParsed'))->toBeTrue();\n\n    $component->call('removeFile');\n\n    expect($component->get('isParsed'))->toBeFalse()\n        ->and($component->get('headers'))->toBe([])\n        ->and($component->get('rowCount'))->toBe(0);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Support/EntityLinkResolverTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkResolver;\n\nmutates(EntityLinkResolver::class);\n\nbeforeEach(function (): void {\n    $this->user = User::factory()->withTeam()->create();\n    $this->team = $this->user->currentTeam;\n});\n\nit('resolves team member by email via pivot', function (): void {\n    $member = User::factory()->create();\n    $this->team->users()->attach($member, ['role' => 'editor']);\n\n    $resolver = new EntityLinkResolver($this->team->id);\n    $link = EntityLink::belongsTo('account_owner', User::class)\n        ->matchableFields([MatchableField::email('email')])\n        ->foreignKey('account_owner_id');\n    $matcher = MatchableField::email('email');\n\n    $result = $resolver->batchResolve($link, $matcher, [$member->email]);\n\n    expect($result[$member->email])->toBe($member->id);\n});\n\nit('resolves team owner by email', function (): void {\n    $resolver = new EntityLinkResolver($this->team->id);\n    $link = EntityLink::belongsTo('account_owner', User::class)\n        ->matchableFields([MatchableField::email('email')])\n        ->foreignKey('account_owner_id');\n    $matcher = MatchableField::email('email');\n\n    $result = $resolver->batchResolve($link, $matcher, [$this->user->email]);\n\n    expect($result[$this->user->email])->toBe($this->user->id);\n});\n\nit('resolves team member by ID', function (): void {\n    $member = User::factory()->create();\n    $this->team->users()->attach($member, ['role' => 'editor']);\n\n    $resolver = new EntityLinkResolver($this->team->id);\n    $link = EntityLink::belongsTo('account_owner', User::class)\n        ->matchableFields([MatchableField::id()])\n        ->foreignKey('account_owner_id');\n    $matcher = MatchableField::id();\n\n    $result = $resolver->batchResolve($link, $matcher, [$member->id]);\n\n    expect($result[$member->id])->toBe($member->id);\n});\n\nit('returns null for non-team-member email', function (): void {\n    $stranger = User::factory()->create();\n\n    $resolver = new EntityLinkResolver($this->team->id);\n    $link = EntityLink::belongsTo('account_owner', User::class)\n        ->matchableFields([MatchableField::email('email')])\n        ->foreignKey('account_owner_id');\n    $matcher = MatchableField::email('email');\n\n    $result = $resolver->batchResolve($link, $matcher, [$stranger->email]);\n\n    expect($result[$stranger->email])->toBeNull();\n});\n\nit('resolves multiple team members in batch', function (): void {\n    $member1 = User::factory()->create();\n    $member2 = User::factory()->create();\n    $this->team->users()->attach($member1, ['role' => 'editor']);\n    $this->team->users()->attach($member2, ['role' => 'editor']);\n\n    $resolver = new EntityLinkResolver($this->team->id);\n    $link = EntityLink::belongsTo('account_owner', User::class)\n        ->matchableFields([MatchableField::email('email')])\n        ->foreignKey('account_owner_id');\n    $matcher = MatchableField::email('email');\n\n    $result = $resolver->batchResolve($link, $matcher, [$member1->email, $member2->email]);\n\n    expect($result[$member1->email])->toBe($member1->id)\n        ->and($result[$member2->email])->toBe($member2->id);\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Validation/ColumnValidatorTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse Relaticle\\CustomFields\\Enums\\FieldDataType;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\ImportField;\nuse Relaticle\\ImportWizard\\Enums\\DateFormat;\nuse Relaticle\\ImportWizard\\Enums\\NumberFormat;\nuse Relaticle\\ImportWizard\\Support\\Validation\\ColumnValidator;\nuse Relaticle\\ImportWizard\\Support\\Validation\\ValidationError;\n\nmutates(ColumnValidator::class);\n\nfunction makeColumnData(\n    FieldDataType $type,\n    array $rules = [],\n    bool $arbitrary = false,\n    ?array $options = null,\n): ColumnData {\n    $column = ColumnData::toField(source: 'Test', target: 'test');\n    $column->importField = new ImportField(\n        key: 'test',\n        label: 'Test',\n        rules: $rules,\n        type: $type,\n        acceptsArbitraryValues: $arbitrary,\n        options: $options,\n    );\n\n    return $column;\n}\n\n// ─── Text Validation ────────────────────────────────────────────────────────\n\nit('passes valid text with no rules', function (): void {\n    $column = makeColumnData(FieldDataType::STRING);\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'hello world'))->toBeNull();\n});\n\nit('rejects invalid email in text field with email rule', function (): void {\n    $column = makeColumnData(FieldDataType::STRING, rules: ['email', 'max:254']);\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'not-an-email');\n\n    expect($error)\n        ->toBeInstanceOf(ValidationError::class)\n        ->getMessage()->not->toBeNull();\n});\n\n// ─── Multi-Choice Arbitrary ─────────────────────────────────────────────────\n\nit('passes all valid emails in multi-choice arbitrary field', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        rules: ['email', 'max:254'],\n        arbitrary: true,\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'alice@test.com, bob@test.com'))->toBeNull();\n});\n\nit('returns per-item errors for invalid emails in multi-choice arbitrary field', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        rules: ['email', 'max:254'],\n        arbitrary: true,\n    );\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'valid@test.com, not-an-email, another-bad');\n\n    expect($error)\n        ->toBeInstanceOf(ValidationError::class)\n        ->hasItemErrors()->toBeTrue();\n\n    $itemErrors = $error->getItemErrors();\n    expect($itemErrors)\n        ->toHaveKey('not-an-email')\n        ->toHaveKey('another-bad')\n        ->not->toHaveKey('valid@test.com');\n});\n\nit('filters out empty items from trailing commas', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        rules: ['email', 'max:254'],\n        arbitrary: true,\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'valid@test.com, , ,'))->toBeNull();\n});\n\nit('passes multi-choice arbitrary with no rules', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        rules: [],\n        arbitrary: true,\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'anything, goes, here'))->toBeNull();\n});\n\n// ─── Multi-Choice Predefined ────────────────────────────────────────────────\n\nit('passes all valid options in multi-choice predefined field', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        options: [\n            ['label' => 'Red', 'value' => 'red'],\n            ['label' => 'Blue', 'value' => 'blue'],\n        ],\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'red, blue'))->toBeNull();\n});\n\nit('returns per-item errors for invalid options in multi-choice predefined field', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        options: [\n            ['label' => 'Red', 'value' => 'red'],\n            ['label' => 'Blue', 'value' => 'blue'],\n        ],\n    );\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'red, green, purple');\n\n    expect($error)\n        ->toBeInstanceOf(ValidationError::class)\n        ->hasItemErrors()->toBeTrue();\n\n    $itemErrors = $error->getItemErrors();\n    expect($itemErrors)\n        ->toHaveKey('green')\n        ->toHaveKey('purple')\n        ->not->toHaveKey('red');\n\n    expect($itemErrors['green'])->toBe('Not a valid option');\n});\n\n// ─── Single-Choice Predefined ───────────────────────────────────────────────\n\nit('passes valid option in single-choice predefined field', function (): void {\n    $column = makeColumnData(\n        FieldDataType::SINGLE_CHOICE,\n        options: [\n            ['label' => 'Active', 'value' => 'active'],\n            ['label' => 'Inactive', 'value' => 'inactive'],\n        ],\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'active'))->toBeNull();\n});\n\nit('rejects invalid option in single-choice predefined field', function (): void {\n    $column = makeColumnData(\n        FieldDataType::SINGLE_CHOICE,\n        options: [\n            ['label' => 'Active', 'value' => 'active'],\n            ['label' => 'Inactive', 'value' => 'inactive'],\n        ],\n    );\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'unknown');\n\n    expect($error)\n        ->toBeInstanceOf(ValidationError::class)\n        ->getMessage()->toContain('Invalid choice');\n});\n\n// ─── Date Validation ────────────────────────────────────────────────────────\n\nit('passes valid ISO date', function (): void {\n    $column = makeColumnData(FieldDataType::DATE);\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, '2024-05-15'))->toBeNull();\n});\n\nit('rejects invalid date format', function (): void {\n    $column = makeColumnData(FieldDataType::DATE);\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'not-a-date');\n\n    expect($error)\n        ->toBeInstanceOf(ValidationError::class)\n        ->getMessage()->toContain('Invalid date format');\n});\n\nit('validates date with custom European format', function (): void {\n    $column = makeColumnData(FieldDataType::DATE);\n    $column = $column->withDateFormat(DateFormat::EUROPEAN);\n\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, '15/05/2024'))->toBeNull();\n    expect($validator->validate($column, '2024-05-15'))\n        ->toBeInstanceOf(ValidationError::class)\n        ->getMessage()->toContain('European');\n});\n\nit('validates date with custom American format', function (): void {\n    $column = makeColumnData(FieldDataType::DATE);\n    $column = $column->withDateFormat(DateFormat::AMERICAN);\n\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, '05/15/2024'))->toBeNull();\n});\n\n// ─── Number Validation ─────────────────────────────────────────────────────\n\nit('passes valid number with point format', function (): void {\n    $column = makeColumnData(FieldDataType::FLOAT);\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, '1234.56'))->toBeNull();\n});\n\nit('rejects invalid number value', function (): void {\n    $column = makeColumnData(FieldDataType::FLOAT);\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'not-a-number');\n\n    expect($error)\n        ->toBeInstanceOf(ValidationError::class)\n        ->getMessage()->toContain('Invalid number format');\n});\n\nit('validates number with custom comma format', function (): void {\n    $column = makeColumnData(FieldDataType::FLOAT);\n    $column = $column->withNumberFormat(NumberFormat::COMMA);\n\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, '1.234,56'))->toBeNull();\n    expect($validator->validate($column, 'abc'))\n        ->toBeInstanceOf(ValidationError::class)\n        ->getMessage()->toContain('Comma');\n});\n\n// ─── Edge Cases ────────────────────────────────────────────────────────────\n\nit('strips required and nullable from preview rules', function (): void {\n    $column = makeColumnData(FieldDataType::STRING, rules: ['required', 'email', 'nullable']);\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'valid@test.com'))->toBeNull();\n    expect($validator->validate($column, 'not-an-email'))\n        ->toBeInstanceOf(ValidationError::class);\n});\n\nit('returns valid for text with only required/nullable rules', function (): void {\n    $column = makeColumnData(FieldDataType::STRING, rules: ['required', 'nullable']);\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'anything'))->toBeNull();\n});\n\nit('returns valid for multi-choice arbitrary with only required rule', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        rules: ['required'],\n        arbitrary: true,\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'anything, goes'))->toBeNull();\n});\n\nit('formats choice error message with truncation for many options', function (): void {\n    $options = [];\n    for ($i = 1; $i <= 7; $i++) {\n        $options[] = ['label' => \"Option {$i}\", 'value' => \"opt{$i}\"];\n    }\n\n    $column = makeColumnData(FieldDataType::SINGLE_CHOICE, options: $options);\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'invalid');\n\n    expect($error)->toBeInstanceOf(ValidationError::class);\n\n    $message = $error->getMessage();\n    expect($message)\n        ->toContain('opt1')\n        ->toContain('opt5')\n        ->not->toContain('opt6')\n        ->toContain('...');\n});\n\nit('formats choice error message without truncation for few options', function (): void {\n    $options = [\n        ['label' => 'A', 'value' => 'a'],\n        ['label' => 'B', 'value' => 'b'],\n        ['label' => 'C', 'value' => 'c'],\n    ];\n\n    $column = makeColumnData(FieldDataType::SINGLE_CHOICE, options: $options);\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'invalid');\n\n    $message = $error->getMessage();\n    expect($message)\n        ->toContain('a')\n        ->toContain('b')\n        ->toContain('c')\n        ->not->toContain('...');\n});\n\nit('validates single choice case-insensitively', function (): void {\n    $column = makeColumnData(\n        FieldDataType::SINGLE_CHOICE,\n        options: [\n            ['label' => 'Active', 'value' => 'active'],\n            ['label' => 'Inactive', 'value' => 'inactive'],\n        ],\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'Active'))->toBeNull()\n        ->and($validator->validate($column, 'ACTIVE'))->toBeNull()\n        ->and($validator->validate($column, 'active'))->toBeNull();\n});\n\nit('validates multi-choice predefined case-insensitively', function (): void {\n    $column = makeColumnData(\n        FieldDataType::MULTI_CHOICE,\n        options: [\n            ['label' => 'Red', 'value' => 'red'],\n            ['label' => 'Blue', 'value' => 'blue'],\n        ],\n    );\n    $validator = new ColumnValidator;\n\n    expect($validator->validate($column, 'Red, BLUE'))->toBeNull()\n        ->and($validator->validate($column, 'RED, blue'))->toBeNull();\n});\n\nit('formats choice error message with exactly 5 options without ellipsis', function (): void {\n    $options = [];\n    for ($i = 1; $i <= 5; $i++) {\n        $options[] = ['label' => \"Option {$i}\", 'value' => \"opt{$i}\"];\n    }\n\n    $column = makeColumnData(FieldDataType::SINGLE_CHOICE, options: $options);\n    $validator = new ColumnValidator;\n\n    $error = $validator->validate($column, 'invalid');\n\n    expect($error->getMessage())->not->toContain('...');\n});\n"
  },
  {
    "path": "tests/Feature/ImportWizard/Validation/EntityLinkValidatorTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Event;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Relaticle\\ImportWizard\\Data\\ColumnData;\nuse Relaticle\\ImportWizard\\Data\\EntityLink;\nuse Relaticle\\ImportWizard\\Data\\MatchableField;\nuse Relaticle\\ImportWizard\\Enums\\EntityLinkSource;\nuse Relaticle\\ImportWizard\\Importers\\CompanyImporter;\nuse Relaticle\\ImportWizard\\Support\\EntityLinkValidator;\n\nmutates(EntityLinkValidator::class);\n\nbeforeEach(function (): void {\n    Event::fake()->except([TeamCreated::class]);\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n\n    Filament::setTenant($this->team);\n\n    $this->companyLink = new EntityLink(\n        key: 'company',\n        source: EntityLinkSource::Relationship,\n        targetEntity: 'company',\n        targetModelClass: Company::class,\n    );\n});\n\nit('returns no validation errors for Create matcher', function (): void {\n    Company::factory()->create([\n        'name' => 'Acme Corp',\n        'team_id' => $this->team->id,\n    ]);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::name();\n\n    $error = $validator->validate($this->companyLink, $matcher, 'Nonexistent Company');\n\n    expect($error)->toBeNull();\n});\n\nit('batch validates with no errors for Create matcher', function (): void {\n    Company::factory()->create([\n        'name' => 'Acme Corp',\n        'team_id' => $this->team->id,\n    ]);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::name();\n\n    $results = $validator->batchValidate($this->companyLink, $matcher, ['Nonexistent', 'Acme Corp', 'Another']);\n\n    expect($results)->toBe([\n        'Nonexistent' => null,\n        'Acme Corp' => null,\n        'Another' => null,\n    ]);\n});\n\nit('returns validation error for MatchOnly matcher when record not found', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    $error = $validator->validate($this->companyLink, $matcher, '99999');\n\n    expect($error)->not->toBeNull()\n        ->and($error)->toContain('99999');\n});\n\nit('returns null for empty value', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    expect($validator->validate($this->companyLink, $matcher, ''))->toBeNull();\n    expect($validator->validate($this->companyLink, $matcher, null))->toBeNull();\n    expect($validator->validate($this->companyLink, $matcher, '  '))->toBeNull();\n});\n\nit('returns null for existing record found by id', function (): void {\n    $company = Company::factory()->create(['team_id' => $this->team->id]);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    expect($validator->validate($this->companyLink, $matcher, (string) $company->id))->toBeNull();\n});\n\nit('batch validates with mixed found and not found records', function (): void {\n    $company = Company::factory()->create(['team_id' => $this->team->id]);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    $results = $validator->batchValidate(\n        $this->companyLink,\n        $matcher,\n        [(string) $company->id, '99999'],\n    );\n\n    expect($results[(string) $company->id])->toBeNull()\n        ->and($results['99999'])->not->toBeNull()\n        ->and($results['99999'])->toContain('99999');\n});\n\nit('batch validates with empty values returns null for empty', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    $results = $validator->batchValidate($this->companyLink, $matcher, ['', '  ']);\n\n    expect($results)->toBe(['' => null, '  ' => null]);\n});\n\nit('batch validates returns early with empty array after trimming', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    $results = $validator->batchValidate($this->companyLink, $matcher, ['']);\n\n    expect($results)->toBe(['' => null]);\n});\n\nit('getResolvedId returns null for empty value', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    expect($validator->getResolvedId($this->companyLink, $matcher, ''))->toBeNull();\n    expect($validator->getResolvedId($this->companyLink, $matcher, null))->toBeNull();\n});\n\nit('getResolvedId resolves existing record', function (): void {\n    $company = Company::factory()->create(['team_id' => $this->team->id]);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    $id = $validator->getResolvedId($this->companyLink, $matcher, (string) $company->id);\n\n    expect($id)->toBe($company->id);\n});\n\nit('builds error message with entity link label and matcher info', function (): void {\n    $link = new EntityLink(\n        key: 'company',\n        source: EntityLinkSource::Relationship,\n        targetEntity: 'company',\n        targetModelClass: Company::class,\n        label: 'Company',\n    );\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    $error = $validator->validate($link, $matcher, '99999');\n\n    expect($error)\n        ->toContain('Company')\n        ->toContain('99999')\n        ->toContain('Record ID');\n});\n\nit('getResolvedId returns null for whitespace-only value', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    expect($validator->getResolvedId($this->companyLink, $matcher, '   '))->toBeNull();\n});\n\nit('getResolvedId returns null for non-existing record', function (): void {\n    $validator = new EntityLinkValidator((string) $this->team->id);\n    $matcher = MatchableField::id();\n\n    expect($validator->getResolvedId($this->companyLink, $matcher, '99999'))->toBeNull();\n});\n\nit('validateFromColumn returns null for field mapping column', function (): void {\n    $column = ColumnData::toField(source: 'Name', target: 'name');\n    $importer = new CompanyImporter((string) $this->team->id);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n\n    expect($validator->validateFromColumn($column, $importer, 'test'))->toBeNull();\n});\n\nit('validateFromColumn validates entity link column', function (): void {\n    $column = ColumnData::toEntityLink(\n        source: 'Company',\n        matcherKey: 'id',\n        entityLinkKey: 'company',\n    );\n    $column->entityLinkField = new EntityLink(\n        key: 'company',\n        source: EntityLinkSource::Relationship,\n        targetEntity: 'company',\n        targetModelClass: Company::class,\n        matchableFields: [MatchableField::id()],\n    );\n\n    $importer = new CompanyImporter((string) $this->team->id);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n\n    $error = $validator->validateFromColumn($column, $importer, '99999');\n\n    expect($error)->not->toBeNull()\n        ->and($error)->toContain('99999');\n});\n\nit('batchValidateFromColumn returns null for field mapping column', function (): void {\n    $column = ColumnData::toField(source: 'Name', target: 'name');\n    $importer = new CompanyImporter((string) $this->team->id);\n\n    $validator = new EntityLinkValidator((string) $this->team->id);\n\n    $results = $validator->batchValidateFromColumn($column, $importer, ['test1', 'test2']);\n\n    expect($results)->toBe(['test1' => null, 'test2' => null]);\n});\n\nit('batchValidateFromColumn validates entity link column', function (): void {\n    $company = Company::factory()->create(['team_id' => $this->team->id]);\n\n    $column = ColumnData::toEntityLink(\n        source: 'Company',\n        matcherKey: 'id',\n        entityLinkKey: 'company',\n    );\n    $column->entityLinkField = new EntityLink(\n        key: 'company',\n        source: EntityLinkSource::Relationship,\n        targetEntity: 'company',\n        targetModelClass: Company::class,\n        matchableFields: [MatchableField::id()],\n    );\n\n    $importer = new CompanyImporter((string) $this->team->id);\n    $validator = new EntityLinkValidator((string) $this->team->id);\n\n    $results = $validator->batchValidateFromColumn($column, $importer, [(string) $company->id, '99999']);\n\n    expect($results[(string) $company->id])->toBeNull()\n        ->and($results['99999'])->not->toBeNull();\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/CompanyToolsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CreationSource;\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Company\\CreateCompanyTool;\nuse App\\Mcp\\Tools\\Company\\DeleteCompanyTool;\nuse App\\Mcp\\Tools\\Company\\GetCompanyTool;\nuse App\\Mcp\\Tools\\Company\\ListCompaniesTool;\nuse App\\Mcp\\Tools\\Company\\UpdateCompanyTool;\nuse App\\Models\\Company;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nafterEach(function () {\n    Company::clearBootedModels();\n});\n\nit('can get a company by ID', function (): void {\n    $company = Company::factory()->for($this->team)->create(['name' => 'Acme Corp']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(GetCompanyTool::class, ['id' => $company->id])\n        ->assertOk()\n        ->assertSee('Acme Corp');\n});\n\ndescribe('team scoping', function () {\n    beforeEach(function () {\n        // Apply team scope as SetApiTeamContext middleware does in production\n        Company::addGlobalScope(new TeamScope);\n    });\n\n    it('scopes companies to current team', function (): void {\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n            'name' => 'Other Team Corp',\n        ]));\n        $ownCompany = Company::factory()->for($this->team)->create(['name' => 'Own Team Corp']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class)\n            ->assertOk()\n            ->assertSee('Own Team Corp')\n            ->assertDontSee('Other Team Corp');\n    });\n\n    it('cannot update a company from another team', function (): void {\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $otherCompany->id,\n                'name' => 'Hacked',\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot delete a company from another team', function (): void {\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteCompanyTool::class, [\n                'id' => $otherCompany->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot get a company from another team', function (): void {\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetCompanyTool::class, [\n                'id' => $otherCompany->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('excludes soft-deleted companies from list', function (): void {\n        $deleted = Company::factory()->for($this->team)->create(['name' => 'Deleted Corp']);\n        $deleted->delete();\n\n        $active = Company::factory()->for($this->team)->create(['name' => 'Active Corp']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class)\n            ->assertOk()\n            ->assertSee('Active Corp')\n            ->assertDontSee('Deleted Corp');\n    });\n});\n\ndescribe('pagination', function () {\n    it('can paginate companies via MCP tool', function (): void {\n        Company::factory(3)->for($this->team)->create();\n\n        $page1 = RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class, [\n                'per_page' => 2,\n                'page' => 1,\n            ]);\n\n        $page1->assertOk();\n\n        $page2 = RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class, [\n                'per_page' => 2,\n                'page' => 2,\n            ]);\n\n        $page2->assertOk();\n    });\n\n    it('includes pagination metadata in list responses', function (): void {\n        Company::factory(3)->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class, [\n                'per_page' => 2,\n                'page' => 1,\n            ])\n            ->assertOk()\n            ->assertSee('\"meta\"')\n            ->assertSee('\"current_page\": 1')\n            ->assertSee('\"per_page\": 2');\n    });\n});\n\ndescribe('custom fields serialization', function () {\n    it('returns empty custom_fields as object not array', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetCompanyTool::class, ['id' => $company->id])\n            ->assertOk()\n            ->assertSee('\"custom_fields\": {}');\n    });\n});\n\ndescribe('validation', function () {\n    it('rejects empty name on create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [])\n            ->assertHasErrors(['name']);\n    });\n\n    it('rejects name exceeding 255 characters', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => str_repeat('a', 256),\n            ])\n            ->assertHasErrors(['name']);\n    });\n\n    it('sets creation source to MCP', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Source Test Corp',\n            ])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'Source Test Corp')->first();\n        expect($company->creation_source)->toBe(CreationSource::MCP);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/CrmSummaryResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Resources\\CrmSummaryResource;\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\User;\n\nbeforeEach(function (): void {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('returns CRM summary with record counts', function (): void {\n    Company::factory()->for($this->team)->count(3)->create();\n    People::factory()->for($this->team)->count(5)->create();\n    Opportunity::factory()->for($this->team)->count(2)->create();\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->resource(CrmSummaryResource::class);\n\n    $response->assertOk()\n        ->assertSee('\"companies\"')\n        ->assertSee('\"people\"')\n        ->assertSee('\"opportunities\"')\n        ->assertSee('\"tasks\"')\n        ->assertSee('\"notes\"');\n});\n\nit('includes opportunity pipeline breakdown', function (): void {\n    $opp = Opportunity::factory()->for($this->team)->create();\n\n    $stageField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->getKey())\n        ->where('entity_type', 'opportunity')\n        ->where('code', 'stage')\n        ->first();\n\n    if ($stageField) {\n        $opp->saveCustomFieldValue($stageField, 'Proposal');\n    }\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->resource(CrmSummaryResource::class);\n\n    $response->assertOk()\n        ->assertSee('by_stage')\n        ->assertSee('total_pipeline_value');\n});\n\nit('includes task overdue and due this week counts', function (): void {\n    Task::factory()->for($this->team)->create();\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->resource(CrmSummaryResource::class);\n\n    $response->assertOk()\n        ->assertSee('\"overdue\"')\n        ->assertSee('\"due_this_week\"');\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/Filters/CustomFieldFilterTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Filters\\CustomFieldFilter;\nuse App\\Models\\CustomField;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedFilter;\nuse Spatie\\QueryBuilder\\QueryBuilder;\nuse Symfony\\Component\\HttpKernel\\Exception\\HttpException;\n\nbeforeEach(function (): void {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n    $this->actingAs($this->user);\n    Opportunity::addGlobalScope(new TeamScope);\n});\n\nafterEach(function (): void {\n    Opportunity::clearBootedModels();\n});\n\nit('filters by custom field equality', function (): void {\n    $opportunity1 = Opportunity::factory()->for($this->team)->create(['name' => 'Deal A']);\n    $opportunity2 = Opportunity::factory()->for($this->team)->create(['name' => 'Deal B']);\n\n    $stageField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->getKey())\n        ->where('entity_type', 'opportunity')\n        ->where('code', 'stage')\n        ->first();\n\n    expect($stageField)->not->toBeNull('Stage custom field must exist for this test');\n\n    $opportunity1->saveCustomFieldValue($stageField, 'Proposal');\n    $opportunity2->saveCustomFieldValue($stageField, 'Prospecting');\n\n    $request = new Request([\n        'filter' => [\n            'custom_fields' => [\n                'stage' => ['eq' => 'Proposal'],\n            ],\n        ],\n    ]);\n\n    $results = QueryBuilder::for(Opportunity::query()->withCustomFieldValues(), $request)\n        ->allowedFilters(\n            AllowedFilter::custom('custom_fields', new CustomFieldFilter('opportunity')),\n        )\n        ->get();\n\n    expect($results)->toHaveCount(1)\n        ->and($results->first()->name)->toBe('Deal A');\n});\n\nit('filters by currency field with gte operator', function (): void {\n    $opportunity1 = Opportunity::factory()->for($this->team)->create(['name' => 'Big Deal']);\n    $opportunity2 = Opportunity::factory()->for($this->team)->create(['name' => 'Small Deal']);\n\n    $amountField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->getKey())\n        ->where('entity_type', 'opportunity')\n        ->where('code', 'amount')\n        ->first();\n\n    expect($amountField)->not->toBeNull('Amount custom field must exist for this test');\n\n    $opportunity1->saveCustomFieldValue($amountField, 100000);\n    $opportunity2->saveCustomFieldValue($amountField, 5000);\n\n    $request = new Request([\n        'filter' => [\n            'custom_fields' => [\n                'amount' => ['gte' => 50000],\n            ],\n        ],\n    ]);\n\n    $results = QueryBuilder::for(Opportunity::query()->withCustomFieldValues(), $request)\n        ->allowedFilters(\n            AllowedFilter::custom('custom_fields', new CustomFieldFilter('opportunity')),\n        )\n        ->get();\n\n    expect($results)->toHaveCount(1)\n        ->and($results->first()->name)->toBe('Big Deal');\n});\n\nit('silently ignores unknown field codes', function (): void {\n    $countBefore = Opportunity::query()->count();\n\n    Opportunity::factory()->for($this->team)->create();\n\n    $request = new Request([\n        'filter' => [\n            'custom_fields' => [\n                'nonexistent_field' => ['eq' => 'test'],\n            ],\n        ],\n    ]);\n\n    $results = QueryBuilder::for(Opportunity::query()->withCustomFieldValues(), $request)\n        ->allowedFilters(\n            AllowedFilter::custom('custom_fields', new CustomFieldFilter('opportunity')),\n        )\n        ->get();\n\n    expect($results)->toHaveCount($countBefore + 1);\n});\n\nit('rejects more than 10 filter conditions', function (): void {\n    $filters = [];\n\n    for ($i = 0; $i < 11; $i++) {\n        $filters[\"field_{$i}\"] = ['eq' => 'test'];\n    }\n\n    $request = new Request([\n        'filter' => ['custom_fields' => $filters],\n    ]);\n\n    QueryBuilder::for(Opportunity::query()->withCustomFieldValues(), $request)\n        ->allowedFilters(\n            AllowedFilter::custom('custom_fields', new CustomFieldFilter('opportunity')),\n        )\n        ->get();\n})->throws(HttpException::class);\n\nit('handles empty filter object as no-op', function (): void {\n    $countBefore = Opportunity::query()->count();\n\n    Opportunity::factory()->for($this->team)->count(3)->create();\n\n    $request = new Request([\n        'filter' => [\n            'custom_fields' => [],\n        ],\n    ]);\n\n    $results = QueryBuilder::for(Opportunity::query()->withCustomFieldValues(), $request)\n        ->allowedFilters(\n            AllowedFilter::custom('custom_fields', new CustomFieldFilter('opportunity')),\n        )\n        ->get();\n\n    expect($results)->toHaveCount($countBefore + 3);\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/Filters/CustomFieldSortTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Filters\\CustomFieldSort;\nuse App\\Models\\CustomField;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Spatie\\QueryBuilder\\AllowedSort;\nuse Spatie\\QueryBuilder\\QueryBuilder;\n\nbeforeEach(function (): void {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n    $this->actingAs($this->user);\n    Opportunity::addGlobalScope(new TeamScope);\n});\n\nafterEach(function (): void {\n    Opportunity::clearBootedModels();\n});\n\nit('sorts opportunities by custom field value ascending', function (): void {\n    $opp1 = Opportunity::factory()->for($this->team)->create(['name' => 'A']);\n    $opp2 = Opportunity::factory()->for($this->team)->create(['name' => 'B']);\n\n    $amountField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->getKey())\n        ->where('entity_type', 'opportunity')\n        ->where('code', 'amount')\n        ->first();\n\n    expect($amountField)->not->toBeNull();\n\n    $opp1->saveCustomFieldValue($amountField, 50000);\n    $opp2->saveCustomFieldValue($amountField, 100000);\n\n    $request = new Request(['sort' => 'amount']);\n\n    $results = QueryBuilder::for(\n        Opportunity::query()->where('team_id', $this->team->getKey())->withCustomFieldValues(),\n        $request,\n    )\n        ->allowedSorts(\n            AllowedSort::custom('amount', new CustomFieldSort('opportunity')),\n        )\n        ->get();\n\n    $names = $results->pluck('name')->values();\n    $indexA = $names->search('A');\n    $indexB = $names->search('B');\n\n    expect($indexA)->toBeLessThan($indexB);\n});\n\nit('sorts opportunities by custom field value descending', function (): void {\n    $opp1 = Opportunity::factory()->for($this->team)->create(['name' => 'A']);\n    $opp2 = Opportunity::factory()->for($this->team)->create(['name' => 'B']);\n\n    $amountField = CustomField::query()\n        ->withoutGlobalScopes()\n        ->where('tenant_id', $this->team->getKey())\n        ->where('entity_type', 'opportunity')\n        ->where('code', 'amount')\n        ->first();\n\n    expect($amountField)->not->toBeNull();\n\n    $opp1->saveCustomFieldValue($amountField, 50000);\n    $opp2->saveCustomFieldValue($amountField, 100000);\n\n    $request = new Request(['sort' => '-amount']);\n\n    $results = QueryBuilder::for(\n        Opportunity::query()->where('team_id', $this->team->getKey())->withCustomFieldValues(),\n        $request,\n    )\n        ->allowedSorts(\n            AllowedSort::custom('amount', new CustomFieldSort('opportunity')),\n        )\n        ->get();\n\n    $names = $results->pluck('name')->values();\n    $indexA = $names->search('A');\n    $indexB = $names->search('B');\n\n    expect($indexB)->toBeLessThan($indexA);\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/McpToolFeaturesTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CreationSource;\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Company\\CreateCompanyTool;\nuse App\\Mcp\\Tools\\Company\\GetCompanyTool;\nuse App\\Mcp\\Tools\\Company\\ListCompaniesTool;\nuse App\\Mcp\\Tools\\Company\\UpdateCompanyTool;\nuse App\\Mcp\\Tools\\Note\\CreateNoteTool;\nuse App\\Mcp\\Tools\\Note\\DetachNoteFromEntitiesTool;\nuse App\\Mcp\\Tools\\Note\\ListNotesTool;\nuse App\\Mcp\\Tools\\Note\\UpdateNoteTool;\nuse App\\Mcp\\Tools\\Opportunity\\CreateOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\UpdateOpportunityTool;\nuse App\\Mcp\\Tools\\People\\CreatePeopleTool;\nuse App\\Mcp\\Tools\\People\\UpdatePeopleTool;\nuse App\\Mcp\\Tools\\Task\\CreateTaskTool;\nuse App\\Mcp\\Tools\\Task\\DetachTaskFromEntitiesTool;\nuse App\\Mcp\\Tools\\Task\\ListTasksTool;\nuse App\\Mcp\\Tools\\Task\\UpdateTaskTool;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldSection;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\n// ---------------------------------------------------------------------------\n// ListTasksTool: assigned_to_me filter\n// ---------------------------------------------------------------------------\ndescribe('ListTasksTool assigned_to_me', function () {\n    it('filters tasks assigned to the current user', function (): void {\n        $assignedTask = Task::factory()->for($this->team)->create(['title' => 'Assigned Task']);\n        $assignedTask->assignees()->attach($this->user);\n\n        $unassignedTask = Task::factory()->for($this->team)->create(['title' => 'Unassigned Task']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListTasksTool::class, [\n                'assigned_to_me' => true,\n            ])\n            ->assertOk()\n            ->assertSee('Assigned Task')\n            ->assertDontSee('Unassigned Task');\n    });\n\n    it('returns all tasks when assigned_to_me is not set', function (): void {\n        $assignedTask = Task::factory()->for($this->team)->create(['title' => 'Assigned Task']);\n        $assignedTask->assignees()->attach($this->user);\n\n        Task::factory()->for($this->team)->create(['title' => 'Unassigned Task']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListTasksTool::class)\n            ->assertOk()\n            ->assertSee('Assigned Task')\n            ->assertSee('Unassigned Task');\n    });\n});\n\n// ---------------------------------------------------------------------------\n// ListNotesTool: notable_type / notable_id filtering\n// ---------------------------------------------------------------------------\ndescribe('ListNotesTool notable filtering', function () {\n    it('filters notes by notable_type company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n        $person = People::factory()->for($this->team)->create();\n\n        $companyNote = Note::factory()->for($this->team)->create(['title' => 'Company Note']);\n        $companyNote->companies()->attach($company);\n\n        $personNote = Note::factory()->for($this->team)->create(['title' => 'Person Note']);\n        $personNote->people()->attach($person);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListNotesTool::class, [\n                'notable_type' => 'company',\n            ])\n            ->assertOk()\n            ->assertSee('Company Note')\n            ->assertDontSee('Person Note');\n    });\n\n    it('filters notes by notable_type people', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n        $person = People::factory()->for($this->team)->create();\n\n        $companyNote = Note::factory()->for($this->team)->create(['title' => 'Company Note']);\n        $companyNote->companies()->attach($company);\n\n        $personNote = Note::factory()->for($this->team)->create(['title' => 'Person Note']);\n        $personNote->people()->attach($person);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListNotesTool::class, [\n                'notable_type' => 'people',\n            ])\n            ->assertOk()\n            ->assertSee('Person Note')\n            ->assertDontSee('Company Note');\n    });\n\n    it('filters notes by notable_id', function (): void {\n        $company1 = Company::factory()->for($this->team)->create();\n        $company2 = Company::factory()->for($this->team)->create();\n\n        $note1 = Note::factory()->for($this->team)->create(['title' => 'Note For Company 1']);\n        $note1->companies()->attach($company1);\n\n        $note2 = Note::factory()->for($this->team)->create(['title' => 'Note For Company 2']);\n        $note2->companies()->attach($company2);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListNotesTool::class, [\n                'notable_id' => $company1->id,\n            ])\n            ->assertOk()\n            ->assertSee('Note For Company 1')\n            ->assertDontSee('Note For Company 2');\n    });\n\n    it('filters notes by notable_type and notable_id combined', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        $companyNote = Note::factory()->for($this->team)->create(['title' => 'Specific Company Note']);\n        $companyNote->companies()->attach($company);\n\n        $opportunityNote = Note::factory()->for($this->team)->create(['title' => 'Opportunity Note']);\n        $opportunityNote->opportunities()->attach($opportunity);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListNotesTool::class, [\n                'notable_type' => 'company',\n                'notable_id' => $company->id,\n            ])\n            ->assertOk()\n            ->assertSee('Specific Company Note')\n            ->assertDontSee('Opportunity Note');\n    });\n});\n\n// ---------------------------------------------------------------------------\n// creation_source = MCP for all entities\n// ---------------------------------------------------------------------------\ndescribe('creation_source is MCP', function () {\n    it('sets creation_source to MCP for companies', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, ['name' => 'MCP Source Company'])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'MCP Source Company')->first();\n        expect($company->creation_source)->toBe(CreationSource::MCP);\n    });\n\n    it('sets creation_source to MCP for people', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreatePeopleTool::class, ['name' => 'MCP Source Person'])\n            ->assertOk();\n\n        $person = People::query()->where('name', 'MCP Source Person')->first();\n        expect($person->creation_source)->toBe(CreationSource::MCP);\n    });\n\n    it('sets creation_source to MCP for opportunities', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateOpportunityTool::class, ['name' => 'MCP Source Deal'])\n            ->assertOk();\n\n        $opportunity = Opportunity::query()->where('name', 'MCP Source Deal')->first();\n        expect($opportunity->creation_source)->toBe(CreationSource::MCP);\n    });\n\n    it('sets creation_source to MCP for tasks', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateTaskTool::class, ['title' => 'MCP Source Task'])\n            ->assertOk();\n\n        $task = Task::query()->where('title', 'MCP Source Task')->first();\n        expect($task->creation_source)->toBe(CreationSource::MCP);\n    });\n\n    it('sets creation_source to MCP for notes', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateNoteTool::class, ['title' => 'MCP Source Note'])\n            ->assertOk();\n\n        $note = Note::query()->where('title', 'MCP Source Note')->first();\n        expect($note->creation_source)->toBe(CreationSource::MCP);\n    });\n});\n\n// ---------------------------------------------------------------------------\n// Required-field validation for all entities\n// ---------------------------------------------------------------------------\ndescribe('required-field validation', function () {\n    it('rejects empty name on company create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [])\n            ->assertHasErrors(['name']);\n    });\n\n    it('rejects empty name on people create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreatePeopleTool::class, [])\n            ->assertHasErrors(['name']);\n    });\n\n    it('rejects empty name on opportunity create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateOpportunityTool::class, [])\n            ->assertHasErrors(['name']);\n    });\n\n    it('rejects empty title on task create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateTaskTool::class, [])\n            ->assertHasErrors(['title']);\n    });\n\n    it('rejects empty title on note create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateNoteTool::class, [])\n            ->assertHasErrors(['title']);\n    });\n\n    it('rejects name exceeding 255 characters for people', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreatePeopleTool::class, ['name' => str_repeat('a', 256)])\n            ->assertHasErrors(['name']);\n    });\n\n    it('rejects name exceeding 255 characters for opportunity', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateOpportunityTool::class, ['name' => str_repeat('a', 256)])\n            ->assertHasErrors(['name']);\n    });\n\n    it('rejects title exceeding 255 characters for task', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateTaskTool::class, ['title' => str_repeat('a', 256)])\n            ->assertHasErrors(['title']);\n    });\n\n    it('rejects title exceeding 255 characters for note', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateNoteTool::class, ['title' => str_repeat('a', 256)])\n            ->assertHasErrors(['title']);\n    });\n});\n\n// ---------------------------------------------------------------------------\n// Custom field create/update tests for all entities\n// ---------------------------------------------------------------------------\ndescribe('custom field create via MCP', function () {\n    beforeEach(function () {\n        $entityTypes = ['company', 'people', 'opportunity', 'task', 'note'];\n\n        foreach ($entityTypes as $entityType) {\n            $section = CustomFieldSection::create([\n                'tenant_id' => $this->team->id,\n                'entity_type' => $entityType,\n                'name' => \"MCP Test Section for {$entityType}\",\n                'code' => \"mcp_test_{$entityType}\",\n                'type' => 'section',\n                'sort_order' => 1,\n                'active' => true,\n            ]);\n\n            CustomField::create([\n                'tenant_id' => $this->team->id,\n                'custom_field_section_id' => $section->id,\n                'entity_type' => $entityType,\n                'code' => 'cf_website',\n                'name' => 'Website',\n                'type' => 'text',\n                'sort_order' => 1,\n                'active' => true,\n                'validation_rules' => [],\n            ]);\n        }\n    });\n\n    it('creates company with custom fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'CF Test Company',\n                'custom_fields' => ['cf_website' => 'https://example.com'],\n            ])\n            ->assertOk()\n            ->assertSee('CF Test Company');\n\n        $company = Company::query()->where('name', 'CF Test Company')->first();\n        expect($company)->not->toBeNull();\n    });\n\n    it('creates person with custom fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreatePeopleTool::class, [\n                'name' => 'CF Test Person',\n                'custom_fields' => ['cf_website' => 'https://example.com'],\n            ])\n            ->assertOk()\n            ->assertSee('CF Test Person');\n\n        $person = People::query()->where('name', 'CF Test Person')->first();\n        expect($person)->not->toBeNull();\n    });\n\n    it('creates opportunity with custom fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateOpportunityTool::class, [\n                'name' => 'CF Test Deal',\n                'custom_fields' => ['cf_website' => 'https://example.com'],\n            ])\n            ->assertOk()\n            ->assertSee('CF Test Deal');\n\n        $opportunity = Opportunity::query()->where('name', 'CF Test Deal')->first();\n        expect($opportunity)->not->toBeNull();\n    });\n\n    it('creates task with custom fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateTaskTool::class, [\n                'title' => 'CF Test Task',\n                'custom_fields' => ['cf_website' => 'https://example.com'],\n            ])\n            ->assertOk()\n            ->assertSee('CF Test Task');\n\n        $task = Task::query()->where('title', 'CF Test Task')->first();\n        expect($task)->not->toBeNull();\n    });\n\n    it('creates note with custom fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateNoteTool::class, [\n                'title' => 'CF Test Note',\n                'custom_fields' => ['cf_website' => 'https://example.com'],\n            ])\n            ->assertOk()\n            ->assertSee('CF Test Note');\n\n        $note = Note::query()->where('title', 'CF Test Note')->first();\n        expect($note)->not->toBeNull();\n    });\n});\n\ndescribe('custom field update via MCP', function () {\n    beforeEach(function () {\n        $entityTypes = ['company', 'people', 'opportunity', 'task', 'note'];\n\n        foreach ($entityTypes as $entityType) {\n            $section = CustomFieldSection::create([\n                'tenant_id' => $this->team->id,\n                'entity_type' => $entityType,\n                'name' => \"MCP Update Section for {$entityType}\",\n                'code' => \"mcp_update_{$entityType}\",\n                'type' => 'section',\n                'sort_order' => 1,\n                'active' => true,\n            ]);\n\n            CustomField::create([\n                'tenant_id' => $this->team->id,\n                'custom_field_section_id' => $section->id,\n                'entity_type' => $entityType,\n                'code' => 'cf_notes',\n                'name' => 'Notes',\n                'type' => 'text',\n                'sort_order' => 1,\n                'active' => true,\n                'validation_rules' => [],\n            ]);\n        }\n    });\n\n    it('updates company with custom fields', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'custom_fields' => ['cf_notes' => 'Updated via MCP'],\n            ])\n            ->assertOk();\n    });\n\n    it('updates person with custom fields', function (): void {\n        $person = People::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdatePeopleTool::class, [\n                'id' => $person->id,\n                'custom_fields' => ['cf_notes' => 'Updated via MCP'],\n            ])\n            ->assertOk();\n    });\n\n    it('updates opportunity with custom fields', function (): void {\n        $opportunity = Opportunity::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateOpportunityTool::class, [\n                'id' => $opportunity->id,\n                'custom_fields' => ['cf_notes' => 'Updated via MCP'],\n            ])\n            ->assertOk();\n    });\n\n    it('updates task with custom fields', function (): void {\n        $task = Task::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateTaskTool::class, [\n                'id' => $task->id,\n                'custom_fields' => ['cf_notes' => 'Updated via MCP'],\n            ])\n            ->assertOk();\n    });\n\n    it('updates note with custom fields', function (): void {\n        $note = Note::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateNoteTool::class, [\n                'id' => $note->id,\n                'custom_fields' => ['cf_notes' => 'Updated via MCP'],\n            ])\n            ->assertOk();\n    });\n});\n\n// ---------------------------------------------------------------------------\n// BUG-02: Partial custom_fields update must preserve omitted fields\n// ---------------------------------------------------------------------------\ndescribe('partial custom_fields update preserves omitted fields', function () {\n    beforeEach(function () {\n        $section = CustomFieldSection::create([\n            'tenant_id' => $this->team->id,\n            'entity_type' => 'company',\n            'name' => 'Partial Update Section',\n            'code' => 'partial_update',\n            'type' => 'section',\n            'sort_order' => 1,\n            'active' => true,\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'company',\n            'code' => 'cf_alpha',\n            'name' => 'Alpha',\n            'type' => 'text',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'company',\n            'code' => 'cf_beta',\n            'name' => 'Beta',\n            'type' => 'text',\n            'sort_order' => 2,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'company',\n            'code' => 'cf_links',\n            'name' => 'Links',\n            'type' => 'link',\n            'sort_order' => 3,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'company',\n            'code' => 'cf_flag',\n            'name' => 'Flag',\n            'type' => 'toggle',\n            'sort_order' => 4,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n    });\n\n    it('preserves omitted text fields when updating a subset', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Partial Test Corp',\n                'custom_fields' => ['cf_alpha' => 'original-alpha', 'cf_beta' => 'original-beta'],\n            ])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'Partial Test Corp')->firstOrFail();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'custom_fields' => ['cf_alpha' => 'updated-alpha'],\n            ])\n            ->assertOk()\n            ->assertSee('updated-alpha')\n            ->assertSee('original-beta');\n    });\n\n    it('preserves omitted link fields when updating other fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Link Preserve Corp',\n                'custom_fields' => [\n                    'cf_alpha' => 'some-text',\n                    'cf_links' => ['https://example.com', 'https://other.com'],\n                ],\n            ])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'Link Preserve Corp')->firstOrFail();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'custom_fields' => ['cf_alpha' => 'changed-text'],\n            ])\n            ->assertOk()\n            ->assertSee('changed-text')\n            ->assertSee('example.com')\n            ->assertSee('other.com');\n    });\n\n    it('preserves omitted toggle fields when updating other fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Toggle Preserve Corp',\n                'custom_fields' => ['cf_flag' => true, 'cf_alpha' => 'keep-me'],\n            ])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'Toggle Preserve Corp')->firstOrFail();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'custom_fields' => ['cf_alpha' => 'updated'],\n            ])\n            ->assertOk()\n            ->assertSee('updated')\n            ->assertSee('true');\n    });\n\n    it('preserves all custom fields when updating only core fields', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Core Update Corp',\n                'custom_fields' => ['cf_alpha' => 'keep-me', 'cf_beta' => 'keep-me-too'],\n            ])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'Core Update Corp')->firstOrFail();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'name' => 'Renamed Corp',\n            ])\n            ->assertOk()\n            ->assertSee('keep-me')\n            ->assertSee('keep-me-too');\n    });\n\n    it('can explicitly set a custom field to null without wiping others', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Null Test Corp',\n                'custom_fields' => ['cf_alpha' => 'has-value', 'cf_beta' => 'also-has-value'],\n            ])\n            ->assertOk();\n\n        $company = Company::query()->where('name', 'Null Test Corp')->firstOrFail();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'custom_fields' => ['cf_alpha' => null],\n            ])\n            ->assertOk()\n            ->assertSee('also-has-value');\n    });\n});\n\n// ---------------------------------------------------------------------------\n// Unknown custom field key rejection\n// ---------------------------------------------------------------------------\ndescribe('unknown custom field key rejection', function () {\n    beforeEach(function () {\n        $section = CustomFieldSection::create([\n            'tenant_id' => $this->team->id,\n            'entity_type' => 'company',\n            'name' => 'Unknown Key Test Section',\n            'code' => 'unknown_key_test',\n            'type' => 'section',\n            'sort_order' => 1,\n            'active' => true,\n        ]);\n\n        CustomField::create([\n            'tenant_id' => $this->team->id,\n            'custom_field_section_id' => $section->id,\n            'entity_type' => 'company',\n            'code' => 'valid_field',\n            'name' => 'Valid Field',\n            'type' => 'text',\n            'sort_order' => 1,\n            'active' => true,\n            'validation_rules' => [],\n        ]);\n    });\n\n    it('rejects unknown custom field key on create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Unknown Key Company',\n                'custom_fields' => ['jobTitle' => 'VP of Engineering'],\n            ])\n            ->assertHasErrors(['Unknown custom field keys: jobTitle']);\n    });\n\n    it('rejects unknown custom field key on update', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'custom_fields' => ['nonexistent' => 'some value'],\n            ])\n            ->assertHasErrors(['Unknown custom field keys: nonexistent']);\n    });\n\n    it('rejects unknown key while accepting valid key in same request', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Mixed Keys Company',\n                'custom_fields' => [\n                    'valid_field' => 'good value',\n                    'invalid_field' => 'bad value',\n                ],\n            ])\n            ->assertHasErrors(['Unknown custom field keys: invalid_field']);\n    });\n});\n\n// ---------------------------------------------------------------------------\n// Custom field validation rejection tests (invalid type: string to number field)\n// ---------------------------------------------------------------------------\ndescribe('custom field validation rejection', function () {\n    beforeEach(function () {\n        $entityTypes = ['company', 'people', 'opportunity', 'task', 'note'];\n\n        foreach ($entityTypes as $entityType) {\n            $section = CustomFieldSection::create([\n                'tenant_id' => $this->team->id,\n                'entity_type' => $entityType,\n                'name' => \"Number Section for {$entityType}\",\n                'code' => \"number_{$entityType}\",\n                'type' => 'section',\n                'sort_order' => 1,\n                'active' => true,\n            ]);\n\n            CustomField::create([\n                'tenant_id' => $this->team->id,\n                'custom_field_section_id' => $section->id,\n                'entity_type' => $entityType,\n                'code' => 'cf_amount',\n                'name' => 'Amount',\n                'type' => 'number',\n                'sort_order' => 1,\n                'active' => true,\n                'validation_rules' => [],\n            ]);\n        }\n    });\n\n    it('rejects non-numeric custom field value on company create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, [\n                'name' => 'Bad CF Company',\n                'custom_fields' => ['cf_amount' => 'not_a_number'],\n            ])\n            ->assertHasErrors(['cf amount']);\n    });\n\n    it('rejects non-numeric custom field value on people create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreatePeopleTool::class, [\n                'name' => 'Bad CF Person',\n                'custom_fields' => ['cf_amount' => 'not_a_number'],\n            ])\n            ->assertHasErrors(['cf amount']);\n    });\n\n    it('rejects non-numeric custom field value on opportunity create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateOpportunityTool::class, [\n                'name' => 'Bad CF Deal',\n                'custom_fields' => ['cf_amount' => 'not_a_number'],\n            ])\n            ->assertHasErrors(['cf amount']);\n    });\n\n    it('rejects non-numeric custom field value on task create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateTaskTool::class, [\n                'title' => 'Bad CF Task',\n                'custom_fields' => ['cf_amount' => 'not_a_number'],\n            ])\n            ->assertHasErrors(['cf amount']);\n    });\n\n    it('rejects non-numeric custom field value on note create', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateNoteTool::class, [\n                'title' => 'Bad CF Note',\n                'custom_fields' => ['cf_amount' => 'not_a_number'],\n            ])\n            ->assertHasErrors(['cf amount']);\n    });\n});\n\n// ---------------------------------------------------------------------------\n// Relationship includes: sensitive field filtering\n// ---------------------------------------------------------------------------\ndescribe('relationship includes filter sensitive fields', function () {\n    it('does not leak sensitive user fields in GetCompanyTool creator include', function (): void {\n        $company = Company::factory()->for($this->team)->create([\n            'creator_id' => $this->user->id,\n        ]);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetCompanyTool::class, [\n                'id' => $company->id,\n                'include' => ['creator'],\n            ])\n            ->assertOk()\n            ->assertSee($this->user->name)\n            ->assertDontSee('email_verified_at')\n            ->assertDontSee('two_factor_confirmed_at')\n            ->assertDontSee('current_team_id')\n            ->assertDontSee('profile_photo_path')\n            ->assertDontSee('password');\n    });\n\n    it('does not leak sensitive fields in ListCompaniesTool with creator include', function (): void {\n        Company::factory()->for($this->team)->create([\n            'creator_id' => $this->user->id,\n        ]);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class, [\n                'include' => ['creator'],\n            ])\n            ->assertOk()\n            ->assertSee($this->user->name)\n            ->assertDontSee('email_verified_at')\n            ->assertDontSee('two_factor_confirmed_at')\n            ->assertDontSee('current_team_id')\n            ->assertDontSee('profile_photo_path')\n            ->assertDontSee('password');\n    });\n\n    it('serializes related people through resource in GetCompanyTool', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n        People::factory()->for($this->team)->create([\n            'name' => 'Included Person',\n            'company_id' => $company->id,\n        ]);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetCompanyTool::class, [\n                'id' => $company->id,\n                'include' => ['people'],\n            ])\n            ->assertOk()\n            ->assertSee('Included Person')\n            ->assertDontSee('team_id')\n            ->assertDontSee('creator_id')\n            ->assertDontSee('deleted_at');\n    });\n});\n\n// ---------------------------------------------------------------------------\n// Detach tools: team-scoped validation\n// ---------------------------------------------------------------------------\ndescribe('detach tools reject cross-team entity IDs', function () {\n    it('rejects company from another team when detaching from task', function (): void {\n        $task = Task::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DetachTaskFromEntitiesTool::class, [\n                'id' => $task->id,\n                'company_ids' => [$otherCompany->id],\n            ])\n            ->assertHasErrors(['company_ids.0']);\n    });\n\n    it('rejects company from another team when detaching from note', function (): void {\n        $note = Note::factory()->for($this->team)->create();\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DetachNoteFromEntitiesTool::class, [\n                'id' => $note->id,\n                'company_ids' => [$otherCompany->id],\n            ])\n            ->assertHasErrors(['company_ids.0']);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/NoteToolsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Note\\AttachNoteToEntitiesTool;\nuse App\\Mcp\\Tools\\Note\\CreateNoteTool;\nuse App\\Mcp\\Tools\\Note\\DeleteNoteTool;\nuse App\\Mcp\\Tools\\Note\\DetachNoteFromEntitiesTool;\nuse App\\Mcp\\Tools\\Note\\GetNoteTool;\nuse App\\Mcp\\Tools\\Note\\ListNotesTool;\nuse App\\Mcp\\Tools\\Note\\UpdateNoteTool;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nafterEach(function () {\n    Note::clearBootedModels();\n});\n\nit('can create a note linked to a company', function (): void {\n    $company = Company::factory()->for($this->team)->create();\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(CreateNoteTool::class, [\n            'title' => 'Meeting Notes',\n            'company_ids' => [$company->id],\n        ])\n        ->assertOk()\n        ->assertSee('Meeting Notes');\n\n    $note = Note::query()->where('title', 'Meeting Notes')->firstOrFail();\n    expect($note->companies)->toHaveCount(1)\n        ->and($note->companies->first()->id)->toBe($company->id);\n});\n\nit('can update a note to link to an opportunity', function (): void {\n    $note = Note::factory()->for($this->team)->create();\n    $opportunity = Opportunity::factory()->for($this->team)->create();\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateNoteTool::class, [\n            'id' => $note->id,\n            'opportunity_ids' => [$opportunity->id],\n        ])\n        ->assertOk();\n\n    expect($note->refresh()->opportunities)->toHaveCount(1);\n});\n\nit('can detach all companies from a note via empty array', function (): void {\n    $note = Note::factory()->for($this->team)->create();\n    $company = Company::factory()->for($this->team)->create();\n    $note->companies()->attach($company);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateNoteTool::class, [\n            'id' => $note->id,\n            'company_ids' => [],\n        ])\n        ->assertOk();\n\n    expect($note->refresh()->companies)->toHaveCount(0);\n});\n\nit('can get a note by ID', function (): void {\n    $note = Note::factory()->for($this->team)->create(['title' => 'Meeting Notes']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(GetNoteTool::class, ['id' => $note->id])\n        ->assertOk()\n        ->assertSee('Meeting Notes');\n});\n\nit('can update a note via MCP tool', function (): void {\n    $note = Note::factory()->for($this->team)->create(['title' => 'Old Note']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateNoteTool::class, [\n            'id' => $note->id,\n            'title' => 'New Note',\n        ])\n        ->assertOk()\n        ->assertSee('New Note');\n\n    expect($note->refresh()->title)->toBe('New Note');\n});\n\nit('can delete a note via MCP tool', function (): void {\n    $note = Note::factory()->for($this->team)->create(['title' => 'Delete Me']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(DeleteNoteTool::class, [\n            'id' => $note->id,\n        ])\n        ->assertOk()\n        ->assertSee('has been deleted');\n\n    expect($note->refresh()->trashed())->toBeTrue();\n});\n\nit('can attach a note to a company', function (): void {\n    $note = Note::factory()->for($this->team)->create();\n    $company = Company::factory()->for($this->team)->create();\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(AttachNoteToEntitiesTool::class, [\n            'id' => $note->id,\n            'company_ids' => [$company->id],\n        ])\n        ->assertOk();\n\n    expect($note->refresh()->companies)->toHaveCount(1);\n});\n\nit('can detach a note from a company', function (): void {\n    $note = Note::factory()->for($this->team)->create();\n    $company = Company::factory()->for($this->team)->create();\n    $note->companies()->attach($company);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(DetachNoteFromEntitiesTool::class, [\n            'id' => $note->id,\n            'company_ids' => [$company->id],\n        ])\n        ->assertOk();\n\n    expect($note->refresh()->companies)->toHaveCount(0);\n});\n\nit('attach does not remove existing links', function (): void {\n    $note = Note::factory()->for($this->team)->create();\n    $company1 = Company::factory()->for($this->team)->create();\n    $company2 = Company::factory()->for($this->team)->create();\n    $note->companies()->attach($company1);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(AttachNoteToEntitiesTool::class, [\n            'id' => $note->id,\n            'company_ids' => [$company2->id],\n        ])\n        ->assertOk();\n\n    expect($note->refresh()->companies)->toHaveCount(2);\n});\n\ndescribe('team scoping', function () {\n    beforeEach(function () {\n        Note::addGlobalScope(new TeamScope);\n    });\n\n    it('scopes notes to current team', function (): void {\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n            'title' => 'Other Team Note',\n        ]));\n        $ownNote = Note::factory()->for($this->team)->create(['title' => 'Own Team Note']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListNotesTool::class)\n            ->assertOk()\n            ->assertSee('Own Team Note')\n            ->assertDontSee('Other Team Note');\n    });\n\n    it('cannot update a note from another team', function (): void {\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateNoteTool::class, [\n                'id' => $otherNote->id,\n                'title' => 'Hacked',\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot delete a note from another team', function (): void {\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteNoteTool::class, [\n                'id' => $otherNote->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot get a note from another team', function (): void {\n        $otherNote = Note::withoutEvents(fn () => Note::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetNoteTool::class, [\n                'id' => $otherNote->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/OpportunityToolsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Opportunity\\CreateOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\DeleteOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\GetOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\ListOpportunitiesTool;\nuse App\\Mcp\\Tools\\Opportunity\\UpdateOpportunityTool;\nuse App\\Models\\Company;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nafterEach(function () {\n    Opportunity::clearBootedModels();\n});\n\nit('can get an opportunity by ID', function (): void {\n    $opportunity = Opportunity::factory()->for($this->team)->create(['name' => 'Big Deal']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(GetOpportunityTool::class, ['id' => $opportunity->id])\n        ->assertOk()\n        ->assertSee('Big Deal');\n});\n\nit('can update an opportunity via MCP tool', function (): void {\n    $opportunity = Opportunity::factory()->for($this->team)->create(['name' => 'Old Deal']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateOpportunityTool::class, [\n            'id' => $opportunity->id,\n            'name' => 'New Deal',\n        ])\n        ->assertOk()\n        ->assertSee('New Deal');\n\n    expect($opportunity->refresh()->name)->toBe('New Deal');\n});\n\nit('can delete an opportunity via MCP tool', function (): void {\n    $opportunity = Opportunity::factory()->for($this->team)->create(['name' => 'Closing Deal']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(DeleteOpportunityTool::class, [\n            'id' => $opportunity->id,\n        ])\n        ->assertOk()\n        ->assertSee('has been deleted');\n\n    expect($opportunity->refresh()->trashed())->toBeTrue();\n});\n\nit('can filter opportunities by contact_id', function (): void {\n    $person = People::factory()->for($this->team)->create();\n    $matchingOpp = Opportunity::factory()->for($this->team)->create([\n        'contact_id' => $person->id,\n    ]);\n    $otherOpp = Opportunity::factory()->for($this->team)->create();\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(ListOpportunitiesTool::class, [\n            'contact_id' => $person->id,\n        ])\n        ->assertOk()\n        ->assertSee($matchingOpp->name)\n        ->assertDontSee($otherOpp->name);\n});\n\ndescribe('team scoping', function () {\n    beforeEach(function () {\n        Opportunity::addGlobalScope(new TeamScope);\n    });\n\n    it('scopes opportunities to current team', function (): void {\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n            'name' => 'Other Team Deal',\n        ]));\n        $ownOpportunity = Opportunity::factory()->for($this->team)->create(['name' => 'Own Team Deal']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListOpportunitiesTool::class)\n            ->assertOk()\n            ->assertSee('Own Team Deal')\n            ->assertDontSee('Other Team Deal');\n    });\n\n    it('cannot update an opportunity from another team', function (): void {\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateOpportunityTool::class, [\n                'id' => $otherOpportunity->id,\n                'name' => 'Hacked',\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot delete an opportunity from another team', function (): void {\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteOpportunityTool::class, [\n                'id' => $otherOpportunity->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot get an opportunity from another team', function (): void {\n        $otherOpportunity = Opportunity::withoutEvents(fn () => Opportunity::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetOpportunityTool::class, [\n                'id' => $otherOpportunity->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('rejects company_id from another team when creating opportunity', function (): void {\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateOpportunityTool::class, [\n                'name' => 'Test Deal',\n                'company_id' => $otherCompany->id,\n            ])\n            ->assertHasErrors();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/PeopleToolsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\People\\CreatePeopleTool;\nuse App\\Mcp\\Tools\\People\\DeletePeopleTool;\nuse App\\Mcp\\Tools\\People\\GetPeopleTool;\nuse App\\Mcp\\Tools\\People\\ListPeopleTool;\nuse App\\Mcp\\Tools\\People\\UpdatePeopleTool;\nuse App\\Models\\Company;\nuse App\\Models\\People;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nafterEach(function () {\n    People::clearBootedModels();\n});\n\nit('can get a person by ID', function (): void {\n    $person = People::factory()->for($this->team)->create(['name' => 'Jane Doe']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(GetPeopleTool::class, ['id' => $person->id])\n        ->assertOk()\n        ->assertSee('Jane Doe');\n});\n\nit('can update a person via MCP tool', function (): void {\n    $person = People::factory()->for($this->team)->create(['name' => 'Old Name']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdatePeopleTool::class, [\n            'id' => $person->id,\n            'name' => 'New Name',\n        ])\n        ->assertOk()\n        ->assertSee('New Name');\n\n    expect($person->refresh()->name)->toBe('New Name');\n});\n\nit('can delete a person via MCP tool', function (): void {\n    $person = People::factory()->for($this->team)->create(['name' => 'Jane Doe']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(DeletePeopleTool::class, [\n            'id' => $person->id,\n        ])\n        ->assertOk()\n        ->assertSee('has been deleted');\n\n    expect($person->refresh()->trashed())->toBeTrue();\n});\n\ndescribe('team scoping', function () {\n    beforeEach(function () {\n        People::addGlobalScope(new TeamScope);\n    });\n\n    it('scopes people to current team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create([\n            'name' => 'Other Team Person',\n        ]));\n        $ownPerson = People::factory()->for($this->team)->create(['name' => 'Own Team Person']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListPeopleTool::class)\n            ->assertOk()\n            ->assertSee('Own Team Person')\n            ->assertDontSee('Other Team Person');\n    });\n\n    it('cannot update a person from another team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdatePeopleTool::class, [\n                'id' => $otherPerson->id,\n                'name' => 'Hacked',\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot delete a person from another team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeletePeopleTool::class, [\n                'id' => $otherPerson->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot get a person from another team', function (): void {\n        $otherPerson = People::withoutEvents(fn () => People::factory()->for(Team::factory())->create());\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetPeopleTool::class, [\n                'id' => $otherPerson->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('rejects company_id from another team when creating person', function (): void {\n        $otherTeam = Team::factory()->create();\n        $otherCompany = Company::withoutEvents(fn () => Company::factory()->create([\n            'team_id' => $otherTeam->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreatePeopleTool::class, [\n                'name' => 'Test Person',\n                'company_id' => $otherCompany->id,\n            ])\n            ->assertHasErrors();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/RelaticleServerTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Prompts\\CrmOverviewPrompt;\nuse App\\Mcp\\Resources\\CompanySchemaResource;\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Company\\CreateCompanyTool;\nuse App\\Mcp\\Tools\\Company\\DeleteCompanyTool;\nuse App\\Mcp\\Tools\\Company\\ListCompaniesTool;\nuse App\\Mcp\\Tools\\Company\\UpdateCompanyTool;\nuse App\\Mcp\\Tools\\Note\\CreateNoteTool;\nuse App\\Mcp\\Tools\\Note\\ListNotesTool;\nuse App\\Mcp\\Tools\\Opportunity\\CreateOpportunityTool;\nuse App\\Mcp\\Tools\\Opportunity\\ListOpportunitiesTool;\nuse App\\Mcp\\Tools\\People\\CreatePeopleTool;\nuse App\\Mcp\\Tools\\People\\ListPeopleTool;\nuse App\\Mcp\\Tools\\People\\UpdatePeopleTool;\nuse App\\Mcp\\Tools\\Task\\CreateTaskTool;\nuse App\\Mcp\\Tools\\Task\\ListTasksTool;\nuse App\\Models\\Company;\nuse App\\Models\\People;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('can list companies via MCP tool', function (): void {\n    Company::factory(3)->for($this->team)->create();\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(ListCompaniesTool::class);\n\n    $response->assertOk();\n});\n\nit('can create a company via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreateCompanyTool::class, [\n            'name' => 'MCP Test Corp',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('MCP Test Corp');\n\n    $this->assertDatabaseHas('companies', [\n        'name' => 'MCP Test Corp',\n        'team_id' => $this->team->id,\n    ]);\n});\n\nit('can update a company via MCP tool', function (): void {\n    $company = Company::factory()->for($this->team)->create(['name' => 'Old Name']);\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(UpdateCompanyTool::class, [\n            'id' => $company->id,\n            'name' => 'New Name',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('New Name');\n\n    expect($company->refresh()->name)->toBe('New Name');\n});\n\nit('can delete a company via MCP tool', function (): void {\n    $company = Company::factory()->for($this->team)->create();\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(DeleteCompanyTool::class, [\n            'id' => $company->id,\n        ]);\n\n    $response->assertOk()\n        ->assertSee('has been deleted');\n\n    expect($company->refresh()->trashed())->toBeTrue();\n});\n\nit('can list people via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(ListPeopleTool::class);\n\n    $response->assertOk();\n});\n\nit('can create a person via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreatePeopleTool::class, [\n            'name' => 'John Doe',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('John Doe');\n});\n\nit('can list opportunities via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(ListOpportunitiesTool::class);\n\n    $response->assertOk();\n});\n\nit('can create an opportunity via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreateOpportunityTool::class, [\n            'name' => 'Big Deal',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('Big Deal');\n});\n\nit('can list tasks via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(ListTasksTool::class);\n\n    $response->assertOk();\n});\n\nit('can create a task via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreateTaskTool::class, [\n            'title' => 'Follow up call',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('Follow up call');\n});\n\nit('can list notes via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(ListNotesTool::class);\n\n    $response->assertOk();\n});\n\nit('can create a note via MCP tool', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreateNoteTool::class, [\n            'title' => 'Meeting notes',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('Meeting notes');\n});\n\nit('can read the company schema resource', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->resource(CompanySchemaResource::class);\n\n    $response->assertOk()\n        ->assertSee('company')\n        ->assertSee('custom_fields');\n});\n\nit('validates company_id exists when creating a person via MCP', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreatePeopleTool::class, [\n            'name' => 'Test Person',\n            'company_id' => 'non-existent-id',\n        ]);\n\n    $response->assertHasErrors(['company id']);\n});\n\nit('validates company_id exists when updating a person via MCP', function (): void {\n    $person = People::factory()->for($this->team)->create();\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(UpdatePeopleTool::class, [\n            'id' => $person->id,\n            'company_id' => 'non-existent-id',\n        ]);\n\n    $response->assertHasErrors(['company id']);\n});\n\nit('validates company_id and contact_id exist when creating opportunity via MCP', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(CreateOpportunityTool::class, [\n            'name' => 'Test Deal',\n            'company_id' => 'non-existent-id',\n            'contact_id' => 'non-existent-id',\n        ]);\n\n    $response->assertHasErrors(['company id', 'contact id']);\n});\n\nit('can filter companies by name via MCP search param', function (): void {\n    Company::factory()->for($this->team)->create(['name' => 'Acme Corp']);\n    Company::factory()->for($this->team)->create(['name' => 'Beta Inc']);\n\n    $response = RelaticleServer::actingAs($this->user)\n        ->tool(ListCompaniesTool::class, [\n            'search' => 'Acme',\n        ]);\n\n    $response->assertOk()\n        ->assertSee('Acme Corp')\n        ->assertDontSee('Beta Inc');\n});\n\nit('can read the CRM overview prompt', function (): void {\n    $response = RelaticleServer::actingAs($this->user)\n        ->prompt(CrmOverviewPrompt::class);\n\n    $response->assertOk()\n        ->assertSee('CRM Overview');\n});\n\nit('returns error when updating non-existent company', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateCompanyTool::class, [\n            'id' => 'non-existent-id',\n            'name' => 'Ghost',\n        ])\n        ->assertHasErrors(['not found']);\n});\n\nit('returns error when deleting non-existent company', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->tool(DeleteCompanyTool::class, [\n            'id' => 'non-existent-id',\n        ])\n        ->assertHasErrors(['not found']);\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/SchemaResourcesTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Resources\\CompanySchemaResource;\nuse App\\Mcp\\Resources\\NoteSchemaResource;\nuse App\\Mcp\\Resources\\OpportunitySchemaResource;\nuse App\\Mcp\\Resources\\PeopleSchemaResource;\nuse App\\Mcp\\Resources\\TaskSchemaResource;\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldSection;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n});\n\nit('returns valid company schema with correct fields', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->resource(CompanySchemaResource::class)\n        ->assertOk()\n        ->assertSee('\"entity\"')\n        ->assertSee('company')\n        ->assertSee('\"name\"')\n        ->assertSee('\"relationships\"')\n        ->assertSee('\"custom_fields\"');\n});\n\nit('returns valid people schema with correct fields', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->resource(PeopleSchemaResource::class)\n        ->assertOk()\n        ->assertSee('people')\n        ->assertSee('\"name\"')\n        ->assertSee('\"company_id\"');\n});\n\nit('returns valid opportunity schema with correct fields', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->resource(OpportunitySchemaResource::class)\n        ->assertOk()\n        ->assertSee('opportunity')\n        ->assertSee('\"company_id\"')\n        ->assertSee('\"contact_id\"');\n});\n\nit('returns valid task schema with correct fields', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->resource(TaskSchemaResource::class)\n        ->assertOk()\n        ->assertSee('task')\n        ->assertSee('\"title\"');\n});\n\nit('returns valid note schema with correct fields', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->resource(NoteSchemaResource::class)\n        ->assertOk()\n        ->assertSee('note')\n        ->assertSee('\"title\"');\n});\n\nit('includes custom fields in schema when they exist', function (): void {\n    $team = $this->user->personalTeam();\n\n    $section = CustomFieldSection::create([\n        'tenant_id' => $team->id,\n        'entity_type' => 'company',\n        'name' => 'Test Section',\n        'code' => 'test_section',\n        'type' => 'section',\n        'sort_order' => 1,\n        'active' => true,\n    ]);\n\n    CustomField::create([\n        'tenant_id' => $team->id,\n        'custom_field_section_id' => $section->id,\n        'entity_type' => 'company',\n        'code' => 'test_field',\n        'name' => 'Test Field',\n        'type' => 'text',\n        'sort_order' => 1,\n        'active' => true,\n        'validation_rules' => [],\n    ]);\n\n    RelaticleServer::actingAs($this->user)\n        ->resource(CompanySchemaResource::class)\n        ->assertOk()\n        ->assertSee('test_field')\n        ->assertSee('Test Field');\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/TaskToolsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Task\\AttachTaskToEntitiesTool;\nuse App\\Mcp\\Tools\\Task\\CreateTaskTool;\nuse App\\Mcp\\Tools\\Task\\DeleteTaskTool;\nuse App\\Mcp\\Tools\\Task\\GetTaskTool;\nuse App\\Mcp\\Tools\\Task\\ListTasksTool;\nuse App\\Mcp\\Tools\\Task\\UpdateTaskTool;\nuse App\\Models\\Company;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nafterEach(function () {\n    Task::clearBootedModels();\n});\n\nit('can create a task with assignees and company', function (): void {\n    $company = Company::factory()->for($this->team)->create();\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(CreateTaskTool::class, [\n            'title' => 'Follow Up',\n            'company_ids' => [$company->id],\n            'assignee_ids' => [$this->user->id],\n        ])\n        ->assertOk()\n        ->assertSee('Follow Up');\n\n    $task = Task::query()->where('title', 'Follow Up')->firstOrFail();\n    expect($task->companies)->toHaveCount(1)\n        ->and($task->assignees)->toHaveCount(1)\n        ->and($task->assignees->first()->id)->toBe($this->user->id);\n});\n\nit('can update task assignees', function (): void {\n    $task = Task::factory()->for($this->team)->create();\n    $member = User::factory()->create();\n    $this->team->users()->attach($member);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateTaskTool::class, [\n            'id' => $task->id,\n            'assignee_ids' => [$member->id],\n        ])\n        ->assertOk();\n\n    expect($task->refresh()->assignees)->toHaveCount(1)\n        ->and($task->assignees->first()->id)->toBe($member->id);\n});\n\nit('can get a task by ID', function (): void {\n    $task = Task::factory()->for($this->team)->create(['title' => 'Follow Up Call']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(GetTaskTool::class, ['id' => $task->id])\n        ->assertOk()\n        ->assertSee('Follow Up Call');\n});\n\nit('can update a task via MCP tool', function (): void {\n    $task = Task::factory()->for($this->team)->create(['title' => 'Old Task']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(UpdateTaskTool::class, [\n            'id' => $task->id,\n            'title' => 'New Task',\n        ])\n        ->assertOk()\n        ->assertSee('New Task');\n\n    expect($task->refresh()->title)->toBe('New Task');\n});\n\nit('can delete a task via MCP tool', function (): void {\n    $task = Task::factory()->for($this->team)->create(['title' => 'Delete Me']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(DeleteTaskTool::class, [\n            'id' => $task->id,\n        ])\n        ->assertOk()\n        ->assertSee('has been deleted');\n\n    expect($task->refresh()->trashed())->toBeTrue();\n});\n\nit('can attach assignees to a task', function (): void {\n    $task = Task::factory()->for($this->team)->create();\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(AttachTaskToEntitiesTool::class, [\n            'id' => $task->id,\n            'assignee_ids' => [$this->user->id],\n        ])\n        ->assertOk();\n\n    expect($task->refresh()->assignees)->toHaveCount(1);\n});\n\nit('can filter tasks by company_id', function (): void {\n    $company = Company::factory()->for($this->team)->create();\n    $linkedTask = Task::factory()->for($this->team)->create(['title' => 'Linked Task']);\n    $linkedTask->companies()->attach($company);\n    $unlinkedTask = Task::factory()->for($this->team)->create(['title' => 'Unlinked Task']);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(ListTasksTool::class, [\n            'company_id' => $company->id,\n        ])\n        ->assertOk()\n        ->assertSee('Linked Task')\n        ->assertDontSee('Unlinked Task');\n});\n\ndescribe('team scoping', function () {\n    beforeEach(function () {\n        Task::addGlobalScope(new TeamScope);\n    });\n\n    it('scopes tasks to current team', function (): void {\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n            'title' => 'Other Team Task',\n        ]));\n        $ownTask = Task::factory()->for($this->team)->create(['title' => 'Own Team Task']);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListTasksTool::class)\n            ->assertOk()\n            ->assertSee('Own Team Task')\n            ->assertDontSee('Other Team Task');\n    });\n\n    it('cannot update a task from another team', function (): void {\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateTaskTool::class, [\n                'id' => $otherTask->id,\n                'title' => 'Hacked',\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot delete a task from another team', function (): void {\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteTaskTool::class, [\n                'id' => $otherTask->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n\n    it('cannot get a task from another team', function (): void {\n        $otherTask = Task::withoutEvents(fn () => Task::factory()->create([\n            'team_id' => Team::factory()->create()->id,\n        ]));\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(GetTaskTool::class, [\n                'id' => $otherTask->id,\n            ])\n            ->assertHasErrors(['not found']);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/TokenAbilitiesMcpTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\Company\\CreateCompanyTool;\nuse App\\Mcp\\Tools\\Company\\DeleteCompanyTool;\nuse App\\Mcp\\Tools\\Company\\ListCompaniesTool;\nuse App\\Mcp\\Tools\\Company\\UpdateCompanyTool;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Laravel\\Sanctum\\Exceptions\\MissingAbilityException;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\ndescribe('read-only token', function (): void {\n    beforeEach(function (): void {\n        $token = $this->user->createToken('test', ['read']);\n        $this->user->withAccessToken($token->accessToken);\n    });\n\n    it('can list companies', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class)\n            ->assertOk();\n    });\n\n    it('cannot create a company', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, ['name' => 'Blocked']);\n    })->throws(MissingAbilityException::class);\n\n    it('cannot update a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'name' => 'Blocked',\n            ]);\n    })->throws(MissingAbilityException::class);\n\n    it('cannot delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteCompanyTool::class, [\n                'id' => $company->id,\n            ]);\n    })->throws(MissingAbilityException::class);\n});\n\ndescribe('create-only token', function (): void {\n    beforeEach(function (): void {\n        $token = $this->user->createToken('test', ['create']);\n        $this->user->withAccessToken($token->accessToken);\n    });\n\n    it('cannot list companies', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class);\n    })->throws(MissingAbilityException::class);\n\n    it('can create a company', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, ['name' => 'Allowed Corp'])\n            ->assertOk();\n    });\n\n    it('cannot delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteCompanyTool::class, [\n                'id' => $company->id,\n            ]);\n    })->throws(MissingAbilityException::class);\n});\n\ndescribe('wildcard token', function (): void {\n    beforeEach(function (): void {\n        $token = $this->user->createToken('test', ['*']);\n        $this->user->withAccessToken($token->accessToken);\n    });\n\n    it('can list companies', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class)\n            ->assertOk();\n    });\n\n    it('can create a company', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, ['name' => 'Wildcard Corp'])\n            ->assertOk();\n    });\n\n    it('can update a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(UpdateCompanyTool::class, [\n                'id' => $company->id,\n                'name' => 'Updated',\n            ])\n            ->assertOk();\n    });\n\n    it('can delete a company', function (): void {\n        $company = Company::factory()->for($this->team)->create();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(DeleteCompanyTool::class, [\n                'id' => $company->id,\n            ])\n            ->assertOk();\n    });\n});\n\ndescribe('no token (session auth)', function (): void {\n    it('allows all operations without a token', function (): void {\n        RelaticleServer::actingAs($this->user)\n            ->tool(ListCompaniesTool::class)\n            ->assertOk();\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(CreateCompanyTool::class, ['name' => 'Session Corp'])\n            ->assertOk();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Mcp/WhoAmiToolTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Mcp\\Servers\\RelaticleServer;\nuse App\\Mcp\\Tools\\WhoAmiTool;\nuse App\\Models\\User;\nuse Laravel\\Sanctum\\Exceptions\\MissingAbilityException;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n    $this->team = $this->user->personalTeam();\n});\n\nit('returns current user info', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->tool(WhoAmiTool::class)\n        ->assertOk()\n        ->assertSee($this->user->name)\n        ->assertSee($this->user->email);\n});\n\nit('returns current team info', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->tool(WhoAmiTool::class)\n        ->assertOk()\n        ->assertSee($this->team->name);\n});\n\nit('returns team members', function (): void {\n    $member = User::factory()->create();\n    $this->team->users()->attach($member);\n\n    RelaticleServer::actingAs($this->user)\n        ->tool(WhoAmiTool::class)\n        ->assertOk()\n        ->assertSee($this->user->name)\n        ->assertSee($member->name)\n        ->assertSee($member->email);\n});\n\nit('returns wildcard abilities when no token', function (): void {\n    RelaticleServer::actingAs($this->user)\n        ->tool(WhoAmiTool::class)\n        ->assertOk()\n        ->assertSee('\"*\"');\n});\n\ndescribe('token abilities', function (): void {\n    it('requires read ability', function (): void {\n        $token = $this->user->createToken('test', ['create']);\n        $this->user->withAccessToken($token->accessToken);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(WhoAmiTool::class);\n    })->throws(MissingAbilityException::class);\n\n    it('allows read-only token', function (): void {\n        $token = $this->user->createToken('test', ['read']);\n        $this->user->withAccessToken($token->accessToken);\n\n        RelaticleServer::actingAs($this->user)\n            ->tool(WhoAmiTool::class)\n            ->assertOk();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Migrations/UlidMigrationTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Schema;\n\nmutates(User::class, Team::class, Company::class, People::class, Opportunity::class, Task::class, Note::class);\n\n/**\n * Tests for the ULID migration.\n *\n * These tests verify that:\n * 1. Fresh installs work correctly (tables already use ULID)\n * 2. All models can be created and relationships work\n * 3. Pivot tables function correctly\n * 4. Polymorphic relationships work\n */\ndescribe('ULID Migration', function (): void {\n\n    it('uses ULID for user primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n\n        expect($user->id)->toBeString()\n            ->and(strlen($user->id))->toBe(26);\n    });\n\n    it('uses ULID for team primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $team = $user->currentTeam;\n\n        expect($team->id)->toBeString()\n            ->and(strlen($team->id))->toBe(26);\n    });\n\n    it('uses ULID for company primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $company = Company::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        expect($company->id)->toBeString()\n            ->and(strlen($company->id))->toBe(26);\n    });\n\n    it('uses ULID for people primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $person = People::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        expect($person->id)->toBeString()\n            ->and(strlen($person->id))->toBe(26);\n    });\n\n    it('uses ULID for opportunity primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $opportunity = Opportunity::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        expect($opportunity->id)->toBeString()\n            ->and(strlen($opportunity->id))->toBe(26);\n    });\n\n    it('uses ULID for task primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $task = Task::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        expect($task->id)->toBeString()\n            ->and(strlen($task->id))->toBe(26);\n    });\n\n    it('uses ULID for note primary key', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $note = Note::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        expect($note->id)->toBeString()\n            ->and(strlen($note->id))->toBe(26);\n    });\n\n    it('maintains user-team relationship', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $team = $user->currentTeam;\n\n        expect($team->user_id)->toBe($user->id)\n            ->and($user->current_team_id)->toBe($team->id);\n    });\n\n    it('maintains team-user pivot relationship', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $team = $user->currentTeam;\n\n        // Attach user to team via pivot table\n        $team->users()->attach($user, ['role' => 'admin']);\n\n        // Refresh relationships\n        $user->refresh();\n        $team->refresh();\n\n        expect($user->teams)->toHaveCount(1)\n            ->and($user->teams->first()->id)->toBe($team->id)\n            ->and($team->users)->toHaveCount(1)\n            ->and($team->users->first()->id)->toBe($user->id);\n    });\n\n    it('maintains company foreign key relationships', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $team = $user->currentTeam;\n        $company = Company::factory()->create([\n            'team_id' => $team->id,\n            'creator_id' => $user->id,\n            'account_owner_id' => $user->id,\n        ]);\n\n        expect($company->team_id)->toBe($team->id)\n            ->and($company->creator_id)->toBe($user->id)\n            ->and($company->account_owner_id)->toBe($user->id)\n            ->and($company->team->id)->toBe($team->id)\n            ->and($company->creator->id)->toBe($user->id)\n            ->and($company->accountOwner->id)->toBe($user->id);\n    });\n\n    it('maintains people-company relationship', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $company = Company::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n        $person = People::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n            'company_id' => $company->id,\n        ]);\n\n        expect($person->company_id)->toBe($company->id)\n            ->and($person->company->id)->toBe($company->id)\n            ->and($company->people)->toHaveCount(1)\n            ->and($company->people->first()->id)->toBe($person->id);\n    });\n\n    it('maintains opportunity relationships', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $company = Company::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n        $person = People::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n            'company_id' => $company->id,\n        ]);\n        $opportunity = Opportunity::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n            'company_id' => $company->id,\n            'contact_id' => $person->id,\n        ]);\n\n        expect($opportunity->company_id)->toBe($company->id)\n            ->and($opportunity->contact_id)->toBe($person->id)\n            ->and($opportunity->company->id)->toBe($company->id)\n            ->and($opportunity->contact->id)->toBe($person->id);\n    });\n\n    it('maintains task-user pivot relationship', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $task = Task::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        $task->assignees()->attach($user);\n\n        expect($task->assignees)->toHaveCount(1)\n            ->and($task->assignees->first()->id)->toBe($user->id);\n    });\n\n    it('maintains taskables polymorphic relationship', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $company = Company::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n        $task = Task::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        $task->companies()->attach($company);\n\n        expect($task->companies)->toHaveCount(1)\n            ->and($task->companies->first()->id)->toBe($company->id)\n            ->and($company->tasks)->toHaveCount(1)\n            ->and($company->tasks->first()->id)->toBe($task->id);\n    });\n\n    it('maintains noteables polymorphic relationship', function (): void {\n        $user = User::factory()->withTeam()->create();\n        $company = Company::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n        $note = Note::factory()->create([\n            'team_id' => $user->currentTeam->id,\n            'creator_id' => $user->id,\n        ]);\n\n        $note->companies()->attach($company);\n\n        expect($note->companies)->toHaveCount(1)\n            ->and($note->companies->first()->id)->toBe($company->id)\n            ->and($company->notes)->toHaveCount(1)\n            ->and($company->notes->first()->id)->toBe($note->id);\n    });\n\n    it('has correct column types for primary keys', function (): void {\n        $tables = ['users', 'teams', 'companies', 'people', 'opportunities', 'tasks', 'notes'];\n\n        foreach ($tables as $table) {\n            $columnType = Schema::getColumnType($table, 'id');\n            expect(in_array($columnType, ['string', 'char', 'varchar', 'bpchar', 'text'], true))\n                ->toBeTrue(\"Expected {$table}.id to be string type, got {$columnType}\");\n        }\n    });\n\n    it('has correct column types for foreign keys', function (): void {\n        $foreignKeys = [\n            'companies' => ['team_id', 'creator_id', 'account_owner_id'],\n            'people' => ['team_id', 'creator_id', 'company_id'],\n            'opportunities' => ['team_id', 'creator_id', 'company_id', 'contact_id'],\n            'tasks' => ['team_id', 'creator_id'],\n            'notes' => ['team_id', 'creator_id'],\n            'users' => ['current_team_id'],\n            'teams' => ['user_id'],\n        ];\n\n        foreach ($foreignKeys as $table => $columns) {\n            foreach ($columns as $column) {\n                if (Schema::hasColumn($table, $column)) {\n                    $columnType = Schema::getColumnType($table, $column);\n                    expect(in_array($columnType, ['string', 'char', 'varchar', 'bpchar', 'text'], true))\n                        ->toBeTrue(\"Expected {$table}.{$column} to be string type, got {$columnType}\");\n                }\n            }\n        }\n    });\n\n    it('has integer primary key for pivot tables', function (): void {\n        $pivotTables = ['team_user', 'task_user', 'taskables', 'noteables'];\n\n        foreach ($pivotTables as $table) {\n            if (Schema::hasTable($table) && Schema::hasColumn($table, 'id')) {\n                $columnType = Schema::getColumnType($table, 'id');\n                // Pivot tables can have either int or string id depending on database\n                expect(in_array($columnType, ['integer', 'bigint', 'int4', 'int8', 'string', 'char', 'varchar', 'bpchar', 'text'], true))\n                    ->toBeTrue(\"Unexpected column type for {$table}.id: {$columnType}\");\n            }\n        }\n    });\n\n});\n"
  },
  {
    "path": "tests/Feature/Models/Scopes/TeamScopeTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Scopes\\TeamScope;\nuse App\\Models\\User;\n\nmutates(TeamScope::class);\n\nafterEach(function (): void {\n    Company::clearBootedModels();\n});\n\nit('returns zero results when no user is authenticated', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    Company::withoutEvents(fn () => Company::factory()->create([\n        'team_id' => $team->id,\n        'account_owner_id' => $user->id,\n    ]));\n\n    Company::addGlobalScope(new TeamScope);\n\n    expect(Company::query()->count())->toBe(0);\n});\n\nit('scopes results to the authenticated user current team', function (): void {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    $ownCompany = Company::withoutEvents(fn () => Company::factory()->create([\n        'team_id' => $team->id,\n        'account_owner_id' => $user->id,\n    ]));\n\n    $otherUser = User::factory()->withTeam()->create();\n    Company::withoutEvents(fn () => Company::factory()->create([\n        'team_id' => $otherUser->currentTeam->id,\n        'account_owner_id' => $otherUser->id,\n    ]));\n\n    $this->actingAs($user);\n    Company::addGlobalScope(new TeamScope);\n\n    $results = Company::query()->get();\n\n    expect($results)->toHaveCount(1)\n        ->and($results->first()->id)->toBe($ownCompany->id);\n});\n"
  },
  {
    "path": "tests/Feature/Onboarding/CreateTeamOnboardingTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\Jetstream\\CreateTeam as CreateTeamAction;\nuse App\\Filament\\Pages\\CreateTeam;\nuse App\\Filament\\Resources\\CompanyResource;\nuse App\\Listeners\\CreateTeamCustomFields;\nuse App\\Models\\Company;\nuse App\\Models\\CustomField;\nuse App\\Models\\CustomFieldValue;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Relaticle\\OnboardSeed\\OnboardSeedManager;\n\nmutates(CreateTeam::class, CreateTeamAction::class, OnboardSeedManager::class, CreateTeamCustomFields::class);\n\nit('renders the create team page for teamless users', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->assertSuccessful()\n        ->assertSee('Create your workspace');\n});\n\nit('creates a team with name and auto-generated slug', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Acme Corp',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $team = Team::query()->where('name', 'Acme Corp')->first();\n\n    expect($team)->not->toBeNull()\n        ->and($team->slug)->toBe('acme-corp');\n});\n\nit('creates a team with a custom slug', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Acme Corp',\n            'slug' => 'my-workspace',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $team = Team::query()->where('name', 'Acme Corp')->first();\n\n    expect($team)->not->toBeNull()\n        ->and($team->slug)->toBe('my-workspace');\n});\n\nit('validates slug format', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Acme Corp',\n            'slug' => 'INVALID SLUG!!',\n        ])\n        ->call('register')\n        ->assertHasFormErrors(['slug']);\n});\n\nit('validates slug uniqueness', function (): void {\n    $existingUser = User::factory()->create();\n    Team::factory()->create(['slug' => 'taken-slug', 'user_id' => $existingUser->id]);\n\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Acme Corp',\n            'slug' => 'taken-slug',\n        ])\n        ->call('register')\n        ->assertHasFormErrors(['slug']);\n});\n\nit('requires a team name', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => '',\n        ])\n        ->call('register')\n        ->assertHasFormErrors(['name']);\n});\n\nit('marks first team as personal team', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'My First Team',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $team = $user->fresh()->ownedTeams->first();\n\n    expect($team->personal_team)->toBeTrue();\n});\n\nit('marks subsequent teams as non-personal', function (): void {\n    $user = User::factory()->withPersonalTeam()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Second Team',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $secondTeam = $user->fresh()->ownedTeams()->where('name', 'Second Team')->first();\n\n    expect($secondTeam->personal_team)->toBeFalse();\n});\n\nit('redirects to companies index after team creation', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Redirect Team',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors()\n        ->assertRedirect(CompanyResource::getUrl('index', ['tenant' => $user->fresh()->currentTeam]));\n});\n\nit('seeds demo data when first team is created', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Seed Test Team',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $team = $user->fresh()->personalTeam();\n\n    expect($team)->not->toBeNull()\n        ->and(Company::where('team_id', $team->id)->count())->toBe(4)\n        ->and(People::where('team_id', $team->id)->count())->toBe(4)\n        ->and(Opportunity::where('team_id', $team->id)->count())->toBe(4)\n        ->and(Task::where('team_id', $team->id)->count())->toBe(4)\n        ->and(Note::where('team_id', $team->id)->count())->toBe(5);\n});\n\nit('creates all custom fields for the first team', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Custom Fields Team',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $team = $user->fresh()->personalTeam();\n\n    $fields = CustomField::withoutGlobalScopes()\n        ->where('tenant_id', $team->id)\n        ->get()\n        ->groupBy('entity_type');\n\n    expect($fields->get('company'))->toHaveCount(3)\n        ->and($fields->get('people'))->toHaveCount(4)\n        ->and($fields->get('opportunity'))->toHaveCount(3)\n        ->and($fields->get('task'))->toHaveCount(4)\n        ->and($fields->get('note'))->toHaveCount(1);\n});\n\nit('seeds people linked to their correct companies', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Link Test Team',\n        ])\n        ->call('register');\n\n    $team = $user->fresh()->personalTeam();\n    $companies = Company::where('team_id', $team->id)->pluck('id', 'name');\n    $people = People::where('team_id', $team->id)->get();\n\n    $expectedMapping = [\n        'Tim Cook' => 'Apple',\n        'Brian Chesky' => 'Airbnb',\n        'Dylan Field' => 'Figma',\n        'Ivan Zhao' => 'Notion',\n    ];\n\n    foreach ($people as $person) {\n        $expectedCompany = $expectedMapping[$person->name];\n        expect($person->company_id)->toBe($companies[$expectedCompany]);\n    }\n});\n\nit('seeds tasks and opportunities with board positions', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Board Test Team',\n        ])\n        ->call('register');\n\n    $team = $user->fresh()->personalTeam();\n\n    $tasks = Task::where('team_id', $team->id)->get();\n    $taskPositions = $tasks->pluck('order_column');\n    expect($tasks)->toHaveCount(4)\n        ->and($taskPositions->every(fn ($v) => $v !== null))->toBeTrue()\n        ->and($taskPositions->unique())->toHaveCount(4);\n\n    $opportunities = Opportunity::where('team_id', $team->id)->get();\n    $opportunityPositions = $opportunities->pluck('order_column');\n    expect($opportunities)->toHaveCount(4)\n        ->and($opportunityPositions->every(fn ($v) => $v !== null))->toBeTrue()\n        ->and($opportunityPositions->unique())->toHaveCount(4);\n});\n\nit('seeds custom field values correctly', function (): void {\n    $user = User::factory()->create();\n\n    $this->actingAs($user);\n\n    livewire(CreateTeam::class)\n        ->fillForm([\n            'name' => 'Values Test Team',\n        ])\n        ->call('register');\n\n    $team = $user->fresh()->personalTeam();\n\n    $apple = Company::where('team_id', $team->id)->where('name', 'Apple')->first();\n    $companyFields = CustomField::withoutGlobalScopes()\n        ->where('tenant_id', $team->id)\n        ->forEntity(Company::class)\n        ->pluck('id', 'code');\n\n    $appleValues = CustomFieldValue::withoutGlobalScopes()\n        ->where('entity_id', $apple->id)\n        ->where('entity_type', $apple->getMorphClass())\n        ->get()\n        ->keyBy('custom_field_id');\n\n    expect($appleValues[$companyFields['domains']]->json_value)->toContain('https://apple.com')\n        ->and($appleValues[$companyFields['icp']]->boolean_value)->toBeTrue()\n        ->and($appleValues[$companyFields['linkedin']]->json_value)->toContain('https://www.linkedin.com/company/apple');\n});\n"
  },
  {
    "path": "tests/Feature/PersonalAccessToken/TeamIdImmutabilityTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\PersonalAccessToken;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Str;\nuse Symfony\\Component\\HttpKernel\\Exception\\HttpException;\n\nmutates(PersonalAccessToken::class);\n\ntest('team_id can be set when initially null', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    $token = $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n    ]);\n\n    expect($token->team_id)->toBeNull();\n\n    $token->update(['team_id' => $team->id]);\n\n    expect($token->fresh()->team_id)->toBe($team->id);\n});\n\ntest('team_id cannot be changed once set', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n    $otherTeam = Team::factory()->create();\n\n    $token = $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n        'team_id' => $team->id,\n    ]);\n\n    $token->update(['team_id' => $otherTeam->id]);\n})->throws(LogicException::class, 'The team_id attribute cannot be changed after it has been set.');\n\ntest('team_id cannot be set to null once set', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    $token = $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n        'team_id' => $team->id,\n    ]);\n\n    $token->update(['team_id' => null]);\n})->throws(LogicException::class, 'The team_id attribute cannot be changed after it has been set.');\n\ntest('creating event allows token with valid team_id', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    $token = $user->tokens()->create([\n        'name' => 'Valid Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n        'team_id' => $team->id,\n    ]);\n\n    expect($token->team_id)->toBe($team->id);\n});\n\ntest('creating event allows token with null team_id', function () {\n    $user = User::factory()->withTeam()->create();\n\n    $token = $user->tokens()->create([\n        'name' => 'No Team Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n    ]);\n\n    expect($token->team_id)->toBeNull();\n});\n\ntest('creating event rejects token with team_id for another users team', function () {\n    $user = User::factory()->withTeam()->create();\n    $otherUser = User::factory()->withTeam()->create();\n    $otherTeam = $otherUser->currentTeam;\n\n    $user->tokens()->create([\n        'name' => 'Stolen Team Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n        'team_id' => $otherTeam->id,\n    ]);\n})->throws(HttpException::class);\n\ntest('cascade deletes tokens when team is deleted', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    $user->tokens()->create([\n        'name' => 'Team Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n        'team_id' => $team->id,\n    ]);\n\n    expect($user->tokens()->count())->toBe(1);\n\n    $team->forceDelete();\n\n    expect($user->tokens()->count())->toBe(0);\n});\n\ntest('other attributes can still be updated when team_id is set', function () {\n    $user = User::factory()->withTeam()->create();\n    $team = $user->currentTeam;\n\n    $token = $user->tokens()->create([\n        'name' => 'Test Token',\n        'token' => hash('sha256', Str::random(40)),\n        'abilities' => ['*'],\n        'team_id' => $team->id,\n    ]);\n\n    $token->update(['name' => 'Updated Token']);\n\n    expect($token->fresh())\n        ->name->toBe('Updated Token')\n        ->team_id->toBe($team->id);\n});\n"
  },
  {
    "path": "tests/Feature/Profile/AvatarServiceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Services\\AvatarService;\nuse Illuminate\\Cache\\ArrayStore;\nuse Illuminate\\Cache\\Repository;\n\nmutates(AvatarService::class);\n\nbeforeEach(function () {\n    $this->avatarService = new AvatarService(\n        cache: new Repository(new ArrayStore),\n        cacheTtl: 3600,\n        defaultTextColor: '#FFFFFF',\n        defaultBgColor: '#3182CE',\n        backgroundColors: ['#FF5733', '#33FF57', '#3357FF']\n    );\n});\n\nfunction extractInitialsFromSvg(string $dataUrl): string\n{\n    $base64 = str_replace('data:image/svg+xml;base64,', '', $dataUrl);\n    $svg = base64_decode($base64);\n    preg_match('/<text[^>]*>\\s*(\\S+)\\s*<\\/text>/s', $svg, $matches);\n\n    return trim($matches[1] ?? '');\n}\n\nit('handles edge cases in name analysis via generateAuto output', function () {\n    $emptyAvatar = $this->avatarService->generateAuto('');\n    expect($emptyAvatar)->toStartWith('data:image/svg+xml;base64,');\n\n    $singleCharAvatar = $this->avatarService->generateAuto('A');\n    expect($singleCharAvatar)->toStartWith('data:image/svg+xml;base64,');\n\n    expect($emptyAvatar)->not->toBe($singleCharAvatar);\n});\n\nit('produces visually distinct avatars for different name types', function () {\n    $vowelHeavy = $this->avatarService->generateAuto('Aoi Ueo');\n    $consonantHeavy = $this->avatarService->generateAuto('Brynhildr Skjeggestad');\n\n    expect($vowelHeavy)->not->toBe($consonantHeavy);\n\n    $withRareLetters = $this->avatarService->generateAuto('Xavi Quintanilla Jimenez');\n    $ordinary = $this->avatarService->generateAuto('Daniel Anderson');\n\n    expect($withRareLetters)->not->toBe($ordinary);\n});\n\nit('generates different background colors for different names', function () {\n    $avatar1 = $this->avatarService->generateAuto('John Smith');\n    $avatar2 = $this->avatarService->generateAuto('Jane Doe');\n\n    expect($avatar1)->not->toBe($avatar2);\n\n    $avatar3 = $this->avatarService->generateAuto('John Smith');\n    expect($avatar1)->toBe($avatar3);\n});\n\nit('correctly extracts initials from names', function () {\n    expect(extractInitialsFromSvg($this->avatarService->generate('John Smith')))->toBe('JS');\n    expect(extractInitialsFromSvg($this->avatarService->generate('John Smith', initialCount: 1)))->toBe('J');\n    expect(extractInitialsFromSvg($this->avatarService->generate('John')))->toBe('JO');\n    expect(extractInitialsFromSvg($this->avatarService->generate('O\\'Connor')))->toBe('OC');\n    expect(extractInitialsFromSvg($this->avatarService->generate('Jean-Claude')))->toBe('JC');\n});\n\nit('correctly handles names with special characters and symbols', function () {\n    expect(extractInitialsFromSvg($this->avatarService->generate('Jo.hn Smith')))->toBe('JS');\n    expect(extractInitialsFromSvg($this->avatarService->generate('Dr. John Smith')))->toBe('DS');\n\n    expect(extractInitialsFromSvg($this->avatarService->generate('John_Smith')))->toBe('JS');\n    expect(extractInitialsFromSvg($this->avatarService->generate('John_Do_e')))->toBe('JE');\n\n    expect(extractInitialsFromSvg($this->avatarService->generate('Jo.hn d_oe')))->toBe('JO');\n    expect(extractInitialsFromSvg($this->avatarService->generate('Jo.hn.d_oe')))->toBe('JO');\n\n    expect(extractInitialsFromSvg($this->avatarService->generate('John+Smith')))->toBe('JO');\n    expect(extractInitialsFromSvg($this->avatarService->generate('John@Smith')))->toBe('JO');\n\n    expect(extractInitialsFromSvg($this->avatarService->generate('J.o-h_n S.m-i_t.h')))->toBe('JI');\n    expect(extractInitialsFromSvg($this->avatarService->generate('...John...Smith...')))->toBe('JS');\n});\n\nit('validates colors properly', function () {\n    expect($this->avatarService->validateColor('#123456'))->toBeTrue();\n    expect($this->avatarService->validateColor('#abc'))->toBeTrue();\n    expect($this->avatarService->validateColor('rgb(10, 20, 30)'))->toBeTrue();\n    expect($this->avatarService->validateColor('rgba(10, 20, 30, 0.5)'))->toBeTrue();\n    expect($this->avatarService->validateColor('invalid'))->toBeFalse();\n    expect($this->avatarService->validateColor(null))->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/Profile/BrowserSessionsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\Profile\\LogoutOtherBrowserSessions;\nuse App\\Models\\User;\nuse Livewire\\Livewire;\n\nmutates(LogoutOtherBrowserSessions::class);\n\ntest('social user can log out other sessions without password', function () {\n    $this->actingAs(User::factory()->withTeam()->socialOnly()->create());\n\n    Livewire::test(LogoutOtherBrowserSessions::class)\n        ->call('logoutOtherBrowserSessions', null)\n        ->assertSuccessful();\n});\n\ntest('password user can log out other sessions with correct password', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    Livewire::test(LogoutOtherBrowserSessions::class)\n        ->call('logoutOtherBrowserSessions', 'password')\n        ->assertSuccessful();\n});\n\ntest('password user cannot log out other sessions with wrong password', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    Livewire::test(LogoutOtherBrowserSessions::class)\n        ->call('logoutOtherBrowserSessions', 'wrong-password')\n        ->assertHasErrors(['password']);\n});\n\ntest('password user cannot log out other sessions without password', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    Livewire::test(LogoutOtherBrowserSessions::class)\n        ->call('logoutOtherBrowserSessions', null)\n        ->assertHasErrors(['password']);\n});\n\ntest('browser sessions component renders correctly', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    Livewire::test(LogoutOtherBrowserSessions::class)\n        ->assertSuccessful()\n        ->assertSee('Browser Sessions');\n});\n"
  },
  {
    "path": "tests/Feature/Profile/DeleteAccountTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\Profile\\DeleteAccount;\nuse App\\Models\\User;\nuse Livewire\\Livewire;\n\nmutates(DeleteAccount::class, User::class);\n\ntest('social user can delete account without password', function () {\n    $this->actingAs($user = User::factory()->withTeam()->socialOnly()->create());\n\n    Livewire::test(DeleteAccount::class)\n        ->call('deleteAccount')\n        ->assertRedirect();\n\n    expect($user->fresh())->toBeNull();\n});\n\ntest('password user can delete account with correct password', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(DeleteAccount::class)\n        ->call('deleteAccount', 'password')\n        ->assertRedirect();\n\n    expect($user->fresh())->toBeNull();\n});\n\ntest('password user cannot delete account with wrong password', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(DeleteAccount::class)\n        ->call('deleteAccount', 'wrong-password')\n        ->assertHasErrors(['password']);\n\n    expect($user->fresh())->not->toBeNull();\n});\n\ntest('password user cannot delete account without password', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(DeleteAccount::class)\n        ->call('deleteAccount')\n        ->assertHasErrors(['password']);\n\n    expect($user->fresh())->not->toBeNull();\n});\n\ntest('delete account component renders correctly', function () {\n    $this->actingAs(User::factory()->withTeam()->create());\n\n    Livewire::test(DeleteAccount::class)\n        ->assertSuccessful()\n        ->assertSee('Delete Account');\n});\n"
  },
  {
    "path": "tests/Feature/Profile/GitHubServiceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Services\\GitHubService;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Http;\n\nmutates(GitHubService::class);\n\nbeforeEach(function () {\n    // Create a new instance of the service for each test\n    $this->service = new GitHubService;\n\n    // Clear any cached values before each test\n    Cache::forget('github_stars_Relaticle_relaticle');\n});\n\nit('gets stars count from GitHub API', function () {\n    // Mock HTTP response\n    Http::fake([\n        'api.github.com/repos/Relaticle/relaticle' => Http::response([\n            'stargazers_count' => 125,\n        ], 200),\n    ]);\n\n    // Call the service\n    $result = $this->service->getStarsCount('Relaticle', 'relaticle');\n\n    // Assert the result\n    expect($result)->toBe(125);\n\n    // Verify the HTTP request was made\n    Http::assertSent(function ($request) {\n        return $request->url() === 'https://api.github.com/repos/Relaticle/relaticle' &&\n               $request->hasHeader('Accept', 'application/vnd.github.v3+json');\n    });\n});\n\nit('uses cached stars count on subsequent calls', function () {\n    // Mock HTTP response\n    Http::fake([\n        'api.github.com/repos/Relaticle/relaticle' => Http::response([\n            'stargazers_count' => 125,\n        ], 200),\n    ]);\n\n    // First call should hit the API\n    $firstResult = $this->service->getStarsCount('Relaticle', 'relaticle');\n    expect($firstResult)->toBe(125);\n\n    // Verify the API was called\n    Http::assertSentCount(1);\n\n    // Second call should use the cache and not hit the API again\n    $secondResult = $this->service->getStarsCount('Relaticle', 'relaticle');\n    expect($secondResult)->toBe(125);\n\n    // Still only 1 call total\n    Http::assertSentCount(1);\n});\n\nit('returns 0 when API call fails', function () {\n    // Mock HTTP failure response\n    Http::fake([\n        'api.github.com/repos/Relaticle/relaticle' => Http::response(null, 500),\n    ]);\n\n    // Call the service\n    $result = $this->service->getStarsCount();\n\n    // Should return 0 on failure\n    expect($result)->toBe(0);\n});\n\nit('returns 0 when API throws exception', function () {\n    // Mock HTTP exception\n    Http::fake(function () {\n        throw new Exception('Network error');\n    });\n\n    // Call the service\n    $result = $this->service->getStarsCount();\n\n    // Should return 0 on exception\n    expect($result)->toBe(0);\n});\n\nit('formats small numbers as plain numbers', function () {\n    // Mock HTTP response\n    Http::fake([\n        'api.github.com/repos/Relaticle/relaticle' => Http::response([\n            'stargazers_count' => 42,\n        ], 200),\n    ]);\n\n    // Call the service\n    $result = $this->service->getFormattedStarsCount('Relaticle', 'relaticle');\n\n    // For small numbers, should return as is\n    expect($result)->toBe('42');\n});\n\nit('uses abbreviation for large star counts', function () {\n    // Mock HTTP response with large value\n    Http::fake([\n        'api.github.com/repos/Relaticle/relaticle' => Http::response([\n            'stargazers_count' => 12500,\n        ], 200),\n    ]);\n\n    // Call the service\n    $result = $this->service->getFormattedStarsCount('Relaticle', 'relaticle');\n\n    // Should be abbreviated\n    expect($result)->toBe('12.5K');\n});\n\nit('returns int even when cache contains string value', function () {\n    // Simulate cache containing a string (as might happen from serialization)\n    Cache::put('github_stars_Relaticle_relaticle', '125', now()->addMinutes(15));\n\n    $result = $this->service->getStarsCount('Relaticle', 'relaticle');\n\n    expect($result)->toBe(125)->toBeInt();\n});\n"
  },
  {
    "path": "tests/Feature/Profile/UpdatePasswordTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\Profile\\UpdatePassword as UpdatePasswordComponent;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Livewire\\Livewire;\n\nmutates(UpdatePasswordComponent::class);\n\ntest('password component renders correctly', function () {\n    $user = User::factory()->withTeam()->create();\n    $this->actingAs($user);\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->assertSuccessful()\n        ->assertSee('Update Password');\n});\n\ntest('password can be updated', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->fillForm([\n            'currentPassword' => 'password',\n            'password' => 'new-password',\n            'password_confirmation' => 'new-password',\n        ])\n        ->call('updatePassword')\n        ->assertHasNoFormErrors()\n        ->assertNotified();\n\n    expect(Hash::check('new-password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('current password must be correct', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->fillForm([\n            'currentPassword' => 'wrong-password',\n            'password' => 'new-password',\n            'password_confirmation' => 'new-password',\n        ])\n        ->call('updatePassword')\n        ->assertHasFormErrors(['currentPassword']);\n\n    expect(Hash::check('password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('new passwords must match', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->fillForm([\n            'currentPassword' => 'password',\n            'password' => 'new-password',\n            'password_confirmation' => 'wrong-password',\n        ])\n        ->call('updatePassword')\n        ->assertHasFormErrors(['password']);\n\n    expect(Hash::check('password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('social user sees set password form without current password field', function () {\n    $this->actingAs(User::factory()->withTeam()->socialOnly()->create());\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->assertSuccessful()\n        ->assertSee('Set Password')\n        ->assertDontSee('Current Password');\n});\n\ntest('social user can set a password', function () {\n    $this->actingAs($user = User::factory()->withTeam()->socialOnly()->create());\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->fillForm([\n            'password' => 'new-password',\n            'password_confirmation' => 'new-password',\n        ])\n        ->call('updatePassword')\n        ->assertHasNoFormErrors()\n        ->assertNotified();\n\n    expect(Hash::check('new-password', $user->fresh()->password))->toBeTrue();\n});\n\ntest('social user who set a password then sees update password form', function () {\n    $user = User::factory()->withTeam()->socialOnly()->create();\n    $user->forceFill(['password' => Hash::make('my-password')])->save();\n\n    $this->actingAs($user);\n\n    Livewire::test(UpdatePasswordComponent::class)\n        ->assertSuccessful()\n        ->assertSee('Update Password')\n        ->assertSee('Current Password');\n});\n"
  },
  {
    "path": "tests/Feature/Profile/UpdateUserProfileInformationTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Actions\\Fortify\\UpdateUserProfileInformation;\nuse App\\Livewire\\App\\Profile\\UpdateProfileInformation as UpdateProfileInformationComponent;\nuse App\\Models\\User;\nuse Filament\\Auth\\Notifications\\NoticeOfEmailChangeRequest;\nuse Filament\\Auth\\Notifications\\VerifyEmailChange;\nuse Illuminate\\Auth\\Notifications\\VerifyEmail;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Notification;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Livewire\\Livewire;\n\nmutates(UpdateUserProfileInformation::class, UpdateProfileInformationComponent::class);\n\nbeforeEach(function () {\n    $this->action = new UpdateUserProfileInformation;\n    $this->user = User::factory()->create([\n        'name' => 'John Doe',\n        'email' => 'john@example.com',\n        'email_verified_at' => now(),\n    ]);\n});\n\ndescribe('profile component functionality', function () {\n    test('profile information component renders correctly', function () {\n        $user = User::factory()->withTeam()->create([\n            'name' => 'Test User',\n            'email' => 'test@example.com',\n        ]);\n        $this->actingAs($user);\n\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->assertSuccessful()\n            ->assertSee('Profile Information')\n            ->assertFormSet([\n                'name' => 'Test User',\n                'email' => 'test@example.com',\n            ]);\n    });\n\n    test('can update name without changing email', function () {\n        $user = User::factory()->withTeam()->create([\n            'email' => 'stable@example.com',\n            'email_verified_at' => now(),\n        ]);\n        $this->actingAs($user);\n\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => 'Updated Name',\n                'email' => 'stable@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors()\n            ->assertNotified();\n\n        expect($user->fresh())\n            ->name->toBe('Updated Name')\n            ->email->toBe('stable@example.com')\n            ->email_verified_at->not->toBeNull();\n    });\n});\n\ndescribe('email change verification', function () {\n    beforeEach(function () {\n        Notification::fake();\n\n        $this->verifiedUser = User::factory()->withTeam()->create([\n            'email' => 'original@example.com',\n            'email_verified_at' => now(),\n        ]);\n        $this->actingAs($this->verifiedUser);\n    });\n\n    test('email change does not update email immediately', function () {\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => $this->verifiedUser->name,\n                'email' => 'new@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors()\n            ->assertNotified();\n\n        expect($this->verifiedUser->fresh())\n            ->email->toBe('original@example.com')\n            ->email_verified_at->not->toBeNull();\n    });\n\n    test('email change sends verification to new email', function () {\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => $this->verifiedUser->name,\n                'email' => 'new@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors();\n\n        Notification::assertSentOnDemand(VerifyEmailChange::class);\n    });\n\n    test('email change sends notice to old email with block link', function () {\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => $this->verifiedUser->name,\n                'email' => 'new@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors();\n\n        Notification::assertSentTo($this->verifiedUser, NoticeOfEmailChangeRequest::class);\n    });\n\n    test('same email does not trigger verification', function () {\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => 'New Name',\n                'email' => 'original@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors();\n\n        Notification::assertNotSentTo($this->verifiedUser, NoticeOfEmailChangeRequest::class);\n        Notification::assertSentOnDemandTimes(VerifyEmailChange::class, 0);\n    });\n\n    test('email change resets form email to current value', function () {\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => $this->verifiedUser->name,\n                'email' => 'new@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertFormSet([\n                'email' => 'original@example.com',\n            ]);\n    });\n\n    test('name change is saved even when email change is deferred', function () {\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => 'Updated Name',\n                'email' => 'new@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors()\n            ->assertNotified();\n\n        expect($this->verifiedUser->fresh())\n            ->name->toBe('Updated Name')\n            ->email->toBe('original@example.com');\n    });\n});\n\ndescribe('photo upload', function () {\n    beforeEach(fn () => Storage::fake('public'));\n\n    test('can upload valid photo', function ($format) {\n        $photo = UploadedFile::fake()->image(\"avatar.{$format}\", 300, 300);\n\n        // Store the file first (simulating what Filament does)\n        $photoPath = $photo->storePublicly('profile-photos', ['disk' => 'public']);\n\n        $this->action->update($this->user, [\n            'name' => $this->user->name,\n            'email' => $this->user->email,\n            'profile_photo_path' => $photoPath,\n        ]);\n\n        $user = $this->user->fresh();\n        expect($user->profile_photo_path)->toBe($photoPath)\n            ->and(Storage::disk('public')->exists($user->profile_photo_path))->toBeTrue();\n    })->with(['jpg', 'jpeg', 'png']);\n\n    test('handles photo with email change', function () {\n        Notification::fake();\n        $photo = UploadedFile::fake()->image('avatar.png', 400, 400);\n\n        // Store the file first (simulating what Filament does)\n        $photoPath = $photo->storePublicly('profile-photos', ['disk' => 'public']);\n\n        $this->action->update($this->user, [\n            'name' => 'Photo User',\n            'email' => 'photouser@example.com',\n            'profile_photo_path' => $photoPath,\n        ]);\n\n        expect($this->user->fresh())\n            ->name->toBe('Photo User')\n            ->email->toBe('photouser@example.com')\n            ->email_verified_at->toBeNull()\n            ->profile_photo_path->toBe($photoPath);\n\n        Notification::assertSentTo($this->user, VerifyEmail::class);\n    });\n\n    test('can delete profile photo', function () {\n        Storage::fake('public');\n\n        // First set a photo\n        $photo = UploadedFile::fake()->image('avatar.png', 300, 300);\n        $photoPath = $photo->storePublicly('profile-photos', ['disk' => 'public']);\n\n        $this->action->update($this->user, [\n            'name' => $this->user->name,\n            'email' => $this->user->email,\n            'profile_photo_path' => $photoPath,\n        ]);\n\n        expect($this->user->fresh()->profile_photo_path)->toBe($photoPath);\n\n        // Then delete it\n        $this->action->update($this->user, [\n            'name' => $this->user->name,\n            'email' => $this->user->email,\n            'profile_photo_path' => null,\n        ]);\n\n        expect($this->user->fresh()->profile_photo_path)->toBeNull();\n    });\n\n    test('can update profile through livewire component with photo', function () {\n        Storage::fake('public');\n        $user = User::factory()->withTeam()->create([\n            'email' => 'photo-test@example.com',\n        ]);\n        $this->actingAs($user);\n\n        $photo = UploadedFile::fake()->image('avatar.jpg', 200, 200);\n\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => 'Updated Name',\n                'email' => 'photo-test@example.com',\n                'profile_photo_path' => $photo,\n            ])\n            ->call('updateProfile')\n            ->assertHasNoFormErrors()\n            ->assertNotified();\n\n        expect($user->fresh())\n            ->name->toBe('Updated Name')\n            ->email->toBe('photo-test@example.com')\n            ->profile_photo_path->not->toBeNull();\n    });\n});\n\ndescribe('validation', function () {\n    test('validates required fields through livewire component', function () {\n        $user = User::factory()->withTeam()->create();\n        $this->actingAs($user);\n\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => '',\n                'email' => 'invalid-email',\n            ])\n            ->call('updateProfile')\n            ->assertHasFormErrors(['name', 'email']);\n    });\n\n    test('rejects duplicate email through livewire component', function () {\n        User::factory()->create(['email' => 'existing@example.com']);\n        $user = User::factory()->withTeam()->create();\n        $this->actingAs($user);\n\n        Livewire::test(UpdateProfileInformationComponent::class)\n            ->fillForm([\n                'name' => 'Valid Name',\n                'email' => 'existing@example.com',\n            ])\n            ->call('updateProfile')\n            ->assertHasFormErrors(['email']);\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Public/PublicPagesTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Http\\Controllers\\HomeController;\nuse App\\Http\\Controllers\\PrivacyPolicyController;\nuse App\\Http\\Controllers\\TermsOfServiceController;\nuse Illuminate\\Support\\Facades\\Http;\n\nmutates(HomeController::class, TermsOfServiceController::class, PrivacyPolicyController::class);\n\ndescribe('Home page', function () {\n    it('returns a successful response', function () {\n        $response = $this->get('/');\n\n        $response->assertStatus(200);\n        $response->assertSee('Relaticle');\n    });\n\n    it('displays the GitHub stars count', function () {\n        Http::fake([\n            'api.github.com/repos/Relaticle/relaticle' => Http::response([\n                'stargazers_count' => 125,\n            ], 200),\n        ]);\n\n        $response = $this->get('/');\n\n        $response->assertStatus(200);\n        $response->assertSee('125');\n    });\n});\n\ndescribe('Legal pages', function () {\n    it('displays the terms of service page with product-specific content', function () {\n        $response = $this->get('/terms-of-service');\n\n        $response->assertStatus(200);\n        $response->assertSee('Terms of Service');\n        $response->assertSee('Relaticle');\n        $response->assertDontSee('word usage');\n        $response->assertDontSee('Basic\" plan');\n    });\n\n    it('displays the privacy policy page with product-specific content', function () {\n        $response = $this->get('/privacy-policy');\n\n        $response->assertStatus(200);\n        $response->assertSee('Privacy Policy');\n        $response->assertSee('Relaticle');\n        $response->assertDontSee('registered mail');\n    });\n});\n\ndescribe('Documentation pages', function () {\n    it('displays the documentation index', function () {\n        $response = $this->get('/docs');\n\n        $response->assertStatus(200);\n        $response->assertSee('Documentation');\n    });\n\n    it('displays the getting started guide', function () {\n        $response = $this->get('/docs/getting-started');\n\n        $response->assertStatus(200);\n        $response->assertSee('Getting Started');\n    });\n\n    it('displays the import guide', function () {\n        $response = $this->get('/docs/import');\n\n        $response->assertStatus(200);\n        $response->assertSee('Import Guide');\n    });\n\n    it('displays the developer guide', function () {\n        $response = $this->get('/docs/developer');\n\n        $response->assertStatus(200);\n        $response->assertSee('Developer Guide');\n    });\n\n    it('displays the self-hosting guide', function () {\n        $response = $this->get('/docs/self-hosting');\n\n        $response->assertStatus(200);\n        $response->assertSee('Self-Hosting Guide');\n    });\n\n    it('displays the MCP guide', function () {\n        $response = $this->get('/docs/mcp');\n\n        $response->assertStatus(200);\n        $response->assertSee('MCP Server');\n    });\n\n    it('shows edit on GitHub link on documentation pages', function () {\n        $response = $this->get('/docs/getting-started');\n\n        $response->assertStatus(200);\n        $response->assertSee('Edit this page on GitHub');\n    });\n\n    it('returns 404 for non-existent documentation page', function () {\n        $response = $this->get('/docs/non-existent-page');\n\n        $response->assertStatus(404);\n    });\n\n    it('can search documentation and returns results', function () {\n        $response = $this->get('/docs/search?query=import');\n\n        $response->assertStatus(200);\n        $response->assertSee('Import');\n    });\n});\n\ndescribe('Pricing page', function () {\n    it('displays the pricing page', function () {\n        $response = $this->get('/pricing');\n\n        $response->assertStatus(200);\n        $response->assertSee('No per-seat pricing');\n    });\n});\n\ndescribe('Authentication redirects', function () {\n    it('redirects login to app panel', function () {\n        $response = $this->get('/login');\n\n        $response->assertRedirect(url()->getAppUrl('login'));\n    });\n\n    it('redirects register to app panel', function () {\n        $response = $this->get('/register');\n\n        $response->assertRedirect(url()->getAppUrl('register'));\n    });\n\n    it('redirects forgot password to app panel', function () {\n        $response = $this->get('/forgot-password');\n\n        $response->assertRedirect(url()->getAppUrl('forgot-password'));\n    });\n\n    it('redirects dashboard to app panel', function () {\n        $response = $this->get('/dashboard');\n\n        $response->assertRedirect(url()->getAppUrl());\n    });\n});\n\ndescribe('Community redirects', function () {\n    it('redirects to discord', function () {\n        config(['services.discord.invite_url' => 'https://discord.gg/example']);\n\n        $response = $this->get('/discord');\n\n        $response->assertRedirect('https://discord.gg/example');\n    });\n});\n\ndescribe('Social authentication routes', function () {\n    it('throttles authentication redirect attempts', function () {\n        // Make 10 requests (the limit)\n        for ($i = 0; $i < 10; $i++) {\n            $this->get('/auth/redirect/github');\n        }\n\n        // The 11th request should be throttled\n        $response = $this->get('/auth/redirect/github');\n\n        $response->assertStatus(429); // Too Many Requests\n    });\n\n    it('accepts github as a provider for redirect', function () {\n        $response = $this->get('/auth/redirect/github');\n\n        $response->assertStatus(302); // Redirect to GitHub\n    });\n\n    it('accepts google as a provider for redirect', function () {\n        $response = $this->get('/auth/redirect/google');\n\n        $response->assertStatus(302); // Redirect to Google\n    });\n});\n\ndescribe('Error handling', function () {\n    it('returns 404 for non-existent routes', function () {\n        $response = $this->get('/non-existent-page');\n\n        $response->assertStatus(404);\n    });\n});\n\ndescribe('Response meta', function () {\n    it('returns proper content type', function () {\n        $response = $this->get('/');\n\n        $response->assertHeader('Content-Type');\n        $response->assertSuccessful();\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Routing/AppPanelRoutingTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Providers\\MacroServiceProvider;\nuse Filament\\Facades\\Filament;\n\nmutates(MacroServiceProvider::class);\n\ndescribe('app panel configuration - path mode (default)', function () {\n    it('registers panel with path prefix and no domain constraint', function () {\n        $panel = Filament::getPanel('app');\n\n        expect($panel->getDomains())->toBeEmpty()\n            ->and($panel->getPath())->toBe(config('app.app_panel_path', 'app'));\n    });\n\n    it('serves login page at the panel path', function () {\n        $panelPath = config('app.app_panel_path', 'app');\n\n        $this->get(\"/{$panelPath}/login\")->assertOk();\n    });\n});\n\ndescribe('getAppUrl macro - path mode', function () {\n    beforeEach(function () {\n        config([\n            'app.app_panel_domain' => null,\n            'app.app_panel_path' => 'app',\n            'app.url' => 'https://example.com',\n        ]);\n    });\n\n    it('returns path-based URL with default path', function () {\n        expect(url()->getAppUrl('login'))->toBe('https://example.com/app/login')\n            ->and(url()->getAppUrl())->toBe('https://example.com/app');\n    });\n\n    it('handles custom panel path', function () {\n        config(['app.app_panel_path' => 'crm']);\n\n        expect(url()->getAppUrl('login'))->toBe('https://example.com/crm/login');\n    });\n\n    it('handles port in APP_URL for Docker deployments', function () {\n        config(['app.url' => 'http://localhost:8080']);\n\n        expect(url()->getAppUrl('login'))->toBe('http://localhost:8080/app/login');\n    });\n\n    it('handles IP address with port', function () {\n        config(['app.url' => 'http://192.168.1.100:8080']);\n\n        expect(url()->getAppUrl('dashboard'))->toBe('http://192.168.1.100:8080/app/dashboard');\n    });\n\n    it('handles nested path segments', function () {\n        expect(url()->getAppUrl('teams/1/companies'))->toBe('https://example.com/app/teams/1/companies');\n    });\n\n    it('handles path with leading slash', function () {\n        expect(url()->getAppUrl('/login'))->toBe('https://example.com/app/login');\n    });\n\n    it('handles http scheme', function () {\n        config(['app.url' => 'http://example.com']);\n\n        expect(url()->getAppUrl('login'))->toBe('http://example.com/app/login');\n    });\n\n    it('strips trailing slash from APP_URL', function () {\n        config(['app.url' => 'https://example.com/']);\n\n        expect(url()->getAppUrl('login'))->toBe('https://example.com/app/login');\n    });\n});\n\ndescribe('getAppUrl macro - domain mode', function () {\n    beforeEach(function () {\n        config([\n            'app.app_panel_domain' => 'app.example.com',\n            'app.url' => 'https://example.com',\n        ]);\n    });\n\n    it('returns domain-based URL when APP_PANEL_DOMAIN is set', function () {\n        expect(url()->getAppUrl('login'))->toBe('https://app.example.com/login')\n            ->and(url()->getAppUrl())->toBe('https://app.example.com');\n    });\n\n    it('uses scheme from APP_URL', function () {\n        config([\n            'app.app_panel_domain' => 'crm.example.com',\n            'app.url' => 'http://example.com',\n        ]);\n\n        expect(url()->getAppUrl('login'))->toBe('http://crm.example.com/login');\n    });\n\n    it('handles nested path segments', function () {\n        expect(url()->getAppUrl('teams/1/companies'))->toBe('https://app.example.com/teams/1/companies');\n    });\n\n    it('handles path with leading slash', function () {\n        expect(url()->getAppUrl('/login'))->toBe('https://app.example.com/login');\n    });\n\n    it('preserves port from APP_URL', function () {\n        config([\n            'app.app_panel_domain' => 'app.localhost',\n            'app.url' => 'http://localhost:8080',\n        ]);\n\n        expect(url()->getAppUrl('login'))->toBe('http://app.localhost:8080/login')\n            ->and(url()->getAppUrl())->toBe('http://app.localhost:8080');\n    });\n});\n\ndescribe('getPublicUrl macro', function () {\n    it('returns APP_URL based URL', function () {\n        config(['app.url' => 'https://example.com']);\n\n        expect(url()->getPublicUrl('about'))->toBe('https://example.com/about');\n    });\n\n    it('returns clean base URL when path is empty', function () {\n        config(['app.url' => 'https://example.com']);\n\n        expect(url()->getPublicUrl())->toBe('https://example.com');\n    });\n\n    it('preserves port in URL', function () {\n        config(['app.url' => 'http://localhost:8080']);\n\n        expect(url()->getPublicUrl('about'))->toBe('http://localhost:8080/about');\n    });\n\n    it('is not affected by app panel domain config', function () {\n        config([\n            'app.app_panel_domain' => 'app.example.com',\n            'app.url' => 'https://example.com',\n        ]);\n\n        expect(url()->getPublicUrl('about'))->toBe('https://example.com/about');\n    });\n});\n"
  },
  {
    "path": "tests/Feature/Routing/SubdomainRoutingTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Route;\nuse Laravel\\Sanctum\\Sanctum;\n\nbeforeEach(function () {\n    $this->user = User::factory()->withPersonalTeam()->create();\n});\n\ndescribe('API routing - default path mode', function () {\n    it('serves API at /api/v1 prefix', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/api/v1/companies')->assertOk();\n    });\n\n    it('does not serve API at root /v1 prefix', function (): void {\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('/v1/companies')->assertNotFound();\n    });\n});\n\ndescribe('API routing - subdomain mode', function () {\n    it('serves root JSON info on API subdomain', function (): void {\n        config(['app.api_domain' => 'api.example.com']);\n\n        Route::domain('api.example.com')\n            ->middleware('api')\n            ->group(base_path('routes/api.php'));\n\n        $response = $this->get('http://api.example.com/');\n        $response->assertOk();\n\n        $json = $response->json();\n        expect($json)->toHaveKeys(['name', 'version', 'docs']);\n        expect($json['name'])->toBe('Relaticle API');\n        expect($json['version'])->toBe('v1');\n    });\n\n    it('serves API resources on subdomain at /v1 prefix', function (): void {\n        config(['app.api_domain' => 'api.example.com']);\n\n        Route::domain('api.example.com')\n            ->middleware('api')\n            ->group(base_path('routes/api.php'));\n\n        Sanctum::actingAs($this->user);\n\n        $this->getJson('http://api.example.com/v1/companies')->assertOk();\n    });\n});\n\ndescribe('Scribe config matches API route prefixes', function () {\n    it('uses api/v1 prefix when no API_DOMAIN is set', function (): void {\n        config(['app.api_domain' => null]);\n\n        $prefixes = require base_path('config/scribe.php');\n        $prefix = $prefixes['routes'][0]['match']['prefixes'][0];\n\n        expect($prefix)->toBe('api/v1/*');\n    });\n\n    it('uses v1 prefix when API_DOMAIN is set', function (): void {\n        config(['app.api_domain' => 'api.example.com']);\n\n        $prefixes = require base_path('config/scribe.php');\n        $prefix = $prefixes['routes'][0]['match']['prefixes'][0];\n\n        expect($prefix)->toBe('v1/*');\n    });\n});\n\ndescribe('MCP routing - default path mode', function () {\n    it('serves MCP at /mcp path', function (): void {\n        $this->get('/mcp')->assertStatus(405);\n    });\n});\n\ndescribe('MCP routing - subdomain mode', function () {\n    it('returns JSON info on MCP subdomain root', function (): void {\n        config(['app.mcp_domain' => 'mcp.example.com']);\n\n        Route::domain('mcp.example.com')->group(function (): void {\n            Route::get('/', fn () => response()->json([\n                'name' => 'Relaticle MCP Server',\n                'version' => '1.0.0',\n                'docs' => url('/docs/mcp'),\n            ]));\n        });\n\n        $response = $this->get('http://mcp.example.com/');\n        $response->assertOk();\n\n        $json = $response->json();\n        expect($json)->toHaveKeys(['name', 'version', 'docs']);\n        expect($json['name'])->toBe('Relaticle MCP Server');\n    });\n});\n"
  },
  {
    "path": "tests/Feature/SystemAdmin/ActivationRateWidgetTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\ActivationRateWidget;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nmutates(ActivationRateWidget::class);\n\nbeforeEach(function () {\n    $this->admin = SystemAdministrator::factory()->create();\n    $this->actingAs($this->admin, 'sysadmin');\n    Filament::setCurrentPanel('sysadmin');\n\n    $this->teamOwner = User::factory()->withTeam()->create();\n    $this->team = $this->teamOwner->currentTeam;\n});\n\nit('can render the activation rate widget', function () {\n    livewire(ActivationRateWidget::class)\n        ->assertOk();\n});\n\nit('counts activated users who created records manually', function () {\n    $users = User::factory(3)->withTeam()->create([\n        'created_at' => now()->subDays(5),\n    ]);\n\n    Company::withoutEvents(fn () => Company::factory()\n        ->for($this->team)\n        ->create([\n            'creator_id' => $users[0]->id,\n            'creation_source' => CreationSource::WEB,\n            'created_at' => now()->subDays(4),\n        ]));\n\n    Note::withoutEvents(fn () => Note::factory()\n        ->for($this->team)\n        ->create([\n            'creator_id' => $users[1]->id,\n            'created_at' => now()->subDays(3),\n        ]));\n\n    livewire(ActivationRateWidget::class)\n        ->assertSee('Activated Users')\n        ->assertSee('2');\n});\n\nit('excludes system-created records from activation count', function () {\n    $user = User::factory()->withTeam()->create([\n        'created_at' => now()->subDays(5),\n    ]);\n\n    Company::withoutEvents(fn () => Company::factory()\n        ->for($this->team)\n        ->create([\n            'creator_id' => $user->id,\n            'creation_source' => CreationSource::SYSTEM,\n            'created_at' => now()->subDays(4),\n        ]));\n\n    livewire(ActivationRateWidget::class)\n        ->assertSee('Activated Users')\n        ->assertSee('0');\n});\n"
  },
  {
    "path": "tests/Feature/SystemAdmin/SystemAdminResourceTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Relaticle\\ImportWizard\\Enums\\ImportEntityType;\nuse Relaticle\\ImportWizard\\Enums\\ImportStatus;\nuse Relaticle\\ImportWizard\\Models\\Import;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\CompanyResource\\Pages\\ListCompanies;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\ImportResource\\Pages\\ListImports;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\NoteResource\\Pages\\ListNotes;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\OpportunityResource\\Pages\\ListOpportunities;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\PeopleResource\\Pages\\ListPeople;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TaskResource\\Pages\\ListTasks;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\TeamResource\\Pages\\ListTeams;\nuse Relaticle\\SystemAdmin\\Filament\\Resources\\UserResource\\Pages\\ListUsers;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nmutates(User::class, Team::class, Company::class, People::class, Task::class, Note::class, Opportunity::class);\n\nbeforeEach(function () {\n    $this->admin = SystemAdministrator::factory()->create();\n    $this->actingAs($this->admin, 'sysadmin');\n    Filament::setCurrentPanel('sysadmin');\n\n    $this->teamOwner = User::factory()->withTeam()->create();\n    $this->team = $this->teamOwner->currentTeam;\n});\n\nit('can render the users list page', function () {\n    $users = User::factory(3)->withTeam()->create();\n\n    livewire(ListUsers::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($users);\n});\n\nit('can render the teams list page', function () {\n    $teams = Team::factory(3)->create();\n\n    livewire(ListTeams::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($teams);\n});\n\nit('can render the companies list page', function () {\n    $companies = Company::withoutEvents(fn () => Company::factory(3)\n        ->for($this->team)\n        ->create(['creator_id' => $this->teamOwner->id]));\n\n    livewire(ListCompanies::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($companies);\n});\n\nit('can render the people list page', function () {\n    $people = People::withoutEvents(fn () => People::factory(3)\n        ->for($this->team)\n        ->create());\n\n    livewire(ListPeople::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($people);\n});\n\nit('can render the tasks list page', function () {\n    $tasks = Task::withoutEvents(fn () => Task::factory(3)\n        ->for($this->team)\n        ->create(['creator_id' => $this->teamOwner->id]));\n\n    livewire(ListTasks::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($tasks);\n});\n\nit('can render the notes list page', function () {\n    $notes = Note::withoutEvents(fn () => Note::factory(3)\n        ->for($this->team)\n        ->create());\n\n    livewire(ListNotes::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($notes);\n});\n\nit('can render the opportunities list page', function () {\n    $opportunities = Opportunity::withoutEvents(fn () => Opportunity::factory(3)\n        ->for($this->team)\n        ->create());\n\n    livewire(ListOpportunities::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($opportunities);\n});\n\nit('can render the imports list page', function () {\n    $imports = collect(range(1, 3))->map(fn () => Import::create([\n        'team_id' => $this->team->id,\n        'user_id' => $this->teamOwner->id,\n        'entity_type' => ImportEntityType::Company,\n        'file_name' => 'test.csv',\n        'status' => ImportStatus::Completed,\n        'total_rows' => 10,\n        'created_rows' => 8,\n        'failed_rows' => 2,\n        'headers' => ['name', 'email'],\n        'column_mappings' => [],\n    ]));\n\n    livewire(ListImports::class)\n        ->assertOk()\n        ->assertCanSeeTableRecords($imports);\n});\n\nit('has trashed filter on soft-deletable resources', function (string $listPageClass) {\n    livewire($listPageClass)\n        ->assertTableFilterExists('trashed');\n})->with([\n    'companies' => ListCompanies::class,\n    'people' => ListPeople::class,\n    'tasks' => ListTasks::class,\n    'notes' => ListNotes::class,\n    'opportunities' => ListOpportunities::class,\n]);\n"
  },
  {
    "path": "tests/Feature/SystemAdmin/SystemAdminSecurityTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Relaticle\\SystemAdmin\\Enums\\SystemAdministratorRole;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nmutates(SystemAdministrator::class);\n\ndescribe('SystemAdmin Security', function () {\n    beforeEach(function () {\n        Filament::setCurrentPanel('sysadmin');\n    });\n\n    it('enforces complete authentication isolation', function () {\n        $admin = SystemAdministrator::factory()->create();\n        $user = User::factory()->create();\n\n        expect($admin->canAccessPanel(Filament::getPanel('app')))->toBeFalse()\n            ->and($user->canAccessPanel(Filament::getPanel('sysadmin')))->toBeFalse();\n\n        $this->actingAs($admin, 'sysadmin');\n        $this->assertAuthenticatedAs($admin, 'sysadmin');\n        $this->assertGuest('web');\n    });\n\n    it('enforces role-based authorization', function () {\n        $superAdmin = SystemAdministrator::factory()->create([\n            'role' => SystemAdministratorRole::SuperAdministrator,\n        ]);\n\n        $otherAdmin = SystemAdministrator::factory()->create([\n            'role' => SystemAdministratorRole::SuperAdministrator,\n        ]);\n\n        $this->actingAs($superAdmin, 'sysadmin');\n\n        expect(auth('sysadmin')->user()->can('create', SystemAdministrator::class))->toBeTrue()\n            ->and(auth('sysadmin')->user()->can('viewAny', SystemAdministrator::class))->toBeTrue()\n            ->and(auth('sysadmin')->user()->can('update', $otherAdmin))->toBeTrue()\n            ->and(auth('sysadmin')->user()->can('delete', $otherAdmin))->toBeTrue()\n            ->and(auth('sysadmin')->user()->can('delete', $superAdmin))->toBeFalse();\n    });\n\n    it('redirects unauthenticated visitors to sysadmin login', function (string $route) {\n        $this->get($route)->assertRedirect('/sysadmin/login');\n    })->with([\n        'dashboard' => '/sysadmin',\n        'companies' => '/sysadmin/companies',\n        'imports' => '/sysadmin/imports',\n        'users' => '/sysadmin/users',\n        'teams' => '/sysadmin/teams',\n        'system-administrators' => '/sysadmin/system-administrators',\n    ]);\n\n    it('blocks regular app users from accessing sysadmin panel', function (string $route) {\n        $user = User::factory()->create();\n\n        $this->actingAs($user, 'web')\n            ->get($route)\n            ->assertRedirect('/sysadmin/login');\n    })->with([\n        'dashboard' => '/sysadmin',\n        'companies' => '/sysadmin/companies',\n        'users' => '/sysadmin/users',\n    ]);\n\n    it('blocks unverified sysadmin from accessing panel routes', function () {\n        $unverifiedAdmin = SystemAdministrator::factory()->unverified()->create();\n\n        $this->actingAs($unverifiedAdmin, 'sysadmin')\n            ->get('/sysadmin')\n            ->assertForbidden();\n    });\n\n    it('allows verified sysadmin to access panel routes', function () {\n        $admin = SystemAdministrator::factory()->create();\n\n        $this->actingAs($admin, 'sysadmin')\n            ->get('/sysadmin/system-administrators')\n            ->assertOk();\n    });\n\n});\n"
  },
  {
    "path": "tests/Feature/SystemAdmin/UserRetentionChartWidgetTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Enums\\CreationSource;\nuse App\\Models\\Company;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Relaticle\\SystemAdmin\\Filament\\Widgets\\UserRetentionChartWidget;\nuse Relaticle\\SystemAdmin\\Models\\SystemAdministrator;\n\nmutates(UserRetentionChartWidget::class);\n\nbeforeEach(function () {\n    $this->admin = SystemAdministrator::factory()->create();\n    $this->actingAs($this->admin, 'sysadmin');\n    Filament::setCurrentPanel('sysadmin');\n\n    $this->teamOwner = User::factory()->withTeam()->create();\n    $this->team = $this->teamOwner->currentTeam;\n});\n\nit('can render the user retention chart widget', function () {\n    livewire(UserRetentionChartWidget::class)\n        ->assertOk();\n});\n\nit('classifies new active vs returning users correctly', function () {\n    $this->travelTo(now()->startOfWeek()->addDays(3));\n\n    $newUser = User::factory()->withTeam()->create([\n        'created_at' => now()->subDays(2),\n    ]);\n\n    Company::withoutEvents(fn () => Company::factory()\n        ->for($this->team)\n        ->create([\n            'creator_id' => $newUser->id,\n            'creation_source' => CreationSource::WEB,\n            'created_at' => now()->subDay(),\n        ]));\n\n    $returningUser = User::factory()->withTeam()->create([\n        'created_at' => now()->subDays(30),\n    ]);\n\n    Company::withoutEvents(fn () => Company::factory()\n        ->for($this->team)\n        ->create([\n            'creator_id' => $returningUser->id,\n            'creation_source' => CreationSource::WEB,\n            'created_at' => now()->subDay(),\n        ]));\n\n    $component = livewire(UserRetentionChartWidget::class)->assertOk();\n\n    $chartData = invade($component->instance())->getData();\n\n    $datasetsByLabel = collect($chartData['datasets'])->keyBy('label');\n\n    $newActiveData = $datasetsByLabel['New Active']['data'] ?? [];\n    $returningData = $datasetsByLabel['Returning']['data'] ?? [];\n\n    expect(array_sum($newActiveData))->toBe(1)\n        ->and(array_sum($returningData))->toBe(1);\n});\n"
  },
  {
    "path": "tests/Feature/Teams/AcceptTeamInvitationTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Team;\nuse App\\Models\\TeamInvitation;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\URL;\n\nmutates(TeamInvitation::class);\n\ntest('valid invitation can be accepted', function () {\n    $user = User::factory()->withPersonalTeam()->create();\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => $user->email,\n        'role' => 'editor',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->actingAs($user)\n        ->get($acceptUrl)\n        ->assertRedirect(config('fortify.home'));\n\n    expect($team->fresh()->hasUser($user))->toBeTrue();\n    expect(TeamInvitation::find($invitation->id))->toBeNull();\n    expect($user->fresh()->current_team_id)->toBe($team->id);\n});\n\ntest('expired invitation shows friendly expired page', function () {\n    $user = User::factory()->withPersonalTeam()->create();\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->expired()->create([\n        'team_id' => $team->id,\n        'email' => $user->email,\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->actingAs($user)\n        ->get($acceptUrl)\n        ->assertOk()\n        ->assertViewIs('teams.invitation-expired');\n\n    expect($team->fresh()->hasUser($user))->toBeFalse();\n});\n\ntest('null expires_at is treated as expired', function () {\n    $user = User::factory()->withPersonalTeam()->create();\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->withoutExpiry()->create([\n        'team_id' => $team->id,\n        'email' => $user->email,\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->actingAs($user)\n        ->get($acceptUrl)\n        ->assertOk()\n        ->assertViewIs('teams.invitation-expired');\n});\n\ntest('invitation with wrong email is rejected', function () {\n    $invitedUser = User::factory()->withPersonalTeam()->create(['email' => 'invited@example.com']);\n    $wrongUser = User::factory()->withPersonalTeam()->create(['email' => 'wrong@example.com']);\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'invited@example.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->actingAs($wrongUser)\n        ->get($acceptUrl)\n        ->assertForbidden();\n\n    expect($team->fresh()->hasUser($wrongUser))->toBeFalse();\n});\n\ntest('invitation with invalid signature is rejected', function () {\n    $user = User::factory()->withPersonalTeam()->create();\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => $user->email,\n    ]);\n\n    $this->actingAs($user)\n        ->get(\"/team-invitations/{$invitation->id}?signature=invalid\")\n        ->assertForbidden();\n});\n\ntest('accepting invitation deletes the invitation record', function () {\n    $user = User::factory()->withPersonalTeam()->create();\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => $user->email,\n        'role' => 'admin',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->actingAs($user)->get($acceptUrl);\n\n    expect(TeamInvitation::count())->toBe(0);\n});\n"
  },
  {
    "path": "tests/Feature/Teams/CreateTeamTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Laravel\\Jetstream\\Http\\Livewire\\CreateTeamForm;\nuse Livewire\\Livewire;\n\nmutates(Team::class);\n\ntest('teams can be created', function () {\n    $this->actingAs($user = User::factory()->withPersonalTeam()->create());\n\n    Livewire::test(CreateTeamForm::class)\n        ->set(['state' => ['name' => 'Test Team', 'slug' => 'test-team']])\n        ->call('createTeam');\n\n    expect($user->fresh()->ownedTeams)->toHaveCount(2);\n    expect($user->fresh()->ownedTeams()->where('name', 'Test Team')->exists())->toBeTrue();\n});\n\ntest('reserved slug is rejected on team creation', function () {\n    $this->actingAs(User::factory()->withPersonalTeam()->create());\n\n    Livewire::test(CreateTeamForm::class)\n        ->set(['state' => ['name' => 'Admin Team', 'slug' => 'admin']])\n        ->call('createTeam')\n        ->assertHasErrors('slug');\n});\n\ntest('non-personal teams do not get demo data seeded', function (): void {\n    Event::fake()->except([\n        'eloquent.creating: App\\\\Models\\\\Team',\n        TeamCreated::class,\n    ]);\n\n    $this->actingAs($user = User::factory()->withPersonalTeam()->create());\n\n    Livewire::test(CreateTeamForm::class)\n        ->set(['state' => ['name' => 'Work Team', 'slug' => 'work-team']])\n        ->call('createTeam');\n\n    $workTeam = $user->fresh()->ownedTeams()->where('name', 'Work Team')->first();\n    expect($workTeam)->not->toBeNull()\n        ->and($workTeam->personal_team)->toBeFalse();\n\n    expect(Company::where('team_id', $workTeam->id)->count())->toBe(0)\n        ->and(People::where('team_id', $workTeam->id)->count())->toBe(0)\n        ->and(Opportunity::where('team_id', $workTeam->id)->count())->toBe(0)\n        ->and(Task::where('team_id', $workTeam->id)->count())->toBe(0)\n        ->and(Note::where('team_id', $workTeam->id)->count())->toBe(0);\n});\n"
  },
  {
    "path": "tests/Feature/Teams/DeleteTeamTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Laravel\\Jetstream\\Http\\Livewire\\DeleteTeamForm;\nuse Livewire\\Livewire;\n\nmutates(Team::class);\n\ntest('teams can be deleted', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $user->ownedTeams()->save($team = Team::factory()->make([\n        'personal_team' => false,\n    ]));\n\n    $team->users()->attach(\n        $otherUser = User::factory()->create(), ['role' => 'test-role']\n    );\n\n    Livewire::test(DeleteTeamForm::class, ['team' => $team->fresh()])\n        ->call('deleteTeam');\n\n    expect($team->fresh())->toBeNull();\n    expect($otherUser->fresh()->teams)->toHaveCount(0);\n});\n\ntest('personal teams cant be deleted', function () {\n    $this->actingAs($user = User::factory()->withPersonalTeam()->create());\n\n    Livewire::test(DeleteTeamForm::class, ['team' => $user->personalTeam()])\n        ->call('deleteTeam')\n        ->assertHasErrors(['team']);\n\n    expect($user->personalTeam()->fresh())->not->toBeNull();\n});\n"
  },
  {
    "path": "tests/Feature/Teams/InvitationUxTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Filament\\Pages\\Auth\\Register;\nuse App\\Models\\Team;\nuse App\\Models\\TeamInvitation;\nuse App\\Models\\User;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\URL;\n\ntest('guest with no account clicking invitation link is redirected to register page', function () {\n    $team = Team::factory()->create(['name' => 'Acme Corp']);\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'newuser@example.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->get($acceptUrl)\n        ->assertRedirect(Filament::getRegistrationUrl());\n});\n\ntest('guest with existing account clicking invitation link is redirected to login page', function () {\n    $team = Team::factory()->create(['name' => 'Acme Corp']);\n\n    User::factory()->create(['email' => 'existing@example.com']);\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'existing@example.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->get($acceptUrl)\n        ->assertRedirect(Filament::getLoginUrl());\n});\n\ntest('guest clicking invitation link sees team name and sign-up link on login page', function () {\n    $team = Team::factory()->create(['name' => 'Acme Corp']);\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'newuser@example.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->get($acceptUrl);\n\n    $this->get(route('filament.app.auth.login'))\n        ->assertSee('Acme Corp')\n        ->assertSee('sign up', escape: false);\n});\n\ntest('login page without invitation shows default subheading unchanged', function () {\n    $this->get(route('filament.app.auth.login'))\n        ->assertSee('sign up', escape: false)\n        ->assertDontSee('invited to join');\n});\n\ntest('guest clicking invitation link sees team name and sign-in link on register page', function () {\n    $team = Team::factory()->create(['name' => 'Acme Corp']);\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'newuser@example.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->get($acceptUrl)\n        ->assertRedirect(Filament::getRegistrationUrl());\n\n    $this->get(route('filament.app.auth.register'))\n        ->assertSee('Acme Corp')\n        ->assertSee('sign in', escape: false);\n});\n\ntest('register page without invitation shows default subheading unchanged', function () {\n    $this->get(route('filament.app.auth.register'))\n        ->assertSee('sign in', escape: false)\n        ->assertDontSee('invited to join');\n});\n\ntest('user registering via invitation link gets auto-verified email', function () {\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'newuser@gmail.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    // Simulate guest hitting invite link (sets url.intended in session)\n    $this->get($acceptUrl);\n\n    // Register via Filament's Livewire component\n    livewire(Register::class)\n        ->fillForm([\n            'name' => 'New User',\n            'email' => 'newuser@gmail.com',\n            'password' => 'password',\n            'passwordConfirmation' => 'password',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $user = User::where('email', 'newuser@gmail.com')->first();\n    expect($user)->not->toBeNull();\n    expect($user->hasVerifiedEmail())->toBeTrue();\n});\n\ntest('user registering without invitation link does not get auto-verified', function () {\n    livewire(Register::class)\n        ->fillForm([\n            'name' => 'Normal User',\n            'email' => 'normaluser@gmail.com',\n            'password' => 'password',\n            'passwordConfirmation' => 'password',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $user = User::where('email', 'normaluser@gmail.com')->first();\n    expect($user)->not->toBeNull();\n    expect($user->hasVerifiedEmail())->toBeFalse();\n});\n\ntest('user registering with different email than invitation does not get auto-verified', function () {\n    $team = Team::factory()->create();\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $team->id,\n        'email' => 'invited@gmail.com',\n    ]);\n\n    $acceptUrl = URL::signedRoute('team-invitations.accept', ['invitation' => $invitation]);\n\n    $this->get($acceptUrl);\n\n    livewire(Register::class)\n        ->fillForm([\n            'name' => 'Different User',\n            'email' => 'different@gmail.com',\n            'password' => 'password',\n            'passwordConfirmation' => 'password',\n        ])\n        ->call('register')\n        ->assertHasNoFormErrors();\n\n    $user = User::where('email', 'different@gmail.com')->first();\n    expect($user)->not->toBeNull();\n    expect($user->hasVerifiedEmail())->toBeFalse();\n});\n"
  },
  {
    "path": "tests/Feature/Teams/InviteTeamMemberTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\Teams\\AddTeamMember;\nuse App\\Livewire\\App\\Teams\\PendingTeamInvitations;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\nuse Filament\\Facades\\Filament;\nuse Illuminate\\Support\\Facades\\Mail;\n\nmutates(User::class);\n\nbeforeEach(function () {\n    Mail::fake();\n\n    $this->user = User::factory()->withTeam()->create();\n    $this->actingAs($this->user);\n    $this->team = $this->user->currentTeam;\n    Filament::setTenant($this->team);\n});\n\ntest('team members can be invited to team', function () {\n    livewire(AddTeamMember::class, ['team' => $this->team])\n        ->fillForm([\n            'email' => 'test@example.com',\n            'role' => 'admin',\n        ])\n        ->call('addTeamMember', $this->team);\n\n    expect($this->team->fresh()->teamInvitations)->toHaveCount(1);\n\n    $invitation = $this->team->fresh()->teamInvitations->first();\n    expect($invitation->email)->toBe('test@example.com')\n        ->and($invitation->role)->toBe('admin')\n        ->and($invitation->expires_at)->not->toBeNull()\n        ->and($invitation->expires_at->isFuture())->toBeTrue();\n});\n\ntest('invitation expires_at is set based on config', function () {\n    config(['jetstream.invitation_expiry_days' => 14]);\n\n    livewire(AddTeamMember::class, ['team' => $this->team])\n        ->fillForm([\n            'email' => 'test@example.com',\n            'role' => 'editor',\n        ])\n        ->call('addTeamMember', $this->team);\n\n    $invitation = $this->team->fresh()->teamInvitations->first();\n    expect((int) round($invitation->expires_at->diffInDays(now(), absolute: true)))->toBe(14);\n});\n\ntest('team member invitations can be cancelled', function () {\n    livewire(AddTeamMember::class, ['team' => $this->team])\n        ->fillForm([\n            'email' => 'test@example.com',\n            'role' => 'admin',\n        ])\n        ->call('addTeamMember', $this->team);\n\n    expect($this->team->fresh()->teamInvitations)->toHaveCount(1);\n\n    $invitation = $this->team->fresh()->teamInvitations->first();\n\n    livewire(PendingTeamInvitations::class, ['team' => $this->team])\n        ->callAction(TestAction::make('cancelTeamInvitation')->table($invitation));\n\n    expect($this->team->fresh()->teamInvitations)->toHaveCount(0);\n});\n"
  },
  {
    "path": "tests/Feature/Teams/LeaveTeamTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Laravel\\Jetstream\\Http\\Livewire\\TeamMemberManager;\nuse Livewire\\Livewire;\n\nmutates(User::class);\n\ntest('users can leave teams', function () {\n    $user = User::factory()->withTeam()->create();\n\n    $user->currentTeam->users()->attach(\n        $otherUser = User::factory()->create(), ['role' => 'admin']\n    );\n\n    $this->actingAs($otherUser);\n\n    Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])\n        ->call('leaveTeam');\n\n    expect($user->currentTeam->fresh()->users)->toHaveCount(0);\n});\n\ntest('team owners cant leave their own team', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])\n        ->call('leaveTeam')\n        ->assertHasErrors(['team']);\n\n    expect($user->currentTeam->fresh())->not->toBeNull();\n});\n"
  },
  {
    "path": "tests/Feature/Teams/ManageTeamInvitationsTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Console\\Commands\\CleanupExpiredInvitationsCommand;\nuse App\\Livewire\\App\\Teams\\PendingTeamInvitations;\nuse App\\Models\\TeamInvitation;\nuse App\\Models\\User;\nuse Filament\\Actions\\Testing\\TestAction;\n\nmutates(TeamInvitation::class);\n\n// --- Model: isExpired() ---\n\ntest('invitation with future expires_at is not expired', function () {\n    $invitation = TeamInvitation::factory()->expiresIn(3)->make();\n\n    expect($invitation->isExpired())->toBeFalse();\n});\n\ntest('invitation with past expires_at is expired', function () {\n    $invitation = TeamInvitation::factory()->expired()->make();\n\n    expect($invitation->isExpired())->toBeTrue();\n});\n\ntest('invitation with null expires_at is expired', function () {\n    $invitation = TeamInvitation::factory()->withoutExpiry()->make();\n\n    expect($invitation->isExpired())->toBeTrue();\n});\n\ntest('invitation expiring exactly now is expired', function () {\n    $invitation = TeamInvitation::factory()->make([\n        'expires_at' => now(),\n    ]);\n\n    $this->travel(1)->seconds();\n\n    expect($invitation->isExpired())->toBeTrue();\n});\n\n// --- Extend invitation ---\n\ntest('team owner can extend an invitation', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $invitation = TeamInvitation::factory()->expired()->create([\n        'team_id' => $user->currentTeam->id,\n    ]);\n\n    expect($invitation->isExpired())->toBeTrue();\n\n    livewire(PendingTeamInvitations::class, ['team' => $user->currentTeam])\n        ->callAction(TestAction::make('extendTeamInvitation')->table($invitation));\n\n    $invitation->refresh();\n\n    expect($invitation->isExpired())->toBeFalse()\n        ->and($invitation->expires_at->isFuture())->toBeTrue();\n});\n\n// --- Copy invite link ---\n\ntest('team owner can copy invite link', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $user->currentTeam->id,\n    ]);\n\n    livewire(PendingTeamInvitations::class, ['team' => $user->currentTeam])\n        ->callAction(TestAction::make('copyInviteLink')->table($invitation))\n        ->assertNotified();\n});\n\n// --- Pending invitations table ---\n\ntest('pending invitations table shows invitations', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $invitation = TeamInvitation::factory()->create([\n        'team_id' => $user->currentTeam->id,\n        'email' => 'pending@example.com',\n    ]);\n\n    livewire(PendingTeamInvitations::class, ['team' => $user->currentTeam])\n        ->assertCanSeeTableRecords([$invitation]);\n});\n\n// --- Cleanup command ---\n\ntest('cleanup command purges old expired invitations', function () {\n    TeamInvitation::factory()->create([\n        'expires_at' => now()->subDays(31),\n    ]);\n\n    TeamInvitation::factory()->create([\n        'expires_at' => now()->subDays(40),\n    ]);\n\n    TeamInvitation::factory()->create([\n        'expires_at' => now()->addDay(),\n    ]);\n\n    $this->artisan(CleanupExpiredInvitationsCommand::class)\n        ->expectsOutputToContain('Purged 2 expired invitation(s)')\n        ->assertExitCode(0);\n\n    expect(TeamInvitation::count())->toBe(1);\n});\n\ntest('cleanup command skips recently expired invitations', function () {\n    TeamInvitation::factory()->create([\n        'expires_at' => now()->subDays(5),\n    ]);\n\n    $this->artisan(CleanupExpiredInvitationsCommand::class)\n        ->expectsOutputToContain('Purged 0 expired invitation(s)')\n        ->assertExitCode(0);\n\n    expect(TeamInvitation::count())->toBe(1);\n});\n\ntest('cleanup command handles empty table', function () {\n    $this->artisan(CleanupExpiredInvitationsCommand::class)\n        ->expectsOutputToContain('Purged 0 expired invitation(s)')\n        ->assertExitCode(0);\n});\n"
  },
  {
    "path": "tests/Feature/Teams/RemoveTeamMemberTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Laravel\\Jetstream\\Http\\Livewire\\TeamMemberManager;\nuse Livewire\\Livewire;\n\nmutates(User::class);\n\ntest('team members can be removed from teams', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $user->currentTeam->users()->attach(\n        $otherUser = User::factory()->create(), ['role' => 'admin']\n    );\n\n    Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])\n        ->set('teamMemberIdBeingRemoved', $otherUser->id)\n        ->call('removeTeamMember');\n\n    expect($user->currentTeam->fresh()->users)->toHaveCount(0);\n});\n\ntest('only team owner can remove team members', function () {\n    $user = User::factory()->withTeam()->create();\n\n    $user->currentTeam->users()->attach(\n        $otherUser = User::factory()->create(), ['role' => 'admin']\n    );\n\n    $this->actingAs($otherUser);\n\n    Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])\n        ->set('teamMemberIdBeingRemoved', $user->id)\n        ->call('removeTeamMember')\n        ->assertStatus(403);\n});\n"
  },
  {
    "path": "tests/Feature/Teams/TeamModelTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\Company;\nuse App\\Models\\Note;\nuse App\\Models\\Opportunity;\nuse App\\Models\\People;\nuse App\\Models\\Task;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Route;\nuse Laravel\\Jetstream\\Events\\TeamCreated;\nuse Laravel\\Jetstream\\Events\\TeamDeleted;\nuse Laravel\\Jetstream\\Events\\TeamUpdated;\n\nmutates(Team::class);\n\ntest('team has many people', function () {\n    $team = Team::factory()->create();\n    $people = People::factory()->create([\n        'team_id' => $team->id,\n    ]);\n\n    expect($team->people->first())->toBeInstanceOf(People::class)\n        ->and($team->people()->firstWhere('id', $people->id)?->id)->toBe($people->id);\n});\n\ntest('team has many companies', function () {\n    $team = Team::factory()->create();\n    $company = Company::factory()->create([\n        'team_id' => $team->id,\n    ]);\n\n    expect($team->companies->first())->toBeInstanceOf(Company::class)\n        ->and($team->companies()->firstWhere('id', $company->id)?->id)->toBe($company->id);\n});\n\ntest('team has many tasks', function () {\n    $team = Team::factory()->create();\n    $task = Task::factory()->create([\n        'team_id' => $team->id,\n    ]);\n\n    $teamTask = $team->tasks()->firstWhere('id', $task->id);\n\n    expect($teamTask)->toBeInstanceOf(Task::class)\n        ->and($teamTask?->id)->toBe($task->id);\n});\n\ntest('team has many opportunities', function () {\n    $team = Team::factory()->create();\n    $opportunity = Opportunity::factory()->create([\n        'team_id' => $team->id,\n    ]);\n\n    $teamOpportunity = $team->opportunities()->firstWhere('id', $opportunity->id);\n\n    expect($teamOpportunity)->toBeInstanceOf(Opportunity::class)\n        ->and($teamOpportunity?->id)->toBe($opportunity->id);\n});\n\ntest('team has many notes', function () {\n    $team = Team::factory()->create();\n    $note = Note::factory()->create([\n        'team_id' => $team->id,\n    ]);\n\n    $teamNote = $team->notes()->firstWhere('id', $note->id);\n\n    expect($teamNote)->toBeInstanceOf(Note::class)\n        ->and($teamNote?->id)->toBe($note->id);\n});\n\ntest('team is personal team', function () {\n    $personalTeam = Team::factory()->create([\n        'personal_team' => true,\n    ]);\n\n    $regularTeam = Team::factory()->create([\n        'personal_team' => false,\n    ]);\n\n    expect($personalTeam->isPersonalTeam())->toBeTrue()\n        ->and($regularTeam->isPersonalTeam())->toBeFalse();\n});\n\ntest('team has avatar', function () {\n    $team = Team::factory()->create([\n        'name' => 'Test Team',\n    ]);\n\n    expect($team->getFilamentAvatarUrl())->not->toBeNull();\n});\n\ntest('team events are dispatched', function () {\n    Event::fake();\n\n    $team = Team::factory()->create([\n        'name' => 'Test Team',\n        'slug' => 'test-team',\n    ]);\n\n    $team->update([\n        'name' => 'Updated Team',\n    ]);\n\n    $team->delete();\n\n    Event::assertDispatched(TeamCreated::class);\n    Event::assertDispatched(TeamUpdated::class);\n    Event::assertDispatched(TeamDeleted::class);\n});\n\ntest('slug is generated from name on creation', function () {\n    Event::fake()->except(\n        fn (string $event) => str_starts_with($event, 'eloquent.')\n    );\n\n    $user = User::factory()->create();\n\n    $team = Team::query()->create([\n        'name' => 'Acme Corp',\n        'user_id' => $user->id,\n        'personal_team' => true,\n    ]);\n\n    expect($team->slug)->toBe('acme-corp');\n});\n\ntest('unique slug is generated when duplicate name exists', function () {\n    Event::fake()->except(\n        fn (string $event) => str_starts_with($event, 'eloquent.')\n    );\n\n    $user = User::factory()->create();\n\n    Team::query()->create(['name' => 'Acme Corp', 'user_id' => $user->id, 'personal_team' => true]);\n    $second = Team::query()->create(['name' => 'Acme Corp', 'user_id' => $user->id, 'personal_team' => false]);\n    $third = Team::query()->create(['name' => 'Acme Corp', 'user_id' => $user->id, 'personal_team' => false]);\n\n    expect($second->slug)->toBe('acme-corp-1')\n        ->and($third->slug)->toBe('acme-corp-2');\n});\n\ntest('special characters are handled in slug generation', function () {\n    Event::fake()->except(\n        fn (string $event) => str_starts_with($event, 'eloquent.')\n    );\n\n    $user = User::factory()->create();\n\n    $team = Team::query()->create([\n        'name' => 'Héllo Wörld & Friends!',\n        'user_id' => $user->id,\n        'personal_team' => true,\n    ]);\n\n    expect($team->slug)->toBe('hello-world-friends');\n});\n\ntest('explicitly provided slug is not overwritten', function () {\n    Event::fake()->except(\n        fn (string $event) => str_starts_with($event, 'eloquent.')\n    );\n\n    $user = User::factory()->create();\n\n    $team = Team::query()->create([\n        'name' => 'My Team',\n        'slug' => 'custom-slug',\n        'user_id' => $user->id,\n        'personal_team' => true,\n    ]);\n\n    expect($team->slug)->toBe('custom-slug');\n});\n\ntest('random slug is generated when name has no alphanumeric characters', function () {\n    Event::fake()->except(\n        fn (string $event) => str_starts_with($event, 'eloquent.')\n    );\n\n    $user = User::factory()->create();\n\n    $team = Team::query()->create([\n        'name' => '!!!***',\n        'user_id' => $user->id,\n        'personal_team' => true,\n    ]);\n\n    expect($team->slug)->not->toBeEmpty()\n        ->and($team->slug)->toHaveLength(8);\n});\n\ntest('slug is stable when name is updated', function () {\n    $team = Team::factory()->create([\n        'name' => 'Original Name',\n        'slug' => 'original-name',\n    ]);\n\n    $team->update(['name' => 'Updated Name']);\n\n    expect($team->fresh()->slug)->toBe('original-name');\n});\n\ntest('auto-generated slug from reserved name gets suffixed', function () {\n    Event::fake()->except(\n        fn (string $event) => str_starts_with($event, 'eloquent.')\n    );\n\n    $user = User::factory()->create();\n\n    $team = Team::query()->create([\n        'name' => 'Admin',\n        'user_id' => $user->id,\n        'personal_team' => true,\n    ]);\n\n    expect($team->slug)->not->toBe('admin')\n        ->and($team->slug)->toStartWith('admin-');\n});\n\ntest('reserved slugs cover all top-level route segments', function () {\n    $routes = Route::getRoutes();\n\n    $excludedPrefixes = ['livewire', 'sanctum', 'filament', 'app', '__clockwork', 'clockwork', 'laravel-login-link-login', '_boost'];\n\n    $firstSegments = collect($routes->getRoutes())\n        ->map(fn ($route) => explode('/', trim($route->uri(), '/'))[0] ?? '')\n        ->filter(fn (string $segment) => $segment !== '' && ! str_starts_with($segment, '{'))\n        ->reject(fn (string $segment) => in_array($segment, $excludedPrefixes, true) || str_starts_with($segment, 'livewire-'))\n        ->unique()\n        ->values();\n\n    $missing = $firstSegments->reject(\n        fn (string $segment) => in_array($segment, Team::RESERVED_SLUGS, true)\n    );\n\n    expect($missing->toArray())->toBeEmpty(\n        'These route segments are missing from Team::RESERVED_SLUGS: '.$missing->implode(', ')\n    );\n});\n"
  },
  {
    "path": "tests/Feature/Teams/UpdateTeamMemberRoleTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Laravel\\Jetstream\\Http\\Livewire\\TeamMemberManager;\nuse Livewire\\Livewire;\n\nmutates(User::class);\n\ntest('team member roles can be updated', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $user->currentTeam->users()->attach(\n        $otherUser = User::factory()->create(), ['role' => 'admin']\n    );\n\n    Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])\n        ->set('managingRoleFor', $otherUser)\n        ->set('currentRole', 'editor')\n        ->call('updateRole');\n\n    expect($otherUser->fresh()->hasTeamRole(\n        $user->currentTeam->fresh(), 'editor'\n    ))->toBeTrue();\n});\n\ntest('only team owner can update team member roles', function () {\n    $user = User::factory()->withTeam()->create();\n\n    $user->currentTeam->users()->attach(\n        $otherUser = User::factory()->create(), ['role' => 'admin']\n    );\n\n    $this->actingAs($otherUser);\n\n    Livewire::test(TeamMemberManager::class, ['team' => $user->currentTeam])\n        ->set('managingRoleFor', $otherUser)\n        ->set('currentRole', 'editor')\n        ->call('updateRole')\n        ->assertStatus(403);\n\n    expect($otherUser->fresh()->hasTeamRole(\n        $user->currentTeam->fresh(), 'admin'\n    ))->toBeTrue();\n});\n"
  },
  {
    "path": "tests/Feature/Teams/UpdateTeamNameTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Livewire\\App\\Teams\\UpdateTeamName;\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Livewire\\Livewire;\n\nmutates(UpdateTeamName::class);\n\ntest('team name and slug can be updated', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'New Name', 'slug' => 'new-name'])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasNoFormErrors();\n\n    $team = $user->currentTeam->fresh();\n\n    expect($team->name)->toBe('New Name')\n        ->and($team->slug)->toBe('new-name');\n});\n\ntest('slug is required', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Test Team', 'slug' => ''])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasFormErrors(['slug' => 'required']);\n});\n\ntest('slug must be at least 3 characters', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Test Team', 'slug' => 'ab'])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasFormErrors(['slug']);\n});\n\ntest('slug must match valid format', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Test Team', 'slug' => 'Invalid Slug!'])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasFormErrors(['slug']);\n});\n\ntest('reserved slug is rejected on team update', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Admin', 'slug' => 'admin'])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasFormErrors(['slug']);\n});\n\ntest('slug must be unique across teams', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Team::factory()->create(['slug' => 'taken-slug']);\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Test Team', 'slug' => 'taken-slug'])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasFormErrors(['slug']);\n});\n\ntest('team can keep its own slug on update', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $currentSlug = $user->currentTeam->slug;\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Different Name', 'slug' => $currentSlug])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasNoFormErrors()\n        ->assertNotified();\n});\n\ntest('slug change triggers redirect', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'New Name', 'slug' => 'completely-new-slug'])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasNoFormErrors()\n        ->assertRedirect();\n});\n\ntest('same slug does not trigger redirect', function () {\n    $this->actingAs($user = User::factory()->withTeam()->create());\n\n    $currentSlug = $user->currentTeam->slug;\n\n    Livewire::test(UpdateTeamName::class, ['team' => $user->currentTeam])\n        ->fillForm(['name' => 'Different Name', 'slug' => $currentSlug])\n        ->call('updateTeamName', $user->currentTeam)\n        ->assertHasNoFormErrors()\n        ->assertNotified()\n        ->assertNoRedirect();\n});\n"
  },
  {
    "path": "tests/Feature/ValidTeamSlugTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Rules\\ValidTeamSlug;\nuse Illuminate\\Support\\Facades\\Validator;\n\nit('rejects slugs shorter than 3 characters', function (string $slug) {\n    $validator = Validator::make(\n        ['slug' => $slug],\n        ['slug' => [new ValidTeamSlug]],\n    );\n\n    expect($validator->fails())->toBeTrue()\n        ->and($validator->errors()->first('slug'))->toBe('The slug must be at least 3 characters.');\n})->with([\n    'ab',\n    'a',\n]);\n\nit('rejects invalid slug format', function (string $slug) {\n    $validator = Validator::make(\n        ['slug' => $slug],\n        ['slug' => [new ValidTeamSlug]],\n    );\n\n    expect($validator->fails())->toBeTrue()\n        ->and($validator->errors()->first('slug'))->toBe('The slug may only contain lowercase letters, numbers, and hyphens.');\n})->with([\n    'has spaces',\n    'has@special',\n    'HAS-UPPERCASE',\n    'has_underscore',\n    '-starts-with-hyphen',\n    'ends-with-hyphen-',\n]);\n\nit('rejects reserved slugs', function (string $slug) {\n    $validator = Validator::make(\n        ['slug' => $slug],\n        ['slug' => [new ValidTeamSlug]],\n    );\n\n    expect($validator->fails())->toBeTrue()\n        ->and($validator->errors()->first('slug'))->toBe('The slug is reserved and cannot be used.');\n})->with([\n    'login',\n    'admin',\n    'settings',\n    'api',\n    'billing',\n    'teams',\n    'dashboard',\n    'companies',\n    'people',\n    'tasks',\n]);\n\nit('allows valid non-reserved slugs', function (string $slug) {\n    $validator = Validator::make(\n        ['slug' => $slug],\n        ['slug' => [new ValidTeamSlug]],\n    );\n\n    expect($validator->passes())->toBeTrue();\n})->with([\n    'acme-corp',\n    'my-team',\n    'relaticle',\n    'team123',\n]);\n\nit('allows reserved slug when it matches the ignored value', function () {\n    $validator = Validator::make(\n        ['slug' => 'admin'],\n        ['slug' => [new ValidTeamSlug(ignoreValue: 'admin')]],\n    );\n\n    expect($validator->passes())->toBeTrue();\n});\n\nit('still rejects different reserved slug even with ignored value', function () {\n    $validator = Validator::make(\n        ['slug' => 'login'],\n        ['slug' => [new ValidTeamSlug(ignoreValue: 'admin')]],\n    );\n\n    expect($validator->fails())->toBeTrue();\n});\n"
  },
  {
    "path": "tests/Pest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * Test Suite Architecture (Testing Trophy)\n *\n * Layer 0: Static Analysis (PHPStan, Pint, Rector, Type Coverage 100%)\n * Layer 1: Architecture Tests (tests/Arch/)\n * Layer 2: Smoke Tests (tests/Smoke/) -- HTTP-level route smoke\n * Layer 3: Workflow Tests (tests/Feature/) -- bulk of suite\n * Layer 4: Browser Tests (tests/Browser/) -- critical paths only\n *\n * Conventions: see CLAUDE.md -> Testing section\n */\n\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Livewire\\Features\\SupportTesting\\Testable;\nuse Livewire\\Livewire;\nuse Pest\\Browser\\Playwright\\Playwright;\nuse Tests\\TestCase;\n\npest()->extend(TestCase::class)\n    ->use(RefreshDatabase::class)\n    ->in('Feature', 'Smoke', 'Browser');\n\nif (class_exists(Playwright::class)) {\n    Playwright::setTimeout(30_000);\n}\n\n/**\n * Livewire testing helper - replacement for pest-plugin-livewire.\n *\n * @param  class-string  $component\n * @param  array<string, mixed>  $params\n */\nfunction livewire(string $component, array $params = []): Testable\n{\n    return Livewire::test($component, $params);\n}\n"
  },
  {
    "path": "tests/Smoke/RouteTest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse App\\Models\\User;\nuse Illuminate\\Testing\\TestResponse;\nuse PHPUnit\\Framework\\Assert;\n\nuse function Spatie\\RouteTesting\\routeTesting;\n\nTestResponse::macro('assertNotServerError', function (): TestResponse {\n    /** @var TestResponse $this */\n    Assert::assertLessThan(\n        500,\n        $this->getStatusCode(),\n        \"Response returned a server error [{$this->getStatusCode()}].\"\n    );\n\n    return $this;\n});\n\nrouteTesting('smoke: all GET routes return non-500 response')\n    ->setUp(function (): void {\n        $user = User::factory()->withTeam()->create();\n\n        $this->actingAs($user);\n    })\n    ->ignoreRoutesWithMissingBindings()\n    ->exclude([\n        '__clockwork*',\n        'clockwork*',\n        'livewire-*',\n        'sanctum/csrf-cookie',\n        'auth/redirect/*',\n        'auth/callback/*',\n        'email/verify/*',\n        'email-verification/verify/*',\n        'filament/exports/*/download',\n        'filament/imports/*/failed-rows/download',\n        'team-invitations/*',\n        'password-reset/*',\n        'reset-password/*',\n        'discord',\n        'user/confirm-password',\n        'up',\n        'docs/api*',\n        'api/*',\n    ])\n    ->assertNotServerError();\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Tests;\n\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\n\nabstract class TestCase extends BaseTestCase\n{\n    //\n}\n"
  },
  {
    "path": "tests/fixtures/imports/companies.csv",
    "content": "name,account_owner_email\nAcme Corporation,owner@example.com\nTechStart Inc,tech@example.com\nGlobal Services,global@example.com\nLocal Business,local@example.com\nEnterprise Co,enterprise@example.com\n"
  },
  {
    "path": "vite.config.js",
    "content": "import {defineConfig} from 'vite';\nimport laravel from 'laravel-vite-plugin';\nimport tailwindcss from \"@tailwindcss/vite\";\nimport path from 'path';\n\nexport default defineConfig({\n    plugins: [\n        laravel({\n            input: [\n                // Marketing website\n                'resources/css/app.css',\n                'resources/js/app.js',\n                'resources/js/motion.js',\n                // Filament\n                'resources/css/filament/app/theme.css',\n                'resources/css/filament/admin/theme.css',\n                // Documentation\n                'packages/Documentation/resources/css/documentation.css',\n                'packages/Documentation/resources/js/documentation.js',\n            ],\n            refresh: true,\n        }),\n        tailwindcss(),\n    ],\n    resolve: {\n        alias: {\n            '@': '/resources/js',\n            '~': path.resolve(__dirname, './resources'),\n        },\n    },\n});\n"
  }
]